|  |  | 
 |  |  | import java.time.Period; | 
 |  |  | import java.time.ZoneId; | 
 |  |  | import java.time.temporal.ChronoUnit; | 
 |  |  | import java.util.Date; | 
 |  |  | import java.util.HashMap; | 
 |  |  | import java.util.List; | 
 |  |  | import java.util.Map; | 
 |  |  | import java.util.*; | 
 |  |  | import java.util.stream.Collectors; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  | 
 |  |  |  | 
 |  |  |     @Value("${defaultPwd}") | 
 |  |  |     private String defaultPwd; | 
 |  |  |  | 
 |  |  |     @Value("${noLongTask}") | 
 |  |  |     private List<String> noLongTask; | 
 |  |  |  | 
 |  |  |     public Boolean generalInterface(Map dataMap) { | 
 |  |  |         Map XiaoXiTou = (Map) dataMap.get("XiaoXiTou"); | 
 |  |  | 
 |  |  |         } | 
 |  |  |         if (StringUtils.isNotEmpty(externalDept.getShiJianDM()) && externalDept.getShiJianDM().equals("1")) { | 
 |  |  |             int i = sysDeptMapper.insertDept(sysDept); | 
 |  |  |             log.info("ServiceExternalServiceImpl---addDeptInfo是否新增成功:{}", i); | 
 |  |  |             log.info("ServiceExternalServiceImpl---addDeptInfo01是否新增成功:{}", i); | 
 |  |  |         } else { | 
 |  |  |             int i = sysDeptMapper.updateDept(sysDept); | 
 |  |  |             log.info("ServiceExternalServiceImpl---addDeptInfo是否修改成功:{}", i); | 
 |  |  |             log.info("ServiceExternalServiceImpl---addDeptInfo02是否修改成功:{}", i); | 
 |  |  |         } | 
 |  |  |         return true; | 
 |  |  |     } | 
 |  |  | 
 |  |  |         sysUser.setUserName(externalUserInfo.getYongHuDLM()); | 
 |  |  |         sysUser.setOrgid(externalUserInfo.getZuZhiJGID()); | 
 |  |  |         //根据userName判断一下,是不是之前有新增 | 
 |  |  |         SysUser sysUser1 = sysUserMapper.selectUserByUserName(externalUserInfo.getYongHuDLM()); | 
 |  |  |  | 
 |  |  |         SysUser sysUser1 = null; | 
 |  |  |         List<SysUser> sysUserList = sysUserMapper.selectUserList(sysUser); | 
 |  |  |         if (CollectionUtils.isNotEmpty(sysUserList)) { | 
 |  |  |             sysUser1 = sysUserList.get(0); | 
 |  |  |             if (sysUserList.size() > 1) sysUser1 = getUser(sysUserList); | 
 |  |  |         } | 
 |  |  |         sysUser.setGuid(externalUserInfo.getZuZhiJGID()); | 
 |  |  |         sysUser.setNickName(externalUserInfo.getYongHuXM()); | 
 |  |  |         sysUser.setUserType(""); | 
 |  |  |         sysUser.setDeptId(null); | 
 |  |  |         sysUser.setTitle(null); | 
 |  |  |  | 
 |  |  |         BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); | 
 |  |  |         sysUser.setPassword(passwordEncoder.encode(defaultPwd)); | 
 |  |  |  | 
 |  |  |         sysUser.setHisUserId(externalUserInfo.getYongHuID()); | 
 |  |  |         sysUser.setPhonenumber(externalUserInfo.getLianXiDH()); | 
 |  |  | 
 |  |  |         } | 
 |  |  |         sysUser.setBirthday(externalUserInfo.getChuShengRQ()); | 
 |  |  |         if (ObjectUtils.isEmpty(sysUser1)) { | 
 |  |  |             BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); | 
 |  |  |             sysUser.setPassword(passwordEncoder.encode(defaultPwd)); | 
 |  |  |             int i = sysUserMapper.insertUser(sysUser); | 
 |  |  |             log.info("ServiceExternalServiceImpl---addDeptInfo是否新增成功:{}", i); | 
 |  |  |         } else { | 
 |  |  |             sysUser.setUserId(sysUser1.getUserId()); | 
 |  |  |             int i = sysUserMapper.updateUser(sysUser); | 
 |  |  |             log.info("ServiceExternalServiceImpl---addDeptInfo是否修改成功:{}", i); | 
 |  |  |             log.info("ServiceExternalServiceImpl---addDeptInfo是否修改成功03:{}", i); | 
 |  |  |         } | 
 |  |  |         return true; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     private SysUser getUser(List<SysUser> sysUserList) { | 
 |  |  |         SysUser sysUser = null; | 
 |  |  |         if (CollectionUtils.isNotEmpty(sysUserList) && sysUserList.size() > 1) { | 
 |  |  |             // 按create_time降序排序,获取最新的记录 | 
 |  |  |             List<SysUser> sortedList = sysUserList.stream().sorted(Comparator.comparing(SysUser::getCreateTime).reversed()).collect(Collectors.toList()); | 
 |  |  |  | 
 |  |  |             // 第一条(最新的)赋值给sysUser1 | 
 |  |  |             sysUser = sortedList.get(0); | 
 |  |  |  | 
 |  |  |             // 获取需要删除的ID(从第二条开始) | 
 |  |  |             List<Long> idsToDelete = sortedList.stream().skip(1).map(SysUser::getUserId).collect(Collectors.toList()); | 
 |  |  |             Long[] idArray = idsToDelete.toArray(new Long[0]); | 
 |  |  |             // 批量删除其他记录 | 
 |  |  |             if (!idsToDelete.isEmpty()) { | 
 |  |  |                 sysUserMapper.deleteUserByIds(idArray); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         return sysUser; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public Boolean addOrganInfo(Map dataMap) { | 
 |  |  | 
 |  |  |         externalInHospPatientInfo.setZhuZhiYSID(externalInDeptPatientInfo.getZhuZhiYSID()); | 
 |  |  |         externalInHospPatientInfo.setZhuZhiYSXM(externalInDeptPatientInfo.getZhuZhiYSXM()); | 
 |  |  |         externalInHospPatientInfo.setRuYuanSJ(externalInDeptPatientInfo.getRuYuanSJ()); | 
 |  |  |         externalInHospPatientInfo.setJingGuanYSID(externalInDeptPatientInfo.getJingGuanYSID()); | 
 |  |  |         externalInHospPatientInfo.setJingGuanYSXM(externalInDeptPatientInfo.getJingGuanYSXM()); | 
 |  |  |         externalInHospPatientInfo.setLianXiDH(ObjectUtils.isNotEmpty(BingRenXX.get("LianXiDH")) ? BingRenXX.get("LianXiDH").toString() : null); | 
 |  |  |         externalInHospPatientInfo.setDangQianCWID(ObjectUtils.isNotEmpty(BingRenXX.get("DangQianCWID")) ? BingRenXX.get("DangQianCWID").toString() : null); | 
 |  |  |         externalInHospPatientInfo.setDangQianCWMC(ObjectUtils.isNotEmpty(BingRenXX.get("DangQianCWMC")) ? BingRenXX.get("DangQianCWMC").toString() : null); | 
 |  |  | 
 |  |  |         //新增患者基本信息新增或修改 | 
 |  |  |         PatArchive patArchive = addPatArchive(externalInHospPatientInfo, externalInHospPatientAddrInfo, externalInHospPatientLiaisonInfo); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         PatMedInhosp patMedInhosp = new PatMedInhosp(); | 
 |  |  |         patMedInhosp.setInhospno(externalInHospPatientInfo.getBingAnHao()); | 
 |  |  |         patMedInhosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID()); | 
 |  |  | 
 |  |  |         if (CollectionUtils.isNotEmpty(patMedInhospList)) { | 
 |  |  |             patMedInhosp1.setUpdateTime(new Date()); | 
 |  |  |             patMedInhosp1.setOrgid(ObjectUtils.isNotEmpty(BingRenXX) && ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null); | 
 |  |  |             if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedInhosp1.getOrgid())) { | 
 |  |  |                 //不需要长期任务随访 | 
 |  |  |                 patMedInhosp1.setFuflag("1"); | 
 |  |  |             } | 
 |  |  |             int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); | 
 |  |  |             if (i != 1) return false; | 
 |  |  |         } else { | 
 |  |  | 
 |  |  |             patMedInhosp1.setPatname(patArchive.getName()); | 
 |  |  |  | 
 |  |  |             patMedInhosp1.setCreateTime(new Date()); | 
 |  |  |             if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedInhosp1.getOrgid())) { | 
 |  |  |                 //不需要长期任务随访 | 
 |  |  |                 patMedInhosp1.setFuflag("1"); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             int i = patMedInhospMapper.insertPatMedInhosp(patMedInhosp1); | 
 |  |  |             if (i != 1) return false; | 
 |  |  |         } | 
 |  |  | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             try { | 
 |  |  |                 patMedInhosp1.setFudate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(SuiFangJH.get("SuiFangRQ").toString())); | 
 |  |  |                 if (!Objects.isNull(SuiFangJH.get("SuiFangRQ"))) | 
 |  |  |                     patMedInhosp1.setFudate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(SuiFangJH.get("SuiFangRQ").toString())); | 
 |  |  |             } catch (ParseException e) { | 
 |  |  |                 e.printStackTrace(); | 
 |  |  |             } | 
 |  |  | 
 |  |  |         if (CollectionUtils.isNotEmpty(patMedInhospList)) { | 
 |  |  |             patMedInhosp1.setUpdateTime(new Date()); | 
 |  |  |             patMedInhosp1.setOrgid(ObjectUtils.isNotEmpty(BingRenXX) && ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null); | 
 |  |  |             if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedInhosp1.getOrgid())) { | 
 |  |  |                 //不需要长期任务随访 | 
 |  |  |                 patMedInhosp1.setFuflag("1"); | 
 |  |  |             } | 
 |  |  |             int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); | 
 |  |  |             if (i != 1) return false; | 
 |  |  |         } else { | 
 |  |  | 
 |  |  |             patMedInhosp1.setPatname(patArchive.getName()); | 
 |  |  |  | 
 |  |  |             patMedInhosp1.setCreateTime(new Date()); | 
 |  |  |             if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedInhosp1.getOrgid())) { | 
 |  |  |                 //不需要长期任务随访 | 
 |  |  |                 patMedInhosp1.setFuflag("1"); | 
 |  |  |             } | 
 |  |  |             int i = patMedInhospMapper.insertPatMedInhosp(patMedInhosp1); | 
 |  |  |             if (i != 1) return false; | 
 |  |  |         } | 
 |  |  | 
 |  |  |         patMedOuthosp.setOuthospno(externalInHospPatientInfo.getBingAnHao()); | 
 |  |  |         patMedOuthosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID()); | 
 |  |  |         List<PatMedOuthosp> patMedOuthosps = patMedOuthospMapper.selectPatMedOuthospList(patMedOuthosp); | 
 |  |  |         for (PatMedOuthosp patMedOuthosp1 : patMedOuthosps) { | 
 |  |  |             PatArchive pa = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosp1.getPatid()); | 
 |  |  |             if (patArchive.getBirthdate() != null) { | 
 |  |  |                 Map<String, String> map = calculateAge(pa.getBirthdate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(), LocalDate.now()); | 
 |  |  |                 pa.setAge(ObjectUtils.isNotEmpty(map.get("age")) ? Long.valueOf(map.get("age")) : null); | 
 |  |  |                 pa.setAgeUnit(map.get("ageUnit")); | 
 |  |  |                 pa.setAge2(ObjectUtils.isNotEmpty(map.get("age2")) ? Long.valueOf(map.get("age2")) : null); | 
 |  |  |                 pa.setAgeUnit2(map.get("ageUnit2")); | 
 |  |  |                 patMedOuthosp1.setAge(pa.getAge() + pa.getAgeUnit() + pa.getAge2() + pa.getAgeUnit2()); | 
 |  |  |                 patMedOuthosp1.setTelcode(patArchive.getTelcode()); | 
 |  |  |                 patMedOuthosp1.setIdcardno(patArchive.getIdcardno()); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         patMedOuthosp.setPatid(patArchive.getId()); | 
 |  |  |         patMedOuthosp.setPatno(externalInHospPatientInfo.getBingAnHao()); | 
 |  |  | 
 |  |  |         patMedOuthosp.setAdmitdate(externalJZInfo.getJiuZhenRQ()); | 
 |  |  |         patMedOuthosp.setOrgid(FaSongJGID); | 
 |  |  |         patMedOuthosp.setHospitalname(FaSongJGMC); | 
 |  |  |         patMedOuthosp.setIdcardno(patArchive.getIdcardno()); | 
 |  |  |  | 
 |  |  |         //这个需要等HIS那边告诉取哪个字段,现在还是不对的 | 
 |  |  |         patMedOuthosp.setFudate(externalJZInfo.getSfrq()); | 
 |  |  |  | 
 |  |  |         for (ExternalDiagnosisInfo externalDiagnosisInfo : externalDiagnosisInfoList) { | 
 |  |  |             if (externalDiagnosisInfo.getZhenDuanLBMC().equals("主诊断")) { | 
 |  |  | 
 |  |  |                 patMedOuthosp.setDrcode(externalDiagnosisInfo.getZhenDuanYSID()); | 
 |  |  |                 patMedOuthosp.setDrname(externalDiagnosisInfo.getZhenDuanYSXM()); | 
 |  |  |                 patMedOuthosp.setIcd10code(externalDiagnosisInfo.getIcd10()); | 
 |  |  |                 patMedOuthosp.setFuflag("0"); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         for (ExternalWZInfo externalWZInfo : ExternalWZInfoList) { | 
 |  |  | 
 |  |  |         if (CollectionUtils.isNotEmpty(patMedOuthosps)) { | 
 |  |  |             patMedOuthosp.setId(patMedOuthosps.get(0).getId()); | 
 |  |  |             patMedOuthosp.setUpdateTime(new Date()); | 
 |  |  |             if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedOuthosp.getOrgid())) { | 
 |  |  |                 //不需要长期任务随访,由医生自己去随访(丽水中医院首次提出) | 
 |  |  |                 patMedOuthosp.setFuflag("1"); | 
 |  |  |             } | 
 |  |  |             i = patMedOuthospMapper.updatePatMedOuthosp(patMedOuthosp); | 
 |  |  |         } else { | 
 |  |  |             patMedOuthosp.setCreateTime(new Date()); | 
 |  |  |             patMedOuthosp.setUpdateTime(new Date()); | 
 |  |  |             if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedOuthosp.getOrgid())) { | 
 |  |  |                 //不需要长期任务随访 | 
 |  |  |                 patMedOuthosp.setFuflag("1"); | 
 |  |  |             } | 
 |  |  |             i = patMedOuthospMapper.insertPatMedOuthosp(patMedOuthosp); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | //        //先通过身份证和科室查询该患者是否有需要随访的(景宁提出来的) | 
 |  |  | //        if (patMedOuthosp.getOrgid().equals("47255004333112711A1001") && StringUtils.isNotEmpty(patMedOuthosp.getIdcardno()) && StringUtils.isNotEmpty(patMedOuthosp.getDeptcode())) { | 
 |  |  | //            ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO(); | 
 |  |  | //            serviceSubtaskVO.setSfzh(patMedOuthosp.getIdcardno()); | 
 |  |  | //            serviceSubtaskVO.setDeptcode(patMedOuthosp.getDeptcode()); | 
 |  |  | //            serviceSubtaskVO.setSendstate(2L); | 
 |  |  | //            List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO); | 
 |  |  | //            if (CollectionUtils.isNotEmpty(serviceSubtaskList)) { | 
 |  |  | //                for (ServiceSubtask serviceSubtask : serviceSubtaskList) { | 
 |  |  | //                    serviceSubtask.setSendstate(6L); | 
 |  |  | //                    serviceSubtask.setRemark("患者已经回来复诊"); | 
 |  |  | //                    serviceSubtask.setUpdateTime(new Date()); | 
 |  |  | //                    serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); | 
 |  |  | //                } | 
 |  |  | //            } | 
 |  |  | //        } | 
 |  |  |  | 
 |  |  |         if (i > 0) { | 
 |  |  |             return true; | 
 |  |  |         } | 
 |  |  | 
 |  |  |         int count = patMedOuthospMapper.countPatMedOuthosp(); | 
 |  |  |         if (count > 3000000) { | 
 |  |  |             // 2. 冷藏表并新建 | 
 |  |  |             String timeSuffix = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); | 
 |  |  |             String timeSuffix = new SimpleDateFormat("yyyyMM").format(new Date()); | 
 |  |  |             String oldName = "pat_med_outhosp"; | 
 |  |  |             String newName = oldName + "_" + timeSuffix; | 
 |  |  |  | 
 |  |  | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             // 4. 新建 | 
 |  |  |             patMedOuthospMapper.createPatMedOuthosp(oldName, newName); | 
 |  |  |             // 4. 新建(此时只剩冷表,PatMedOuthosp没了,需要新建一个) | 
 |  |  |             patMedOuthospMapper.createPatMedOuthosp(newName, oldName); | 
 |  |  |  | 
 |  |  |             // 5. 设置新表自增起始值 | 
 |  |  |             //5.设置新表自增主键 | 
 |  |  |             patMedOuthospMapper.createPatMedOuthospAutoAdd(oldName); | 
 |  |  |             //6. 设置新表自增起始值 | 
 |  |  |             patMedOuthospMapper.setAutoIncrement(oldName, maxId + 1); | 
 |  |  |  | 
 |  |  |             // 6. 更新/新建视图 | 
 |  |  |             // 7. 更新/新建视图 | 
 |  |  |             // 重新获取所有表名(包含刚新建的主表) | 
 |  |  |             List<String> allTables = patMedOuthospMapper.getAllOuthospTableNames(); | 
 |  |  |             StringBuilder sb = new StringBuilder(); | 
 |  |  | 
 |  |  |         PatArchive patArchive = new PatArchive(); | 
 |  |  |         //如果是刚出生的小孩子,是没有身份证的,怎么处理???????? | 
 |  |  |         patArchive.setIdcardno(externalInHospPatientInfo.getZhengJianHM()); | 
 |  |  |         //如果身份证为空的话,就用就诊卡号代替 | 
 |  |  |         if (StringUtils.isEmpty(externalInHospPatientInfo.getZhengJianHM())) | 
 |  |  |             patArchive.setIdcardno(externalInHospPatientInfo.getJiuZhenKH()); | 
 |  |  |         patArchive.setOrgid(externalInHospPatientInfo.getZuZhiJGID()); | 
 |  |  |         List<PatArchive> patArchives = null; | 
 |  |  |         if (ObjectUtils.isNotEmpty(patArchive.getIdcardno())) | 
 |  |  | 
 |  |  |             patMedInhosp.setDrcode(externalInHospPatientInfo.getZhuZhiYSID()); | 
 |  |  |             patMedInhosp.setNurseId(externalInHospPatientInfo.getZeRenHSID()); | 
 |  |  |             patMedInhosp.setNurseName(externalInHospPatientInfo.getZeRenHSXM()); | 
 |  |  |             patMedInhosp.setManagementDoctor(externalInHospPatientInfo.getJingGuanYSXM()); | 
 |  |  |             patMedInhosp.setManagementDoctorCode(externalInHospPatientInfo.getJingGuanYSID()); | 
 |  |  |         } | 
 |  |  |         if (ObjectUtils.isNotEmpty(externalInHospPatientDiagnoseInfo)) { | 
 |  |  | //            patMedInhosp.setIcd10code(StringUtils.isNotEmpty(patMedInhosp.getIcd10code()) ? patMedInhosp.getIcd10code() + "," + externalInHospPatientDiagnoseInfo.getZhenDuanID() : externalInHospPatientDiagnoseInfo.getZhenDuanID()); | 
 |  |  | 
 |  |  |                 log.info("药品产地价格入参类型为:{}", type); | 
 |  |  |                 return true; | 
 |  |  |             case "JZ_MZ_WanChengJZ": | 
 |  |  |                 log.info("完成接诊入参类型为:{}", type); | 
 |  |  |                 log.info("(门急诊)完成接诊入参类型为:{}", type); | 
 |  |  |                 return addFinshJZInfo(dataMap); | 
 |  |  |             case "JZ_ZY_RuYuanDJ": | 
 |  |  |                 log.info("入院登记入参类型为:{}", type); |