yanderong
2026-09-27 8fab4df47dcd0dc7efe4a13f2f31897ce5751963
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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());
    }
}