zjh
2025-02-13 955a66eec02b8c3fde019110d9c1b604eac017e5
zjh20250213
44个文件已修改
7个文件已添加
3097 ■■■■ 已修改文件
ltkj-admin/pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/config/timer/DefaultScheduled.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisApiController.java 214 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisApiMethod.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/service/TjSysAsyncServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysConfigController.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysLoginController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysRoleController.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjCheckController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjCustomerController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjOrderController.java 373 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjReportController.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjSamplingController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/resources/application-dev.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/resources/application-linux-dev.yaml 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/resources/application-linux-mjprod.yml 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/resources/application-linux-mjtest.yml 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/resources/application-prod.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/resources/application-test.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/resources/application-win-chkwyyprod.yaml 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/resources/application-win-pbkwyyprod.yaml 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/resources/application-win-xamjyyprod.yaml 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/resources/application-win-xamjyytest.yaml 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/resources/application.yml 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/resources/logback.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/test/java/zwxTest.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-common/pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-common/src/main/java/com/ltkj/common/core/domain/model/LoginBody.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-common/src/main/java/com/ltkj/common/utils/IdUtils.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-common/src/main/java/com/ltkj/common/utils/PDFDocumentUtil.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-framework/pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-framework/src/main/java/com/ltkj/framework/aspectj/DataSourceAspect.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-framework/src/main/java/com/ltkj/framework/config/DruidConfig.java 112 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-framework/src/main/java/com/ltkj/framework/config/SecurityConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-framework/src/main/java/com/ltkj/framework/config/TokenInterceptor.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-framework/src/main/java/com/ltkj/framework/config/WebConfig.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-framework/src/main/java/com/ltkj/framework/datasource/DynamicDataSource.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-framework/src/main/java/com/ltkj/framework/datasource/DynamicDataSourceContextHolder.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysLoginService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-generator/pom.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/pom.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/domain/DictHosp.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TbTransitionMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TestMapper.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjOrderMapper.java 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/service/ITjOrderService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/LtkjExamJcsqdServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjOrderServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/resources/mapper/hosp/DictHospMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-quartz/pom.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-system/pom.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/pom.xml
@@ -3,7 +3,7 @@
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ltkj_peis_region</artifactId>
        <artifactId>ltkj</artifactId>
        <groupId>com.ltkj</groupId>
        <version>3.8.4</version>
    </parent>
ltkj-admin/src/main/java/com/ltkj/web/config/timer/DefaultScheduled.java
@@ -1,5 +1,6 @@
package com.ltkj.web.config.timer;
import cn.hutool.core.date.DateUtil;
import com.ltkj.framework.datasource.DynamicDataSourceContextHolder;
import com.ltkj.hosp.domain.TjJcycxm;
import com.ltkj.hosp.mapper.TestMapper;
@@ -89,6 +90,7 @@
        String dsqjssj = configService.selectConfigByKey("dsqjssj");
        String yqbm = configService.selectConfigByKey("common_api_service_hospbm");
        boolean panduandangqianshijian = panduandangqianshijian(dsqkssj, dsqjssj);
        log.info("定时器自动同步检验检查结果");
        log.info("当前时间是否在 " + dsqkssj + " 点到 " + dsqjssj + " 点之间: " + panduandangqianshijian);
            String dsrwsjjg = configService.selectConfigByKey("dsrwsjjg");
            boolean lock = reentrantLock.tryLock();
@@ -172,7 +174,8 @@
            } catch (Exception e) {
                scheduleNextTask(Long.parseLong(dsrwsjjg));
                log.error("定时器执行报错");
                e.printStackTrace();
                log.error(String.valueOf(e));
//                e.printStackTrace();
            } finally {
                reentrantLock.unlock();
            }
@@ -216,8 +219,10 @@
            }
        } catch (Exception e) {
            log.info("同步检验数据失败");
            throw new RuntimeException(e);
//            throw new RuntimeException(e);
            log.error(String.valueOf(e));
        }
    }
@@ -237,7 +242,8 @@
            }
        } catch (Exception e) {
            log.info("同步检查数据失败");
            throw new RuntimeException(e);
//            throw new RuntimeException(e);
            log.error(String.valueOf(e));
        }
    }
}
ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisApiController.java
@@ -11,11 +11,14 @@
import com.ltkj.framework.config.UserHoder;
import com.ltkj.hosp.domain.LtkjJianchajianyanTree;
import com.ltkj.hosp.domain.TjOrder;
import com.ltkj.hosp.domain.TjProject;
import com.ltkj.hosp.hisDto.*;
import com.ltkj.hosp.mapper.TestMapper;
import com.ltkj.hosp.service.*;
import com.ltkj.hosp.sqlDomain.LtkjExamJcbgd;
import com.ltkj.hosp.sqlDomain.LtkjExamJcsqd;
import com.ltkj.hosp.sqlDomain.LtkjHybgd;
import com.ltkj.hosp.sqlDomain.LtkjHysqd;
import com.ltkj.hosp.vodomain.CsProVo;
import com.ltkj.web.controller.system.TjCheckController;
import io.swagger.annotations.Api;
@@ -52,6 +55,10 @@
    private ITjProjectService projectService;
    @Autowired
    private ITjOrderRemarkService orderRemarkService;
    @Autowired
    private LtkjHysqdService hysqdService;
    @Autowired
    private LtkjHybgdService hybgdService;
    /**
     * 获取pacs检查数据
@@ -131,7 +138,7 @@
     */
    @PostMapping("/lis/getList")
    public AjaxResult getLisList(@RequestBody String json) {
//        log.info("pacs接口参数->{}",JSONUtil.toJsonStr(json));
        log.info("lis接口参数->{}",JSONUtil.toJsonStr(json));
        cn.hutool.json.JSONObject parseObj = JSONUtil.parseObj(json);
        String tjNum = StrUtil.isBlank(parseObj.getStr("tjNum")) ? null : parseObj.getStr("tjNum");
        String name = StrUtil.isBlank(parseObj.getStr("name")) ? null : parseObj.getStr("name");
@@ -149,7 +156,7 @@
        }
        List<Map<String, Object>> jcList = testMapper.getLisJyList(name, mzh, start, end);
        return AjaxResult.success(jcList);
//        String json1 = "[{\"reportDoctorCode\":114,\"deptName\":\"体检中心\",\"checkDoctorCode\":114,\"ghxh\":\"M_jk20241106000019_2\",\"gender\":\"男\",\"brid\":\"jk20241106000019\",\"checkParts\":\"◆泌尿系前列腺\",\"zyh\":\"-\",\"diagnosis\":\"前列腺增生\",\"checkDoctorName\":\"李霞\",\"F_MACHINE_NAME_LIST\":\"GE-P6\",\"reportDate\":\"2024.11.06 11:49:20\",\"examinationDate\":\"2024.11.06 11:54:58\",\"examination\":\"双肾大小、形态正常,包膜光滑平整,实质回声分布均匀,皮髓界限清晰,集合系统未见分离。rnCDFI:双肾血流呈“树枝状”分布,灌注良好;双侧输尿管未见扩张。rn膀胱充盈佳,壁厚度正常,内壁光整,腔内未探及异常回声。rn经腹部前列腺大小约34mm×35mm×30mm,形态饱满,包膜完整,实质回声欠均匀,内腺稍增大。rnCDFI:腺体内未探及异常血流信号。\",\"name\":\"张小兵\",\"patientAge\":\"53岁\",\"clinicalDiagnosis\":\"\",\"mzh\":\"\",\"F_RPT_UID\":\"1.2.840.40823.1.1.1.204.1730864961.484.897.557\",\"reportDoctorName\":\"李霞\",\"studyReport\":525696,\"F_RPT_WRITE_DATE\":\"2024.11.06\"},{\"reportDoctorCode\":141,\"deptName\":\"体检中心                  \",\"checkDoctorCode\":141,\"ghxh\":\"M_jk20241106000019_2\",\"gender\":\"男\",\"brid\":\"jk20241106000019\",\"checkParts\":\"◆胸部CT平扫\",\"zyh\":\"-\",\"diagnosis\":\"1.左肺下叶外基底段支气管扩张伴感染;rn2.冠状动脉硬化;rn3.胸椎骨质增生。\",\"checkDoctorName\":\"姚诚\",\"F_MACHINE_NAME_LIST\":\"SIEMENS-CT\",\"reportDate\":\"2024.11.06 17:12:53\",\"examinationDate\":\"2024.11.06 17:12:54\",\"examination\":\"两侧胸廓对称,气管居中。左肺下叶外基底段支气管扩张,周围见斑片状磨玻璃影;双肺门结构正常,各叶、段支气管通畅。心脏各房室大小正常;冠状动脉走行区多发致密影。纵膈内未见增大淋巴结。双侧胸膜未见增厚。部分胸椎缘见骨赘形成,胸廓诸骨质结构显示完整,软组织结构显示正常。\",\"name\":\"张小兵\",\"patientAge\":\"76岁\",\"clinicalDiagnosis\":\"\",\"mzh\":\"20241106000520\",\"F_RPT_UID\":\"1.2.840.40823.1.1.1.1.1730884375.763.395.131\",\"reportDoctorName\":\"姚诚\",\"studyReport\":525872,\"F_RPT_WRITE_DATE\":\"2024.11.06\"},{\"reportDoctorCode\":141,\"deptName\":\"体检中心                  \",\"checkDoctorCode\":141,\"ghxh\":\"M_jk20241106000019_2\",\"gender\":\"男\",\"brid\":\"jk20241106000019\",\"checkParts\":\"◆胸部CT平扫\",\"zyh\":\"-\",\"diagnosis\":\"1.左肺下叶外基底段支气管扩张伴感染;rn2.冠状动脉硬化;rn3.胸椎骨质增生。\",\"checkDoctorName\":\"姚诚\",\"F_MACHINE_NAME_LIST\":\"SIEMENS-CT\",\"reportDate\":\"2024.11.06 17:12:53\",\"examinationDate\":\"2024.11.06 17:12:54\",\"examination\":\"两侧胸廓对称,气管居中。左肺下叶外基底段支气管扩张,周围见斑片状磨玻璃影;双肺门结构正常,各叶、段支气管通畅。心脏各房室大小正常;冠状动脉走行区多发致密影。纵膈内未见增大淋巴结。双侧胸膜未见增厚。部分胸椎缘见骨赘形成,胸廓诸骨质结构显示完整,软组织结构显示正常。\",\"name\":\"张小兵\",\"patientAge\":\"76岁\",\"clinicalDiagnosis\":\"\",\"mzh\":\"20241106000520\",\"F_RPT_UID\":\"1.2.840.40823.1.1.1.1.1730884375.763.395.131\",\"reportDoctorName\":\"姚诚\",\"studyReport\":525872,\"F_RPT_WRITE_DATE\":\"2024.11.06\"},{\"reportDoctorCode\":141,\"deptName\":\"体检中心                  \",\"checkDoctorCode\":141,\"ghxh\":\"M_jk20241106000019_2\",\"gender\":\"男\",\"brid\":\"jk20241106000019\",\"checkParts\":\"◆胸部CT平扫\",\"zyh\":\"-\",\"diagnosis\":\"1.左肺下叶外基底段支气管扩张伴感染;rn2.冠状动脉硬化;rn3.胸椎骨质增生。\",\"checkDoctorName\":\"姚诚\",\"F_MACHINE_NAME_LIST\":\"SIEMENS-CT\",\"reportDate\":\"2024.11.06 17:12:53\",\"examinationDate\":\"2024.11.06 17:12:54\",\"examination\":\"两侧胸廓对称,气管居中。左肺下叶外基底段支气管扩张,周围见斑片状磨玻璃影;双肺门结构正常,各叶、段支气管通畅。心脏各房室大小正常;冠状动脉走行区多发致密影。纵膈内未见增大淋巴结。双侧胸膜未见增厚。部分胸椎缘见骨赘形成,胸廓诸骨质结构显示完整,软组织结构显示正常。\",\"name\":\"张小兵\",\"patientAge\":\"76岁\",\"clinicalDiagnosis\":\"\",\"mzh\":\"20241106000520\",\"F_RPT_UID\":\"1.2.840.40823.1.1.1.1.1730884375.763.395.131\",\"reportDoctorName\":\"姚诚\",\"studyReport\":525872,\"F_RPT_WRITE_DATE\":\"2024.11.06\"},{\"reportDoctorCode\":141,\"deptName\":\"体检中心                  \",\"checkDoctorCode\":141,\"ghxh\":\"M_jk20241106000019_2\",\"gender\":\"男\",\"brid\":\"jk20241106000019\",\"checkParts\":\"◆胸部CT平扫\",\"zyh\":\"-\",\"diagnosis\":\"1.左肺下叶外基底段支气管扩张伴感染;rn2.冠状动脉硬化;rn3.胸椎骨质增生。\",\"checkDoctorName\":\"姚诚\",\"F_MACHINE_NAME_LIST\":\"SIEMENS-CT\",\"reportDate\":\"2024.11.06 17:12:53\",\"examinationDate\":\"2024.11.06 17:12:54\",\"examination\":\"两侧胸廓对称,气管居中。左肺下叶外基底段支气管扩张,周围见斑片状磨玻璃影;双肺门结构正常,各叶、段支气管通畅。心脏各房室大小正常;冠状动脉走行区多发致密影。纵膈内未见增大淋巴结。双侧胸膜未见增厚。部分胸椎缘见骨赘形成,胸廓诸骨质结构显示完整,软组织结构显示正常。\",\"name\":\"张小兵\",\"patientAge\":\"76岁\",\"clinicalDiagnosis\":\"\",\"mzh\":\"20241106000520\",\"F_RPT_UID\":\"1.2.840.40823.1.1.1.1.1730884375.763.395.131\",\"reportDoctorName\":\"姚诚\",\"studyReport\":525872,\"F_RPT_WRITE_DATE\":\"2024.11.06\"},{\"reportDoctorCode\":141,\"deptName\":\"体检中心                  \",\"checkDoctorCode\":141,\"ghxh\":\"M_jk20241106000019_2\",\"gender\":\"男\",\"brid\":\"jk20241106000019\",\"checkParts\":\"◆胸部CT平扫\",\"zyh\":\"-\",\"diagnosis\":\"1.左肺下叶外基底段支气管扩张伴感染;rn2.冠状动脉硬化;rn3.胸椎骨质增生。\",\"checkDoctorName\":\"姚诚\",\"F_MACHINE_NAME_LIST\":\"SIEMENS-CT\",\"reportDate\":\"2024.11.06 17:12:53\",\"examinationDate\":\"2024.11.06 17:12:54\",\"examination\":\"两侧胸廓对称,气管居中。左肺下叶外基底段支气管扩张,周围见斑片状磨玻璃影;双肺门结构正常,各叶、段支气管通畅。心脏各房室大小正常;冠状动脉走行区多发致密影。纵膈内未见增大淋巴结。双侧胸膜未见增厚。部分胸椎缘见骨赘形成,胸廓诸骨质结构显示完整,软组织结构显示正常。\",\"name\":\"张小兵\",\"patientAge\":\"76岁\",\"clinicalDiagnosis\":\"\",\"mzh\":\"20241106000520\",\"F_RPT_UID\":\"1.2.840.40823.1.1.1.1.1730884375.763.395.131\",\"reportDoctorName\":\"姚诚\",\"studyReport\":525872,\"F_RPT_WRITE_DATE\":\"2024.11.06\"},{\"reportDoctorCode\":141,\"deptName\":\"体检中心                  \",\"checkDoctorCode\":141,\"ghxh\":\"M_jk20241106000019_2\",\"gender\":\"男\",\"brid\":\"jk20241106000019\",\"checkParts\":\"◆胸部CT平扫\",\"zyh\":\"-\",\"diagnosis\":\"1.左肺下叶外基底段支气管扩张伴感染;rn2.冠状动脉硬化;rn3.胸椎骨质增生。\",\"checkDoctorName\":\"姚诚\",\"F_MACHINE_NAME_LIST\":\"SIEMENS-CT\",\"reportDate\":\"2024.11.06 17:12:53\",\"examinationDate\":\"2024.11.06 17:12:54\",\"examination\":\"两侧胸廓对称,气管居中。左肺下叶外基底段支气管扩张,周围见斑片状磨玻璃影;双肺门结构正常,各叶、段支气管通畅。心脏各房室大小正常;冠状动脉走行区多发致密影。纵膈内未见增大淋巴结。双侧胸膜未见增厚。部分胸椎缘见骨赘形成,胸廓诸骨质结构显示完整,软组织结构显示正常。\",\"name\":\"张小兵\",\"patientAge\":\"76岁\",\"clinicalDiagnosis\":\"\",\"mzh\":\"20241106000520\",\"F_RPT_UID\":\"1.2.840.40823.1.1.1.1.1730884375.763.395.131\",\"reportDoctorName\":\"姚诚\",\"studyReport\":525872,\"F_RPT_WRITE_DATE\":\"2024.11.06\"},{\"reportDoctorCode\":141,\"deptName\":\"体检中心                  \",\"checkDoctorCode\":141,\"ghxh\":\"M_jk20241106000019_2\",\"gender\":\"男\",\"brid\":\"jk20241106000019\",\"checkParts\":\"◆胸部CT平扫\",\"zyh\":\"-\",\"diagnosis\":\"1.左肺下叶外基底段支气管扩张伴感染;rn2.冠状动脉硬化;rn3.胸椎骨质增生。\",\"checkDoctorName\":\"姚诚\",\"F_MACHINE_NAME_LIST\":\"SIEMENS-CT\",\"reportDate\":\"2024.11.06 17:12:53\",\"examinationDate\":\"2024.11.06 17:12:54\",\"examination\":\"两侧胸廓对称,气管居中。左肺下叶外基底段支气管扩张,周围见斑片状磨玻璃影;双肺门结构正常,各叶、段支气管通畅。心脏各房室大小正常;冠状动脉走行区多发致密影。纵膈内未见增大淋巴结。双侧胸膜未见增厚。部分胸椎缘见骨赘形成,胸廓诸骨质结构显示完整,软组织结构显示正常。\",\"name\":\"张小兵\",\"patientAge\":\"76岁\",\"clinicalDiagnosis\":\"\",\"mzh\":\"20241106000520\",\"F_RPT_UID\":\"1.2.840.40823.1.1.1.1.1730884375.763.395.131\",\"reportDoctorName\":\"姚诚\",\"studyReport\":525872,\"F_RPT_WRITE_DATE\":\"2024.11.06\"},{\"reportDoctorCode\":141,\"deptName\":\"体检中心                  \",\"checkDoctorCode\":141,\"ghxh\":\"M_jk20241106000019_2\",\"gender\":\"男\",\"brid\":\"jk20241106000019\",\"checkParts\":\"◆胸部CT平扫\",\"zyh\":\"-\",\"diagnosis\":\"1.左肺下叶外基底段支气管扩张伴感染;rn2.冠状动脉硬化;rn3.胸椎骨质增生。\",\"checkDoctorName\":\"姚诚\",\"F_MACHINE_NAME_LIST\":\"SIEMENS-CT\",\"reportDate\":\"2024.11.06 17:12:53\",\"examinationDate\":\"2024.11.06 17:12:54\",\"examination\":\"两侧胸廓对称,气管居中。左肺下叶外基底段支气管扩张,周围见斑片状磨玻璃影;双肺门结构正常,各叶、段支气管通畅。心脏各房室大小正常;冠状动脉走行区多发致密影。纵膈内未见增大淋巴结。双侧胸膜未见增厚。部分胸椎缘见骨赘形成,胸廓诸骨质结构显示完整,软组织结构显示正常。\",\"name\":\"张小兵\",\"patientAge\":\"76岁\",\"clinicalDiagnosis\":\"\",\"mzh\":\"20241106000520\",\"F_RPT_UID\":\"1.2.840.40823.1.1.1.1.1730884375.763.395.131\",\"reportDoctorName\":\"姚诚\",\"studyReport\":525872,\"F_RPT_WRITE_DATE\":\"2024.11.06\"},{\"reportDoctorCode\":141,\"deptName\":\"体检中心                  \",\"checkDoctorCode\":141,\"ghxh\":\"M_jk20241106000019_2\",\"gender\":\"男\",\"brid\":\"jk20241106000019\",\"checkParts\":\"◆胸部CT平扫\",\"zyh\":\"-\",\"diagnosis\":\"1.左肺下叶外基底段支气管扩张伴感染;rn2.冠状动脉硬化;rn3.胸椎骨质增生。\",\"checkDoctorName\":\"姚诚\",\"F_MACHINE_NAME_LIST\":\"SIEMENS-CT\",\"reportDate\":\"2024.11.06 17:12:53\",\"examinationDate\":\"2024.11.06 17:12:54\",\"examination\":\"两侧胸廓对称,气管居中。左肺下叶外基底段支气管扩张,周围见斑片状磨玻璃影;双肺门结构正常,各叶、段支气管通畅。心脏各房室大小正常;冠状动脉走行区多发致密影。纵膈内未见增大淋巴结。双侧胸膜未见增厚。部分胸椎缘见骨赘形成,胸廓诸骨质结构显示完整,软组织结构显示正常。\",\"name\":\"张小兵\",\"patientAge\":\"76岁\",\"clinicalDiagnosis\":\"\",\"mzh\":\"20241106000520\",\"F_RPT_UID\":\"1.2.840.40823.1.1.1.1.1730884375.763.395.131\",\"reportDoctorName\":\"姚诚\",\"studyReport\":525872,\"F_RPT_WRITE_DATE\":\"2024.11.06\"},{\"reportDoctorCode\":141,\"deptName\":\"体检中心                  \",\"checkDoctorCode\":141,\"ghxh\":\"M_jk20241106000019_2\",\"gender\":\"男\",\"brid\":\"jk20241106000019\",\"checkParts\":\"◆胸部CT平扫\",\"zyh\":\"-\",\"diagnosis\":\"1.左肺下叶外基底段支气管扩张伴感染;rn2.冠状动脉硬化;rn3.胸椎骨质增生。\",\"checkDoctorName\":\"姚诚\",\"F_MACHINE_NAME_LIST\":\"SIEMENS-CT\",\"reportDate\":\"2024.11.06 17:12:53\",\"examinationDate\":\"2024.11.06 17:12:54\",\"examination\":\"两侧胸廓对称,气管居中。左肺下叶外基底段支气管扩张,周围见斑片状磨玻璃影;双肺门结构正常,各叶、段支气管通畅。心脏各房室大小正常;冠状动脉走行区多发致密影。纵膈内未见增大淋巴结。双侧胸膜未见增厚。部分胸椎缘见骨赘形成,胸廓诸骨质结构显示完整,软组织结构显示正常。\",\"name\":\"张小兵\",\"patientAge\":\"76岁\",\"clinicalDiagnosis\":\"\",\"mzh\":\"20241106000520\",\"F_RPT_UID\":\"1.2.840.40823.1.1.1.1.1730884375.763.395.131\",\"reportDoctorName\":\"姚诚\",\"studyReport\":525872,\"F_RPT_WRITE_DATE\":\"2024.11.06\"},{\"reportDoctorCode\":141,\"deptName\":\"体检中心                  \",\"checkDoctorCode\":141,\"ghxh\":\"M_jk20241106000019_2\",\"gender\":\"男\",\"brid\":\"jk20241106000019\",\"checkParts\":\"◆胸部CT平扫\",\"zyh\":\"-\",\"diagnosis\":\"1.左肺下叶外基底段支气管扩张伴感染;rn2.冠状动脉硬化;rn3.胸椎骨质增生。\",\"checkDoctorName\":\"姚诚\",\"F_MACHINE_NAME_LIST\":\"SIEMENS-CT\",\"reportDate\":\"2024.11.06 17:12:53\",\"examinationDate\":\"2024.11.06 17:12:54\",\"examination\":\"两侧胸廓对称,气管居中。左肺下叶外基底段支气管扩张,周围见斑片状磨玻璃影;双肺门结构正常,各叶、段支气管通畅。心脏各房室大小正常;冠状动脉走行区多发致密影。纵膈内未见增大淋巴结。双侧胸膜未见增厚。部分胸椎缘见骨赘形成,胸廓诸骨质结构显示完整,软组织结构显示正常。\",\"name\":\"张小兵\",\"patientAge\":\"76岁\",\"clinicalDiagnosis\":\"\",\"mzh\":\"20241106000520\",\"F_RPT_UID\":\"1.2.840.40823.1.1.1.1.1730884375.763.395.131\",\"reportDoctorName\":\"姚诚\",\"studyReport\":525872,\"F_RPT_WRITE_DATE\":\"2024.11.06\"},{\"reportDoctorCode\":141,\"deptName\":\"体检中心                  \",\"checkDoctorCode\":141,\"ghxh\":\"M_jk20241106000019_2\",\"gender\":\"男\",\"brid\":\"jk20241106000019\",\"checkParts\":\"◆胸部CT平扫\",\"zyh\":\"-\",\"diagnosis\":\"1.左肺下叶外基底段支气管扩张伴感染;rn2.冠状动脉硬化;rn3.胸椎骨质增生。\",\"checkDoctorName\":\"姚诚\",\"F_MACHINE_NAME_LIST\":\"SIEMENS-CT\",\"reportDate\":\"2024.11.06 17:12:53\",\"examinationDate\":\"2024.11.06 17:12:54\",\"examination\":\"两侧胸廓对称,气管居中。左肺下叶外基底段支气管扩张,周围见斑片状磨玻璃影;双肺门结构正常,各叶、段支气管通畅。心脏各房室大小正常;冠状动脉走行区多发致密影。纵膈内未见增大淋巴结。双侧胸膜未见增厚。部分胸椎缘见骨赘形成,胸廓诸骨质结构显示完整,软组织结构显示正常。\",\"name\":\"张小兵\",\"patientAge\":\"76岁\",\"clinicalDiagnosis\":\"\",\"mzh\":\"20241106000520\",\"F_RPT_UID\":\"1.2.840.40823.1.1.1.1.1730884375.763.395.131\",\"reportDoctorName\":\"姚诚\",\"studyReport\":525872,\"F_RPT_WRITE_DATE\":\"2024.11.06\"},{\"reportDoctorCode\":141,\"deptName\":\"体检中心                  \",\"checkDoctorCode\":141,\"ghxh\":\"M_jk20241106000019_2\",\"gender\":\"男\",\"brid\":\"jk20241106000019\",\"checkParts\":\"◆胸部CT平扫\",\"zyh\":\"-\",\"diagnosis\":\"1.左肺下叶外基底段支气管扩张伴感染;rn2.冠状动脉硬化;rn3.胸椎骨质增生。\",\"checkDoctorName\":\"姚诚\",\"F_MACHINE_NAME_LIST\":\"SIEMENS-CT\",\"reportDate\":\"2024.11.06 17:12:53\",\"examinationDate\":\"2024.11.06 17:12:54\",\"examination\":\"两侧胸廓对称,气管居中。左肺下叶外基底段支气管扩张,周围见斑片状磨玻璃影;双肺门结构正常,各叶、段支气管通畅。心脏各房室大小正常;冠状动脉走行区多发致密影。纵膈内未见增大淋巴结。双侧胸膜未见增厚。部分胸椎缘见骨赘形成,胸廓诸骨质结构显示完整,软组织结构显示正常。\",\"name\":\"张小兵\",\"patientAge\":\"76岁\",\"clinicalDiagnosis\":\"\",\"mzh\":\"20241106000520\",\"F_RPT_UID\":\"1.2.840.40823.1.1.1.1.1730884375.763.395.131\",\"reportDoctorName\":\"姚诚\",\"studyReport\":525872,\"F_RPT_WRITE_DATE\":\"2024.11.06\"},{\"reportDoctorCode\":141,\"deptName\":\"体检中心                  \",\"checkDoctorCode\":141,\"ghxh\":\"M_jk20241106000019_2\",\"gender\":\"男\",\"brid\":\"jk20241106000019\",\"checkParts\":\"◆胸部CT平扫\",\"zyh\":\"-\",\"diagnosis\":\"1.左肺下叶外基底段支气管扩张伴感染;rn2.冠状动脉硬化;rn3.胸椎骨质增生。\",\"checkDoctorName\":\"姚诚\",\"F_MACHINE_NAME_LIST\":\"SIEMENS-CT\",\"reportDate\":\"2024.11.06 17:12:53\",\"examinationDate\":\"2024.11.06 17:12:54\",\"examination\":\"两侧胸廓对称,气管居中。左肺下叶外基底段支气管扩张,周围见斑片状磨玻璃影;双肺门结构正常,各叶、段支气管通畅。心脏各房室大小正常;冠状动脉走行区多发致密影。纵膈内未见增大淋巴结。双侧胸膜未见增厚。部分胸椎缘见骨赘形成,胸廓诸骨质结构显示完整,软组织结构显示正常。\",\"name\":\"张小兵\",\"patientAge\":\"76岁\",\"clinicalDiagnosis\":\"\",\"mzh\":\"20241106000520\",\"F_RPT_UID\":\"1.2.840.40823.1.1.1.1.1730884375.763.395.131\",\"reportDoctorName\":\"姚诚\",\"studyReport\":525872,\"F_RPT_WRITE_DATE\":\"2024.11.06\"}]";
//        String json1 = "[{\"deptName\":\"科室\",\"gender\":\"男\",\"brid\":\"sqd445314589914\",\"checkParts\":\"血液\",\"project\":\"1.0-2.0\",\"examinationDate\":\"2025-02-11 05:12:23\",\"proResult\":\"1.0\",\"name\":\"赵四1\",\"patientAge\":\"20\",\"mzh\":\"810001246120745\",\"reportDoctorName\":\"医师\",\"proName\":\"血液分析\",\"conclusion\":\"异常\",\"tjStandardGtValue\":\"1 - 5\",\"company\":\"毫克\",\"checkDoctorName\":\"检测医师\",\"jcxmid\":\"123\",\"shys\":\"审核医师\"},{\"deptName\":\"科室\",\"gender\":\"男\",\"brid\":\"sqd445314589914\",\"checkParts\":\"血液\",\"project\":\"1.0-2.0\",\"examinationDate\":\"2025-02-11 05:12:23\",\"proResult\":\"1.0\",\"name\":\"赵四2\",\"patientAge\":\"20\",\"mzh\":\"201474534\",\"reportDoctorName\":\"医师\",\"proName\":\"血液分析\"},{\"deptName\":\"科室\",\"gender\":\"男\",\"brid\":\"sqd445314589914\",\"checkParts\":\"血液\",\"project\":\"1.0-2.0\",\"examinationDate\":\"2025-02-11 05:12:23\",\"proResult\":\"1.0\",\"name\":\"赵四3\",\"patientAge\":\"20\",\"mzh\":\"201474534\",\"reportDoctorName\":\"医师\",\"proName\":\"血液分析\"}]";
//        return AjaxResult.success(JSONUtil.parseArray(json1));
    }
@@ -189,76 +196,171 @@
    @Transactional
    @PostMapping("/asyncPacs")
    public AjaxResult asyncPacs(@RequestBody String json) {
//        log.info("合并检测同步参数 ->{}",json);
        log.info("合并检测同步参数 ->{}",json);
//        try {
//            Thread.sleep(2000);
//        } catch (InterruptedException ignored) {
//
//        }
//        if (true)
//            return AjaxResult.error("同步失败请重试");
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        cn.hutool.json.JSONObject parseObj = JSONUtil.parseObj( json);
        cn.hutool.json.JSONObject pacs = parseObj.getJSONObject("pacs");
        cn.hutool.json.JSONArray lis = parseObj.getJSONArray("lis");
        cn.hutool.json.JSONObject tj = parseObj.getJSONObject("tj");
        LtkjExamJcsqd ltkjExamJcsqd = new LtkjExamJcsqd();
        ltkjExamJcsqd.setTjh(pacs.getStr("mzh"));
        if (pacs != null && !pacs.isEmpty()){
            LtkjExamJcsqd ltkjExamJcsqd = new LtkjExamJcsqd();
            ltkjExamJcsqd.setTjh(pacs.getStr("mzh"));
        LambdaQueryWrapper<LtkjJianchajianyanTree> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(LtkjJianchajianyanTree::getCardId, pacs.getStr("mzh"));
        String xmdm = projectService.getById(tj.getStr("proId")).getHisXmbm();
        queryWrapper.eq(LtkjJianchajianyanTree::getType,"检查");
        queryWrapper.eq(LtkjJianchajianyanTree::getHisXmdm,xmdm);
            LambdaQueryWrapper<LtkjJianchajianyanTree> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(LtkjJianchajianyanTree::getCardId, pacs.getStr("mzh"));
            String xmdm = projectService.getById(tj.getStr("proId")).getHisXmbm();
            queryWrapper.eq(LtkjJianchajianyanTree::getType,"检查");
            queryWrapper.eq(LtkjJianchajianyanTree::getHisXmdm,xmdm);
        LtkjJianchajianyanTree tree = ltkjJianchajianyanTreeService.getOne(queryWrapper);
        ltkjExamJcsqd.setTmh("M_"+tree.getSqdh()+"_"+tree.getHisXmdm());
        ltkjExamJcsqd.setBgys(pacs.getStr("checkDoctorName"));
        ltkjExamJcsqd.setBgysid(pacs.getStr("checkDoctorCode"));
        ltkjExamJcsqd.setSqsj(format.format(tree.getCreateTime()));
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
        Date reportDate = null;
        try {
            reportDate = dateFormat.parse(pacs.getStr("reportDate"));
            ltkjExamJcsqd.setJgsj(format.format(reportDate));
        } catch (ParseException ignored) {
            ltkjExamJcsqd.setJgsj(format.format(new Date()));
        }
        String checkParts = pacs.getStr("checkParts");
        ltkjExamJcsqd.setJcxmmc(checkParts);
        ltkjExamJcsqd.setJcxmid(xmdm);
        ltkjExamJcsqd.setBw(checkParts);
        ltkjExamJcsqd.setJgzt(pacs.getStr("diagnosis"));
        ltkjExamJcsqd.setJgbx(pacs.getStr("examination"));
        boolean save1 = ltkjExamJcsqdService.save(ltkjExamJcsqd);
        LtkjExamJcbgd ltkjExamJcbgd = new LtkjExamJcbgd();
        ltkjExamJcbgd.setTjh(ltkjExamJcsqd.getTjh());
        ltkjExamJcbgd.setTmh(ltkjExamJcsqd.getTmh());
        ltkjExamJcbgd.setXmdm(ltkjExamJcsqd.getJcxmid());
        ltkjExamJcbgd.setXmmc(ltkjExamJcsqd.getJcxmmc());
        ltkjExamJcbgd.setBgUrl("");
        ltkjExamJcbgd.setShysxm(pacs.getStr("reportDoctorName"));
        ltkjExamJcbgd.setShysdm(pacs.getStr("reportDoctorCode"));
        ltkjExamJcbgd.setYxzd(ltkjExamJcsqd.getJgzt());
        ltkjExamJcbgd.setYxbx(ltkjExamJcsqd.getJgbx());
        ltkjExamJcbgd.setZdsj(ltkjExamJcsqd.getJgsj());
        ltkjExamJcbgd.setSqsj(ltkjExamJcsqd.getSqsj());
        ltkjExamJcbgd.setJcbw(ltkjExamJcsqd.getJcxmmc());
        boolean save2 = ltkjExamJcbgdService.save(ltkjExamJcbgd);
        if (save1 && save2) {
            LambdaQueryWrapper<TjOrder> wrapper = new LambdaQueryWrapper<>();
            wrapper.eq(TjOrder::getCardId, ltkjExamJcbgd.getTjh());
            TjOrder order = tjOrderService.getOne(wrapper);
            LtkjJianchajianyanTree tree = ltkjJianchajianyanTreeService.getOne(queryWrapper);
            ltkjExamJcsqd.setTmh("M_"+tree.getSqdh()+"_"+tree.getHisXmdm());
            ltkjExamJcsqd.setBgys(pacs.getStr("checkDoctorName"));
            ltkjExamJcsqd.setBgysid(pacs.getStr("checkDoctorCode"));
            ltkjExamJcsqd.setSqsj(format.format(tree.getCreateTime()));
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
            Date reportDate = null;
            try {
                testMapper.updateDetailByTjJcCall(order.getCardId(), String.valueOf(order.getOrderId()), order.getTjNumber(), UserHoder.getLoginUser().getUserId());
            }catch (Exception e){
                log.error(String.valueOf(e));
                reportDate = dateFormat.parse(pacs.getStr("reportDate"));
                ltkjExamJcsqd.setJgsj(format.format(reportDate));
            } catch (ParseException ignored) {
                ltkjExamJcsqd.setJgsj(format.format(new Date()));
            }
            String checkParts = pacs.getStr("checkParts");
            ltkjExamJcsqd.setJcxmmc(checkParts);
            ltkjExamJcsqd.setJcxmid(xmdm);
            ltkjExamJcsqd.setBw(checkParts);
            ltkjExamJcsqd.setJgzt(pacs.getStr("diagnosis"));
            ltkjExamJcsqd.setJgbx(pacs.getStr("examination"));
            boolean save1 = ltkjExamJcsqdService.save(ltkjExamJcsqd);
            LtkjExamJcbgd ltkjExamJcbgd = new LtkjExamJcbgd();
            ltkjExamJcbgd.setTjh(ltkjExamJcsqd.getTjh());
            ltkjExamJcbgd.setTmh(ltkjExamJcsqd.getTmh());
            ltkjExamJcbgd.setXmdm(ltkjExamJcsqd.getJcxmid());
            ltkjExamJcbgd.setXmmc(ltkjExamJcsqd.getJcxmmc());
            ltkjExamJcbgd.setBgUrl("");
            ltkjExamJcbgd.setShysxm(pacs.getStr("reportDoctorName"));
            ltkjExamJcbgd.setShysdm(pacs.getStr("reportDoctorCode"));
            ltkjExamJcbgd.setYxzd(ltkjExamJcsqd.getJgzt());
            ltkjExamJcbgd.setYxbx(ltkjExamJcsqd.getJgbx());
            ltkjExamJcbgd.setZdsj(ltkjExamJcsqd.getJgsj());
            ltkjExamJcbgd.setSqsj(ltkjExamJcsqd.getSqsj());
            ltkjExamJcbgd.setJcbw(ltkjExamJcsqd.getJcxmmc());
            boolean save2 = ltkjExamJcbgdService.save(ltkjExamJcbgd);
            if (save1 && save2) {
                LambdaQueryWrapper<TjOrder> wrapper = new LambdaQueryWrapper<>();
                wrapper.eq(TjOrder::getCardId, ltkjExamJcbgd.getTjh());
                TjOrder order = tjOrderService.getOne(wrapper);
                try {
                    testMapper.updateDetailByTjJcCall(order.getCardId(), String.valueOf(order.getOrderId()), order.getTjNumber(), UserHoder.getLoginUser().getUserId());
                }catch (Exception e){
                    log.error(String.valueOf(e));
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    return AjaxResult.error("同步失败请重试");
                }
            } else {
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return AjaxResult.error("同步失败请重试");
            }
        } else {
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return AjaxResult.error("同步失败请重试");
            return AjaxResult.success();
        }else {
            cn.hutool.json.JSONObject entries = (cn.hutool.json.JSONObject) lis.get(0);
            String mzh = entries.getStr("mzh");
            LtkjHysqd hysqd = new LtkjHysqd();
            LambdaQueryWrapper<TjOrder> wrapper = new LambdaQueryWrapper<>();
            wrapper.eq(TjOrder::getCardId,mzh);
            TjOrder order = tjOrderService.getOne(wrapper);
            hysqd.setTjh(order.getTjNumber());
            LambdaQueryWrapper<LtkjJianchajianyanTree> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(LtkjJianchajianyanTree::getCardId, mzh);
            TjProject project = projectService.getById(tj.getStr("proId"));
            String xmdm = project.getHisXmbm();
            queryWrapper.eq(LtkjJianchajianyanTree::getType,"检验");
            queryWrapper.eq(LtkjJianchajianyanTree::getHisXmdm,xmdm);
            LtkjJianchajianyanTree tree = ltkjJianchajianyanTreeService.getOne(queryWrapper);
            if (tree == null) {
                tree = new LtkjJianchajianyanTree();
                tree.setHisXmdm(xmdm);
                tree.setCreateTime(new Date());
                String sqdh = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + String.valueOf(RandomUtil.randomInt(0, 99999));
                queryWrapper = new LambdaQueryWrapper<>();
                queryWrapper.eq(LtkjJianchajianyanTree::getSqdh,sqdh);
                if (ltkjJianchajianyanTreeService.getOne(queryWrapper) == null) {
                    tree.setSqdh(sqdh);
                }else {
                    while (true){
                        sqdh = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + String.valueOf(RandomUtil.randomInt(0, 99999));
                        queryWrapper = new LambdaQueryWrapper<>();
                        queryWrapper.eq(LtkjJianchajianyanTree::getSqdh,sqdh);
                        if (ltkjJianchajianyanTreeService.getOne(queryWrapper) == null) {
                            tree.setSqdh(sqdh);
                            break;
                        }
                    }
                }
            }
            hysqd.setTmh(tree.getSqdh()+"_"+tree.getHisXmdm());
            hysqd.setXmid(xmdm);
            hysqd.setXmmc(project.getHisXmbm());
            hysqd.setSqsj(format.format(tree.getCreateTime()));
            hysqd.setJgsj(format.format(new Date()));
//            hysqd.setBbmc();
            boolean save = hysqdService.save(hysqd);
            boolean save2 = true;
            for (Object object : lis) {
                cn.hutool.json.JSONObject jsonObject = (cn.hutool.json.JSONObject) object;
                LtkjHybgd hybgd = new LtkjHybgd();
                hybgd.setTmh(tree.getSqdh()+"_"+tree.getHisXmdm());
                hybgd.setJcxmid(jsonObject.getStr("jcxmid"));
                hybgd.setJcxm(jsonObject.getStr("checkParts"));
                hybgd.setJyjg(jsonObject.getStr("proResult"));
                hybgd.setJgdw(jsonObject.getStr("company"));
                String tjStandardGtValue = jsonObject.getStr("tjStandardGtValue");
                String zdz = "";
                String zxz = "";
                if (tjStandardGtValue.contains("-")){
                    String[] split = tjStandardGtValue.split("-");
                    zxz = split[0].trim();
                    zdz = split[1].trim();
                }
                hybgd.setFwzdz(zdz);
                hybgd.setFwzgz(zxz);
                hybgd.setFwz(tjStandardGtValue);
                hybgd.setJysj(jsonObject.getStr("examinationDate"));
                hybgd.setShsj(jsonObject.getStr("examinationDate"));
                hybgd.setJyys(jsonObject.getStr("checkDoctorName"));
                hybgd.setShys(jsonObject.getStr("shys"));
                boolean save1 = hybgdService.save(hybgd);
                if (!save1) {
                    save2 = false;
                    break;
                }
            }
            if (save && save2){
                try {
                    testMapper.updateDetailByCall(order.getCardId(), String.valueOf(order.getOrderId()), order.getTjNumber(), UserHoder.getLoginUser().getUserId());
                }catch (Exception e){
                    log.error(String.valueOf(e));
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    return AjaxResult.error("同步失败请重试");
                }
            } else {
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return AjaxResult.error("同步失败请重试");
            }
            return AjaxResult.success();
        }
        return AjaxResult.success();
    }
ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisApiMethod.java
@@ -1414,7 +1414,7 @@
                    if (samplings.size() >= 2) {
                        // 进行合并
                        List<String> stringList = samplings.stream().map(TjSampling::getId).collect(Collectors.toList());
                        log.info("提取id ->{}",stringList);
//                        log.info("提取id ->{}",stringList);
                        for (int i = 0; i < stringList.size(); i++) {
                            String s = stringList.get(i);
                            if (tjSamplingService.isMergeItem(s) != 0) {
ltkj-admin/src/main/java/com/ltkj/web/controller/service/TjSysAsyncServiceImpl.java
@@ -1809,7 +1809,7 @@
                        if (samplings.size() >= 2){
                            // 进行合并
                            List<String> stringList = samplings.stream().map(TjSampling::getId).collect(Collectors.toList());
                            log.info("提取id ->{}",stringList);
//                            log.info("提取id ->{}",stringList);
                            for (int i = 0; i < stringList.size(); i++) {
                                String s = stringList.get(i);
                                if (tjSamplingService.isMergeItem(s) != 0) {
ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysConfigController.java
@@ -1,8 +1,7 @@
package com.ltkj.web.controller.system;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
@@ -11,15 +10,21 @@
import cn.hutool.extra.pinyin.PinyinUtil;
import com.ltkj.common.core.domain.entity.SysMenu;
import com.ltkj.common.utils.SecurityUtils;
import com.ltkj.framework.datasource.DynamicDataSourceContextHolder;
import com.ltkj.hosp.domain.DictHosp;
import com.ltkj.hosp.domain.TjJcycxm;
import com.ltkj.hosp.domain.TjProject;
import com.ltkj.hosp.mapper.TestMapper;
import com.ltkj.hosp.service.*;
import com.ltkj.hosp.sqlDomain.LtkjExamJcsqd;
import com.ltkj.hosp.sqlDomain.*;
import com.ltkj.system.service.ISysMenuService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import jodd.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Case;
import org.apache.ibatis.jdbc.Null;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -43,6 +48,7 @@
@RestController
@RequestMapping("/system/config")
@Api(tags = "A---PC端参数配置接口集")
@Slf4j
public class SysConfigController extends BaseController {
    @Autowired
    private ISysConfigService configService;
@@ -60,6 +66,16 @@
    private TjJcycxmService jcycxmService;
    @Resource
    private LtkjExamJcsqdService jcsqdService;
    @Resource
    private LtkjExamJcbgdService jcbgdService;
    @Resource
    private LtkjHybgdService ltkjHybgdService;
    @Resource
    private LtkjHysqdService ltkjHysqdService;
    @Resource
    private TestMapper testMapper;
    @Autowired
    private AwsService awsService;
    /**
     * 获取参数配置列表
@@ -172,6 +188,107 @@
    }
    @GetMapping ("/shoudongtbjyjcwsxmjg")
    @ApiOperation(value = "手动同步检验检查外送项目结果接口")
    public AjaxResult shoudongtbjyjcwsxmjg(@RequestParam @ApiParam(value = "jy检验 jc检查 jyjc检验和检查") String tblx,
                                           @ApiParam(value = "体检号")@RequestParam String tjh) {
        log.info("手动同步检验或检查结果开始->{}",DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
        try {
            switch (tblx){
                case "jy":
                    tbjianyan(tjh);
                    log.info("当前同步的是->{} 结果","检验");
                    break;
                case "jc":
                    tbjiancha(tjh);
                    log.info("当前同步的是->{} 结果","检查");
                    break;
                case "jyjc":
                    tbjianyan(tjh);
                    tbjiancha(tjh);
                    log.info("当前同步的是->{} 结果","检验检查");
                    break;
                default:
                    log.info("没有找到所匹配的同步类型");
                    return AjaxResult.error("没有找到所匹配的同步类型!");
            }
            Map<String, Object> map = new HashMap<>();
            testMapper.tjplUpdateDetatilByVi(map);
            Integer object = (Integer) map.get("total");
            log.info("执行存储过程后出参->{}", object);
            log.info("手动同步检验或检查结果结束->{}",DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
            return AjaxResult.success("同步成功");
        } catch (Exception e) {
            log.error(String.valueOf(e));
        }
        return AjaxResult.success();
    }
    private void tbjianyan(String s) {
        try {
            List<Aws> awsList = testMapper.getWsxmLtkjHysqdByLisViBySLAVEWS(s);
            if(null !=awsList && !awsList.isEmpty()){
                log.info(awsList.toString());
                testMapper.delWsxmjg(s);
                log.info("删除外送项目成功");
                awsService.saveBatch(awsList);
                log.info("保存外送项目成功");
            }
            List<LtkjHysqd> hysqdList = testMapper.getCcXZxYyLtkjHysqdByLisVi(s);
            List<LtkjHysqd> wssq = testMapper.getWsxmLtkjHysqdByLisVi(s);
            if(null !=wssq && !wssq.isEmpty())hysqdList.addAll(wssq);
            if (null != hysqdList && !hysqdList.isEmpty()) {
                for (LtkjHysqd hysqd : hysqdList) {
                    LtkjHysqd jybgid = ltkjHysqdService.getLtkjHysqdByTjhAndTmh(hysqd.getTjh(), hysqd.getTmh());
                    if (null != jybgid) {
                        ltkjHysqdService.deletedLtkjHysqdByTjhAndTmh(hysqd.getTjh(), hysqd.getTmh());
                        ltkjHybgdService.deletedLtkjHybgdByTjhAndTmh(hysqd.getTmh());
                    }
                    if (ltkjHysqdService.save(hysqd)) {
                        List<LtkjHybgd> hybgdList = testMapper.getCcXZxYyLtkjHybgdByLisVi(hysqd.getTmh());
                        List<LtkjHybgd> wsbg = testMapper.getWsxmLtkjHybgdByLisVi(s);
                        if(null !=wsbg && !wsbg.isEmpty())hybgdList.addAll(wsbg);
                        ltkjHybgdService.saveBatch(hybgdList);
                    }
                }
                DynamicDataSourceContextHolder.clearDataSourceType();
            }
        } catch (Exception e) {
            log.info("同步检验数据失败");
//            throw new RuntimeException(e);
            log.error(String.valueOf(e));
        }
    }
    private void tbjiancha(String s) {
        try {
            List<LtkjExamJcsqd> jcsqdList = testMapper.getCcXZxYyPacsLtkjExamJcsqd(s);
            if (null != jcsqdList && !jcsqdList.isEmpty()) {
                DynamicDataSourceContextHolder.clearDataSourceType();
                jcsqdService.deletedLtkjJcsqdByTjhAndTmh(s);
                jcbgdService.deletedLtkjJcbgdByTjhAndTmh(s);
                jcsqdService.saveBatch(jcsqdList);
                List<LtkjExamJcbgd> jcbgdList = testMapper.getCcXZxYyPacsLtkjExamJcbgd(s);
                DynamicDataSourceContextHolder.clearDataSourceType();
                if (null != jcbgdList && !jcbgdList.isEmpty()) jcbgdService.saveBatch(jcbgdList);
                DynamicDataSourceContextHolder.clearDataSourceType();
            }
        } catch (Exception e) {
            log.info("同步检查数据失败");
//            throw new RuntimeException(e);
            log.error(String.valueOf(e));
        }
    }
    @GetMapping ("/zxsq")//执行
    @ApiOperation(value = "zxsq")
    public AjaxResult zx(@RequestParam int day) {
@@ -257,4 +374,5 @@
        }
        return AjaxResult.success();
    }
}
ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysLoginController.java
@@ -85,7 +85,6 @@
    @ApiOperation("登录接口")
    @RepeatSubmit
    public AjaxResult login(@RequestBody @ApiParam(value = "登录对象") LoginBody loginBody) {
        AjaxResult ajax = success();
        // 生成令牌
        String token;
ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysRoleController.java
@@ -1,30 +1,10 @@
package com.ltkj.web.controller.system;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import com.ltkj.db.DataSourceConfig;
import com.ltkj.db.DataSourceContextHolder;
import com.ltkj.hosp.domain.DictHosp;
import com.ltkj.hosp.service.IDictHospService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.FileCopyUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
@@ -75,13 +55,6 @@
    @Autowired
    private ISysDeptService deptService;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private IDictHospService dictHospService;
    @Value("${config.path}")
    private String path;
//    @PreAuthorize("@ss.hasPermi('system:role:list')")
    @GetMapping("/list")
@@ -272,59 +245,4 @@
        ajax.put("depts", deptService.selectDeptTreeList(new SysDept()));
        return ajax;
    }
    @Autowired
    private DataSourceConfig dataSourceConfig;
    /**
     * 从库批量执行sql
     * 读取本地sql文件
     * @return
     */
    @GetMapping("/execUpdateSql")
    public AjaxResult execUpdateSql() {
        DataSourceContextHolder.setDataSourceKey("default");
        List<DictHosp> list = dictHospService.list();
        List<Map<String, Object>> resultList = new ArrayList<>();
        boolean flag = false;
        for (DictHosp dictHosp : list) {
            String dbName = dictHosp.getDbname();
            Map<String, Object> dbResult = new HashMap<>();
            dbResult.put("database", dbName);
            List<String> successList = new ArrayList<>();
            List<String> errorList = new ArrayList<>();
            try {
                InputStreamReader reader = new InputStreamReader(Files.newInputStream(Paths.get(path + File.separator + "update.sql")), StandardCharsets.UTF_8);
                String sqlContent = FileCopyUtils.copyToString(reader);
                String[] sqlStatements = sqlContent.split("\\|-\\|");
                for (String sql : sqlStatements) {
                    sql = sql.trim();
                    if (!sql.isEmpty()) {
                        // INSERT INTO `api_config` (`id`, `api_url`, `api_method`, `tab_name`, `is_response`, `primary_keys`, `remark`, `result_code_key`, `result_data_key`, `type`) VALUES (${id}, '${dbName}', '${randowmStr}', '${randowmStr}', 1, 'ResultData', '1.pas 检查申请信息作废', 'ResultCode', 'ResultData', 'pacs');
//                        sql = sql.replace("${dbName}",dbName).replace("${id}", IdUtil.getSnowflake().nextIdStr()).replace("${randowmStr}", RandomUtil.randomString(10));
                        try {
                            dataSourceConfig.addDataSource(dbName);
                            DataSourceContextHolder.setDataSourceKey(dbName);
                            jdbcTemplate.execute(sql);
                            successList.add(sql);
                        } catch (Exception e) {
                            errorList.add(sql + "\nERROR: " + e.getMessage());
                        }
                    }
                }
            } catch (IOException e) {
                return AjaxResult.error("读取SQL文件失败:" + e.getMessage());
            }
            dbResult.put("successSQL", successList);
            dbResult.put("failedSQL", errorList);
            resultList.add(dbResult);
            if (!errorList.isEmpty())
                flag = true;
        }
        DataSourceContextHolder.clear();
        if (flag)
            return AjaxResult.error("执行sql中存在失败",resultList);
        return AjaxResult.success(resultList);
    }
}
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjCheckController.java
@@ -1711,9 +1711,9 @@
           return AjaxResult.success(maps);
        }else {
            List<Map<String, Object>> mapList = zongjianyishengchakanyichangxiangmu(tjNum);
            if(mapList.isEmpty()){
                return AjaxResult.error("暂无数据");
            }
//            if(mapList.isEmpty()){
//                return AjaxResult.success("暂无数据");
//            }
            return AjaxResult.success(mapList);
        }
@@ -1810,7 +1810,7 @@
                return AjaxResult.success();
            }
        }
        return AjaxResult.error();
        return AjaxResult.success();
    }
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjCustomerController.java
@@ -261,7 +261,7 @@
                    tjCustomer1.setGroupingId(tjReservation.getGroupingId());
//                    if(null !=tjReservation.getCompanyId())tjCustomer1.setDictCompId(Long.valueOf(tjReservation.getCompanyId()));
//                    if(null !=tjReservation.getCompany())tjCustomer1.setCompName(tjReservation.getCompany());
                    if(null !=tjReservation.getCompany())tjCustomer1.setCompName(tjReservation.getCompany());
//                    tjCustomerService.updateById(tjCustomer1);
@@ -291,8 +291,8 @@
                    tjCustomer.setCusPassword(substring);
                    tjCustomer.setTjType(tjReservation.getTjType());
                    tjCustomer.setPym(PinyinUtil.getFirstLetter(tjReservation.getName(),""));
//                    if(null !=tjReservation.getCompanyId())tjCustomer.setDictCompId(Long.valueOf(tjReservation.getCompanyId()));
//                    if(null !=tjReservation.getCompany())tjCustomer.setCompName(tjReservation.getCompany());
                    if(null !=tjReservation.getCompanyId())tjCustomer.setCompId(tjReservation.getCompanyId());
                    if(null !=tjReservation.getCompany())tjCustomer.setCompName(tjReservation.getCompany());
                    if (null != key && key.equals("Y")) {
                        AjaxResult result = controller.Outpincreateapply(tjCustomer);
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjOrderController.java
@@ -56,6 +56,7 @@
import com.ltkj.hosp.dto.UpdateTransitionnewPriceDto;
import com.ltkj.hosp.hisDto.OutpinimpapplyDto;
import com.ltkj.hosp.hisDto.OutpinmedicapplyDto;
import com.ltkj.hosp.mapper.TbTransitionMapper;
import com.ltkj.hosp.mapper.TestMapper;
import com.ltkj.hosp.mapper.TjSamplingMapper;
import com.ltkj.hosp.pacsDto.SavePacsApply;
@@ -89,6 +90,7 @@
import org.aspectj.weaver.ast.Var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.HttpRequest;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -236,6 +238,10 @@
    private ITjXdPictureService xdPictureService;
    @Autowired
    private TjOrderYcxmService ycxmService;
    @Autowired
    private TbTransitionMapper tbTransitionMapper;
    private static final String TJH = "tjhs:tjh";
    //将方法返回值解析成json格式
    public JSONObject getJSONObject(String builder) {
@@ -302,7 +308,7 @@
            wqq.like(TjCustomer::getCusName, name);
            List<TjCustomer> customerList = tjCustomerService.list(wqq);
            List<TjOrder> list2 = new ArrayList<>();
            if (null != customerList && customerList.size() > 0) {
            if (null != customerList && !customerList.isEmpty()) {
                List<TjOrder> list = new ArrayList<>();
                for (TjCustomer customer : customerList) {
                    LambdaQueryWrapper<TjOrder> wq = new LambdaQueryWrapper<>();
@@ -313,13 +319,13 @@
                    list.addAll(tjOrderService.list(wq));
                }
                List<TjOrder> collect = null;
                if (list.size() > 0) {
                if (!list.isEmpty()) {
                    for (TjOrder order : list) {
                        //筛选有调查问卷的
                        LambdaQueryWrapper<TjSurveyRecord> wqq1 = new LambdaQueryWrapper<>();
                        wqq1.eq(TjSurveyRecord::getTjnumber, order.getTjNumber());
                        List<TjSurveyRecord> one = surveyRecordService.list(wqq1);
                        if (one.size() == 0) {
                        if (one.isEmpty()) {
                            TjCustomer tjCustomer = tjCustomerService.getById(order.getUserId());
                            if (null != tjCustomer) {
                                order.setTjCustomerName(MatchUtils.hideCusName(tjCustomer.getCusName()));
@@ -380,7 +386,7 @@
                LambdaQueryWrapper<TjSurveyRecord> wqq = new LambdaQueryWrapper<>();
                wqq.eq(TjSurveyRecord::getTjnumber, order.getTjNumber());
                List<TjSurveyRecord> one = surveyRecordService.list(wqq);
                if (one.size() == 0) {
                if (one.isEmpty()) {
                    TjCustomer tjCustomer = tjCustomerService.getById(order.getUserId());
                    if (null != tjCustomer) {
                        order.setTjCustomerName(MatchUtils.hideCusName(tjCustomer.getCusName()));
@@ -1037,7 +1043,7 @@
                tjOrder.setTjType("2");
            }
        }
        if(StringUtil.isBlank(tjOrder.getFirmId())){
        if (StringUtil.isBlank(tjOrder.getFirmId())) {
            tjOrder.setFirmId("0");
        }
@@ -1096,8 +1102,8 @@
//        if(StringUtil.isNotBlank(makeLisTmhPrefix)) tjNumber=makeLisTmhPrefix+tjNumber;
        String tjNumber = (SecurityUtils.getUsername()+IdUtils.getTjNumber());
        if(StringUtil.isNotBlank(makeLisTmhPrefix)) tjNumber=makeLisTmhPrefix+tjNumber;
        String tjNumber = (SecurityUtils.getUsername() + idUtils.getTjNumber());
        if (StringUtil.isNotBlank(makeLisTmhPrefix)) tjNumber = makeLisTmhPrefix + tjNumber;
        tjOrder.setTjNumber(tjNumber);
@@ -1144,10 +1150,10 @@
            tjFlowingWater.setDiscount(discount.toString());
            BigDecimal subtract = paidIn.subtract(copeWith.multiply(discount.divide(BigDecimal.valueOf(10))));
            log.info("签到登记体检人: "+tjOrder.getTjNumber()+" 应付: "+copeWith);
            log.info("签到登记体检人: "+tjOrder.getTjNumber()+" 折扣: "+discount);
            log.info("签到登记体检人: "+tjOrder.getTjNumber()+" 实付: "+paidIn);
            log.info("签到登记体检人: "+tjOrder.getTjNumber()+" 相差: "+subtract);
            log.info("签到登记体检人: " + tjOrder.getTjNumber() + " 应付: " + copeWith);
            log.info("签到登记体检人: " + tjOrder.getTjNumber() + " 折扣: " + discount);
            log.info("签到登记体检人: " + tjOrder.getTjNumber() + " 实付: " + paidIn);
            log.info("签到登记体检人: " + tjOrder.getTjNumber() + " 相差: " + subtract);
            if (isPay.equals("true")) {
                if (null != mallOrder) {
@@ -1181,7 +1187,7 @@
            //修改每项的原价现价
//            transitionService.updateTbTransitionPriceByCusId(tjCustomer.getCusIdcard(), discount, tjOrder.getTjNumber());
            //修改临时表体检号
            transitionService.updateTbTransitionTjNumByCusId(tjCustomer.getCusIdcard(),tjOrder.getTjNumber());
            transitionService.updateTbTransitionTjNumByCusId(tjCustomer.getCusIdcard(), tjOrder.getTjNumber());
            //补差价
    /*        if(subtract.compareTo(BigDecimal.ZERO)>0){
                tjFlowingWater.setPaidIn(paidIn.add(subtract));
@@ -1352,7 +1358,7 @@
                List<TjOrderDetail> detailList = tjOrderDetailService.getCaiYangDengJi(tjOrder.getOrderId());
                addCaiYangDengJi(detailList, !detailList.isEmpty(), tjOrder, sysUser, null);
                return AjaxResult.success(tjNumber);
            }else {
            } else {
                newSaveextracted(tjOrder, tjCustomer, discount, sysUser, tjReservation, tjFlowingWater);
                AjaxResult error = isRequestCommonHisApi(tjOrder, tjCustomer, tjFlowingWater);
                if (error != null) return error;
@@ -1511,21 +1517,22 @@
            }
        }
        if (StrUtil.isNotBlank(jxbz)){
            tjSamplingMapper.updateUserIdByTjNumAndJxbz(order.getTjNumber(),sysUser.getNickName(), String.valueOf(sysUser.getUserId()),jxbz);
        }else {
            tjSamplingMapper.updateUserIdByTjNum(order.getTjNumber(),sysUser.getNickName(), String.valueOf(sysUser.getUserId()));
        if (StrUtil.isNotBlank(jxbz)) {
            tjSamplingMapper.updateUserIdByTjNumAndJxbz(order.getTjNumber(), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), jxbz);
        } else {
            tjSamplingMapper.updateUserIdByTjNum(order.getTjNumber(), sysUser.getNickName(), String.valueOf(sysUser.getUserId()));
        }
    }
    @PostMapping("/addPlOrderAndDetail")
    @ApiOperation(value = "体检批量签到登记接口")
    @Transactional  //(切换数据库出错,所以注释)
//    @Transactional  //(切换数据库出错,所以注释)
    public AjaxResult addPlOrderAndDetail(@RequestBody QianDaoDto daoDto, HttpServletResponse response) {
        SysUser sysUser = UserHoder.getLoginUser().getUser();
        List<String> cusIds = daoDto.getCusIds();
        ArrayList<String> tjNumbers = new ArrayList<>();
        ArrayList<String> errTjh = new ArrayList<>();
        if (null != cusIds && !cusIds.isEmpty()) {
            ExecutorService threadPools = Executors.newFixedThreadPool(cusIds.size());
            for (String cusId : cusIds) {
@@ -1554,6 +1561,7 @@
//                            }
//                        }
//                    });
                    Future<AjaxResult> future = executor.submit(new Callable<AjaxResult>() {
                        @Override
                        public AjaxResult call() throws Exception {
@@ -1562,61 +1570,106 @@
                    });
                    try {
                        AjaxResult result = future.get();
                        String tjNumber = result.get("tjNumber").toString();
                        tjNumbers.add(tjNumber);
                        String code = result.get("code").toString();
                        if (code.equals("200")) {
                            String tjNumber = result.get("tjNumber").toString();
                            tjNumbers.add(tjNumber);
                        }else {
                            String userId = result.get("userId").toString();
                            errTjh.add(userId);
                        }
                    } catch (InterruptedException | ExecutionException e) {
//                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                        e.printStackTrace();
                    }
                }
                threadPools.shutdown();
            }
        }
        // TODO 因为有体检号会查出空数据 先使用死数据
        tjNumbers = new ArrayList<>();
        tjNumbers.add("02095240229171627");
        tjNumbers.add("02095240229173104");
        tjNumbers.add("10001240524172002");
        tjNumbers.add("10001240304124410");
        tjNumbers.add("00325240304160123");
        tjNumbers.add("02095240304162044");
        tjNumbers.add("02095240304162152");
        tjNumbers.add("10001240304163505");
        Map<String, Object> map = null;
        try {
            map = PDFDocumentUtil.getDocument();
            Document document = (Document) map.get("document");
            for (int i = 0; i < tjNumbers.size(); i++) {
            // TODO 因为有体检号会查出空数据 先使用死数据  打印导诊单
            if (!tjNumbers.isEmpty()) {
            /*    Map<String, Object> map = null;
                try {
                    List<Map<String, String>> djdInfos = tjOrderService.selectDjdInfo(tjNumbers.get(i));
                    Map<String, Object> userInfo = tjOrderService.selectDjdUserInfo(tjNumbers.get(i));
                    LocalDateTime tjsj = (LocalDateTime) userInfo.get("tjsj");
                    DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
                    String time = null;
                    if (tjsj != null) {
                        time = dateFormat.format(tjsj);
                    map = PDFDocumentUtil.getDocument();
                    Document document = (Document) map.get("document");
//                    for (int i = 0; i < tjNumbers.size(); i++) {
                    int i = 0;
                    for (String tjNumber : tjNumbers) {
                        try {
                            List<Map<String, Object>> djdInfos = tjOrderService.selectDjdInfo(tjNumber);
                            Map<String, Object> userInfo = tjOrderService.selectDjdUserInfo(tjNumber);
                            if(null !=userInfo && null !=djdInfos && !djdInfos.isEmpty()){
                                LocalDateTime tjsj = (LocalDateTime) userInfo.get("tjsj");
                                DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
                                String time = null;
                                if (tjsj != null) {
                                    time = dateFormat.format(tjsj);
                                }
                                PDFDocumentUtil.makeUserInfoTable(document, (String) userInfo.get("tjname"), (String) userInfo.get("sex")
                                        , (String) userInfo.get("tjh"), (String) userInfo.get("lxdh"), (String) userInfo.get("tjname"), time);
                                PDFDocumentUtil.makeTjInfo(document, djdInfos);
                                // 多条则换页
                                if (i + 1 < tjNumbers.size()) {
                                    document.newPage();
                                }
                            }
                        } catch (DocumentException | IOException e) {
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                            //这里删除的是这个人所有项目包括补录项目
                            TjOrder order = tjOrderService.getOrderByTjNum(tjNumber);
                            tjOrderService.deleteTjOrderByOrderId(order.getOrderId());
                            tjOrderDetailService.deleteTjOrderDetailByOrderDetailId(String.valueOf(order.getOrderId()));
                            remarkService.deletedOrderRemarkByTjNum(tjNumber);
                            tjFlowingWaterService.deleteTjFlowingWaterByOrderId(String.valueOf(order.getOrderId()));
//                transitionService.deletedTbTransitionByTjNum(tjNum);
                            tjSamplingMapper.deleteByTjNumAndCusId(order.getTjNumber(), order.getUserId());
                            TjReservation reservation = tjReservationService.getById(order.getReservationId());
                            if(null !=reservation){
                                reservation.setIsExpire(2);
                                tjReservationService.updateById(reservation);
                                transitionService.updateTbTransitionByTjNum(tjNumber);
                            }
                            e.printStackTrace();
                        }
                    }
                    PDFDocumentUtil.makeUserInfoTable(document, (String) userInfo.get("tjname"), (String) userInfo.get("sex")
                            , (String) userInfo.get("tjh"), (String) userInfo.get("lxdh"), (String) userInfo.get("tjname"), time);
                    PDFDocumentUtil.makeTjInfo(document, djdInfos);
                    // 多条则换页
                    if (i + 1 < tjNumbers.size()) {
                        document.newPage();
                    }
                } catch (DocumentException | IOException e) {
//                    }
                    document.close();
                    ByteArrayOutputStream outputStream = (ByteArrayOutputStream) map.get("stream");
                    String encodeToString = java.util.Base64.getEncoder().encodeToString(outputStream.toByteArray());
                    return AjaxResult.success().put("file", encodeToString);
                } catch (IOException | DocumentException e) {
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    e.printStackTrace();
                }
                }*/
                Map<String,Object> map=new HashMap<>();
                map.put("tjh",tjNumbers);
                return AjaxResult.success("操作成功",map);
            }
            document.close();
            ByteArrayOutputStream outputStream = (ByteArrayOutputStream) map.get("stream");
            String encodeToString = java.util.Base64.getEncoder().encodeToString(outputStream.toByteArray());
            return AjaxResult.success().put("file", encodeToString);
        } catch (IOException | DocumentException e) {
            e.printStackTrace();
            if (!errTjh.isEmpty()){
                Map<String,Object> map=new HashMap<>();
                map.put("errtjh",errTjh);
                return AjaxResult.success("以上人员签到失败",map);
            }
            return AjaxResult.success();
        }
        return AjaxResult.success("操作成功");
//        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        return AjaxResult.error();
    }
    private void getAjaxResults(String cusIdcard) {
    @GetMapping("/signOrderInfo")
    public AjaxResult signOrderInfo(@RequestParam("tjNum") String tjNum){
        List<Map<String, Object>> djdInfos = tjOrderService.selectDjdInfo(tjNum);
        Map<String, Object> userInfo = tjOrderService.selectDjdUserInfo(tjNum);
        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("djd",djdInfos);
        hashMap.put("user",userInfo);
        return AjaxResult.success(hashMap);
    }
    @Transactional
    public void getAjaxResults(String cusIdcard) {
        if (!"".equals(cusIdcard) && cusIdcard != null) {
            //根据配置调取存储过程 将临时表数据存入预约表2023.12.12
            final String getInfoFromSqlData = configService.selectConfigByKey("getInfoFromSqlData");
@@ -1750,25 +1803,13 @@
        DynamicDataSourceContextHolder.clearDataSourceType();
    }
    private AjaxResult getAjaxResult(Long userId, SysUser sysUser, String tjCategory) throws IOException {
    @Transactional
    public AjaxResult getAjaxResult(Long userId, SysUser sysUser, String tjCategory) throws IOException {
        LambdaQueryWrapper<TjCustomer> wq = new LambdaQueryWrapper<>();
        wq.eq(TjCustomer::getCusId, userId);
        TjCustomer tjCustomer = tjCustomerService.getOne(wq);
        if (tjCustomer == null) return AjaxResult.error("该客户未登记或不存在");
//        LambdaQueryWrapper<TjOrder> wqq = new LambdaQueryWrapper<>();
//        wqq.eq(TjOrder::getUserId, userId);
//        wqq.eq(TjOrder::getCheckStatus, 0);
//        wqq.isNull(TjOrder::getFinishTime);
//        if (!tjCustomer.getCardId().equals("0")) {
//            wqq.eq(TjOrder::getCardId, tjCustomer.getCardId());
//        }
//        TjOrder order = tjOrderService.getOne(wqq);
//        if (null != order) {
//            transitionService.deletedTbTransitionListByCusIdAndTjNum(tjCustomer.getCusIdcard(), tjCustomer.getCardId());
//            return AjaxResult.error("不可重复登记");
//        }
        TjOrder tjOrder = new TjOrder();
        Date date = new Date();
        tjOrder.setCreateTime(date);
@@ -1785,16 +1826,17 @@
        if (tjReservation != null) {
            tjOrder.setReservationId(tjReservation.getId());
            mallOrder = mallOrderService.getOne(new LambdaQueryWrapper<MallOrder>().eq(MallOrder::getReservationId, tjReservation.getId()));
            if (DateUtil.endOfDay(new Date()).before(tjReservation.getReservationTime())) {
                return AjaxResult.error("未到预约时间");
            }
            if (DateUtil.endOfDay(tjReservation.getReservationTime()).before(new Date())) {
                tjReservation.setIsExpire(1);
                tjReservationService.updateById(tjReservation);
                return AjaxResult.error("对不起您的预约已超时请重新预约");
            }
//            if (DateUtil.endOfDay(new Date()).before(tjReservation.getReservationTime())) {
//                return AjaxResult.error("未到预约时间");
//            }
//            if (DateUtil.endOfDay(tjReservation.getReservationTime()).before(new Date())) {
//                tjReservation.setIsExpire(1);
//                tjReservationService.updateById(tjReservation);
//                return AjaxResult.error("对不起您的预约已超时请重新预约");
//            }
            if (null != tjReservation.getTeamNo()) tjOrder.setTeamNo(tjReservation.getTeamNo());
            if (null != tjReservation.getCompanyId()) tjOrder.setFirmId(tjReservation.getCompanyId());
            if (null != tjReservation.getCompany()) tjOrder.setFirmName(tjReservation.getCompany());
            if (null != tjReservation.getDepartment()) tjOrder.setFirmDeptName(tjReservation.getDepartment());
            if (null != tjReservation.getJobNo()) tjOrder.setFirmWorkId(tjReservation.getJobNo());
            if (null != tjReservation.getPacId()) tjOrder.setPacId(tjReservation.getPacId());
@@ -1805,12 +1847,46 @@
            }
            tjReservation.setIsExpire(1);
            tjReservationService.updateById(tjReservation);
            if (null != tjReservation.getTeamNo()) {
                tjOrder.setTjType("1");
            } else{
                tjOrder.setTjType("2");
            }
        if (StringUtil.isBlank(tjOrder.getFirmId())) {
            tjOrder.setFirmId("0");
        }
//
//            tjReservation.setIsExpire(1);
//            tjReservationService.updateById(tjReservation);
            //生成体检号
            String tjNumber = (sysUser.getUserName() + new SimpleDateFormat("yyMMddHHmmss").format(new Date()));
//            String tjNumber = (sysUser.getUserName() + new SimpleDateFormat("yyMMddHHmmss").format(new Date()));
//            tjNumber = tjNumber.replaceAll(".{6}$", userId.toString().substring(userId.toString().length() - 6));
            tjNumber = tjNumber.replaceAll(".{4}$", userId.toString().substring(userId.toString().length() - 4));
            //获取拼接前缀
            String makeLisTmhPrefix = configService.selectConfigByKey("make_lis_tmh_prefix");
            String tjNumber = (sysUser.getUserName() + idUtils.getTjNumber());
            if (StringUtil.isNotBlank(makeLisTmhPrefix)) tjNumber = makeLisTmhPrefix + tjNumber;
//            if (redisCache.hasKey(TJH)) {
//                while (true){
//                    List<String> tjh = redisCache.getCacheList(TJH);
//                    if(tjh.contains(tjNumber)){
//                        tjNumber =(sysUser.getUserName() + IdUtils.getTjNumber());
//                        if (StringUtil.isNotBlank(makeLisTmhPrefix)) tjNumber = makeLisTmhPrefix + tjNumber;
//                    }else {
//                        tjh.add(tjNumber);
//                    }
//                }
//            }else {
//                List<String> stringList = tjOrderService.
//                        list(new LambdaQueryWrapper<TjOrder>().select(TjOrder::getTjNumber)).stream().map(TjOrder::getTjNumber).collect(Collectors.toList());
//                stringList.add(tjNumber);
//                redisCache.setCacheList(TJH,stringList);
//            }
            tjOrder.setTjNumber(tjNumber);
            if (null != tjOrder.getPhoto()) {
                File file = new File(tjOrder.getPhoto());
@@ -1851,6 +1927,21 @@
                tjCustomer.setCusNumber(cusNumber);
//            BigDecimal discount = BigDecimal.valueOf(Double.parseDouble(tjOrder.getTjFlowingWater().getDiscount())).divide(BigDecimal.valueOf(10));
                TjFlowingWater tjFlowingWater = new TjFlowingWater();
                tjFlowingWater.setCreateTime(date);
                tjFlowingWater.setCreateTime(date);
                tjFlowingWater.setUpdateTime(date);
                tjFlowingWater.setCreateBy(sysUser.getNickName());
                tjFlowingWater.setUpdateBy(sysUser.getNickName());
//                BigDecimal bigDecimal = tbTransitionMapper.sumTbTransitionOrdPriceByTjNum(tjOrder.getTjNumber());
                BigDecimal bigDecimal = tbTransitionMapper.sumTbTransitionOrdPriceByTjNumIsNull(tjCustomer.getCusIdcard());
                tjFlowingWater.setCopeWith(bigDecimal);
//                BigDecimal bigDecimal1 = tbTransitionMapper.sumTbTransitionNowPriceByTjNum(tjOrder.getTjNumber());
                BigDecimal bigDecimal1 = tbTransitionMapper.sumTbTransitionNowPriceByTjNumIsNull(tjCustomer.getCusIdcard());
                tjFlowingWater.setPaidIn(bigDecimal1);
                tjFlowingWater.setDiscount(String.valueOf(10));
                tjFlowingWater.setPayStasus(1L);
                tjFlowingWater.setPayType(3L);
                tjFlowingWater.setPayStasus(0L);
                if ("1".equals(tjOrder.getTjType())) {
                    if (tjReservation.getPayType() == 1) {
@@ -1899,18 +1990,38 @@
                if (tjFlowingWaterService.save(tjFlowingWater)) {
                    tjOrder.setTjSerialNumber(String.valueOf(tjFlowingWater.getTjSerialNumber()));
                    tjOrderService.updateById(tjOrder);
                }
                asyncService.ttextracted(tjOrder, tjCustomer, sysUser, tjReservation, tjFlowingWater);
                transitionService.updateTbTransitionTjNumByCusId(tjCustomer.getCusIdcard(), tjOrder.getTjNumber());
                tjCustomer.setCardId(tjOrder.getTjNumber());
                tjCustomerService.updateById(tjCustomer);
                transitionService.updateCardIdByTjNumAndIdCard(tjCustomer.getCusIdcard(), tjOrder.getTjNumber(), tjOrder.getTjNumber());
                tjOrder.setCardId(tjOrder.getTjNumber());
                tjOrderService.updateById(tjOrder);
//                asyncService.ttextracted(tjOrder, tjCustomer, sysUser, tjReservation, tjFlowingWater);
                if (lisApiMethod.isUseLisAndPacsRegister(tjOrder)) {
                    // 这是上面个人方法引入数据
                    tjFlowingWater.setPayStasus(1L);
                    tjOrder.setTjFlowingWater(tjFlowingWater);
                    newSaveextracted(tjOrder, tjCustomer, BigDecimal.valueOf(10), sysUser, tjReservation, tjFlowingWater);
                    tjOrderDetailService.updateTjOrderDetailsByOrderId(String.valueOf(tjOrder.getOrderId()),
                            sysUser.getNickName(), String.valueOf(sysUser.getUserId()), String.valueOf(tjFlowingWater.getTjSerialNumber()));
                    remarkService.updateTjOrderRemarkSfbzByJxbzisnull(tjOrder.getOrderId().toString(), tjFlowingWater.getTjSerialNumber().toString());
                    List<TjXdPicture> xdPictureList = xdPictureService.saveTjXdPicture(tjOrder.getTjNumber());
                    xdPictureService.saveBatch(xdPictureList);
                    List<TjOrderDetail> detailList = tjOrderDetailService.getCaiYangDengJi(tjOrder.getOrderId());
                    addCaiYangDengJi(detailList, !detailList.isEmpty(), tjOrder, sysUser, null);
//                    return AjaxResult.success(tjNumber);
                }
                tjCustomer.setCardId("0");
                tjCustomerService.updateById(tjCustomer);
                return AjaxResult.success().put("tjNumber", tjNumber);
            }
        }
        return AjaxResult.error();
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        return AjaxResult.error().put("userId",userId);
    }
@@ -2000,10 +2111,10 @@
                    transitionService.saveRedisTransitionByPacId(cusId, cardId, pacId);
                    //补差价
                    List<Map<String,Object>> cjMaps = groupingProService.huoquxiangmuchajia(pacId.toString(), cusId);
                    if(null !=cjMaps && !cjMaps.isEmpty()){
                    List<Map<String, Object>> cjMaps = groupingProService.huoquxiangmuchajia(pacId.toString(), cusId);
                    if (null != cjMaps && !cjMaps.isEmpty()) {
                        for (Map<String, Object> cjMap : cjMaps) {
                            transitionService.buxiangmuchajia(cusId,pacId.toString(),cjMap.get("xmid").toString(),new BigDecimal(cjMap.get("cj").toString()));
                            transitionService.buxiangmuchajia(cusId, pacId.toString(), cjMap.get("xmid").toString(), new BigDecimal(cjMap.get("cj").toString()));
                        }
                    }
@@ -3217,7 +3328,7 @@
            for (int i = 0; i < tjNumbers.size(); i++) {
                String tjNumber = tjNumbers.get(i).getTjNumber();
                try {
                    List<Map<String, String>> djdInfos = tjOrderService.selectDjdInfo(tjNumber);
                    List<Map<String, Object>> djdInfos = tjOrderService.selectDjdInfo(tjNumber);
                    Map<String, Object> userInfo = tjOrderService.selectDjdUserInfo(tjNumber);
                    LocalDateTime tjsj = (LocalDateTime) userInfo.get("tjsj");
                    DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
@@ -3511,7 +3622,7 @@
                log.info("退费申请 入参 -> {}", JSONUtil.toJsonStr(map));
                String post = HttpClientUtils.sendPost(apiUrl + "/api/his/" + hospbm + "/creatCostInfo", map);
                log.info("退费申请 返回 -> {}", JSONUtil.toJsonStr(post));
                if(null !=post){
                if (null != post) {
                    JSONObject jsonObject = JSONUtil.parseObj(post);
                    if (jsonObject.getStr("code").equals("200")) {
                        // hisTfWaterId
@@ -3701,7 +3812,7 @@
                    }
                }
            }
            if(!list.isEmpty()) {
            if (!list.isEmpty()) {
                int i = tjReportService.deleteTjReportByReIds(list.toArray(new Long[]{}));
                if (i == 0) {
                    return AjaxResult.error("撤回失败!");
@@ -3757,14 +3868,14 @@
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    return AjaxResult.error("操作失败! 以下项目已存在: " + string);
                }
                transitionService.ttsaveTemoTransitionByGroupingId(cusId, cardId, pacId.toString()) ;
                    //补差价
                    List<Map<String,Object>> cjMaps = groupingProService.huoquxiangmuchajia(pacId.toString(), cusId);
                    if(null !=cjMaps && !cjMaps.isEmpty()){
                        for (Map<String, Object> cjMap : cjMaps) {
                            transitionService.buxiangmuchajia(cusId,pacId.toString(),cjMap.get("xmid").toString(),new BigDecimal(cjMap.get("cj").toString()));
                        }
                transitionService.ttsaveTemoTransitionByGroupingId(cusId, cardId, pacId.toString());
                //补差价
                List<Map<String, Object>> cjMaps = groupingProService.huoquxiangmuchajia(pacId.toString(), cusId);
                if (null != cjMaps && !cjMaps.isEmpty()) {
                    for (Map<String, Object> cjMap : cjMaps) {
                        transitionService.buxiangmuchajia(cusId, pacId.toString(), cjMap.get("xmid").toString(), new BigDecimal(cjMap.get("cj").toString()));
                    }
                }
            }
        }
@@ -3799,7 +3910,7 @@
//                }
//            }
//        }
        List<TbTransition> list= transitionService.newgetTransitionList(cusId);
        List<TbTransition> list = transitionService.newgetTransitionList(cusId);
        return AjaxResult.success(list);
    }
@@ -3808,30 +3919,30 @@
    @Transactional
    public AjaxResult updateTransitionnewPrice(@RequestBody List<UpdateTransitionnewPriceDto> dtos) {
        if(null !=dtos && !dtos.isEmpty()){
        if (null != dtos && !dtos.isEmpty()) {
            for (UpdateTransitionnewPriceDto dto : dtos) {
                LambdaQueryWrapper<TbTransition> wq=new LambdaQueryWrapper<>();
                wq.eq(TbTransition::getCusId,dto.getCusIdCard());
                wq.eq(TbTransition::getParentProId,dto.getParentProId());
                LambdaQueryWrapper<TbTransition> wq = new LambdaQueryWrapper<>();
                wq.eq(TbTransition::getCusId, dto.getCusIdCard());
                wq.eq(TbTransition::getParentProId, dto.getParentProId());
                wq.isNull(TbTransition::getTjNum);
                List<TbTransition> list = transitionService.list(wq);
                log.info("修改的客户身份证号为: "+dto.getCusIdCard());
                log.info("父项目id为: "+dto.getParentProId());
                log.info("折扣为: "+new BigDecimal(dto.getDiscount()));
                if(null !=list && !list.isEmpty()){
                    BigDecimal dxzj = transitionService.getTbTransitionPriceAndOrdPrice(dto.getCusIdCard(),dto.getParentProId());
                log.info("修改的客户身份证号为: " + dto.getCusIdCard());
                log.info("父项目id为: " + dto.getParentProId());
                log.info("折扣为: " + new BigDecimal(dto.getDiscount()));
                if (null != list && !list.isEmpty()) {
                    BigDecimal dxzj = transitionService.getTbTransitionPriceAndOrdPrice(dto.getCusIdCard(), dto.getParentProId());
                    for (TbTransition transition : list) {
                        BigDecimal ordPrice = transition.getOrdPrice();
                        BigDecimal multiply = ordPrice.multiply((new BigDecimal(dto.getDiscount()).divide(BigDecimal.valueOf(10))));
                        log.info("后端计算的金额: "+multiply);
                        log.info("后端计算的金额: " + multiply);
                        transition.setNowPrice(multiply);
                        transition.setDiscount(new BigDecimal(dto.getDiscount()));
                        transitionService.updateById(transition);
                    }
                    if(null !=dto.getYhj() && dto.getYhj().compareTo(BigDecimal.ZERO)>=0){
                    if (null != dto.getYhj() && dto.getYhj().compareTo(BigDecimal.ZERO) >= 0) {
                        List<TbTransition> transitionList = list.stream().filter(a ->
                                transitionService.getTbTransitionPriceAndOrdPrice(dto.getCusIdCard(),dto.getParentProId()).subtract(dto.getYhj()).compareTo(BigDecimal.ZERO) >= 0).collect(Collectors.toList());
                        if(!transitionList.isEmpty()){
                                transitionService.getTbTransitionPriceAndOrdPrice(dto.getCusIdCard(), dto.getParentProId()).subtract(dto.getYhj()).compareTo(BigDecimal.ZERO) >= 0).collect(Collectors.toList());
                        if (!transitionList.isEmpty()) {
                            TbTransition tbTransition = transitionList.get(0);
                            tbTransition.setNowPrice(dxzj);
                            transitionService.updateById(tbTransition);
@@ -3844,5 +3955,37 @@
    }
    @PostMapping("/huifuyuyuejilu")
    @ApiOperation(value = "体检记录页面恢复预约记录接口")
    @Transactional
    public AjaxResult huifuyuyuejilu(@RequestBody List<String> tjNUms) {
        if (null != tjNUms && !tjNUms.isEmpty()) {
            for (String tjNUm : tjNUms) {
                TjOrder order = tjOrderService.getOrderByTjNum(tjNUm);
                if(null !=order && StringUtil.isNotBlank(order.getReservationId())){
                    //这里删除的是这个人所有项目包括补录项目
                    tjOrderService.deleteTjOrderByOrderId(order.getOrderId());
                    tjOrderDetailService.deleteTjOrderDetailByOrderDetailId(String.valueOf(order.getOrderId()));
                    remarkService.deletedOrderRemarkByTjNum(tjNUm);
                    tjFlowingWaterService.deleteTjFlowingWaterByOrderId(String.valueOf(order.getOrderId()));
//                transitionService.deletedTbTransitionByTjNum(tjNum);
                    tjSamplingMapper.deleteByTjNumAndCusId(order.getTjNumber(), order.getUserId());
                    TjReservation reservation = tjReservationService.getById(order.getReservationId());
                    if(null !=reservation){
                        reservation.setIsExpire(2);
                        tjReservationService.updateById(reservation);
                        transitionService.updateTbTransitionByTjNum(tjNUm);
                    }
                }
            }
            return AjaxResult.success();
        }
        return AjaxResult.error();
    }
}
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjReportController.java
@@ -39,6 +39,7 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import jodd.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.annotation.Autowired;
@@ -114,18 +115,21 @@
    public AjaxResult savePdf() {
        //从文件地址读入PDF文件  仅存储一次
        String base64String = PDFBinaryUtil.getPDFBinary(configService.selectConfigByKey("default_pdf5Template"));
        reportTemplateService.remove(new LambdaQueryWrapper<TjReportTemplate>().eq(TjReportTemplate::getName,"体检报告模板5"));
        TjReportTemplate tem = new TjReportTemplate();
        tem.setName("体检报告模板5");
        tem.setRemark("体检报告模板5");
        tem.setTemplate(base64String);
        tem.setFlag("1");
        tem.setOpen("0");
        tem.setCreateTime(DateUtil.date());
        final boolean save = reportTemplateService.save(tem);
        if (save) {
            return AjaxResult.success("保存成功");
        if(StringUtil.isNotBlank(base64String)){
            reportTemplateService.remove(new LambdaQueryWrapper<TjReportTemplate>().eq(TjReportTemplate::getName,"体检报告模板5"));
            TjReportTemplate tem = new TjReportTemplate();
            tem.setName("体检报告模板5");
            tem.setRemark("体检报告模板5");
            tem.setTemplate(base64String);
            tem.setFlag("1");
            tem.setOpen("0");
            tem.setCreateTime(DateUtil.date());
            final boolean save = reportTemplateService.save(tem);
            if (save) {
                return AjaxResult.success("保存成功");
            }
        }
        return AjaxResult.success("保存失败");
//        String base64String2 = PDFBinaryUtil.getPDFBinary("D:\\Tjreport\\心电图1.pdf");
//        TjReport tem2 = new TjReport();
@@ -1711,7 +1715,7 @@
        we.eq(TjReport::getType, "体检报告");
        TjReport one = tjReportService.getOne(we);
        if (one == null) {
            return AjaxResult.error("暂无体检报告");
            return AjaxResult.error("暂无体检报告,请撤回到总检未审核页面,需总检医生重新审核并生成报告!");
        }
        if ("pdf".equals(one.getPrint())) {
            res.put("flag", "0");
@@ -1721,7 +1725,7 @@
            res.put("url", one.getPath());
            return AjaxResult.success(res);
        } else {
            return AjaxResult.error("暂无体检报告");
            return AjaxResult.error("暂无体检报告,请撤回到总检未审核页面,需总检医生重新审核并生成报告!");
        }
    }
@@ -2146,7 +2150,7 @@
            // 不在使用逻辑删除 逻辑删除导致打印报告生成 查询sql缓慢
            int i = tjReportService.deleteTjReportByReId(tjReport.getReId());
            if (i == 0) {
                return AjaxResult.error("撤回失败!");
                return AjaxResult.error("暂无体检报告,请撤回到总检未审核页面,需总检医生重新审核并生成报告!");
            }
        }
@@ -2169,11 +2173,10 @@
            one.setPrintLastTime(null);
            one.setDownloadLastTime(null);
            if (tjOrderService.updateById(one)) {
//                ycxmService.delOrderYcXmJyByTjh(tjNumber);
                return AjaxResult.success("撤回成功!");
            }
        }
        return AjaxResult.error("撤回失败!");
        return AjaxResult.error("该人员体检记录不存在,请核实人员信息!");
    }
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjSamplingController.java
@@ -221,6 +221,7 @@
    public AjaxResult getCusList(@RequestParam(defaultValue = "1") @ApiParam(value = "0是1否") Integer isSignFor,
                                 @RequestParam(required = false) @ApiParam(value = "体检号") String tjNum,
                                 @RequestParam(required = false) @ApiParam(value = "客户姓名") String name,
                                 @RequestParam(required = false) @ApiParam(value = "单位") String dw,
                                 @ApiParam(value = "页码数(默认1)") @RequestParam(defaultValue = "1") Integer pageNum,
                                 @ApiParam(value = "显示条数(默认10)") @RequestParam(defaultValue = "10") Integer pageSize,
                                 @ApiParam(value = "开始时间") @RequestParam(required = false) String beginTime,
@@ -234,6 +235,17 @@
            wrapper.like(TjSampling::getCusName, name);
        if (null != beginTime && null != endTime && StrUtil.isNotBlank(beginTime) && StrUtil.isNotBlank(endTime))
            wrapper.between(TjSampling::getApplicationTime, beginTime, endTime);
        if (StrUtil.isNotBlank(dw)){
            LambdaQueryWrapper<TjOrder> wqq=new LambdaQueryWrapper<>();
            wqq.like(TjOrder::getFirmId,dw);
            wqq.select(TjOrder::getTjNumber);
            List<TjOrder> orderList = orderService.list(wqq);
            if(null !=orderList && !orderList.isEmpty()){
                List<String> list = orderList.stream().map(TjOrder::getTjNumber).collect(Collectors.toList());
                wrapper.in(TjSampling::getTjNum, list);
            }
        }
        wrapper.groupBy(TjSampling::getCusId);
        wrapper.orderByDesc(TjSampling::getCreateTime);
//        wrapper.last("LIMIT " + (pageNum - 1) * pageSize + "," + pageSize);
@@ -243,6 +255,8 @@
        for (TjSampling tjSampling : list) {
            TjCustomer customer = customerService.getById(tjSampling.getCusId());
            if(null !=customer){
                TjOrder order = orderService.getOrderByTjNum(tjSampling.getTjNum());
                customer.setCompName(order.getFirmName());
                customer.setCusName(customer.getCusName());
                customer.setCusPhone(MatchUtils.hidePhoneNum(customer.getCusPhone()));
                customer.setCusIdcard(MatchUtils.hideIdCardNum(customer.getCusIdcard()));
@@ -364,7 +378,7 @@
        if (list.size() >= 2) {
            // 进行合并
            List<String> stringList = list.stream().map(TjSampling::getId).collect(Collectors.toList());
            log.info("提取id ->{}",stringList);
//            log.info("提取id ->{}",stringList);
            for (String s : stringList) {
                if (tjSamplingService.isMergeItem(s) != 0) {
                    list.removeIf(item -> Objects.equals(item.getId(), s));
ltkj-admin/src/main/resources/application-dev.yml
@@ -21,7 +21,7 @@
# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 5000
  port: 5011
  servlet:
    # 应用的访问路径
    context-path: /
@@ -147,7 +147,7 @@
  # 是否允许账户多终端同时登录(true允许 false不允许)
  soloLogin: true
  #是否开启登录时判断商户秘钥是否过期
  secret_key_login: false
  secret_key_login: true
# MyBatis Plus配置
mybatis-plus:
@@ -251,7 +251,7 @@
#  username = root
#  password = Root_ltkj123
config:
  properties: D:\ltkjprojectconf\configregion.properties
  properties: D:\ltkjprojectconf\config.properties
  path: D:\ltkjprojectconf
logging:
  level:
ltkj-admin/src/main/resources/application-linux-dev.yaml
New file
@@ -0,0 +1,252 @@
# 项目相关配置
ltkj:
  # 名称
  name: ltkj
  # 版本
  version: 1.0.1
  # 版权年份
  copyrightYear: 2022
  # 实例演示开关
  demoEnabled: true
  # 文件路径 示例( Windows配置D:/ltkj/uploadPath,Linux配置 /home/ltkj/uploadPath)
  # 用户换头像后的图片存储地址  测试:D:\ltkj\uploadPath\avatar\2022\12\14
  #profile: D:/ltkj/uploadPath
  #  profile: https://ltpeis.xaltjdkj.cn:5502/uploadPath
  profile: http://192.168.0.5:5502/uploadPath
  # 获取ip地址开关
  addressEnabled: true
  # 验证码类型 math 数组计算 char 字符验证
  captchaType: math
# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 5011
  tomcat:
    # tomcat的URI编码
    uri-encoding: UTF-8
    # 连接数满后的排队数,默认为100
    accept-count: 1000
    threads:
      # tomcat最大线程数,默认为200
      max: 800
      # Tomcat启动初始化的线程数,默认值10
      min-spare: 100
# 日志配置
#logging:
#  level:
#    com.ltkj: debug
#    org.springframework: warn
# 用户配置
user:
  password:
    # 密码最大错误次数
    maxRetryCount: 5
    # 密码锁定时间(默认10分钟)
    lockTime: 10
# Spring配置
spring:
  # 资源信息
  messages:
    # 国际化资源文件路径
    basename: i18n/messages
  # 文件上传
  servlet:
    multipart:
      # 单个文件大小
      max-file-size: 2GB
      # 设置总上传的文件大小
      max-request-size: 2GB
  # 服务模块
  devtools:
    restart:
      # 热部署开关
      enabled: true
  cache:
    type: redis
  # redis 配置
  #  redis:
  #    # 地址
  ##    host: 101.42.27.146
  #    host: localhost
  #    # 端口,默认为6379
  #    port: 6379
  #    # 数据库索引
  #    database: 0
  #    # 密码
  ##    password: 654321
  #    password: 123456
  #    # 连接超时时间
  #    timeout: 120s
  #    lettuce:
  #      pool:
  #        # 连接池中的最小空闲连接
  #        min-idle: 0
  #        # 连接池中的最大空闲连接
  #        max-idle: 8
  #        # 连接池的最大数据库连接数
  #        max-active: 8
  #        # #连接池最大阻塞等待时间(使用负值表示没有限制)
  #        max-wait: -1ms
  # 邮件
  mail:
    # from 要和 username 一致, 否则报错
    from: 1138758025@qq.com
    # 邮件服务地址
    host: smtp.qq.com
    # 用户名
    username: 1138758025@qq.com
    # 授权码 (设置 - 账户 - POP3/SMTP服务)
    password: lwsbmlbqgpaqfgdb
    # QQ邮箱加密端口,不同邮箱的端口不一样
    port: 465
    properties:
      mail:
        smtp:
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory
          ssl:
            trust: smtp.qq.com
          # 是否需要用户认证
          auth: true
          starttls:
            # 启用TLS加密
            enable: true
            required: true
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        login-username: 10001
        login-password: admin123
        reset-enable: true
        allow:
      filters: stat,wall,log4j  # 启用日志和监控过滤器
      stat:
        mergeSql: true  # 合并SQL统计信息
        slowSqlMillis: 3000  # 配置 SQL 慢查询阈值,单位是毫秒,3秒即 3000ms
# token配置
token:
  # 令牌自定义标识
  header: Authorization
  # 令牌密钥
  secret: xaltjdkjyxgs_sjh&1987
  secret_key: ltkj_xaltjdkjsjh
  # 令牌有效期(默认30分钟)
  expireTime: 180
  # 是否允许账户多终端同时登录(true允许 false不允许)
  soloLogin: true
  #是否开启登录时判断商户秘钥是否过期
  secret_key_login: true
# MyBatis Plus配置
mybatis-plus:
  # 搜索指定包别名
  typeAliasesPackage: com.ltkj.**.domain
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  # 加载全局的配置文件
  configLocation: classpath:mybatis/mybatis-config.xml
  global-config:
    db-config:
      logic-not-delete-value: 0
      logic-delete-value: 1
      update-strategy: not_null
# PageHelper分页插件
pagehelper:
  helperDialect: mysql
  supportMethodsArguments: true
  params: count=countSql
# Swagger配置
swagger:
  # 是否开启swagger
  enabled: true
  # 请求前缀
  pathMapping: /
# 防止XSS攻击
xss:
  # 过滤开关
  enabled: true
  # 排除链接(多个用逗号分隔)
  excludes: /system/notice,/system/package
  # 匹配链接
  urlPatterns: /system/*,/monitor/*,/tool/*
#  体检报告模板和报告临时生成存储的文件夹路径
path:
  filePath: /Users/chacca/开发相关/代码/Tjreport
  # nginx图片服务器
  reportServer: https://ltpeis.xaltjdkj.cn:5516/
#  体检套餐和轮播图存储路径
photoPath: /ltkj/uploadPath/
# nginx图片服务器
#photoServer: https://ltpeis.xaltjdkj.cn:5502/uploadPath/
photoServer: http://192.168.0.5:5502/uploadPath/
# 微信小程序appid secret
xcx:
  appid: wx40a545f1a8eb1d9d
  secret: c86c1ff7f91c16380111878e9a259237
  msgDataFormat: JSON
  token: token # 微信小程序消息服务器配置的token
  aesKey: aesKey # 微信小程序消息服务器配置的EncodingAESKey
# 开发者应该设置成自己的wx相关信息
wx:
  # 小程序
  miniapp:
    appid: wx40a545f1a8eb1d9d
    secret: c86c1ff7f91c16380111878e9a259237
    msg-data-format: XML
  pay:
    #appid
    app-id: wx40a545f1a8eb1d9d
    mch-id: 1642930999   #商户号
    mch-key: Xianlutaikeji666888999shijihongL   #密钥
    #key-path: E:\mycode\apppwd\1643225121_20230427_cert\apiclient_cert.p12  #本地证书路径,在微信商户后台下载
    key-path: D:\WXCertUtil\tjcert\apiclient_cert.p12  #服务器证书路径,在微信商户后台下载
    #    pay-score-notify-url: http://192.168.0.101:5011/cus/order/pay-notify   #微信支付回调地址
    #    pay-score-notify-url: https://ltpeis.xaltjdkj.cn:5011/ltkj-admin/cus/order/pay-notify   #微信支付回调地址
    pay-score-notify-url: https://ltpeis.xaltjdkj.cn:5021/ltkj-admin/cus/order/pay-notify   #微信支付回调地址
#积木报表访问地址
jimu:
  #  path: https://ltpeis.xaltjdkj.cn:5011/ltkj-admin
  #  path: https://ltpeis.xaltjdkj.cn:5021/ltkj-admin
  path: http://192.168.0.5:5000/ltkj-admin
#   path: http://10.168.0.9:5011
#   path: http://192.168.0.105:5011
#  path: http://192.168.1.113:5011
jeecg :
  jmreport:
    # 打印纸张配置 title描述 size宽高
    printPaper:
      - title: 小票打印
        size:
          - 40
          - 60
#  ip = 101.42.27.146
#  prot = 3306
#  name = ltkjpeis10
#  username = root
#  password = Root_ltkj123
config:
  properties: /Users/chacca/开发相关/代码/ltkjprojectconf/gspljcxyyconfig.properties
  path: /Users/chacca/开发相关/代码/ltkjprojectconf
ltkj-admin/src/main/resources/application-linux-mjprod.yml
New file
@@ -0,0 +1,255 @@
# 项目相关配置
ltkj:
  # 名称
  name: ltkj
  # 版本
  version: 1.0.1
  # 版权年份
  copyrightYear: 2022
  # 实例演示开关
  demoEnabled: true
  # 文件路径 示例( Windows配置D:/ltkj/uploadPath,Linux配置 /home/ltkj/uploadPath)
  # 用户换头像后的图片存储地址  测试:D:\ltkj\uploadPath\avatar\2022\12\14
  #profile: D:/ltkj/uploadPath
  #  profile: https://ltpeis.xaltjdkj.cn:5502/uploadPath
  profile: http://192.168.0.5:5502/uploadPath
  # 获取ip地址开关
  addressEnabled: true
  # 验证码类型 math 数组计算 char 字符验证
  captchaType: math
# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 5003
  servlet:
    # 应用的访问路径
    context-path: /ltkj-admin
  tomcat:
    # tomcat的URI编码
    uri-encoding: UTF-8
    # 连接数满后的排队数,默认为100
    accept-count: 1000
    threads:
      # tomcat最大线程数,默认为200
      max: 800
      # Tomcat启动初始化的线程数,默认值10
      min-spare: 100
# 日志配置
#logging:
#  level:
#    com.ltkj: debug
#    org.springframework: warn
# 用户配置
user:
  password:
    # 密码最大错误次数
    maxRetryCount: 5
    # 密码锁定时间(默认10分钟)
    lockTime: 10
# Spring配置
spring:
  # 资源信息
  messages:
    # 国际化资源文件路径
    basename: i18n/messages
  # 文件上传
  servlet:
    multipart:
      # 单个文件大小
      max-file-size: 2GB
      # 设置总上传的文件大小
      max-request-size: 2GB
  # 服务模块
  devtools:
    restart:
      # 热部署开关
      enabled: true
  cache:
    type: redis
  # redis 配置
  #  redis:
  #    # 地址
  ##    host: 101.42.27.146
  #    host: localhost
  #    # 端口,默认为6379
  #    port: 6379
  #    # 数据库索引
  #    database: 0
  #    # 密码
  ##    password: 654321
  #    password: 123456
  #    # 连接超时时间
  #    timeout: 120s
  #    lettuce:
  #      pool:
  #        # 连接池中的最小空闲连接
  #        min-idle: 0
  #        # 连接池中的最大空闲连接
  #        max-idle: 8
  #        # 连接池的最大数据库连接数
  #        max-active: 8
  #        # #连接池最大阻塞等待时间(使用负值表示没有限制)
  #        max-wait: -1ms
  # 邮件
  mail:
    # from 要和 username 一致, 否则报错
    from: 1138758025@qq.com
    # 邮件服务地址
    host: smtp.qq.com
    # 用户名
    username: 1138758025@qq.com
    # 授权码 (设置 - 账户 - POP3/SMTP服务)
    password: lwsbmlbqgpaqfgdb
    # QQ邮箱加密端口,不同邮箱的端口不一样
    port: 465
    properties:
      mail:
        smtp:
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory
          ssl:
            trust: smtp.qq.com
          # 是否需要用户认证
          auth: true
          starttls:
            # 启用TLS加密
            enable: true
            required: true
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        login-username: 10001
        login-password: admin123
        reset-enable: true
        allow:
      filters: stat,wall,log4j  # 启用日志和监控过滤器
      stat:
        mergeSql: true  # 合并SQL统计信息
        slowSqlMillis: 3000  # 配置 SQL 慢查询阈值,单位是毫秒,3秒即 3000ms
# token配置
token:
  # 令牌自定义标识
  header: Authorization
  # 令牌密钥
  secret: xaltjdkjyxgs_sjh&1987
  secret_key: ltkj_xaltjdkjsjh
  # 令牌有效期(默认30分钟)
  expireTime: 180
  # 是否允许账户多终端同时登录(true允许 false不允许)
  soloLogin: true
  #是否开启登录时判断商户秘钥是否过期
  secret_key_login: true
# MyBatis Plus配置
mybatis-plus:
  # 搜索指定包别名
  typeAliasesPackage: com.ltkj.**.domain
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  # 加载全局的配置文件
  configLocation: classpath:mybatis/mybatis-config.xml
  global-config:
    db-config:
      logic-not-delete-value: 0
      logic-delete-value: 1
      update-strategy: not_null
# PageHelper分页插件
pagehelper:
  helperDialect: mysql
  supportMethodsArguments: true
  params: count=countSql
# Swagger配置
swagger:
  # 是否开启swagger
  enabled: true
  # 请求前缀
  pathMapping: /
# 防止XSS攻击
xss:
  # 过滤开关
  enabled: true
  # 排除链接(多个用逗号分隔)
  excludes: /system/notice,/system/package
  # 匹配链接
  urlPatterns: /system/*,/monitor/*,/tool/*
#  体检报告模板和报告临时生成存储的文件夹路径
path:
  filePath: /ltkj/Tjreport/mjprodReort
  # nginx图片服务器
  reportServer: https://ltpeis.xaltjdkj.cn:5516/
#  体检套餐和轮播图存储路径
photoPath: /ltkj/uploadPath/
# nginx图片服务器
#photoServer: https://ltpeis.xaltjdkj.cn:5502/uploadPath/
photoServer: http://192.168.0.5:5502/uploadPath/
# 微信小程序appid secret
xcx:
  appid: wx40a545f1a8eb1d9d
  secret: c86c1ff7f91c16380111878e9a259237
  msgDataFormat: JSON
  token: token # 微信小程序消息服务器配置的token
  aesKey: aesKey # 微信小程序消息服务器配置的EncodingAESKey
# 开发者应该设置成自己的wx相关信息
wx:
  # 小程序
  miniapp:
    appid: wx40a545f1a8eb1d9d
    secret: c86c1ff7f91c16380111878e9a259237
    msg-data-format: XML
  pay:
    #appid
    app-id: wx40a545f1a8eb1d9d
    mch-id: 1642930999   #商户号
    mch-key: Xianlutaikeji666888999shijihongL   #密钥
    #key-path: E:\mycode\apppwd\1643225121_20230427_cert\apiclient_cert.p12  #本地证书路径,在微信商户后台下载
    key-path: D:\WXCertUtil\tjcert\apiclient_cert.p12  #服务器证书路径,在微信商户后台下载
    #    pay-score-notify-url: http://192.168.0.101:5011/cus/order/pay-notify   #微信支付回调地址
    #    pay-score-notify-url: https://ltpeis.xaltjdkj.cn:5011/ltkj-admin/cus/order/pay-notify   #微信支付回调地址
    pay-score-notify-url: https://ltpeis.xaltjdkj.cn:5021/ltkj-admin/cus/order/pay-notify   #微信支付回调地址
#积木报表访问地址
jimu:
  #  path: https://ltpeis.xaltjdkj.cn:5011/ltkj-admin
  #  path: https://ltpeis.xaltjdkj.cn:5021/ltkj-admin
  path: http://192.168.0.5:5000/ltkj-admin
#   path: http://10.168.0.9:5011
#   path: http://192.168.0.105:5011
#  path: http://192.168.1.113:5011
jeecg :
  jmreport:
    # 打印纸张配置 title描述 size宽高
    printPaper:
      - title: 小票打印
        size:
          - 40
          - 60
#  ip = 101.42.27.146
#  prot = 3306
#  name = ltkjpeis10
#  username = root
#  password = Root_ltkj123
config:
  properties: /ltkj/ltkjprojectconf/mjzsconfig.properties
  path: /ltkj/ltkjprojectconf
ltkj-admin/src/main/resources/application-linux-mjtest.yml
New file
@@ -0,0 +1,255 @@
# 项目相关配置
ltkj:
  # 名称
  name: ltkj
  # 版本
  version: 1.0.1
  # 版权年份
  copyrightYear: 2022
  # 实例演示开关
  demoEnabled: true
  # 文件路径 示例( Windows配置D:/ltkj/uploadPath,Linux配置 /home/ltkj/uploadPath)
  # 用户换头像后的图片存储地址  测试:D:\ltkj\uploadPath\avatar\2022\12\14
  #profile: D:/ltkj/uploadPath
  #  profile: https://ltpeis.xaltjdkj.cn:5502/uploadPath
  profile: http://192.168.0.5:5502/uploadPath
  # 获取ip地址开关
  addressEnabled: true
  # 验证码类型 math 数组计算 char 字符验证
  captchaType: math
# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 5004
  servlet:
    # 应用的访问路径
    context-path: /ltkj-admin
  tomcat:
    # tomcat的URI编码
    uri-encoding: UTF-8
    # 连接数满后的排队数,默认为100
    accept-count: 1000
    threads:
      # tomcat最大线程数,默认为200
      max: 800
      # Tomcat启动初始化的线程数,默认值10
      min-spare: 100
# 日志配置
#logging:
#  level:
#    com.ltkj: debug
#    org.springframework: warn
# 用户配置
user:
  password:
    # 密码最大错误次数
    maxRetryCount: 5
    # 密码锁定时间(默认10分钟)
    lockTime: 10
# Spring配置
spring:
  # 资源信息
  messages:
    # 国际化资源文件路径
    basename: i18n/messages
  # 文件上传
  servlet:
    multipart:
      # 单个文件大小
      max-file-size: 2GB
      # 设置总上传的文件大小
      max-request-size: 2GB
  # 服务模块
  devtools:
    restart:
      # 热部署开关
      enabled: true
  cache:
    type: redis
  # redis 配置
  #  redis:
  #    # 地址
  ##    host: 101.42.27.146
  #    host: localhost
  #    # 端口,默认为6379
  #    port: 6379
  #    # 数据库索引
  #    database: 0
  #    # 密码
  ##    password: 654321
  #    password: 123456
  #    # 连接超时时间
  #    timeout: 120s
  #    lettuce:
  #      pool:
  #        # 连接池中的最小空闲连接
  #        min-idle: 0
  #        # 连接池中的最大空闲连接
  #        max-idle: 8
  #        # 连接池的最大数据库连接数
  #        max-active: 8
  #        # #连接池最大阻塞等待时间(使用负值表示没有限制)
  #        max-wait: -1ms
  # 邮件
  mail:
    # from 要和 username 一致, 否则报错
    from: 1138758025@qq.com
    # 邮件服务地址
    host: smtp.qq.com
    # 用户名
    username: 1138758025@qq.com
    # 授权码 (设置 - 账户 - POP3/SMTP服务)
    password: lwsbmlbqgpaqfgdb
    # QQ邮箱加密端口,不同邮箱的端口不一样
    port: 465
    properties:
      mail:
        smtp:
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory
          ssl:
            trust: smtp.qq.com
          # 是否需要用户认证
          auth: true
          starttls:
            # 启用TLS加密
            enable: true
            required: true
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        login-username: 10001
        login-password: admin123
        reset-enable: true
        allow:
      filters: stat,wall,log4j  # 启用日志和监控过滤器
      stat:
        mergeSql: true  # 合并SQL统计信息
        slowSqlMillis: 3000  # 配置 SQL 慢查询阈值,单位是毫秒,3秒即 3000ms
# token配置
token:
  # 令牌自定义标识
  header: Authorization
  # 令牌密钥
  secret: xaltjdkjyxgs_sjh&1987
  secret_key: ltkj_xaltjdkjsjh
  # 令牌有效期(默认30分钟)
  expireTime: 180
  # 是否允许账户多终端同时登录(true允许 false不允许)
  soloLogin: true
  #是否开启登录时判断商户秘钥是否过期
  secret_key_login: true
# MyBatis Plus配置
mybatis-plus:
  # 搜索指定包别名
  typeAliasesPackage: com.ltkj.**.domain
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  # 加载全局的配置文件
  configLocation: classpath:mybatis/mybatis-config.xml
  global-config:
    db-config:
      logic-not-delete-value: 0
      logic-delete-value: 1
      update-strategy: not_null
# PageHelper分页插件
pagehelper:
  helperDialect: mysql
  supportMethodsArguments: true
  params: count=countSql
# Swagger配置
swagger:
  # 是否开启swagger
  enabled: true
  # 请求前缀
  pathMapping: /
# 防止XSS攻击
xss:
  # 过滤开关
  enabled: true
  # 排除链接(多个用逗号分隔)
  excludes: /system/notice,/system/package
  # 匹配链接
  urlPatterns: /system/*,/monitor/*,/tool/*
#  体检报告模板和报告临时生成存储的文件夹路径
path:
  filePath: /ltkj/Tjreport
  # nginx图片服务器
  reportServer: https://ltpeis.xaltjdkj.cn:5516/
#  体检套餐和轮播图存储路径
photoPath: /ltkj/uploadPath/
# nginx图片服务器
#photoServer: https://ltpeis.xaltjdkj.cn:5502/uploadPath/
photoServer: http://192.168.0.5:5502/uploadPath/
# 微信小程序appid secret
xcx:
  appid: wx40a545f1a8eb1d9d
  secret: c86c1ff7f91c16380111878e9a259237
  msgDataFormat: JSON
  token: token # 微信小程序消息服务器配置的token
  aesKey: aesKey # 微信小程序消息服务器配置的EncodingAESKey
# 开发者应该设置成自己的wx相关信息
wx:
  # 小程序
  miniapp:
    appid: wx40a545f1a8eb1d9d
    secret: c86c1ff7f91c16380111878e9a259237
    msg-data-format: XML
  pay:
    #appid
    app-id: wx40a545f1a8eb1d9d
    mch-id: 1642930999   #商户号
    mch-key: Xianlutaikeji666888999shijihongL   #密钥
    #key-path: E:\mycode\apppwd\1643225121_20230427_cert\apiclient_cert.p12  #本地证书路径,在微信商户后台下载
    key-path: D:\WXCertUtil\tjcert\apiclient_cert.p12  #服务器证书路径,在微信商户后台下载
    #    pay-score-notify-url: http://192.168.0.101:5011/cus/order/pay-notify   #微信支付回调地址
    #    pay-score-notify-url: https://ltpeis.xaltjdkj.cn:5011/ltkj-admin/cus/order/pay-notify   #微信支付回调地址
    pay-score-notify-url: https://ltpeis.xaltjdkj.cn:5021/ltkj-admin/cus/order/pay-notify   #微信支付回调地址
#积木报表访问地址
jimu:
  #  path: https://ltpeis.xaltjdkj.cn:5011/ltkj-admin
  #  path: https://ltpeis.xaltjdkj.cn:5021/ltkj-admin
  path: http://192.168.0.5:5000/ltkj-admin
#   path: http://10.168.0.9:5011
#   path: http://192.168.0.105:5011
#  path: http://192.168.1.113:5011
jeecg :
  jmreport:
    # 打印纸张配置 title描述 size宽高
    printPaper:
      - title: 小票打印
        size:
          - 40
          - 60
#  ip = 101.42.27.146
#  prot = 3306
#  name = ltkjpeis10
#  username = root
#  password = Root_ltkj123
config:
  properties: /ltkj/ltkjprojectconf/mjcsconfig.properties
  path: /ltkj/ltkjprojectconf
ltkj-admin/src/main/resources/application-prod.yml
@@ -21,7 +21,7 @@
# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 5001
  port: 5000
  servlet:
    # 应用的访问路径
    context-path: /ltkj-admin
ltkj-admin/src/main/resources/application-test.yml
@@ -21,7 +21,7 @@
# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 5002
  port: 5001
  servlet:
    # 应用的访问路径
    context-path: /ltkj-admin
ltkj-admin/src/main/resources/application-win-chkwyyprod.yaml
New file
@@ -0,0 +1,255 @@
# 项目相关配置
ltkj:
  # 名称
  name: ltkj
  # 版本
  version: 1.0.1
  # 版权年份
  copyrightYear: 2022
  # 实例演示开关
  demoEnabled: true
  # 文件路径 示例( Windows配置D:/ltkj/uploadPath,Linux配置 /home/ltkj/uploadPath)
  # 用户换头像后的图片存储地址  测试:D:\ltkj\uploadPath\avatar\2022\12\14
  #profile: D:/ltkj/uploadPath
  #  profile: https://ltpeis.xaltjdkj.cn:5502/uploadPath
  profile: http://192.168.0.5:5502/uploadPath
  # 获取ip地址开关
  addressEnabled: true
  # 验证码类型 math 数组计算 char 字符验证
  captchaType: math
# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 5001
  servlet:
    # 应用的访问路径
    context-path: /ltkj-admin
  tomcat:
    # tomcat的URI编码
    uri-encoding: UTF-8
    # 连接数满后的排队数,默认为100
    accept-count: 1000
    threads:
      # tomcat最大线程数,默认为200
      max: 800
      # Tomcat启动初始化的线程数,默认值10
      min-spare: 100
# 日志配置
#logging:
#  level:
#    com.ltkj: debug
#    org.springframework: warn
# 用户配置
user:
  password:
    # 密码最大错误次数
    maxRetryCount: 5
    # 密码锁定时间(默认10分钟)
    lockTime: 10
# Spring配置
spring:
  # 资源信息
  messages:
    # 国际化资源文件路径
    basename: i18n/messages
  # 文件上传
  servlet:
    multipart:
      # 单个文件大小
      max-file-size: 2GB
      # 设置总上传的文件大小
      max-request-size: 2GB
  # 服务模块
  devtools:
    restart:
      # 热部署开关
      enabled: true
  cache:
    type: redis
  # redis 配置
  #  redis:
  #    # 地址
  ##    host: 101.42.27.146
  #    host: localhost
  #    # 端口,默认为6379
  #    port: 6379
  #    # 数据库索引
  #    database: 0
  #    # 密码
  ##    password: 654321
  #    password: 123456
  #    # 连接超时时间
  #    timeout: 120s
  #    lettuce:
  #      pool:
  #        # 连接池中的最小空闲连接
  #        min-idle: 0
  #        # 连接池中的最大空闲连接
  #        max-idle: 8
  #        # 连接池的最大数据库连接数
  #        max-active: 8
  #        # #连接池最大阻塞等待时间(使用负值表示没有限制)
  #        max-wait: -1ms
  # 邮件
  mail:
    # from 要和 username 一致, 否则报错
    from: 1138758025@qq.com
    # 邮件服务地址
    host: smtp.qq.com
    # 用户名
    username: 1138758025@qq.com
    # 授权码 (设置 - 账户 - POP3/SMTP服务)
    password: lwsbmlbqgpaqfgdb
    # QQ邮箱加密端口,不同邮箱的端口不一样
    port: 465
    properties:
      mail:
        smtp:
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory
          ssl:
            trust: smtp.qq.com
          # 是否需要用户认证
          auth: true
          starttls:
            # 启用TLS加密
            enable: true
            required: true
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        login-username: 10001
        login-password: admin123
        reset-enable: true
        allow:
      filters: stat,wall,log4j  # 启用日志和监控过滤器
      stat:
        mergeSql: true  # 合并SQL统计信息
        slowSqlMillis: 3000  # 配置 SQL 慢查询阈值,单位是毫秒,3秒即 3000ms
# token配置
token:
  # 令牌自定义标识
  header: Authorization
  # 令牌密钥
  secret: xaltjdkjyxgs_sjh&1987
  secret_key: ltkj_xaltjdkjsjh
  # 令牌有效期(默认30分钟)
  expireTime: 180
  # 是否允许账户多终端同时登录(true允许 false不允许)
  soloLogin: true
  #是否开启登录时判断商户秘钥是否过期
  secret_key_login: true
# MyBatis Plus配置
mybatis-plus:
  # 搜索指定包别名
  typeAliasesPackage: com.ltkj.**.domain
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  # 加载全局的配置文件
  configLocation: classpath:mybatis/mybatis-config.xml
  global-config:
    db-config:
      logic-not-delete-value: 0
      logic-delete-value: 1
      update-strategy: not_null
# PageHelper分页插件
pagehelper:
  helperDialect: mysql
  supportMethodsArguments: true
  params: count=countSql
# Swagger配置
swagger:
  # 是否开启swagger
  enabled: true
  # 请求前缀
  pathMapping: /
# 防止XSS攻击
xss:
  # 过滤开关
  enabled: true
  # 排除链接(多个用逗号分隔)
  excludes: /system/notice,/system/package
  # 匹配链接
  urlPatterns: /system/*,/monitor/*,/tool/*
#  体检报告模板和报告临时生成存储的文件夹路径
path:
  filePath: C:\Tjreport\chkwyy
  # nginx图片服务器
  reportServer: https://ltpeis.xaltjdkj.cn:5516/
#  体检套餐和轮播图存储路径
photoPath: C:\AppPhoto\uploadPath\
# nginx图片服务器
#photoServer: https://ltpeis.xaltjdkj.cn:5502/uploadPath/
photoServer: http://192.168.0.5:5502/uploadPath/
# 微信小程序appid secret
xcx:
  appid: wx40a545f1a8eb1d9d
  secret: c86c1ff7f91c16380111878e9a259237
  msgDataFormat: JSON
  token: token # 微信小程序消息服务器配置的token
  aesKey: aesKey # 微信小程序消息服务器配置的EncodingAESKey
# 开发者应该设置成自己的wx相关信息
wx:
  # 小程序
  miniapp:
    appid: wx40a545f1a8eb1d9d
    secret: c86c1ff7f91c16380111878e9a259237
    msg-data-format: XML
  pay:
    #appid
    app-id: wx40a545f1a8eb1d9d
    mch-id: 1642930999   #商户号
    mch-key: Xianlutaikeji666888999shijihongL   #密钥
    #key-path: E:\mycode\apppwd\1643225121_20230427_cert\apiclient_cert.p12  #本地证书路径,在微信商户后台下载
    key-path: D:\WXCertUtil\tjcert\apiclient_cert.p12  #服务器证书路径,在微信商户后台下载
    #    pay-score-notify-url: http://192.168.0.101:5011/cus/order/pay-notify   #微信支付回调地址
    #    pay-score-notify-url: https://ltpeis.xaltjdkj.cn:5011/ltkj-admin/cus/order/pay-notify   #微信支付回调地址
    pay-score-notify-url: https://ltpeis.xaltjdkj.cn:5021/ltkj-admin/cus/order/pay-notify   #微信支付回调地址
#积木报表访问地址
jimu:
  #  path: https://ltpeis.xaltjdkj.cn:5011/ltkj-admin
  #  path: https://ltpeis.xaltjdkj.cn:5021/ltkj-admin
  path: http://192.168.0.5:5000/ltkj-admin
#   path: http://10.168.0.9:5011
#   path: http://192.168.0.105:5011
#  path: http://192.168.1.113:5011
jeecg :
  jmreport:
    # 打印纸张配置 title描述 size宽高
    printPaper:
      - title: 小票打印
        size:
          - 40
          - 60
#  ip = 101.42.27.146
#  prot = 3306
#  name = ltkjpeis10
#  username = root
#  password = Root_ltkj123
config:
  properties: C:\ltkjprojectconf\chkwyy-config.properties
  path: C:\ltkjprojectconf
ltkj-admin/src/main/resources/application-win-pbkwyyprod.yaml
New file
@@ -0,0 +1,255 @@
# 项目相关配置
ltkj:
  # 名称
  name: ltkj
  # 版本
  version: 1.0.1
  # 版权年份
  copyrightYear: 2022
  # 实例演示开关
  demoEnabled: true
  # 文件路径 示例( Windows配置D:/ltkj/uploadPath,Linux配置 /home/ltkj/uploadPath)
  # 用户换头像后的图片存储地址  测试:D:\ltkj\uploadPath\avatar\2022\12\14
  #profile: D:/ltkj/uploadPath
  #  profile: https://ltpeis.xaltjdkj.cn:5502/uploadPath
  profile: http://192.168.0.5:5502/uploadPath
  # 获取ip地址开关
  addressEnabled: true
  # 验证码类型 math 数组计算 char 字符验证
  captchaType: math
# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 5005
  servlet:
    # 应用的访问路径
    context-path: /ltkj-admin
  tomcat:
    # tomcat的URI编码
    uri-encoding: UTF-8
    # 连接数满后的排队数,默认为100
    accept-count: 1000
    threads:
      # tomcat最大线程数,默认为200
      max: 800
      # Tomcat启动初始化的线程数,默认值10
      min-spare: 100
# 日志配置
#logging:
#  level:
#    com.ltkj: debug
#    org.springframework: warn
# 用户配置
user:
  password:
    # 密码最大错误次数
    maxRetryCount: 5
    # 密码锁定时间(默认10分钟)
    lockTime: 10
# Spring配置
spring:
  # 资源信息
  messages:
    # 国际化资源文件路径
    basename: i18n/messages
  # 文件上传
  servlet:
    multipart:
      # 单个文件大小
      max-file-size: 2GB
      # 设置总上传的文件大小
      max-request-size: 2GB
  # 服务模块
  devtools:
    restart:
      # 热部署开关
      enabled: true
  cache:
    type: redis
  # redis 配置
  #  redis:
  #    # 地址
  ##    host: 101.42.27.146
  #    host: localhost
  #    # 端口,默认为6379
  #    port: 6379
  #    # 数据库索引
  #    database: 0
  #    # 密码
  ##    password: 654321
  #    password: 123456
  #    # 连接超时时间
  #    timeout: 120s
  #    lettuce:
  #      pool:
  #        # 连接池中的最小空闲连接
  #        min-idle: 0
  #        # 连接池中的最大空闲连接
  #        max-idle: 8
  #        # 连接池的最大数据库连接数
  #        max-active: 8
  #        # #连接池最大阻塞等待时间(使用负值表示没有限制)
  #        max-wait: -1ms
  # 邮件
  mail:
    # from 要和 username 一致, 否则报错
    from: 1138758025@qq.com
    # 邮件服务地址
    host: smtp.qq.com
    # 用户名
    username: 1138758025@qq.com
    # 授权码 (设置 - 账户 - POP3/SMTP服务)
    password: lwsbmlbqgpaqfgdb
    # QQ邮箱加密端口,不同邮箱的端口不一样
    port: 465
    properties:
      mail:
        smtp:
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory
          ssl:
            trust: smtp.qq.com
          # 是否需要用户认证
          auth: true
          starttls:
            # 启用TLS加密
            enable: true
            required: true
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        login-username: 10001
        login-password: admin123
        reset-enable: true
        allow:
      filters: stat,wall,log4j  # 启用日志和监控过滤器
      stat:
        mergeSql: true  # 合并SQL统计信息
        slowSqlMillis: 3000  # 配置 SQL 慢查询阈值,单位是毫秒,3秒即 3000ms
# token配置
token:
  # 令牌自定义标识
  header: Authorization
  # 令牌密钥
  secret: xaltjdkjyxgs_sjh&1987
  secret_key: ltkj_xaltjdkjsjh
  # 令牌有效期(默认30分钟)
  expireTime: 180
  # 是否允许账户多终端同时登录(true允许 false不允许)
  soloLogin: true
  #是否开启登录时判断商户秘钥是否过期
  secret_key_login: true
# MyBatis Plus配置
mybatis-plus:
  # 搜索指定包别名
  typeAliasesPackage: com.ltkj.**.domain
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  # 加载全局的配置文件
  configLocation: classpath:mybatis/mybatis-config.xml
  global-config:
    db-config:
      logic-not-delete-value: 0
      logic-delete-value: 1
      update-strategy: not_null
# PageHelper分页插件
pagehelper:
  helperDialect: mysql
  supportMethodsArguments: true
  params: count=countSql
# Swagger配置
swagger:
  # 是否开启swagger
  enabled: true
  # 请求前缀
  pathMapping: /
# 防止XSS攻击
xss:
  # 过滤开关
  enabled: true
  # 排除链接(多个用逗号分隔)
  excludes: /system/notice,/system/package
  # 匹配链接
  urlPatterns: /system/*,/monitor/*,/tool/*
#  体检报告模板和报告临时生成存储的文件夹路径
path:
  filePath: C:\Tjreport\pbkwyy
  # nginx图片服务器
  reportServer: https://ltpeis.xaltjdkj.cn:5516/
#  体检套餐和轮播图存储路径
photoPath: C:\AppPhoto\uploadPath\
# nginx图片服务器
#photoServer: https://ltpeis.xaltjdkj.cn:5502/uploadPath/
photoServer: http://192.168.0.5:5502/uploadPath/
# 微信小程序appid secret
xcx:
  appid: wx40a545f1a8eb1d9d
  secret: c86c1ff7f91c16380111878e9a259237
  msgDataFormat: JSON
  token: token # 微信小程序消息服务器配置的token
  aesKey: aesKey # 微信小程序消息服务器配置的EncodingAESKey
# 开发者应该设置成自己的wx相关信息
wx:
  # 小程序
  miniapp:
    appid: wx40a545f1a8eb1d9d
    secret: c86c1ff7f91c16380111878e9a259237
    msg-data-format: XML
  pay:
    #appid
    app-id: wx40a545f1a8eb1d9d
    mch-id: 1642930999   #商户号
    mch-key: Xianlutaikeji666888999shijihongL   #密钥
    #key-path: E:\mycode\apppwd\1643225121_20230427_cert\apiclient_cert.p12  #本地证书路径,在微信商户后台下载
    key-path: D:\WXCertUtil\tjcert\apiclient_cert.p12  #服务器证书路径,在微信商户后台下载
    #    pay-score-notify-url: http://192.168.0.101:5011/cus/order/pay-notify   #微信支付回调地址
    #    pay-score-notify-url: https://ltpeis.xaltjdkj.cn:5011/ltkj-admin/cus/order/pay-notify   #微信支付回调地址
    pay-score-notify-url: https://ltpeis.xaltjdkj.cn:5021/ltkj-admin/cus/order/pay-notify   #微信支付回调地址
#积木报表访问地址
jimu:
  #  path: https://ltpeis.xaltjdkj.cn:5011/ltkj-admin
  #  path: https://ltpeis.xaltjdkj.cn:5021/ltkj-admin
  path: http://192.168.0.5:5005/ltkj-admin
#   path: http://10.168.0.9:5011
#   path: http://192.168.0.105:5011
#  path: http://192.168.1.113:5011
jeecg :
  jmreport:
    # 打印纸张配置 title描述 size宽高
    printPaper:
      - title: 小票打印
        size:
          - 40
          - 60
#  ip = 101.42.27.146
#  prot = 3306
#  name = ltkjpeis10
#  username = root
#  password = Root_ltkj123
config:
  properties: C:\ltkjprojectconf\pbkwyy-config.properties
  path: C:\ltkjprojectconf
ltkj-admin/src/main/resources/application-win-xamjyyprod.yaml
New file
@@ -0,0 +1,255 @@
# 项目相关配置
ltkj:
  # 名称
  name: ltkj
  # 版本
  version: 1.0.1
  # 版权年份
  copyrightYear: 2022
  # 实例演示开关
  demoEnabled: true
  # 文件路径 示例( Windows配置D:/ltkj/uploadPath,Linux配置 /home/ltkj/uploadPath)
  # 用户换头像后的图片存储地址  测试:D:\ltkj\uploadPath\avatar\2022\12\14
  #profile: D:/ltkj/uploadPath
  #  profile: https://ltpeis.xaltjdkj.cn:5502/uploadPath
  profile: http://192.168.0.5:5502/uploadPath
  # 获取ip地址开关
  addressEnabled: true
  # 验证码类型 math 数组计算 char 字符验证
  captchaType: math
# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 5003
  servlet:
    # 应用的访问路径
    context-path: /ltkj-admin
  tomcat:
    # tomcat的URI编码
    uri-encoding: UTF-8
    # 连接数满后的排队数,默认为100
    accept-count: 1000
    threads:
      # tomcat最大线程数,默认为200
      max: 800
      # Tomcat启动初始化的线程数,默认值10
      min-spare: 100
# 日志配置
#logging:
#  level:
#    com.ltkj: debug
#    org.springframework: warn
# 用户配置
user:
  password:
    # 密码最大错误次数
    maxRetryCount: 5
    # 密码锁定时间(默认10分钟)
    lockTime: 10
# Spring配置
spring:
  # 资源信息
  messages:
    # 国际化资源文件路径
    basename: i18n/messages
  # 文件上传
  servlet:
    multipart:
      # 单个文件大小
      max-file-size: 2GB
      # 设置总上传的文件大小
      max-request-size: 2GB
  # 服务模块
  devtools:
    restart:
      # 热部署开关
      enabled: true
  cache:
    type: redis
  # redis 配置
  #  redis:
  #    # 地址
  ##    host: 101.42.27.146
  #    host: localhost
  #    # 端口,默认为6379
  #    port: 6379
  #    # 数据库索引
  #    database: 0
  #    # 密码
  ##    password: 654321
  #    password: 123456
  #    # 连接超时时间
  #    timeout: 120s
  #    lettuce:
  #      pool:
  #        # 连接池中的最小空闲连接
  #        min-idle: 0
  #        # 连接池中的最大空闲连接
  #        max-idle: 8
  #        # 连接池的最大数据库连接数
  #        max-active: 8
  #        # #连接池最大阻塞等待时间(使用负值表示没有限制)
  #        max-wait: -1ms
  # 邮件
  mail:
    # from 要和 username 一致, 否则报错
    from: 1138758025@qq.com
    # 邮件服务地址
    host: smtp.qq.com
    # 用户名
    username: 1138758025@qq.com
    # 授权码 (设置 - 账户 - POP3/SMTP服务)
    password: lwsbmlbqgpaqfgdb
    # QQ邮箱加密端口,不同邮箱的端口不一样
    port: 465
    properties:
      mail:
        smtp:
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory
          ssl:
            trust: smtp.qq.com
          # 是否需要用户认证
          auth: true
          starttls:
            # 启用TLS加密
            enable: true
            required: true
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        login-username: 10001
        login-password: admin123
        reset-enable: true
        allow:
      filters: stat,wall,log4j  # 启用日志和监控过滤器
      stat:
        mergeSql: true  # 合并SQL统计信息
        slowSqlMillis: 3000  # 配置 SQL 慢查询阈值,单位是毫秒,3秒即 3000ms
# token配置
token:
  # 令牌自定义标识
  header: Authorization
  # 令牌密钥
  secret: xaltjdkjyxgs_sjh&1987
  secret_key: ltkj_xaltjdkjsjh
  # 令牌有效期(默认30分钟)
  expireTime: 180
  # 是否允许账户多终端同时登录(true允许 false不允许)
  soloLogin: true
  #是否开启登录时判断商户秘钥是否过期
  secret_key_login: true
# MyBatis Plus配置
mybatis-plus:
  # 搜索指定包别名
  typeAliasesPackage: com.ltkj.**.domain
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  # 加载全局的配置文件
  configLocation: classpath:mybatis/mybatis-config.xml
  global-config:
    db-config:
      logic-not-delete-value: 0
      logic-delete-value: 1
      update-strategy: not_null
# PageHelper分页插件
pagehelper:
  helperDialect: mysql
  supportMethodsArguments: true
  params: count=countSql
# Swagger配置
swagger:
  # 是否开启swagger
  enabled: true
  # 请求前缀
  pathMapping: /
# 防止XSS攻击
xss:
  # 过滤开关
  enabled: true
  # 排除链接(多个用逗号分隔)
  excludes: /system/notice,/system/package
  # 匹配链接
  urlPatterns: /system/*,/monitor/*,/tool/*
#  体检报告模板和报告临时生成存储的文件夹路径
path:
  filePath: C:\Tjreport\xamjyy
  # nginx图片服务器
  reportServer: https://ltpeis.xaltjdkj.cn:5516/
#  体检套餐和轮播图存储路径
photoPath: C:\AppPhoto\uploadPath\
# nginx图片服务器
#photoServer: https://ltpeis.xaltjdkj.cn:5502/uploadPath/
photoServer: http://192.168.0.5:5502/uploadPath/
# 微信小程序appid secret
xcx:
  appid: wx40a545f1a8eb1d9d
  secret: c86c1ff7f91c16380111878e9a259237
  msgDataFormat: JSON
  token: token # 微信小程序消息服务器配置的token
  aesKey: aesKey # 微信小程序消息服务器配置的EncodingAESKey
# 开发者应该设置成自己的wx相关信息
wx:
  # 小程序
  miniapp:
    appid: wx40a545f1a8eb1d9d
    secret: c86c1ff7f91c16380111878e9a259237
    msg-data-format: XML
  pay:
    #appid
    app-id: wx40a545f1a8eb1d9d
    mch-id: 1642930999   #商户号
    mch-key: Xianlutaikeji666888999shijihongL   #密钥
    #key-path: E:\mycode\apppwd\1643225121_20230427_cert\apiclient_cert.p12  #本地证书路径,在微信商户后台下载
    key-path: D:\WXCertUtil\tjcert\apiclient_cert.p12  #服务器证书路径,在微信商户后台下载
    #    pay-score-notify-url: http://192.168.0.101:5011/cus/order/pay-notify   #微信支付回调地址
    #    pay-score-notify-url: https://ltpeis.xaltjdkj.cn:5011/ltkj-admin/cus/order/pay-notify   #微信支付回调地址
    pay-score-notify-url: https://ltpeis.xaltjdkj.cn:5021/ltkj-admin/cus/order/pay-notify   #微信支付回调地址
#积木报表访问地址
jimu:
  #  path: https://ltpeis.xaltjdkj.cn:5011/ltkj-admin
  #  path: https://ltpeis.xaltjdkj.cn:5021/ltkj-admin
  path: http://192.168.0.5:5000/ltkj-admin
#   path: http://10.168.0.9:5011
#   path: http://192.168.0.105:5011
#  path: http://192.168.1.113:5011
jeecg :
  jmreport:
    # 打印纸张配置 title描述 size宽高
    printPaper:
      - title: 小票打印
        size:
          - 40
          - 60
#  ip = 101.42.27.146
#  prot = 3306
#  name = ltkjpeis10
#  username = root
#  password = Root_ltkj123
config:
  properties: C:\ltkjprojectconf\xamjyy-config.properties
  path: C:\ltkjprojectconf
ltkj-admin/src/main/resources/application-win-xamjyytest.yaml
New file
@@ -0,0 +1,255 @@
# 项目相关配置
ltkj:
  # 名称
  name: ltkj
  # 版本
  version: 1.0.1
  # 版权年份
  copyrightYear: 2022
  # 实例演示开关
  demoEnabled: true
  # 文件路径 示例( Windows配置D:/ltkj/uploadPath,Linux配置 /home/ltkj/uploadPath)
  # 用户换头像后的图片存储地址  测试:D:\ltkj\uploadPath\avatar\2022\12\14
  #profile: D:/ltkj/uploadPath
  #  profile: https://ltpeis.xaltjdkj.cn:5502/uploadPath
  profile: http://192.168.0.5:5502/uploadPath
  # 获取ip地址开关
  addressEnabled: true
  # 验证码类型 math 数组计算 char 字符验证
  captchaType: math
# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 5004
  servlet:
    # 应用的访问路径
    context-path: /ltkj-admin
  tomcat:
    # tomcat的URI编码
    uri-encoding: UTF-8
    # 连接数满后的排队数,默认为100
    accept-count: 1000
    threads:
      # tomcat最大线程数,默认为200
      max: 800
      # Tomcat启动初始化的线程数,默认值10
      min-spare: 100
# 日志配置
#logging:
#  level:
#    com.ltkj: debug
#    org.springframework: warn
# 用户配置
user:
  password:
    # 密码最大错误次数
    maxRetryCount: 5
    # 密码锁定时间(默认10分钟)
    lockTime: 10
# Spring配置
spring:
  # 资源信息
  messages:
    # 国际化资源文件路径
    basename: i18n/messages
  # 文件上传
  servlet:
    multipart:
      # 单个文件大小
      max-file-size: 2GB
      # 设置总上传的文件大小
      max-request-size: 2GB
  # 服务模块
  devtools:
    restart:
      # 热部署开关
      enabled: true
  cache:
    type: redis
  # redis 配置
  #  redis:
  #    # 地址
  ##    host: 101.42.27.146
  #    host: localhost
  #    # 端口,默认为6379
  #    port: 6379
  #    # 数据库索引
  #    database: 0
  #    # 密码
  ##    password: 654321
  #    password: 123456
  #    # 连接超时时间
  #    timeout: 120s
  #    lettuce:
  #      pool:
  #        # 连接池中的最小空闲连接
  #        min-idle: 0
  #        # 连接池中的最大空闲连接
  #        max-idle: 8
  #        # 连接池的最大数据库连接数
  #        max-active: 8
  #        # #连接池最大阻塞等待时间(使用负值表示没有限制)
  #        max-wait: -1ms
  # 邮件
  mail:
    # from 要和 username 一致, 否则报错
    from: 1138758025@qq.com
    # 邮件服务地址
    host: smtp.qq.com
    # 用户名
    username: 1138758025@qq.com
    # 授权码 (设置 - 账户 - POP3/SMTP服务)
    password: lwsbmlbqgpaqfgdb
    # QQ邮箱加密端口,不同邮箱的端口不一样
    port: 465
    properties:
      mail:
        smtp:
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory
          ssl:
            trust: smtp.qq.com
          # 是否需要用户认证
          auth: true
          starttls:
            # 启用TLS加密
            enable: true
            required: true
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        login-username: 10001
        login-password: admin123
        reset-enable: true
        allow:
      filters: stat,wall,log4j  # 启用日志和监控过滤器
      stat:
        mergeSql: true  # 合并SQL统计信息
        slowSqlMillis: 3000  # 配置 SQL 慢查询阈值,单位是毫秒,3秒即 3000ms
# token配置
token:
  # 令牌自定义标识
  header: Authorization
  # 令牌密钥
  secret: xaltjdkjyxgs_sjh&1987
  secret_key: ltkj_xaltjdkjsjh
  # 令牌有效期(默认30分钟)
  expireTime: 180
  # 是否允许账户多终端同时登录(true允许 false不允许)
  soloLogin: true
  #是否开启登录时判断商户秘钥是否过期
  secret_key_login: true
# MyBatis Plus配置
mybatis-plus:
  # 搜索指定包别名
  typeAliasesPackage: com.ltkj.**.domain
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  # 加载全局的配置文件
  configLocation: classpath:mybatis/mybatis-config.xml
  global-config:
    db-config:
      logic-not-delete-value: 0
      logic-delete-value: 1
      update-strategy: not_null
# PageHelper分页插件
pagehelper:
  helperDialect: mysql
  supportMethodsArguments: true
  params: count=countSql
# Swagger配置
swagger:
  # 是否开启swagger
  enabled: true
  # 请求前缀
  pathMapping: /
# 防止XSS攻击
xss:
  # 过滤开关
  enabled: true
  # 排除链接(多个用逗号分隔)
  excludes: /system/notice,/system/package
  # 匹配链接
  urlPatterns: /system/*,/monitor/*,/tool/*
#  体检报告模板和报告临时生成存储的文件夹路径
path:
  filePath: C:\Tjreport\xamjyy\test
  # nginx图片服务器
  reportServer: https://ltpeis.xaltjdkj.cn:5516/
#  体检套餐和轮播图存储路径
photoPath: C:\AppPhoto\uploadPath\
# nginx图片服务器
#photoServer: https://ltpeis.xaltjdkj.cn:5502/uploadPath/
photoServer: http://192.168.0.5:5502/uploadPath/
# 微信小程序appid secret
xcx:
  appid: wx40a545f1a8eb1d9d
  secret: c86c1ff7f91c16380111878e9a259237
  msgDataFormat: JSON
  token: token # 微信小程序消息服务器配置的token
  aesKey: aesKey # 微信小程序消息服务器配置的EncodingAESKey
# 开发者应该设置成自己的wx相关信息
wx:
  # 小程序
  miniapp:
    appid: wx40a545f1a8eb1d9d
    secret: c86c1ff7f91c16380111878e9a259237
    msg-data-format: XML
  pay:
    #appid
    app-id: wx40a545f1a8eb1d9d
    mch-id: 1642930999   #商户号
    mch-key: Xianlutaikeji666888999shijihongL   #密钥
    #key-path: E:\mycode\apppwd\1643225121_20230427_cert\apiclient_cert.p12  #本地证书路径,在微信商户后台下载
    key-path: D:\WXCertUtil\tjcert\apiclient_cert.p12  #服务器证书路径,在微信商户后台下载
    #    pay-score-notify-url: http://192.168.0.101:5011/cus/order/pay-notify   #微信支付回调地址
    #    pay-score-notify-url: https://ltpeis.xaltjdkj.cn:5011/ltkj-admin/cus/order/pay-notify   #微信支付回调地址
    pay-score-notify-url: https://ltpeis.xaltjdkj.cn:5021/ltkj-admin/cus/order/pay-notify   #微信支付回调地址
#积木报表访问地址
jimu:
  #  path: https://ltpeis.xaltjdkj.cn:5011/ltkj-admin
  #  path: https://ltpeis.xaltjdkj.cn:5021/ltkj-admin
  path: http://192.168.0.5:5000/ltkj-admin
#   path: http://10.168.0.9:5011
#   path: http://192.168.0.105:5011
#  path: http://192.168.1.113:5011
jeecg :
  jmreport:
    # 打印纸张配置 title描述 size宽高
    printPaper:
      - title: 小票打印
        size:
          - 40
          - 60
#  ip = 101.42.27.146
#  prot = 3306
#  name = ltkjpeis10
#  username = root
#  password = Root_ltkj123
config:
  properties: C:\ltkjprojectconf\xamjyy-config-test.properties
  path: C:\ltkjprojectconf
ltkj-admin/src/main/resources/application.yml
@@ -1,9 +1,19 @@
# Spring配置
#dev  公司 开发/部署使用 5000
#prod 泾川县部署正式环境使用(小程序端也可使用) 5001
#test 泾川县部署测试环境使用 5002
#  linux-prod 5001
#  linux-test 5002
#dev  公司 开发/部署使用
#prod 泾川县部署正式环境使用(小程序端也可使用)
#test 泾川县部署测试环境使用
#  linux-prod
#  linux-test
#  linux-mjprod
#  linux-mjtest
#  win-xamjyyprod
#  win-xamjyytest
#  win-chkwyyprod
#  win-pbkwyyprod
# 陕健医澄合矿务局中心医院正式 5001
# 陕健医澄合矿务局中心医院测试 5002
# 陕西西安煤机医院正式 5003
# 陕西西安煤机医院测试 5004
spring:
  profiles:
    active: dev
ltkj-admin/src/main/resources/logback.xml
@@ -23,7 +23,30 @@
    </springProfile>
    <!-- 日志存放路径  煤积医院linux环境-->
    <springProfile name="linux-mjprod">
        <property name="log.path" value="/ltkj/jar/logs/meiji"/>
    </springProfile>
    <springProfile name="linux-mjtest">
        <property name="log.path" value="/ltkj/jar/logs/meiji/ceshi"/>
    </springProfile>
    <springProfile name="win-pbkwyyprod">
        <property name="log.path" value="../../logs/pbkwyy/prod"/>
    </springProfile>
    <springProfile name="win-chkwyyprod">
        <property name="log.path" value="../../logs/chkwyy/prod"/>
    </springProfile>
    <springProfile name="win-xamjyyprod">
        <property name="log.path" value="../../logs/xamjyy/prod"/>
    </springProfile>
    <springProfile name="win-xamjyytest">
        <property name="log.path" value="../../logs/xamjyy/test"/>
    </springProfile>
    <!-- 日志输出格式 -->
    <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
ltkj-admin/src/test/java/zwxTest.java
@@ -10,6 +10,7 @@
import com.ltkj.LtkjApplication;
import com.ltkj.common.core.domain.AjaxResult;
import com.ltkj.common.core.domain.entity.DictUserInfo;
import com.ltkj.common.core.redis.RedisCache;
import com.ltkj.hosp.domain.*;
import com.ltkj.hosp.hisDto.OutpintestapplyDetailsDto;
import com.ltkj.hosp.lisDto.LisSaveSqdxxDto;
@@ -31,6 +32,7 @@
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
@@ -59,6 +61,11 @@
    private ITjReportTemplateService reportTemplateService;
    @Autowired
    private HisPDFUtil hisPDFUtil;
//    @Autowired
//    private RedisCache redisCache;
//    @Autowired
//    private RedisTemplate<String,Object> redisTemplate;
    public static String generateId() {
        String id;
@@ -109,5 +116,11 @@
        template.setOpen("1");
        reportTemplateService.save(template);
    }
//
//    @Test
//    public void test11(){
//        redisCache.setCacheList("list1",new ArrayList<>());
//        redisTemplate.opsForList().set("list2",0,new ArrayList<>());
//    }
}
ltkj-common/pom.xml
@@ -3,7 +3,7 @@
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ltkj_peis_region</artifactId>
        <artifactId>ltkj</artifactId>
        <groupId>com.ltkj</groupId>
        <version>3.8.4</version>
    </parent>
ltkj-common/src/main/java/com/ltkj/common/core/domain/model/LoginBody.java
@@ -34,8 +34,6 @@
     */
    private String uuid;
    private String hospId;
    @ApiModelProperty(value = "是true否false")
    private Boolean type = false;
ltkj-common/src/main/java/com/ltkj/common/utils/IdUtils.java
@@ -18,6 +18,7 @@
public class IdUtils {
    private static final String LIS_LAST_ID_KEY = "id:generate:lis:id";
    private static final String TJH_LAST_ID_KEY = "id:generate:tjhs:tjh";
    private static final String LIS_LAST_ID_INCR_KEY = "id:generate:lis:id:incr";
    private static final String LIS_CURRENT_DATE_KEY = "id:generate:lis:currentDate";
@@ -68,16 +69,35 @@
    private static long lastTimestamp = -1;
    private static final Random random = new Random();
    public static synchronized String getTjNumber() {
        long timestamp = System.currentTimeMillis();  // 获取当前时间戳(毫秒)
//    public static synchronized String getTjNumber() {
//        long timestamp = System.currentTimeMillis();  // 获取当前时间戳(毫秒)
//
//        // 如果时间戳和上次生成的时间戳相同,生成一个新的随机数
//        if (timestamp == lastTimestamp) {
//            return String.format("%09d", (timestamp % 1000000000) + random.nextInt(900) + 100);
//        } else {
//            lastTimestamp = timestamp;  // 更新最后生成时间戳
//            return String.format("%09d", (timestamp % 1000000000) + random.nextInt(900) + 100);
//        }
//    }
        // 如果时间戳和上次生成的时间戳相同,生成一个新的随机数
        if (timestamp == lastTimestamp) {
            return String.format("%09d", (timestamp % 1000000000) + random.nextInt(900) + 100);
    public  synchronized String getTjNumber() {
        String currentDate = new SimpleDateFormat("yyyyMMdd").format(new Date());
        String storedDate = stringRedisTemplate.opsForValue().get(LIS_CURRENT_DATE_KEY);
        String lastIdStr = stringRedisTemplate.opsForValue().get(TJH_LAST_ID_KEY);
        if (StrUtil.isBlank(lastIdStr))lastIdStr = "0";
        int lastId;
        if (storedDate == null || !storedDate.equals(currentDate)) {
            lastId = 1;
            stringRedisTemplate.opsForValue().set(TJH_LAST_ID_KEY, String.valueOf(lastId));
            stringRedisTemplate.opsForValue().set(LIS_CURRENT_DATE_KEY, currentDate);
        } else {
            lastTimestamp = timestamp;  // 更新最后生成时间戳
            return String.format("%09d", (timestamp % 1000000000) + random.nextInt(900) + 100);
            lastId = Integer.parseInt(lastIdStr) + 1;
            stringRedisTemplate.opsForValue().set(TJH_LAST_ID_KEY, String.valueOf(lastId));
        }
        String yyMMdd = currentDate.substring(2);
        return String.format("%s%05d", yyMMdd, lastId);
    }
ltkj-common/src/main/java/com/ltkj/common/utils/PDFDocumentUtil.java
@@ -95,7 +95,7 @@
                        map.put(EncodeHintType.CHARACTER_SET,"utf-8");
                        BitMatrix encode = null;
                        try {
                            encode = new MultiFormatWriter().encode(tjNumber, BarcodeFormat.CODE_128, 300, 100, map);
                            encode = new MultiFormatWriter().encode(tjNumber, BarcodeFormat.CODE_128, 500, 100, map);
                        } catch (WriterException e) {
                            e.printStackTrace();
                        }
@@ -243,7 +243,7 @@
     * @throws DocumentException
     * @throws IOException
     */
    public static void makeTjInfo(Document document,List<Map<String ,String>> data) throws DocumentException, IOException {
    public static void makeTjInfo(Document document,List<Map<String ,Object>> data) throws DocumentException, IOException {
        PdfPTable table1 = new PdfPTable(7);
        table1.setWidthPercentage(100);
        float[] columnWidths = {1.5f, 3, 3, 6, 1.5f, 3, 3};
ltkj-framework/pom.xml
@@ -3,7 +3,7 @@
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ltkj_peis_region</artifactId>
        <artifactId>ltkj</artifactId>
        <groupId>com.ltkj</groupId>
        <version>3.8.4</version>
    </parent>
ltkj-framework/src/main/java/com/ltkj/framework/aspectj/DataSourceAspect.java
@@ -2,7 +2,6 @@
import java.util.Objects;
import com.ltkj.db.DataSourceContextHolder;
import com.ltkj.framework.datasource.DynamicDataSourceContextHolder;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
@@ -39,14 +38,14 @@
        DataSource dataSource = getDataSource(point);
        if (StringUtils.isNotNull(dataSource)) {
            DataSourceContextHolder.setDataSourceKey(dataSource.value().name());
            DynamicDataSourceContextHolder.setDataSourceType(dataSource.value().name());
        }
        try {
            return point.proceed();
        } finally {
            // 销毁数据源 在执行方法之后
            DataSourceContextHolder.clear();
            DynamicDataSourceContextHolder.clearDataSourceType();
        }
    }
ltkj-framework/src/main/java/com/ltkj/framework/config/DruidConfig.java
@@ -5,6 +5,7 @@
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import javax.annotation.Resource;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
@@ -13,12 +14,14 @@
import javax.servlet.ServletResponse;
import javax.sql.DataSource;
import com.ltkj.db.HospDynamicDataSource;
import com.ltkj.framework.config.properties.DruidProperties;
import com.ltkj.framework.datasource.DynamicDataSource;
import com.ltkj.system.service.ISysConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -35,7 +38,7 @@
 *
 * @author ltkj
 */
//@Configuration
@Configuration
@Slf4j
public class DruidConfig {
@@ -47,29 +50,7 @@
    private  String path;
    private static final String DEFAULT_DATA_SOURCE_KEY = "default"; // 主库的标识
    private final Map<String, DataSource> dataSourceCache = new HashMap<>(); // 数据源缓存
    // 从 application.yml 中读取主库的配置
//    @Value("${spring.datasource.url}")
    private String primaryUrl;
    private String primaryPort;
    //    @Value("${spring.datasource.username}")
    private String primaryUsername;
    //    @Value("${spring.datasource.password}")
    private String primaryPassword;
    //    @Value("${dbUrl}")
    private String dbUrl;
    private String dbName;
//    @Bean
    @Bean
//    @ConfigurationProperties("spring.datasource.druid.master")
    public DataSource masterDataSource(DruidProperties druidProperties) {
        DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
@@ -150,7 +131,7 @@
        return druidProperties.dataSource(dataSource);
    }
//    @Bean
    @Bean
//    @ConfigurationProperties("spring.datasource.druid.slavehis")
//    @ConditionalOnProperty(prefix = "spring.datasource.druid.slavehis", name = "enabled", havingValue = "true")
    public DataSource slaveHisDataSource(DruidProperties druidProperties) {
@@ -193,7 +174,7 @@
        return druidProperties.dataSource(dataSource);
    }
//    @Bean
    @Bean
//    @ConfigurationProperties("spring.datasource.druid.slavelis")
//    @ConditionalOnProperty(prefix = "spring.datasource.druid.slavelis", name = "enabled", havingValue = "true")
    public DataSource slaveDataLisSource(DruidProperties druidProperties) {
@@ -235,7 +216,7 @@
        return druidProperties.dataSource(dataSource);
    }
//    @Bean
    @Bean
//    @ConfigurationProperties("spring.datasource.druid.slavepacs")
//    @ConditionalOnProperty(prefix = "spring.datasource.druid.slavepacs", name = "enabled", havingValue = "true")
    public DataSource slaveDataPacsSource(DruidProperties druidProperties) {
@@ -278,7 +259,9 @@
        return druidProperties.dataSource(dataSource);
    }
//    @Bean
    @Bean
//    @ConfigurationProperties("spring.datasource.druid.slavepacs")
//    @ConditionalOnProperty(prefix = "spring.datasource.druid.slavepacs", name = "enabled", havingValue = "true")
    public DataSource slaveDataWsSource(DruidProperties druidProperties) {
@@ -363,72 +346,9 @@
        return dataSource;
    }
//    @Bean(name = "hospDynamicDataSources")
//    public DataSource hospDynamicDataSources() {
//        HospDynamicDataSource dynamicDataSource = new HospDynamicDataSource();
//        FileInputStream fis = null;
//        Properties props = new Properties();
//        try {
//            fis = new FileInputStream(url);
//            props.load(fis);
//            fis.close();
//            dbUrl = props.getProperty("ip");
//            dbName = props.getProperty("name");
//            primaryPassword = props.getProperty("password");
//            primaryPort = props.getProperty("prot");
//            primaryUsername = props.getProperty("username");
//        } catch (IOException e) {
//            throw new RuntimeException("读取配置文件失败", e);
//        }
//        String url = "jdbc:mysql://" + dbUrl + ":" + primaryPort + "/" + dbName;
//        // 初始化默认数据源为主库
//        dynamicDataSource.addTargetDataSource(DEFAULT_DATA_SOURCE_KEY, createDataSource(url, primaryUsername, primaryPassword));
//
//        dynamicDataSource.setDefaultTargetDataSource(dynamicDataSource.getTargetDataSources().get(DEFAULT_DATA_SOURCE_KEY)); // 设置默认数据源
//        return dynamicDataSource;
//    }
    // 根据用户 ID 动态获取数据源
    public void addDataSource(String dbName) {
        FileInputStream fis = null;
        Properties props = new Properties();
        try {
            fis = new FileInputStream(url);
            props.load(fis);
            fis.close();
            dbUrl = props.getProperty("ip");
            primaryPassword = props.getProperty("password");
            primaryPort = props.getProperty("prot");
            primaryUsername = props.getProperty("username");
        } catch (IOException e) {
            throw new RuntimeException("读取配置文件失败", e);
        }
        // 检查缓存中是否已经存在该数据源
        if (!dataSourceCache.containsKey(dbName)) {
            synchronized (this) {
                String url = "jdbc:mysql://" + dbUrl + ":" + primaryPort + "/" + dbName;
                DataSource dataSource = createDataSource(url, primaryUsername, primaryPassword);
                dataSourceCache.put(dbName, dataSource);
                DynamicDataSource dynamicDataSource = dataSource(dataSource);
                dynamicDataSource.addTargetDataSource(dbName, dataSource);
            }
        }
    }
    // 动态创建数据源
    private DataSource createDataSource(String url, String username, String password) {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
//    @Bean(name = "dynamicDataSource")
//    @Primary
    @Bean(name = "dynamicDataSource")
    @Primary
    public DynamicDataSource dataSource(DataSource masterDataSource) {
        Map<Object, Object> targetDataSources = new HashMap<>();
        targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource);
@@ -458,8 +378,8 @@
     * 去除监控页面底部的广告
     */
    @SuppressWarnings({"rawtypes", "unchecked"})
//    @Bean
//    @ConditionalOnProperty(name = "spring.datasource.druid.statViewServlet.enabled", havingValue = "true")
    @Bean
    @ConditionalOnProperty(name = "spring.datasource.druid.statViewServlet.enabled", havingValue = "true")
    public FilterRegistrationBean removeDruidFilterRegistrationBean(DruidStatProperties properties) {
        // 获取web监控页面的参数
        DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
ltkj-framework/src/main/java/com/ltkj/framework/config/SecurityConfig.java
@@ -116,7 +116,7 @@
                // 静态资源,可匿名访问
                .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
                .antMatchers("/jmreport/**","/lis/**","/pacs/**","/callBack/**").anonymous()
                .antMatchers("/jmreport/**","/lis/**","/pacs/**","/callBack/**","/hosp/order/signOrderInfo").anonymous()
                // 除上面外的所有请求全部需要鉴权认证
                .anyRequest().authenticated()
                .and()
ltkj-framework/src/main/java/com/ltkj/framework/config/TokenInterceptor.java
@@ -4,7 +4,6 @@
import com.google.gson.Gson;
import com.ltkj.hosp.domain.Wxuser;
import io.jsonwebtoken.Claims;
import org.springframework.core.annotation.Order;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
@@ -15,7 +14,6 @@
 * @Author: 西安路泰科技有限公司/赵佳豪
 * @Date: 2022/11/17 10:11
 */
@Order(-1)
//拦截器(校验token)
public class TokenInterceptor implements HandlerInterceptor {
    @Override
ltkj-framework/src/main/java/com/ltkj/framework/config/WebConfig.java
@@ -1,10 +1,6 @@
package com.ltkj.framework.config;
//import com.ltkj.framework.interceptor.DBChangeInterceptor;
import com.ltkj.framework.interceptor.DBChangeInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@@ -15,10 +11,6 @@
//定义拦截器
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private DBChangeInterceptor dbChangeInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new TokenInterceptor())
@@ -30,23 +22,8 @@
                        "/cus/package/projectListByPacId/**",
                        "/cus/hospital/getHospList",
                        "/lis/**","/api/His/**","/pacs/**",
                        "/callBack/**"
                });
        registry.addInterceptor(dbChangeInterceptor)
                .addPathPatterns("/**")
                .excludePathPatterns(new String[]{
                        "/system/dict/data/**",
                        "/system/dict/type/**",
                        "/captchaImage","/getCaptchaConfigKey/**",
                        "/system/role/execUpdateSql"
//                        ,
//                        "/login", "/register", "/captchaImage","/cus/**","/getCaptchaConfigKey","/report/jmreport/**",
//                        "/sqlserver/getdata/**","/api/His/**","/system/config/zx","/system/config/gxxmpym","/system/report/savePdf",
//                        "/system/dyjl/saveGjddyjl","/system/dyjl/saveBlGjddyjl","/check/ceshi","/check/pacs","/check/ceshicc",
//                        "/common/uploadImgExe","/common/listExeVal","/pacs/InvokeRisService/**","/check/dataSynchronizationApi",
//                        String.valueOf(HttpMethod.GET), "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**",
//                        "/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**","/jmreport/**","/lis/**","/pacs/**","/callBack/**"
                        "/callBack/**",
                        "/hosp/order/signOrderInfo"
                });
    }
}
ltkj-framework/src/main/java/com/ltkj/framework/datasource/DynamicDataSource.java
@@ -1,7 +1,6 @@
package com.ltkj.framework.datasource;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import javax.sql.DataSource;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
@@ -12,7 +11,6 @@
 * @author ltkj
 */
public class DynamicDataSource extends AbstractRoutingDataSource {
    private final Map<Object, Object> targetDataSources = new ConcurrentHashMap<>(); // 存储所有数据源
    public DynamicDataSource(DataSource defaultTargetDataSource, Map<Object, Object> targetDataSources) {
        super.setDefaultTargetDataSource(defaultTargetDataSource);
        super.setTargetDataSources(targetDataSources);
@@ -21,23 +19,6 @@
    @Override
    protected Object determineCurrentLookupKey() {
        System.out.println("当前数据源 -> "+ DynamicDataSourceContextHolder.getDataSourceType());
        return DynamicDataSourceContextHolder.getDataSourceType();
    }
    public void addTargetDataSource(String key, DataSource dataSource) {
        targetDataSources.put(key, dataSource);
        super.setTargetDataSources(new ConcurrentHashMap<>(targetDataSources)); // 更新目标数据源
        super.afterPropertiesSet(); // 重新初始化数据源
    }
    // 允许外部访问所有目标数据源
    @Override
    public void setTargetDataSources(Map<Object, Object> targetDataSources) {
        super.setTargetDataSources(targetDataSources);
    }
    public Map<Object, Object> getTargetDataSources() {
        return targetDataSources; // 获取所有目标数据源
    }
}
}
ltkj-framework/src/main/java/com/ltkj/framework/datasource/DynamicDataSourceContextHolder.java
@@ -1,6 +1,5 @@
package com.ltkj.framework.datasource;
import com.ltkj.db.DataSourceContextHolder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -23,23 +22,20 @@
     */
    public static void setDataSourceType(String dsType) {
        log.info("切换到{}数据源", dsType);
//        CONTEXT_HOLDER.set(dsType);
        DataSourceContextHolder.setDataSourceKey(dsType);
        CONTEXT_HOLDER.set(dsType);
    }
    /**
     * 获得数据源的变量
     */
    public static String getDataSourceType() {
//        return CONTEXT_HOLDER.get();
        return DataSourceContextHolder.getDataSourceKey();
        return CONTEXT_HOLDER.get();
    }
    /**
     * 清空数据源变量
     */
    public static void clearDataSourceType() {
//        CONTEXT_HOLDER.remove();
        DataSourceContextHolder.clear();
        CONTEXT_HOLDER.remove();
    }
}
ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysLoginService.java
@@ -95,7 +95,6 @@
     */
    public String login(String username, String password, Boolean type,String code,String uuid) {
        String aSwitch = configService.selectConfigByKey("captcha_switch");
        if(null !=aSwitch && aSwitch.equalsIgnoreCase("Y")){
            String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;
@@ -139,8 +138,8 @@
        }
        AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
        LoginUser loginUser = (LoginUser) authentication.getPrincipal();
        recordLoginInfo(Long.valueOf(loginUser.getUserId()));
        //校验商家过期否
        if (secretKeyLogin)
        {
ltkj-generator/pom.xml
@@ -3,7 +3,7 @@
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ltkj_peis_region</artifactId>
        <artifactId>ltkj</artifactId>
        <groupId>com.ltkj</groupId>
        <version>3.8.4</version>
    </parent>
@@ -37,4 +37,4 @@
    </dependencies>
</project>
</project>
ltkj-hosp/pom.xml
@@ -3,7 +3,7 @@
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ltkj_peis_region</artifactId>
        <artifactId>ltkj</artifactId>
        <groupId>com.ltkj</groupId>
        <version>3.8.4</version>
    </parent>
@@ -28,12 +28,6 @@
        <dependency>
            <groupId>com.ltkj</groupId>
            <artifactId>ltkj-common</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>com.alibaba</groupId>
                    <artifactId>druid</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- 集成积木报表-->
@@ -41,23 +35,6 @@
            <groupId>org.jeecgframework.jimureport</groupId>
            <artifactId>jimureport-spring-boot-starter</artifactId>
            <version>1.5.4</version>
            <exclusions>
                <exclusion>
                    <groupId>com.alibaba</groupId>
                    <artifactId>druid</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- 阿里数据库连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
    </dependencies>
ltkj-hosp/src/main/java/com/ltkj/hosp/domain/DictHosp.java
@@ -173,9 +173,6 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date expirationTime;
//    数据库名
    private String dbname;
    @Override
    public String toString() {
ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TbTransitionMapper.java
@@ -76,7 +76,8 @@
    public boolean delTbBycusCardIdAndProId(@Param("cdId") String cdId,@Param("proId")String proId);
    @Update("UPDATE tb_transition a SET "+
            "a.tj_num=null" +
            "a.tj_num=null," +
            "a.card_id=0" +
            " WHERE a.tj_num=#{tjNum}")
    boolean updateTbTransitionByTjNum(String tjNum);
@@ -376,4 +377,16 @@
    @Select("SELECT SUM(a.ord_price) FROM tb_transition a WHERE  a.tj_num=#{tjNum} AND a.parent_pro_id=#{proId}")
    BigDecimal getTbTransitionOrdPriceByTjNumAndParentId(@Param("tjNum")String tjNum,@Param("proId")String proId);
    @Select("SELECT SUM(a.ord_price) FROM tb_transition a WHERE a.tj_num=#{tjNum} ")
    BigDecimal sumTbTransitionOrdPriceByTjNum(@Param("tjNum")String tjNum);
    @Select("SELECT SUM(a.ord_price) FROM tb_transition a WHERE a.cus_id=#{tjNum} and  isnull(a.tj_num)")
    BigDecimal sumTbTransitionOrdPriceByTjNumIsNull(@Param("tjNum")String tjNum);
    @Select("SELECT SUM(a.now_price) FROM tb_transition a WHERE  a.tj_num=#{tjNum}")
    BigDecimal sumTbTransitionNowPriceByTjNum(@Param("tjNum")String tjNum);
    @Select("SELECT SUM(a.now_price) FROM tb_transition a WHERE  a.cus_id=#{tjNum} and  isnull(a.tj_num)")
    BigDecimal sumTbTransitionNowPriceByTjNumIsNull(@Param("tjNum")String tjNum);
}
ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TestMapper.java
@@ -310,7 +310,7 @@
//    @DataSource(value = DataSourceType.SLAVE_WS)
    @Select("SELECT aa.tjh,ws.pro_id tmh,aa.bbbh,aa.bbmc,ws.pro_id xmid,aa.xmmc,aa.sqsj,aa.sqys,aa.jgsj,aa.sqdh,aa.sqrxm,aa.sqrdm,aa.jybgjg,aa.create_time FROM tj_wsxm ws LEFT JOIN (\n" +
    @Select("SELECT aa.tjh,CONCAT(aa.tjh,RIGHT(ws.pro_id, 6)) tmh,aa.bbbh,aa.bbmc,ws.pro_id xmid,aa.xmmc,aa.sqsj,aa.sqys,aa.jgsj,aa.sqdh,aa.sqrxm,aa.sqrdm,aa.jybgjg,aa.create_time FROM tj_wsxm ws LEFT JOIN (\n" +
            "   SELECT\n" +
            "        a.brid tjh,\n" +
            "         a.brid tmh,\n" +
@@ -333,7 +333,7 @@
    List<LtkjHysqd> getWsxmLtkjHysqdByLisVi(String tjNum);
//    @DataSource(value = DataSourceType.SLAVE_WS)
    @Select("SELECT ws.pro_id tmh,aa.jcxmid,aa.jcxm,NULL tdh,aa.jyjg,null jgdw,null fwzdz,null fwzgz,aa.jysj,aa.shsj,NULL shys,aa.shysmc,NULL tpurl,NULL ycbz,aa.create_time\n" +
    @Select("SELECT CONCAT(aa.tmh,RIGHT(ws.pro_id, 6)) tmh,aa.jcxmid,aa.jcxm,NULL tdh,aa.jyjg,null jgdw,null fwzdz,null fwzgz,aa.jysj,aa.shsj,NULL shys,aa.shysmc,NULL tpurl,NULL ycbz,aa.create_time\n" +
            " FROM tj_wsxm ws \n" +
            " LEFT JOIN (\n" +
            "   SELECT distinct a.brid tmh,a.xmbm jcxmid,a.xmmc jcxm,NULL tdh,a.result jyjg,null jgdw,null fwzdz,null fwzgz,null fwz,a.bgsj jysj,a.bgys jyys,a.bgsj shsj," +
@@ -343,8 +343,14 @@
        @DataSource(value = DataSourceType.SLAVE_WS)
    @Select("SELECT * from  lis_result a where  a.brid=#{tjNum}")
//        @DataSource(value = DataSourceType.SLAVE_WS)
//    @Select("SELECT * from  lis_result a where  a.brid=#{tjNum}")
//    List<Aws> getWsxmLtkjHysqdByLisViBySLAVEWS(String tjNum);
    @DataSource(value = DataSourceType.SLAVE_WS)
    @Select("select t.brid,t.xmbm,t.xmmc,t.result,t.gdpd ,t.xmckz,t.dw,t.bgys,max(bgsj) bgsj\n" +
            "  from lis_result t WHERE t.brid=#{tjNum} \n" +
            "  group by t.brid,t.xmbm,t.xmmc,t.result,t.gdpd,t.xmckz,t.dw,t.bgys")
    List<Aws> getWsxmLtkjHysqdByLisViBySLAVEWS(String tjNum);
ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjOrderMapper.java
@@ -221,21 +221,67 @@
     * @param tjNumber 体检单号
     * @return
     */
    @Select("SELECT  @num :=  @num + 1 AS xh, d.dept_name ksmc, d.official_web ksdz, e.tjxm FROM sys_dept d JOIN ( select aa.ksmc,GROUP_CONCAT( DISTINCT aa.pro_name ORDER BY aa.pro_name DESC SEPARATOR ';' ) tjxm  from ( SELECT (case when f.ksmc in ('临检室','化验室','','') or c.pro_name like '%测定%' then '检验科'      when c.pro_name like '%心电图%' then '心电图室'  when f.ksmc='x光室' or c.pro_name like '%X线摄影%'  then '放射科'  when c.pro_name like '%色觉%' then '眼科' \t\t\t\twhen c.pro_name like '%超%' or c.pro_name like '%多普勒%' then 'B超室'  when (replace(f.ksmc,' ','')='' or f.ksmc is null) and c.dept_id<>'100' then  d.dept_name when c.pro_name like '%CT%' then 'CT室'  else '体检中心' end ) ksmc, c.pro_name FROM tj_order a JOIN tj_order_detail b ON b.order_id = a.order_id JOIN tj_project c ON c.pro_id = b.pro_id  left join his_mxfyxm e on e.mxfyxmbm=c.his_xmbm left join ltkj_his_dept f on f.ksbm = CONCAT('00',(case when e.hsks is null then '' else e.hsks end)) join sys_dept d on d.dept_id=c.dept_id WHERE a.tj_number =  #{tjNumber} ) aa  GROUP BY ksmc ) e ON e.ksmc = d.dept_name , (SELECT @num := 0) a WHERE d.parent_id = '100' ORDER BY xh")
    List<Map<String ,String >> selectDjdInfo(@Param("tjNumber")String tjNumber);
//    @Select("SELECT  @num :=  @num + 1 AS xh, d.dept_name ksmc, d.official_web ksdz, e.tjxm FROM sys_dept d JOIN " +
//            "( select aa.ksmc,GROUP_CONCAT( DISTINCT aa.pro_name ORDER BY aa.pro_name DESC SEPARATOR ';' ) tjxm  from " +
//            "( SELECT (case when f.ksmc in ('临检室','化验室','','') or c.pro_name like '%测定%' then '检验科'     " +
//            " when c.pro_name like '%心电图%' then '心电图室'  when f.ksmc='x光室' or c.pro_name like '%X线摄影%'  then '放射科'  when c.pro_name like '%色觉%' then '眼科' " +
//            "\t\t\t\twhen c.pro_name like '%超%' or c.pro_name like '%多普勒%' then 'B超室'  when (replace(f.ksmc,' ','')='' or f.ksmc is null) and c.dept_id<>'100' then " +
//            " d.dept_name when c.pro_name like '%CT%' then 'CT室'  else '体检中心' end ) ksmc, c.pro_name FROM tj_order a JOIN tj_order_detail b ON b.order_id = a.order_id " +
//            "JOIN tj_project c ON c.pro_id = b.pro_id  left join his_mxfyxm e on e.mxfyxmbm=c.his_xmbm left join ltkj_his_dept f on f.ksbm = CONCAT('00'," +
//            "(case when e.hsks is null then '' else e.hsks end)) join sys_dept d on d.dept_id=c.dept_id WHERE a.tj_number =  #{tjNumber} ) aa  GROUP BY ksmc ) e ON e.ksmc = " +
//            "d.dept_name , (SELECT @num := 0) a WHERE d.parent_id = '100' ORDER BY xh")
//    List<Map<String ,String >> selectDjdInfo(@Param("tjNumber")String tjNumber);
    @Select("SELECT \n" +
            "    ROW_NUMBER() OVER (ORDER BY d.djd_num) AS xh, " +
            "    REPLACE(d.dept_name, '门诊', '') AS ksmc,\n" +
            "    ifnull(d.official_web,'') AS ksdz,\n" +
            "    e.tjxm,\n" +
            "    e.tjjg\n" +
            "FROM sys_dept d\n" +
            "JOIN (\n" +
            "    SELECT\n" +
            "        c.dept_id,\n" +
            "        GROUP_CONCAT(DISTINCT c1.pro_name ORDER BY c1.pro_name DESC SEPARATOR ';') AS tjxm,\n" +
            "        SUM(b.ord_price) AS tjjg\n" +
            "    FROM tb_transition b\n" +
            "    JOIN tj_project c ON c.pro_id = b.parent_pro_id\n" +
            "    JOIN tj_project c1 ON c1.pro_id = b.parent_pro_id\n" +
            "    WHERE trim(b.tj_num) = #{tjNumber} \n" +
            "      AND c.pro_parent_id = 0\n" +
            "      AND c1.pro_name NOT IN ('主任医师诊查', '(tj)体检费(物理检查)')\n" +
            "      AND c1.pro_name NOT LIKE '%主任医师诊查%'\n" +
            "    GROUP BY c.dept_id\n" +
            ") e ON e.dept_id = d.dept_id\n" +
            "ORDER BY d.djd_num")
    List<Map<String ,Object >> selectDjdInfo(@Param("tjNumber")String tjNumber);
    /**
     * 查询导检单用户信息
     * @param tjNumber
     * @return
     */
    @Select("select c.tj_number tjh,a.cus_name tjname, b.dict_label sex,a.create_time tjsj,ifnull(d.cn_name,'') dwmc,a.cus_phone lxdh\n" +
    @Select("select c.tj_number tjh,a.cus_name tjname, b.dict_label sex,c.create_time tjsj,ifnull(c.firm_name,'') dwmc,a.cus_phone lxdh,ifnull(c.firm_dept_name,'') dwbm,\n" +
            "ifnull((select dict_label from sys_dict_data where dict_type ='dict_team' and status=0 and dict_value=c.tj_type),'') tjlx,\n" +
            "( (\n" +
            "  SELECT\n" +
            "    sum( b1.ord_price ) \n" +
            "  FROM\n" +
            "    tb_transition b1\n" +
            "    JOIN tj_project c1 ON c1.pro_id = b1.parent_pro_id \n" +
            "    AND c1.pro_parent_id = 0 \n" +
            "  WHERE\n" +
            "    b1.tj_num = c.tj_number \n" +
            "  )*(IFNULL(c.discount,10)/10)) tjze,c.card_id ,CONCAT(cast(a.age as char),e.dict_label) nl,(SELECT tb.pac_name FROM tb_transition tb" +
            " WHERE tb.tj_num = c.tj_number GROUP BY tb.pac_id)tcmc,a.his_jzkh\n" +
            "from tj_order c \n" +
            " join tj_customer a on  a.cus_id= c.user_id \n" +
            " join (select dict_value,dict_label from  sys_dict_data where dict_type='sys_user_sex') b on b.dict_value = a.cus_sex\n" +
            " left join dict_comp d on d.drug_manufacturer_id = c.firm_id\n" +
            "where c.tj_number=#{tjNumber}")
    Map<String ,Object > selectDjdUserInfo(@Param("tjNumber")String tjNumber);
            "\tjoin tj_customer a on  a.cus_id= c.user_id \n" +
            "  join (select dict_value,dict_label from  sys_dict_data where dict_type='sys_user_sex') b on b.dict_value = a.cus_sex\n" +
            "\tleft join dict_comp d on d.drug_manufacturer_id = c.firm_id\n" +
            "join (select dict_label,dict_value from sys_dict_data where dict_type='dict_ageunit') e  on e.dict_value = a.age_unit\n" +
            "where trim(c.tj_number)=#{tjNumber}")
    Map<String ,Object > selectDjdUserInfo(@Param("tjNumber") String tjNumber);
    @Select("SELECT a.sqdh FROM ltkj_jianchajianyan_tree a WHERE a.card_id=#{cardId} AND a.type='检查' GROUP BY a.sqdh")
ltkj-hosp/src/main/java/com/ltkj/hosp/service/ITjOrderService.java
@@ -138,7 +138,7 @@
    String  isPayByTjNum(String orderId);
    List<Map<String ,String >> selectDjdInfo(String tjNumber);
    List<Map<String ,Object >> selectDjdInfo(String tjNumber);
    Map<String ,Object > selectDjdUserInfo(String tjNumber);
ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/LtkjExamJcsqdServiceImpl.java
@@ -37,6 +37,8 @@
    private LtkjExamJcsqdMapper mapper;
    @Qualifier(value = "slaveHisDataSource")
    @Autowired
    private DataSource dataSource;
    @Override
ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjOrderServiceImpl.java
@@ -11,6 +11,7 @@
import com.ltkj.hosp.service.ITjOrderService;
import com.ltkj.hosp.service.ITjPackageService;
import com.ltkj.hosp.vodomain.LineChartsVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ltkj.hosp.mapper.TjOrderMapper;
@@ -23,6 +24,7 @@
 * @date 2022-11-21
 */
@Service
@Slf4j
public class TjOrderServiceImpl extends ServiceImpl<TjOrderMapper, TjOrder> implements ITjOrderService {
    @Autowired
    private TjOrderMapper tjOrderMapper;
@@ -277,12 +279,14 @@
    }
    @Override
    public List<Map<String, String>> selectDjdInfo(String tjNumber) {
    public List<Map<String, Object>> selectDjdInfo(String tjNumber) {
        log.info("传递进来的体检号为: "+tjNumber);
        return tjOrderMapper.selectDjdInfo(tjNumber);
    }
    @Override
    public Map<String, Object> selectDjdUserInfo(String tjNumber) {
        log.info("传递进来的体检号为: "+tjNumber);
        return tjOrderMapper.selectDjdUserInfo(tjNumber);
    }
ltkj-hosp/src/main/resources/mapper/hosp/DictHospMapper.xml
@@ -31,7 +31,6 @@
        <result property="updateByName" column="update_by_name"/>
        <result property="imgbase64" column="imgBase64"/>
        <result property="deleted" column="deleted"/>
<!--        <result property="dbname" column="dbname"/>-->
    </resultMap>
    <sql id="selectDictHospVo">
@@ -192,4 +191,4 @@
            #{hospAreaId}
        </foreach>
    </delete>
</mapper>
</mapper>
ltkj-quartz/pom.xml
@@ -3,7 +3,7 @@
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ltkj_peis_region</artifactId>
        <artifactId>ltkj</artifactId>
        <groupId>com.ltkj</groupId>
        <version>3.8.4</version>
    </parent>
@@ -37,4 +37,4 @@
    </dependencies>
</project>
</project>
ltkj-system/pom.xml
@@ -3,7 +3,7 @@
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ltkj_peis_region</artifactId>
        <artifactId>ltkj</artifactId>
        <groupId>com.ltkj</groupId>
        <version>3.8.4</version>
    </parent>
@@ -22,4 +22,4 @@
            <artifactId>ltkj-common</artifactId>
        </dependency>
    </dependencies>
</project>
</project>