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);
|
}
|
}
|