lxw
2023-03-15 5d6834337b696e4eb3b6acfee992c45fd416dccf
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
package com.whyc.service;
 
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.whyc.dto.BattTestData;
import com.whyc.dto.Response;
import com.whyc.mapper.BattInfMapper;
import com.whyc.mapper.BattRtstateMapper;
import com.whyc.mapper.BattdischargePlanMapper;
import com.whyc.pojo.*;
import com.whyc.util.ActionUtil;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
 
@Service
public class BattdischargePlanService {
    @Resource
    private BattdischargePlanMapper mapper;
 
    @Resource
    private BattInfMapper battInfMapper;
 
    @Resource
    private BattRtstateMapper rtstateMapper;
 
    @Resource
    private BaoJiGroupBattGroupService baoJiGroupBattGroupService;
 
    //查询
    public Response serchByCondition(BattdischargePlan battdischargePlan) {
        PageHelper.startPage(battdischargePlan.getPage().getPageCurr(),battdischargePlan.getPage().getPageSize());
        UserInf uinf= ActionUtil.getUser();
        battdischargePlan.setUId(uinf.getUId().intValue());
        List list=mapper.serchByCondition(battdischargePlan);
        PageInfo pageInfo=new PageInfo(list);
        return new Response().set(1,pageInfo);
    }
    //websocket查询,uId通过前端传递
    public Response searchByConditionOfWebSocket(BattdischargePlan battdischargePlan){
        PageHelper.startPage(battdischargePlan.getPage().getPageCurr(),battdischargePlan.getPage().getPageSize());
        List list=mapper.serchByCondition(battdischargePlan);
        PageInfo pageInfo=new PageInfo(list);
        return new Response().set(1,pageInfo);
    }
 
    //删除
    public Response delete(int num) {
        int flag=mapper.deleteById(num);
        return new Response().set(flag>0?1:0);
    }
    //创建计划-查询
    public Response serchBattPlan(String stationName1,String stationName2,String stationName5,String stationId) {
        UserInf uinf=ActionUtil.getUser();
        List list=battInfMapper.serchBattPlan(stationName1,stationName2,stationName5,stationId,uinf.getUId().intValue());
        PageInfo pageInfo=new PageInfo(list);
        return new Response().set(1,pageInfo);
    }
    //创建计划-创建计划
    public Response getBattSate(int battGroupId) {
        BattRtstate brt=rtstateMapper.getCurrentSate(battGroupId);
        Response response=new Response();
        if(brt != null){
            response.setCode(1);
            Calendar instance = Calendar.getInstance();
            instance.add(Calendar.MINUTE,-1);
            Date time = instance.getTime();
            if(time.compareTo(brt.getRecDatetime())>0){
                response.setMsg("通讯故障");
            }else{
                /**
                 * 0    未知
                 * 1    浮充
                 * 2    充电
                 * 3    放电
                 * 4    均充
                 */
                switch (brt.getBattState()){
                    case 0 : response.setMsg("未进行充放电操作"); break;
                    case 1 : response.setMsg("浮充"); break;
                    case 2 : response.setMsg("充电"); break;
                    case 3 : response.setMsg("放电"); break;
                    case 4 : response.setMsg("均充"); break;
                }
 
            }
        }else{
            response.setMsg("无法查询到该电池当前状态");
        }
        return response;
    }
    //启用/延时/取消放电计划/修改放电参数
    public Response updatePro(List<BattdischargePlan> list) {
        int flag=mapper.updatePro(list);
        return  new Response().set(flag>0?1:0);
    }
    //校验需要添加的计划参数 放电计划处于等待启动0,放电延时1,放电计划进行中3,充电进行中5
    public Response judgePlan(List<BattdischargePlan> bplans) {
        List<BattdischargePlan> list = new ArrayList();//存放满足计划设定条件的可行计划
        if(bplans!=null&&bplans.size()>0){
            for(int i=0;i<bplans.size();i++){
                List flag=mapper.judgePlan(bplans.get(i));
                if(flag!=null&&flag.size()>0){//判断通过是否数据库存在同机房放电计划,满足条件
                    if(list.size()>0){
                        int judge=judgeList(bplans.get(i), list);
                        if(judge==1){////判断通过时间相隔3天,满足条件
                            list.add(bplans.get(i));
                        }else{
                            continue;
                        }
                    }else{
                        list.add(bplans.get(i));
                    }
 
                }
            }
        }
        PageInfo pageInfo = new PageInfo(list);
        return  new Response().set(1,pageInfo);
    }
    //放电计划中添加计划时,有没有出现同机房存在电池组有计划
    public  int judgeList(Object obj1,Object obj2){
        BattdischargePlan bplan=(BattdischargePlan) obj1;
        List<BattdischargePlan> list=(List<BattdischargePlan>) obj2;
        int flag=1;
        if(list!=null&&list.size()>0){
            for(int i=0;i<list.size();i++){
 
                if(bplan.getNote().equals(list.get(i).getNote())){
                    int hours=ActionUtil.HoursBetween(bplan.getDischargeStarttime(), list.get(i).getDischargeStarttime1());
                    if(hours< BattTestData.hoursBetween){
                        flag=0;
                        break;
                    }
                }
            }
        }
        return flag;
    }
 
    //创建计划-创建计划
    public Response addPro(List<BattdischargePlan> list) {
        int flag = mapper.addPro(list);
        return new Response().set(flag > 0 ? 1 : 0);
    }
 
    public List<BattMapInformation> findTimeoutStation() {
        return mapper.findTimeoutStation();
    }
 
    //监控层首页:今日放电任务统计
    public Response getPlanStaticToday(int userId) {
        Response planRes = new Response<>();
        try {
            Map<String, Object> map = new HashMap<>();
            Map<String, Integer> stateNumMap = new HashMap<>();
            Map<String, Object> stateMap = new HashMap<>();
            List<BattdischargePlan> stateList = mapper.getPlanStaticToday(userId);
            Map<Integer, List<BattdischargePlan>> stateDisMap = stateList.stream().collect(Collectors.groupingBy(BattdischargePlan::getDischargeState));
            stateNumMap.put("state0", 0);
            stateNumMap.put("state1", 0);
            stateNumMap.put("state3", 0);
            stateMap.put("state0", new ArrayList<>());
            stateMap.put("state1", new ArrayList<>());
            stateMap.put("state3", new ArrayList<>());
            for (Integer dischargeState : stateDisMap.keySet()) {
                stateNumMap.put("state" + String.valueOf(dischargeState), stateDisMap.get(dischargeState).size());
                stateMap.put("state" + String.valueOf(dischargeState), stateDisMap.get(dischargeState));
            }
            Map<String, Integer> nodeNumMap = new HashMap<>();
            nodeNumMap.put("node0", 0);
            nodeNumMap.put("node1", 0);
            Map<String, Object> nodeMap = new HashMap<>();
            nodeMap.put("node0", new ArrayList<>());
            nodeMap.put("node1", new ArrayList<>());
            Map<Integer, List<BattdischargePlan>> nodeDisMap = stateList.stream().collect(Collectors.groupingBy(BattdischargePlan::getNodeStation));
            for (Integer node : nodeDisMap.keySet()) {
                nodeNumMap.put("node" + String.valueOf(node), nodeDisMap.get(node).size());
                nodeMap.put("node" + String.valueOf(node), nodeDisMap.get(node));
            }
            stateNumMap.put("sumNum", stateList.size());
            map.put("stateNumMap", stateNumMap);
            map.put("stateMap", stateMap);
            map.put("nodeNumMap", nodeNumMap);
            map.put("nodeMap", nodeMap);
            planRes.setII(1, stateList.size() > 0, map, "今日放电任务统计");
        } catch (Exception e) {
            planRes.set(1, false, "出现异常" + e.getMessage());
        }
 
        return planRes;
    }
    /**
     * 原则:
     * 0.每个站点只取第一组电池参与放电计划
     * 1.每天最多1个节点站,每天最多3个放电站点
     * 2.各班组尽量扁平,尽量保证各个组完全放电完成时间接近
     * @return
     */
    public Response generateDischargePlan() {
        //查询所有可用的组以及每个组的站点
        List<BaojiGroupBattGroup> baoJiGroupListWithinBattGroupList = baoJiGroupBattGroupService.getBaoJiGroupListWithinBattGroupList();
 
        return null;
    }
}