da7dd957342aa96b31f17e3d61792896e006d6e2..027c1328165a0d37a778ec7f58760bb0fe1ffebb
2025-07-30 zjh
zjh20250730-1
027c13 对比 | 目录
2025-07-30 zhaowenxuan
同步his项目存储过程
c29293 对比 | 目录
2025-07-30 zhaowenxuan
结算价格处理
179442 对比 | 目录
2025-07-30 zhaowenxuan
假数据修改
270ae4 对比 | 目录
11个文件已修改
1个文件已添加
308 ■■■■■ 已修改文件
ltkj-admin/src/main/java/com/ltkj/web/config/captcha/LogTestRunner.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisApiController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisApiGetMethodService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjOrderController.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjProjectController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/resources/logback.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/resources/sql/陕健医.sql 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjProject.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjProjectMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/service/ITjProjectService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjProjectServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/resources/mapper/TjProjectMapper.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/config/captcha/LogTestRunner.java
New file
@@ -0,0 +1,16 @@
package com.ltkj.web.config.captcha;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class LogTestRunner implements CommandLineRunner {
    private static final Logger logger = LoggerFactory.getLogger(LogTestRunner.class);
    @Override
    public void run(String... args) {
        logger.info("=== æ‰‹åŠ¨è§¦å‘æ—¥å¿—å½’æ¡£æµ‹è¯• ===");
    }
}
ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisApiController.java
@@ -156,7 +156,7 @@
        }
        List<Map<String, Object>> jcList = testMapper.getLisJyList(name, mzh, start, end);
        return AjaxResult.success(jcList);
//        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\":\"血液分析\"}]";
//        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\":\"血液分析\"},{\"deptName\":\"内科\",\"gender\":\"女\",\"brid\":\"sqd998877665544\",\"checkParts\":\"血液\",\"project\":\"0.8-1.5\",\"examinationDate\":\"2025-02-15 10:22:10\",\"proResult\":\"1.3\",\"name\":\"李小红\",\"patientAge\":\"32\",\"mzh\":\"810002233112233\",\"reportDoctorName\":\"刘医生\",\"proName\":\"血液分析\",\"conclusion\":\"正常\",\"tjStandardGtValue\":\"1 - 5\",\"company\":\"毫克\",\"checkDoctorName\":\"周医生\",\"jcxmid\":\"456\",\"shys\":\"王主任\"},{\"deptName\":\"急诊科\",\"gender\":\"男\",\"brid\":\"sqd223344556677\",\"checkParts\":\"血液\",\"project\":\"1.2-2.5\",\"examinationDate\":\"2025-02-18 08:30:45\",\"proResult\":\"2.6\",\"name\":\"张伟\",\"patientAge\":\"45\",\"mzh\":\"810009998877665\",\"reportDoctorName\":\"张医生\",\"proName\":\"血液分析\",\"conclusion\":\"偏高\",\"tjStandardGtValue\":\"1 - 5\",\"company\":\"毫克\",\"checkDoctorName\":\"李医生\",\"jcxmid\":\"789\",\"shys\":\"孙医生\"},{\"deptName\":\"外科\",\"gender\":\"男\",\"brid\":\"sqd123456789000\",\"checkParts\":\"血液\",\"project\":\"0.5-1.5\",\"examinationDate\":\"2025-02-20 12:10:00\",\"proResult\":\"0.4\",\"name\":\"王磊\",\"patientAge\":\"38\",\"mzh\":\"810003334455667\",\"reportDoctorName\":\"赵医生\",\"proName\":\"血液分析\",\"conclusion\":\"偏低\",\"tjStandardGtValue\":\"1 - 5\",\"company\":\"毫克\",\"checkDoctorName\":\"钱医生\",\"jcxmid\":\"321\",\"shys\":\"谢主任\"},{\"deptName\":\"肿瘤科\",\"gender\":\"女\",\"brid\":\"sqd667788990011\",\"checkParts\":\"血液\",\"project\":\"1.0-2.0\",\"examinationDate\":\"2025-02-22 14:05:23\",\"proResult\":\"1.9\",\"name\":\"陈丽\",\"patientAge\":\"50\",\"mzh\":\"810001122334455\",\"reportDoctorName\":\"邓医生\",\"proName\":\"血液分析\",\"conclusion\":\"正常\",\"tjStandardGtValue\":\"1 - 5\",\"company\":\"毫克\",\"checkDoctorName\":\"章医生\",\"jcxmid\":\"654\",\"shys\":\"陈主任\"},{\"deptName\":\"内分泌科\",\"gender\":\"男\",\"brid\":\"sqd334455667788\",\"checkParts\":\"血液\",\"project\":\"0.9-1.8\",\"examinationDate\":\"2025-02-25 16:45:00\",\"proResult\":\"1.5\",\"name\":\"高强\",\"patientAge\":\"28\",\"mzh\":\"810005566778899\",\"reportDoctorName\":\"韩医生\",\"proName\":\"血液分析\",\"conclusion\":\"正常\",\"tjStandardGtValue\":\"1 - 5\",\"company\":\"毫克\",\"checkDoctorName\":\"范医生\",\"jcxmid\":\"987\",\"shys\":\"姚医生\"}]";
//        return AjaxResult.success(JSONUtil.parseArray(json1));
    }
ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisApiGetMethodService.java
@@ -496,9 +496,9 @@
        }
        deleteSqlBuilder.delete(deleteSqlBuilder.length() - 5, deleteSqlBuilder.length());
        Statement statement = connection.prepareStatement(deleteSqlBuilder.toString());
        log.info("HIS数据保存类 æ‰§è¡Œåˆ é™¤ ->{}",deleteSqlBuilder.toString());
//        log.info("HIS数据保存类 æ‰§è¡Œåˆ é™¤ ->{}",deleteSqlBuilder.toString());
        int i = statement.executeUpdate(deleteSqlBuilder.toString());
        log.info("HIS数据保存类 åˆ é™¤æ¡æ•° ->{}",i);
//        log.info("HIS数据保存类 åˆ é™¤æ¡æ•° ->{}",i);
        statement.close();
        insertSqlBuilder.append("insert_time, ");
        insertSqlBuilder.append("request_params, ");
@@ -536,11 +536,11 @@
//                break;
//        }
        statement = connection.createStatement();
        log.info("HIS数据保存类 æ‰§è¡Œæ’å…¥ ->{}",insertSqlBuilder.toString());
//        log.info("HIS数据保存类 æ‰§è¡Œæ’å…¥ ->{}",insertSqlBuilder.toString());
        boolean execute = statement.execute(insertSqlBuilder.toString());
        if (!execute){
            int updateCount = statement.getUpdateCount();
            log.info("HIS数据保存类 æ‰§è¡Œæ’入成功 å½±å“è¡Œæ•°->{}",updateCount);
//            log.info("HIS数据保存类 æ‰§è¡Œæ’入成功 å½±å“è¡Œæ•°->{}",updateCount);
        }
        statement.close();
    }
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjOrderController.java
@@ -14,6 +14,7 @@
import java.util.concurrent.*;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
@@ -1575,6 +1576,23 @@
            }
            if(StringUtil.isNotBlank(lycdzjhmxj) && lycdzjhmxj.equalsIgnoreCase("N")){
                BigDecimal paidIn = tjFlowingWater.getPaidIn();
                BigDecimal difference = zongjia.subtract(paidIn);
                if (difference.compareTo(BigDecimal.ZERO) > 0) {
                    log.info("金额多出了:{}",difference);
                    log.info("-----------------------原明细-------------------------");
                    calculateTotalPrice(array,false);
                    log.info("-----------------------新明细-------------------------");
                    adjustPrice(array,paidIn);
                    zongjia = calculateTotalPrice(array,true);
                } else if (difference.compareTo(BigDecimal.ZERO) < 0) {
                    log.info("金额缺少了:{}", difference.abs());
                    log.info("-----------------------原明细-------------------------");
                    calculateTotalPrice(array,false);
                    log.info("-----------------------新明细-------------------------");
                    adjustPrice(array,paidIn);
                    zongjia = calculateTotalPrice(array,true);
                }
                map.put("feiYongInfoList", array);
            }else {
                zongjia = tjFlowingWater.getPaidIn();
@@ -1618,6 +1636,107 @@
        return null;
    }
    /**
     * åˆ¤æ–­æ€»ä»·æ˜¯å¦ä¸€è‡´ æ˜¯å¦è¿›è¡Œä»·æ ¼è¡¥å‡
     * - ä¿è¯æ‰€æœ‰å•价不为负数
     * - å·®é¢åˆ†æ‘Šç­–略为:平均分摊 + è¯¯å·®è¡¥æœ€åŽä¸€é¡¹
     *
     * @param items       his传递的明细项目
     * @param targetTotal æ€»ä»·
     */
    public static void adjustPrice(JSONArray items, BigDecimal targetTotal) {
        BigDecimal actualTotal = BigDecimal.ZERO;
        int size = items.size();
        // è®¡ç®—目前明细集合总价
        for (int i = 0; i < size; i++) {
            JSONObject item = items.getJSONObject(i);
            BigDecimal danJia = item.getBigDecimal("danJia");
            BigDecimal shuliang = item.getBigDecimal("shuliang");
            BigDecimal jieSuanJe = danJia.multiply(shuliang).setScale(2, RoundingMode.HALF_UP);
            item.set("jieSuanJe", jieSuanJe);
            actualTotal = actualTotal.add(jieSuanJe);
        }
        BigDecimal diff = targetTotal.subtract(actualTotal).setScale(2, RoundingMode.HALF_UP);
        // æ— éœ€è°ƒæ•´
        if (diff.compareTo(BigDecimal.ZERO) == 0 || size == 0) {
            return;
        }
        // å‰©ä½™å¾…分摊差额
        BigDecimal remainingDiff = diff;
        for (int i = 0; i < size; i++) {
            JSONObject item = items.getJSONObject(i);
            BigDecimal danJia = item.getBigDecimal("danJia");
            BigDecimal shuliang = item.getBigDecimal("shuliang");
            if (shuliang.compareTo(BigDecimal.ZERO) == 0) continue;
            // åˆ†æ‘Šæ¯”例(平均分)
            // ç¤ºä¾‹ï¼šè‹¥å‰©ä½™å·®é¢ remainingDiff = 1.50,剩余 3 é¡¹ï¼Œå½“前 portion = 1.50 Ã· 3 = 0.50
            BigDecimal portion = remainingDiff.divide(new BigDecimal(size - i), 10, RoundingMode.HALF_UP);
            // åˆ†æ‘Šåˆ°å•价上
            // ç¤ºä¾‹ï¼športion = 0.50,shuliang = 2,deltaPerUnit = 0.25
            BigDecimal deltaPerUnit = portion.divide(shuliang, 10, RoundingMode.HALF_UP);
            // è°ƒæ•´å•价:新单价 = åŽŸå•ä»· + å•位差额
            BigDecimal adjustedDanJia = danJia.add(deltaPerUnit).setScale(2, RoundingMode.HALF_UP);
            // é˜²æ­¢è´Ÿæ•°ä»·æ ¼
            if (adjustedDanJia.compareTo(BigDecimal.ZERO) < 0) {
                adjustedDanJia = BigDecimal.ZERO;
            }
            item.set("danJia", adjustedDanJia);
            BigDecimal adjustedJieSuan = adjustedDanJia.multiply(shuliang).setScale(2, RoundingMode.HALF_UP);
            item.set("jieSuanJe", adjustedJieSuan);
            // è®¡ç®—本次实际调整的差额,继续分摊剩余部分
            BigDecimal oldJieSuan = danJia.multiply(shuliang).setScale(2, RoundingMode.HALF_UP);
            remainingDiff = remainingDiff.subtract(adjustedJieSuan.subtract(oldJieSuan));
        }
        // è‹¥ä»å­˜åœ¨å°é¢å·®é¢ï¼ˆå¦‚由于四舍五入导致),尝试把差额补到最后一项
        if (remainingDiff.abs().compareTo(new BigDecimal("0.01")) > 0) {
            JSONObject lastItem = items.getJSONObject(size - 1);
            BigDecimal danJia = lastItem.getBigDecimal("danJia");
            BigDecimal shuliang = lastItem.getBigDecimal("shuliang");
            if (shuliang.compareTo(BigDecimal.ZERO) != 0) {
                BigDecimal delta = remainingDiff.divide(shuliang, 10, RoundingMode.HALF_UP);
                BigDecimal newDanJia = danJia.add(delta).setScale(2, RoundingMode.HALF_UP);
                if (newDanJia.compareTo(BigDecimal.ZERO) < 0) {
                    newDanJia = BigDecimal.ZERO;
                }
                lastItem.set("danJia", newDanJia);
                BigDecimal newJieSuan = newDanJia.multiply(shuliang).setScale(2, RoundingMode.HALF_UP);
                lastItem.set("jieSuanJe", newJieSuan);
            }
        }
    }
    /**
     * æ˜Žç»†ä»·æ ¼æ—¥å¿—输出
     * @param array
     */
    public static BigDecimal calculateTotalPrice(JSONArray array,Boolean isOverride) {
        BigDecimal total = BigDecimal.ZERO;
        for (int i = 0; i < array.size(); i++) {
            JSONObject obj = array.getJSONObject(i);
            BigDecimal danJia = new BigDecimal(obj.getStr("danJia", "0")).setScale(2, RoundingMode.HALF_UP);
            BigDecimal shuliang = new BigDecimal(obj.getStr("shuliang", "0")).setScale(2, RoundingMode.HALF_UP);
            BigDecimal jieSuanJe = danJia.multiply(shuliang).setScale(2, RoundingMode.HALF_UP);
            obj.set("danJia", danJia);
            obj.set("shuliang", shuliang);
            obj.set("jieSuanJe", jieSuanJe);
            total = total.add(jieSuanJe);
            log.info(String.format("第%d项 -> å•ä»·: %s, æ•°é‡: %s, ç»“算金额: %s", i + 1, danJia, shuliang, jieSuanJe));
        }
        log.info("总价为: {}", total.setScale(2, RoundingMode.HALF_UP));
        if (isOverride) return total.setScale(2, RoundingMode.HALF_UP);
        return null;
    }
    public void addCaiYangDengJi(List<TjOrderDetail> detailList, boolean detailList1, TjOrder order, SysUser sysUser, String jxbz) {
        String lis_tmh_prefix = configService.selectConfigByKey("make_lis_tmh_prefix");
        String config = configService.selectConfigByKey("sfkqdyhis");
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjProjectController.java
@@ -97,7 +97,7 @@
        List<TjProject> tjProjects = tjProjectService.getDxTjProjectList();
        String config = configService.selectConfigByKey("tj_dxsxtj");
        if (null != config && config.equals("N")) {
            tjProjects = tjProjectService.getOpenDxTjProjectList(null);
            tjProjects = tjProjectService.getOpenDxTjProjectList(null, null);
        }
        if (tjProjects != null) {
            for (TjProject project : tjProjects) {
@@ -596,7 +596,7 @@
        List<TjProject> tjProjects = tjProjectService.getDxTjProjectList();
        String config = configService.selectConfigByKey("tj_dxsxtj");
        if (null != config && config.equals("N")) {
            tjProjects = tjProjectService.getOpenDxTjProjectList(null);
            tjProjects = tjProjectService.getOpenDxTjProjectList(null, null);
        }
        String key = configService.selectConfigByKey("is_open_sfxm");
        Map<String, Object> map = new HashMap<>();
@@ -609,11 +609,16 @@
    @GetMapping("/getProParentIdDxListByFenYe")
    @ApiOperation(value = "选择体检项目(所有页面项目)选单项时调用的接口(有分页)")
    public AjaxResult getProParentIdDxListByFenYe(@RequestParam(defaultValue = "1") int page,@RequestParam(defaultValue = "10") int pageSize,String nr) {
    public AjaxResult getProParentIdDxListByFenYe(@RequestParam(defaultValue = "1") int page,@RequestParam(defaultValue = "10") int pageSize,String nr,String xb) {
        List<TjProject> tjProjects = tjProjectService.getDxTjProjectList();
        String config = configService.selectConfigByKey("tj_dxsxtj");
        if(StringUtil.isNotBlank(xb)){
            if(xb.contains("4"))xb="0";
            if(xb.contains("5"))xb="1";
            if(xb.contains("4") && xb.contains("5"))xb=null;
        }
        if (null != config && config.equals("N")) {
            tjProjects = tjProjectService.getOpenDxTjProjectList(nr);
            tjProjects = tjProjectService.getOpenDxTjProjectList(nr,xb);
        }
        String key = configService.selectConfigByKey("is_open_sfxm");
        Map<String, Object> map = new HashMap<>();
ltkj-admin/src/main/resources/logback.xml
@@ -26,7 +26,7 @@
    <!-- æ—¥å¿—输出格式 -->
    <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
    <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %n %msg%n"/>
    <!-- æŽ§åˆ¶å°è¾“出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
@@ -40,7 +40,7 @@
        <!-- å½©è‰²æ—¥å¿— -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %yellow(%-5level) %white([%-50.50class]) >>> %green(%msg) %n
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %yellow(%-5level) %white([%-50.50class]) >>> %green(%n %msg) %n
            </pattern>
        </layout>
    </appender>
ltkj-admin/src/main/resources/sql/ɽ¡Ò½.sql
@@ -82,3 +82,135 @@
  SELECT config_value,'xatlgcyy' as hosp FROM ltkjpeis10_xatlgcyy.`sys_config` WHERE config_key = 'make_lis_tmh_prefix'
  ) a ORDER BY a.config_value DESC;
# åŒæ­¥ä»·æ ¼å­˜å‚¨è¿‡ç¨‹
CREATE TABLE tb_proprice_his
(
    pro_id BIGINT NULL ,
    old_price DECIMAL(10,2) NULL,
    new_price DECIMAL(10,2) NULL,
    pro_parent_id BIGINT NULL,
    time DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE DEFINER=`root`@`%` PROCEDURE `pro_tb_his_project`()
BEGIN
    # æ˜¯å¦å¼€å¯åŒæ­¥his项目
    DECLARE isOpenTbHisProject VARCHAR(10);
    # æ˜¯å¦å¼€å¯åŒæ­¥å…¬å…±å¥—餐
    DECLARE isOpenCommonTaoCan VARCHAR(10);
    # æ˜¯å¦å¼€å¯åŒæ­¥å•位套餐
    DECLARE isOpenDeptTaoCan VARCHAR(10);
    main_block: BEGIN
        # å‡Œäº‘价格同步存储过程,his停用的项目不要从套餐 åˆ†ç»„中删除,只修改价格
        # å­˜å‚¨è¿‡ç¨‹è°ƒç”¨å†™åˆ°ä¸­é—´å±‚,加参数配置默认不同步
        SELECT config_value INTO isOpenTbHisProject FROM `sys_config` WHERE config_key = 'isOpenTbHisProject' LIMIT 1;
        SELECT config_value INTO isOpenCommonTaoCan FROM `sys_config` WHERE config_key = 'isOpenCommonTaoCan' LIMIT 1;
        SELECT config_value INTO isOpenDeptTaoCan FROM `sys_config` WHERE config_key = 'isOpenDeptTaoCan' LIMIT 1;
        IF isOpenTbHisProject IS NULL OR isOpenTbHisProject != 'Y' THEN
            LEAVE main_block;
        END IF;
        DELETE FROM tb_proprice_his;
        DROP TEMPORARY TABLE IF EXISTS his_tb_temp_prods;
        CREATE TEMPORARY TABLE his_tb_temp_prods(id BIGINT);
        INSERT INTO his_tb_temp_prods(id,pro_parent_id)
        # å·²åœç”¨é¡¹ç›®ids
        SELECT b.pro_id,b.pro_parent_id FROM (
                                                 SELECT
                                                     a.pro_id,a.his_xmbm,a.pro_parent_id
                                                 FROM
                                                     tj_project a
                                                         LEFT JOIN tj_project b ON a.pro_parent_id = b.pro_id
                                                 WHERE a.pro_parent_id <> 0 AND a.his_xmbm <> '' AND a.pro_status =0 AND a.deleted = 0 AND b.pro_status = 0 AND b.deleted = 0
                                             ) b
                                                 LEFT JOIN ltkj_shanxiqinjdczgzyy_getshoufeixmzd c ON b.his_xmbm = c.shoufeixmid
        WHERE c.shoufeixmid IS NULL OR c.zuofeibz = 1;
        INSERT INTO tb_proprice_his(pro_id) SELECT id FROM his_tb_temp_prods;
        UPDATE tj_project a
            JOIN his_tb_temp_prods b ON a.pro_id = b.pro_id
        SET a.pro_status = 1;
        INSERT INTO  tb_proprice_his (pro_id,old_price,new_price,pro_parent_id)
        # ä»·æ ¼å˜åŠ¨çš„æ•°æ®
        SELECT c.pro_id,c.pro_price,d.danjia,c.pro_parent_id FROM
            (
                SELECT
                    a.pro_id,a.his_xmbm,a.pro_price,a.pro_parent_id
                FROM
                    tj_project a
                        LEFT JOIN tj_project b ON a.pro_parent_id = b.pro_id
                WHERE a.pro_parent_id <> 0 AND a.his_xmbm <> '' AND a.pro_status =0 AND a.deleted = 0 AND b.pro_status = 0 AND b.deleted = 0
            ) c
                LEFT JOIN ltkj_shanxiqinjdczgzyy_getshoufeixmzd d ON c.his_xmbm = d.shoufeixmid
        WHERE d.zuofeibz = 0 AND c.pro_price <> d.danjia AND c.pro_id NOT IN (SELECT id FROM his_tb_temp_prods);
        # ä¿®æ”¹å°é¡¹ä»·æ ¼
        UPDATE tj_project a
            JOIN tb_proprice_his b ON a.pro_id = b.pro_id
        SET a.pro_price = b.new_price;
        # ä¿®æ”¹å¤§é¡¹ä»·æ ¼
        UPDATE tj_project a
            JOIN (SELECT pro_parent_id FROM tb_proprice_his GROUP BY(pro_parent_id)) b ON a.pro_id = b.pro_parent_id
            JOIN (
                SELECT pro_parent_id, SUM(pro_price * sl) AS parentPrice
                FROM tj_project
                WHERE pro_parent_id != 0 and deleted=0 and pro_status=0
                GROUP BY pro_parent_id
            ) d ON a.pro_id = d.pro_parent_id
        SET a.pro_price = d.parentPrice;
        # å¦‚æžœhis停用了,项目也改停用状态,套餐 åˆ†ç»„中的项目不进行删除变动 åªä¿®æ”¹åŽŸä»·ï¼Œä¸€å…±ä¸‰ä¸ªé…ç½® æ˜¯å¦å¼€å¯åŒæ­¥ã€æ˜¯å¦åŒæ­¥å…¬å…±å¥—餐、是否同步单位套餐
        IF isOpenCommonTaoCan = 'Y' THEN
            # åœç”¨é¡¹ç›®
            UPDATE tj_package_project SET price_ord = 0
            WHERE pro_id IN (SELECT pro_id FROM tb_proprice_his WHERE new_price IS NULL);
            # æ”¹ä»·é¡¹ç›®
            UPDATE tj_package_project a
                JOIN tb_proprice_his b ON a.pro_id = b.pro_id
            SET a.price_ord = b.new_price
            WHERE b.new_price IS NOT NULL;
            # ä¿®æ”¹å¥—餐总价
            UPDATE tj_package a
                JOIN (
                    SELECT b.pac_id,SUM(b.price_ord) AS order_price
                    FROM tj_package_project b
                             JOIN tb_proprice_his c ON b.pro_id = c.pro_id
                    GROUP BY b.pac_id
                ) d ON a.pac_id = d.pac_id
            SET a.price = d.order_price;
        END IF;
        IF isOpenDeptTaoCan = 'Y' THEN
            # åœç”¨é¡¹ç›®
            UPDATE tj_grouping_pro a SET pro_price = 0
            WHERE pro_id IN (SELECT pro_id FROM tb_proprice_his WHERE new_price IS NULL);
            # æ”¹ä»·é¡¹ç›®
            UPDATE tj_grouping_pro a
                JOIN tb_proprice_his b ON a.pro_id = b.pro_id
            SET a.pro_price = b.new_price
            WHERE b.new_price IS NOT NULL;
            # ä¿®æ”¹å¥—餐总价
            UPDATE tj_dw_grouping a
                JOIN (
                    SELECT b.grouping_id,SUM(b.pro_price) AS order_price
                    FROM tj_grouping_pro b
                             JOIN tb_proprice_his c ON b.pro_id = c.pro_id
                    GROUP BY b.grouping_id
                ) d ON a.id = d.grouping_id
            SET a.price = d.order_price;
        END IF;
    END main_block;
END
ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjProject.java
@@ -277,6 +277,8 @@
    @ApiModelProperty(value = "是否参与异常")
    private Integer sfcyyc;
    @ApiModelProperty(value = "样本")
    private String yb;
    /**
     * å­é¡¹ç›®
     */
ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjProjectMapper.java
@@ -144,7 +144,7 @@
    List<TjProject> getDxTjProjectList();
//    @Select("SELECT * FROM `tj_project` where pro_parent_id=0 and pro_status=0 and deleted=0")
    List<TjProject> getOpenDxTjProjectList(String nr);
    List<TjProject> getOpenDxTjProjectList(@Param(value = "nr")String nr,@Param(value = "xb")String xb);
    @Select("SELECT a.*,GROUP_CONCAT(b.pro_name ORDER BY b.pro_name) AS all_son_pro_name FROM\n" +
ltkj-hosp/src/main/java/com/ltkj/hosp/service/ITjProjectService.java
@@ -111,7 +111,7 @@
    List<TjProject> getTjProjectList();
    List<TjProject> getDxTjProjectList();
    List<TjProject> getOpenDxTjProjectList(String nr);
    List<TjProject> getOpenDxTjProjectList(String nr,String xb);
    List<TjProject> getPacTjProjectList();
ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjProjectServiceImpl.java
@@ -215,8 +215,8 @@
    }
    @Override
    public List<TjProject> getOpenDxTjProjectList(String nr) {
        return  tjProjectMapper.getOpenDxTjProjectList(nr);
    public List<TjProject> getOpenDxTjProjectList(String nr,String xb) {
        return  tjProjectMapper.getOpenDxTjProjectList(nr,xb);
    }
    @Override
ltkj-hosp/src/main/resources/mapper/TjProjectMapper.xml
@@ -236,7 +236,9 @@
        <where>
            pro_parent_id=0 and pro_status=0 and deleted=0
            <if test="nr != null ">and (pro_name  like concat('%', #{nr}, '%')
                 or pro_eng_name  like concat('%', #{nr}, '%'))</if>
                or pro_eng_name  like concat('%', #{nr}, '%'))</if>
            <if test="null !=xb and xb !='' ">
                and (pro_sex=#{xb} or isnull(pro_sex) or pro_sex=2 ) </if>
        </where>