zjh
4 天以前 027c1328165a0d37a778ec7f58760bb0fe1ffebb
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;
@@ -46,6 +47,7 @@
import com.ltkj.common.core.redis.RedisCache;
import com.ltkj.common.enums.DataSourceType;
import com.ltkj.common.utils.*;
import com.ltkj.db.DataSourceContextHolder;
import com.ltkj.framework.config.MatchUtils;
import com.ltkj.framework.config.ThreadPoolConfig;
import com.ltkj.framework.config.UserHoder;
@@ -81,6 +83,7 @@
import com.ltkj.web.controller.lis.LisApiMethod;
import com.ltkj.web.controller.pacs.PacsApiMethodService;
import com.ltkj.web.controller.service.TjSysAsyncServiceImpl;
import com.ltkj.web.controller.service.UtilsService;
import com.ltkj.web.wxUtils.HttpClientUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -242,6 +245,8 @@
    private TjOrderYcxmService ycxmService;
    @Autowired
    private TbTransitionMapper tbTransitionMapper;
    @Autowired
    private UtilsService utilsService;
    private static final String TJH = "tjhs:tjh";
@@ -1046,6 +1051,7 @@
//                tjOrder.setTjType("2");
//            }
        }
        utilsService.saveCustomerSfzImg(tjOrder.getSfzImg(), DataSourceContextHolder.getDataSourceKey(), String.valueOf(tjCustomer.getCusId()));
        if (StringUtil.isBlank(tjOrder.getFirmId())) {
            tjOrder.setFirmId("0");
        }
@@ -1507,8 +1513,19 @@
            List<TbTransition> list = tbTransitionService.list(wrapper);
            BigDecimal zongjia = new BigDecimal("0.0");
            // his直接单开体检费单项目总价编码
            String tjfhisxmbm = configService.selectConfigByKey("tjfhisxmbm");
            // 是否开启his直接单开体检费单项目 N使用明细开单 其他都为单项目开总价
            String lycdzjhmxj = configService.selectConfigByKey("lycdzjhmxj");
            // 是否使用his价格传递规则 Y开启
            String sfsyhisjgrule = configService.selectConfigByKey("sfsyhisjgrule");
            // his价格传递规则保留得位数 默认2位
            String sfsyhisjgrulebaoliuweishu = configService.selectConfigByKey("sfsyhisjgrulebaoliuweishu");
            // his价格传递规则 1四舍五入 2直接舍去
            String sfsyhisjgrulesconfig = configService.selectConfigByKey("sfsyhisjgrulesconfig");
            // 传递项目是否使用his科室
            String isUseHisKs = configService.selectConfigByKey("isCreateMenZhenFyUseHisKs");
            String createMenZhenFyZJUseHisKs = configService.selectConfigByKey("createMenZhenFyZJUseHisKs");
            for (TbTransition transition : list) {
                LambdaQueryWrapper<TjProject> wrapper1 = new LambdaQueryWrapper<>();
@@ -1524,11 +1541,34 @@
                int sl = 1;
                BigDecimal danjia = transition.getNowPrice();
                BigDecimal allPrice = danjia.multiply(new BigDecimal(sl));
                if (StrUtil.isNotBlank(sfsyhisjgrule) && sfsyhisjgrule.equalsIgnoreCase("Y")){
                    int baoliuweishu = 2;
                    if (StrUtil.isNotBlank(sfsyhisjgrulebaoliuweishu)){
                        try {
                            baoliuweishu = Integer.parseInt(sfsyhisjgrulebaoliuweishu);
                        } catch (NumberFormatException e) {
                            log.error("his价格传递规则保留位数转换异常 配置值->{}\n{}{}",sfsyhisjgrulebaoliuweishu,e,e.getMessage());
                            return AjaxResult.error();
                        }
                    }
                    if (StrUtil.isNotBlank(sfsyhisjgrulesconfig) && !sfsyhisjgrulesconfig.equalsIgnoreCase("1")){
                        // 其他自定义的规则计算方法
                    }else {
                        // 四舍五入
                        danjia = danjia.setScale(baoliuweishu, RoundingMode.HALF_UP);
                        allPrice = danjia.multiply(new BigDecimal(sl)).setScale(baoliuweishu, RoundingMode.HALF_UP);
                    }
                }
                obj.putOpt("danJia", danjia);
                obj.putOpt("jieSuanJe", allPrice);
                obj.putOpt("shuliang", sl);
                obj.putOpt("zhiXingKs", dept.getDeptId());
                obj.putOpt("zhiXingKsMc", dept.getDeptName());
                if (isUseHisKs.equalsIgnoreCase("Y")){
                    obj.putOpt("zhiXingKs", dept.getHisksid());
                    obj.putOpt("zhiXingKsMc", dept.getHisksmc());
                }else {
                    obj.putOpt("zhiXingKs", dept.getDeptId());
                    obj.putOpt("zhiXingKsMc", dept.getDeptName());
                }
                obj.putOpt("shouFeiXmId", project.getHisXmbm());
                obj.putOpt("shouFeiXmMc", project.getHisXmmc());
                array.add(obj);
@@ -1536,15 +1576,38 @@
            }
            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();
                JSONArray zjarray = JSONUtil.createArray();
                JSONObject obj = JSONUtil.createObj();
                int sl = 1;
                obj.putOpt("danJia", zongjia);
                obj.putOpt("jieSuanJe", zongjia);
                obj.putOpt("shuliang", sl);
                obj.putOpt("zhiXingKs", "100");
                if (isUseHisKs.equalsIgnoreCase("Y")){
                    if (StrUtil.isBlank(createMenZhenFyZJUseHisKs)) return AjaxResult.error();
                    obj.putOpt("zhiXingKs", createMenZhenFyZJUseHisKs);
                }else {
                    obj.putOpt("zhiXingKs", "100");
                }
                obj.putOpt("zhiXingKsMc","体检中心");
                obj.putOpt("shouFeiXmId", tjfhisxmbm);
                obj.putOpt("shouFeiXmMc", "体检费");
@@ -1570,6 +1633,107 @@
                return AjaxResult.error();
            }
        }
        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;
    }
@@ -2883,10 +3047,12 @@
            for (TbTransition tbTransition : list) {
                if (tbTransition.getParentProId().toString().equals(project.getProId().toString())) {
                    JSONObject obj = JSONUtil.createObj();
                    TjOrderRemark remark = remarkService.getTjOrderRemarkByTjNumAndProParentId(tjNumber, tbTransition.getParentProId().toString());
                    obj.putOpt("index", index++);
                    obj.putOpt("parent_pro_name", tbTransition.getParentProName());
                    obj.putOpt("price", tbTransition.getOrdPrice());
                    obj.putOpt("ks", dept.getDeptName());
                   if(null !=remark) obj.putOpt("sfzt", remark.getSfbz());
                    huiZong.add(obj);
                }
            }
@@ -3236,7 +3402,7 @@
        TjOrder order = tjOrderService.getOrderByTjNum(tjNum);
        if (null != order) {
            if (null != order.getFinishTime()) return AjaxResult.error("该人员已签离,不可撤销!!!");
            if (null != order.getPrintLastTime()) return AjaxResult.error("该人员报告已打印,不可撤销!!!");
            Boolean useLisAndPacsRegister = lisApiMethod.isUseLisAndPacsRegister(order);
            String username = SecurityUtils.getUsername();
@@ -3245,7 +3411,7 @@
            TjCustomer tjCustomer = tjCustomerService.getOne(wrapper);
            String s = configService.selectConfigByKey("is_request_common_his_api");
//            if (null != s && s.equals("Y") && "2".equals(order.getTjType())) {
            if (null != s && s.equals("Y") && !useLisAndPacsRegister) {
                String apiUrl = configService.selectConfigByKey("common_api_url");
                String hospbm = configService.selectConfigByKey("common_api_service_hospbm");
@@ -3261,7 +3427,7 @@
                for (TjFlowingWater water : list) {
                    if (water.getPayStasus() == 0L) {
                        weizhifu.add(water);
                    } else {
                    } else if (water.getPayStasus() == 1L){
                        yizhifu.add(water);
                    }
                }
@@ -3269,27 +3435,22 @@
                log.info("工号为: "+username+" 的用户即将撤销 体检号为:"+tjNum+" 的体检记录;" );
                AjaxResult error = zuofeiWeiZhifu(weizhifu, tjCustomer, apiUrl, hospbm, order, true, tjNum);
                if (error != null && !error.get("code").toString().equals("200")){
                    log.info("工号为: "+username+" 的用户正在撤销 体检号为:"+tjNum+" 并且未支付的体检记录;" );
                    log.info("工号为: "+username+" 的用户正在撤销 体检号为:"+tjNum+" 并且未支付的体检记录;   撤销失败!!!!" );
                    return error;
                }else {
                    log.info("工号为: "+username+" 的用户正在撤销 体检号为:"+tjNum+" 并且未支付的体检记录;" );
                }
                AjaxResult error1 = zuofeiYiZhifu(yizhifu, tjCustomer, order, apiUrl, hospbm, false, tjNum);
                if (error1 != null && !error.get("code").toString().equals("200"))
                {
                    log.info("工号为: "+username+" 的用户正在撤销 体检号为:"+tjNum+" 并且已支付的体检记录;" );
                    log.info("工号为: "+username+" 的用户正在撤销 体检号为:"+tjNum+" 并且已支付的体检记录;   撤销失败!!!!" );
                    return error1;
                }else {
                    log.info("工号为: "+username+" 的用户正在撤销 体检号为:"+tjNum+" 并且已支付的体检记录;" );
                }
            } else {
                tjOrderService.deleteTjOrderByOrderId(order.getOrderId());
                tjOrderDetailService.deleteTjOrderDetailByOrderDetailId(String.valueOf(order.getOrderId()));
                remarkService.deletedOrderRemarkByTjNum(tjNum);
                tjFlowingWaterService.deleteTjFlowingWaterByOrderId(String.valueOf(order.getOrderId()));
                transitionService.deletedTbTransitionByTjNum(tjNum);
                ycxmService.delOrderYcXmJyByTjh(tjNum);
                tjCustomer.setCardId("0");
                tjCustomerService.updateById(tjCustomer);
                xdPictureService.deleteTjXdPictureBytjNum(tjNum);
                tjSamplingMapper.deleteByTjNumAndCusId(tjNum, order.getUserId());
            }
            String configByKey = configService.selectConfigByKey("sfkqdyhis");
            if (configByKey.equals("Y")) {
@@ -3319,8 +3480,21 @@
                }
            }
            tjCustomer.setCardId("0");
            tjCustomerService.updateById(tjCustomer);
                /*                tjOrderService.deleteTjOrderByOrderId(order.getOrderId());
                tjOrderDetailService.deleteTjOrderDetailByOrderDetailId(String.valueOf(order.getOrderId()));
                remarkService.deletedOrderRemarkByTjNum(tjNum);
                tjFlowingWaterService.deleteTjFlowingWaterByOrderId(String.valueOf(order.getOrderId()));
                transitionService.deletedTbTransitionByTjNum(tjNum);
                ycxmService.delOrderYcXmJyByTjh(tjNum);
                xdPictureService.deleteTjXdPictureBytjNum(tjNum);
                tjSamplingMapper.deleteByTjNumAndCusId(tjNum, order.getUserId());*/
            tjOrderService.removeById(order.getOrderId());
            return AjaxResult.success("撤销成功");
        }
        return AjaxResult.success("签到记录不存在!");
        return AjaxResult.error("签到记录不存在!");
    }
@@ -3518,6 +3692,7 @@
        TjOrder order = tjOrderService.getOrderByTjNum(tjNum);
        if (null != order) {
            LambdaQueryWrapper<TjProBl> wq = new LambdaQueryWrapper<>();
            wq.eq(TjProBl::getTjh, tjNum);
            List<TjProBl> blList = blService.list(wq);
@@ -3558,6 +3733,8 @@
        TjOrder order = tjOrderService.getOrderByTjNum(dto.getTjh());
        String username = SecurityUtils.getUsername();
        if (null != order) {
            if (null != order.getPrintLastTime()) return AjaxResult.error("该人员报告已打印,不可撤销!!!");
            log.info("工号为: "+username+" 的用户即将撤销 体检号为:"+dto.getTjh()+"补录单号为: " + dto.getBldhs()+ " 的 补录体检记录;" );
            String configByKey = configService.selectConfigByKey("sfkqdyhis");
@@ -3611,7 +3788,7 @@
                    TjFlowingWater water = tjFlowingWaterService.getOne(wrapper);
                    if (water.getPayStasus() == 0L) {
                        weizhifu.add(water);
                    } else {
                    } else if (water.getPayStasus() == 1L){
                        yizhifu.add(water);
                    }
                }
@@ -3623,28 +3800,32 @@
                AjaxResult error = zuofeiWeiZhifu(weizhifu, tjCustomer, apiUrl, hospbm, order, true, dto.getTjh());
                if (error != null && !error.get("code").toString().equals("200"))
                {
                    log.info("工号为: "+username+" 的用户正在撤销 体检号为:"+dto.getTjh()+"补录单号为: " + dto.getBldhs()+ " 并且未支付的补录体检记录;" );
                    log.info("体检号为:"+dto.getTjh()+"补录单号为: " + dto.getBldhs()+ " 并且未支付的补录体检记录;  撤销失败" );
                    return error;
                }else {
                    log.info("工号为: "+username+" 的用户正在撤销 体检号为:"+dto.getTjh()+"补录单号为: " + dto.getBldhs()+ " 并且未支付的补录体检记录;" );
                }
                AjaxResult error1 = zuofeiYiZhifu(yizhifu, tjCustomer, order, apiUrl, hospbm, false, dto.getTjh());
                if (error1 != null && !error.get("code").toString().equals("200"))
                {
                    log.info("工号为: "+username+" 的用户正在撤销 体检号为:"+dto.getTjh()+"补录单号为: " + dto.getBldhs()+ " 并且已支付的补录体检记录;" );
                    log.info("体检号为:"+dto.getTjh()+"补录单号为: " + dto.getBldhs()+ " 并且已支付的补录体检记录;  撤销失败" );
                    return error1;
                }else {
                    log.info("工号为: "+username+" 的用户正在撤销 体检号为:"+dto.getTjh()+"补录单号为: " + dto.getBldhs()+ " 并且已支付的补录体检记录;" );
                }
                return AjaxResult.success();
            } else {
            }
                try {
                    extracted(dto, order);
                } catch (Exception e) {
                    log.info("撤销失败,删除表失败");
                    return AjaxResult.error("撤销失败,删除表失败!");
                }
                return AjaxResult.success();
            }
                return AjaxResult.success("撤销成功!");
        }
        return AjaxResult.error();
        return AjaxResult.error("未查询到体检记录!");
    }
    private AjaxResult zuofeiYiZhifu(ArrayList<TjFlowingWater> yizhifu, TjCustomer tjCustomer, TjOrder order, String apiUrl, String hospbm, Boolean isDelete, String tjNum) {
@@ -3717,7 +3898,7 @@
                        String tfid = jsonObject.getJSONObject("data").getStr("feiYongId");
                        water.setHisTfWaterId(tfid);
                        tjFlowingWaterService.updateById(water);
                        if (isDelete) {
           /*             if (isDelete) {
                            for (TjFlowingWater water1 : yizhifu) {
                                String bldh1 = water1.getJxbz();
                                remarkService.deleteTjOrderDetailByjxbz(bldh1);
@@ -3727,8 +3908,8 @@
                                blService.remove(new LambdaQueryWrapper<TjProBl>().eq(TjProBl::getTjh, tjNum).eq(TjProBl::getBldh, bldh1));
                                tjSamplingMapper.deleteByTjNumAndCusIdAndJxbzo(tjNum, order.getUserId(), bldh1);
                            }
                        }
                    } else return AjaxResult.error();
                        }*/
                    } else return AjaxResult.error("撤销失败");
                }
            }
        }
@@ -3745,7 +3926,7 @@
            String post = HttpClientUtils.sendPost(apiUrl + "/api/his/" + hospbm + "/revokeCost", chexiaoMap);
            if (JSONUtil.parseObj(post).getStr("code").equals("200")) {
                if (isDelete) {
                /*if (isDelete) {
                    for (TjFlowingWater water : weizhifu) {
                        String bldh = water.getJxbz();
                        if (StrUtil.isNotBlank(bldh)) {
@@ -3757,31 +3938,39 @@
                            tjSamplingMapper.deleteByTjNumAndCusIdAndJxbzo(tjNum, order.getUserId(), bldh);
                        } else {
                            //这里删除的是这个人所有项目包括补录项目
                            tjOrderService.deleteTjOrderByOrderId(order.getOrderId());
                *//*            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());
                            tjSamplingMapper.deleteByTjNumAndCusId(order.getTjNumber(), order.getUserId());*//*
//                            TjCustomer customer = tjCustomerService.getById(order.getUserId());
//                            customer.setCardId("0");
//                            tjCustomerService.updateById(customer);
//                            tjOrderService.removeById(order.getOrderId());
                        }
                    }
                }
            } else return AjaxResult.error();
                }*/
            } else return AjaxResult.error("撤销失败");
        }
        return null;
    }
    //    @Transactional(propagation =Propagation.REQUIRES_NEW)
    public void extracted(TjProBlDto dto, TjOrder order) {
        for (String bldh : dto.getBldhs()) {
            remarkService.deleteTjOrderDetailByjxbz(bldh);
            tjOrderDetailService.deleteTjOrderDetailByjxbz(bldh);
            tjFlowingWaterService.deleteTjOrderDetailByjxbz(bldh);
            transitionService.deleteTjOrderDetailByjxbz(bldh);
            blService.remove(new LambdaQueryWrapper<TjProBl>().eq(TjProBl::getTjh, dto.getTjh()).eq(TjProBl::getBldh, bldh));
        try {
            for (String bldh : dto.getBldhs()) {
                remarkService.deleteTjOrderDetailByjxbz(bldh);
                tjOrderDetailService.deleteTjOrderDetailByjxbz(bldh);
                tjFlowingWaterService.deleteTjOrderDetailByjxbz(bldh);
                transitionService.deleteTjOrderDetailByjxbz(bldh);
                blService.remove(new LambdaQueryWrapper<TjProBl>().eq(TjProBl::getTjh, dto.getTjh()).eq(TjProBl::getBldh, bldh));
            }
            tjSamplingMapper.deleteByTjNumAndCusIdAndJxbz(dto.getTjh(), order.getUserId(), dto.getBldhs());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        tjSamplingMapper.deleteByTjNumAndCusIdAndJxbz(dto.getTjh(), order.getUserId(), dto.getBldhs());
    }
@@ -3814,6 +4003,34 @@
    }
    @GetMapping("/chushenyemianyijianjiekou")
    @ApiOperation(value = "初审页面已检接口")
    @Transactional
    public AjaxResult chushenyemianyijianjiekou(@RequestParam String tjNUm, @RequestParam String proId) {
        LambdaQueryWrapper<TjOrderRemark> wq = new LambdaQueryWrapper<>();
        wq.eq(TjOrderRemark::getTjNumber, tjNUm);
        wq.eq(TjOrderRemark::getProId, proId);
        TjOrderRemark remark = remarkService.getOne(wq);
        remark.setType(1);
        remarkService.updateById(remark);
        return AjaxResult.success("操作成功!");
    }
    @GetMapping("/chushenyemianchexiaojiekou")
    @ApiOperation(value = "初审页面撤销接口")
    @Transactional
    public AjaxResult chushenyemianchexiaojiekou(@RequestParam String tjNUm, @RequestParam String proId) {
        LambdaQueryWrapper<TjOrderRemark> wq = new LambdaQueryWrapper<>();
        wq.eq(TjOrderRemark::getTjNumber, tjNUm);
        wq.eq(TjOrderRemark::getProId, proId);
        TjOrderRemark remark = remarkService.getOne(wq);
        remark.setType(0);
        remarkService.updateById(remark);
        return AjaxResult.success("操作成功!");
    }
    @PostMapping("/zongjanyemianshjianzhou")
    @ApiOperation(value = "总检获取时间轴接口")
    @Transactional