liusheng
8 天以前 f0a09ee996ab2605869844d6a3d812709e2bf0fa
smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
@@ -1,5 +1,7 @@
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.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
@@ -12,12 +14,12 @@
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.http.HttpUtils;
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;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -34,6 +36,17 @@
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;
/**
 * 主键Service业务层处理
 *
@@ -45,6 +58,12 @@
public class ServiceExternalServiceImpl implements IServiceExternalService {
    @Autowired
    private SysDept2Mapper sysDeptMapper;
    /**
     * 手术数据一律经 ruoyi-othervisit 的门面取用(跨模块数据访问原则)。
     */
    @Autowired
    private OtherVisitFacade otherVisitFacade;
    @Autowired
    private SysUser2Mapper sysUserMapper;
    @Autowired
@@ -56,11 +75,7 @@
    @Autowired
    private PatArchivecontactMapper patArchivecontactMapper;
    @Autowired
    private PatMedInhospMapper patMedInhospMapper;
    @Autowired
    private PatMedOperationMapper patMedOperationMapper;
    @Autowired
    private PatMedOperationItemMapper patMedOperationItemMapper;
    private InhospVisitFacade inhospVisitFacade;
    @Autowired
    private PatMedInspectionMapper patMedInspectionMapper;
    @Autowired
@@ -482,9 +497,9 @@
        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)) {
@@ -497,7 +512,7 @@
                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;
@@ -576,9 +591,9 @@
        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();
@@ -646,6 +661,21 @@
            }).collect(Collectors.toList());
            patMedInhosp1.setLeaveicd10code(hospPatientDiagnoseInfos2.get(0).getIcd10());
            patMedInhosp1.setLeavediagname(hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
            //只有诊断名称没有诊断码的数据
            if(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname())
                    && !StringUtils.isNotEmpty(patMedInhosp1.getLeaveicd10code())){
                Icd10 icd10 = new Icd10();
                icd10.setIcdname(patMedInhosp1.getLeavediagname());
                icd10.setDelFlag("0");
                icd10.setOrgid(ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null);
                //丽水无院区,默认值是 1
                icd10.setCampusid("1");
                //通过icdCode查询一下,是否存在
                List<Icd10> icd10s = icd10Mapper.exactQueryIcd10List(icd10);
                if(CollectionUtils.isEmpty(icd10s)){
                    patMedInhosp1.setLeaveicd10code(icd10s.get(0).getIcdcode());
                }
            }
            //patMedInhosp1.setDiagname(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname()) ? patMedInhosp1.getLeavediagname() + "," + hospPatientDiagnoseInfos2.get(0).getZhenDuanMC() : hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
            patMedInhosp1.setDiagname(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname()) ? patMedInhosp1.getLeavediagname() : hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
        }
@@ -678,7 +708,7 @@
                //不需要长期任务随访
                patMedInhosp1.setFuflag("0");
            }
            int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
            int i = inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
            if (i != 1) return false;
        } else {
            if (ObjectUtils.isNotEmpty(BingRenXX)) {
@@ -702,7 +732,7 @@
                patMedInhosp1.setFuflag("0");
            }
            int i = patMedInhospMapper.insertPatMedInhosp(patMedInhosp1);
            int i = inhospVisitFacade.insertPatMedInhosp(patMedInhosp1);
            if (i != 1) return false;
        }
        return true;
@@ -760,9 +790,9 @@
        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();
@@ -811,19 +841,40 @@
            }).collect(Collectors.toList());
            patMedInhosp1.setLeaveicd10code(hospPatientDiagnoseInfos2.get(0).getIcd10());
            patMedInhosp1.setLeavediagname(hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
            //只有诊断名称没有诊断码的数据
            if(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname())
                    && !StringUtils.isNotEmpty(patMedInhosp1.getLeaveicd10code())){
                Icd10 icd10 = new Icd10();
                icd10.setIcdname(patMedInhosp1.getLeavediagname());
                icd10.setDelFlag("0");
                icd10.setOrgid(ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null);
                //丽水无院区,默认值是 1
                icd10.setCampusid("1");
                //通过icdCode查询一下,是否存在
                List<Icd10> icd10s = icd10Mapper.exactQueryIcd10List(icd10);
                if(CollectionUtils.isEmpty(icd10s)){
                    patMedInhosp1.setLeaveicd10code(icd10s.get(0).getIcdcode());
                }
            }
            //patMedInhosp1.setDiagname(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname()) ? patMedInhosp1.getLeavediagname() + "," + hospPatientDiagnoseInfos2.get(0).getZhenDuanMC() : hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
            patMedInhosp1.setDiagname(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname()) ? patMedInhosp1.getLeavediagname() : hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
        }
        patMedInhosp1.setInhospstate("1");
        String orgid = ObjectUtils.isNotEmpty(BingRenXX) && ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null;
//        if(StringUtils.isNotEmpty(orgid) && orgid.equals("47246103233112211A1001")){
//            //缙云二院 住院记录不更新状态
//        }else {
//            patMedInhosp1.setInhospstate("1");
//        }
        if (CollectionUtils.isNotEmpty(patMedInhospList)) {
            patMedInhosp1.setUpdateTime(new Date());
            patMedInhosp1.setOrgid(ObjectUtils.isNotEmpty(BingRenXX) && ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null);
            patMedInhosp1.setOrgid(orgid);
            if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedInhosp1.getOrgid())) {
                //不需要长期任务随访
                patMedInhosp1.setFuflag("0");
            }
            int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
            int i = inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
            if (i != 1) return false;
        } else {
            if (ObjectUtils.isNotEmpty(BingRenXX)) {
@@ -831,7 +882,7 @@
                patMedInhosp1.setHospitalcode(ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null);
                patMedInhosp1.setLeavehospitaldistrictname(ObjectUtils.isNotEmpty(BingRenXX.get("DangQianBQMC")) ? BingRenXX.get("DangQianBQMC").toString() : null);
                patMedInhosp1.setLeavehospitaldistrictcode(ObjectUtils.isNotEmpty(BingRenXX.get("DangQianBQID")) ? BingRenXX.get("DangQianBQID").toString() : null);
                patMedInhosp1.setOrgid(ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null);
                patMedInhosp1.setOrgid(orgid);
                //丽水无院区,默认值是 1
                patMedInhosp1.setCampusid("1");
                patMedInhosp1.setPatno(ObjectUtils.isNotEmpty(BingRenXX.get("BingRenID")) ? BingRenXX.get("BingRenID").toString() : null);
@@ -846,7 +897,7 @@
                //不需要长期任务随访
                patMedInhosp1.setFuflag("0");
            }
            int i = patMedInhospMapper.insertPatMedInhosp(patMedInhosp1);
            int i = inhospVisitFacade.insertPatMedInhosp(patMedInhosp1);
            if (i != 1) return false;
        }
        return true;
@@ -861,9 +912,9 @@
        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)) {
@@ -877,7 +928,7 @@
                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();
@@ -961,9 +1012,9 @@
        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;
@@ -1024,6 +1075,21 @@
            }).collect(Collectors.toList());
            patMedInhosp1.setLeaveicd10code(hospPatientDiagnoseInfos2.get(0).getIcd10());
            patMedInhosp1.setLeavediagname(hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
            //只有诊断名称没有诊断码的数据
            if(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname())
                    && !StringUtils.isNotEmpty(patMedInhosp1.getLeaveicd10code())){
                Icd10 icd10 = new Icd10();
                icd10.setIcdname(patMedInhosp1.getLeavediagname());
                icd10.setDelFlag("0");
                icd10.setOrgid(ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null);
                //丽水无院区,默认值是 1
                icd10.setCampusid("1");
                //通过icdCode查询一下,是否存在
                List<Icd10> icd10s = icd10Mapper.exactQueryIcd10List(icd10);
                if(CollectionUtils.isEmpty(icd10s)){
                    patMedInhosp1.setLeaveicd10code(icd10s.get(0).getIcdcode());
                }
            }
            //patMedInhosp1.setDiagname(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname()) ? patMedInhosp1.getLeavediagname() + "," + hospPatientDiagnoseInfos2.get(0).getZhenDuanMC() : hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
            patMedInhosp1.setDiagname(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname()) ? patMedInhosp1.getLeavediagname() : hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
        }
@@ -1032,7 +1098,7 @@
        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)) {
@@ -1051,7 +1117,7 @@
            patMedInhosp1.setPatname(patArchive.getName());
            patMedInhosp1.setCreateTime(new Date());
            int i = patMedInhospMapper.insertPatMedInhosp(patMedInhosp1);
            int i = inhospVisitFacade.insertPatMedInhosp(patMedInhosp1);
            if (i != 1) return false;
        }
@@ -1086,7 +1152,7 @@
        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)) {
@@ -1097,7 +1163,7 @@
                    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();
@@ -1164,7 +1230,7 @@
        List<PatMedOuthosp> patMedOuthosps = patMedOuthospMapper.callSpQueryOuthosp(patMedOuthospreq);
        for (PatMedOuthosp patMedOuthosp1 : patMedOuthosps) {
            PatArchive pa = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosp1.getPatid());
            if (patArchive.getBirthdate() != null) {
            if (ObjectUtils.isNotEmpty(patArchive) && 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"));
@@ -1242,10 +1308,22 @@
            i = patMedOuthospService.insertPatMedOuthosp(patMedOuthosp);
        }
        Date adminDate = externalJZInfo.getJiuZhenRQ();
        Date adminDate = patMedOuthosp.getAdmitdate();
        //完成接诊 已经完成任务再次随访
        if(ObjectUtils.isNotEmpty(visitTimeNum) && ObjectUtils.isNotEmpty(adminDate)){
            patMedOuthospService.followUpAgainByPatMedOuthosp(patMedOuthosp, adminDate, visitTimeNum);
        if(ObjectUtils.isNotEmpty(visitTimeNum)
                && ObjectUtils.isNotEmpty(adminDate)
                && StringUtils.isNotEmpty(patMedOuthosp.getFuflag())
                && patMedOuthosp.getFuflag().equals("1")){
            if(visitTimeUnit.equals("天")){
                visitTimeNum = visitTimeNum;
            }else if(visitTimeUnit.equals("周")){
                visitTimeNum = visitTimeNum * 7;
            }else if(visitTimeUnit.equals("月")){
                visitTimeNum = visitTimeNum * 30;
            }else if(visitTimeUnit.equals("年")){
                visitTimeNum = visitTimeNum * 365;
            }
            patMedOuthospService.dealPatMedOuthosp(patMedOuthosp, visitTimeNum);
        }
        if (i > 0) {
@@ -1335,9 +1413,7 @@
        Map yeWuXX = (Map) dataMap.get("YeWuXX");
        Map<String, Object> BingRenXX = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("BingRenXX") : null;
        ExternalInHospPatientInfo externalInHospPatientInfo = BeanUtil.mapToBean(BingRenXX, ExternalInHospPatientInfo.class, true);
        PatArchive patArchive = addPatArchive(externalInHospPatientInfo, null, null);
        //手术信息新增
        Map<String, Object> ssxx = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("ShouShuSQ") : null;
@@ -1354,11 +1430,9 @@
            externalOperationInfo = BeanUtil.mapToBean(sscx, ExternalOperationInfo.class, true);
        PatMedOperation patMedOperation = new PatMedOperation();
        patMedOperation.setPatid(patArchive.getId());
        patMedOperation.setPatcode(externalInHospPatientInfo.getBingRenID());
        patMedOperation.setPaname(externalInHospPatientInfo.getXingMing());
        patMedOperation.setOpreqcode(externalOperationInfo.getShenQingDID());
        //查询一下,该患者是否已经有这些数据
        List<PatMedOperation> patMedOperations = patMedOperationMapper.selectPatMedOperationList(patMedOperation);
        List<PatMedOperation> patMedOperations = otherVisitFacade.selectOperationList(patMedOperation);
        patMedOperation.setOpsstatus(null);
        if (ObjectUtils.isNotEmpty(externalOperationInfo)) {
@@ -1406,9 +1480,17 @@
            //丽水无院区,默认值是 1
            patMedOperation.setCampusid("1");
            patMedOperation.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID());
            patMedOperation.setInhospstate(externalInHospPatientInfo.getBingRenLXDM());
            patMedOperation.setInhospno(externalInHospPatientInfo.getBingAnHao());
            patMedOperation.setHospitalname(externalInHospPatientInfo.getZuZhiJGMC());
            patMedOperation.setHospitalcode(externalInHospPatientInfo.getZuZhiJGID());
            patMedOperation.setPatcode(externalInHospPatientInfo.getBingRenID());
            patMedOperation.setPaname(externalInHospPatientInfo.getXingMing());
            patMedOperation.setLeaveldeptcode(externalInHospPatientInfo.getDangQianKSID());
            patMedOperation.setLeaveldeptname(externalInHospPatientInfo.getDangQianKSMC());
            patMedOperation.setLeavehospitaldistrictcode(externalInHospPatientInfo.getDangQianBQID());
            patMedOperation.setLeavehospitaldistrictname(externalInHospPatientInfo.getDangQianBQMC());
        }
        patMedOperation.setHospitaldistrictcode(null);
        patMedOperation.setHospitaldistrictname(null);
@@ -1427,10 +1509,10 @@
                //同时去查询,是否在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());
@@ -1453,11 +1535,17 @@
                return info;
            }).collect(Collectors.toList()) : null;
            if(ObjectUtils.isNotEmpty(patMedOperation.getId())){
                otherVisitFacade.deleteHardOperationItemByOpId(patMedOperation.getId().toString());
            }
            //addMianTableFalg是否需要将主手术的信息放到PatMedOperation表中(只有第一个主手术信息需要放,后面的都不需要放了,也就是说,第一个放完后,就要把这个flag改成false)
            Boolean addMianTableFalg = true;
            for (ExternalOperationDetail externalOperationDetail : externalOperationDetails) {
                PatMedOperationItem patMedOperationItem = new PatMedOperationItem();
                patMedOperationItem.setOpid(patMedOperation.getOpid());
                if(ObjectUtils.isNotEmpty(patMedOperation.getId())){
                    patMedOperationItem.setOpid(patMedOperation.getId().toString());
                }
                patMedOperationItem.setOpcode(externalOperationDetail.getShouShuMCID());
                patMedOperationItem.setOpdesc(externalOperationDetail.getShouShuMC());
                patMedOperationItem.setMainFlag(externalOperationDetail.getZhuShouSBZ());
@@ -1468,18 +1556,99 @@
                patMedOperationItem.setOpposition(externalOperationDetail.getShouShuBW());
                patMedOperationItem.setDelFlag("0");
                patMedOperationItem.setOrgid(patMedOperation.getOrgid());
                patMedOperationItem.setInhospstate(patMedOperation.getInhospstate());
                patMedOperationItem.setSerialnum(patMedOperation.getSerialnum());
                //丽水无院区,默认值是 1
                patMedOperationItem.setCampusid("1");
                if (externalOperationDetail.getZhuShouSBZ().equals("1") && addMianTableFalg == true) {
                    patMedOperation.setOpcode(externalOperationDetail.getShouShuMCID());
                    patMedOperation.setOpdesc(externalOperationDetail.getShouShuMC());
//                    patMedOperation.setOpid(externalOperationDetail.getShouShuJBDM());
                    if(ObjectUtils.isNotEmpty(patMedOperation.getId())){
                        patMedOperation.setOpid(patMedOperation.getId().toString());
                    }
                    patMedOperation.setUpdateTime(new Date());
                    patMedOperationMapper.updatePatMedOperation(patMedOperation);
                    otherVisitFacade.updateOperation(patMedOperation);
                    addMianTableFalg = false;
                }
                patMedOperationItem.setCreateTime(new Date());
                patMedOperationItemMapper.insertPatMedOperationItem(patMedOperationItem);
                patMedOperationItem.setUpdateTime(new Date());
                otherVisitFacade.insertOperationItem(patMedOperationItem);
            }
        }
        return true;
    }
    @Override
    public Boolean cancelOperationInfo(Map dataMap) {
        log.info("ServiceExternalServiceImpl---cancelOperationInfo的撤销的值为:{}", dataMap);
        Map yeWuXX = (Map) dataMap.get("YeWuXX");
        Map<String, Object> BingRenXX = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("BingRenXX") : null;
        ExternalInHospPatientInfo externalInHospPatientInfo = BeanUtil.mapToBean(BingRenXX, ExternalInHospPatientInfo.class, true);
        PatArchive patArchive = addPatArchive(externalInHospPatientInfo, null, null);
        //手术撤销
        Map<String, Object> sscx = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("ShouShuCX") : null;
        ExternalOperationInfo externalOperationInfo = null;
        if (ObjectUtils.isNotEmpty(sscx))
            externalOperationInfo = BeanUtil.mapToBean(sscx, ExternalOperationInfo.class, true);
        PatMedOperation patMedOperation = new PatMedOperation();
        patMedOperation.setPatid(patArchive.getId());
        patMedOperation.setOrgid(patArchive.getOrgid());
        patMedOperation.setOpreqcode(externalOperationInfo.getShenQingDID());
        //查询一下,该患者是否已经有这些数据
        List<PatMedOperation> patMedOperations = otherVisitFacade.selectOperationList(patMedOperation);
        if (CollectionUtils.isNotEmpty(patMedOperations)) {
            for(PatMedOperation operation : patMedOperations){
                Long id = operation.getId();
                //如果手术撤销,直接删除该条手术信息
                if (ObjectUtils.isNotEmpty(sscx)) {
                    operation.setId(id);
                    operation.setCheckFlag("1");
                    operation.setDelFlag("1");
                    //同时去查询,是否在subtask中生成任务,如果生成出得立马删除
                    //            手术随访
                    PatMedOperationItem pmoi = new PatMedOperationItem();
                    //获取需要出院手术随访,未处理的数据
                    pmoi.setOpid(operation.getId().toString());
                    List<PatMedOperationItem> patMedOperationItems
                            = otherVisitFacade.selectOperationItemListByCondition(pmoi);
                    List<Long> operationItemIds = patMedOperationItems.stream()
                            .map(PatMedOperationItem::getId)
                            .filter(Objects::nonNull)
                            .distinct()
                            .collect(Collectors.toList());
                    //不需要服务了,需要通过patid和sendstate=1,2,3,5,7去查询一下,service_subtask里是否有正在执行的任务,
                    //有的话,立即停了
                    List<Long> sendstates = Arrays.asList(1L, 2L, 3L, 5L, 7L);
                    List<ServiceSubtask> serviceSubtaskList = new ArrayList<>();
                    ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
                    serviceSubtaskVO.setOrgid(patArchive.getOrgid());
                    serviceSubtaskVO.setPatid(patArchive.getId());
                    serviceSubtaskVO.setSendstates(sendstates);
                    serviceSubtaskVO.setOperationItemIds(operationItemIds);
                    serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
                    //去redis中,查询是否有subid,有的话移除cache-exist
                    if (CollectionUtils.isNotEmpty(serviceSubtaskList)) {
                        for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
                            log.info("需要移除的subId为:{}", serviceSubtask.getId().toString());
                            serviceSubtask.setSendstate(4L);
                            serviceSubtask.setRemark("手术撤销");
                            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
                            redisCache.removeElementFromList("cache-exist", serviceSubtask.getId().toString());
                            redisCache.removeElementFromList("cache-0", serviceSubtask.getId().toString());
                            redisCache.removeElementFromList("cache-1", serviceSubtask.getId().toString());
                            redisCache.removeElementFromList("cache-2", serviceSubtask.getId().toString());
                            redisCache.removeElementFromList("cache-3", serviceSubtask.getId().toString());
                            redisCache.removeElementFromList("cache-4", serviceSubtask.getId().toString());
                        }
                    }
                    operation.setUpdateTime(new Date());
                    otherVisitFacade.updateOperation(operation);
                    otherVisitFacade.deleteSoftOperationItemByOpId(operation.getOpid());
                }
            }
        }
        return true;
@@ -1597,7 +1766,7 @@
            //医院那边说要用病案号,不要用住院号
            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());
@@ -1648,10 +1817,10 @@
        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) return true;
        return false;
@@ -1687,6 +1856,7 @@
        Map yeWuXX = (Map) dataMap.get("YeWuXX");
        Map<String, Object> BingRenXX = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("BingRenXX") : null;
        Map<String, Object> JianChaSQ = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("JianChaSQ") : null;
        Map<String, Object> JianChaBG = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("JianChaBG") : null;
        List<HashMap<String, Object>> JianChaBWList = ObjectUtils.isNotEmpty(JianChaSQ) ? (List<HashMap<String, Object>>) JianChaSQ.get("JianChaBWList") : null;
        List<HashMap<String, Object>> ZhenDuanList = ObjectUtils.isNotEmpty(JianChaSQ) ? (List<HashMap<String, Object>>) JianChaSQ.get("ZhenDuanList") : null;
        List<HashMap<String, Object>> epai = ObjectUtils.isNotEmpty(BingRenXX) ? (List<HashMap<String, Object>>) BingRenXX.get("DiZhiXXList") : null;
@@ -1780,6 +1950,9 @@
                    e.printStackTrace();
                }
            }
        }
        if (ObjectUtils.isNotEmpty(JianChaBG)) {
            patMedInspection.setAppliyid(ObjectUtils.isNotEmpty(JianChaBG.get("ShenQingDID")) ? JianChaBG.get("ShenQingDID").toString() : null);
        }
        if (CollectionUtils.isNotEmpty(JianChaBWList)) {
            List<ExternalInspectionJC> externalInspectionJC = JianChaBWList.stream().map(map -> {
@@ -1973,6 +2146,13 @@
                log.info("手术申请入参类型为:{}", type);
                addOperationInfo(dataMap);
                return true;
            case "SM_SQ_ShouShuAP":
                log.info("手术安排入参类型为:{}", type);
                return true;
            case "SM_SQ_CheXiao":
                log.info("手术撤销入参类型为:{}", type);
                cancelOperationInfo(dataMap);
                return true;
            case "TJ_YW_BaoGaoXX":
                log.info("体检报告入参类型为:{}", type);
                return true;