package com.ruoyi.system.service.impl; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.system.domain.TBatteryGroup; import com.ruoyi.system.domain.TBatteryGroupRelationField; import com.ruoyi.system.domain.TTestFieldSnapshot; import com.ruoyi.system.mapper.TSharedFieldSnapshotMapper; import com.ruoyi.system.service.ITBatteryGroupService; import com.ruoyi.system.service.ISharedFieldSnapshotService; /** 共享业务字段快照服务实现。 */ @Service public class TSharedFieldSnapshotServiceImpl implements ISharedFieldSnapshotService { @Autowired private ITBatteryGroupService batteryGroupService; @Autowired private TSharedFieldSnapshotMapper snapshotMapper; @Override public List createForBatteryGroup(Long groupId) { TBatteryGroup group = batteryGroupService.selectBatteryGroupById(groupId); List snapshots = new ArrayList<>(); for (TBatteryGroupRelationField field : mutable(group.getTemplateFields())) { snapshots.add(snapshot(field.getBatteryGroupFieldId(), field.getFieldName(), field.getFieldType(), field.getFieldValue())); } return snapshots; } @Override public List resolveForUpdate(Long currentGroupId, Long nextGroupId, List currentSnapshots) { // 同组编辑不能重新读取活动值,否则会静默改写测试创建时保存的业务事实。 if (nextGroupId.equals(currentGroupId)) { return mutable(currentSnapshots).stream() .map(source -> snapshot(source.getFieldDefinitionId(), source.getFieldName(), source.getFieldType(), source.getFieldValue())) .toList(); } return createForBatteryGroup(nextGroupId); } @Override public List selectByTestId(Long testId) { return mutable(snapshotMapper.selectByTestId(testId)); } @Override public void saveForTest(Long testId, List snapshots) { for (TTestFieldSnapshot snapshot : mutable(snapshots)) { snapshot.setTestId(testId); snapshotMapper.insert(snapshot); } } @Override public void deleteByTestId(Long testId) { snapshotMapper.deleteByTestId(testId); } private TTestFieldSnapshot snapshot(Long definitionId, String name, String type, String value) { TTestFieldSnapshot snapshot = new TTestFieldSnapshot(); snapshot.setFieldDefinitionId(definitionId); snapshot.setFieldName(name); snapshot.setFieldType(type); snapshot.setFieldValue(value); return snapshot; } private List mutable(List values) { return values == null ? new ArrayList<>() : new ArrayList<>(values); } }