| | |
| | | import com.ruoyi.system.service.ISysConfigService; |
| | | import com.smartor.domain.*; |
| | | import com.smartor.mapper.*; |
| | | import com.smartor.service.IPatChildArchiveService; |
| | | import com.smartor.service.IPatMaternityArchiveService; |
| | | import com.smartor.service.IPatMedOuthospService; |
| | | import com.smartor.service.IPatSpecificArchiveGenerateService; |
| | | import com.smartor.service.IServiceExternalService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.collections4.CollectionUtils; |
| | |
| | | @Slf4j |
| | | @Service |
| | | public class ServiceExternalServiceImpl implements IServiceExternalService { |
| | | /** |
| | | * 龙泉人民医院机构ID |
| | | */ |
| | | private static final String LONGQUAN_PEOPLE_HOSPITAL_ORG_ID = "47240004533118111A1001"; |
| | | |
| | | @Autowired |
| | | private SysDept2Mapper sysDeptMapper; |
| | | |
| | |
| | | @Autowired |
| | | private ISysConfigService configService; |
| | | @Autowired |
| | | private IPatMaternityArchiveService patMaternityArchiveService; |
| | | @Autowired |
| | | private IPatChildArchiveService patChildArchiveService; |
| | | private IPatSpecificArchiveGenerateService patSpecificArchiveGenerateService; |
| | | @Autowired |
| | | private PatMedOuthospMapper patMedOuthospMapper; |
| | | @Autowired |
| | |
| | | } else { |
| | | patMedInhosp.setCreateTime(new Date()); |
| | | i = inhospVisitFacade.insertPatMedInhosp(patMedInhosp); |
| | | if (i == 1) { |
| | | //龙泉人民医院:新增住院信息时处理患者再入院 |
| | | stopReadmissionFollowUpTasks(patMedInhosp); |
| | | } |
| | | } |
| | | if (i == 1) return true; |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * 患者再入院处理:患者再次入院后,上一次出院生成的待执行长期随访任务不再执行。 |
| | | * 目前仅对龙泉人民医院生效,避免影响其他机构。 |
| | | * |
| | | * @param patMedInhosp 本次新增的住院信息 |
| | | */ |
| | | private void stopReadmissionFollowUpTasks(PatMedInhosp patMedInhosp) { |
| | | if (!LONGQUAN_PEOPLE_HOSPITAL_ORG_ID.equals(patMedInhosp.getOrgid())) { |
| | | return; |
| | | } |
| | | if (Objects.isNull(patMedInhosp.getPatid()) || Objects.isNull(patMedInhosp.getStarttime())) { |
| | | log.warn("龙泉人民医院患者再入院处理跳过,patid或入院时间为空,inhospno={}", patMedInhosp.getInhospno()); |
| | | return; |
| | | } |
| | | try { |
| | | ServiceSubtaskEntity subtask = new ServiceSubtaskEntity(); |
| | | subtask.setPatid(patMedInhosp.getPatid()); |
| | | subtask.setOrgid(LONGQUAN_PEOPLE_HOSPITAL_ORG_ID); |
| | | subtask.setSendstate(2L); |
| | | List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(subtask); |
| | | if (CollectionUtils.isEmpty(serviceSubtaskList)) { |
| | | return; |
| | | } |
| | | int stopCount = 0; |
| | | for (ServiceSubtask serviceSubtask : serviceSubtaskList) { |
| | | //不是长期任务,不处理 |
| | | if (Objects.isNull(serviceSubtask.getLongSendTime())) { |
| | | continue; |
| | | } |
| | | //出院时间晚于或等于本次入院时间的任务,不属于本次入院前的待随访任务 |
| | | if (Objects.isNull(serviceSubtask.getEndtime()) |
| | | || !serviceSubtask.getEndtime().before(patMedInhosp.getStarttime())) { |
| | | continue; |
| | | } |
| | | serviceSubtask.setSendstate(4L); |
| | | serviceSubtask.setIsVisitAgain(2); |
| | | serviceSubtask.setResult("error"); |
| | | serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) |
| | | ? serviceSubtask.getRemark() + ";患者再入院" : "患者再入院"); |
| | | serviceSubtask.setUpdateTime(new Date()); |
| | | if (Boolean.TRUE.equals(serviceSubtaskMapper.updateServiceSubtask(serviceSubtask))) { |
| | | stopCount++; |
| | | } |
| | | } |
| | | log.info("龙泉人民医院患者再入院处理完成,patid={},本次入院时间={},停止待执行长期任务{}条", |
| | | patMedInhosp.getPatid(), patMedInhosp.getStarttime(), stopCount); |
| | | } catch (Exception e) { |
| | | //再入院任务处理失败不影响本次住院信息入库 |
| | | log.error("龙泉人民医院患者再入院处理异常,patid={},inhospno={}", |
| | | patMedInhosp.getPatid(), patMedInhosp.getInhospno(), e); |
| | | } |
| | | } |
| | | |
| | | //新增随访任务同步 |
| | |
| | | return 1; |
| | | } |
| | | |
| | | //新增患者专科档案基本信息 |
| | | /** |
| | | * 完成接诊时按专科档案生成配置生成妇科/儿科档案。 |
| | | * |
| | | * <p>生成逻辑内部只对指定机构生效,未命中配置或生成失败均不影响接诊主流程。</p> |
| | | */ |
| | | private void genePatSpecificArchive(PatMedOuthosp patMedOuthosp, PatArchive patArchive) { |
| | | String deptCategory = judgeDeptCategory(patMedOuthosp.getDeptcode(), patMedOuthosp.getOrgid()); |
| | | |
| | | boolean isGynecology = "1".equals(deptCategory); // 是否妇科 |
| | | boolean isPediatrics = "2".equals(deptCategory); // 是否儿科 |
| | | |
| | | if (isGynecology) { |
| | | // 走妇科档案生成逻辑 |
| | | PatMaternityArchiveDetail patMaternityArchiveDetail |
| | | = DtoConversionUtils.sourceToTarget(patMedOuthosp, PatMaternityArchiveDetail.class); |
| | | patMaternityArchiveDetail.setSourceType("1"); |
| | | patMaternityArchiveDetail.setPhone(patArchive.getTelcode()); |
| | | patMaternityArchiveDetail.setPatid(patArchive.getId()); |
| | | patMaternityArchiveDetail.setPatname(patArchive.getName()); |
| | | patMaternityArchiveDetail.setBirthdate(patArchive.getBirthdate()); |
| | | patMaternityArchiveDetail.setSex(patArchive.getSex()); |
| | | patMaternityArchiveDetail.setAddress(patArchive.getPlaceOfResidence()); |
| | | patMaternityArchiveDetail.setOuthospno(patMedOuthosp.getOuthospno()); |
| | | patMaternityArchiveDetail.setSerialnum(patMedOuthosp.getSerialnum()); |
| | | patMaternityArchiveDetail.setIcd10code(patMedOuthosp.getIcd10code()); |
| | | patMaternityArchiveDetail.setDeptcode(patMedOuthosp.getDeptcode()); |
| | | patMaternityArchiveDetail.setDeptname(patMedOuthosp.getDeptname()); |
| | | patMaternityArchiveDetail.setDoctorName(patMedOuthosp.getDrname()); |
| | | patMaternityArchiveDetail.setDoctorCode(patMedOuthosp.getDrcode()); |
| | | patMaternityArchiveDetail.setManagementDoctorName(patMedOuthosp.getDrname()); |
| | | patMaternityArchiveDetail.setManagementDoctorCode(patMedOuthosp.getDrcode()); |
| | | patMaternityArchiveDetail.setOrgid(patMedOuthosp.getOrgid()); |
| | | patMaternityArchiveDetail.setCampusid(patMedOuthosp.getCampusid()); |
| | | patMaternityArchiveService.insertOrUpdateMaternityArchive(patMaternityArchiveDetail); |
| | | } else if (isPediatrics) { |
| | | // 走儿科档案生成逻辑 |
| | | PatChildArchiveDetail patChildArchiveDetail |
| | | = DtoConversionUtils.sourceToTarget(patMedOuthosp, PatChildArchiveDetail.class); |
| | | patChildArchiveDetail.setSourceType("1"); |
| | | patChildArchiveDetail.setPhone(patArchive.getTelcode()); |
| | | patChildArchiveDetail.setPatid(patArchive.getId()); |
| | | patChildArchiveDetail.setPatname(patArchive.getName()); |
| | | patChildArchiveDetail.setBirthdate(patArchive.getBirthdate()); |
| | | patChildArchiveDetail.setSex(patArchive.getSex()); |
| | | // patChildArchiveDetail.setAddress(patArchive.getPlaceOfResidence()); |
| | | patChildArchiveDetail.setOuthospno(patMedOuthosp.getOuthospno()); |
| | | patChildArchiveDetail.setSerialnum(patMedOuthosp.getSerialnum()); |
| | | patChildArchiveDetail.setIcd10code(patMedOuthosp.getIcd10code()); |
| | | patChildArchiveDetail.setDeptcode(patMedOuthosp.getDeptcode()); |
| | | patChildArchiveDetail.setDeptname(patMedOuthosp.getDeptname()); |
| | | patChildArchiveDetail.setDoctorName(patMedOuthosp.getDrname()); |
| | | patChildArchiveDetail.setDoctorCode(patMedOuthosp.getDrcode()); |
| | | patChildArchiveDetail.setManagementDoctorName(patMedOuthosp.getDrname()); |
| | | patChildArchiveDetail.setManagementDoctorCode(patMedOuthosp.getDrcode()); |
| | | patChildArchiveDetail.setOrgid(patMedOuthosp.getOrgid()); |
| | | patChildArchiveDetail.setCampusid(patMedOuthosp.getCampusid()); |
| | | patChildArchiveService.insertOrUpdateChildArchive(patChildArchiveDetail); |
| | | } else { |
| | | // 未命中配置,不生成档案 |
| | | try { |
| | | int generated = patSpecificArchiveGenerateService.generateByOuthosp(patMedOuthosp, patArchive); |
| | | if (generated > 0) { |
| | | log.info("完成接诊自动生成专科档案成功,outhospno={},生成数量={}", |
| | | patMedOuthosp.getOuthospno(), generated); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("完成接诊自动生成专科档案失败,outhospno={}", patMedOuthosp.getOuthospno(), e); |
| | | } |
| | | } |
| | | |