| | |
| | | package com.smartor.service.impl; |
| | | |
| | | import com.ruoyi.othervisit.api.OtherVisitFacade; |
| | | import com.ruoyi.inhospvisit.api.InhospVisitFacade; |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONArray; |
| | |
| | | import com.ruoyi.common.utils.http.HttpUtils; |
| | | import com.ruoyi.system.service.ISysConfigService; |
| | | import com.smartor.domain.*; |
| | | import com.smartor.domain.entity.ServiceSubtaskEntity; |
| | | import com.smartor.mapper.*; |
| | | import com.smartor.service.IPatMedOuthospService; |
| | | import com.smartor.service.IPatSpecificArchiveGenerateService; |
| | |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import com.ruoyi.outpatientvisit.domain.PatMedOuthospQueryReq; |
| | | import com.ruoyi.othervisit.domain.PatMedOperationItem; |
| | | import com.ruoyi.outpatientvisit.mapper.PatMedOuthospMapper; |
| | | import com.ruoyi.othervisit.domain.PatMedOperation; |
| | | import com.ruoyi.outpatientvisit.domain.PatMedOuthosp; |
| | | import com.ruoyi.inhospvisit.domain.PatMedInhosp; |
| | | import com.ruoyi.common.core.domain.entity.PatArchive; |
| | | import com.ruoyi.common.core.domain.entity.PatArchivecontact; |
| | | import com.ruoyi.task.domain.entity.ServiceSubtaskEntity; |
| | | import com.ruoyi.task.domain.ServiceSubtask; |
| | | import com.ruoyi.task.mapper.ServiceSubtaskMapper; |
| | | import com.ruoyi.patarchive.mapper.PatArchiveMapper; |
| | | import com.ruoyi.patarchive.mapper.PatArchivecontactMapper; |
| | | import com.ruoyi.common.core.domain.entity.Icd10; |
| | | import com.ruoyi.common.mapper.Icd10Mapper; |
| | | import com.ruoyi.system.mapper.ext.SysUser2Mapper; |
| | | import com.ruoyi.system.mapper.ext.SysDept2Mapper; |
| | | import com.ruoyi.system.mapper.ext.SysUserDeptMapper; |
| | | /** |
| | | * 主键Service业务层处理 |
| | | * |
| | |
| | | @Slf4j |
| | | @Service |
| | | public class ServiceExternalServiceImpl implements IServiceExternalService { |
| | | /** |
| | | * 龙泉人民医院机构ID |
| | | */ |
| | | private static final String LONGQUAN_PEOPLE_HOSPITAL_ORG_ID = "47240004533118111A1001"; |
| | | |
| | | @Autowired |
| | | private SysDept2Mapper sysDeptMapper; |
| | | |
| | | /** |
| | | * 手术数据一律经 ruoyi-othervisit 的门面取用(跨模块数据访问原则)。 |
| | | */ |
| | | @Autowired |
| | | private OtherVisitFacade otherVisitFacade; |
| | | @Autowired |
| | | private SysUser2Mapper sysUserMapper; |
| | | @Autowired |
| | |
| | | @Autowired |
| | | private PatArchivecontactMapper patArchivecontactMapper; |
| | | @Autowired |
| | | private PatMedInhospMapper patMedInhospMapper; |
| | | @Autowired |
| | | private PatMedOperationMapper patMedOperationMapper; |
| | | @Autowired |
| | | private PatMedOperationItemMapper patMedOperationItemMapper; |
| | | private InhospVisitFacade inhospVisitFacade; |
| | | @Autowired |
| | | private PatMedInspectionMapper patMedInspectionMapper; |
| | | @Autowired |
| | |
| | | PatMedInhosp patMedInhosp = new PatMedInhosp(); |
| | | patMedInhosp.setInhospno(externalInHospPatientInfo.getBingAnHao()); |
| | | patMedInhosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID()); |
| | | List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp); |
| | | List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp); |
| | | for (PatMedInhosp patMedInhosp1 : patMedInhospList) { |
| | | String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); |
| | | String tagname = inhospVisitFacade.getTagnameBypatid(patMedInhosp1.getPatid()); |
| | | patMedInhosp1.setTagname(tagname); |
| | | } |
| | | if (CollectionUtils.isNotEmpty(patMedInhospList)) { |
| | |
| | | patMedInhosp1.setOperatorId(ObjectUtils.isNotEmpty(JiuZhenXX.get("CaoZuoRID")) ? JiuZhenXX.get("CaoZuoRID").toString() : null); |
| | | } |
| | | patMedInhosp1.setUpdateTime(new Date()); |
| | | int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); |
| | | int i = inhospVisitFacade.updatePatMedInhosp(patMedInhosp1); |
| | | if (i != 1) return false; |
| | | } |
| | | return true; |
| | |
| | | PatMedInhosp patMedInhosp = new PatMedInhosp(); |
| | | patMedInhosp.setInhospno(externalInHospPatientInfo.getBingAnHao()); |
| | | patMedInhosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID()); |
| | | List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp); |
| | | List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp); |
| | | for (PatMedInhosp patMedInhosp1 : patMedInhospList) { |
| | | String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); |
| | | String tagname = inhospVisitFacade.getTagnameBypatid(patMedInhosp1.getPatid()); |
| | | patMedInhosp1.setTagname(tagname); |
| | | } |
| | | PatMedInhosp patMedInhosp1 = new PatMedInhosp(); |
| | |
| | | //不需要长期任务随访 |
| | | patMedInhosp1.setFuflag("0"); |
| | | } |
| | | int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); |
| | | int i = inhospVisitFacade.updatePatMedInhosp(patMedInhosp1); |
| | | if (i != 1) return false; |
| | | } else { |
| | | if (ObjectUtils.isNotEmpty(BingRenXX)) { |
| | |
| | | patMedInhosp1.setFuflag("0"); |
| | | } |
| | | |
| | | int i = patMedInhospMapper.insertPatMedInhosp(patMedInhosp1); |
| | | int i = inhospVisitFacade.insertPatMedInhosp(patMedInhosp1); |
| | | if (i != 1) return false; |
| | | } |
| | | return true; |
| | |
| | | PatMedInhosp patMedInhosp = new PatMedInhosp(); |
| | | patMedInhosp.setInhospno(externalInHospPatientInfo.getBingAnHao()); |
| | | patMedInhosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID()); |
| | | List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp); |
| | | List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp); |
| | | for (PatMedInhosp patMedInhosp1 : patMedInhospList) { |
| | | String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); |
| | | String tagname = inhospVisitFacade.getTagnameBypatid(patMedInhosp1.getPatid()); |
| | | patMedInhosp1.setTagname(tagname); |
| | | } |
| | | PatMedInhosp patMedInhosp1 = new PatMedInhosp(); |
| | |
| | | //不需要长期任务随访 |
| | | patMedInhosp1.setFuflag("0"); |
| | | } |
| | | int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); |
| | | int i = inhospVisitFacade.updatePatMedInhosp(patMedInhosp1); |
| | | if (i != 1) return false; |
| | | } else { |
| | | if (ObjectUtils.isNotEmpty(BingRenXX)) { |
| | |
| | | //不需要长期任务随访 |
| | | patMedInhosp1.setFuflag("0"); |
| | | } |
| | | int i = patMedInhospMapper.insertPatMedInhosp(patMedInhosp1); |
| | | int i = inhospVisitFacade.insertPatMedInhosp(patMedInhosp1); |
| | | if (i != 1) return false; |
| | | } |
| | | return true; |
| | |
| | | PatMedInhosp patMedInhosp = new PatMedInhosp(); |
| | | patMedInhosp.setInhospno(externalInHospPatientInfo.getBingAnHao()); |
| | | patMedInhosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID()); |
| | | List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp); |
| | | List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp); |
| | | for (PatMedInhosp patMedInhosp1 : patMedInhospList) { |
| | | String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); |
| | | String tagname = inhospVisitFacade.getTagnameBypatid(patMedInhosp1.getPatid()); |
| | | patMedInhosp1.setTagname(tagname); |
| | | } |
| | | if (CollectionUtils.isNotEmpty(patMedInhospList)) { |
| | |
| | | patMedInhosp1.setOperatorId(ObjectUtils.isNotEmpty(JiuZhenXX.get("CaoZuoRXM")) ? JiuZhenXX.get("CaoZuoRID").toString() : null); |
| | | } |
| | | patMedInhosp1.setUpdateTime(new Date()); |
| | | int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); |
| | | int i = inhospVisitFacade.updatePatMedInhosp(patMedInhosp1); |
| | | |
| | | //取消出院,就不需要服务了,需要通过patid和sendstate=2或者sendstate=1去查询一下,service_subtask里是否有正在执行的任务,有的话,立即停了 |
| | | ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity(); |
| | |
| | | PatMedInhosp patMedInhosp = new PatMedInhosp(); |
| | | patMedInhosp.setInhospno(externalInHospPatientInfo.getBingAnHao()); |
| | | patMedInhosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID()); |
| | | List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp); |
| | | List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp); |
| | | for (PatMedInhosp patMedInhosp1 : patMedInhospList) { |
| | | String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); |
| | | String tagname = inhospVisitFacade.getTagnameBypatid(patMedInhosp1.getPatid()); |
| | | patMedInhosp1.setTagname(tagname); |
| | | } |
| | | Map<String, Object> JiuZhenXX = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("JiuZhenXX") : null; |
| | |
| | | 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); |
| | | int i = inhospVisitFacade.updatePatMedInhosp(patMedInhosp1); |
| | | if (i != 1) return false; |
| | | } else { |
| | | if (ObjectUtils.isNotEmpty(BingRenXX)) { |
| | |
| | | patMedInhosp1.setPatname(patArchive.getName()); |
| | | |
| | | patMedInhosp1.setCreateTime(new Date()); |
| | | int i = patMedInhospMapper.insertPatMedInhosp(patMedInhosp1); |
| | | int i = inhospVisitFacade.insertPatMedInhosp(patMedInhosp1); |
| | | if (i != 1) return false; |
| | | } |
| | | |
| | |
| | | PatMedInhosp patMedInhosp = new PatMedInhosp(); |
| | | patMedInhosp.setInhospno(externalInHospPatientInfo.getBingAnHao()); |
| | | patMedInhosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID()); |
| | | List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp); |
| | | List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp); |
| | | PatMedInhosp patMedInhosp1 = null; |
| | | if (CollectionUtils.isNotEmpty(patMedInhospList)) patMedInhosp1 = patMedInhospList.get(0); |
| | | if (ObjectUtils.isNotEmpty(patMedInhosp1)) { |
| | |
| | | patMedInhosp1.setUpdateTime(new Date()); |
| | | //更新出院状态 |
| | | patMedInhosp1.setInhospstate("1"); |
| | | int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1); |
| | | int i = inhospVisitFacade.updatePatMedInhosp(patMedInhosp1); |
| | | if (i != 1) return false; |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | |
| | | patMedOperation.setPatid(patArchive.getId()); |
| | | patMedOperation.setOpreqcode(externalOperationInfo.getShenQingDID()); |
| | | //查询一下,该患者是否已经有这些数据 |
| | | List<PatMedOperation> patMedOperations = patMedOperationMapper.selectPatMedOperationList(patMedOperation); |
| | | List<PatMedOperation> patMedOperations = otherVisitFacade.selectOperationList(patMedOperation); |
| | | |
| | | patMedOperation.setOpsstatus(null); |
| | | if (ObjectUtils.isNotEmpty(externalOperationInfo)) { |
| | |
| | | //同时去查询,是否在subtask中生成任务,如果生成出得立马删除 |
| | | } |
| | | patMedOperation.setUpdateTime(new Date()); |
| | | patMedOperationMapper.updatePatMedOperation(patMedOperation); |
| | | otherVisitFacade.updateOperation(patMedOperation); |
| | | } else { |
| | | patMedOperation.setCreateTime(new Date()); |
| | | patMedOperationMapper.insertPatMedOperation(patMedOperation); |
| | | otherVisitFacade.insertOperation(patMedOperation); |
| | | } |
| | | log.info("-----patMedOperation的主键id为:{}", patMedOperation.getId()); |
| | | |
| | |
| | | }).collect(Collectors.toList()) : null; |
| | | |
| | | if(ObjectUtils.isNotEmpty(patMedOperation.getId())){ |
| | | patMedOperationItemMapper.deleteHardPatMedOperationItemByOpId(patMedOperation.getId().toString()); |
| | | otherVisitFacade.deleteHardOperationItemByOpId(patMedOperation.getId().toString()); |
| | | } |
| | | |
| | | //addMianTableFalg是否需要将主手术的信息放到PatMedOperation表中(只有第一个主手术信息需要放,后面的都不需要放了,也就是说,第一个放完后,就要把这个flag改成false) |
| | |
| | | } |
| | | |
| | | patMedOperation.setUpdateTime(new Date()); |
| | | patMedOperationMapper.updatePatMedOperation(patMedOperation); |
| | | otherVisitFacade.updateOperation(patMedOperation); |
| | | addMianTableFalg = false; |
| | | } |
| | | patMedOperationItem.setCreateTime(new Date()); |
| | | patMedOperationItem.setUpdateTime(new Date()); |
| | | patMedOperationItemMapper.insertPatMedOperationItem(patMedOperationItem); |
| | | otherVisitFacade.insertOperationItem(patMedOperationItem); |
| | | } |
| | | } |
| | | return true; |
| | |
| | | patMedOperation.setOrgid(patArchive.getOrgid()); |
| | | patMedOperation.setOpreqcode(externalOperationInfo.getShenQingDID()); |
| | | //查询一下,该患者是否已经有这些数据 |
| | | List<PatMedOperation> patMedOperations = patMedOperationMapper.selectPatMedOperationList(patMedOperation); |
| | | List<PatMedOperation> patMedOperations = otherVisitFacade.selectOperationList(patMedOperation); |
| | | if (CollectionUtils.isNotEmpty(patMedOperations)) { |
| | | for(PatMedOperation operation : patMedOperations){ |
| | | Long id = operation.getId(); |
| | |
| | | //获取需要出院手术随访,未处理的数据 |
| | | pmoi.setOpid(operation.getId().toString()); |
| | | List<PatMedOperationItem> patMedOperationItems |
| | | = patMedOperationItemMapper.selectOperationItemList(pmoi); |
| | | = otherVisitFacade.selectOperationItemListByCondition(pmoi); |
| | | List<Long> operationItemIds = patMedOperationItems.stream() |
| | | .map(PatMedOperationItem::getId) |
| | | .filter(Objects::nonNull) |
| | |
| | | } |
| | | } |
| | | operation.setUpdateTime(new Date()); |
| | | patMedOperationMapper.updatePatMedOperation(operation); |
| | | patMedOperationItemMapper.deleteSoftPatMedOperationItemByOpId(operation.getOpid()); |
| | | otherVisitFacade.updateOperation(operation); |
| | | otherVisitFacade.deleteSoftOperationItemByOpId(operation.getOpid()); |
| | | } |
| | | } |
| | | } |
| | |
| | | //医院那边说要用病案号,不要用住院号 |
| | | patMedInhosp.setInhospno(externalInHospPatientInfo.getBingAnHao()); |
| | | patMedInhosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID()); |
| | | patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp); |
| | | patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp); |
| | | patMedInhosp.setHospitalname(externalInHospPatientInfo.getZuZhiJGMC()); |
| | | patMedInhosp.setHospitalcode(externalInHospPatientInfo.getZuZhiJGID()); |
| | | patMedInhosp.setStarttime(externalInHospPatientInfo.getRuYuanSJ()); |
| | |
| | | int i = 1; |
| | | if (CollectionUtils.isNotEmpty(patMedInhospList)) { |
| | | patMedInhosp.setInhospid(patMedInhospList.get(0).getInhospid()); |
| | | i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp); |
| | | i = inhospVisitFacade.updatePatMedInhosp(patMedInhosp); |
| | | } else { |
| | | patMedInhosp.setCreateTime(new Date()); |
| | | i = patMedInhospMapper.insertPatMedInhosp(patMedInhosp); |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | //新增随访任务同步 |
| | | @Override |
| | | public Boolean addTaskInfo(Map dataMap) { |