package com.ruoyi.other.emind.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.other.emind.domain.EmindEnergyChain; import com.ruoyi.other.emind.domain.EmindEnergyChainDetail; import com.ruoyi.other.emind.domain.EmindStation; import com.ruoyi.other.emind.dto.EmindEnergyChainPageQuery; import com.ruoyi.other.emind.mapper.EmindEnergyChainMapper; import com.ruoyi.other.emind.mapper.EmindStationMapper; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.Clock; import java.time.LocalDateTime; import java.util.List; import java.util.stream.Collectors; @Service public class EmindEnergyChainManagementService { private final EmindEnergyChainMapper mapper; private final EmindStationMapper stationMapper; private final Clock clock; private final EmindEnergyChainDetailService emindEnergyChainDetailService; @Autowired public EmindEnergyChainManagementService(EmindEnergyChainMapper mapper, EmindStationMapper stationMapper, EmindEnergyChainDetailService emindEnergyChainDetailService) { this(mapper, stationMapper, Clock.systemDefaultZone(), emindEnergyChainDetailService); } EmindEnergyChainManagementService(EmindEnergyChainMapper mapper, EmindStationMapper stationMapper, Clock clock, EmindEnergyChainDetailService emindEnergyChainDetailService) { this.mapper = mapper; this.stationMapper = stationMapper; this.clock = clock; this.emindEnergyChainDetailService = emindEnergyChainDetailService; } public IPage page(EmindEnergyChainPageQuery query) { int pageNumber = query.getPageCurr() == null || query.getPageCurr() < 1 ? 1 : query.getPageCurr(); int pageSize = query.getPageSize() == null || query.getPageSize() < 1 ? 10 : Math.min(query.getPageSize(), 100); IPage pageData = mapper.selectManagementPage(Page.of(pageNumber, pageSize), query); if(CollectionUtils.isNotEmpty(pageData.getRecords())) { List stationTypeList = pageData.getRecords().stream().filter(r -> "欧力特".equals(r.getPlatformName())).map(EmindEnergyChain::getStationType).collect(Collectors.toList()); if(CollectionUtils.isNotEmpty(stationTypeList)) { List chainDetails = emindEnergyChainDetailService.getByStationTypes(stationTypeList); if(CollectionUtils.isNotEmpty(chainDetails)) { pageData.getRecords().forEach(rd -> chainDetails.forEach(cd -> { if(cd.getStationType().equals(rd.getStationType())) { rd.setDetail(cd.getDetail()); } })); } } } return pageData; } @Transactional(rollbackFor = Exception.class) public EmindEnergyChain add(EmindEnergyChain input) { EmindStation station = requireStation(input.getStationLocalId()); LocalDateTime now = LocalDateTime.now(clock); EmindEnergyChain chain = new EmindEnergyChain(); copyEditableFields(input, chain, station); chain.setSourceType(EmindEnergyChain.SOURCE_MANUAL); chain.setManagementDeleted(0); chain.setDelFlag(0); chain.setSyncedAt(now); chain.setCreateTime(now); chain.setUpdateTime(now); mapper.insert(chain); return chain; } @Transactional(rollbackFor = Exception.class) public EmindEnergyChain update(Long id, EmindEnergyChain input) { EmindEnergyChain chain = mapper.selectById(id); if (chain == null || Integer.valueOf(1).equals(chain.getManagementDeleted())) { throw new IllegalArgumentException("能量链不存在"); } EmindStation station = requireStation(input.getStationLocalId()); copyEditableFields(input, chain, station); chain.setUpdateTime(LocalDateTime.now(clock)); mapper.updateById(chain); return chain; } @Transactional(rollbackFor = Exception.class) public int delete(List ids) { if (ids == null || ids.isEmpty()) { return 0; } return mapper.markManagementDeleted(ids, LocalDateTime.now(clock)); } private EmindStation requireStation(Long stationLocalId) { EmindStation station = stationLocalId == null ? null : stationMapper.selectById(stationLocalId); if (station == null || !Integer.valueOf(0).equals(station.getDelFlag()) || !Integer.valueOf(0).equals(station.getManagementDeleted())) { throw new IllegalArgumentException("所属电站不存在或已停用"); } return station; } private void copyEditableFields(EmindEnergyChain input, EmindEnergyChain target, EmindStation station) { target.setStationLocalId(station.getId()); target.setStationId(station.getStationId()); target.setStationName(station.getName()); target.setElinkId(input.getElinkId()); target.setUuid(input.getUuid().trim()); target.setElinkName(input.getElinkName().trim()); target.setStationType(input.getStationType()); } }