刘光辉
3 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
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
package jnpf.elnService.template.impl;
 
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jnpf.elnEntity.template.ElnTemplateBindingEntity;
import jnpf.elnEntity.template.ElnTemplateVos;
import jnpf.elnMapper.ElnTemplateBindingMapper;
import jnpf.elnService.field.ElnTestResultFieldCatalog;
import jnpf.elnService.field.ElnTestResultFields;
import jnpf.elnService.template.ElnTemplatePublishValidator;
import org.springframework.stereotype.Service;
 
import java.util.ArrayList;
import java.util.List;
 
/** 模板发布前要求两个系统结果字段均显式作为活动主控件绑定。 */
@Service
public class ElnTestResultTemplatePublishValidator implements ElnTemplatePublishValidator {
    private final ElnTemplateBindingMapper bindingMapper;
    private final ElnTestResultFieldCatalog fieldCatalog;
 
    public ElnTestResultTemplatePublishValidator(ElnTemplateBindingMapper bindingMapper,
                                                        ElnTestResultFieldCatalog fieldCatalog) {
        this.bindingMapper = bindingMapper;
        this.fieldCatalog = fieldCatalog;
    }
 
    @Override
    public List<ElnTemplateVos.Diagnostic> validate(String tenantId, String templateId) {
        fieldCatalog.ensure(tenantId, "system");
        List<ElnTemplateBindingEntity> bindings = bindingMapper.selectList(
                Wrappers.<ElnTemplateBindingEntity>lambdaQuery()
                        .eq(ElnTemplateBindingEntity::getFTenantId, tenantId)
                        .eq(ElnTemplateBindingEntity::getMubanId, templateId)
                        .eq(ElnTemplateBindingEntity::getBangdingZhuangtai, "ACTIVE")
                        .eq(ElnTemplateBindingEntity::getKongjianJuese, "PRIMARY")
                        .and(q -> q.isNull(ElnTemplateBindingEntity::getFDeleteMark)
                                .or().eq(ElnTemplateBindingEntity::getFDeleteMark, 0)));
        return validateBindings(bindings);
    }
 
    static List<ElnTemplateVos.Diagnostic> validateBindings(
            List<ElnTemplateBindingEntity> bindings) {
        List<ElnTemplateVos.Diagnostic> diagnostics = new ArrayList<>();
        requiredOnce(bindings, ElnTestResultFields.RESULT, "TEST_RESULT_BINDING_REQUIRED",
                "检验结果", diagnostics);
        requiredOnce(bindings, ElnTestResultFields.CONCLUSION, "TEST_CONCLUSION_BINDING_REQUIRED",
                "检验结论", diagnostics);
        return diagnostics;
    }
 
    private static void requiredOnce(List<ElnTemplateBindingEntity> bindings, String code,
                                     String diagnosticCode, String fieldName,
                                     List<ElnTemplateVos.Diagnostic> diagnostics) {
        int count = 0;
        for (ElnTemplateBindingEntity binding : bindings) {
            if (binding != null && code.equals(binding.getZiduanBianma())
                    && "ACTIVE".equals(binding.getBangdingZhuangtai())
                    && "PRIMARY".equals(binding.getKongjianJuese())
                    && (binding.getFDeleteMark() == null || binding.getFDeleteMark() == 0)) {
                count++;
            }
        }
        if (count == 1) return;
        ElnTemplateVos.Diagnostic diagnostic = new ElnTemplateVos.Diagnostic();
        diagnostic.setSeverity("ERROR");
        diagnostic.setCode(diagnosticCode);
        diagnostic.setMessage(count == 0
                ? "请在文档中标注“" + fieldName + "”"
                : "“" + fieldName + "”存在多个标注,请只保留一个");
        diagnostics.add(diagnostic);
    }
}