zss
9 小时以前 ee4ba5104799d6ef8f3050870bd5ea328de329ff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
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;
 
 
    @Autowired
    private Api api;
 
    @Autowired
    private ISysLogininforService logininforService;
 
    private static final Random RANDOM = new Random();
 
    //推送登录日志每周
//    @Scheduled(cron = "0 0 1 ? * 1")
    public void logging(){
        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(){
        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);
    }
}