已修改27个文件
1168 ■■■■ 文件已修改
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/Icd10Controller.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-nhfy.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-sltd.yml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/PatMedInhosp.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/PatMedInhospVO.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceSubtask.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceSubtaskRes.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceTask.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceTaskVO.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceTaskdept.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceTaskdiag.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceTaskoper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/Icd10Mapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/IIcd10Service.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/Icd10ServiceImpl.java 208 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java 429 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/UserExtInfoServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/Icd10Mapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java
@@ -1,9 +1,15 @@
package com.ruoyi.web.controller.common;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.dx.MessageSend;
import com.ruoyi.common.utils.HttpUtil;
import com.ruoyi.common.utils.RSAPublicKeyExample;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.sms.smsUtils;
import com.smartor.common.MtSubmitSmUtil;
import com.smartor.domain.ServiceOutPath;
import com.smartor.domain.smsVO;
import com.smartor.mapper.UtilsMapper;
@@ -20,7 +26,11 @@
import org.springframework.web.bind.annotation.RestController;
import java.io.UnsupportedEncodingException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@RestController
@Api(description = "知信接口")
@@ -29,6 +39,9 @@
public class SmsController {
    @Value("${xhsmsPath}")
    private String xhsmsPath;
    @Autowired
    private MtSubmitSmUtil mtSubmitSmUtil;
    @Value("${xhsmsAccount}")
    private String xhsmsAccount;
@@ -48,8 +61,8 @@
    @Autowired
    private IServiceOutPathService iServiceOutPathService;
    @Autowired
    private UtilsMapper utilsMapper;
    @Value("${spring.profiles.active}")
    private String active;
    /**
     * @param
@@ -91,9 +104,34 @@
        if (ObjectUtils.isNotEmpty(vo.getContent())) content = vo.getContent();
        String sendMsg = "";
        String sendMsg = "false";
        try {
            sendMsg = smsUtils.sendSms(xhsmsPath, xhsmsAccount, xhsmsPwd, vo.getPhone(), content);
            if (active.equals("hzszlyy")) {
                sendMsg = smsUtils.sendSms(xhsmsPath, xhsmsAccount, xhsmsPwd, vo.getPhone(), content);
            } else if (active.equals("nhfy")) {
                Map<String, Object> smsResult = mtSubmitSmUtil.submitSm(vo.getPhone(), content);
                if (smsResult != null && smsResult.get("result") != null && smsResult.get("result").toString().equals("0")) {
                    sendMsg = "true";
                }
            } else if (active.equals("sltd")) {
                String data = MessageSend.sendMsg(content, "6", vo.getPhone(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
                if (StringUtils.isNotEmpty(data)) {
                    ObjectMapper mapper = new ObjectMapper();
                    JsonNode root = mapper.readTree(data);
                    String status = root.get("result").get(0).get("status").asText();
                    if (status.equals("00000")) {
                        sendMsg = "true";
                    }
                }
            } else if (active.equals("xh")) {
                Map<String, String> req = new HashMap<>();
                req.put("phone", vo.getPhone());
                req.put("content", vo.getContent());
                sendMsg = HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(req));
            } else if (active.equals("ls")) {
                //丽水13家医院,有点不方便,有空再接
                return AjaxResult.error("该短信功能还未开通");
            }
            log.info(sendMsg);
        } catch (Exception ex) {
            log.error(ex.getMessage());
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/Icd10Controller.java
@@ -47,6 +47,17 @@
    }
    /**
     * 查询疾病列表
     */
    @ApiOperation("查询疾病列表")
    //@PreAuthorize("@ss.hasPermi('system:icd10:list')")
    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
    @GetMapping("/queryAddIcd10")
    public void queryAddIcd10() {
        int list = icd10Service.queryAddIcd10();
    }
    /**
     * 导出疾病列表
     */
    @ApiOperation("导出疾病列表")
ruoyi-admin/src/main/resources/application-nhfy.yml
@@ -242,7 +242,7 @@
lwl_app_key: ak-LMyQUE4rjW25UO7otb8XMXzv
# 南华附一取数据公共接口
sltd_pub_path: "http://open.nhyfy.cn/kapi/gw-api/"
sltd_pub_path: "http://open.nhyfy.cn/kapi/gw-api"
sms_accountName: S200232
sms_password: lD94Yo
ruoyi-admin/src/main/resources/application-sltd.yml
@@ -247,3 +247,5 @@
# 来未来app_key
lwl_app_key: ak-zUMiOWhqXiJQWPB1pCbz0pjr
sltd_pub_path: "http://open-tdyy.cfuture.shop/kapi/gw-api"
ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
@@ -72,6 +72,8 @@
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            connection.setConnectTimeout(5000);
            connection.setReadTimeout(10000);
            connection.connect();
            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType));
            String line;
@@ -120,6 +122,8 @@
            conn.setRequestProperty("Accept-Charset", "utf-8");
            conn.setRequestProperty("Charsert", "UTF-8");
            conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(10000);
            conn.setDoOutput(true);
            conn.setDoInput(true);
            out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), StandardCharsets.UTF_8));
@@ -167,6 +171,8 @@
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            conn.setRequestProperty("Accept-Charset", "utf-8");
            conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(10000);
            conn.setDoOutput(true);
            conn.setDoInput(true);
            if (!Objects.isNull(headers)) {
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -222,15 +222,22 @@
    }
    /**
     * 记录登录信息
     * 记录登录信息(异步执行,不阻塞登录主流程)
     *
     * @param userId 用户ID
     */
    public void recordLoginInfo(Long userId) {
        SysUser sysUser = new SysUser();
        sysUser.setUserId(userId);
        sysUser.setLoginIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
        sysUser.setLoginDate(DateUtils.getNowDate());
        userService.updateUserProfile(sysUser);
        // 在异步前捕获IP,避免异步线程中Request上下文失效
        String loginIp = IpUtils.getIpAddr(ServletUtils.getRequest());
        AsyncManager.me().execute(new java.util.TimerTask() {
            @Override
            public void run() {
                SysUser sysUser = new SysUser();
                sysUser.setUserId(userId);
                sysUser.setLoginIp(loginIp);
                sysUser.setLoginDate(DateUtils.getNowDate());
                userService.updateUserProfile(sysUser);
            }
        });
    }
}
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -130,7 +130,7 @@
    private IServiceSubtaskRecordService serviceSubtaskRecordService;
    @Autowired
    IBaseSmsaccountService baseSmsaccountService;
    IIcd10Service iIcd10Service;
    @Autowired
    IPatArchiveService patArchiveService;
@@ -253,7 +253,8 @@
            } catch (Exception e) {
                log.error("【dealHisData】新华数据采集异常", e);
            }
        } else if (active.trim().equals("hn")) {
        }
        else if (active.trim().equals("hn")) {
            try {
                // 河南数据采集
                HnDataGatherVO hnDataGatherVO = new HnDataGatherVO();
@@ -268,7 +269,8 @@
            } catch (Exception e) {
                log.error("【dealHisData】河南数据采集异常", e);
            }
        } else if (active.trim().equals("sltd") || active.trim().equals("nhfy")) {
        }
        else if (active.trim().equals("sltd") || active.trim().equals("nhfy")) {
            //省立同德与华南附一用同一套采集方法(都是来未来提供)
            try {
@@ -315,6 +317,9 @@
                    }
                    log.info("【dealHisData】省立同德“用户信息”结束采集数据:{}", aBoolean);
                }
                //疾病字典采集
                iIcd10Service.queryAddIcd10();
                // 省立同德数据采集
                for (Long cid : campusidList) {
                    log.debug("【dealHisData】省立同德“预入院”开始采集数据,院区:{}", cid);
@@ -324,6 +329,10 @@
                    serviceSLTDInhospReqVO.setCampusId(cid);
                    serviceSLTDInhospReqVO.setEncounterTimeStart(nowTime);
                    serviceSLTDInhospReqVO.setEncounterTimeEnd(nowTime);
                    if(active.trim().equals("nhfy")) {
                        serviceSLTDInhospReqVO.setEncounterTimeStart(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                        serviceSLTDInhospReqVO.setEncounterTimeEnd(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                    }
                    List<String> list = new ArrayList<>();
                    list.add("FH0109.22");
                    list.add("FH0109.23");
@@ -340,6 +349,10 @@
                    serviceSLTDInhospReqVO.setEncounterTimeEnd(null);
                    serviceSLTDInhospReqVO.setStartHeadTime(nowTime);
                    serviceSLTDInhospReqVO.setStartTailTime(nowTime);
                    if(active.trim().equals("nhfy")) {
                        serviceSLTDInhospReqVO.setStartHeadTime(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                        serviceSLTDInhospReqVO.setStartTailTime(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                    }
                    List<String> listStr = new ArrayList<>();
                    listStr.add("FH0109.26");
                    serviceSLTDInhospReqVO.setStatusList(listStr);
@@ -353,6 +366,10 @@
                    serviceSLTDInhospReqVO.setStartTailTime(null);
                    serviceSLTDInhospReqVO.setEncounterTimeStart(nowTime);
                    serviceSLTDInhospReqVO.setEncounterTimeEnd(nowTime);
                    if(active.trim().equals("nhfy")) {
                        serviceSLTDInhospReqVO.setEncounterTimeStart(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                        serviceSLTDInhospReqVO.setEncounterTimeEnd(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                    }
                    serviceSLTDInhospReqVO.setStatusList(null);
                    List<String> list1 = new ArrayList<>();
                    list1.add("FH0108.01");
@@ -387,6 +404,10 @@
                    serviceSLTDInhospReqVO.setEncounterTimeEnd(null);
                    serviceSLTDInhospReqVO.setPreOutHospitalHeadDate(nowTime);
                    serviceSLTDInhospReqVO.setPreOutHospitalTailDate(nowTime);
                    if(active.trim().equals("nhfy")) {
                        serviceSLTDInhospReqVO.setPreOutHospitalHeadDate(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                        serviceSLTDInhospReqVO.setPreOutHospitalTailDate(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                    }
                    serviceSLTDInhospReqVO.setHealthcareRecordTypeList(null);
                    List<String> list2 = new ArrayList<>();
//                    list2.add("FH0108.02");
@@ -435,9 +456,7 @@
            log.error("【dealHisData】省立同德数据采集异常", e);
        }
    }
    /**
    }    /**
     * 这个只是新华临时使用,平时用不到
     */
    public void dealHisData2() {
ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml
@@ -198,6 +198,8 @@
        <result property="inhospstate" column="inhospstate"/>
        <result property="deptcheckFlag" column="deptcheck_flag"/>
        <result property="wardcheckFlag" column="wardcheck_flag"/>
        <result property="inDeptcheckFlag" column="in_deptcheck_flag"/>
        <result property="inWardcheckFlag" column="in_wardcheck_flag"/>
        <result property="diagcheckFlag" column="diagcheck_flag"/>
        <result property="age" column="age"/>
        <result property="sex" column="sex"/>
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -28,6 +28,9 @@
import javax.validation.Validator;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -177,87 +180,103 @@
    public SysUser selectUserByUserName2(String userName) {
        String[] split = userName.split("&");
        SysUser sysUser = userMapper.selectUserByUserNameByCondition(split[0], split[1], null);
        if (Objects.isNull(sysUser)) return sysUser;
        //获取当前登陆人的机构和院�?
        boolean isAdmin = StringUtils.isNotEmpty(split[0]) && "admin".equals(split[0]);
        IUserExtInfoService userExtInfoService = SpringUtils.getBean(IUserExtInfoService.class);
        Map<String, String> userOrgInfo = userExtInfoService.getUserOrgInfo(
                sysUser.getUserId().toString(),
                split[1],
                split[2]);
        Executor executor = SpringUtils.getBean("threadPoolTaskExecutor");
        // === 并行查询: 用户机构信息 + 部门列表 ===
        CompletableFuture<Map<String, String>> orgInfoFuture = CompletableFuture.supplyAsync(() ->
                userExtInfoService.getUserOrgInfo(sysUser.getUserId().toString(), split[1], split[2]), executor);
        CompletableFuture<List<SysDept>> deptsFuture;
        if (isAdmin) {
            SysDept dept = new SysDept();
            dept.setOrgid(split[1]);
            deptsFuture = CompletableFuture.supplyAsync(() -> sysDeptMapper.selectDeptList(dept), executor);
        } else {
            deptsFuture = CompletableFuture.supplyAsync(() -> sysUserDeptMapper.selectDeptListByUserId(sysUser.getUserId()), executor);
        }
        // 等待机构信息
        Map<String, String> userOrgInfo = new HashMap<>();
        try {
            userOrgInfo = orgInfoFuture.get(5, TimeUnit.SECONDS);
        } catch (Exception e) {
            log.warn("获取用户机构信息超时或异常", e);
        }
        if (!userOrgInfo.isEmpty()) {
            sysUser.setOrgid(userOrgInfo.get("orgid"));
            sysUser.setCampusid(userOrgInfo.get("campusid"));
        }
        if (Objects.isNull(sysUser)) return sysUser;
        List<SysDept> sysDepts = null;
        if (StringUtils.isNotEmpty(split[0]) && split[0].equals("admin")) {
            SysDept dept = new SysDept();
            dept.setOrgid(split[1]);
            sysDepts = sysDeptMapper.selectDeptList(dept);
        } else {
            sysDepts = sysUserDeptMapper.selectDeptListByUserId(sysUser.getUserId());
        // 等待部门列表
        List<SysDept> sysDepts = new ArrayList<>();
        try {
            sysDepts = deptsFuture.get(5, TimeUnit.SECONDS);
        } catch (Exception e) {
            log.warn("获取部门列表超时或异常", e);
        }
        List<Long> deptIds = new ArrayList<>();
        for (SysDept sysDept : sysDepts) {
            deptIds.add(sysDept.getDeptId());
        }
        SysUserDept sysUserDept = new SysUserDept();
        sysUserDept.setUserId(sysUser.getUserId());
        sysUserDept.setDeptType(sysUser.getSearchscope());
        sysUserDept.setOrgid(split[1]);
        // === 查询科室和病区信息 ===
        List<SysUserDept> sysUserDeptKSs = null;
        List<SysUserDept> sysUserDeptBQs = null;
        if (StringUtils.isNotEmpty(sysUser.getSearchscope()) && sysUser.getSearchscope().equals("0")) {
            if (StringUtils.isNotEmpty(split[0]) && split[0].equals("admin")) {
                sysUserDept.setUserId(null);
            }
            sysUserDept.setDeptType("1");
            sysUserDeptKSs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
            sysUserDept.setDeptType("2");
            sysUserDeptBQs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
            //如果是admin,需要对sysUserDeptBQs,sysUserDeptBQs去重
            if (StringUtils.isNotEmpty(split[0]) && split[0].equals("admin")) {
                //如果是admin,只能去sys_dept去取数据
                SysDept dept = new SysDept();
                dept.setOrgid(split[1]);
                dept.setDeptType("1");
                sysDepts = sysDeptMapper.selectDeptList(dept);
                sysUserDeptKSs = DtoConversionUtils.sourceToTarget(sysDepts, SysUserDept.class);
                dept.setDeptType("2");
                sysDepts = sysDeptMapper.selectDeptList(dept);
                sysUserDeptBQs = DtoConversionUtils.sourceToTarget(sysDepts, SysUserDept.class);
                List<SysUserDept> distinctUserDepts = new ArrayList<>();
                Set<String> uniqueDeptCodes = new HashSet<>();
                for (SysUserDept userDept : sysUserDeptKSs) {
                    String deptCode = userDept.getDeptCode();
                    if (StringUtils.isNotEmpty(deptCode) && !uniqueDeptCodes.contains(deptCode)) {
                        distinctUserDepts.add(userDept);
                        uniqueDeptCodes.add(deptCode);
        if (StringUtils.isNotEmpty(sysUser.getSearchscope())) {
            if ("0".equals(sysUser.getSearchscope())) {
                if (isAdmin) {
                    // admin直接从sys_dept查询,跳过无意义的selectSysUserDeptList
                    SysDept deptKS = new SysDept();
                    deptKS.setOrgid(split[1]);
                    deptKS.setDeptType("1");
                    SysDept deptBQ = new SysDept();
                    deptBQ.setOrgid(split[1]);
                    deptBQ.setDeptType("2");
                    CompletableFuture<List<SysDept>> ksFuture = CompletableFuture.supplyAsync(() -> sysDeptMapper.selectDeptList(deptKS), executor);
                    CompletableFuture<List<SysDept>> bqFuture = CompletableFuture.supplyAsync(() -> sysDeptMapper.selectDeptList(deptBQ), executor);
                    try {
                        sysUserDeptKSs = distinctByDeptCode(DtoConversionUtils.sourceToTarget(ksFuture.get(5, TimeUnit.SECONDS), SysUserDept.class));
                        sysUserDeptBQs = distinctByDeptCode(DtoConversionUtils.sourceToTarget(bqFuture.get(5, TimeUnit.SECONDS), SysUserDept.class));
                    } catch (Exception e) {
                        log.warn("获取admin科室/病区信息超时或异常", e);
                    }
                } else {
                    // 并行查询科室和病区
                    SysUserDept queryKS = new SysUserDept();
                    queryKS.setUserId(sysUser.getUserId());
                    queryKS.setDeptType("1");
                    queryKS.setOrgid(split[1]);
                    SysUserDept queryBQ = new SysUserDept();
                    queryBQ.setUserId(sysUser.getUserId());
                    queryBQ.setDeptType("2");
                    queryBQ.setOrgid(split[1]);
                    CompletableFuture<List<SysUserDept>> ksFuture = CompletableFuture.supplyAsync(() -> sysUserDeptMapper.selectSysUserDeptList(queryKS), executor);
                    CompletableFuture<List<SysUserDept>> bqFuture = CompletableFuture.supplyAsync(() -> sysUserDeptMapper.selectSysUserDeptList(queryBQ), executor);
                    try {
                        sysUserDeptKSs = ksFuture.get(5, TimeUnit.SECONDS);
                        sysUserDeptBQs = bqFuture.get(5, TimeUnit.SECONDS);
                    } catch (Exception e) {
                        log.warn("获取科室/病区信息超时或异常", e);
                    }
                }
                List<SysUserDept> distinctUserBQs = new ArrayList<>();
                Set<String> uniqueBQCodes = new HashSet<>();
                for (SysUserDept userDept : sysUserDeptBQs) {
                    String deptCode = userDept.getDeptCode();
                    if (StringUtils.isNotEmpty(deptCode) && !uniqueBQCodes.contains(deptCode)) {
                        distinctUserBQs.add(userDept);
                        uniqueBQCodes.add(deptCode);
                    }
                }
                sysUserDeptKSs = distinctUserDepts;
                sysUserDeptBQs = distinctUserBQs;
            } else if ("1".equals(sysUser.getSearchscope())) {
                SysUserDept queryKS = new SysUserDept();
                queryKS.setUserId(sysUser.getUserId());
                queryKS.setDeptType("1");
                queryKS.setOrgid(split[1]);
                sysUserDeptKSs = sysUserDeptMapper.selectSysUserDeptList(queryKS);
            } else if ("2".equals(sysUser.getSearchscope())) {
                SysUserDept queryBQ = new SysUserDept();
                queryBQ.setUserId(sysUser.getUserId());
                queryBQ.setDeptType("2");
                queryBQ.setOrgid(split[1]);
                sysUserDeptBQs = sysUserDeptMapper.selectSysUserDeptList(queryBQ);
            }
        } else if (StringUtils.isNotEmpty(sysUser.getSearchscope()) && sysUser.getSearchscope().equals("1")) {
            sysUserDept.setDeptType("1");
            sysUserDeptKSs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
        } else if (StringUtils.isNotEmpty(sysUser.getSearchscope()) && sysUser.getSearchscope().equals("2")) {
            sysUserDept.setDeptType("2");
            sysUserDeptBQs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
        }
        sysUser.setDepts(deptIds);
@@ -285,16 +304,32 @@
                if (StringUtils.isNotEmpty(sud.getDeptName())) map.put("deptName", sud.getDeptName());
                list.add(map);
            }
            //获取当前机构的满意度问题分类
            sysUser.setBelongDepts(list);
            Map<String, Object> satisfactionCategories = new HashMap<>();
            //设置当前用户的声音问题分类和问卷问题分类
            IUserExtInfoService userExtInfoService3 = SpringUtils.getBean(IUserExtInfoService.class);
            sysUser.setSatisfactionCategories(userExtInfoService3.getSatisfactionCategories(sysUser.getOrgid()));
            // 设置满意度分类(走缓存)
            sysUser.setSatisfactionCategories(userExtInfoService.getSatisfactionCategories(sysUser.getOrgid()));
        }
        return sysUser;
    }
    /**
     * 按deptCode去重
     */
    private List<SysUserDept> distinctByDeptCode(List<SysUserDept> list) {
        if (CollectionUtils.isEmpty(list)) {
            return list;
        }
        List<SysUserDept> result = new ArrayList<>();
        Set<String> uniqueCodes = new HashSet<>();
        for (SysUserDept item : list) {
            String deptCode = item.getDeptCode();
            if (StringUtils.isNotEmpty(deptCode) && !uniqueCodes.contains(deptCode)) {
                result.add(item);
                uniqueCodes.add(deptCode);
            }
        }
        return result;
    }
    @Override
    public SysUser selectUserByUserNameAndDeptId(String userName) {
        String[] split = userName.split("&");
smartor/src/main/java/com/smartor/domain/PatMedInhosp.java
@@ -207,9 +207,9 @@
    private String drname;
    /**
     * 是否生成方案状态;0未生成 1生成入院 2生成出院 9无匹配方案   3生成入院撤销   4生成出院撤销
     * 是否生成方案状态;0预入院 1生成入院 2生成出院 9无匹配方案   3生成入院撤销   4生成出院撤销
     */
    @ApiModelProperty(value = "是否生成方案状态;0未生成 1生成入院 2生成出院 9无匹配方案   3生成入院撤销   4生成出院撤销")
    @ApiModelProperty(value = "是否生成方案状态;0预入院 1生成入院 2生成出院 9无匹配方案   3生成入院撤销   4生成出院撤销")
    private Long schemestatus;
    /**
@@ -309,6 +309,18 @@
    private String diagcheckFlag;
    /**
     * 入院科室长期任务,是否处理:0未处理   1处理
     */
    @ApiModelProperty(value = "入院科室长期任务,是否处理:0未处理   1处理成功    2处理失败 ")
    private String  inDeptcheckFlag;
    /**
     * 入院病区长期任务,是否处理:0未处理   1处理
     */
    @ApiModelProperty(value = "入院病区长期任务,是否处理:0未处理   1处理成功    2处理失败 ")
    private String inWardcheckFlag;
    /**
     * 年龄
     */
    @ApiModelProperty(value = "年龄")
smartor/src/main/java/com/smartor/domain/PatMedInhospVO.java
@@ -57,6 +57,18 @@
    private String deptcheckFlag;
    /**
     * 入院科室长期任务,是否处理:0未处理   1处理
     */
    @ApiModelProperty(value = "入院科室长期任务,是否处理:0未处理   1处理成功    2处理失败 ")
    private String  inDeptcheckFlag;
    /**
     * 入院病区长期任务,是否处理:0未处理   1处理
     */
    @ApiModelProperty(value = "入院病区长期任务,是否处理:0未处理   1处理成功    2处理失败 ")
    private String inWardcheckFlag;
    /**
     * 护士ID
     */
    @ApiModelProperty(value = "护士ID")
smartor/src/main/java/com/smartor/domain/ServiceSubtask.java
@@ -156,10 +156,10 @@
    private String type;
    /**
     * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访)
     * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访
     */
    @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访")
    @ApiModelProperty(value = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议  16课题随访")
    @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访")
    @ApiModelProperty(value = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访")
    private String serviceType;
    @ApiModelProperty(value = "服务类型集合,按逗号分割")
smartor/src/main/java/com/smartor/domain/ServiceSubtaskRes.java
@@ -156,10 +156,10 @@
    private String type;
    /**
     * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访)
     * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访
     */
    @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访")
    @ApiModelProperty(value = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议  16课题随访")
    @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访\n")
    @ApiModelProperty(value = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访\n")
    private String serviceType;
    /**
smartor/src/main/java/com/smartor/domain/ServiceTask.java
@@ -172,10 +172,10 @@
    private String type;
    /**
     * "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议"
     * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访
     */
    @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访")
    @ApiModelProperty(value = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访")
    @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访")
    @ApiModelProperty(value = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访")
    private String serviceType;
    /**
smartor/src/main/java/com/smartor/domain/ServiceTaskVO.java
@@ -331,10 +331,10 @@
    private String showDate;
    /**
     * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)
     * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访
     */
    @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)")
    @ApiModelProperty(value = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)")
    @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访")
    @ApiModelProperty(value = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访")
    private String serviceType;
    @ApiModelProperty(value = "开场白")
smartor/src/main/java/com/smartor/domain/ServiceTaskdept.java
@@ -45,10 +45,10 @@
    private Long longtask;
    /**
     * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)
     * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访
     */
    @ApiModelProperty("服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)")
    @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)")
    @ApiModelProperty("服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访")
    @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访")
    private String serviceType;
    /**
smartor/src/main/java/com/smartor/domain/ServiceTaskdiag.java
@@ -46,10 +46,10 @@
    private String taskName;
    /**
     * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)
     * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访
     */
    @ApiModelProperty("服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)")
    @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)")
    @ApiModelProperty("服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知 9、体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议  16课题随访  17、宣教关怀(入院)  18、入院随访)")
    @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知 9、体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议  16课题随访  17、宣教关怀(入院)  18、入院随访)")
    private String serviceType;
    /**
smartor/src/main/java/com/smartor/domain/ServiceTaskoper.java
@@ -46,10 +46,10 @@
    private String taskName;
    /**
     * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)
     * 服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访
     */
    @ApiModelProperty("服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)")
    @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊通知;6、满意度调查;7、患者报告; 8、其他通知)")
    @ApiModelProperty("服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访")
    @Excel(name = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀(出院)  5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议 16课题随访  17、宣教关怀(入院)  18、入院随访)")
    private String serviceType;
    /**
smartor/src/main/java/com/smartor/mapper/Icd10Mapper.java
@@ -2,6 +2,7 @@
import com.smartor.domain.Icd10;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -37,8 +38,21 @@
     */
    public int insertIcd10(Icd10 icd10);
    /**
     * 批量新增疾病
     *
     * @param icd10s 疾病集合
     * @return 结果
     */
    public int batchIcd10(List<Icd10> icd10s);
    /**
     * 批量查询已存在的 icdcode(用于去重)
     *
     * @param icdcodes icdcode集合
     * @return 已存在的 icdcode 集合
     */
    public List<String> selectExistingIcdcodes(@Param("icdnames") List<String> icdnames);
    /**
     * 修改疾病
smartor/src/main/java/com/smartor/service/IIcd10Service.java
@@ -6,15 +6,14 @@
/**
 * 疾病Service接口
 *
 *
 * @author ruoyi
 * @date 2023-12-21
 */
public interface IIcd10Service
{
public interface IIcd10Service {
    /**
     * 查询疾病
     *
     *
     * @param icdid 疾病主键
     * @return 疾病
     */
@@ -22,7 +21,7 @@
    /**
     * 查询疾病列表
     *
     *
     * @param icd10 疾病
     * @return 疾病集合
     */
@@ -30,7 +29,7 @@
    /**
     * 新增疾病
     *
     *
     * @param icd10 疾病
     * @return 结果
     */
@@ -38,7 +37,7 @@
    /**
     * 修改疾病
     *
     *
     * @param icd10 疾病
     * @return 结果
     */
@@ -46,7 +45,7 @@
    /**
     * 批量删除疾病
     *
     *
     * @param icdids 需要删除的疾病主键集合
     * @return 结果
     */
@@ -54,9 +53,16 @@
    /**
     * 删除疾病信息
     *
     *
     * @param icdid 疾病主键
     * @return 结果
     */
    public int deleteIcd10ByIcdid(Long icdid);
    /**
     * 从远程接口(来未来)分页拉取并增量写入 icd10 表
     *
     * @return 新增条数
     */
    public int queryAddIcd10();
}
smartor/src/main/java/com/smartor/service/impl/Icd10ServiceImpl.java
@@ -1,97 +1,261 @@
package com.smartor.service.impl;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.google.gson.Gson;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.http.HttpUtils;
import com.smartor.domain.Icd10;
import com.smartor.mapper.Icd10Mapper;
import com.smartor.service.IIcd10Service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
 * 疾病Service业务层处理
 *
 *
 * @author ruoyi
 * @date 2023-12-21
 */
@Slf4j
@Service
public class Icd10ServiceImpl implements IIcd10Service
{
public class Icd10ServiceImpl implements IIcd10Service {
    @Autowired
    private Icd10Mapper icd10Mapper;
    @Value("${sltd_pub_path}")
    private String sltdPubPath;
    @Value("${lwl_app_key}")
    private String APP_KEY;
    /**
     * 固定 orgId
     */
    private static final long ORG_ID = 20001001L;
    /**
     * 每页拉取条数(接口最大允许 1000)
     */
    private static final int PAGE_SIZE = 1000;
    /**
     * 批量写入单批最大条数
     */
    private static final int BATCH_SIZE = 500;
    /**
     * 查询疾病
     *
     *
     * @param icdid 疾病主键
     * @return 疾病
     */
    @Override
    public Icd10 selectIcd10ByIcdid(Long icdid)
    {
    public Icd10 selectIcd10ByIcdid(Long icdid) {
        return icd10Mapper.selectIcd10ByIcdid(icdid);
    }
    /**
     * 查询疾病列表
     *
     *
     * @param icd10 疾病
     * @return 疾病
     */
    @Override
    public List<Icd10> selectIcd10List(Icd10 icd10)
    {
    public List<Icd10> selectIcd10List(Icd10 icd10) {
        return icd10Mapper.selectIcd10List(icd10);
    }
    /**
     * 新增疾病
     *
     *
     * @param icd10 疾病
     * @return 结果
     */
    @Override
    public int insertIcd10(Icd10 icd10)
    {
    public int insertIcd10(Icd10 icd10) {
        icd10.setCreateTime(DateUtils.getNowDate());
        return icd10Mapper.insertIcd10(icd10);
    }
    /**
     * 修改疾病
     *
     *
     * @param icd10 疾病
     * @return 结果
     */
    @Override
    public int updateIcd10(Icd10 icd10)
    {
    public int updateIcd10(Icd10 icd10) {
        icd10.setUpdateTime(DateUtils.getNowDate());
        return icd10Mapper.updateIcd10(icd10);
    }
    /**
     * 批量删除疾病
     *
     *
     * @param icdids 需要删除的疾病主键
     * @return 结果
     */
    @Override
    public int deleteIcd10ByIcdids(Long[] icdids)
    {
    public int deleteIcd10ByIcdids(Long[] icdids) {
        return icd10Mapper.deleteIcd10ByIcdids(icdids);
    }
    /**
     * 删除疾病信息
     *
     *
     * @param icdid 疾病主键
     * @return 结果
     */
    @Override
    public int deleteIcd10ByIcdid(Long icdid)
    {
    public int deleteIcd10ByIcdid(Long icdid) {
        return icd10Mapper.deleteIcd10ByIcdid(icdid);
    }
    /**
     * 从远程接口(来未来)分页拉取并增量写入 icd10 表。
     * <p>
     * 优化要点:
     * 1. 每页最大拉取 1000 条,减少请求次数。
     * 2. 每页把当前页所有 icdcode 用一条 IN SQL 一次批量查库,避免循环 N 次单条查询。
     * 3. 将不存在的记录收集后分批(每批 500 条)批量插入。
     * </p>
     *
     * @return 本次运行新增总条数
     */
    @Override
    public int queryAddIcd10() {
        int totalInserted = 0;
        long current = 1;
        long totalPages = 1; // 首次循环前先执行一次
        log.info("[开始] 从来未来拉取 ICD10 增量数据,orgId={}", ORG_ID);
        do {
            // 构建请求体
            Map<String, Object> requestBody = new HashMap<>();
            requestBody.put("orgId", ORG_ID);
            requestBody.put("searchText", "");
            requestBody.put("size", PAGE_SIZE);
            requestBody.put("current", current);
            String responseStr;
            try {
                Map<String, String> headers = buildRequestHeaders();
                responseStr = HttpUtils.sendPostByHeader(sltdPubPath + "/hbos-thirdparty-integration/standard/base/dtc/pageDiagnosisDict", new Gson().toJson(requestBody), headers);
            } catch (Exception e) {
                log.error("[第{}页] 请求来未来接口失败", current, e);
                break;
            }
            if (responseStr == null || responseStr.isEmpty()) {
                log.warn("[第{}页] 接口返回空,停止采集", current);
                break;
            }
            JSONObject resp = JSON.parseObject(responseStr);
            if (resp == null || !Boolean.TRUE.equals(resp.getBoolean("success"))) {
                log.error("[第{}页] 接口返回失败:{}", current, responseStr);
                break;
            }
            JSONObject data = resp.getJSONObject("data");
            if (data == null) {
                break;
            }
            // 计算总页数
            long total = data.getLongValue("total");
            long pageSize = data.getLongValue("size");
            if (pageSize <= 0) {
                break;
            }
            totalPages = (total + pageSize - 1) / pageSize;
            JSONArray records = data.getJSONArray("records");
            if (records == null || records.isEmpty()) {
                break;
            }
            log.info("[第{}/{}页] 获取 {} 条记录,总{}条", current, totalPages, records.size(), total);
            // 解析当前页数据
            List<String> pageNames = new ArrayList<>();
            List<Icd10> pageList = new ArrayList<>();
            for (int i = 0; i < records.size(); i++) {
                JSONObject rec = records.getJSONObject(i);
                String icdCode = rec.getString("icdCode");
                if (icdCode == null || icdCode.isEmpty()) {
                    continue;
                }
                String icdName = StringUtils.isEmpty(rec.getString("name")) ? null : rec.getString("name").trim();
                if (icdName == null || icdName.isEmpty()) {
                    continue;
                }
                pageNames.add(icdName);
                Icd10 icd10 = new Icd10();
                icd10.setIcdcode(icdCode);
                icd10.setIcdname(icdName);
                icd10.setIcdpym(rec.getString("pinyin"));
                icd10.setHisIcdid(rec.getString("his_icdid"));
                icd10.setOrgid(String.valueOf(ORG_ID));
                icd10.setDelFlag("0");
                icd10.setCreateTime(DateUtils.getNowDate());
                pageList.add(icd10);
            }
            if (pageNames.isEmpty()) {
                current++;
                continue;
            }
            // 一次 IN 查库,获取已存在的 icdname(核心去重优化点)南华附一的icdname不会重复,icd10code会重复
            Set<String> existingNames = new HashSet<>(icd10Mapper.selectExistingIcdcodes(pageNames));
            // 过滤出不存在的记录
            List<Icd10> newList = pageList.stream().filter(item -> !existingNames.contains(item.getIcdname())).collect(Collectors.toList());
            log.info("[第{}/{}页] 当前页共 {} 条,已存在 {} 条,需新入库 {} 条", current, totalPages, pageList.size(), existingNames.size(), newList.size());
            // 分批批量插入
            int inserted = batchInsert(newList);
            totalInserted += inserted;
            current++;
        } while (current <= totalPages);
        log.info("[完成] ICD10 增量采集结束,本次共新增 {} 条", totalInserted);
        return totalInserted;
    }
    /**
     * 分批批量插入,每批最大 BATCH_SIZE 条
     */
    private int batchInsert(List<Icd10> list) {
        if (list == null || list.isEmpty()) {
            return 0;
        }
        int total = 0;
        int size = list.size();
        for (int start = 0; start < size; start += BATCH_SIZE) {
            int end = Math.min(start + BATCH_SIZE, size);
            total += icd10Mapper.batchIcd10(list.subList(start, end));
        }
        return total;
    }
    private Map<String, String> buildRequestHeaders() {
        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", "application/json");
        headers.put("app-key", APP_KEY);
        return headers;
    }
}
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -4,6 +4,7 @@
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.service.IConfigService;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.DtoConversionUtils;
import com.ruoyi.common.utils.SecurityUtils;
@@ -59,6 +60,8 @@
    @Value("${spring.profiles.active}")
    private String active;
    @Autowired
    private IConfigService iSysConfigService;
    /**
@@ -220,169 +223,283 @@
    @Override
    public int dealOutHospInfo(String config) {
        //1.入院宣教
        String helibrarySwitch = iSysConfigService.selectConfigByKey("in.helibrary.switch");
        if (StringUtils.isNotEmpty(helibrarySwitch) && "2".equals(helibrarySwitch)) {
            PatMedInhosp inhosp = new PatMedInhosp();
            inhosp.setInDeptcheckFlag("0");
            inhosp.setInhospstate("0");
            inhosp.setFuflag("1");
            List<PatMedInhosp> inPatMedInhosps = patMedInhospMapper.selectPatMedInhospList(inhosp);
//        PatMedInhosp pmks = new PatMedInhosp();
//        //获取需要出院部门随访,未处理的数据
//        pmks.setDeptcheckFlag("0");
//        pmks.setInhospstate("1");
//        pmks.setFuflag("1");
//        List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(pmks);
//        log.info("dealOutHospInfo需要处理的出院部门患者信息:{}", CollectionUtils.isNotEmpty(patMedInhosps) ? patMedInhosps.size() : null);
//        for (PatMedInhosp patMedInhosp1 : patMedInhosps) {
//            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
//            patMedInhosp1.setTagname(tagname);
//        }
//
//        //科室
//        for (PatMedInhosp patMedInhosp1 : patMedInhosps) {
//            //获取患者信息
//            PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid());
//            if (Objects.isNull(patArchive)) {
//                patMedInhosp1.setDeptcheckFlag("2");
//                patMedInhosp1.setLongTaskReason("患者基本信息为空");
//                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
//                continue;
//            }
//            try {
//                //根据患者所在科室,获取该科室的长期任务
//                ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
//                serviceTaskdept.setLongtask(1L);
//                serviceTaskdept.setDeptCode(patMedInhosp1.getLeaveldeptcode());
//                serviceTaskdept.setDeptType("1");
//                serviceTaskdept.setOrgid(patMedInhosp1.getOrgid());
//                List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept);
//                //如果部门模板为空(将deptIsNull设置为true)
//                if (CollectionUtils.isEmpty(serviceTaskdepts) || serviceTaskdepts.size() == 0) {
//                    PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
//                    patMedInhosp1.setDeptcheckFlag("2");
//                    patMedInhosp1.setLongTaskReason(patMedInhosp.getLongTaskReason() + "该患者所在科室未配置长期任务;");
            //1.1 科室
            for (PatMedInhosp patMedInhosp1 : inPatMedInhosps) {
                //获取患者信息
                PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid());
                if (Objects.isNull(patArchive)) {
                    patMedInhosp1.setInDeptcheckFlag("2");
                    patMedInhosp1.setLongTaskReason("患者基本信息为空");
                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
                    continue;
                }
                try {
                    //根据患者所在科室,获取该科室的入院长期宣教任务
                    ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
                    serviceTaskdept.setLongtask(1L);
                    serviceTaskdept.setDeptCode(patMedInhosp1.getDeptcode());
                    serviceTaskdept.setDeptType("1");
                    serviceTaskdept.setServiceType("17");
                    serviceTaskdept.setOrgid(patMedInhosp1.getOrgid());
                    List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept);
                    //如果部门模板为空(将deptIsNull设置为true)
                    if (CollectionUtils.isEmpty(serviceTaskdepts) || serviceTaskdepts.size() == 0) {
                        PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
                        patMedInhosp1.setInDeptcheckFlag("2");
                        patMedInhosp1.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + "该患者所在科室未配置入院长期宣教任务;" : "该患者所在科室未配置入院长期宣教任务;");
                        patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
                    } else {
                        for (ServiceTaskdept serviceTaskdept1 : serviceTaskdepts) {
                            writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 4, config);
                        }
                    }
                } catch (Exception e) {
                    log.error("人员入院科室处理出异常了:{}", e.getMessage());
                    patMedInhosp1.setInDeptcheckFlag("2");
                    patMedInhosp1.setLongTaskReason("人员入院科室处理出异常了:" + e.getMessage());
                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
                }
            }
            //1.2 病区
            inhosp.setInDeptcheckFlag(null);
            inhosp.setInWardcheckFlag("0");
            List<PatMedInhosp> inPatMedInhospsWard = patMedInhospMapper.selectPatMedInhospList(inhosp);
            for (PatMedInhosp patMedInhosp1 : inPatMedInhospsWard) {
                //获取患者信息
                PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid());
                if (Objects.isNull(patArchive)) {
                    patMedInhosp1.setInDeptcheckFlag("2");
                    patMedInhosp1.setLongTaskReason("患者基本信息为空");
                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
                    continue;
                }
                //根据患者所在病区,获取该病区的入院长期宣教任务(会出现一个问题,科室和病区发的同一个模板)
                ServiceTaskdept serviceTaskWard = new ServiceTaskdept();
                serviceTaskWard.setLongtask(1L);
                serviceTaskWard.setDeptCode(patMedInhosp1.getHospitaldistrictcode());
                serviceTaskWard.setDeptType("2");
                serviceTaskWard.setServiceType("17");
                serviceTaskWard.setOrgid(patMedInhosp1.getOrgid());
                List<ServiceTaskdept> serviceTaskWardList = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskWard);
                //如果部门模板为空(将deptIsNull设置为true)
                if (CollectionUtils.isEmpty(serviceTaskWardList) || serviceTaskWardList.size() == 0) {
                    PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
                    patMedInhosp1.setInDeptcheckFlag("2");
                    patMedInhosp1.setLongTaskReason(patMedInhosp.getLongTaskReason() + "该患者所在病区未配置入院长期宣教任务;");
                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
                } else {
                    for (ServiceTaskdept serviceTaskdept1 : serviceTaskWardList) {
                        writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 5, config);
                    }
                }
            }
        }
        //2.出院随访
        PatMedInhosp pmks = new PatMedInhosp();
        //获取需要出院部门随访,未处理的数据
        pmks.setDeptcheckFlag("0");
        pmks.setInhospstate("1");
        pmks.setFuflag("1");
        List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(pmks);
        log.info("dealOutHospInfo需要处理的出院部门患者信息:{}", CollectionUtils.isNotEmpty(patMedInhosps) ? patMedInhosps.size() : null);
        for (PatMedInhosp patMedInhosp1 : patMedInhosps) {
            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
            patMedInhosp1.setTagname(tagname);
        }
        //科室
        for (PatMedInhosp patMedInhosp1 : patMedInhosps) {
            //获取患者信息
            PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid());
            if (Objects.isNull(patArchive)) {
                patMedInhosp1.setDeptcheckFlag("2");
                patMedInhosp1.setLongTaskReason("患者基本信息为空");
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
                continue;
            }
            try {
                //根据患者所在科室,获取该科室的长期任务
                ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
                serviceTaskdept.setLongtask(1L);
                serviceTaskdept.setDeptCode(patMedInhosp1.getLeaveldeptcode());
                serviceTaskdept.setDeptType("1");
                serviceTaskdept.setServiceType("2");
                serviceTaskdept.setOrgid(patMedInhosp1.getOrgid());
                List<ServiceTaskdept> serviceTaskdepts = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept);
                //如果部门模板为空(将deptIsNull设置为true)
                if (CollectionUtils.isEmpty(serviceTaskdepts) || serviceTaskdepts.size() == 0) {
                    PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(patMedInhosp1.getInhospid());
                    patMedInhosp1.setDeptcheckFlag("2");
                    patMedInhosp1.setLongTaskReason(patMedInhosp.getLongTaskReason() + "该患者所在科室未配置离院长期任务;");
                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
                } else {
                    for (ServiceTaskdept serviceTaskdept1 : serviceTaskdepts) {
                        writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 1, config);
                    }
//                    patMedInhosp1.setDeptcheckFlag("1");
//                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
//                } else {
//                    for (ServiceTaskdept serviceTaskdept1 : serviceTaskdepts) {
//                        writeInSubTask(serviceTaskdept1.getTaskId(), true, patMedInhosp1, patArchive, 1, config);
//                    }
////                    patMedInhosp1.setDeptcheckFlag("1");
////                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
//                }
//
//            } catch (Exception e) {
//                e.printStackTrace();
//                log.error("人员科室处理出异常了:{}", e.getMessage());
//                patMedInhosp1.setDeptcheckFlag("2");
//                patMedInhosp1.setLongTaskReason("人员科室处理异常:" + e.getMessage());
//                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
//            }
//        }
                }
            } catch (Exception e) {
                e.printStackTrace();
                log.error("人员科室处理出异常了:{}", e.getMessage());
                patMedInhosp1.setDeptcheckFlag("2");
                patMedInhosp1.setLongTaskReason("人员科室处理异常:" + e.getMessage());
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
            }
        }
        //根据患者所在病区,获取该病区的长期任务,新华医院可以先不用根据病区和疾病来做
        if (!active.equals("xh")) {
//            PatMedInhosp pmbq = new PatMedInhosp();
//            //获取需要出院部门随访,未处理的数据
//            pmbq.setWardcheckFlag("0");
//            pmbq.setInhospstate("1");
//            pmbq.setFuflag("1");
//            List<PatMedInhosp> patMedInhospBQs = patMedInhospMapper.selectPatMedInhospList(pmbq);
//            log.info("dealOutHospInfo需要处理的出院病区患者信息:{}", CollectionUtils.isNotEmpty(patMedInhospBQs) ? patMedInhospBQs.size() : null);
//            for (PatMedInhosp patMedInhosp1 : patMedInhospBQs) {
//                String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
//                patMedInhosp1.setTagname(tagname);
//            }
//
//            //病区数据处理
//            for (PatMedInhosp pmiBQ1 : patMedInhospBQs) {
//                //获取患者信息
//                PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(pmiBQ1.getPatid());
//                if (Objects.isNull(patArchive)) {
//                    pmiBQ1.setWardcheckFlag("2");
//                    pmiBQ1.setLongTaskReason("患者基本信息为空");
//                    patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
//                    continue;
//                }
//                try {
//                    ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
//                    serviceTaskdept.setLongtask(1L);
//                    serviceTaskdept.setDeptCode(pmiBQ1.getLeavehospitaldistrictcode());
//                    serviceTaskdept.setDeptType("2");
//                    serviceTaskdept.setOrgid(pmiBQ1.getOrgid());
//                    List<ServiceTaskdept> serviceTaskdeptList = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept);
//                    //如果部门模板为空(将deptIsNull设置为true)
//                    if (CollectionUtils.isEmpty(serviceTaskdeptList) || serviceTaskdeptList.size() == 0) {
//                        PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiBQ1.getInhospid());
//                        pmiBQ1.setWardcheckFlag("2");
//                        pmiBQ1.setLongTaskReason(patMedInhosp.getLongTaskReason() + "该患者所在病区未配置长期任务;");
            PatMedInhosp pmbq = new PatMedInhosp();
            //获取需要出院部门随访,未处理的数据
            pmbq.setWardcheckFlag("0");
            pmbq.setInhospstate("1");
            pmbq.setFuflag("1");
            List<PatMedInhosp> patMedInhospBQs = patMedInhospMapper.selectPatMedInhospList(pmbq);
            log.info("dealOutHospInfo需要处理的出院病区患者信息:{}", CollectionUtils.isNotEmpty(patMedInhospBQs) ? patMedInhospBQs.size() : null);
            for (PatMedInhosp patMedInhosp1 : patMedInhospBQs) {
                String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
                patMedInhosp1.setTagname(tagname);
            }
            //病区数据处理
            for (PatMedInhosp pmiBQ1 : patMedInhospBQs) {
                //获取患者信息
                PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(pmiBQ1.getPatid());
                if (Objects.isNull(patArchive)) {
                    pmiBQ1.setWardcheckFlag("2");
                    pmiBQ1.setLongTaskReason("患者基本信息为空");
                    patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
                    continue;
                }
                try {
                    String errorreason = null;
                    List<ServiceTaskdept> serviceTaskdeptList = null;
                    if (!StringUtils.isEmpty(pmiBQ1.getLeavehospitaldistrictcode())) {
                        ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
                        serviceTaskdept.setLongtask(1L);
                        serviceTaskdept.setDeptCode(pmiBQ1.getLeavehospitaldistrictcode());
                        serviceTaskdept.setDeptType("2");
                        serviceTaskdept.setServiceType("2");
                        serviceTaskdept.setOrgid(pmiBQ1.getOrgid());
                        serviceTaskdeptList = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept);
                        if (CollectionUtils.isEmpty(serviceTaskdeptList)) {
                            errorreason = "该患者所在病区未配置长期任务;";
                        }
                    } else {
                        errorreason = "离院病区为空;";
                    }
                    //如果部门模板为空(将deptIsNull设置为true)
                    if (StringUtils.isNotEmpty(errorreason)) {
                        PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiBQ1.getInhospid());
                        pmiBQ1.setWardcheckFlag("2");
                        pmiBQ1.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + errorreason : errorreason);
                        patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
                    } else {
                        for (ServiceTaskdept serviceTaskdept1 : serviceTaskdeptList) {
                            writeInSubTask(serviceTaskdept1.getTaskId(), true, pmiBQ1, patArchive, 2, config);
                        }
//                        pmiBQ1.setWardcheckFlag("1");
//                        patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
//                    } else {
//                        for (ServiceTaskdept serviceTaskdept1 : serviceTaskdeptList) {
//                            writeInSubTask(serviceTaskdept1.getTaskId(), true, pmiBQ1, patArchive, 2, config);
//                        }
////                        pmiBQ1.setWardcheckFlag("1");
////                        patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
//                    }
//
//
//                } catch (Exception e) {
//                    e.printStackTrace();
//                    log.error("人员病区处理出异常了:{}", e.getMessage());
//                    pmiBQ1.setWardcheckFlag("2");
//                    pmiBQ1.setLongTaskReason("人员病区处理异常:" + e.getMessage());
//                    patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
//                }
//            }
//
//            PatMedInhosp pmjb = new PatMedInhosp();
//            //获取需要出院疾病随访,未处理的数据
//            pmjb.setDiagcheckFlag("0");
//            pmjb.setInhospstate("1");
//            pmjb.setFuflag("1");
//            List<PatMedInhosp> patMedInhospJBs = patMedInhospMapper.selectPatMedInhospList(pmjb);
//            log.info("dealOutHospInfo需要处理的出院疾病患者信息:{}", CollectionUtils.isNotEmpty(patMedInhospJBs) ? patMedInhospJBs.size() : null);
//            for (PatMedInhosp patMedInhosp1 : patMedInhospJBs) {
//                String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
//                patMedInhosp1.setTagname(tagname);
//            }
//
//            for (PatMedInhosp pmiJB : patMedInhospJBs) {
//                //获取患者信息
//                PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(pmiJB.getPatid());
//                if (Objects.isNull(patArchive)) {
//                    pmiJB.setDiagcheckFlag("2");
//                    pmiJB.setLongTaskReason("患者基本信息为空");
//                    patMedInhospMapper.updatePatMedInhosp(pmiJB);
//                    continue;
//                }
//                try {
//                    if (StringUtils.isEmpty(pmiJB.getLeaveicd10code())) {
//                        continue;
//                    }
//                    // 根据患者的疾病,获取该疾病的长期任务
//                    ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag();
//                    serviceTaskdiag.setLongtask(1L);
//                    serviceTaskdiag.setIcd10code(pmiJB.getLeaveicd10code());
//                    serviceTaskdiag.setOrgid(pmiJB.getOrgid());
//
//                    List<ServiceTaskdiag> serviceTaskdiags = serviceTaskdiagMapper.selectServiceTaskdiagList(serviceTaskdiag);
//                    //如果部门模板为空(将deptIsNull设置为true)
//                    if (CollectionUtils.isEmpty(serviceTaskdiags) || serviceTaskdiags.size() == 0) {
//                        PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiJB.getInhospid());
//                        pmiJB.setDiagcheckFlag("2");
//                        pmiJB.setLongTaskReason(patMedInhosp.getLongTaskReason() + "所患的疾病未配置长期任务;");
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    log.error("人员病区处理出异常了:{}", e.getMessage());
                    pmiBQ1.setWardcheckFlag("2");
                    pmiBQ1.setLongTaskReason("人员病区处理异常:" + e.getMessage());
                    patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
                }
            }
            PatMedInhosp pmjb = new PatMedInhosp();
            //获取需要出院疾病随访,未处理的数据
            pmjb.setDiagcheckFlag("0");
            pmjb.setInhospstate("1");
            pmjb.setFuflag("1");
            List<PatMedInhosp> patMedInhospJBs = patMedInhospMapper.selectPatMedInhospList(pmjb);
            log.info("dealOutHospInfo需要处理的出院疾病患者信息:{}", CollectionUtils.isNotEmpty(patMedInhospJBs) ? patMedInhospJBs.size() : null);
            for (PatMedInhosp patMedInhosp1 : patMedInhospJBs) {
                String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
                patMedInhosp1.setTagname(tagname);
            }
            for (PatMedInhosp pmiJB : patMedInhospJBs) {
                //获取患者信息
                PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(pmiJB.getPatid());
                if (Objects.isNull(patArchive)) {
                    pmiJB.setDiagcheckFlag("2");
                    pmiJB.setLongTaskReason("患者基本信息为空");
                    patMedInhospMapper.updatePatMedInhosp(pmiJB);
                    continue;
                }
                try {
                    String errorIcd = null;
                    if (StringUtils.isEmpty(pmiJB.getLeaveicd10code())) {
                        continue;
                    }
                    // 根据患者的疾病,获取该疾病的长期任务
                    ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag();
                    serviceTaskdiag.setLongtask(1L);
                    serviceTaskdiag.setServiceType("2");
                    if (active.equals("nhfy")) {
                        //南华附一的icd10code有重复,所以用主诊断名称去查询
                        serviceTaskdiag.setIcd10name(pmiJB.getLeavediagname());
                        if (StringUtils.isEmpty(pmiJB.getLeavediagname())) {
                            errorIcd = "该患者主诊断名称为空;";
                        }
                    } else {
                        serviceTaskdiag.setIcd10code(pmiJB.getLeaveicd10code());
                        if (StringUtils.isEmpty(pmiJB.getLeaveicd10code())) {
                            errorIcd = "该患者主诊断ICD10码为空;";
                        }
                    }
                    serviceTaskdiag.setOrgid(pmiJB.getOrgid());
                    List<ServiceTaskdiag> serviceTaskdiags = serviceTaskdiagMapper.selectServiceTaskdiagList(serviceTaskdiag);
                    //如果部门模板为空(将deptIsNull设置为true)
                    if (StringUtils.isNotEmpty(errorIcd)) {
                        PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiJB.getInhospid());
                        pmiJB.setDiagcheckFlag("2");
                        pmiJB.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + errorIcd : errorIcd);
                        patMedInhospMapper.updatePatMedInhosp(pmiJB);
                    } else if (CollectionUtils.isEmpty(serviceTaskdiags)) {
                        errorIcd = "该患者所在病区未配置长期任务;";
                        PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiJB.getInhospid());
                        pmiJB.setDiagcheckFlag("2");
                        pmiJB.setLongTaskReason(StringUtils.isNotEmpty(patMedInhosp.getLongTaskReason()) ? patMedInhosp.getLongTaskReason() + errorIcd : errorIcd);
                        patMedInhospMapper.updatePatMedInhosp(pmiJB);
                    } else {
                        for (ServiceTaskdiag serviceTaskdept1 : serviceTaskdiags) {
                            writeInSubTask(serviceTaskdept1.getTaskId(), true, pmiJB, patArchive, 3, config);
                        }
//                        pmiJB.setDiagcheckFlag("1");
//                        patMedInhospMapper.updatePatMedInhosp(pmiJB);
//                    } else {
//                        for (ServiceTaskdiag serviceTaskdept1 : serviceTaskdiags) {
//                            writeInSubTask(serviceTaskdept1.getTaskId(), true, pmiJB, patArchive, 3, config);
//                        }
////                        pmiJB.setDiagcheckFlag("1");
////                        patMedInhospMapper.updatePatMedInhosp(pmiJB);
//                    }
//
//                } catch (Exception e) {
//                    e.printStackTrace();
//                    log.error("人员疾病处理出异常了:{}", e.getMessage());
//                    pmiJB.setDiagcheckFlag("2");
//                    pmiJB.setLongTaskReason("人员疾病处理异常:" + e.getMessage());
//                    patMedInhospMapper.updatePatMedInhosp(pmiJB);
//                }
//            }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    log.error("人员疾病处理出异常了:{}", e.getMessage());
                    pmiJB.setDiagcheckFlag("2");
                    pmiJB.setLongTaskReason("人员疾病处理异常:" + e.getMessage());
                    patMedInhospMapper.updatePatMedInhosp(pmiJB);
                }
            }
//            手术随访
            PatMedOperationItem pmoi = new PatMedOperationItem();
            //获取需要出院疾病随访,未处理的数据
smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
@@ -79,7 +79,8 @@
        try {
            Map<String, Object> requestParams = buildRequestParams(reqVO);
            Map<String, String> headers = buildRequestHeaders();
            String result = HttpUtils.sendPostByHeader(sltdPubPath + "osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList", new Gson().toJson(requestParams), headers);
            log.info("请求参数出院数据地址:{},appKey:{}", sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList", APP_KEY);
            String result = HttpUtils.sendPostByHeader(sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList", new Gson().toJson(requestParams), headers);
            String cry = determineCry(reqVO);
            log.info("cry的值为:{}", cry);
@@ -88,7 +89,7 @@
            return serviceSLTDInhospResDTOS;
        } catch (Exception e) {
            log.error("【queryHealthcareRecordList】调用省立同德健康记录查询接口异常,请求参数:{}", reqVO, e);
            throw new RuntimeException("调用省立同德健康记录查询接口失败", e);
            throw new RuntimeException("调用省立同德健康记录查询接口失败:" + e.getMessage());
        }
    }
@@ -584,6 +585,7 @@
        queryInhosp.setSerialnum(StringUtils.trim(patMedInhosp.getSerialnum()));
        queryInhosp.setOrgid(StringUtils.trim(dto.getOrgId()));
        queryInhosp.setInhospstate(cry);
        queryInhosp.setSchemestatus(0L);
        log.info("----------------这里的入参为:{},{}", queryInhosp.getPatno(), queryInhosp.getSerialnum());
        List<PatMedInhosp> existingInhosps = patMedInhospService.selectPatMedInhosp(queryInhosp);
@@ -707,11 +709,43 @@
        patMedInhosp.setSerialnum(dto.getHealthcareRecordNo());
        patMedInhosp.setInhospno(dto.getHealthcareRecordNo());
        patMedInhosp.setFuflag("1");
        if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1"))
            patMedInhosp.setFuflag("0");
        if ("0".equals(cry)) patMedInhosp.setInhospstate("0");
        if ("1".equals(cry)) patMedInhosp.setInhospstate("1");
        if ("3".equals(cry)) patMedInhosp.setInhospstate("3");
        if ("0".equals(cry)) {
            patMedInhosp.setInhospstate("0");
            if (CollectionUtils.isNotEmpty(dto.getDiagnosisList()) && dto.getDiagnosisList().size() > 0) {
                for (ServiceSLTDDiagnosisResDTO diagnosis : dto.getDiagnosisList()) {
                    if (diagnosis.getIsMainDiagnosis() == 1) {
                        patMedInhosp.setDiagname(diagnosis.getDiagnosisDictName() == null ? "" : diagnosis.getDiagnosisDictName());
                        patMedInhosp.setIcd10code(diagnosis.getDiagnosisDictCode() == null ? "" : diagnosis.getDiagnosisDictCode());
                    }
                }
            }
        }
        if ("1".equals(cry)) {
            patMedInhosp.setInhospstate("1");
            if (CollectionUtils.isNotEmpty(dto.getDiagnosisList()) && dto.getDiagnosisList().size() > 0) {
                for (ServiceSLTDDiagnosisResDTO diagnosis : dto.getDiagnosisList()) {
                    if (diagnosis.getIsMainDiagnosis() == 1) {
                        patMedInhosp.setLeavediagname(diagnosis.getDiagnosisDictName() == null ? "" : diagnosis.getDiagnosisDictName());
                        patMedInhosp.setLeaveicd10code(diagnosis.getDiagnosisDictCode() == null ? "" : diagnosis.getDiagnosisDictCode());
                    }
                }
            }
        }
        if ("3".equals(cry)) {
            patMedInhosp.setInhospstate("3");
            if (CollectionUtils.isNotEmpty(dto.getDiagnosisList()) && dto.getDiagnosisList().size() > 0) {
                for (ServiceSLTDDiagnosisResDTO diagnosis : dto.getDiagnosisList()) {
                    if (diagnosis.getIsMainDiagnosis() == 1) {
                        patMedInhosp.setDiagname(diagnosis.getDiagnosisDictName() == null ? "" : diagnosis.getDiagnosisDictName());
                        patMedInhosp.setIcd10code(diagnosis.getDiagnosisDictCode() == null ? "" : diagnosis.getDiagnosisDictCode());
                    }
                }
            }
        }
        patMedInhosp.setHospitalcode(dto.getOrgId());
        patMedInhosp.setBedNo(dto.getBedNumber());
        patMedInhosp.setStarttime(parseDate(dto.getStartTime()));
@@ -765,12 +799,6 @@
            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);
        if (CollectionUtils.isEmpty(existingArchives)) {
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -165,6 +165,12 @@
    @Value("${phoneEndHour}")
    private Integer phoneEndHour;
    @Autowired
    private Icd10Mapper icd10Mapper;
    @Value("${spring.profiles.active}")
    private String active;
    /**
     * 查询单一任务(随访)
     *
@@ -615,10 +621,19 @@
                    ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag();
                    serviceTaskdiag.setTaskId(serviceTask.getTaskid());
                    serviceTaskdiag.setTaskName(serviceTask.getTaskName());
                    serviceTaskdiag.setServiceType(serviceTaskVO.getServiceType());
                    serviceTaskdiag.setLongtask(Long.valueOf(serviceTask.getLongTask()));
                    if (serviceTaskVO.getLongTask() == 1) serviceTaskdiag.setLongtask(1L);
                    serviceTaskdiag.setIcd10code(serviceTaskVO.getIcd10code());
                    serviceTaskdiag.setIcd10name(serviceTaskVO.getIcd10name());
                    //南华附一的icd10code是有重复的,所以不能用南华附一的icd10code去查询
                    if (!active.equals("nhfy") && StringUtils.isEmpty(serviceTaskVO.getIcd10name())) {
                        Icd10 icd10 = new Icd10();
                        icd10.setIcdcode(serviceTaskVO.getIcd10code());
                        List<Icd10> icd10s = icd10Mapper.selectIcd10List(icd10);
                        if (CollectionUtils.isNotEmpty(icd10s))
                            serviceTaskdiag.setIcd10name(icd10s.get(0).getIcdname());
                    }
                    serviceTaskdiag.setGuid(serviceTask.getGuid());
                    serviceTaskdiag.setOrgid(serviceTask.getOrgid());
                    serviceTaskdiag.setCreateTime(new Date());
@@ -756,7 +771,8 @@
                }
            }
        } else if (serviceTaskVO.getIsoperation() != null && serviceTaskVO.getIsoperation() == 2) {
        }
        else if (serviceTaskVO.getIsoperation() != null && serviceTaskVO.getIsoperation() == 2) {
            //任务修改
            if (ObjectUtils.isNotEmpty(serviceTaskVO.getSendTimeslot()))
                serviceTask.setSendTimeSlot(JSON.toJSONString(serviceTaskVO.getSendTimeslot()));
@@ -4249,7 +4265,7 @@
        }
        // 1. 查询分组统计(发送总量、发送成功量、已读量)
        List<Map<String, Object>> groupStats = serviceSubtaskMapper.getHeLibraryCount(heLibraryCountVO);
        // 2. 计算各组的发送成功率和已读率
        List<Map<String, Object>> result = new ArrayList<>();
        if (CollectionUtils.isNotEmpty(groupStats)) {
@@ -4266,7 +4282,7 @@
                result.add(row);
            }
        }
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("list", result);
        resultMap.put("total", result.size());
smartor/src/main/java/com/smartor/service/impl/UserExtInfoServiceImpl.java
@@ -1,6 +1,7 @@
package com.smartor.service.impl;
import com.ruoyi.common.core.service.IUserExtInfoService;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.StringUtils;
import com.smartor.domain.IvrLibaScriptAssort;
import com.smartor.domain.SvyLibScriptCategory;
@@ -16,6 +17,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
 * 用户扩展信息服务实现(smartor 模块)
@@ -23,6 +25,9 @@
 */
@Service
public class UserExtInfoServiceImpl implements IUserExtInfoService {
    private static final String SATISFACTION_CACHE_KEY = "satisfaction:categories:";
    private static final int SATISFACTION_CACHE_TTL = 30;
    @Autowired
    private SysUserOrgMapper sysUserOrgMapper;
@@ -32,6 +37,9 @@
    @Autowired
    private SvyLibScriptCategoryMapper svyLibScriptCategoryMapper;
    @Autowired
    private RedisCache redisCache;
    /**
     * 获取用户机构/院区信息
@@ -52,10 +60,18 @@
    }
    /**
     * 获取满意度问题分类(语音 + 问卷)
     * 获取满意度问题分类(语音 + 问卷),带Redis缓存
     */
    @Override
    @SuppressWarnings("unchecked")
    public Map<String, Object> getSatisfactionCategories(String orgid) {
        // 先查缓存
        String cacheKey = SATISFACTION_CACHE_KEY + orgid;
        Map<String, Object> cached = redisCache.getCacheObject(cacheKey);
        if (cached != null) {
            return cached;
        }
        Map<String, Object> satisfactionCategories = new HashMap<>();
        // 获取语音问题分类
@@ -90,6 +106,9 @@
        }
        satisfactionCategories.put("questionnaireCategorys", questionnaireCategorys);
        // 写入缓存
        redisCache.setCacheObject(cacheKey, satisfactionCategories, SATISFACTION_CACHE_TTL, TimeUnit.MINUTES);
        return satisfactionCategories;
    }
}
smartor/src/main/resources/mapper/smartor/Icd10Mapper.xml
@@ -176,4 +176,14 @@
            #{icdid}
        </foreach>
    </delete>
    <!-- 批量查询已存在的 icdcode,用于分页拉取后去重 -->
    <select id="selectExistingIcdcodes" resultType="java.lang.String">
        select icdname from icd10
        where del_flag = 0
          and icdname in
        <foreach item="icdname" collection="icdnames" open="(" separator="," close=")">
            #{icdname}
        </foreach>
    </select>
</mapper>
smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
@@ -48,6 +48,8 @@
        <result property="patno" column="patno"/>
        <result property="inhospstate" column="inhospstate"/>
        <result property="deptcheckFlag" column="deptcheck_flag"/>
        <result property="inWardcheckFlag" column="in_wardcheck_flag"/>
        <result property="inDeptcheckFlag" column="in_deptcheck_flag"/>
        <result property="wardcheckFlag" column="wardcheck_flag"/>
        <result property="diagcheckFlag" column="diagcheck_flag"/>
        <result property="age" column="age"/>
@@ -98,6 +100,8 @@
               nurse_name,
               deptcheck_flag,
               wardcheck_flag,
               in_deptcheck_flag,
               in_wardcheck_flag,
               diagcheck_flag,
               inhospstate,
               patno,
@@ -157,6 +161,8 @@
        b.out_way_name,
        b.deptcheck_flag,
        b.wardcheck_flag,
        b.in_deptcheck_flag,
        b.in_wardcheck_flag,
        b.diagcheck_flag,
        b.inhospstate,
        b.patno,
@@ -248,6 +254,8 @@
        <if test="nurseName != null and nurseName != ''">and b.nurse_name = #{nurseName}</if>
        <if test="deptcheckFlag != null ">and b.deptcheck_flag = #{deptcheckFlag}</if>
        <if test="wardcheckFlag != null ">and b.wardcheck_flag = #{wardcheckFlag}</if>
        <if test="inDeptcheckFlag != null ">and b.in_deptcheck_flag = #{inDeptcheckFlag}</if>
        <if test="inWardcheckFlag != null ">and b.in_wardcheck_flag = #{inWardcheckFlag}</if>
        <if test="diagcheckFlag != null ">and b.diagcheck_flag = #{diagcheckFlag}</if>
        <if test="cry != null and cry == 0 ">and b.endtime is null</if>
        <if test="cry != null and cry == 1 ">and b.inhospstate=1</if>
@@ -331,6 +339,8 @@
        b.out_way_name,
        b.deptcheck_flag,
        b.wardcheck_flag,
        b.in_deptcheck_flag,
        b.in_wardcheck_flag,
        b.diagcheck_flag,
        b.inhospstate,
        b.patno,
@@ -409,8 +419,9 @@
        b.nurse_id,
        b.nurse_name,
        b.deptcheck_flag,
        b.diagcheck_flag,
        b.wardcheck_flag,
        b.in_deptcheck_flag,
        b.in_wardcheck_flag,
        b.inhospstate,
        b.patno,
        b.inhospno,
@@ -489,6 +500,8 @@
        <if test="diagcheckFlag != null ">and b.diagcheck_flag = #{diagcheckFlag}</if>
        <if test="deptcheckFlag != null ">and b.deptcheck_flag = #{deptcheckFlag}</if>
        <if test="wardcheckFlag != null ">and b.wardcheck_flag = #{wardcheckFlag}</if>
        <if test="inDeptcheckFlag != null ">and b.in_deptcheck_flag = #{inDeptcheckFlag}</if>
        <if test="inWardcheckFlag != null ">and b.in_wardcheck_flag = #{inWardcheckFlag}</if>
        <if test="inhospstate != null ">and b.inhospstate = #{inhospstate}</if>
        <if test="schemestatus != null ">and b.schemestatus = #{schemestatus}</if>
        <if test="leavediagname != null  and leavediagname != ''">and b.leavediagname like concat('%',
@@ -573,6 +586,9 @@
        <if test="inhospstate != null">and inhospstate = #{inhospstate}</if>
        <if test="deptcheckFlag != null">and deptcheck_flag = #{deptcheckFlag}</if>
        <if test="wardcheckFlag != null">and wardcheck_flag = #{wardcheckFlag}</if>
        <if test="inDeptcheckFlag != null">and in_deptcheck_flag = #{inDeptcheckFlag}</if>
        <if test="inWardcheckFlag != null">and in_wardcheck_flag = #{inWardcheckFlag}</if>
        <if test="wardcheckFlag != null">and wardcheck_flag = #{wardcheckFlag}</if>
        <if test="diagcheckFlag != null">and diagcheck_flag = #{diagcheckFlag}</if>
        <if test="longTaskReason != null">and long_task_reason = #{longTaskReason}</if>
        <if test="nurseId != null ">and nurse_id = #{nurseId}</if>
@@ -642,6 +658,8 @@
            <if test="inhospstate != null">inhospstate,</if>
            <if test="deptcheckFlag != null">deptcheck_flag,</if>
            <if test="wardcheckFlag != null">wardcheck_flag,</if>
            <if test="inDeptcheckFlag != null">in_deptcheck_flag,</if>
            <if test="inWardcheckFlag != null">in_wardcheck_flag,</if>
            <if test="diagcheckFlag != null">diagcheck_flag,</if>
            <if test="longTaskReason != null">long_task_reason,</if>
            <if test="nurseId != null ">nurse_id,</if>
@@ -707,6 +725,8 @@
            <if test="inhospstate != null">#{inhospstate},</if>
            <if test="deptcheckFlag != null">#{deptcheckFlag},</if>
            <if test="wardcheckFlag != null">#{wardcheckFlag},</if>
            <if test="inDeptcheckFlag != null">#{inDeptcheckFlag},</if>
            <if test="inWardcheckFlag != null">#{inWardcheckFlag},</if>
            <if test="diagcheckFlag != null">#{diagcheckFlag},</if>
            <if test="longTaskReason != null">#{longTaskReason},</if>
            <if test="nurseId != null ">#{nurseId},</if>
@@ -742,7 +762,7 @@
        schemestatus, generalschemestatus, leaveldeptcode, leaveldeptname, hospitaldistrictid,
        leavehospitaldistrictcode, leavehospitaldistrictname, leavehospitaldistrictid,
        deptid, leaveldeptid, schemetime, patname, patno, inhospstate,
        deptcheck_flag, wardcheck_flag, diagcheck_flag, long_task_reason,
        deptcheck_flag, wardcheck_flag,in_deptcheck_flag, in_wardcheck_flag, diagcheck_flag, long_task_reason,
        nurse_id, nurse_name, out_way_id, out_way_name, guid,
        operator, operator_id, inhospno, remark,
        fuflag, fudate, fuperiod, futypecode, futypedesc, fuadvice, fuspecialadvice, management_doctor,
@@ -764,7 +784,7 @@
            #{item.leavehospitaldistrictcode}, #{item.leavehospitaldistrictname}, #{item.leavehospitaldistrictid},
            #{item.deptid}, #{item.leaveldeptid}, #{item.schemetime}, #{item.patname}, #{item.patno},
            #{item.inhospstate},
            #{item.deptcheckFlag}, #{item.wardcheckFlag}, #{item.diagcheckFlag}, #{item.longTaskReason},
            #{item.deptcheckFlag}, #{item.wardcheckFlag},#{item.inDeptcheckFlag}, #{item.inWardcheckFlag}, #{item.diagcheckFlag}, #{item.longTaskReason},
            #{item.nurseId}, #{item.nurseName}, #{item.outWayId}, #{item.outWayName}, #{item.guid},
            #{item.operator}, #{item.operatorId}, #{item.inhospno}, #{item.remark},
            #{item.fuflag}, #{item.fudate}, #{item.fuperiod}, #{item.futypecode}, #{item.futypedesc}, #{item.fuadvice},
@@ -819,6 +839,8 @@
            <if test="inhospstate != null">inhospstate = #{inhospstate},</if>
            <if test="deptcheckFlag != null">deptcheck_flag = #{deptcheckFlag},</if>
            <if test="wardcheckFlag != null">wardcheck_flag = #{wardcheckFlag},</if>
            <if test="inDeptcheckFlag != null">in_deptcheck_flag = #{inDeptcheckFlag},</if>
            <if test="inWardcheckFlag != null">in_wardcheck_flag = #{inWardcheckFlag},</if>
            <if test="diagcheckFlag != null">diagcheck_flag = #{diagcheckFlag},</if>
            <if test="longTaskReason != null">long_task_reason = #{longTaskReason},</if>
            <if test="nurseId != null ">nurse_id = #{nurseId},</if>