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.whyc.dto.Response;
|
import com.whyc.dto.StaticEleprice;
|
import com.whyc.mapper.BattInfMapper;
|
import com.whyc.mapper.PeakStatisticsMapper;
|
import com.whyc.pojo.Battinf;
|
import com.whyc.pojo.PeakStatistics;
|
import com.whyc.util.ActionUtil;
|
import com.whyc.util.DateUtil;
|
import com.whyc.util.ThreadLocalUtil;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
@Service
|
public class PeakStatisticsService {
|
|
@Resource
|
private PeakStatisticsMapper mapper;
|
@Resource
|
private BattInfMapper battInfMapper;
|
|
public List<PeakStatistics> searchByCondition(PeakStatistics peakStatistics){
|
QueryWrapper<PeakStatistics> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("battGroupId",peakStatistics.getBattGroupId());
|
queryWrapper.ge("record_time",peakStatistics.getRecordTime());
|
queryWrapper.le("record_time",peakStatistics.getRecordTime1());
|
queryWrapper.orderByAsc("record_time","num");
|
List<PeakStatistics> list = mapper.selectList(queryWrapper);
|
return list;
|
}
|
|
|
public Response search(PeakStatistics ps){
|
List<PeakStatistics> list = searchByCondition(ps);
|
//保存电价系数
|
savePriceFactor(ps.getBattGroupId(),ps.getPriceFactor());
|
//最终结果集
|
List<StaticEleprice> listAll=new ArrayList();
|
//上一次的电量信息统计
|
StaticEleprice se=new StaticEleprice();
|
//统计编号
|
int numStatic=1;//编号
|
int numcharge=0;//充电数
|
int numdischarge=0;//放电数
|
float elePrice=0f;//价格
|
int monthOrday=0;
|
// 获取统计方式(近30天按照日统计,近12个月按照月统计)
|
int method = ps.getNum();
|
SimpleDateFormat sdfwithOut = new SimpleDateFormat("yyyy-MM-dd");
|
if(list!=null&&list.size()>0){
|
for (int i=0;i<list.size();i++) {
|
PeakStatistics p=list.get(i);
|
// 时间段
|
String perid_Time = "";
|
// 年份,季度,月份
|
Date dev_recordtime = p.getRecordTime();
|
// 获取具体年份,月份和该月的总天数
|
int year = dev_recordtime.getYear() + 1900;
|
int month = dev_recordtime.getMonth() + 1;
|
int day=dev_recordtime.getDate();
|
if (method==1) {// 近30天按照日统计
|
perid_Time = sdfwithOut.format(dev_recordtime)+" 00:00:00";
|
perid_Time += " ";
|
perid_Time += sdfwithOut.format(dev_recordtime)+" 23:59:59";
|
monthOrday=day;
|
} else if (method==3) {// 近12个月按照月统计
|
perid_Time = ActionUtil.getFirstDayOfMonth(year, month - 1);
|
perid_Time += " ";
|
perid_Time += ActionUtil.getLastDayOfMonth(year, month - 1);
|
monthOrday=month;
|
}
|
|
if(i==0||se.getPerid_Time().equals(perid_Time)){
|
se.setPerid_Time(perid_Time);
|
se.setBattgroupid(p.getBattGroupId());
|
se.setNum(numStatic);
|
if(p.getTestType()==3){
|
numdischarge++;
|
elePrice=se.getPrice()+p.getSumPrice();
|
}else{
|
numcharge++;
|
elePrice=se.getPrice()-p.getSumPrice();
|
}
|
se.setMonthOrday(monthOrday);
|
se.setEletric_discharge(numdischarge);//放电次数
|
se.setEletric_charge(numcharge);
|
se.setPrice(elePrice);
|
}else{
|
//当记录日期改变则时下一笔数据
|
listAll.add(se); //
|
se=new StaticEleprice();
|
numStatic++;
|
numdischarge=0;
|
numcharge=0;
|
//开始重新统计下一笔
|
se.setPerid_Time(perid_Time);
|
se.setBattgroupid(p.getBattGroupId());
|
if(p.getTestType()==3){
|
numdischarge++;
|
elePrice=se.getPrice()+p.getSumPrice();
|
}else{
|
numcharge++;
|
elePrice=se.getPrice()-p.getSumPrice();
|
}
|
se.setNum(numStatic);
|
se.setMonthOrday(monthOrday);
|
se.setEletric_discharge(numdischarge);//放电次数
|
se.setEletric_charge(numcharge);
|
se.setPrice(elePrice);
|
}
|
if(i==list.size()-1){
|
listAll.add(se); //最后一笔数据
|
}
|
}
|
}
|
|
return new Response().set(1,listAll,"统计成功");
|
|
}
|
|
public void savePriceFactor(int battGroupId,float priceFactor){
|
QueryWrapper<Battinf> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("battGroupId",battGroupId);
|
Battinf battinf = battInfMapper.selectOne(queryWrapper);
|
UpdateWrapper<Battinf> updateWrapper = new UpdateWrapper<>();
|
updateWrapper.set("price_factor",priceFactor);
|
updateWrapper.eq("battGroupId",battGroupId);
|
battInfMapper.update(battinf,updateWrapper);
|
}
|
|
public Map<Integer, List<PeakStatistics>> getTodayMapByBattGroupId(int battGroupId) {
|
QueryWrapper<PeakStatistics> query = Wrappers.query();
|
Date now = new Date();
|
//String today = DateUtil.YYYY_MM_DD.format(now);
|
String today = ThreadLocalUtil.format(now,3);
|
query.eq("record_time",today).eq("BattGroupId",battGroupId).in("test_type",2,3);
|
List<PeakStatistics> peakStatistics = mapper.selectList(query);
|
Map<Integer, List<PeakStatistics>> collect = peakStatistics.stream().collect(Collectors.groupingBy(PeakStatistics::getTestType));
|
if(!collect.containsKey(2)){
|
collect.put(2,null);
|
};
|
if(!collect.containsKey(3)){
|
collect.put(3,null);
|
};
|
return collect;
|
}
|
}
|