|
@@ -1,21 +1,19 @@
|
|
|
package com.bizmatics.service.job;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.bizmatics.common.core.util.BeanMapperUtils;
|
|
|
import com.bizmatics.common.core.util.DateUtils;
|
|
|
import com.bizmatics.common.core.util.JsonMapper;
|
|
|
import com.bizmatics.common.spring.util.JsonUtils;
|
|
|
-import com.bizmatics.model.AlarmPower;
|
|
|
-import com.bizmatics.model.HadDataLog;
|
|
|
-import com.bizmatics.model.HtAnalogData;
|
|
|
-import com.bizmatics.model.RtAnalogData;
|
|
|
+import com.bizmatics.model.*;
|
|
|
import com.bizmatics.model.es.RtAnalog;
|
|
|
-import com.bizmatics.persistence.mapper.HadDataLogMapper;
|
|
|
-import com.bizmatics.persistence.mapper.HtAnalogDataMapper;
|
|
|
-import com.bizmatics.persistence.mapper.RtAnalogDataMapper;
|
|
|
+import com.bizmatics.persistence.mapper.*;
|
|
|
import com.bizmatics.service.HadDataLogService;
|
|
|
import com.bizmatics.service.es.RtAnalogService;
|
|
|
import com.bizmatics.service.util.SessionLocal;
|
|
|
+import com.bizmatics.service.vo.CommonIcoVO;
|
|
|
import com.bizmatics.service.vo.HadDataLogVO;
|
|
|
import com.google.common.collect.Lists;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -27,6 +25,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
/**
|
|
|
* @author yq
|
|
@@ -43,109 +42,151 @@ public class RatAnalogTask {
|
|
|
@Autowired
|
|
|
private HadDataLogMapper hadDataLogMapper;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private DeviceMapper deviceMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private HadSiteStaticMapper hadSiteStaticMapper;
|
|
|
+
|
|
|
public void addAll(){
|
|
|
- Integer index = 0;
|
|
|
- Date date = new Date();
|
|
|
- date = DateUtils.setDays(date,27);
|
|
|
- date = DateUtils.setMonths(date,4);
|
|
|
- Date dayStartTime = DateUtils.getDayStartTime(date);
|
|
|
- Date dayStartTime1 = DateUtils.getDayEndTime(date);
|
|
|
- Date startTime = dayStartTime;
|
|
|
- Date endTime = dayStartTime1;
|
|
|
- Integer integer = htAnalogDataMapper.selectMaxId();
|
|
|
- Integer maxId = integer;
|
|
|
- boolean flag = true;
|
|
|
- while (flag){
|
|
|
- List<HadDataLogVO> hadVoList = new ArrayList<>();
|
|
|
- List<HtAnalogData> htAnalogDatas = htAnalogDataMapper.page(index, 500, startTime, endTime);
|
|
|
- if (!CollectionUtils.isEmpty(htAnalogDatas)){
|
|
|
- for (HtAnalogData htAnalogData:htAnalogDatas) {
|
|
|
- hadVoList.add(insertList(htAnalogData));
|
|
|
- }
|
|
|
- insertHadDateLog(hadVoList,startTime);
|
|
|
- if (htAnalogDatas.size() < 500){
|
|
|
- //要进行下个天数的查询
|
|
|
- startTime = DateUtils.addDays(startTime,1);
|
|
|
- endTime = DateUtils.addDays(endTime,1);
|
|
|
- index = 0;
|
|
|
- }else {
|
|
|
- index+=500;
|
|
|
+ List<Device> list = deviceMapper.list(null, null, null, null, null, null);
|
|
|
+ List<Date> dateList = htAnalogDataMapper.getDateList();
|
|
|
+ List<Date> newList = new ArrayList<>();
|
|
|
+ for (Date date:dateList) {
|
|
|
+ newList.add(DateUtils.getDayStartTime(date));
|
|
|
+ }
|
|
|
+ List<Date> collect = newList.stream().distinct().collect(Collectors.toList());
|
|
|
+ for (Device device:list) {
|
|
|
+ long currentTimeMillis = System.currentTimeMillis();
|
|
|
+ for (Date date:collect) {
|
|
|
+ Date dayStartTime = DateUtils.getDayStartTime(date);
|
|
|
+ Date dayEndTime = DateUtils.getDayEndTime(date);
|
|
|
+ LambdaQueryWrapper<HtAnalogData> objectLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
|
+ objectLambdaQueryWrapper.eq(HtAnalogData::getDeviceName,device.getDeviceCode())
|
|
|
+ .between(HtAnalogData::getDataTime,dayStartTime,dayEndTime);
|
|
|
+ Integer count = htAnalogDataMapper.selectCount(objectLambdaQueryWrapper);
|
|
|
+ if (count > 0){
|
|
|
+ Map<String, Double> map = htAnalogDataMapper.selectMaxAndMinAndAvg(device.getSiteId(), dayStartTime, dayEndTime);
|
|
|
+ if (null != map){
|
|
|
+ HadSiteStatic hadSiteStatic = new HadSiteStatic();
|
|
|
+ hadSiteStatic.setSiteId(device.getSiteId());
|
|
|
+ hadSiteStatic.setHadTime(dayStartTime);
|
|
|
+ hadSiteStatic.setMaxEpp(map.get("eppMax"));
|
|
|
+ hadSiteStatic.setMinEpp(map.get("eppMin"));
|
|
|
+ hadSiteStatic.setAvgEpp(map.get("eppAvg"));
|
|
|
+ hadSiteStatic.setMaxDemand(map.get("demandMax"));
|
|
|
+ hadSiteStatic.setMinDemand(map.get("demandMin"));
|
|
|
+ hadSiteStatic.setAvgDemand(map.get("demandAvg"));
|
|
|
+ List<Object> objects = new ArrayList<>();
|
|
|
+ objects.add(0.0);
|
|
|
+ List<Object> hisList = new ArrayList<>();
|
|
|
+ hisList.add(0.0);
|
|
|
+ List<Object> dates = new ArrayList<>();
|
|
|
+ dates.add("00:00:00");
|
|
|
+ for (int i = 2; i < 24 ; i+=2) {
|
|
|
+ //结束时间
|
|
|
+ Date hours = DateUtils.setHours(dayStartTime, i);
|
|
|
+ Map<String, Double> loadIco = htAnalogDataMapper.selectMaxAndMinAndAvg(device.getSiteId(), dayStartTime, hours);
|
|
|
+ if (null == loadIco){
|
|
|
+ objects.add(0.00);
|
|
|
+ }else {
|
|
|
+ objects.add(loadIco.get("eppMax")-loadIco.get("eppMin"));
|
|
|
+ }
|
|
|
+ HtAnalogData htAnalogData = htAnalogDataMapper.selectByEndTime(dayStartTime, hours, device.getSiteId(), null);
|
|
|
+ hisList.add(JsonUtils.toJson(htAnalogData));
|
|
|
+ dayStartTime = hours;
|
|
|
+ dates.add(DateUtils.getTime(hours));
|
|
|
+ }
|
|
|
+ CommonIcoVO build = CommonIcoVO.builder().name("").list(objects).listDate(dates).build();
|
|
|
+ CommonIcoVO build1 = CommonIcoVO.builder().name("").list(hisList).listDate(dates).build();
|
|
|
+ hadSiteStatic.setLoadIco(JsonUtils.toJson(build));
|
|
|
+ hadSiteStatic.setHisIco(JsonUtils.toJson(build1));
|
|
|
+ hadSiteStaticMapper.insert(hadSiteStatic);
|
|
|
}
|
|
|
- if (htAnalogDatas.get(htAnalogDatas.size()-1).getId() >= maxId){
|
|
|
- flag = false;
|
|
|
}
|
|
|
- }else {
|
|
|
- //要进行下个天数的查询
|
|
|
- startTime = DateUtils.addDays(startTime,1);
|
|
|
- endTime = DateUtils.addDays(endTime,1);
|
|
|
- index = 0;
|
|
|
}
|
|
|
+ long e = System.currentTimeMillis();
|
|
|
+ log.info("处理时间"+(e-currentTimeMillis)+"毫秒");
|
|
|
+ log.info("一个设备处理完毕");
|
|
|
}
|
|
|
- log.info("批量导入数据处理完成");
|
|
|
}
|
|
|
|
|
|
|
|
|
- public static boolean belongCalendar(Date nowTime, Date beginTime, Date endTime) {
|
|
|
- Calendar date = Calendar.getInstance();
|
|
|
- date.setTime(nowTime);
|
|
|
- Calendar begin = Calendar.getInstance();
|
|
|
- begin.setTime(beginTime);
|
|
|
- Calendar end = Calendar.getInstance();
|
|
|
- end.setTime(endTime);
|
|
|
- if (date.after(begin) && date.before(end)) {
|
|
|
- return true;
|
|
|
- } else if (nowTime.compareTo(beginTime) == 0 || nowTime.compareTo(endTime) == 0) {
|
|
|
- return true;
|
|
|
- } else {
|
|
|
- return false;
|
|
|
+ @Scheduled(cron = "0 0 0 */1 * ?")
|
|
|
+ public void addHadJob(){
|
|
|
+ Date date = new Date();
|
|
|
+ List<Device> list = deviceMapper.list(null, null, null, null, null, null);
|
|
|
+ for (Device device:list) {
|
|
|
+ HadSiteStatic hadSiteStatic = hadSiteStaticMax(device, date);
|
|
|
+ Optional.ofNullable(hadSiteStatic).ifPresent(hads ->{
|
|
|
+ getSiteIco(device,date,hadSiteStatic);
|
|
|
+ hadSiteStaticMapper.insert(hadSiteStatic);
|
|
|
+ });
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void insertHadDateLog(List<HadDataLogVO> hadVoList,Date startTime){
|
|
|
- ArrayList<HadDataLogVO> distant = hadVoList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(HadDataLogVO::getSiteId))), ArrayList::new));
|
|
|
- List<Integer> siteList = distant.stream().map(HadDataLogVO::getSiteId).collect(Collectors.toList());
|
|
|
- HadDataLog hadDataLog = new HadDataLog();
|
|
|
- hadDataLog.setDataTime(startTime);
|
|
|
- hadDataLog.setSiteIdList(JsonUtils.toJson(siteList));
|
|
|
- hadDataLog.setHadData(JsonUtils.toJson(hadVoList));
|
|
|
- hadDataLogMapper.insert(hadDataLog);
|
|
|
- }
|
|
|
-
|
|
|
- public HadDataLogVO insertList(HtAnalogData htAnalogData){
|
|
|
- HadDataLogVO hadDataLogVO = HadDataLogVO.builder()
|
|
|
- .dataTime(htAnalogData.getDataTime())
|
|
|
- .deviceCode(htAnalogData.getDeviceName())
|
|
|
- .epp(htAnalogData.getEpp())
|
|
|
- .ia(htAnalogData.getIa())
|
|
|
- .ib(htAnalogData.getIb())
|
|
|
- .ic(htAnalogData.getIc())
|
|
|
- .ua(htAnalogData.getUa())
|
|
|
- .ub(htAnalogData.getUb())
|
|
|
- .uc(htAnalogData.getUc())
|
|
|
- .siteId(htAnalogData.getSiteId())
|
|
|
- .demand(htAnalogData.getDemand())
|
|
|
- .build();
|
|
|
- return hadDataLogVO;
|
|
|
+ /**
|
|
|
+ * 添加最大值最小值平均值
|
|
|
+ * @param device
|
|
|
+ * @param date
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public HadSiteStatic hadSiteStaticMax(Device device,Date date){
|
|
|
+ Date dayStartTime = DateUtils.getDayStartTime(date);
|
|
|
+ Date dayEndTime = DateUtils.getDayEndTime(date);
|
|
|
+ LambdaQueryWrapper<HtAnalogData> objectLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
|
+ objectLambdaQueryWrapper.eq(HtAnalogData::getDeviceName,device.getDeviceCode())
|
|
|
+ .between(HtAnalogData::getDataTime,dayStartTime,dayEndTime);
|
|
|
+ Integer count = htAnalogDataMapper.selectCount(objectLambdaQueryWrapper);
|
|
|
+ HadSiteStatic hadSiteStatic = null;
|
|
|
+ if (count > 0){
|
|
|
+ Map<String, Double> map = htAnalogDataMapper.selectMaxAndMinAndAvg(device.getSiteId(), dayStartTime, dayEndTime);
|
|
|
+ if (null != map){
|
|
|
+ hadSiteStatic = new HadSiteStatic();
|
|
|
+ hadSiteStatic.setSiteId(device.getSiteId());
|
|
|
+ hadSiteStatic.setHadTime(dayStartTime);
|
|
|
+ hadSiteStatic.setMaxEpp(map.get("eppMax"));
|
|
|
+ hadSiteStatic.setMinEpp(map.get("eppMin"));
|
|
|
+ hadSiteStatic.setAvgEpp(map.get("eppAvg"));
|
|
|
+ hadSiteStatic.setMaxDemand(map.get("demandMax"));
|
|
|
+ hadSiteStatic.setMinDemand(map.get("demandMin"));
|
|
|
+ hadSiteStatic.setAvgDemand(map.get("demandAvg"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return hadSiteStatic;
|
|
|
}
|
|
|
|
|
|
-// @Scheduled(cron = "*/5 * * * * ?")
|
|
|
- @Scheduled(cron = "0 0 0 */1 * ?")
|
|
|
- public void addHadJob(){
|
|
|
- Integer index = 1;
|
|
|
- Date date = new Date();
|
|
|
- List<HtAnalogData> list;
|
|
|
- do {
|
|
|
- List<HadDataLogVO> hadVoList = new ArrayList<>();
|
|
|
- Date dayStartTime = DateUtils.getDayStartTime(date);
|
|
|
- list = htAnalogDataMapper.page(index, 2000, dayStartTime, DateUtils.getDayEndTime(date));
|
|
|
- if (!CollectionUtils.isEmpty(list)){
|
|
|
- for (HtAnalogData htAnalogData:list) {
|
|
|
- hadVoList.add(insertList(htAnalogData));
|
|
|
- }
|
|
|
- insertHadDateLog(hadVoList,dayStartTime);
|
|
|
- index++;
|
|
|
+ /**
|
|
|
+ * 获取图标集合
|
|
|
+ * @param device
|
|
|
+ * @param dayStartTime
|
|
|
+ * @param hadSiteStatic
|
|
|
+ */
|
|
|
+ public void getSiteIco(Device device,Date dayStartTime,HadSiteStatic hadSiteStatic){
|
|
|
+ List<Object> objects = new ArrayList<>();
|
|
|
+ objects.add(0.0);
|
|
|
+ List<Object> hisList = new ArrayList<>();
|
|
|
+ hisList.add(0.0);
|
|
|
+ List<Object> dates = new ArrayList<>();
|
|
|
+ dates.add("00:00:00");
|
|
|
+ for (int i = 2; i < 24 ; i+=2) {
|
|
|
+ //结束时间
|
|
|
+ Date hours = DateUtils.setHours(dayStartTime, i);
|
|
|
+ Map<String, Double> loadIco = htAnalogDataMapper.selectMaxAndMinAndAvg(device.getSiteId(), dayStartTime, hours);
|
|
|
+ if (null == loadIco){
|
|
|
+ objects.add(0.00);
|
|
|
+ }else {
|
|
|
+ objects.add(loadIco.get("eppMax")-loadIco.get("eppMin"));
|
|
|
}
|
|
|
- }while (!CollectionUtils.isEmpty(list));
|
|
|
- log.info("处理完成");
|
|
|
+ HtAnalogData htAnalogData = htAnalogDataMapper.selectByEndTime(dayStartTime, hours, device.getSiteId(), null);
|
|
|
+ hisList.add(JsonUtils.toJson(htAnalogData));
|
|
|
+ dayStartTime = hours;
|
|
|
+ dates.add(DateUtils.getTime(hours));
|
|
|
+ }
|
|
|
+ CommonIcoVO build = CommonIcoVO.builder().name("").list(objects).listDate(dates).build();
|
|
|
+ CommonIcoVO build1 = CommonIcoVO.builder().name("").list(hisList).listDate(dates).build();
|
|
|
+ hadSiteStatic.setLoadIco(JsonUtils.toJson(build));
|
|
|
+ hadSiteStatic.setHisIco(JsonUtils.toJson(build1));
|
|
|
+
|
|
|
}
|
|
|
}
|