package com.ruoyi.api;
|
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.json.JSONUtil;
|
import com.ruoyi.api.dto.DataRequest;
|
import com.ruoyi.api.dto.ElectricityDto;
|
import com.ruoyi.api.dto.LoggingDto;
|
import com.ruoyi.project.monitor.domain.SysLogininfor;
|
import com.ruoyi.project.monitor.service.ISysLogininforService;
|
import lombok.AllArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDateTime;
|
import java.time.YearMonth;
|
import java.time.format.DateTimeFormatter;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
@Component
|
@Slf4j
|
//榆林市工业和信息化局数据推送(定时任务)
|
public class ScheduledApi {
|
|
@Value("${api.entName}")
|
private String entName;
|
|
@Value("${api.socialCreditCode}")
|
private String socialCreditCode;
|
|
@Value("${api.dayPowerConsumption}")
|
private Double dayPowerConsumption;
|
|
@Value("${api.outputValuesBase}")
|
private Double outputValuesBase;
|
|
@Value("${api.electricityCost}")
|
private Double electricityCost;
|
|
@Value("${api.loginPush}")
|
private boolean loginPush;
|
|
@Value("${api.push}")
|
private boolean push;
|
|
|
@Autowired
|
private Api api;
|
|
@Autowired
|
private ISysLogininforService logininforService;
|
|
private static final Random RANDOM = new Random();
|
|
//推送登录日志每周
|
@Scheduled(cron = "0 0 1 ? * 1")
|
public void logging(){
|
log.info("create---进入推送登录日志......");
|
if (!loginPush){
|
return;
|
}
|
log.info("loginPush---开始推送登录日志......");
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:dd");
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
//获取登录日志
|
SysLogininfor logininfor= new SysLogininfor();
|
Map<String, Object> map = new HashMap<>();
|
//获取每个小时中生成的新数据
|
map.put("beginTime",LocalDateTime.now().minusDays(7L).format(formatter));
|
map.put("endTime",LocalDateTime.now().format(formatter));
|
logininfor.setParams(map);
|
List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
|
List<LoggingDto> loggingDtos = list.stream().map(sysLogininfor -> {
|
LoggingDto loggingDto = new LoggingDto();
|
loggingDto.setEntName(entName);
|
loggingDto.setSocialCreditCode(socialCreditCode);
|
loggingDto.setUuid(UUID.randomUUID().toString());
|
loggingDto.setUser_id(sysLogininfor.getUserName());
|
loggingDto.setLogin_time(sdf.format(sysLogininfor.getLoginTime()));
|
loggingDto.setSysName("MIS系统");
|
loggingDto.setPushtime(LocalDateTime.now().format(formatter));
|
return loggingDto;
|
}).collect(Collectors.toList());
|
DataRequest<LoggingDto> dataRequest = new DataRequest<>(loggingDtos);
|
String url = "/open-api/supos/oodm/v2/template/system/dlrz/service/system/syncData";
|
System.out.println(JSONUtil.toJsonStr(dataRequest));
|
String code = api.pushData(url, dataRequest);
|
System.out.println("code===="+code);
|
}
|
|
//推送电每月
|
@Scheduled(cron = "0 0 1 1 * ?")
|
public void electricity(){
|
log.info("create---进入推送电每月......");
|
if (!push){
|
return;
|
}
|
log.info("electricity---开始推送电每月......");
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:dd");
|
//获取登录日志
|
List<ElectricityDto> electricityDtos = new ArrayList<>();
|
ElectricityDto electricityDto = new ElectricityDto();
|
electricityDto.setEntName(entName);
|
electricityDto.setSocialCreditCode(socialCreditCode);
|
electricityDto.setUuid(UUID.randomUUID().toString());
|
//总耗电量(日耗电量±10%上下浮动*天数)
|
YearMonth lastMonth = YearMonth.now().minusMonths(1);
|
int lastMonthDays = lastMonth.lengthOfMonth();//计算上月实际天数
|
double floatRate = 0.9 + RANDOM.nextDouble() * 0.2;//生成±10%随机浮动系数(0.9 ~ 1.1)
|
double totalPower = Math.round(dayPowerConsumption * floatRate * lastMonthDays * 100) / 100.0;//上月总耗电量
|
electricityDto.setTotalPowerConsumption(String.valueOf(totalPower));
|
//生产耗电量(占比70-90%) && 办公耗电量占比剩余
|
double productionRate = 0.7 + RANDOM.nextDouble() * 0.2; // 0.7 ~ 0.9
|
double productionPower = Math.round(totalPower * productionRate * 100) / 100.0;
|
double officePower = Math.round((totalPower - productionPower) * 100) / 100.0;
|
electricityDto.setProductionPowerConsumption(String.valueOf(productionPower));
|
electricityDto.setOfficePowerConsumption(String.valueOf(officePower));
|
//峰平谷时段分配(工业通用比例:峰50%、平30%、谷20%)
|
double peakPower = Math.round(totalPower * 0.5 * 100) / 100.0;
|
double flatPower = Math.round(totalPower * 0.3 * 100) / 100.0;
|
double valleyPower = Math.round(totalPower * 0.2 * 100) / 100.0;
|
electricityDto.setPeakPowerConsumption(String.valueOf(peakPower));//峰段耗电量
|
electricityDto.setFlatPowerConsumption(String.valueOf(flatPower));//平均耗电量
|
electricityDto.setValleyPowerConsumption(String.valueOf(valleyPower));//谷段耗电量
|
//估算电力损耗量(占总耗电量3%-8%,工业配电合理损耗范围)
|
double lossRate = 0.03 + RANDOM.nextDouble() * 0.05; // 0.03 ~ 0.08
|
double powerLoss = Math.round(totalPower * lossRate * 100) / 100.0;
|
electricityDto.setPowerLossQty(String.valueOf(powerLoss));//电力损耗量
|
//计算单位产值耗电量(千瓦时/万元)= 生产耗电量 / 产值;产值基于基数随机浮动(±20%)
|
double outputValueFloat = 0.8 + RANDOM.nextDouble() * 0.4; // 产值浮动系数0.8~1.2
|
double actualOutputValue = outputValuesBase * outputValueFloat; // 实际产值(万元)
|
double powerPerOutput = Math.round((productionPower / actualOutputValue) * 100) / 100.0;
|
electricityDto.setPowerPerOutput(String.valueOf(powerPerOutput));//单位产值耗电量
|
//电费
|
double feeFloatRate = 0.88 + RANDOM.nextDouble() * 0.24;//生成±12%随机浮动系数(0.88 ~ 1.12)
|
double totalFee = Math.round(electricityCost * feeFloatRate * 100) / 100.0;
|
electricityDto.setElectricityCost(String.valueOf(totalFee));//电费
|
electricityDto.setTime(LocalDateTime.now().minusHours(2).format(formatter));
|
electricityDto.setPushtime(LocalDateTime.now().format(formatter));
|
electricityDtos.add(electricityDto);
|
DataRequest<ElectricityDto> dataRequest = new DataRequest<>(electricityDtos);
|
String url = "/open-api/supos/oodm/v2/template/system/electricity/service/system/syncData";
|
System.out.println(JSONUtil.toJsonStr(dataRequest));
|
String code = api.pushData(url, dataRequest);
|
System.out.println("code===="+code);
|
}
|
}
|