package com.battery.business.report;
|
|
import com.battery.business.domain.TBatteryGroupField;
|
import com.battery.business.service.ITBatteryGroupFieldService;
|
import com.ruoyi.common.exception.ServiceException;
|
import org.springframework.stereotype.Service;
|
import java.util.HashSet;
|
import java.util.List;
|
|
/** 模板复用共享定义的编号;结构校验属于业务层,不交给 REST 控制器。 */
|
@Service
|
public class CompareFieldTemplateService
|
{
|
private final CompareFieldTemplateRepository templates;
|
private final ITBatteryGroupFieldService definitions;
|
public CompareFieldTemplateService(CompareFieldTemplateRepository templates, ITBatteryGroupFieldService definitions)
|
{ this.templates = templates; this.definitions = definitions; }
|
|
/** 名称不重复且共享字段仍有效时,新增不含数据值的模板。 */
|
public long create(CompareFieldTemplateRequest request, long userId, String userName)
|
{
|
var fields = validate(request);
|
return templates.insert(request.name().trim(), fields, userId, userName);
|
}
|
|
/** 修改模板仅影响后续主动应用的草稿,既有版本不重新解析模板。 */
|
public void update(long id, CompareFieldTemplateRequest request)
|
{
|
var fields = validate(request);
|
templates.update(id, request.name().trim(), fields);
|
}
|
|
private List<CompareField> validate(CompareFieldTemplateRequest request)
|
{
|
if (request.name() == null || request.name().isBlank() || request.name().length() > 100
|
|| request.fields() == null || request.fields().isEmpty() || request.fields().size() > 100
|
|| request.fields().stream().anyMatch(java.util.Objects::isNull)) throw new ServiceException("模板名称和字段不能为空");
|
var names = new HashSet<String>();
|
var ids = new HashSet<Long>();
|
var current = definitions.selectBatteryGroupFieldList(new TBatteryGroupField());
|
return request.fields().stream().map(field -> {
|
if (!names.add(field.name())) throw new ServiceException("模板字段不能重复");
|
if (!"battery".equals(field.category())) return field;
|
var definition = current.stream().filter(item -> field.fieldDefinitionId() == null
|
? item.getFieldName().equals(field.name()) : item.getFieldId().equals(field.fieldDefinitionId())).findFirst()
|
.orElseThrow(() -> new ServiceException("共享字段不存在,请重新选择电池组字段:" + field.name()));
|
if (!ids.add(definition.getFieldId())) throw new ServiceException("共享字段不能重复");
|
return new CompareField(field.name(), field.category(), field.unit(), definition.getFieldId(), field.displayName());
|
}).toList();
|
}
|
}
|