package com.ld.igds.es.service;
|
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import com.ld.igds.constant.BizType;
|
import com.ld.igds.data.ChartLine;
|
import com.ld.igds.data.ChartSeries;
|
import com.ld.igds.grain.dto.GrainData;
|
import com.ld.igds.io.constant.OrderRespEnum;
|
import com.ld.igds.util.ContextUtil;
|
import com.ld.igds.websocket.WebSocketPacket;
|
import com.ld.igds.websocket.WebSocketServer;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import com.ld.igds.constant.RedisConst;
|
import com.ld.igds.es.dto.EsData;
|
import com.ld.igds.es.dto.EsParam;
|
import com.ld.igds.es.dto.EsSummary;
|
import com.ld.igds.es.mapper.EsServiceMapper;
|
import com.ld.igds.util.DateUtil;
|
import com.ld.igds.util.RedisUtil;
|
|
@Slf4j
|
@Component(CoreEsService.BEAN_ID)
|
public class CoreEsServiceImpl implements CoreEsService {
|
|
// @Autowired
|
// private WebSocketServer socketServer;
|
@Autowired
|
private EsServiceMapper esServiceMapper;
|
@Autowired
|
private RedisUtil redisUtil;
|
|
@Override
|
public List<EsSummary> getSummaryGroupByDepot(EsParam param) {
|
|
if (null == param.getCheckDate()) {
|
return null;
|
}
|
// 说明按照日期来的
|
if ("day".equals(param.getTimeType())) {
|
param.setStart(DateUtil.getCurZero(param.getCheckDate()));
|
param.setEnd(DateUtil.getNextZero(param.getCheckDate()));
|
}
|
if ("month".equals(param.getTimeType())) {
|
param.setStart(DateUtil.getMonthFirst(param.getCheckDate()));
|
param.setEnd(DateUtil.getNextMonthFirst(param.getCheckDate()));
|
}
|
|
return esServiceMapper.getSummaryGroupByDepot(param);
|
}
|
|
@Override
|
public EsSummary getSummaryByParam(EsParam param) {
|
|
if (null == param.getStart())
|
new EsSummary();
|
if (null == param.getEnd())
|
new EsSummary();
|
EsSummary result = esServiceMapper.getSummaryByParam(param);
|
if (null == result)
|
result = new EsSummary();
|
return result;
|
}
|
|
@Override
|
public List<EsSummary> listSumGroupByDay(EsParam param) {
|
|
if (null == param.getStart()) {
|
param.setStart(DateUtil.getNewByDay(null, -30));
|
}
|
|
return esServiceMapper.listSumGroupByDay(param);
|
}
|
|
@Override
|
public List<EsData> listDetailChartData(EsParam param) {
|
|
if (null == param.getStart()) {
|
param.setStart(DateUtil.getNewByDay(null, -30));
|
}
|
|
if (null != param.getEnd()) {
|
param.setEnd(DateUtil.getNextZero(param.getEnd()));
|
}
|
return esServiceMapper.listDetailChartData(param);
|
}
|
|
@Override
|
public EsData getCacheEsData(String companyId, String depotId) {
|
Map<String, EsData> dataMap = getCacheEsDataMap(companyId);
|
if (null == dataMap || dataMap.isEmpty()) {
|
return null;
|
}
|
EsData result = null;
|
for (String key : dataMap.keySet()) {
|
if(key.startsWith(depotId)){
|
if(null == result){
|
result = dataMap.get(key);
|
}else {
|
result.setEp(result.getEp() + dataMap.get(key).getEp());
|
result.setEq(result.getEq() + dataMap.get(key).getEq());
|
result.setEs(result.getEs() + dataMap.get(key).getEs());
|
}
|
}
|
}
|
return result;
|
}
|
|
@Override
|
public EsData getCacheEsDepotData(String companyId, String depotId, String deviceId) {
|
Map<String, EsData> dataMap = getCacheEsDataMap(companyId);
|
if (null == dataMap || dataMap.isEmpty()) {
|
return null;
|
}
|
return dataMap.get(depotId + "-" + deviceId);
|
}
|
|
@Override
|
public void updateCacheEsData(EsData esData) {
|
Map<String, EsData> dataMap = getCacheEsDataMap(esData.getCompanyId());
|
if (null == dataMap) {
|
dataMap = new HashMap<String, EsData>();
|
} else {
|
dataMap.put(esData.getDepotId() + "-" + esData.getDeviceId(), esData);
|
}
|
String deptId = ContextUtil.subDeptId(null);
|
String key = RedisConst.buildKey(esData.getCompanyId(),
|
RedisConst.KEY_ES_DATA_MAP, deptId);
|
redisUtil.set(key, dataMap);
|
}
|
|
@SuppressWarnings("unchecked")
|
@Override
|
public Map<String, EsData> getCacheEsDataMap(String companyId) {
|
String deptId = ContextUtil.subDeptId(null);
|
String key = RedisConst.buildKey(companyId, RedisConst.KEY_ES_DATA_MAP, deptId);
|
Map<String, EsData> result = (Map<String, EsData>) redisUtil.get(key);
|
if (null == result) {
|
log.info("系统中没有获取到能耗数据缓存信息!!");
|
}
|
return result;
|
}
|
|
@Override
|
public void saveAndUpdateInc(EsData data) {
|
|
// 获取上次的缓存信息,如果缓存中的数据跟当前数据时间差小于12个小时,则计算增量,否则增量为0,增量不可为负数。
|
EsData oldData = getCacheEsDepotData(data.getCompanyId(), data.getDepotId(), data.getDeviceId());
|
if (null != oldData && oldData.getEs() > 0) {
|
long time = data.getUpdateTime().getTime() - oldData.getUpdateTime().getTime();
|
if (time <= 12 * 60 * 60 * 1001) {
|
data.setEpInc(data.getEp() - oldData.getEp());
|
data.setEpInc(data.getEpInc() > 0 ? data.getEpInc() : 0.0);
|
|
data.setEqInc(data.getEq() - oldData.getEq());
|
data.setEqInc(data.getEqInc() > 0 ? data.getEqInc() : 0.0);
|
|
data.setEsInc(data.getEs() - oldData.getEs());
|
data.setEsInc(data.getEsInc() > 0 ? data.getEsInc() : 0.0);
|
}
|
}
|
|
if (null == data.getUpdateTime()) {
|
data.setUpdateTime(new Date());
|
}
|
|
if (StringUtils.isEmpty(data.getId())) {
|
data.setId(data.getCompanyId() + "-" + data.getDepotId() + "-" + data.getDeviceId() + "-"
|
+ ContextUtil.getCurTimeMillis());
|
}
|
|
// 更新缓存
|
this.updateCacheEsData(data);
|
|
// 持久化数据库
|
esServiceMapper.insertData(data);
|
}
|
|
@SuppressWarnings("static-access")
|
@Override
|
public ChartLine queryScreenEsChart(EsParam esParam, boolean toWeb) {
|
|
if (StringUtils.isEmpty(esParam.getCompanyId())) {
|
esParam.setCompanyId(ContextUtil.getDefaultCompanyId());
|
}
|
if (StringUtils.isEmpty(esParam.getDeptId())) {
|
esParam.setDeptId(ContextUtil.subDeptId(null));
|
}
|
List<EsSummary> list = this.listSumGroupByDay(esParam);
|
|
if (null == list || list.isEmpty())
|
return null;
|
|
// 从新排序
|
list.sort((a, b) -> a.getGroupTag().compareTo(b.getGroupTag()));
|
|
// 调整对象,groupTag = yyyy-MM-dd
|
ChartLine line = new ChartLine();
|
ChartSeries series = new ChartSeries();
|
for (EsSummary sum : list) {
|
line.getXaxisData().add(sum.getGroupTag().substring(5));
|
series.getData().add(String.valueOf(sum.getEpSum()));
|
}
|
line.getSeries().add(series);
|
|
if (toWeb) {
|
// 大屏的数据存放缓存,并推送页面
|
WebSocketPacket packet = new WebSocketPacket();
|
packet.setCompanyId(ContextUtil.getDefaultCompanyId());
|
packet.setBizType(BizType.SCREEN.getCode());
|
packet.setDeptId(esParam.getDeptId());
|
packet.setBizId(BizType.ES.getCode());
|
packet.setData(line);
|
WebSocketServer.sendByPocket(packet);
|
}
|
return line;
|
}
|
|
}
|