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;
|
}
|
}
|