whyclxw
2025-05-08 35bd0babece513b6ee4285265f3379cbcb050e59
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package com.whyc.service;
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageInfo;
import com.sun.javafx.collections.MappingChange;
import com.whyc.dto.Response;
import com.whyc.mapper.BattInfMapper;
import com.whyc.mapper.BattRtdataMapper;
import com.whyc.pojo.BattRtdata;
import com.whyc.pojo.BattRtstate;
import com.whyc.pojo.Battinf;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
 
@Service
public class BattRtdataService {
 
    @Resource
    private BattRtdataMapper mapper;
 
    @Resource
    private BattInfMapper binfMapper;
    //根据电池组id查询该电池组中所有电池信息(图表数据)
    @Transactional
    public Response serchByCondition(int battGroupId) {
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.eq("BattGroupId",battGroupId);
        List list=mapper.selectList(wrapper);
        PageInfo pageInfo=new PageInfo(list);
        return new Response().setII(1,list.size()>0?true:false,pageInfo,"");
    }
 
    //历史监测中查询出电池组的实时内阻并将其导出报表
    public Response serchResById(int battGroupId) {
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.eq("BattGroupId",battGroupId);
        wrapper.orderByAsc("mon_num");
        List list=mapper.selectList(wrapper);
        PageInfo pageInfo=new PageInfo(list);
        return new Response().set(1,pageInfo);
    }
    //3D查询机房下电池组单体信息
    public Response getStation3D(String stationId) {
        List<BattRtdata> list=mapper.getStation3D(stationId);
        PageInfo pageInfo=new PageInfo(list);
        return new Response().setII(1,list.size()>0?true:false,pageInfo,"");
    }
 
    public List<List<BattRtdata>>  getByDevId(int devId) {
        List<List<BattRtdata>> list = new LinkedList<>();
        List<BattRtdata> dataList = mapper.getByDevId(devId);
        if(dataList!=null && dataList.size()>0) {
            Map<Long, List<BattRtdata>>  map =  dataList.stream().collect(Collectors.groupingBy(BattRtdata::getNum));
            Set<Long> keySet = map.keySet();
            //keySet = keySet.stream().sorted(Comparator.comparingLong(Long::intValue)).collect(Collectors.toCollection(LinkedHashSet::new));
            Iterator<Long> iterator = keySet.iterator();
            while (iterator.hasNext()){
                Long next = iterator.next();
                List<BattRtdata> battRtdataList = map.get(next);
                list.add(next.intValue(),battRtdataList);
            }
        }
        return list;
    }
 
    public void insertMonRecord(int battGroupId, List<Integer> monNumList) {
        mapper.insertMonRecord(battGroupId,monNumList);
    }
 
    public void deleteWhenMonNumBeyond(int battGroupId, int mon_cnt) {
        mapper.deleteWhenMonNumBeyond(battGroupId,mon_cnt);
    }
 
    public int seachBattMaxMonNum(int battGroupId) {
        QueryWrapper<BattRtdata> query = Wrappers.query();
        query.select("mon_num").eq("BattGroupId", battGroupId).orderByDesc("mon_num").last("limit 1");
        BattRtdata battRtdata = mapper.selectOne(query);
        if (battRtdata == null) {
            return 0;
        }
        return battRtdata.getMonNum();
    }
 
    //并联电源多组单体数据
    public Response serch9141ByCondition(int devId) {
        List<BattRtdata> list = mapper.serch9141ByCondition(devId);
        return new Response().setII(1, list.size() > 0 ? true : false, list, "9141数据");
    }
 
    /*public void addBatch(List<BattRtdata> battDataList) {
        mapper.addBatch(battDataList);
    }*/
 
    public void addOrUpdate(List<BattRtdata> battDataList) {
        List<BattRtdata> updateList = new LinkedList<>();
        List<BattRtdata> addList = new LinkedList<>();
 
        //如果存在电池组则更新所有
        //不存在电池组则新增
        //TODO 这里是提示,不是待办.重要!!!!!!如果电池组内新增了单体数,需要临时删除掉单体实时表数据. 这样会加载新的所有单体
        List<Integer> battGroupIdList = battDataList.stream().map(BattRtdata::getBattGroupId).distinct().collect(Collectors.toList());
        QueryWrapper<BattRtdata> query = Wrappers.query();
        query.select("distinct BattGroupId as BattGroupId").in("BattGroupId",battGroupIdList);
        List<BattRtdata> battStateListInDB = mapper.selectList(query);
        List<Integer> battGroupIdListInDB = battStateListInDB.stream().map(BattRtdata::getBattGroupId).distinct().collect(Collectors.toList());
 
        for (BattRtdata battData : battDataList) {
            if(battGroupIdListInDB.contains(battData.getBattGroupId())){ //更新
                updateList.add(battData);
            }else{ //新增
                addList.add(battData);
            }
        }
        if(updateList.size()>0){
            mapper.updateBatch(updateList);
        }
        if(addList.size()>0) {
            mapper.addBatch(battDataList);
        }
    }
    //查询电池组单体实时信息
    public Response serchPowerHr6159(int devId) {
        //1.取电池组id按顺序组1组2
        QueryWrapper<Battinf> query = Wrappers.query();
        query.select("distinct BattGroupId,GroupIndexInFBSDevice ").eq("FBSDeviceId",devId).orderByAsc("GroupIndexInFBSDevice");
        List<Battinf> infList= binfMapper.selectList(query);
        Map<Integer,List> map=new HashMap<>();
        for (Battinf binf:infList) {
            int battGroupId=binf.getBattGroupId();
            int groupIndex=binf.getGroupIndexInFBSDevice();
            QueryWrapper wrapper = new QueryWrapper();
            wrapper.eq("BattGroupId",battGroupId);
            List<BattRtdata> rtdataList = mapper.selectList(wrapper);
            map.put(groupIndex,rtdataList);
        }
        return new Response().setII(1,map.size()>0,map,"查询电池组单体实时信息");
    }
}