吴羡
3 天以前 3a83be3db09481c3719e6b86bc6265bcd431422a
修复检验委托书字段绑定错误

- 送样时间改为取成品下单送样日期,导出格式改为 yyyy年M月d日
- 样品状态改为取下单样品状态,不再写死“完好”
- 检测依据改为“标准号+标准名称”
- 备注信息改为取下单备注
- 新增存量数据修正脚本 sql/fix_inspection_order_field_bindings.sql
已添加1个文件
已修改2个文件
135 ■■■■■ 文件已修改
cnas-process/src/main/java/com/ruoyi/process/listener/NewJuOrderInspectionListener.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/fix_inspection_order_field_bindings.sql 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/listener/NewJuOrderInspectionListener.java
@@ -1,6 +1,10 @@
package com.ruoyi.process.listener;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.basic.mapper.StandardMethodMapper;
import com.ruoyi.basic.mapper.StandardTreeMapper;
import com.ruoyi.basic.pojo.StandardMethod;
import com.ruoyi.basic.pojo.StandardTree;
import com.ruoyi.inspect.event.NewJuOrderPlacedEvent;
import com.ruoyi.inspect.mapper.InsOrderStandardTemplateMapper;
import com.ruoyi.inspect.mapper.InsSampleMapper;
@@ -33,6 +37,8 @@
    private final InspectionOrderDetailMapper inspectionOrderDetailMapper;
    private final InsSampleMapper insSampleMapper;
    private final InsOrderStandardTemplateMapper insOrderStandardTemplateMapper;
    private final StandardTreeMapper standardTreeMapper;
    private final StandardMethodMapper standardMethodMapper;
    @EventListener
    public void onNewJuOrderPlaced(NewJuOrderPlacedEvent event) {
@@ -67,11 +73,11 @@
                ? order.getSampleView() : order.getSample());
        inspectionOrder.setProduction(order.getProduction());
        inspectionOrder.setQuantity(order.getTestQuantity());
        inspectionOrder.setCommissionDate(LocalDate.now());
        inspectionOrder.setCommissionDate(order.getSampleDate() != null ? order.getSampleDate() : LocalDate.now());
        inspectionOrder.setCommissionUnit(order.getCompany());
        inspectionOrder.setCommissionUser(order.getPrepareUser());
        inspectionOrder.setCommissionPhone(order.getPhone());
        inspectionOrder.setSampleStatus("完好");
        inspectionOrder.setSampleStatus(order.getSampleStatus());
        // æ˜¯å¦ç•™æ ·è¯­ä¹‰è½¬æ¢ï¼šins 0否/1是 -> cnas 1是/2否
        inspectionOrder.setIsLeave(Integer.valueOf(1).equals(order.getIsLeave()) ? 1 : 2);
        // æ ·å“å¤„置:1委托方取回/2检测方处置 -> processing 0委托单位取回/1实验室处理;未选时沿用旧字段
@@ -102,7 +108,7 @@
        detail.setSampleName(inspectionOrder.getSampleName());
        detail.setQuantity(order.getTestQuantity());
        detail.setSampleStatus(inspectionOrder.getSampleStatus());
        detail.setTestStandard(order.getSample());
        detail.setRemark(order.getRemark());
        List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
                .eq(InsSample::getInsOrderId, order.getId())
@@ -110,15 +116,39 @@
        if (!samples.isEmpty()) {
            detail.setSampleNumber(samples.get(0).getSampleCode());
        }
        String testItem = insOrderStandardTemplateMapper.selectList(
                        Wrappers.<InsOrderStandardTemplate>lambdaQuery()
                                .eq(InsOrderStandardTemplate::getInsOrderId, order.getId())
                                .orderByAsc(InsOrderStandardTemplate::getSort, InsOrderStandardTemplate::getId))
                .stream()
        List<InsOrderStandardTemplate> templates = insOrderStandardTemplateMapper.selectList(
                Wrappers.<InsOrderStandardTemplate>lambdaQuery()
                        .eq(InsOrderStandardTemplate::getInsOrderId, order.getId())
                        .orderByAsc(InsOrderStandardTemplate::getSort, InsOrderStandardTemplate::getId));
        detail.setTestStandard(resolveTestStandard(order, templates));
        detail.setTestItem(templates.stream()
                .map(InsOrderStandardTemplate::getName)
                .filter(StringUtils::isNotBlank)
                .collect(Collectors.joining("、"));
        detail.setTestItem(testItem);
                .collect(Collectors.joining("、")));
        inspectionOrderDetailMapper.insert(detail);
    }
    /**
     * æ£€æµ‹ä¾æ®æ˜¾ç¤ºâ€œæ ‡å‡†å·+标准名称”,优先取标准方法,取不到时回退到模板快照编号。
     */
    private String resolveTestStandard(InsOrder order, List<InsOrderStandardTemplate> templates) {
        if (order.getStandardTreeId() != null) {
            StandardTree tree = standardTreeMapper.selectById(order.getStandardTreeId());
            if (tree != null && tree.getStandardMethodId() != null) {
                StandardMethod method = standardMethodMapper.selectById(tree.getStandardMethodId());
                if (method != null) {
                    String combined = (StringUtils.trimToEmpty(method.getCode()) + " "
                            + StringUtils.trimToEmpty(method.getName())).trim();
                    if (StringUtils.isNotBlank(combined)) {
                        return combined;
                    }
                }
            }
        }
        return templates.stream()
                .map(InsOrderStandardTemplate::getNumber)
                .filter(StringUtils::isNotBlank)
                .distinct()
                .collect(Collectors.joining("、"));
    }
}
cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java
@@ -870,7 +870,7 @@
    }
    private InspectionOrderExportDto extracted(InspectionOrder inspectionOrder, InsOrder insOrder) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyå¹´MM月dd日");
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyå¹´M月d日");
        InspectionOrderExportDto inspectionOrderExportDto = new InspectionOrderExportDto();
        BeanUtils.copyProperties(inspectionOrder, inspectionOrderExportDto);
sql/fix_inspection_order_field_bindings.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
-- ============================================================
-- æ£€éªŒå§”托单字段绑定修正(数据修复,非结构变更)
-- ç”Ÿæˆæ—¥æœŸï¼š2026-11-05
--
-- èƒŒæ™¯ï¼šæ—§ç‰ˆâ€œä¸‹å•后自动生成检验委托单”存在绑定错误:
--   1. é€æ ·æ—¶é—´å–的是生成当天,而非下单送样日期;
--   2. æ ·å“çŠ¶æ€å†™æ­»ä¸ºâ€œå®Œå¥½â€ï¼›
--   3. æ£€æµ‹ä¾æ®åªæœ‰æ ‡å‡†å·ï¼Œç¼ºå°‘标准名称;
--   4. å¤‡æ³¨ä¿¡æ¯æœªå†™å…¥ã€‚
-- æœ¬è„šæœ¬ä»…å›žå¡«ä»ä¿æŒæ—§é»˜è®¤å€¼/空值的记录,人工改过的值不会被覆盖。
-- å¯é‡å¤æ‰§è¡Œï¼ˆå¹‚等)。
--
-- æ‰§è¡Œå‰å»ºè®®å¤‡ä»½ï¼ˆåœ¨ LIMS æ•°æ®åº“内执行):
--   CREATE TABLE cnas_inspection_order_bak_20261105 AS SELECT * FROM cnas_inspection_order;
--   CREATE TABLE cnas_inspection_order_detail_bak_20261105 AS SELECT * FROM cnas_inspection_order_detail;
-- ============================================================
START TRANSACTION;
-- 1) å§”托单表头:送样时间改为下单送样日期
--    ä»…修正“当前送样时间 = åˆ›å»ºæ—¥æœŸâ€çš„自动默认值
UPDATE cnas_inspection_order io
JOIN ins_order o ON o.id = io.ins_order_id
SET io.commission_date = o.sample_date
WHERE io.commission_date IS NOT NULL
  AND o.sample_date IS NOT NULL
  AND io.commission_date = DATE(io.create_time)
  AND io.commission_date <> o.sample_date;
-- 2) å§”托单表头:样品状态改为下单样品状态
--    ä»…修正旧逻辑写死的“完好”
UPDATE cnas_inspection_order io
JOIN ins_order o ON o.id = io.ins_order_id
SET io.sample_status = o.sample_status
WHERE io.sample_status = '完好'
  AND o.sample_status IS NOT NULL
  AND o.sample_status <> '';
-- 3) å§”托单明细:样品状态改为下单样品状态
UPDATE cnas_inspection_order_detail d
JOIN cnas_inspection_order io ON io.inspection_order_id = d.inspection_order_id
JOIN ins_order o ON o.id = io.ins_order_id
SET d.sample_status = o.sample_status
WHERE d.sample_status = '完好'
  AND o.sample_status IS NOT NULL
  AND o.sample_status <> '';
-- 4) å§”托单明细:备注改为下单备注
--    ä»…填充空备注
UPDATE cnas_inspection_order_detail d
JOIN cnas_inspection_order io ON io.inspection_order_id = d.inspection_order_id
JOIN ins_order o ON o.id = io.ins_order_id
SET d.remark = o.remark
WHERE (d.remark IS NULL OR d.remark = '')
  AND o.remark IS NOT NULL
  AND o.remark <> '';
-- 5) å§”托单明细:检测依据改为“标准号 + æ ‡å‡†åç§°â€
--    ä»…修正空值、旧逻辑写入的纯标准号,人工改过的完整依据不覆盖
UPDATE cnas_inspection_order_detail d
JOIN cnas_inspection_order io ON io.inspection_order_id = d.inspection_order_id
JOIN ins_order o ON o.id = io.ins_order_id
LEFT JOIN standard_tree st ON st.id = o.standard_tree_id
LEFT JOIN standard_method sm ON sm.id = st.standard_method_id
SET d.test_standard = TRIM(CONCAT(COALESCE(sm.code, ''), ' ', COALESCE(sm.name, '')))
WHERE sm.id IS NOT NULL
  AND (d.test_standard IS NULL
       OR d.test_standard = ''
       OR d.test_standard COLLATE utf8mb4_general_ci = o.sample COLLATE utf8mb4_general_ci
       OR d.test_standard COLLATE utf8mb4_general_ci = sm.code COLLATE utf8mb4_general_ci);
COMMIT;
-- æ ¡éªŒï¼ˆæ‰§è¡Œå®Œå¯äººå·¥æ ¸å¯¹ï¼‰ï¼š
-- SELECT io.inspection_order_id, io.entrust_code, io.commission_date, o.sample_date,
--        io.sample_status, o.sample_status
-- FROM cnas_inspection_order io JOIN ins_order o ON o.id = io.ins_order_id
-- WHERE io.ins_order_id IS NOT NULL;
--
-- SELECT d.inspection_order_detail_id, d.sample_name, d.sample_status, d.test_standard, d.remark
-- FROM cnas_inspection_order_detail d
-- JOIN cnas_inspection_order io ON io.inspection_order_id = d.inspection_order_id
-- JOIN ins_order o ON o.id = io.ins_order_id;