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 validate(String tenantId, String templateId) { fieldCatalog.ensure(tenantId, "system"); List bindings = bindingMapper.selectList( Wrappers.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 validateBindings( List bindings) { List 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 bindings, String code, String diagnosticCode, String fieldName, List 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); } }