刘光辉
昨天 bb638871a7fb692d80f1b7a758f991dc0879002c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package jnpf.limsService.impl;
 
import jnpf.exception.DataException;
import jnpf.limsEntity.LimsFenjianItem;
import jnpf.limsEntity.LimsJianyanAssignItem;
import jnpf.limsEntity.LimsJianyanXiangEntity;
 
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map;
 
/** 批量任务必须在第一条 UPDATE 前完成整批必填校验。 */
public final class LimsJianceTaskBatchValidationProbe {
 
    private static int passed;
    private static int failed;
 
    public static void main(String[] args) {
        LimsFenjianItem first = fenjian("A", true);
        LimsFenjianItem invalidSecond = fenjian("B", false);
        check("分检后行非法在写循环前被发现",
                failsOnSecondFenjian(first, invalidSecond), "未按第二行失败");
 
        Map<String, LimsJianyanXiangEntity> rows = new LinkedHashMap<>();
        rows.put("A", normalRow("A"));
        rows.put("B", normalRow("B"));
        LimsJianyanAssignItem validAssign = new LimsJianyanAssignItem();
        validAssign.setId("A");
        validAssign.setJianchaRen("user-a");
        LimsJianyanAssignItem invalidAssign = new LimsJianyanAssignItem();
        invalidAssign.setId("B");
        check("分配后行非法在写循环前被发现",
                failsOnSecondAssign(validAssign, invalidAssign, rows), "未按第二行失败");
 
        LimsJianyanAssignItem missingRow = new LimsJianyanAssignItem();
        missingRow.setId("missing");
        boolean skipped = true;
        try {
            LimsJianceTaskServiceImpl.validateAssignItems(
                    Arrays.asList(validAssign, missingRow), rows);
        } catch (DataException e) {
            skipped = false;
        }
        check("预加载缺失行保持部分成功跳过语义", skipped, "缺失行被当成校验失败");
 
        System.out.println("=== 批量预校验断言:" + passed + " 通过 / " + failed + " 失败 ===");
        System.exit(failed == 0 ? 0 : 1);
    }
 
    private static boolean failsOnSecondFenjian(LimsFenjianItem first, LimsFenjianItem second) {
        try {
            LimsJianceTaskServiceImpl.validateFenjianItems(Arrays.asList(first, second));
            return false;
        } catch (DataException e) {
            return e.getMessage() != null && e.getMessage().contains("第 2 条");
        }
    }
 
    private static boolean failsOnSecondAssign(LimsJianyanAssignItem first,
                                                LimsJianyanAssignItem second,
                                                Map<String, LimsJianyanXiangEntity> rows) {
        try {
            LimsJianceTaskServiceImpl.validateAssignItems(Arrays.asList(first, second), rows);
            return false;
        } catch (DataException e) {
            return e.getMessage() != null && e.getMessage().contains("第 2 条");
        }
    }
 
    private static LimsFenjianItem fenjian(String id, boolean complete) {
        LimsFenjianItem item = new LimsFenjianItem();
        item.setId(id);
        item.setFenjianLiang("1");
        item.setFenjianDanwei(complete ? "g" : null);
        item.setFenjianFenzhuangRongqi("瓶");
        item.setFenjianBaocunTiaojian("常温");
        return item;
    }
 
    private static LimsJianyanXiangEntity normalRow(String id) {
        LimsJianyanXiangEntity row = new LimsJianyanXiangEntity();
        row.setId(id);
        return row;
    }
 
    private static void check(String name, boolean ok, String detail) {
        if (ok) {
            passed++;
            System.out.println("  [PASS] " + name);
        } else {
            failed++;
            System.out.println("  [FAIL] " + name + " -- " + detail);
        }
    }
 
    private LimsJianceTaskBatchValidationProbe() {
    }
}