| | |
| | | public class ServiceSLTDHealthcareRecordServiceImpl implements IServiceSLTDHealthcareRecordService { |
| | | |
| | | private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; |
| | | public static final String APP_KEY = "ak-zUMiOWhqXiJQWPB1pCbz0pjr"; |
| | | |
| | | @Autowired |
| | | private IPatArchiveService patArchiveService; |
| | |
| | | |
| | | @Value("${userPwd}") |
| | | private String userPwd; |
| | | |
| | | @Value("${lwl_app_key}") |
| | | private String APP_KEY; |
| | | |
| | | @Override |
| | | public List<ServiceSLTDInhospResDTO> queryHealthcareRecordList(ServiceSLTDInhospReqVO reqVO) { |
| | |
| | | sysUserDept.setCreateTime(new Date()); |
| | | sysUserDept.setDelFlag(0L); |
| | | |
| | | //判断一下是不是已经存在了 |
| | | if (ObjectUtils.isNotEmpty(sysUser1) && ObjectUtils.isNotEmpty(sysDept)) { |
| | | //判断一下用户-部门关系是不是已经存在了(无论新用户还是老用户都需要去重) |
| | | if (ObjectUtils.isNotEmpty(sysUser.getUserId()) && ObjectUtils.isNotEmpty(sysDept)) { |
| | | SysUserDept sud = new SysUserDept(); |
| | | sud.setUserId(sysUser1.getUserId()); |
| | | sud.setUserId(sysUser.getUserId()); |
| | | sud.setDeptId(sysDept.getDeptId()); |
| | | List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectSysUserDeptList(sud); |
| | | if (CollectionUtils.isNotEmpty(sysUserDepts)) { |
| | | sysUserDept.setId(sysUserDepts.get(0).getId()); |
| | | sysUserDeptMapper.updateSysUserDept(sysUserDept); |
| | | } else { |
| | | sysUserDeptMapper.insertSysUserDept(sysUserDept); |
| | | } |
| | | } else { |
| | | //不存在,则新增 |
| | | sysUserDeptMapper.insertSysUserDept(sysUserDept); |
| | | } |
| | | if (StringUtils.isNotEmpty(sysDept.getDeptType()) && sysDept.getDeptType().equals("1")) { |
| | | hospInfoList.add(Arrays.asList(sysDept.getDeptCode())); |
| | |
| | | sur.setOrgid(sysUser.getOrgid()); |
| | | |
| | | //先查询一下,是否存在 |
| | | SysUserRole sysUserRole = sysUserRoleMapper.selectUserRoleByRoleIdAndUserId(sysUser.getUserId(), 3L); |
| | | SysUserRole sysUserRole = sysUserRoleMapper.selectUserRoleByRoleIdAndUserId(3L, sysUser.getUserId()); |
| | | if (ObjectUtils.isNotEmpty(sysUserRole)) continue; |
| | | |
| | | userRoleList.add(sur); |
| | |
| | | params.put("inpatientArea", null); |
| | | // params.put("status", reqVO.getStatusList() != null && !reqVO.getStatusList().isEmpty() ? reqVO.getStatusList().get(0) : null); |
| | | params.put("status", null); |
| | | // 分页参数(门急诊分页采集时使用) |
| | | if (reqVO.getCurrent() != null) { |
| | | params.put("current", reqVO.getCurrent()); |
| | | } |
| | | if (reqVO.getSize() != null) { |
| | | params.put("size", reqVO.getSize()); |
| | | } |
| | | return params; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | private void processResultList(List<ServiceSLTDInhospResDTO> resultList, List<String> types, String cry, String campusId) { |
| | | for (String type : types) |
| | | // 门诊(FH0108.01)和急诊(FH0108.03)在业务上是同一类数据,共用同一个 resultList。 |
| | | // 若 types 同时包含两者,outHospitalDate 会被调用两次导致重复入库。 |
| | | // 因此只要 types 中含有任意一个门急诊类型,就只处理一次。 |
| | | boolean outpProcessed = false; |
| | | for (String type : types) { |
| | | switch (type) { |
| | | case "FH0108.01": |
| | | log.info("【parseResponseData】解析门诊数据"); |
| | | outHospitalDate(resultList); |
| | | case "FH0108.03": |
| | | if (!outpProcessed) { |
| | | log.info("【parseResponseData】解析门急诊数据,types={}", types); |
| | | outHospitalDate(resultList); |
| | | outpProcessed = true; |
| | | } else { |
| | | log.info("【parseResponseData】门急诊数据已处理,跳过 type={}", type); |
| | | } |
| | | break; |
| | | case "FH0109.26": |
| | | log.info("【parseResponseData】解析住院数据"); |
| | |
| | | log.info("【parseResponseData】解析预住院(其他)数据"); |
| | | inHospitalDate(resultList, cry); |
| | | break; |
| | | // case "FH0108.03": |
| | | // log.info("【parseResponseData】解析急诊数据"); |
| | | // outHospitalDate(resultList); |
| | | // break; |
| | | default: |
| | | log.warn("【parseResponseData】未知的数据类型:{}", type); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | private Boolean outHospitalDate(List<ServiceSLTDInhospResDTO> resultList) { |
| | |
| | | } |
| | | |
| | | } else if (cry.equals("1")) { |
| | | // 出院数据处理 |
| | | if (CollectionUtils.isEmpty(existingInhosps)) { |
| | | //如果为空,要先判断,预入院是否有值,有值的话则更新 |
| | | // 出院数据处理 |
| | | if (CollectionUtils.isNotEmpty(existingInhosps)) { |
| | | // 已存在出院记录,直接更新(保持最新数据) |
| | | patMedInhosp.setInhospid(existingInhosps.get(0).getInhospid()); |
| | | patMedInhospService.updatePatMedInhosp(patMedInhosp); |
| | | log.info("出院记录已存在,执行更新:serialnum={}, orgid={}", patMedInhosp.getSerialnum(), patMedInhosp.getOrgid()); |
| | | } else { |
| | | // 不存在出院记录,先查预入院(state=3),再查入院(state=0) |
| | | queryInhosp.setInhospstate("3"); |
| | | log.info("-----patMedInhospList进来了不?入参为:{}", queryInhosp); |
| | | log.info("-----查询预入院记录,入参为:{}", queryInhosp); |
| | | List<PatMedInhosp> patMedInhospList = patMedInhospService.selectPatMedInhosp(queryInhosp); |
| | | log.info("----patMedInhospList进来了不?返参为:{}", CollectionUtils.isEmpty(patMedInhospList) ? null : patMedInhospList.get(0).getSerialnum()); |
| | | log.info("----预入院查询结果:{}", CollectionUtils.isEmpty(patMedInhospList) ? "空" : patMedInhospList.get(0).getSerialnum()); |
| | | if (CollectionUtils.isNotEmpty(patMedInhospList)) { |
| | | //如果预入院不为空,则进行修改 |
| | | // 存在预入院记录,更新为出院状态 |
| | | patMedInhosp.setInhospid(patMedInhospList.get(0).getInhospid()); |
| | | patMedInhospService.updatePatMedInhosp(patMedInhosp); |
| | | log.info("由预入院更新为出院:serialnum={}", patMedInhosp.getSerialnum()); |
| | | } else { |
| | | //如果入院不为空,则进行修改 |
| | | // 再查入院记录(state=0) |
| | | queryInhosp.setInhospstate("0"); |
| | | patMedInhospList = patMedInhospService.selectPatMedInhosp(queryInhosp); |
| | | log.debug("入院查询结果:{}", CollectionUtils.isEmpty(patMedInhospList) ? "空" : patMedInhospList.size()); |
| | | if (CollectionUtils.isNotEmpty(patMedInhospList)) { |
| | | // 存在入院记录,更新为出院状态 |
| | | patMedInhosp.setInhospid(patMedInhospList.get(0).getInhospid()); |
| | | patMedInhospService.updatePatMedInhosp(patMedInhosp); |
| | | } |
| | | } |
| | | |
| | | //如果都为空,则进行新增 |
| | | if (CollectionUtils.isEmpty(patMedInhospList)) { |
| | | //如果入院不为空,则进行修改 |
| | | queryInhosp.setInhospstate("0"); |
| | | log.debug("出院queryInhosp入参为:{}", queryInhosp); |
| | | List<PatMedInhosp> patMedInhosps = patMedInhospService.selectPatMedInhosp(queryInhosp); |
| | | log.debug("出院patMedInhospList返参为:{}", CollectionUtils.isEmpty(patMedInhosps) ? null : patMedInhosps.size()); |
| | | if (CollectionUtils.isNotEmpty(patMedInhosps)) { |
| | | patMedInhospService.updatePatMedInhosp(patMedInhosp); |
| | | log.info("由入院更新为出院:serialnum={}", patMedInhosp.getSerialnum()); |
| | | } else { |
| | | // 预入院和入院均不存在,直接新增出院记录 |
| | | try { |
| | | patMedInhospService.insertPatMedInhosp(patMedInhosp); |
| | | log.info("新增出院记录:serialnum={}", patMedInhosp.getSerialnum()); |
| | | } catch (org.springframework.dao.DuplicateKeyException e) { |
| | | log.warn("出院记录已存在,跳过:serialnum={}, orgid={}, state={}", patMedInhosp.getSerialnum(), patMedInhosp.getOrgid(), patMedInhosp.getInhospstate()); |
| | | } |
| | |
| | | } |
| | | |
| | | private PatArchive processPatientArchive(ServiceSLTDInhospResDTO dto) { |
| | | PatArchive queryArchive = new PatArchive(); |
| | | queryArchive.setIdcardno(StringUtils.isEmpty(dto.getIdCardNo()) ? "" + dto.getMedicalCardId() : dto.getIdCardNo().trim()); |
| | | List<PatArchive> existingArchives = patArchiveService.selectPatArchiveList(queryArchive); |
| | | List<PatArchive> existingArchives = null; |
| | | |
| | | // 优先按 patientno 精确查重,查不到再按 idcardno 查重(AND条件会漏查同一人不同patientno的情况) |
| | | if (dto.getPatientId() != null) { |
| | | PatArchive queryByPatientNo = new PatArchive(); |
| | | queryByPatientNo.setPatientno(String.valueOf(dto.getPatientId())); |
| | | queryByPatientNo.setIdcardno(StringUtils.isNotEmpty(dto.getIdCardNo()) ? dto.getIdCardNo().trim() : null); |
| | | existingArchives = patArchiveService.selectPatArchiveList(queryByPatientNo); |
| | | } |
| | | // if (CollectionUtils.isEmpty(existingArchives) && !StringUtils.isEmpty(dto.getIdCardNo())) { |
| | | // PatArchive queryByIdCard = new PatArchive(); |
| | | // queryByIdCard.setIdcardno(dto.getIdCardNo().trim()); |
| | | // existingArchives = patArchiveService.selectPatArchiveList(queryByIdCard); |
| | | // } |
| | | |
| | | PatArchive patArchive = buildPatientArchive(dto); |
| | | |
| | |
| | | |
| | | private PatArchive buildPatientArchive(ServiceSLTDInhospResDTO dto) { |
| | | PatArchive patArchive = new PatArchive(); |
| | | patArchive.setPatientno("" + dto.getPatientId()); |
| | | patArchive.setPatientno(dto.getPatientId() == null ? null : String.valueOf(dto.getPatientId())); |
| | | patArchive.setIdcardno(StringUtils.isEmpty(dto.getIdCardNo()) ? "" + dto.getMedicalCardId() : dto.getIdCardNo().trim()); |
| | | patArchive.setName(dto.getPatientName()); |
| | | patArchive.setSourcefrom(2); |
| | | patArchive.setSourcefrom(2L); |
| | | patArchive.setPattype("2"); |
| | | patArchive.setSex("男".equals(dto.getGender()) ? 1L : 2L); |
| | | patArchive.setNation(dto.getNation()); |