liusheng
2025-11-06 afb3216a7809c452e0f50555eb52aa9bc985f66b
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -1,10 +1,12 @@
package com.smartor.service.impl;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.dx.MessageSend;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.*;
import com.smartor.common.FtpService;
@@ -25,10 +27,7 @@
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.TimeUnit;
@@ -573,6 +572,8 @@
            serviceSubtask.setTaskid(serviceTask.getTaskid().longValue());
            serviceSubtask.setTemplatename(tempName);
            serviceSubtask.setTemplateid(tempid);
            serviceSubtask.setLibtemplateid(ObjectUtils.isEmpty(serviceTaskVO.getLibtemplateid()) ? null : Long.valueOf(serviceTaskVO.getLibtemplateid()));
            serviceSubtask.setLibtemplatename(serviceTaskVO.getLibtemplatename());
            //新增
            if (CollectionUtils.isNotEmpty(serviceTaskVO.getPatTaskRelevances())) {
                for (PatTaskRelevance patTaskRelevance : serviceTaskVO.getPatTaskRelevances()) {
@@ -649,6 +650,18 @@
            } else {
                if (CollectionUtils.isNotEmpty(serviceSubtaskList1)) serviceSubtaskList = serviceSubtaskList1;
            }
            if (CollectionUtils.isNotEmpty(serviceSubtaskList)) {
                for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
                    log.error("sfSend需要移除的subId为:{}", serviceSubtask.getId().toString());
                    serviceSubtaskMapper.deleteServiceSubtaskById(serviceSubtask.getId());
                    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());
                }
            }
            if (serviceTaskVO.getLibtemplateid() != null)
                serviceTask.setLibtemplateid(serviceTaskVO.getLibtemplateid().toString());
@@ -656,112 +669,114 @@
            serviceTask.setLongTask(serviceTaskVO.getLongTask());
            serviceTask.setUpdateTime(new Date());
            serviceTaskService.updateServiceTask(serviceTask);
            if (serviceTaskVO.getAppltype().equals("1") || serviceTaskVO.getAppltype().equals("2")) {
                if (StringUtils.isNotEmpty(serviceTaskVO.getDeptcode())) {
                    String[] deptcodes = serviceTaskVO.getDeptcode().split(",");
                    for (String deptCode : deptcodes) {
                        ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
                        serviceTaskdept.setTaskId(serviceTask.getTaskid());
                        serviceTaskdept.setTaskName(serviceTask.getTaskName());
                        serviceTaskdept.setLongtask(Long.valueOf(serviceTask.getLongTask()));
                        serviceTaskdept.setOrgid(serviceTaskVO.getOrgid());
                        serviceTaskdept.setDeptCode(deptCode);
                        serviceTaskdept.setDeptType("1");
                        serviceTaskdept.setServiceType(serviceTaskVO.getServiceType());
                        ServiceTaskdept st = new ServiceTaskdept();
                        st.setDeptCode(deptCode);
                        st.setTaskId(serviceTask.getTaskid());
                        List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptService.selectServiceTaskdeptList(st);
                        if (CollectionUtils.isEmpty(serviceTaskdepts)) {
                            serviceTaskdeptService.insertServiceTaskdept(serviceTaskdept);
                        } else {
                            serviceTaskdeptService.updateServiceTaskdept(serviceTaskdept);
            if (StringUtils.isNotEmpty(serviceTaskVO.getAppltype())) {
                if (serviceTaskVO.getAppltype().equals("1") || serviceTaskVO.getAppltype().equals("2")) {
                    if (StringUtils.isNotEmpty(serviceTaskVO.getDeptcode())) {
                        String[] deptcodes = serviceTaskVO.getDeptcode().split(",");
                        for (String deptCode : deptcodes) {
                            ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
                            serviceTaskdept.setTaskId(serviceTask.getTaskid());
                            serviceTaskdept.setTaskName(serviceTask.getTaskName());
                            serviceTaskdept.setLongtask(Long.valueOf(serviceTask.getLongTask()));
                            serviceTaskdept.setOrgid(serviceTaskVO.getOrgid());
                            serviceTaskdept.setDeptCode(deptCode);
                            serviceTaskdept.setDeptType("1");
                            serviceTaskdept.setServiceType(serviceTaskVO.getServiceType());
                            ServiceTaskdept st = new ServiceTaskdept();
                            st.setDeptCode(deptCode);
                            st.setTaskId(serviceTask.getTaskid());
                            List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptService.selectServiceTaskdeptList(st);
                            if (CollectionUtils.isEmpty(serviceTaskdepts)) {
                                serviceTaskdeptService.insertServiceTaskdept(serviceTaskdept);
                            } else {
                                serviceTaskdeptService.updateServiceTaskdept(serviceTaskdept);
                            }
                        }
                    }
                }
                if (StringUtils.isNotEmpty(serviceTaskVO.getLeavehospitaldistrictcode())) {
                    String[] leavehospitaldistrictcodes = serviceTaskVO.getLeavehospitaldistrictcode().split(",");
                    for (String districtcode : leavehospitaldistrictcodes) {
                        ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
                        serviceTaskdept.setTaskId(serviceTask.getTaskid());
                        serviceTaskdept.setTaskName(serviceTask.getTaskName());
                        serviceTaskdept.setLongtask(Long.valueOf(serviceTask.getLongTask()));
                        serviceTaskdept.setOrgid(serviceTaskVO.getOrgid());
                        serviceTaskdept.setDeptCode(districtcode);
                        serviceTaskdept.setDeptType("2");
                        serviceTaskdept.setServiceType(serviceTaskVO.getServiceType());
                        //先通过任务ID、部门code,判断ServiceTaskdept是否存在,不存在则新增,存在则修改
                        ServiceTaskdept st = new ServiceTaskdept();
                        st.setDeptCode(districtcode);
                        st.setTaskId(serviceTask.getTaskid());
                        List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptService.selectServiceTaskdeptList(st);
                        if (CollectionUtils.isEmpty(serviceTaskdepts)) {
                            serviceTaskdeptService.insertServiceTaskdept(serviceTaskdept);
                        } else {
                            serviceTaskdeptService.updateServiceTaskdept(serviceTaskdept);
                    if (StringUtils.isNotEmpty(serviceTaskVO.getLeavehospitaldistrictcode())) {
                        String[] leavehospitaldistrictcodes = serviceTaskVO.getLeavehospitaldistrictcode().split(",");
                        for (String districtcode : leavehospitaldistrictcodes) {
                            ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
                            serviceTaskdept.setTaskId(serviceTask.getTaskid());
                            serviceTaskdept.setTaskName(serviceTask.getTaskName());
                            serviceTaskdept.setLongtask(Long.valueOf(serviceTask.getLongTask()));
                            serviceTaskdept.setOrgid(serviceTaskVO.getOrgid());
                            serviceTaskdept.setDeptCode(districtcode);
                            serviceTaskdept.setDeptType("2");
                            serviceTaskdept.setServiceType(serviceTaskVO.getServiceType());
                            //先通过任务ID、部门code,判断ServiceTaskdept是否存在,不存在则新增,存在则修改
                            ServiceTaskdept st = new ServiceTaskdept();
                            st.setDeptCode(districtcode);
                            st.setTaskId(serviceTask.getTaskid());
                            List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptService.selectServiceTaskdeptList(st);
                            if (CollectionUtils.isEmpty(serviceTaskdepts)) {
                                serviceTaskdeptService.insertServiceTaskdept(serviceTaskdept);
                            } else {
                                serviceTaskdeptService.updateServiceTaskdept(serviceTaskdept);
                            }
                        }
                    }
                }
            } else if (serviceTaskVO.getAppltype().equals("3")) {
                ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag();
                serviceTaskdiag.setTaskId(serviceTask.getTaskid());
                serviceTaskdiag.setTaskName(serviceTask.getTaskName());
                if (StringUtils.isEmpty(serviceTaskVO.getIcd10code())) {
                    throw new BaseException("疾病编码为空");
                }
                serviceTaskdiag.setLongtask(Long.valueOf(serviceTask.getLongTask()));
                serviceTaskdiag.setIcd10name(serviceTaskVO.getIcd10name());
                serviceTaskdiag.setGuid(serviceTask.getGuid());
                serviceTaskdiag.setOrgid(serviceTask.getOrgid());
                serviceTaskdiag.setUpdateTime(new Date());
                if (StringUtils.isNotEmpty(serviceTaskVO.getIcd10code())) {
                    String[] icd10codes = serviceTaskVO.getIcd10code().split(",");
                    for (String icdcode : icd10codes) {
                        //先查询一下是否存在
                        ServiceTaskdiag serviceTaskdiag2 = new ServiceTaskdiag();
                        serviceTaskdiag2.setTaskId(serviceTaskVO.getTaskid());
                        serviceTaskdiag2.setIcd10code(icdcode);
                        List<ServiceTaskdiag> serviceTaskdiags = serviceTaskdiagService.selectServiceTaskdiagList(serviceTaskdiag2);
                        serviceTaskdiag.setIcd10code(icdcode);
                        log.info("----serviceTaskdiag更新的值为:{}", serviceTaskdiag);
                        if (CollectionUtils.isNotEmpty(serviceTaskdiags)) {
                            serviceTaskdiag.setId(serviceTaskdiags.get(0).getId());
                            serviceTaskdiagService.updateServiceTaskdiag(serviceTaskdiag);
                        } else {
                            serviceTaskdiagService.insertServiceTaskdiag(serviceTaskdiag);
                } else if (serviceTaskVO.getAppltype().equals("3")) {
                    ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag();
                    serviceTaskdiag.setTaskId(serviceTask.getTaskid());
                    serviceTaskdiag.setTaskName(serviceTask.getTaskName());
                    if (StringUtils.isEmpty(serviceTaskVO.getIcd10code())) {
                        throw new BaseException("疾病编码为空");
                    }
                    serviceTaskdiag.setLongtask(Long.valueOf(serviceTask.getLongTask()));
                    serviceTaskdiag.setIcd10name(serviceTaskVO.getIcd10name());
                    serviceTaskdiag.setGuid(serviceTask.getGuid());
                    serviceTaskdiag.setOrgid(serviceTask.getOrgid());
                    serviceTaskdiag.setUpdateTime(new Date());
                    if (StringUtils.isNotEmpty(serviceTaskVO.getIcd10code())) {
                        String[] icd10codes = serviceTaskVO.getIcd10code().split(",");
                        for (String icdcode : icd10codes) {
                            //先查询一下是否存在
                            ServiceTaskdiag serviceTaskdiag2 = new ServiceTaskdiag();
                            serviceTaskdiag2.setTaskId(serviceTaskVO.getTaskid());
                            serviceTaskdiag2.setIcd10code(icdcode);
                            List<ServiceTaskdiag> serviceTaskdiags = serviceTaskdiagService.selectServiceTaskdiagList(serviceTaskdiag2);
                            serviceTaskdiag.setIcd10code(icdcode);
                            log.info("----serviceTaskdiag更新的值为:{}", serviceTaskdiag);
                            if (CollectionUtils.isNotEmpty(serviceTaskdiags)) {
                                serviceTaskdiag.setId(serviceTaskdiags.get(0).getId());
                                serviceTaskdiagService.updateServiceTaskdiag(serviceTaskdiag);
                            } else {
                                serviceTaskdiagService.insertServiceTaskdiag(serviceTaskdiag);
                            }
                        }
                    }
                }
            } else if (serviceTaskVO.getAppltype().equals("4")) {
                ServiceTaskoper serviceTaskoper = new ServiceTaskoper();
                if (StringUtils.isEmpty(serviceTaskVO.getOpcode())) {
                    throw new BaseException("手术编码为空");
                }
                } else if (serviceTaskVO.getAppltype().equals("4")) {
                    ServiceTaskoper serviceTaskoper = new ServiceTaskoper();
                    if (StringUtils.isEmpty(serviceTaskVO.getOpcode())) {
                        throw new BaseException("手术编码为空");
                    }
//                serviceTaskoper.setOpcode(serviceTaskVO.getOpcode());
                serviceTaskoper.setOpdesc(serviceTaskVO.getOpdesc());
                serviceTaskoper.setTaskId(serviceTask.getTaskid());
                serviceTaskoper.setTaskName(serviceTask.getTaskName());
                serviceTaskoper.setLongtask(Long.valueOf(serviceTask.getLongTask()));
                serviceTaskoper.setGuid(serviceTask.getGuid());
                serviceTaskoper.setOrgid(serviceTask.getOrgid());
                serviceTaskoper.setCreateTime(new Date());
                if (StringUtils.isNotEmpty(serviceTaskVO.getOpcode())) {
                    String[] opcodes = serviceTaskVO.getOpcode().split(",");
                    for (String opcode : opcodes) {
                        //先查询一下是否存在
                        ServiceTaskoper serviceTaskoper2 = new ServiceTaskoper();
                        serviceTaskoper2.setTaskId(serviceTaskVO.getTaskid());
                        serviceTaskoper2.setOpcode(serviceTaskVO.getOpcode());
                        List<ServiceTaskoper> serviceTaskopers = serviceTaskoperService.selectServiceTaskoperList(serviceTaskoper2);
                    serviceTaskoper.setOpdesc(serviceTaskVO.getOpdesc());
                    serviceTaskoper.setTaskId(serviceTask.getTaskid());
                    serviceTaskoper.setTaskName(serviceTask.getTaskName());
                    serviceTaskoper.setLongtask(Long.valueOf(serviceTask.getLongTask()));
                    serviceTaskoper.setGuid(serviceTask.getGuid());
                    serviceTaskoper.setOrgid(serviceTask.getOrgid());
                    serviceTaskoper.setCreateTime(new Date());
                    if (StringUtils.isNotEmpty(serviceTaskVO.getOpcode())) {
                        String[] opcodes = serviceTaskVO.getOpcode().split(",");
                        for (String opcode : opcodes) {
                            //先查询一下是否存在
                            ServiceTaskoper serviceTaskoper2 = new ServiceTaskoper();
                            serviceTaskoper2.setTaskId(serviceTaskVO.getTaskid());
                            serviceTaskoper2.setOpcode(serviceTaskVO.getOpcode());
                            List<ServiceTaskoper> serviceTaskopers = serviceTaskoperService.selectServiceTaskoperList(serviceTaskoper2);
                        serviceTaskoper.setOpcode(opcode);
                        log.info("----serviceTaskoper的值为:{}", serviceTaskoper);
                        if (CollectionUtils.isNotEmpty(serviceTaskopers)) {
                            serviceTaskoper.setId(serviceTaskopers.get(0).getId());
                            serviceTaskoperService.updateServiceTaskoper(serviceTaskoper);
                        } else {
                            serviceTaskoperService.insertServiceTaskoper(serviceTaskoper);
                            serviceTaskoper.setOpcode(opcode);
                            log.info("----serviceTaskoper的值为:{}", serviceTaskoper);
                            if (CollectionUtils.isNotEmpty(serviceTaskopers)) {
                                serviceTaskoper.setId(serviceTaskopers.get(0).getId());
                                serviceTaskoperService.updateServiceTaskoper(serviceTaskoper);
                            } else {
                                serviceTaskoperService.insertServiceTaskoper(serviceTaskoper);
                            }
                        }
                    }
                }
@@ -787,6 +802,8 @@
            if (CollectionUtils.isNotEmpty(serviceTaskVO.getPatTaskRelevances())) {
                for (PatTaskRelevance patTaskRelevance : serviceTaskVO.getPatTaskRelevances()) {
                    ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTaskVO, ServiceSubtask.class);
                    serviceSubtask.setLibtemplateid(ObjectUtils.isEmpty(serviceTaskVO.getLibtemplateid()) ? null : Long.valueOf(serviceTaskVO.getLibtemplateid()));
                    serviceSubtask.setLibtemplatename(serviceTaskVO.getLibtemplatename());
                    serviceSubtask.setSendname(patTaskRelevance.getName());
                    serviceSubtask.setAge(patTaskRelevance.getAge());
                    serviceSubtask.setSfzh(patTaskRelevance.getSfzh());
@@ -2080,6 +2097,36 @@
        return result;
    }
    @Override
    public List<PatArchiveSrmVO> sendMsgTemplate(List<PatArchiveSrmVO> patArchiveSrmVOS) {
        //用来记录发送失败的
        List<PatArchiveSrmVO> sendError = new ArrayList<>();
        for (PatArchiveSrmVO patArchiveSrmVO : patArchiveSrmVOS) {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY年MM月dd日HH:mm");
            String timestamp = simpleDateFormat.format(patArchiveSrmVO.getVisitTime());
            StringBuilder stringBuilder = new StringBuilder();
            if (patArchiveSrmVO.getSrmTemplate().equals("入院准备中心-无检查")) {
                stringBuilder.append(patArchiveSrmVO.getName() + ",您好!主管医生已为您安排住院,请于当天");
            } else if (patArchiveSrmVO.getSrmTemplate().equals("入院准备中心-空腹检查")) {
                stringBuilder.append(patArchiveSrmVO.getName() + ",您好!主管医生已为您安排住院,请当天空腹并于");
            } else if (patArchiveSrmVO.getSrmTemplate().equals("日间病房—择期病人检查")) {
                stringBuilder.append(patArchiveSrmVO.getName() + ",您好!主管医生已为您安排住院前检查,请当天空腹并于");
            }
            stringBuilder.append(timestamp + "之前携带医保卡或电子医保卡身份证凭此条短信到1号楼3楼南入院准备中心入院登记窗口,办理正式住院手续,完成各项检查后再到相应病区护士站报到。");
            stringBuilder.append("入院准备中心电话:89975977。入院办理须知:https://mp.weixin.qq.com/s/OCkotuRyQ8Ld2owFF0YErw");
            String data = MessageSend.sendMsg(stringBuilder.toString(), "2", patArchiveSrmVO.getPhone(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
            if (StringUtils.isNotEmpty(data) && data.contains("result=0")) {
                sendError.add(patArchiveSrmVO);
            }
        }
        return sendError;
    }
    /**
     * 获取随访统计比例
     *