刘光辉
15 小时以前 34981c30a78e8bbd7791131059a9210f9928b62c
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
package jnpf.limsService.support;
 
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
 
public class LimsSxtQuyangJihuaRenwuServiceChecks {
 
    public static void main(String[] args) throws Exception {
        String contract = read("jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/LimsSxtQuyangJihuaRenwuService.java");
        require(contract, "wuhuaYishenpiJihua");
        require(contract, "shengchengDaishengchengQingyandan");
        require(contract, "quxiaoWeishengchengRenwuByJihua");
        require(contract, "tihuanWeishengchengRenwuPeizhi");
 
        String service = read("jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/impl/LimsSxtQuyangJihuaRenwuServiceImpl.java");
        require(service, "markBlockedPeizhiWuxiao");
        require(service, "peizhi_wuxiao_zuduan");
        require(service, "sxtRenwuKuaizhaoAutoSubmit");
        require(service, "item.setRenwuId(renwu.getId())");
        require(service, "\"jianyan_xiangmu\", xiangmu.getId()");
        require(service, "请验配置检验项目未维护质量标准");
        require(service, "xiangmuMap.get(peizhiItem.getXiangmuId())");
        require(service, "wrapper.in(\"bianma\", xiangmuBianhaoSet)");
        require(service, "anBianmaChaxunJieguo.get(item.getXiangmuBianhao())");
        require(service, "xiangmuMap.put(item.getXiangmuId(), xiangmu)");
        require(service, "请验配置子项未维护质量标准子项ID:");
        require(service, "请验配置子项未维护检验项目编码:");
        require(service, "请验配置引用的检验项目不存在或已删除");
        require(service, "kuaizhao.setJianyanXiangmuId(xiangmu.getId())");
        require(service, "zixiang.getQuyangdianId()");
        require(service, "取样计划子项未保存取样点ID:");
        require(service, "取样点样品类型与计划不一致:");
        require(service, "取样点所属车间与计划不一致:");
        require(service, "Objects.equals(zixiang.getSuoshuChejian(), quyangdian.getChejianMingchengName())");
        require(service, "renwu.setSuoshuChejian(quyangdian.getChejianMingchengName())");
        require(service, "if (hasText(quyangdian.getFuzeGangwei())) {");
        require(service, "baocunRenyuanKuaizhao(renwu, \"quyang_fuze_gangwei\", null, quyangdian.getFuzeGangwei(), now);");
        require(service, "peizhiKuaizhaoYizhi(kuaizhao, dangqian)");
        require(service, "LimsSxtQuyangdianKuaizhaoModel dongjie = JSON.parseObject(");
        require(service, "kuaizhao.getKuaizhaoShuju(), LimsSxtQuyangdianKuaizhaoModel.class);");
        require(service, "private Object dangqianPeizhi(String leixing, String id, String tenantId)");
        require(service, "quyangdianMapper.selectForTaskSnapshot(tenantId, id)");
        reject(service, "if (\"quyangdian\".equals(leixing)) return quyangdianMapper.selectById(id);");
        reject(service, "wrapper.in(\"f_id\", xiangmuIds)");
        reject(service, "请验配置检验项目ID已变化");
        reject(service, "Objects.equals(zixiang.getSuoshuChejian(), quyangdian.getChejianMingcheng())");
        reject(service, "zixiang.getQuyangdianBianhao(), zixiang.getSuoshuChejian()");
        reject(service, "ConcurrentHashMap");
        reject(service, "lims_sxt_quyang_jihua_task");
 
        String pointMapper = read("jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsMapper/LimsSxtQuyangdianMapper.java");
        require(pointMapper, "List<LimsSxtQuyangdianVO> selectByLeixingAndChejian(");
        require(pointMapper, "LimsSxtQuyangdianKuaizhaoModel selectForTaskSnapshot(");
        require(pointMapper, "@Param(\"quyangdianId\") String quyangdianId");
        reject(pointMapper, "LimsSxtQuyangdianVO selectForTaskSnapshot(");
 
        String pointSnapshot = read("jnpf-lims/jnpf-lims-entity/src/main/java/jnpf/limsModel/LimsSxtQuyangdianKuaizhaoModel.java");
        require(pointSnapshot, "private String id;");
        require(pointSnapshot, "private String tenantId;");
        require(pointSnapshot, "private String quyangdianBianhao;");
        require(pointSnapshot, "private String quyangDidian;");
        require(pointSnapshot, "private String chejianMingcheng;");
        require(pointSnapshot, "private String chejianMingchengName;");
        require(pointSnapshot, "private String lururen;");
        require(pointSnapshot, "private String leiXing;");
        require(pointSnapshot, "private Date luruShijian;");
        require(pointSnapshot, "private String bizEnabled;");
        require(pointSnapshot, "private String fuzeGangwei;");
        require(pointSnapshot, "private String bizSign;");
        reject(pointSnapshot, "flowTaskId");
        reject(pointSnapshot, "version");
        reject(pointSnapshot, "creatorTime");
        reject(pointSnapshot, "lastModifyTime");
 
        String pointMapperXml = read("jnpf-lims/jnpf-lims-biz/src/main/resources/mapper/LimsSxtQuyangdianMapper.xml");
        require(pointMapperXml, "<select id=\"selectByLeixingAndChejian\" resultMap=\"quyangdianVOMap\">");
        require(pointMapperXml, "<resultMap id=\"quyangdianKuaizhaoMap\" type=\"jnpf.limsModel.LimsSxtQuyangdianKuaizhaoModel\">");
        String pointSnapshotQuery = section(pointMapperXml, "<select id=\"selectForTaskSnapshot\"", "</select>");
        require(pointSnapshotQuery, "resultMap=\"quyangdianKuaizhaoMap\"");
        require(pointSnapshotQuery, "p.f_id");
        require(pointSnapshotQuery, "p.chejian_mingcheng_name");
        require(pointMapperXml, "p.f_id = #{quyangdianId}");
        require(pointMapperXml, "INNER JOIN lims_sxt_chejian c");
        reject(pointSnapshotQuery, "SELECT p.*");
        reject(pointSnapshotQuery, "p.f_flow_id");
        reject(pointSnapshotQuery, "p.f_version");
        reject(pointSnapshotQuery, "p.f_creator_time");
        reject(pointSnapshotQuery, "p.f_last_modify_time");
        reject(pointMapperXml, "p.quyangdian_bianhao = #{quyangdianBianhao}");
        reject(pointMapperXml, "c.mingcheng = #{suoshuChejian}");
 
        String mapper = read("jnpf-lims/jnpf-lims-biz/src/main/resources/mapper/LimsSxtQuyangJihuaRenwuMapper.xml");
        require(mapper, "lims_sxt_quyang_jihua_renwu");
        require(mapper, "FOR UPDATE SKIP LOCKED");
        require(mapper, "blocked_config_invalid");
        require(mapper, "<resultMap id=\"BaseResultMap\" type=\"jnpf.limsEntity.LimsSxtQuyangJihuaRenwuEntity\">");
        require(mapper, "<id column=\"f_id\" property=\"id\"/>");
        require(mapper, "<result column=\"f_tenant_id\" property=\"fTenantId\"/>");
        require(mapper, "<result column=\"jihua_riqi\" property=\"jihuaRiqi\"/>");
        require(mapper, "<result column=\"qingyandan_zhuangtai_tongbu_shijian\" property=\"qingyandanZhuangtaiTongbuShijian\"/>");
        requireOccurrences(mapper, "resultMap=\"BaseResultMap\"", 4);
        reject(mapper, "resultType=\"jnpf.limsEntity.LimsSxtQuyangJihuaRenwuEntity\"");
        requireMappedFields(mapper, read("jnpf-lims/jnpf-lims-entity/src/main/java/jnpf/limsEntity/LimsSxtQuyangJihuaRenwuEntity.java"));
        reject(mapper, "lims_sxt_quyang_jihua_task");
    }
 
    private static String read(String path) throws Exception {
        Path root = Paths.get(System.getProperty("user.dir"));
        return new String(Files.readAllBytes(root.resolve(path)), StandardCharsets.UTF_8);
    }
 
    private static void require(String content, String expected) {
        if (!content.contains(expected)) {
            throw new AssertionError("missing: " + expected);
        }
    }
 
    private static void reject(String content, String unexpected) {
        if (content.contains(unexpected)) {
            throw new AssertionError("unexpected: " + unexpected);
        }
    }
 
    private static String section(String content, String start, String end) {
        int startIndex = content.indexOf(start);
        if (startIndex < 0) {
            throw new AssertionError("missing: " + start);
        }
        int endIndex = content.indexOf(end, startIndex);
        if (endIndex < 0) {
            throw new AssertionError("missing: " + end);
        }
        return content.substring(startIndex, endIndex + end.length());
    }
 
    private static void requireOccurrences(String content, String expected, int count) {
        int actual = 0;
        int index = 0;
        while ((index = content.indexOf(expected, index)) >= 0) {
            actual++;
            index += expected.length();
        }
        if (actual != count) {
            throw new AssertionError("expected " + count + " occurrences of " + expected + ", got " + actual);
        }
    }
 
    private static void requireMappedFields(String mapper, String entity) {
        for (String sourceLine : entity.split("\\R")) {
            String line = sourceLine.trim();
            if (!line.startsWith("private ") || !line.endsWith(";")) {
                continue;
            }
            String declaration = line.substring(0, line.length() - 1);
            String field = declaration.substring(declaration.lastIndexOf(' ') + 1);
            require(mapper, "property=\"" + field + "\"");
        }
    }
}