From 4b65272813b97165d0244d552530da84f5255e8f Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期一, 14 七月 2025 14:13:06 +0800
Subject: [PATCH] Merge branch 'dev' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile into dev
---
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TScreenContentServiceImpl.java | 79 ------
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java | 9
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TScreenContentController.java | 20 +
ruoyi-service/ruoyi-jianguan/src/test/java/com/ruoyi/jianguan/RuoYiJianGuanApplicationTests.java | 200 ++++++++++++++++-
ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java | 10
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java | 3
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/EnergyRefreshService.java | 299 --------------------------
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/KsolarUtils.java | 18 +
8 files changed, 247 insertions(+), 391 deletions(-)
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
index 14214bf..691ce6c 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
@@ -142,6 +142,9 @@
case SendTagConstant.END_CHARGE:
EndChargeMessage endChargeMessage = JSON.parseObject(content.toJSONString(),EndChargeMessage.class);
sendResult = enhanceProduce.endChargeMessage(endChargeMessage);
+ SendResult sendResultJianGuan = new SendResult();
+ sendResultJianGuan = enhanceProduce.endChargeMessageJianGuan(endChargeMessage);
+ log.info("rocketmq消息下发结果:{}川逸充",sendResultJianGuan);
// chargingMessage.setEndChargeMessage(endChargeMessage);
// chargingMessageUtil.handleMessage(chargingMessage);
// sendResult = enhanceProduce.chargingMessage(chargingMessage);
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java
index 43f8fdf..fe8f6e8 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java
@@ -26,7 +26,7 @@
private RocketMQEnhanceTemplate rocketMQEnhanceTemplate;
private static final String TOPIC = "charge_";
- private static final String TOPIC_JIANGUAN = "jianguan_";
+ private static final String TOPIC_JIANGUAN = "jianguan_message";
/**
* 充电桩登录认证
@@ -59,6 +59,13 @@
message.setSource(SendTagConstant.END_CHARGE);
return rocketMQEnhanceTemplate.send(TOPIC+SendTagConstant.END_CHARGE, SendTagConstant.END_CHARGE, message);
}
+ public SendResult endChargeMessageJianGuan(EndChargeMessage message) {
+ // 设置业务key
+ message.setKey(UUID.randomUUID().toString());
+ // 设置消息来源,便于查询
+ message.setSource(SendTagConstant.END_CHARGE);
+ return rocketMQEnhanceTemplate.send(TOPIC_JIANGUAN, SendTagConstant.END_CHARGE, message);
+ }
/**
* 错误报文
*/
diff --git a/ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java b/ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java
index 3d74e3e..2078d49 100644
--- a/ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java
+++ b/ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java
@@ -24,12 +24,15 @@
import com.ruoyi.integration.drainage.util.HMacMD5Util;
import com.ruoyi.integration.drainage.util.SequenceGenerator;
import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService;
+import com.ruoyi.integration.rocket.model.EndChargeMessage;
+import com.ruoyi.integration.rocket.produce.EnhanceProduce;
import com.ruoyi.order.api.dto.ChargingStatisticeDTO;
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
import com.ruoyi.order.api.model.TChargingOrder;
import com.ruoyi.other.api.domain.Operator;
import com.ruoyi.other.api.feignClient.OperatorClient;
import lombok.extern.slf4j.Slf4j;
+import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
@@ -53,4 +56,11 @@
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = RuoYiIntegrationApplication.class)
public class RuoYiIntegrationApplicationTests {
+ @Autowired
+ private EnhanceProduce enhanceProduce;
+ @Test
+ public void contextLoads() {
+ EndChargeMessage endChargeMessage = new EndChargeMessage();
+ SendResult sendResult = enhanceProduce.endChargeMessageJianGuan(endChargeMessage);
+ }
}
diff --git a/ruoyi-service/ruoyi-jianguan/src/test/java/com/ruoyi/jianguan/RuoYiJianGuanApplicationTests.java b/ruoyi-service/ruoyi-jianguan/src/test/java/com/ruoyi/jianguan/RuoYiJianGuanApplicationTests.java
index 4e8c884..53f82ef 100644
--- a/ruoyi-service/ruoyi-jianguan/src/test/java/com/ruoyi/jianguan/RuoYiJianGuanApplicationTests.java
+++ b/ruoyi-service/ruoyi-jianguan/src/test/java/com/ruoyi/jianguan/RuoYiJianGuanApplicationTests.java
@@ -1,19 +1,181 @@
-//package com.ruoyi.jianguan;
-//
-//import com.ruoyi.jianguan.mqtt.util.MqttPushUtil;
-//import org.junit.jupiter.api.Test;
-//import org.springframework.boot.test.context.SpringBootTest;
-//
-//import javax.annotation.Resource;
-//
-//@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = RuoYiJianGuanApplication.class)
-//public class RuoYiJianGuanApplicationTests {
-//
-// @Resource
-// private MqttPushUtil mqttPushUtil;
-//
-// @Test
-// public void test(){
-// mqttPushUtil.pushChargePileData("/cmt/IoT/pub/8/6700/status/silent","message消息123456");
-// }
-//}
+package com.ruoyi.jianguan;
+
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.nacos.common.utils.JacksonUtils;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.jianguan.model.BaseRequestJianGuan;
+import com.ruoyi.jianguan.model.BaseResult;
+import com.ruoyi.jianguan.model.NotificationStationStatusResult;
+import com.ruoyi.jianguan.model.QueryTokenResult;
+import com.ruoyi.jianguan.util.AESUtil;
+import com.ruoyi.jianguan.util.AesEncryption;
+import com.ruoyi.jianguan.util.HMacMD5Util;
+import com.ruoyi.jianguan.util.SequenceGenerator;
+import com.ruoyi.other.api.domain.Operator;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+@Slf4j
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = RuoYiJianGuanApplication.class)
+public class RuoYiJianGuanApplicationTests {
+ private static final String OperatorID = "906171535";
+ private static final String OperatorSecret = "9jG8qysc5RxdbjvnvdmuRYQg6J82Fwj1";
+ private static final String SigSecret = "RruzbZxnr74tqxe1";
+ private static final String DataSecret = "3QJXn4MSj78zcpW1";
+ private static final String DataSecretIV = "jhqj64V9gX8NHbu1";
+ private final static String query_token = "/query_token";
+
+ private final static String url = "https://dataexchange.cdczpt.com/shevcs/v1";
+ private final static String supervise_notification_equip_charge_status = "/notification_start_charge_result";
+
+ @Test
+ public void contextLoads() {
+ com.alibaba.fastjson2.JSONObject jsonObject = new com.alibaba.fastjson2.JSONObject();
+ jsonObject.put("StartChargeSeq","CD34920250109232935330");
+ jsonObject.put("ConnectorID","202412310000100101");
+ jsonObject.put("StartChargeSeqStat",1);
+
+ // 转化为yyyy-MM-dd HH:mm:ss格式字符串
+ jsonObject.put("StartTime","2025-01-09 23:29:40");
+
+ HttpRequest post = HttpUtil.createPost(url+supervise_notification_equip_charge_status);
+ buildBody(post, jsonObject, new Operator());
+ HttpResponse execute = post.execute();
+ if(200 != execute.getStatus()){
+ log.error("推送三方平台充电开始状态失败:" + execute.body());
+ }
+ log.info("推送三方平台设备状态响应:" + execute.body());
+ BaseResult baseResult = JSON.parseObject(execute.body(), BaseResult.class);
+ Integer Ret = baseResult.getRet();
+ if(0 != Ret){
+ log.error("推送三方平台充电开始状态失败:" + baseResult.getMsg());
+
+ }
+ //解密参数
+ String decrypt = AESUtil.decrypt(baseResult.getData(), DataSecret, DataSecretIV);
+ log.info("推送三方平台设备状态Data:" + decrypt);
+ NotificationStationStatusResult notificationStationStatusResult = JSON.parseObject(decrypt, NotificationStationStatusResult.class);
+ System.err.println(notificationStationStatusResult);
+ }
+ @Test
+ public void contextLoads1() {
+ com.alibaba.fastjson2.JSONObject jsonObject = new com.alibaba.fastjson2.JSONObject();
+ jsonObject.put("StartChargeSeq","CD34920250109232935330");
+ jsonObject.put("StartChargeSeqStat",4);
+ jsonObject.put("ConnectorID","202412310000100101");
+ jsonObject.put("ConnectorStatus",2);
+
+ jsonObject.put("CurrentA",83);
+ jsonObject.put("VoltageA",344);
+ jsonObject.put("StartTime","2025-01-09 23:29:40");
+
+ LocalDateTime now = LocalDateTime.now();
+ // 转化为yyyy-MM-dd HH:mm:ss格式字符串
+ jsonObject.put("EndTime",now.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+ jsonObject.put("TotalPower",34.29);
+ jsonObject.put("TotalMoney",25.93);
+
+ HttpRequest post = HttpUtil.createPost(url+supervise_notification_equip_charge_status);
+ buildBody(post, jsonObject, new Operator());
+ HttpResponse execute = post.execute();
+ if(200 != execute.getStatus()){
+ log.error("推送三方平台充电开始状态失败:" + execute.body());
+ }
+ log.info("推送三方平台设备状态响应:" + execute.body());
+ BaseResult baseResult = JSON.parseObject(execute.body(), BaseResult.class);
+ Integer Ret = baseResult.getRet();
+ if(0 != Ret){
+ log.error("推送三方平台充电开始状态失败:" + baseResult.getMsg());
+
+ }
+ //解密参数
+ String decrypt = AESUtil.decrypt(baseResult.getData(), DataSecret, DataSecretIV);
+ log.info("推送三方平台设备状态Data:" + decrypt);
+ NotificationStationStatusResult notificationStationStatusResult = JSON.parseObject(decrypt, NotificationStationStatusResult.class);
+ System.err.println(notificationStationStatusResult);
+ }
+ /**
+ * 构建请求参数和消息头
+ * @param post
+ * @param
+ */
+ public void buildBody(HttpRequest post, com.alibaba.fastjson2.JSONObject o, Operator operator){
+ Long timeStamp = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+ post.contentType("application/json;charset=utf-8");
+ post.header("Authorization", "Bearer " + queryToken());
+ BaseRequestJianGuan baseRequest = new BaseRequestJianGuan();
+ baseRequest.setOperatorID("906171535");
+ baseRequest.setTimeStamp(timeStamp+"");
+ baseRequest.setSeq("0001");
+
+
+ String encrypt = AesEncryption.encrypt(DataSecret, DataSecretIV,o.toJSONString());
+// String encrypt = AesEncryption.encrypt(DataSecret, DataSecretIV,jsonString);
+
+ baseRequest.setData(encrypt);
+ baseRequest.setOperator(operator);
+ SequenceGenerator generator = new SequenceGenerator();
+ String nextSequence = generator.getNextSequence();
+
+ String hmacMD5 = HMacMD5Util.getHMacMD5("906171535",timeStamp+"", encrypt,nextSequence,SigSecret);
+// String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,OurSigSecret);
+
+ baseRequest.setSig(hmacMD5);
+ String request_json = JacksonUtils.toJson(baseRequest);
+ post.body(request_json);
+ log.info("推送三方平台请求地址:" + post.getUrl());
+ log.info("推送三方平台请求参数:" + request_json);
+ log.info("推送三方平台请求Data:" + o.toJSONString());
+ }
+ public String queryToken(){
+ HttpRequest post = HttpUtil.createPost(url + query_token);
+ JSONObject info = new JSONObject();
+ info.put("OperatorID", "906171535");
+ info.put("OperatorSecret", OperatorSecret);
+ Long timeStamp = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+ post.contentType("application/json;charset=utf-8");
+ BaseRequestJianGuan baseRequest = new BaseRequestJianGuan();
+ baseRequest.setOperatorID("906171535");
+ baseRequest.setTimeStamp(timeStamp+"");
+ baseRequest.setSeq("0001");
+ String jsonString = JacksonUtils.toJson(info);
+ SequenceGenerator generator = new SequenceGenerator();
+ String nextSequence = generator.getNextSequence();
+ String data = AesEncryption.encrypt(DataSecret, DataSecretIV,jsonString);
+ String hmacMD5 = HMacMD5Util.getHMacMD5("906171535",timeStamp+"", data,nextSequence,SigSecret);
+ baseRequest.setData(data);
+ baseRequest.setSig(hmacMD5);
+ String request_json = JacksonUtils.toJson(baseRequest);
+ log.info("获取三方平台授权token请求地址:" + post.getUrl());
+ log.info("获取三方平台授权token请求参数:" + request_json);
+ log.info("获取三方平台授权token请求Data:" + jsonString);
+ post.body(request_json);
+ HttpResponse execute = post.execute();
+ if(200 != execute.getStatus()){
+ log.error("获取三方平台授权token失败:" + execute.body());
+ return null;
+ }
+ log.info("获取三方平台授权token响应参数:" + execute.body());
+ BaseResult baseResult = JSON.parseObject(execute.body(), BaseResult.class);
+ Integer Ret = baseResult.getRet();
+ if(0 != Ret){
+ log.error("获取三方平台授权token失败:" + baseResult.getMsg());
+ return null;
+ }
+ //解密参数
+ String decrypt = AESUtil.decrypt(baseResult.getData(), DataSecret, DataSecretIV);
+ log.info("获取三方平台授权token响应Data:" + decrypt);
+ QueryTokenResult queryTokenResult = JSON.parseObject(decrypt, QueryTokenResult.class);
+ String token = queryTokenResult.getAccessToken();
+// Long tokenAvailableTime = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC) + queryTokenResult.getTokenAvailab
+ return token;
+ }
+}
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TScreenContentController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TScreenContentController.java
index ba04879..1dbf64a 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TScreenContentController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TScreenContentController.java
@@ -94,12 +94,22 @@
@ApiOperation(tags = {"储能放电情况"},value = "充电桩数据大屏")
@GetMapping(value = "/energyStorageDischarge")
public AjaxResult<EnergyStorageDischargeVO> energyStorageDischarge() {
- //需调用接口 获取光伏发电量
+ String electricity = KsolarUtils.getElectricity();
+ List<TSystemConfiguration> list = systemConfigurationService.list(new LambdaQueryWrapper<TSystemConfiguration>().in(TSystemConfiguration::getType, 4, 5));
+ // 昨日放能
+ TSystemConfiguration sysConfig = list.stream().filter(e -> e.getType() == 4).findFirst().orElse(null);
+ // 昨日储能
+ TSystemConfiguration sysConfig1 = list.stream().filter(e -> e.getType() == 5).findFirst().orElse(null);
+ // 总储能
+ String s = electricity.split("_")[0];
+ // 总放能
+ String s1 = electricity.split("_")[1];
+
EnergyStorageDischargeVO vo = new EnergyStorageDischargeVO();
- //今日放能 10:00-11:59 每1分钟随机增值0.5-1,放满90停止;用第一次放能值为基数(85)开始累加,17:00-21:59 每1分钟随机增值0.5-1,放满90停止。
- vo.setTodayDischarge(energyRefreshService.getTodayDischarge());
- //今日储能 00:00-次日7:59 每1分钟随机增长0.5-1,储满115停止,12:00-16:59 每1分钟随机增长0.5-1,增加到115减第一次放能剩余值(如放能值为85,则放能剩余值为90-85)结束;
- vo.setTodayStorage(energyRefreshService.getTodayStorage());
+ BigDecimal subtract = new BigDecimal(s1).subtract(new BigDecimal(sysConfig.getContent()));
+ vo.setTodayDischarge(subtract);
+ BigDecimal subtract1 = new BigDecimal(s).subtract(new BigDecimal(sysConfig1.getContent()));
+ vo.setTodayStorage(subtract1);
return AjaxResult.success(vo);
}
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TScreenContentServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TScreenContentServiceImpl.java
index 569de12..bee6136 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TScreenContentServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TScreenContentServiceImpl.java
@@ -57,11 +57,11 @@
EmissionReductionVO vo = new EmissionReductionVO();
//获取总电量 计算累计充电二氧化碳减排量
BigDecimal charge=top.getCarCharge();
+ BigDecimal multiplier = new BigDecimal("0.1404");
//计算累计充电二氧化碳减排量
if (charge.compareTo(BigDecimal.ZERO) != 0) {
// 定义乘数和除数
- BigDecimal multiplier = new BigDecimal("0.1404"); // 0.1404
- BigDecimal divisor = new BigDecimal("1000"); // 1000
+ // 0.1404
// 计算:charge × 0.1404 ÷ 1000
charge = charge
.multiply(multiplier) // 乘以 0.1404
@@ -70,42 +70,16 @@
vo.setCharge(charge);
//获取累计储能放电量
- TSystemConfiguration sysConfig = systemConfigurationMapper.selectOne(new LambdaQueryWrapper<TSystemConfiguration>()
- .eq(TSystemConfiguration::getType,3));
- //解析
- ScreenStorageConfigVO configVO = JSON.parseObject(sysConfig.getContent(), ScreenStorageConfigVO.class);
- LocalDate today = LocalDate.now();
- // 判断是否等于今天
- if (configVO.getLastUpdated().equals(today)) {
- vo.setEnergyStorage(configVO.getStorageDisCharge().multiply(new BigDecimal("0.1404")).divide(new BigDecimal("1000"),2,RoundingMode.DOWN));
- }else {
- //判断离今天还有几天
- int count = (int) ChronoUnit.DAYS.between(configVO.getLastUpdated(), today) +1;//包括今天
- BigDecimal storageDisCharge = configVO.getStorageDisCharge();
- // 每天生成一个随机值(不超过100)并累加
- for (int i = 0; i < count; i++) {
- int dailyCharge = ThreadLocalRandom.current().nextInt(0, 101); // 0-100的随机数
- storageDisCharge = storageDisCharge.add(new BigDecimal(dailyCharge));
- }
+ String s = KsolarUtils.getElectricity().split("_")[0];
+ vo.setEnergyStorage(new BigDecimal(s).multiply(multiplier) // 乘以 0.1404
+ .divide(new BigDecimal("1000"),2, RoundingMode.HALF_DOWN));
- // 更新回对象
- configVO.setStorageDisCharge(storageDisCharge);
- configVO.setLastUpdated(today);
- String json = JSON.toJSONString(configVO);
- sysConfig.setContent(json);
-
- systemConfigurationMapper.updateById(sysConfig);
- vo.setEnergyStorage(storageDisCharge.multiply(new BigDecimal("0.1404")).divide(new BigDecimal("1000"),2,RoundingMode.DOWN));
- }
//获取累计发电
vo.setPhotovoltaic(KsolarUtils.getYearAllEnergy());
-
//总数:
BigDecimal total = vo.getPhotovoltaic().add(vo.getEnergyStorage()).add(vo.getCharge());
vo.setTotal(total);
-
-
@@ -173,49 +147,14 @@
vo.setCarDisCharge(carCharge);
vo.setGreenElectricity(greenElectricity);
- //获取系统建设日期和累计储能放电量
- TSystemConfiguration sysConfig = systemConfigurationMapper.selectOne(new LambdaQueryWrapper<TSystemConfiguration>()
- .eq(TSystemConfiguration::getType,3));
- //解析
- ScreenStorageConfigVO configVO = JSON.parseObject(sysConfig.getContent(), ScreenStorageConfigVO.class);
//计算储能充电量
- LocalDate systemCreateTime = configVO.getSystemCreateTime();
- LocalDate today = LocalDate.now();
- int days = (int) ChronoUnit.DAYS.between(systemCreateTime, today) +1;//包括今天
-
- BigDecimal dailyRate = new BigDecimal("100");
- BigDecimal totalCharge = dailyRate.multiply(BigDecimal.valueOf(days));
- vo.setStorageCharge(totalCharge);
+ String electricity = KsolarUtils.getElectricity();
+ vo.setStorageCharge(new BigDecimal( electricity.split("_")[0]));
vo.setPhotovoltaic(new BigDecimal(KsolarUtils.getAllEnergy(LocalDate.now().toString())));
vo.setGreenElectricity(vo.getPhotovoltaic().multiply(new BigDecimal("0.94")).setScale(2, RoundingMode.HALF_UP));
-
- //获取储能放电量
- // 判断是否等于今天
- if (configVO.getLastUpdated().equals(today)) {
- vo.setStorageDisCharge(configVO.getStorageDisCharge());
- return vo;
- }
- //判断离今天还有几天
- int count = (int) ChronoUnit.DAYS.between(configVO.getLastUpdated(), today) +1;//包括今天
- BigDecimal storageDisCharge = configVO.getStorageDisCharge();
- // 每天生成一个随机值(不超过100)并累加
- for (int i = 0; i < count; i++) {
- int dailyCharge = ThreadLocalRandom.current().nextInt(0, 101); // 0-100的随机数
- storageDisCharge = storageDisCharge.add(new BigDecimal(dailyCharge));
- }
-
- // 更新回对象
- configVO.setStorageDisCharge(storageDisCharge);
- configVO.setLastUpdated(today);
- String json = JSON.toJSONString(configVO);
- sysConfig.setContent(json);
-
- systemConfigurationMapper.updateById(sysConfig);
- vo.setStorageDisCharge(storageDisCharge);
-
-
- return vo;
+ vo.setStorageDisCharge(new BigDecimal(electricity.split("_")[1]));
+ return vo;
}
@Override
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/EnergyRefreshService.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/EnergyRefreshService.java
index b5d03b8..d7aa1f6 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/EnergyRefreshService.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/EnergyRefreshService.java
@@ -29,304 +29,21 @@
@Resource
private TSystemConfigurationMapper systemConfigurationMapper;
- // 储能相关参数
- private final BigDecimal storageMax = new BigDecimal("115"); // 储能最大值
- private final BigDecimal targetDischargeTotal = new BigDecimal("97.75"); // 目标总放电量
- private final double minChargeIncrement = 0.5; // 充电最小增量
- private final double maxChargeIncrement = 1.0; // 充电最大增量
- private final int minDischargeTimes = 3; // 最小放电次数
- private final int maxDischargeTimes = 4; // 最大放电次数
- private final BigDecimal minDischargeAmount = new BigDecimal("25"); // 单次最小放电量
- private final BigDecimal maxDischargeAmount = new BigDecimal("35"); // 单次最大放电量
- // 充电阶段标记
- private boolean isFirstChargeCompleted = false;
- private boolean isSecondChargeCompleted = false;
- // 放电次数计数器
- private int dischargeCount = 0;
- // 当前阶段总放电量
- private BigDecimal currentPhaseDischarge = BigDecimal.ZERO;
-
- // 定时任务方法 - 能量刷新
-// @Scheduled(cron = "0 * * * * ?") // 每分钟执行一次
- public synchronized void refreshValue() {
- LocalTime now = LocalTime.now();
-
- // 第一轮充电阶段 (0:00-3:00)
- if (now.isAfter(LocalTime.of(0, 0)) && now.isBefore(LocalTime.of(3, 0))) {
- handleChargePhase();
- }
- // 第一轮放电阶段 (3:10开始,每10分钟一次)
- else if (now.isAfter(LocalTime.of(3, 0)) && now.isBefore(LocalTime.of(15, 0))
- && now.getMinute() % 10 == 0 && now.getSecond() == 0) {
- handleDischargePhase(false);
- }
- // 第二轮充电阶段 (15:00-17:00)
- else if (now.isAfter(LocalTime.of(15, 0)) && now.isBefore(LocalTime.of(17, 0))) {
- handleChargePhase();
- }
- // 第二轮放电阶段 (17:10开始,每10分钟一次)
- else if (now.isAfter(LocalTime.of(17, 0)) && now.isBefore(LocalTime.of(23, 59))
- && now.getMinute() % 10 == 0 && now.getSecond() == 0) {
- handleDischargePhase(true);
- }
- }
-
- // 充电阶段处理逻辑
- private void handleChargePhase() {
- BigDecimal todayStorage = getTodayStorage();
-
- // 如果已经充满,则不再充电
- if (todayStorage.compareTo(storageMax) >= 0) {
- if (!isFirstChargeCompleted && todayStorage.compareTo(storageMax) >= 0) {
- isFirstChargeCompleted = true;
- System.out.println("第一轮充电已完成,当前储能: " + todayStorage);
- } else if (!isSecondChargeCompleted && todayStorage.compareTo(storageMax.multiply(new BigDecimal("2"))) >= 0) {
- isSecondChargeCompleted = true;
- System.out.println("第二轮充电已完成,当前储能: " + todayStorage);
- }
- return;
- }
-
- // 随机增量0.5-1.0
- BigDecimal increment = randomBigDecimal(minChargeIncrement, maxChargeIncrement);
- BigDecimal newStorage = todayStorage.add(increment).setScale(2, RoundingMode.HALF_UP);
-
- // 确保不超过最大值
- BigDecimal maxAllowed = isFirstChargeCompleted ? storageMax.multiply(new BigDecimal("2")) : storageMax;
- if (newStorage.compareTo(maxAllowed) > 0) {
- newStorage = maxAllowed;
- }
-
- updateStorageValue(newStorage);
- System.out.printf("充电阶段:当前时间 %s,今日储能:%.2f%n", LocalTime.now(), newStorage);
- }
-
- // 放电阶段处理逻辑
- private void handleDischargePhase(boolean isSecondPhase) {
- // 如果是第二轮放电且第一轮未完成,则不执行
- if (isSecondPhase && !isFirstChargeCompleted) {
- return;
- }
-
- // 如果已经达到目标放电量,则不再放电
- BigDecimal todayDischarge = getTodayDischarge();
- BigDecimal target = isSecondPhase ? targetDischargeTotal.multiply(new BigDecimal("2")) : targetDischargeTotal;
- if (todayDischarge.compareTo(target) >= 0) {
- return;
- }
-
- // 如果是新一轮放电阶段,重置计数器
- if (currentPhaseDischarge.compareTo(BigDecimal.ZERO) == 0) {
- dischargeCount = 0;
- }
-
- // 计算剩余需要放电的量
- BigDecimal remainingDischarge = target.subtract(todayDischarge);
-
- // 随机本次放电量 (25-35)
- BigDecimal dischargeAmount = randomBigDecimal(minDischargeAmount.doubleValue(), maxDischargeAmount.doubleValue());
-
- // 如果剩余量不足,则只放剩余量
- if (dischargeAmount.compareTo(remainingDischarge) > 0) {
- dischargeAmount = remainingDischarge;
- }
-
- // 更新放电量
- BigDecimal newDischarge = todayDischarge.add(dischargeAmount).setScale(2, RoundingMode.HALF_UP);
- updateDischargeValue(newDischarge);
-
- // 更新当前阶段放电总量
- currentPhaseDischarge = currentPhaseDischarge.add(dischargeAmount);
- dischargeCount++;
-
- System.out.printf("放电阶段:当前时间 %s,第%d次放电,本次放电:%.2f,今日总放电:%.2f%n",
- LocalTime.now(), dischargeCount, dischargeAmount, newDischarge);
-
- // 如果达到最大放电次数或完成目标放电量,重置当前阶段放电量
- if (dischargeCount >= maxDischargeTimes || remainingDischarge.subtract(dischargeAmount).compareTo(BigDecimal.ZERO) <= 0) {
- currentPhaseDischarge = BigDecimal.ZERO;
- }
- }
-
- // 重置任务(每天凌晨0点)
+ // 记录截至昨天的总量(每天凌晨0点)
@Scheduled(cron = "0 0 0 * * ?")
public void reset() {
- // 重置所有状态
- isFirstChargeCompleted = false;
- isSecondChargeCompleted = false;
- dischargeCount = 0;
- currentPhaseDischarge = BigDecimal.ZERO;
-
- // 初始化今日储能和放电为0
- updateStorageValue(BigDecimal.ZERO);
- updateDischargeValue(BigDecimal.ZERO);
- System.out.println("每日重置完成:今日储能和放电已清零");
-
-
+ String electricity = KsolarUtils.getElectricity();
TSystemConfiguration sysConfig = systemConfigurationMapper.selectOne(new LambdaQueryWrapper<TSystemConfiguration>()
- .eq(TSystemConfiguration::getType,4));
- sysConfig.setContent("0");
+ .eq(TSystemConfiguration::getType,5));
+ sysConfig.setContent(electricity.split("_")[0]);
systemConfigurationMapper.updateById(sysConfig);
-
- }
-
- /**
- * 生成指定范围内的随机 BigDecimal(两位小数)
- * @param min 最小值(包含)
- * @param max 最大值(包含)
- * @return 随机 BigDecimal
- */
- private BigDecimal randomBigDecimal(double min, double max) {
- // 生成 [0, 1) 随机数
- double randomValue = random.nextDouble();
- // 计算范围内的随机值
- double range = max - min;
- double value = min + (randomValue * range);
-
- // 转换为两位小数的 BigDecimal
- return BigDecimal.valueOf(value).setScale(2, RoundingMode.HALF_UP);
- }
-
-
- // 通用配置更新方法
- private void updateConfigField(String field, BigDecimal value) {
- TSystemConfiguration sysConfig = systemConfigurationMapper.selectOne(
- new LambdaQueryWrapper<TSystemConfiguration>()
- .eq(TSystemConfiguration::getType, 3)
- );
- if (sysConfig != null) {
- ScreenStorageConfigVO configVO = JSON.parseObject(sysConfig.getContent(), ScreenStorageConfigVO.class);
- if ("todayStorage".equals(field)) {
- configVO.setTodayStorage(value);
- } else {
- configVO.setTodayDischarge(value);
- }
- sysConfig.setContent(JSON.toJSONString(configVO));
- systemConfigurationMapper.updateById(sysConfig);
- }
- }
- // 时间段判断方法
- private boolean isInStorageMorning(LocalTime time) {
- return time.isAfter(LocalTime.of(0, 0)) && time.isBefore(LocalTime.of(8, 0));
- }
-
- private boolean isInDischargeMorning(LocalTime time) {
- return time.isAfter(LocalTime.of(10, 0)) && time.isBefore(LocalTime.of(12, 0));
- }
-
- private boolean isInStorageAfternoon(LocalTime time) {
- return time.isAfter(LocalTime.of(12, 0)) && time.isBefore(LocalTime.of(17, 0));
- }
-
- private boolean isInDischargeAfternoon(LocalTime time) {
- return time.isAfter(LocalTime.of(17, 0)) && time.isBefore(LocalTime.of(22, 0));
- }
-
-
- // 更新今日储能值到数据库
- private void updateStorageValue(BigDecimal value) {
- updateConfigField("todayStorage", value);
- }
-
- // 更新今日放电值到数据库(原逻辑保留)
- private void updateDischargeValue(BigDecimal value) {
- updateConfigField("todayDischarge", value);
- }
-
- public BigDecimal getTodayStorage() {
- TSystemConfiguration sysConfig = systemConfigurationMapper.selectOne(
- new LambdaQueryWrapper<TSystemConfiguration>()
- .eq(TSystemConfiguration::getType, 3)
- );
- if (sysConfig != null) {
- ScreenStorageConfigVO configVO = JSON.parseObject(sysConfig.getContent(), ScreenStorageConfigVO.class);
- return configVO.getTodayStorage();
- }
- return BigDecimal.ZERO;
- }
-
- public BigDecimal getTodayDischarge() {
- TSystemConfiguration sysConfig = systemConfigurationMapper.selectOne(
- new LambdaQueryWrapper<TSystemConfiguration>()
- .eq(TSystemConfiguration::getType, 3)
- );
- if (sysConfig != null) {
- ScreenStorageConfigVO configVO = JSON.parseObject(sysConfig.getContent(), ScreenStorageConfigVO.class);
- return configVO.getTodayDischarge();
- }
- return BigDecimal.ZERO;
- }
-
-
-
-
- /**
- *光伏发电和消纳
- */
-// @Scheduled(cron = "0 */1 * * * ?") // 每分钟点执行
- public void refreshValueOne() {
- // 判断时间是否在6:00到8:59
- LocalTime now = LocalTime.now();
-// if (now.isAfter(LocalTime.of(6, 0)) && now.isBefore(LocalTime.of(8, 59))) {
-// List<TSystemConfiguration> sysConfigs = systemConfigurationMapper.selectList(new LambdaQueryWrapper<TSystemConfiguration>()
-// .in(TSystemConfiguration::getType,4,5));
-// TSystemConfiguration sysConfig = sysConfigs.stream().filter(e -> e.getType() == 4).findFirst().orElse(null);
-//
-// sysConfig.setContent(new BigDecimal(sysConfig.getContent()).add(new BigDecimal("0.5")).toString());
-// systemConfigurationMapper.updateById(sysConfig);
-//
-//
-// TSystemConfiguration sysConfig1 = sysConfigs.stream().filter(e -> e.getType() == 5).findFirst().orElse(null);
-// String string = new BigDecimal(sysConfig1.getContent()).add(new BigDecimal("0.5")).toString();
-// sysConfig1.setContent(string);
-// systemConfigurationMapper.updateById(sysConfig1);
-// // 在6:00到8:59之间,不执行
-// return;
-// }
- // 9:00-16:59每分钟增加随机3 到 3.5
- if (now.isAfter(LocalTime.of(6, 0)) && now.isBefore(LocalTime.of(12, 0))) {
- List<TSystemConfiguration> sysConfigs = systemConfigurationMapper.selectList(new LambdaQueryWrapper<TSystemConfiguration>()
- .in(TSystemConfiguration::getType,4,5));
-
- TSystemConfiguration sysConfig = sysConfigs.stream().filter(e -> e.getType() == 4).findFirst().orElse(null);
- sysConfig.setContent( new BigDecimal(sysConfig.getContent()).add(new BigDecimal(0.1 + (1 - 0.1) * random.nextDouble())
- .setScale(2, RoundingMode.HALF_UP)).toString());
- systemConfigurationMapper.updateById(sysConfig);
-
-
- TSystemConfiguration sysConfig1 = sysConfigs.stream().filter(e -> e.getType() == 5).findFirst().orElse(null);
- String string = new BigDecimal(sysConfig1.getContent()).add(new BigDecimal(0.1 + (1 - 0.1) * random.nextDouble())).toString();
- sysConfig1.setContent(string);
- systemConfigurationMapper.updateById(sysConfig1);
- return;
- }
-
- //17:00-18:59 每分钟增加0.5
-// if (now.isAfter(LocalTime.of(17, 0)) && now.isBefore(LocalTime.of(18, 59))) {
-// List<TSystemConfiguration> sysConfigs = systemConfigurationMapper.selectList(new LambdaQueryWrapper<TSystemConfiguration>()
-// .in(TSystemConfiguration::getType,4,5));
-//
-// TSystemConfiguration sysConfig = sysConfigs.stream().filter(e -> e.getType() == 4).findFirst().orElse(null);
-//
-// sysConfig.setContent(new BigDecimal(sysConfig.getContent()).add(new BigDecimal("0.5")).toString());
-// systemConfigurationMapper.updateById(sysConfig);
-//
-//
-// TSystemConfiguration sysConfig1 = sysConfigs.stream().filter(e -> e.getType() == 5).findFirst().orElse(null);
-// String string = new BigDecimal(sysConfig1.getContent()).add(new BigDecimal("0.5")).toString();
-// sysConfig1.setContent(string);
-// systemConfigurationMapper.updateById(sysConfig1);
-// }
- }
-
-
- public static void main(String[] args) {
- Random random = new Random();
- BigDecimal bigDecimal = new BigDecimal(0.1 + (1 - 0.1) * random.nextDouble());
- System.out.println(bigDecimal);
+ TSystemConfiguration sysConfig1 = systemConfigurationMapper.selectOne(new LambdaQueryWrapper<TSystemConfiguration>()
+ .eq(TSystemConfiguration::getType,4));
+ sysConfig1.setContent(electricity.split("_")[1]);
+ systemConfigurationMapper.updateById(sysConfig1);
}
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/KsolarUtils.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/KsolarUtils.java
index eb3cf11..06ab4ac 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/KsolarUtils.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/KsolarUtils.java
@@ -199,6 +199,7 @@
* @return
*/
public static String getElectricity(){
+ String valueTotal = "0";
String value = "0";
HttpRequest post = HttpRequest.post("https://www.zsdcloud.cn:8443/openApi/equipment/select.action");
post.form("token", accessToken);
@@ -215,16 +216,23 @@
}
String string1 = jsonObject.getString("result");
JSONObject jsonObject1 = JSONObject.parseObject(string1);
- String realInfo = jsonObject1.getString("realInfo");
+ String realInfo = jsonObject1.getString("childList");
JSONArray jsonArray = JSONArray.parseArray(realInfo);
for (Object o : jsonArray) {
JSONObject jsonObject2 = JSONObject.parseObject(o.toString());
- if(jsonObject2.get("Name").toString().equals("累积日充电量")){
- value= jsonObject2.get("Value").toString();
- break;
+ String string2 = jsonObject2.get("valueList").toString();
+ JSONArray jsonArray1 = JSONArray.parseArray(string2);
+ for (Object o1 : jsonArray1) {
+ JSONObject jsonObject3 = JSONObject.parseObject(o1.toString());
+ if(jsonObject3.get("Name").toString().equals("系统累计充电量")){
+ valueTotal= jsonObject3.get("Value").toString();
+ }
+ if(jsonObject3.get("Name").toString().equals("系统累计放电量")){
+ value= jsonObject3.get("Value").toString();
+ }
}
}
- return value;
+ return valueTotal+"_"+value;
}
public static void main(String[] args) throws Exception {
String electricity = getElectricity();
--
Gitblit v1.7.1