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<EmindEnergyChain> 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<EmindEnergyChain> pageData = mapper.selectManagementPage(Page.of(pageNumber, pageSize), query);
|
if(CollectionUtils.isNotEmpty(pageData.getRecords())) {
|
List<String> stationTypeList = pageData.getRecords().stream().filter(r -> "欧力特".equals(r.getPlatformName())).map(EmindEnergyChain::getStationType).collect(Collectors.toList());
|
if(CollectionUtils.isNotEmpty(stationTypeList)) {
|
List<EmindEnergyChainDetail> 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<Long> 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());
|
}
|
}
|