diff --git a/platform-job-index/src/main/java/com/lyms/platform/job/index/restore/data/ConvertHelper.java b/platform-job-index/src/main/java/com/lyms/platform/job/index/restore/data/ConvertHelper.java index 3a6d7bb..2840f76 100644 --- a/platform-job-index/src/main/java/com/lyms/platform/job/index/restore/data/ConvertHelper.java +++ b/platform-job-index/src/main/java/com/lyms/platform/job/index/restore/data/ConvertHelper.java @@ -24,9 +24,66 @@ public class ConvertHelper { private static String AUTO_WORKER = "system-worker"; + private static final String YES_OR_NO = "yesOrNo"; + private static java.util.Map> cachedField = new HashMap<>(); + private static final Map content = new HashMap<>(); + + static { + content.put("ycxjbs", "遗传性疾病史"); + content.put("jsjbs", "精神疾病史"); + content.put("xtjx", "先天畸形"); + content.put("xtyx", "先天愚型"); + content.put("ny", "聋哑"); + content.put("mr", "盲人"); + content.put("cel", "唇腭裂"); + content.put("xyb", "血友病"); + content.put("sm", "色盲"); + content.put("npx", "牛皮癣"); + content.put("st", "双胎"); + content.put("gb", "肝病"); + content.put("jh", "结核"); + content.put("xy", "吸烟"); + + content.put("yj", "饮酒"); + content.put("fyyw", "服用药物"); + content.put("jcydyhwz", "接触有毒有害物质"); + content.put("jcfsx", "接触放射线"); + content.put("jcydyhwz", "接触有毒有害物质"); + content.put("fzym", "风疹疫苗"); + content.put("ygym", "乙肝疫苗"); + content.put("mzym", "麻疹疫苗"); + content.put("psflds", "破伤风类毒素"); + content.put("qmsgm", "青霉素过敏"); + content.put("xfmsgm", "先锋霉素过敏"); + content.put("halywgm", "磺胺类药物过敏"); + content.put("pgc", "剖宫产"); + content.put("zgjlbc", "子宫肌瘤剥除"); + content.put("lwqc", "阑尾切除"); + content.put("ywrsss", "异位妊娠手术"); + content.put("yq1", "孕前1个月"); + content.put("yq2", "孕前2个月"); + content.put("yq3", "孕前3个月"); + content.put("yzq1", "孕早期1个月"); + content.put("yzq2", "孕早期2个月"); + content.put("yzq3", "孕早期3个月"); + + + content.put("ex", "恶心"); + content.put("ot", "呕吐"); + content.put("yh", "眼花"); + content.put("xm", "胸闷"); + content.put("fz", "浮肿"); + content.put("ydcx", "阴道出血"); + content.put("ft", "腹痛"); + content.put("tt", "头痛"); + content.put("ft", "腹痛"); + + + } + private static Properties properties = new Properties(); static { @@ -108,6 +165,11 @@ public class ConvertHelper { hospitals.setPublishId(0); hospitals.setCode(organization.getShortCode()); hospitals.setPublishName(AUTO_WORKER); + hospitals.setOnline(0); + //院内系统设置医院为试运行 正式运行的时候需要设置医院online + if (null != organization.getStatus() && (0 == organization.getStatus() || 1 == organization.getStatus())) { + hospitals.setOnline(1); + } return hospitals; } @@ -163,9 +225,14 @@ public class ConvertHelper { if (obj instanceof Date) { dataMap.put("v", DateUtil.getyyyy_MM_dd((Date) obj)); } else { - dataMap.put("v", obj); + String str =getAntExChuValue(key, antExChuModel); + if(null!=str){ + dataMap.put("v", str); + }else{ + dataMap.put("v", obj); + } } - if(null!=obj){ + if (null != obj) { list.add(dataMap); } } @@ -173,8 +240,71 @@ public class ConvertHelper { return JsonUtil.array2JsonString(list); } - private static List getField(AntExChuModel antExChuModel) { + private static String getAntExChuValue(String key, AntExChuModel antExChuModel) { + StringBuilder sb = new StringBuilder(); + Map map = null; + if ("既往史".equals(key)) { + map = JsonUtil.str2Obj(antExChuModel.getPastHistory(), Map.class); + } else if ("家族史".equals(key)) { + map = JsonUtil.str2Obj(antExChuModel.getFamilyHistory(), Map.class); + } else if ("个人史".equals(key)) { + map = JsonUtil.str2Obj(antExChuModel.getPersonalHistory(), Map.class); + } else if ("疫苗接种史".equals(key)) { + map = JsonUtil.str2Obj(antExChuModel.getYmjzHistory(), Map.class); + } else if ("药物过敏史".equals(key)) { + map = JsonUtil.str2Obj(antExChuModel.getYwgmHistory(), Map.class); + } else if ("妇科手术史".equals(key)) { + map = JsonUtil.str2Obj(antExChuModel.getFksxHistory(), Map.class); + } else if ("叶酸服用".equals(key)) { + map = JsonUtil.str2Obj(antExChuModel.getYsfyHistory(), Map.class); + } else if ("本次妊娠情况".equals(key)) { + map = JsonUtil.str2Obj(antExChuModel.getCestationInfo(), Map.class); + } + return replace(map, sb); + } + + public static void main(String [] args){ + AntExChuModel antExChuModel=new AntExChuModel(); + antExChuModel.setFamilyHistory("{\"yesOrNo\":\"no\"}"); + antExChuModel.setPregnancyTimes(3); + antExChuModel.setHeight("3.2"); + antExChuModel.setYsfyHistory("{\"yesOrNo\":\"yes\",\"yzq3\":true}"); + System.out.print(convertAntExChuResult(antExChuModel)); + } + + private static String replace(Map map, StringBuilder sb) { + if(null==map){ + return null; + } + if ("yes".equals(map.get(YES_OR_NO))) { + Set> m = map.entrySet(); + Iterator> it = m.iterator(); + while (it.hasNext()) { + Map.Entry ma = it.next(); + if (ma.getKey().equals(YES_OR_NO)) { + continue; + } + if ("true".equals(ma.getValue() + "")) { + if (content.containsKey(ma.getKey())) { + sb.append(content.get(ma.getKey())).append(','); + } + } + } + + if (map.containsKey("qtText")) { + sb.append(map.get("qtText")); + } + if(sb.toString().endsWith(",")){ + return sb.substring(0,sb.length()-1); + } + } else if ("no".equals(map.get(YES_OR_NO))) { + sb.append("无"); + } + return sb.toString(); + } + + private static List getField(AntExChuModel antExChuModel) { if (cachedField.containsKey(antExChuModel.getClass())) { return cachedField.get(antExChuModel.getClass()); } diff --git a/platform-job-index/src/main/java/com/lyms/platform/job/index/restore/data/SyncDataWork.java b/platform-job-index/src/main/java/com/lyms/platform/job/index/restore/data/SyncDataWork.java index d37aae7..9ee0add 100644 --- a/platform-job-index/src/main/java/com/lyms/platform/job/index/restore/data/SyncDataWork.java +++ b/platform-job-index/src/main/java/com/lyms/platform/job/index/restore/data/SyncDataWork.java @@ -16,6 +16,7 @@ import com.lyms.platform.pojo.Patients; import com.lyms.platform.query.AntExChuQuery; import com.lyms.platform.query.BasicConfigQuery; import com.lyms.platform.query.PatientsQuery; +import com.lymsh.mommybaby.maindata.enumdata.YnEnum; import com.lymsh.mommybaby.maindata.model.*; import com.lymsh.mommybaby.maindata.service.*; import org.apache.commons.collections.CollectionUtils; @@ -27,6 +28,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import org.springframework.util.StopWatch; import java.io.File; import java.io.RandomAccessFile; @@ -90,6 +92,9 @@ public class SyncDataWork { private ReportsService reportsService; @Autowired private DoctorUsersPatientsMapsService doctorUsersPatientsMapsService; + @Autowired + private MembersService membersService; + @Value("#{configProperties['file.path']}") private String FILE_PATH; //最后一次同步时间 @@ -129,7 +134,7 @@ public class SyncDataWork { try { lastSyncTime=System.currentTimeMillis(); RandomAccessFile randomAccessFile=new RandomAccessFile(new File(FILE_PATH),"rw"); - randomAccessFile.writeLong(lastSyncTime); + randomAccessFile.writeBytes(lastSyncTime + ""); randomAccessFile.close(); }catch (Exception e){ logger.error("read last sync time error.",e); @@ -195,7 +200,7 @@ public class SyncDataWork { //获取最后一次同步的时间 如果为-1就表示是全量同步 readLastSyncTime(); logger.info("start sync at " + DateUtil.getyyyy_MM_dd(new Date())); - //先加载省市区 + //先加载省市区 loadMamiAllRegion(); OrganizationQuery organizationQuery = new OrganizationQuery(); @@ -208,15 +213,17 @@ public class SyncDataWork { countDownLatch =new CountDownLatch(organizationList.size()); for (Organization organization : organizationList) { HospitalsQuery hospitalsQuery = new HospitalsQuery(); - hospitalsQuery.setForeignId(organization.getId() + ""); +// hospitalsQuery.setForeignId(organization.getId() + ""); + hospitalsQuery.setTitle(organization.getName()); hospitalsQuery.setYn(YnEnums.YES.getId()); List hospitalsList = hospitalsService.queryHospitals(hospitalsQuery); if (CollectionUtils.isNotEmpty(hospitalsList)) { - hospitals = fullHospital(organization); - hospitals.setId(hospitalsList.get(0).getId()); - hospitalsService.updateHospitals(hospitals); + hospitals=hospitalsList.get(0); +// hospitals = fullHospital(organization); + /* hospitals.setId(hospitalsList.get(0).getId()); + hospitalsService.updateHospitals(hospitals);*/ } else { - fullHospital(organization); + hospitals= fullHospital(organization); hospitalsService.addHospitals(hospitals); } @@ -245,6 +252,7 @@ public class SyncDataWork { private java.util.Map userMapping = new HashMap<>(); public SyncWork(String hospitalId,CountDownLatch countDownLatch) { + setName("SyncWork-"+hospitalId); this.hospitalId = hospitalId; this.countDownLatch=countDownLatch; } @@ -252,7 +260,9 @@ public class SyncDataWork { @Override public void run() { try { + long l =System.currentTimeMillis(); logger.info("begin sync work hospital:" + hospitalId + ",at time " + DateUtil.getyyyy_MM_dd(new Date())); + StopWatch stopWatch=new StopWatch("SyncWork-"+hospitalId); //查询出该医院所以的医生用户 UsersQuery usersQuery = new UsersQuery(); usersQuery.setYn(YnEnums.YES.getId()); @@ -260,28 +270,43 @@ public class SyncDataWork { if(-1!=lastSyncTime){ usersQuery.setGteModified(new Date(lastSyncTime)); } + stopWatch.start("queryUsers"); List userses = usersService.queryUsers(usersQuery); + stopWatch.stop(); + logger.info(stopWatch.toString()); DoctorUsers doctorUsers = null; + if (CollectionUtils.isNotEmpty(userses)) { for (Users users : userses) { DoctorUsersQuery doctorUsersQuery = new DoctorUsersQuery(); - doctorUsersQuery.setForeignId(users.getId() + ""); +// doctorUsersQuery.setForeignId(users.getId() + ""); doctorUsersQuery.setYn(YnEnums.YES.getId()); + doctorUsersQuery.setHospitalId(orgMapToId.get(hospitalId)); + doctorUsersQuery.setUsername(users.getName()); + StopWatch stopWatch1=new StopWatch("SyncWork-"+hospitalId+",userId:"+users.getId()); + stopWatch1.start("queryDoctorUsers"); List doctorUsersList = doctorUsersService.queryDoctorUsers(doctorUsersQuery); + stopWatch1.stop(); if (CollectionUtils.isNotEmpty(doctorUsersList)) { - doctorUsers = ConvertHelper.convertUsers(users); + doctorUsers=doctorUsersList.get(0); + /* doctorUsers = ConvertHelper.convertUsers(users); doctorUsers.setHospitalId(orgMapToId.get(hospitalId)); + stopWatch1.start("updateDoctorUsers"); doctorUsersService.updateDoctorUsers(doctorUsers); + stopWatch1.stop();*/ } else { //医生用户转换 doctorUsers = ConvertHelper.convertUsers(users); doctorUsers.setHospitalId(orgMapToId.get(hospitalId)); + stopWatch1.start("addDoctorUsers"); doctorUsersService.addDoctorUsers(doctorUsers); + stopWatch1.stop(); } if (null != doctorUsers) { userMapping.put(users.getId(), doctorUsers.getId()); } + logger.info(stopWatch1.toString()); } } @@ -291,10 +316,15 @@ public class SyncDataWork { if(-1!=lastSyncTime){ patientsQuery1.setGteModified(new Date(lastSyncTime)); } - + StopWatch stopWatch2=new StopWatch("SyncWork-"+hospitalId+"-query patient"); + stopWatch2.start("queryPregnantWithQuery"); List patientses = yunBookbuildingService.queryPregnantWithQuery(patientsQuery1); - while (CollectionUtils.isNotEmpty(patientses)) { + stopWatch2.stop(); + logger.info(stopWatch2.toString()); + logger.info("query patient by hospitalId:"+ hospitalId+", list size :" + patientses.size()); + if(CollectionUtils.isNotEmpty(patientses)) { for (Patients patients : patientses) { + StopWatch stopWatch3=new StopWatch("SyncWork-"+hospitalId+"-patient-"+patients.getId()); com.lymsh.mommybaby.maindata.model.Patients mamiPatient = ConvertHelper.convertPatient(patients); DoctorUsersPatientsMaps doctorUsersPatientsMaps = new DoctorUsersPatientsMaps(); doctorUsersPatientsMaps.setCreated(new Date()); @@ -305,14 +335,19 @@ public class SyncDataWork { //设置为待处理 doctorUsersPatientsMaps.setStatus(1); doctorUsersPatientsMaps.setStatusName("待处理"); - + stopWatch3.start("aouPatients"); //增加建档记录 patientsService.aouPatients(mamiPatient); + stopWatch3.stop(); doctorUsersPatientsMaps.setPatientId(mamiPatient.getId()); if (StringUtils.isNotEmpty(patients.getBookbuildingDoctor())) { doctorUsersPatientsMaps.setDoctorUserId(userMapping.get(Integer.valueOf(patients.getBookbuildingDoctor()))); + stopWatch3.start("aouDoctorUsersPatientsMaps"); doctorUsersPatientsMapsService.aouDoctorUsersPatientsMaps(doctorUsersPatientsMaps); + stopWatch3.stop(); } + //绑定用户 + bandingMember(mamiPatient); AntExChuQuery antExChuQuery = new AntExChuQuery(); antExChuQuery.setYn(YnEnums.YES.getId()); @@ -342,15 +377,22 @@ public class SyncDataWork { reports.setHospitalName(organization.getName()); } } + stopWatch3.start("aouReports"); reportsService.aouReports(reports); + stopWatch3.stop(); com.lymsh.mommybaby.maindata.model.Patients p = new com.lymsh.mommybaby.maindata.model.Patients(); p.setLastReportId(reports.getId()); p.setLastReportDoctorName(reports.getDoctorName()); p.setId(mamiPatient.getId()); + stopWatch3.start("updatePatients"); patientsService.updatePatients(p); + stopWatch3.stop(); + logger.info(stopWatch3.toString()); + } } } + logger.info("hospital "+hospitalId+",costTime:"+(System.currentTimeMillis()-l)); } catch (Exception e) { e.printStackTrace(); } finally { @@ -358,4 +400,41 @@ public class SyncDataWork { } } } + private void bandingMember(com.lymsh.mommybaby.maindata.model.Patients patients){ + MembersQuery membersQuery = new MembersQuery(); + if(StringUtils.isEmpty(patients.getPhone())){ + return; + } + membersQuery.setPhone(patients.getPhone()); + membersQuery.setYn(YnEnum.yes.getId()); + List membersList = membersService.queryMembers(membersQuery); + if (membersList.size() > 0) { + membersQuery = new MembersQuery(); + membersQuery.setPatientId(patients.getId()); + membersQuery.setYn(YnEnum.yes.getId()); + List membersList1 = membersService.queryMembers(membersQuery); + for (Members members:membersList1) { + Members m = new Members(); + m.setId(members.getId()); + m.setYn(YnEnum.no.getId()); + membersService.updateMembers(m); + } + for (Members members:membersList) { + Members temp = new Members(); + temp.setId(members.getId()); + temp.setPatientId(patients.getId()); + temp.setBabyBirth(patients.getBirth()); + temp.setLastMenses(patients.getLastMenses()); + temp.setDueDate(patients.getDueDate()); + //member status 为2时不需要修改 + if(null==members.getStatus()||2!=members.getStatus() ){ + temp.setStatus(patients.getType()); + } + + temp.setYn(YnEnum.yes.getId()); + membersService.updateMembers(temp); +// updateBaby(members, patients); + } + } + } } \ No newline at end of file diff --git a/platform-job-index/src/main/resources/lable.properties b/platform-job-index/src/main/resources/lable.properties index 2d0b5f1..234d883 100644 --- a/platform-job-index/src/main/resources/lable.properties +++ b/platform-job-index/src/main/resources/lable.properties @@ -31,4 +31,5 @@ vulva=外阴 vagina=阴道 cervical=宫颈 uterus=子宫 -fujian=附件 \ No newline at end of file +fujian=附件 +bp=血压 \ No newline at end of file