| | |
| | | package com.smartor.service.impl; |
| | | |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import com.google.gson.Gson; |
| | | import com.ruoyi.common.core.domain.entity.SysDept; |
| | | import com.ruoyi.common.core.domain.entity.SysUser; |
| | | import com.ruoyi.common.core.domain.entity.SysUserDept; |
| | | import com.ruoyi.common.core.redis.RedisCache; |
| | | import com.ruoyi.common.exception.base.BaseException; |
| | | import com.ruoyi.common.utils.DateUtils; |
| | | import com.ruoyi.common.utils.DtoConversionUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.smartor.domain.*; |
| | | import com.smartor.domain.entity.ServiceSubtaskEntity; |
| | | import com.smartor.mapper.*; |
| | | import com.smartor.service.IPatMedOuthospService; |
| | | import com.smartor.service.IServiceExternalService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.collections4.CollectionUtils; |
| | |
| | | private PatMedInspectionItemMapper patMedInspectionItemMapper; |
| | | @Autowired |
| | | private Icd10Mapper icd10Mapper; |
| | | @Autowired |
| | | private IPatMedOuthospService patMedOuthospService; |
| | | @Autowired |
| | | private PatMedOuthospMapper patMedOuthospMapper; |
| | | @Autowired |
| | |
| | | //获取当前用户Name对应的user信息 |
| | | SysUser sysUser = null; |
| | | SysUser sysUserVo = new SysUser(); |
| | | sysUserVo.setUserName(externalUserDeptInfo.getYongHuDLM()); |
| | | // sysUserVo.setUserName(externalUserDeptInfo.getYongHuDLM()); |
| | | sysUserVo.setHisUserId(externalUserDeptInfo.getYongHuID()); |
| | | sysUserVo.setOrgid(externalUserDeptInfo.getZuZhiJGID()); |
| | | //丽水无院区,默认值是 1 |
| | | sysUserVo.setCampusid("1"); |
| | |
| | | if (CollectionUtils.isNotEmpty(sysDepts)) { |
| | | sysDept = sysDepts.get(0); |
| | | } |
| | | if(ObjectUtils.isEmpty(sysUser)){ |
| | | if (ObjectUtils.isEmpty(sysUser)) { |
| | | log.error("ServiceExternalServiceImpl---addUserDeptInfo 找不到对应的用户 username: {}", externalUserDeptInfo.getYongHuDLM()); |
| | | return false; |
| | | }else if(ObjectUtils.isEmpty(sysDept)){ |
| | | } else if (ObjectUtils.isEmpty(sysDept)) { |
| | | log.error("ServiceExternalServiceImpl---addUserDeptInfo 找不到对应的科室 hisDeptId: {}", externalUserDeptInfo.getKeShiID()); |
| | | return false; |
| | | }else { |
| | | } else { |
| | | SysUserDept sysUserDept = new SysUserDept(); |
| | | sysUserDept.setDelFlag(0L); |
| | | sysUserDept.setUserId(sysUser.getUserId()); |
| | | sysUserDept.setUserCode(sysUser.getUserCode()); |
| | | sysUserDept.setDeptType("2"); |
| | | sysUserDept.setDeptType(sysDept.getDeptType()); |
| | | sysUserDept.setGuid(externalUserDeptInfo.getZuZhiJGID()); |
| | | sysUserDept.setDeptId(sysDept.getDeptId()); |
| | | sysUserDept.setDeptCode(sysDept.getDeptCode()); |
| | | sysUserDept.setDeptName(sysDept.getDeptName()); |
| | | sysUserDept.setOrgid(externalUserDeptInfo.getZuZhiJGID()); |
| | | sysUserDept.setCampusid("1"); |
| | | |
| | | sysUserDept.setCreateBy(externalUserDeptInfo.getChuangJianRXM()); |
| | | sysUserDept.setCreateTime(externalUserDeptInfo.getChuangJianSJ()); |
| | |
| | | sysUserDeptVo.setCampusid("1"); |
| | | //根据userName判断一下,是不是之前有新增 |
| | | SysUserDept sysUserDeptOld = null; |
| | | List<SysUserDept> SysUserDeptList = sysUserDeptMapper.selectSysUserDeptList(sysUserDeptVo); |
| | | if (CollectionUtils.isNotEmpty(SysUserDeptList)) { |
| | | sysUserDeptOld = SysUserDeptList.get(0); |
| | | List<SysUserDept> sysUserDeptList = sysUserDeptMapper.selectSysUserDeptList(sysUserDeptVo); |
| | | if (CollectionUtils.isNotEmpty(sysUserDeptList)) { |
| | | sysUserDeptOld = sysUserDeptList.get(0); |
| | | } |
| | | if (ObjectUtils.isEmpty(sysUserDeptOld)) { |
| | | int i = sysUserDeptMapper.insertSysUserDept(sysUserDept); |
| | |
| | | log.info("ServiceExternalServiceImpl---addUserDeptInfo是否修改成功03:{}", i); |
| | | } |
| | | //更新sys-user deptId |
| | | if(StringUtils.isNotEmpty(externalUserDeptInfo.getKeShiID())){ |
| | | if (StringUtils.isNotEmpty(externalUserDeptInfo.getKeShiID())) { |
| | | sysUser.setDeptId(Long.valueOf(externalUserDeptInfo.getKeShiID())); |
| | | //查询用户科室关系 |
| | | SysUserDept sysUserDeptTemp = new SysUserDept(); |
| | | sysUserDeptTemp.setUserId(sysUser.getUserId()); |
| | | sysUserDeptTemp.setOrgid(externalUserDeptInfo.getZuZhiJGID()); |
| | | List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectSysUserDeptList(sysUserDeptTemp); |
| | | List<String> userDepts = sysUserDepts.stream().map(SysUserDept::getDeptCode).distinct().collect(Collectors.toList()); |
| | | //和queryHospUserInfoList采集的数据格式保持一致 |
| | | List<List<String>> userDeptsList = new ArrayList<>(); |
| | | if (!userDepts.isEmpty()) { |
| | | for (String userDept : userDepts) { |
| | | List<String> uDept = new ArrayList<>(); |
| | | uDept.add(userDept); |
| | | userDeptsList.add(uDept); |
| | | } |
| | | } |
| | | //将部门我病区放到指定字段中 |
| | | Gson gson = new Gson(); |
| | | sysUser.setHospInfo(gson.toJson(userDeptsList)); |
| | | |
| | | sysUserMapper.updateUser(sysUser); |
| | | } |
| | | } |
| | |
| | | ExternalInHospPatientAddrInfo externalInHospPatientAddrInfo = null; |
| | | ExternalInHospPatientLiaisonInfo externalInHospPatientLiaisonInfo = null; |
| | | List<ExternalInHospPatientAddrInfo> epai2 = null; |
| | | //死亡标记 |
| | | Boolean deathFlag = false; |
| | | if (CollectionUtils.isNotEmpty(epai)) { |
| | | epai2 = epai.stream().map(map -> { |
| | | ExternalInHospPatientAddrInfo info = new ExternalInHospPatientAddrInfo(); |
| | |
| | | patMedInhosp1.setNurseName(ObjectUtils.isNotEmpty(JiuZhenXX.get("ZeRenHSXM")) ? JiuZhenXX.get("ZeRenHSXM").toString() : null); |
| | | patMedInhosp1.setNurseId(ObjectUtils.isNotEmpty(JiuZhenXX.get("ZeRenHSID")) ? JiuZhenXX.get("ZeRenHSID").toString() : null); |
| | | patMedInhosp1.setBedNo(ObjectUtils.isNotEmpty(JiuZhenXX.get("DangQianCWMC")) ? JiuZhenXX.get("DangQianCWMC").toString() : null); |
| | | |
| | | //离院方式代码 1-医瞩离院 2-医嘱转院 3-医嘱转社区卫生服务机构/乡镇卫生院 |
| | | // 4-非医嘱离院 5-死亡 9-其他 10-介入室 20-手术室 |
| | | String liYuanQxdm = ObjectUtils.isNotEmpty(JiuZhenXX.get("LiYuanQXDM")) ? JiuZhenXX.get("LiYuanQXDM").toString() : null; |
| | | //判断病人是否死亡 |
| | | if (ObjectUtils.isNotEmpty(liYuanQxdm) && ("5").equals(liYuanQxdm)) { |
| | | deathFlag = true; |
| | | } |
| | | } |
| | | patMedInhosp1.setUpdateTime(new Date()); |
| | | patMedInhosp1.setTelcode(patArchive.getTelcode()); |
| | |
| | | } |
| | | |
| | | patMedInhosp1.setInhospstate("1"); |
| | | if (deathFlag) { |
| | | //病人死亡无须随访 |
| | | patMedInhosp1.setFuflag("1"); |
| | | //更新病人 notrequiredFlag |
| | | patArchive.setNotrequiredFlag("1"); |
| | | patArchiveMapper.updatePatArchive(patArchive); |
| | | //对已经生成的随访任务进行处理 |
| | | ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity(); |
| | | serviceSubtaskVO.setPatid(patArchive.getId()); |
| | | serviceSubtaskVO.setSendstate(2L); |
| | | List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO); |
| | | for (ServiceSubtask serviceSubtask : serviceSubtaskList) { |
| | | serviceSubtask.setSendstate(6L); |
| | | serviceSubtask.setRemark(serviceSubtask.getRemark() + ";病人已死亡,不随访"); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | } |
| | | } |
| | | if (CollectionUtils.isNotEmpty(patMedInhospList)) { |
| | | patMedInhosp1.setUpdateTime(new Date()); |
| | | patMedInhosp1.setOrgid(ObjectUtils.isNotEmpty(BingRenXX) && ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null); |
| | |
| | | int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); |
| | | |
| | | //取消出院,就不需要服务了,需要通过patid和sendstate=2或者sendstate=1去查询一下,service_subtask里是否有正在执行的任务,有的话,立即停了 |
| | | ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO(); |
| | | ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity(); |
| | | serviceSubtaskVO.setPatid(patMedInhosp1.getPatid()); |
| | | serviceSubtaskVO.setSendstate(2L); |
| | | List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO); |
| | |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 目前,从急诊抢救后转入住院的患者,其数据采集存在一个问题:有两条入院记录。 |
| | | * 第一条(急诊科室的)记录缺少“出院时间”,导致该记录在统计中始终显示为“在院”, |
| | | * 而第二条(转入科室的)记录是完整的。我们需要采集 JZ_ZY_LiQiang接口的数据, |
| | | * 里面的离抢时间来反填第一条记录的“出院时间”,从而修正第一条记录的状态。 |
| | | * |
| | | * @param dataMap |
| | | * @return |
| | | */ |
| | | @Override |
| | | public Boolean editRescueFinishedOutHospInfo(Map dataMap) { |
| | | log.info("ServiceExternalServiceImpl---editRescueFinishedOutHospInfo的新增的值为:{}", dataMap); |
| | | Map yeWuXX = (Map) dataMap.get("YeWuXX"); |
| | | //病人信息 |
| | | Map<String, Object> BingRenXX = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("BingRenXX") : null; |
| | | //就诊信息 |
| | | Map<String, Object> JiuZhenXX = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("JiuZhenXX") : null; |
| | | |
| | | ExternalInHospPatientInfo externalInHospPatientInfo = BeanUtil.mapToBean(BingRenXX, ExternalInHospPatientInfo.class, true); |
| | | PatMedInhosp patMedInhosp = new PatMedInhosp(); |
| | | patMedInhosp.setInhospno(externalInHospPatientInfo.getBingAnHao()); |
| | | patMedInhosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID()); |
| | | List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp); |
| | | PatMedInhosp patMedInhosp1 = null; |
| | | if (CollectionUtils.isNotEmpty(patMedInhospList)) patMedInhosp1 = patMedInhospList.get(0); |
| | | if (ObjectUtils.isNotEmpty(patMedInhosp1)) { |
| | | if (ObjectUtils.isNotEmpty(JiuZhenXX.get("LiQiangSJ"))) { |
| | | try { |
| | | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | patMedInhosp1.setEndtime(simpleDateFormat.parse(JiuZhenXX.get("LiQiangSJ").toString())); |
| | | patMedInhosp1.setUpdateTime(new Date()); |
| | | //更新出院状态 |
| | | patMedInhosp1.setInhospstate("1"); |
| | | int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); |
| | | if (i != 1) return false; |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | return true; |
| | | } else { |
| | | log.error("ServiceExternalServiceImpl---editRescueFinishedOutHospInfo的没有找到对应的出院记录:{}", dataMap); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public Boolean addFinshJZInfo(Map dataMap) { |
| | | log.info("ServiceExternalServiceImpl---addFinshJZInfo的新增的值为:{}", dataMap); |
| | | //先对表进行维护 |
| | | tableMaintenance(); |
| | | |
| | | Map yeWuXX = (Map) dataMap.get("YeWuXX"); |
| | | Map XiaoXiTou = (Map) dataMap.get("XiaoXiTou"); |
| | |
| | | |
| | | PatArchive patArchive = addPatArchive(externalInHospPatientInfo, null, null); |
| | | |
| | | PatMedOuthosp patMedOuthosp = new PatMedOuthosp(); |
| | | patMedOuthosp.setOuthospno(externalInHospPatientInfo.getBingAnHao()); |
| | | patMedOuthosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID()); |
| | | List<PatMedOuthosp> patMedOuthosps = patMedOuthospMapper.selectPatMedOuthospList(patMedOuthosp); |
| | | PatMedOuthospQueryReq patMedOuthospreq = new PatMedOuthospQueryReq(); |
| | | patMedOuthospreq.setOuthospno(externalInHospPatientInfo.getBingAnHao()); |
| | | patMedOuthospreq.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID()); |
| | | List<PatMedOuthosp> patMedOuthosps = patMedOuthospMapper.callSpQueryOuthosp(patMedOuthospreq); |
| | | for (PatMedOuthosp patMedOuthosp1 : patMedOuthosps) { |
| | | PatArchive pa = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosp1.getPatid()); |
| | | if (patArchive.getBirthdate() != null) { |
| | |
| | | } |
| | | } |
| | | |
| | | PatMedOuthosp patMedOuthosp = DtoConversionUtils.sourceToTarget(patMedOuthospreq, PatMedOuthosp.class); |
| | | patMedOuthosp.setPatid(patArchive.getId()); |
| | | patMedOuthosp.setPatno(externalInHospPatientInfo.getBingAnHao()); |
| | | patMedOuthosp.setPatname(externalInHospPatientInfo.getXingMing()); |
| | |
| | | //不需要长期任务随访,由医生自己去随访(丽水中医院首次提出) |
| | | patMedOuthosp.setFuflag("1"); |
| | | } |
| | | i = patMedOuthospMapper.updatePatMedOuthosp(patMedOuthosp); |
| | | i = patMedOuthospService.updatePatMedOuthosp(patMedOuthosp); |
| | | } else { |
| | | patMedOuthosp.setCreateTime(new Date()); |
| | | patMedOuthosp.setUpdateTime(new Date()); |
| | |
| | | //不需要长期任务随访 |
| | | patMedOuthosp.setFuflag("1"); |
| | | } |
| | | i = patMedOuthospMapper.insertPatMedOuthosp(patMedOuthosp); |
| | | } |
| | | i = patMedOuthospService.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; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | |
| | | public void tableMaintenance() { |
| | | // 1. 判断表数据量 |
| | | int count = patMedOuthospMapper.countPatMedOuthosp(); |
| | | if (count > 3000000) { |
| | | // 2. 冷藏表并新建 |
| | | String timeSuffix = new SimpleDateFormat("yyyyMM").format(new Date()); |
| | | String oldName = "pat_med_outhosp"; |
| | | String newName = oldName + "_" + timeSuffix; |
| | | |
| | | // 冷藏 |
| | | patMedOuthospMapper.renameTable(oldName, newName); |
| | | |
| | | // 3. 计算所有表的最大id |
| | | List<String> tableNames = patMedOuthospMapper.getAllOuthospTableNames(); |
| | | long maxId = 0; |
| | | for (String tableName : tableNames) { |
| | | Long tableMaxId = patMedOuthospMapper.getMaxIdFromTable(tableName); |
| | | if (tableMaxId != null && tableMaxId > maxId) { |
| | | maxId = tableMaxId; |
| | | } |
| | | } |
| | | |
| | | // 4. 新建(此时只剩冷表,PatMedOuthosp没了,需要新建一个) |
| | | patMedOuthospMapper.createPatMedOuthosp(newName, oldName); |
| | | |
| | | //5.设置新表自增主键 |
| | | patMedOuthospMapper.createPatMedOuthospAutoAdd(oldName); |
| | | //6. 设置新表自增起始值 |
| | | patMedOuthospMapper.setAutoIncrement(oldName, maxId + 1); |
| | | |
| | | // 7. 更新/新建视图 |
| | | // 重新获取所有表名(包含刚新建的主表) |
| | | List<String> allTables = patMedOuthospMapper.getAllOuthospTableNames(); |
| | | StringBuilder sb = new StringBuilder(); |
| | | sb.append("CREATE OR REPLACE VIEW v_pat_med_outhosp AS "); |
| | | for (int i = 0; i < allTables.size(); i++) { |
| | | sb.append("SELECT * FROM ").append(allTables.get(i)); |
| | | if (i < allTables.size() - 1) { |
| | | sb.append(" UNION ALL "); |
| | | } |
| | | } |
| | | patMedOuthospMapper.createOrReplaceView(sb.toString()); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | case "JZ_ZY_YuChuYuan": |
| | | log.info("患者预出院入参类型为:{}", type); |
| | | return addPreOutHospInfo(dataMap); |
| | | case "JZ_ZY_LiQiang": |
| | | log.info("患者离抢入参类型为:{}", type); |
| | | return editRescueFinishedOutHospInfo(dataMap); |
| | | case "JG_ZZ_BingQu": |
| | | log.info("病区信息入参类型为:{}", type); |
| | | return addWardAreaInfo(dataMap); |