From 09cf27cc000267a7d23e3cf5d78ef690e603bdf3 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 20 九月 2024 10:49:58 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java                             |    4 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java                      |    2 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/UploadRealTimeMonitoringDataMessage.java      |    4 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/ErrorMessageMessageListener.java           |   80 +++++++++++++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java                        |    4 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java                |   10 +
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/ErrorMessageMessageService.java            |    8 +
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ErrorMessageMessage.java                      |   35 +++++
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java                                  |    2 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java                         |   11 +
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsDemandAndChargerExportationMessage.java    |    3 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java                         |   11 +
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ParameterSettingMessage.java                  |    2 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/AcquisitionBillingModeMessageListener.java |   16 +-
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java      |    9 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/ErrorMessageMessageServiceImpl.java   |   35 +++++
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java      |   10 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/EndChargeMessage.java                         |    4 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java               |   82 +++++++++++++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/StrategyUtil.java                        |    9 +
 20 files changed, 313 insertions(+), 28 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java
index 94a055e..e12602d 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java
@@ -6,6 +6,7 @@
 import com.ruoyi.common.core.constant.ServiceNameConstants;
 import com.ruoyi.common.core.domain.R;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -26,14 +27,14 @@
 	 * @param siteId
 	 * @return
 	 */
-	@PostMapping("/t-accounting-strategy-detail/getDetailBySiteId")
+	@GetMapping("/t-accounting-strategy-detail/getDetailBySiteId")
 	R<TAccountingStrategyDetail> getDetailBySiteId(@RequestParam("siteId") Integer siteId);
 	/**
 	 * 通过桩编号查询当前时段使用的策略明细
 	 * @param code
 	 * @return
 	 */
-	@PostMapping("/t-accounting-strategy-detail/getDetailByCode")
+	@GetMapping("/t-accounting-strategy-detail/getDetailByCode")
 	R<TAccountingStrategyDetail> getDetailByCode(@RequestParam("code") String code);
 	/**
 	 * 校验充电桩计费模版是否准确
@@ -49,13 +50,13 @@
 	 * @param id
 	 * @return
 	 */
-	@PostMapping("/t-accounting-strategy-detail/getListByAccountingStrategyId")
+	@GetMapping("/t-accounting-strategy-detail/getListByAccountingStrategyId")
 	R<List<TAccountingStrategyDetail>> getListByAccountingStrategyId(@RequestParam("id") Integer id);
 	/**
 	 * 通过桩编号查询当前使用的策略明细列表
 	 * @param code
 	 * @return
 	 */
-	@PostMapping("/t-accounting-strategy-detail/getDetailListByCode")
+	@GetMapping("/t-accounting-strategy-detail/getDetailListByCode")
 	R<List<TAccountingStrategyDetail>> getDetailListByCode(@RequestParam("code") String code);
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java
index ea4fc09..7f2650b 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java
@@ -71,7 +71,7 @@
 
             @Override
             public R vipCallBack(String code, String outTradeNo) {
-                return null;
+                return R.fail("会员订单回调失败:" + cause.getMessage());
             }
 
 
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java
index 35c031e..b87e9de 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java
@@ -91,7 +91,7 @@
      * @param siteId
      * @return
      */
-    @PostMapping("/getDetailBySiteId")
+    @GetMapping("/getDetailBySiteId")
     public R<TAccountingStrategyDetail> getDetailBySiteId(@RequestParam("siteId") Integer siteId){
         Site site = siteService.getById(siteId);
         TAccountingStrategy accountingStrategy = accountingStrategyService.getById(site.getAccountingStrategyId());
@@ -105,8 +105,8 @@
      * @param code 设备编号
      * @return
      */
-    @PostMapping("/getDetailByCode")
-    public R<TAccountingStrategyDetail> getDetailByPileId(@RequestParam("code") String code){
+    @GetMapping("/getDetailByCode")
+    public R<TAccountingStrategyDetail> getDetailByCode(@RequestParam("code") String code){
         // 查询桩
         TChargingPile chargingPile = chargingPileService.getOne(Wrappers.lambdaQuery(TChargingPile.class)
                 .eq(TChargingPile::getCode,code)
@@ -149,7 +149,7 @@
      * @param id
      * @return
      */
-    @PostMapping("/getListByAccountingStrategyId")
+    @GetMapping("/getListByAccountingStrategyId")
     public R<List<TAccountingStrategyDetail>> getListByAccountingStrategyId(@RequestParam("id") Integer id){
         List<TAccountingStrategyDetail> list = accountingStrategyDetailService.list(new LambdaQueryWrapper<TAccountingStrategyDetail>().eq(TAccountingStrategyDetail::getAccountingStrategyId, id));
         return R.ok(list);
@@ -160,7 +160,7 @@
      * @param code
      * @return
      */
-    @PostMapping("/t-accounting-strategy-detail/getDetailListByCode")
+    @GetMapping("/getDetailListByCode")
     public R<List<TAccountingStrategyDetail>> getDetailListByCode(@RequestParam("code") String code){
         // 查询桩
         TChargingPile chargingPile = chargingPileService.getOne(Wrappers.lambdaQuery(TChargingPile.class)
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java
index 3c83fca..3062d45 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java
@@ -19,6 +19,10 @@
 	 */
 	public static final String END_CHARGE = "end_charge";
 	/**
+	 * 错误报文
+	 */
+	public static final String ERROR_MESSAGE = "error_message";
+	/**
 	 * 计费模型验证请求
 	 */
 	public static final String BILLING_MODE_VERIFY ="billing_mode_verify";
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java
index 9a27b45..53b62e4 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java
@@ -172,6 +172,16 @@
     }
 
     /**
+     * 对时设置
+     * @param timingSetting 实体对象
+     * @return
+     */
+    @PostMapping("/timingSetting")
+    public String timingSetting(@RequestBody TimingSetting timingSetting){
+        return  iotMessageProduce.sendMessage(timingSetting.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING.getKey(),messageUtil.timingSetting(timingSetting));
+    }
+
+    /**
      * 对时设置应答
      * @param timingSettingReply 实体对象
      * @return
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java
index 12ea9d4..5146187 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java
@@ -67,6 +67,10 @@
 	 */
 	 WORKING_PARAMETER_SETTING ("充电桩工作参数设置","working_parameter_setting"),
 	/**
+	 * 对时设置
+	 */
+	TIMING_SETTING ("对时设置","timing_setting"),
+	/**
 	 * 对时设置应答
 	 */
 	 TIMING_SETTING_REPLY ("对时设置应答","timing_setting_reply"),
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java
index 491377c..77aeab2 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java
@@ -114,7 +114,7 @@
      * 创建设备
      * @param productId 产品ID
      * @param nodeId 设备标识码  通常使用IMEI、MAC地址或Serial No作为node_id
-     * @param deviceId 设备ID 使用CodeGenerateUtils.generateVolumeSn()
+     * @param deviceId 设备ID 使用设备标识码
      * @param deviceName 设备名称
      * @param description 设备描述
      * @return AddDeviceResponse
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 cb36d98..c29b1a2 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
@@ -5,6 +5,7 @@
 import com.ruoyi.chargingPile.api.dto.CheckChargingStrategyDTO;
 import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient;
 import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.integration.api.model.*;
 import com.ruoyi.integration.iotda.constant.SendTagConstant;
@@ -17,15 +18,18 @@
 import com.ruoyi.integration.rocket.produce.EnhanceProduce;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.rocketmq.client.producer.SendResult;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * iotda消息监听
@@ -89,6 +93,11 @@
                 sendResult = enhanceProduce.endChargeMessage(endChargeMessage);
                 // 响应硬件
                 break;
+            case SendTagConstant.ERROR_MESSAGE:
+                ErrorMessageMessage errorMessageMessage = JSON.parseObject(content.toJSONString(),ErrorMessageMessage.class);
+                sendResult = enhanceProduce.errorMessageMessage(errorMessageMessage);
+                // 响应硬件
+                break;
             case SendTagConstant.BILLING_MODE_VERIFY:
                 BillingModeVerifyMessage billingModeVerifyMessage = JSON.parseObject(content.toJSONString(),BillingModeVerifyMessage.class);
                 sendResult = enhanceProduce.billingModeVerifyMessage(billingModeVerifyMessage);
@@ -102,7 +111,7 @@
                 }else {
                     // 查询桩使用的模版
                     CheckChargingStrategyDTO dto = new CheckChargingStrategyDTO();
-                    dto.setCode(billingModeVerifyMessage.getBilling_model_code());
+                    dto.setCode(billingModeVerifyMessage.getCharging_pile_code());
                     dto.setStrategyDetailId(Integer.valueOf(billingModeVerifyMessage.getBilling_model_code()));
                     Boolean check = accountingStrategyDetailClient.checkChargingStrategy(dto).getData();
                     // 校验计费模版是否准确
@@ -127,6 +136,10 @@
                 StrategyUtil.setStrategyPrice(strategyPrice,acquisitionBillingModeReply);
                 // 时段设置
                 StrategyUtil.setTime(accountingStrategyDetails,acquisitionBillingModeReply);
+                TAccountingStrategyDetail accountingStrategyDetail = accountingStrategyDetailClient.getDetailByCode(acquisitionBillingModeMessage.getCharging_pile_code()).getData();
+                acquisitionBillingModeReply.setBilling_model_code(accountingStrategyDetail.getId().toString());
+                acquisitionBillingModeReply.setCharging_pile_code(acquisitionBillingModeMessage.getCharging_pile_code());
+                acquisitionBillingModeReply.setLoss_ratio(BigDecimal.ZERO);
                 iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.ACQUISITION_BILLING_MODE_REPLY.getKey(),messageUtil.acquisitionBillingModeReply(acquisitionBillingModeReply));
                 break;
             case SendTagConstant.UPLOAD_REAL_TIME_MONITORING_DATA:
@@ -166,6 +179,14 @@
                 ChargingPileStartsChargingMessage chargingPileStartsChargingMessage = JSON.parseObject(content.toJSONString(),ChargingPileStartsChargingMessage.class);
                 sendResult = enhanceProduce.chargingPileStartsChargingMessage(chargingPileStartsChargingMessage);
                 // 响应硬件
+                PlatformConfirmationCharging platformConfirmationCharging = new PlatformConfirmationCharging();
+                platformConfirmationCharging.setCharging_pile_code(chargingPileStartsChargingMessage.getCharging_pile_code());
+                platformConfirmationCharging.setCharging_gun_code(chargingPileStartsChargingMessage.getCharging_gun_code());
+                platformConfirmationCharging.setCard_number(chargingPileStartsChargingMessage.getAccount());
+                platformConfirmationCharging.setAccount_balance(BigDecimal.ZERO);
+                platformConfirmationCharging.setAuthentication(1);
+                // TODO 若是失败,给出失败原因
+                iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.PLATFORM_CONFIRMATION_CHARGING.getKey(),messageUtil.platformConfirmationCharging(platformConfirmationCharging));
                 break;
             case SendTagConstant.PLATFORM_START_CHARGING_REPLY:
                 PlatformStartChargingReplyMessage platformStartChargingReplyMessage = JSON.parseObject(content.toJSONString(),PlatformStartChargingReplyMessage.class);
@@ -245,4 +266,63 @@
         return AjaxResult.success();
     }
 
+    @PostMapping(value = "/message/sendMessage")
+    public R sendMessage() {
+        // 运营平台远程控制启机
+//        PlatformStartCharging platformStartCharging = new PlatformStartCharging();
+//        platformStartCharging.setTransaction_serial_number("4200002375202409185150427245");
+//        platformStartCharging.setCharging_pile_code("3401231001200202");
+//        platformStartCharging.setCharging_gun_code("1");
+//        platformStartCharging.setCard_number("1833063878153543681");
+//        platformStartCharging.setAccount_balance(new BigDecimal(50));
+//        String message = iotMessageProduce.sendMessage(platformStartCharging.getCharging_pile_code(), ServiceIdMenu.PLATFORM_START_CHARGING.getKey(), messageUtil.platformStartCharging(platformStartCharging));
+        // 运营平台远程停机
+//        PlatformStopCharging platformStopCharging = new PlatformStopCharging();
+//        platformStopCharging.setCharging_pile_code("3401231001200202");
+//        platformStopCharging.setCharging_gun_code("1");
+//        String message = iotMessageProduce.sendMessage(platformStopCharging.getCharging_pile_code(), ServiceIdMenu.PLATFORM_STOP_CHARGING.getKey(),messageUtil.platformStopCharging(platformStopCharging));
+        // 修改余额
+//        UpdateBalance updateBalance = new UpdateBalance();
+//        updateBalance.setCharging_pile_code("3401231001200202");
+//        updateBalance.setCharging_gun_code("1");
+//        updateBalance.setPhysical_card_number("1833063878153543681");
+//        updateBalance.setAccount_balance(new BigDecimal(20));
+//        String message = iotMessageProduce.sendMessage(updateBalance.getCharging_pile_code(), ServiceIdMenu.UPDATE_BALANCE.getKey(),messageUtil.updateBalance(updateBalance));
+        // 充电桩工作参数设置
+//        WorkingParameterSetting workingParameterSetting = new WorkingParameterSetting();
+//        workingParameterSetting.setCharging_pile_code("3401231001200202");
+//        workingParameterSetting.setAllow_work(0);
+//        workingParameterSetting.setMaximum_output_power(220);
+//        String message = iotMessageProduce.sendMessage(workingParameterSetting.getCharging_pile_code(), ServiceIdMenu.WORKING_PARAMETER_SETTING.getKey(),messageUtil.workingParameterSetting(workingParameterSetting));
+        // 对时设置
+//        TimingSetting timingSetting = new TimingSetting();
+//        timingSetting.setCharging_pile_code("3401231001200202");
+//        System.err.println(CP56Time2aConverter.convertToCP56Time2a(new Date()));
+//        timingSetting.setCurrent_time(CP56Time2aConverter.convertToCP56Time2a(new Date()));
+//        String message = iotMessageProduce.sendMessage(timingSetting.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING.getKey(),messageUtil.timingSetting(timingSetting));
+        // TODO 罗  计费模型设置
+//        SetupBillingModel setupBillingModel = new SetupBillingModel();
+//        // 计费模型
+//        List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getDetailListByCode("3401231001200202").getData();
+//        Map<Integer, TAccountingStrategyDetail> strategyPrice = StrategyUtil.getStrategyPrice(accountingStrategyDetails);
+//        // 价格设置
+//        AcquisitionBillingModeReply acquisitionBillingModeReply = new AcquisitionBillingModeReply();
+//        StrategyUtil.setStrategyPrice(strategyPrice,acquisitionBillingModeReply);
+//        // 时段设置
+//        StrategyUtil.setTime(accountingStrategyDetails,acquisitionBillingModeReply);
+//        TAccountingStrategyDetail accountingStrategyDetail = accountingStrategyDetailClient.getDetailByCode("3401231001200202").getData();
+//        acquisitionBillingModeReply.setBilling_model_code(accountingStrategyDetail.getId().toString());
+//        acquisitionBillingModeReply.setCharging_pile_code("3401231001200202");
+//        acquisitionBillingModeReply.setLoss_ratio(BigDecimal.ZERO);
+//        BeanUtils.copyProperties(acquisitionBillingModeReply,setupBillingModel);
+//        System.err.println(setupBillingModel);
+//        String message = iotMessageProduce.sendMessage(setupBillingModel.getCharging_pile_code(), ServiceIdMenu.SETUP_BILLING_MODEL.getKey(),messageUtil.setupBillingModel(setupBillingModel));
+        // 远程重启
+        PlatformRestart platformRestart = new PlatformRestart();
+        platformRestart.setCharging_pile_code("3401231001200202");
+        platformRestart.setOperate(2);
+        String message = iotMessageProduce.sendMessage(platformRestart.getCharging_pile_code(), ServiceIdMenu.PLATFORM_RESTART.getKey(),messageUtil.platformRestart(platformRestart));
+        return R.ok(message);
+    }
+
 }
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java
index c7c76bd..5fdcac0 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java
@@ -44,6 +44,8 @@
     @Autowired
     private WorkingParameterSettingService workingParameterSettingService;
     @Autowired
+    private TimingSettingService timingSettingService;
+    @Autowired
     private TimingSettingReplyService timingSettingReplyService;
     @Autowired
     private SetupBillingModelService setupBillingModelService;
@@ -205,6 +207,15 @@
     }
 
     /**
+     * 对时设置
+     * @param timingSetting 实体对象
+     * @return
+     */
+    public String timingSetting(TimingSetting timingSetting){
+        timingSettingService.create(timingSetting);
+        return  getMessageJsonString(timingSetting, ServiceIdMenu.TIMING_SETTING.getValue());
+    }
+    /**
      * 对时设置应答
      * @param timingSettingReply 实体对象
      * @return
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/StrategyUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/StrategyUtil.java
index 4ebf980..e935937 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/StrategyUtil.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/StrategyUtil.java
@@ -67,8 +67,13 @@
             }
             accountingStrategyDetails = accountingStrategyDetails.stream().sorted(Comparator.comparing(TAccountingStrategyDetail::getStartTime)).collect(Collectors.toList());
             for (TAccountingStrategyDetail accountingStrategyDetail : accountingStrategyDetails) {
-                if(DateUtils.string2LocalTime(accountingStrategyDetail.getStartTime()).isBefore(time)
-                        && DateUtils.string2LocalTime(accountingStrategyDetail.getEndTime()).isAfter(time)){
+                String startTime = accountingStrategyDetail.getStartTime();
+                String endTime = accountingStrategyDetail.getEndTime();
+                if("00:00".equals(endTime)){
+                    endTime = "23:59";
+                }
+                if(DateUtils.string2LocalTime(startTime + ":00").isBefore(time)
+                        && DateUtils.string2LocalTime(endTime + ":00").isAfter(time)){
                     switch (i){
                         case 1:
                             acquisitionBillingModeReply.setTime1(accountingStrategyDetail.getType().equals(1)?0
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/ErrorMessageMessageService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/ErrorMessageMessageService.java
new file mode 100644
index 0000000..180eaa3
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/ErrorMessageMessageService.java
@@ -0,0 +1,8 @@
+package com.ruoyi.integration.mongodb.service;
+
+import com.ruoyi.integration.mongodb.base.BaseService;
+import com.ruoyi.integration.rocket.model.ErrorMessageMessage;
+
+public interface ErrorMessageMessageService extends BaseService<ErrorMessageMessage> {
+
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/ErrorMessageMessageServiceImpl.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/ErrorMessageMessageServiceImpl.java
new file mode 100644
index 0000000..6443f1f
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/ErrorMessageMessageServiceImpl.java
@@ -0,0 +1,35 @@
+package com.ruoyi.integration.mongodb.service.impl;
+
+import com.ruoyi.integration.api.model.EndCharge;
+import com.ruoyi.integration.iotda.constant.IotConstant;
+import com.ruoyi.integration.mongodb.service.EndChargeService;
+import com.ruoyi.integration.mongodb.service.ErrorMessageMessageService;
+import com.ruoyi.integration.rocket.model.ErrorMessageMessage;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+
+@Service
+public class ErrorMessageMessageServiceImpl implements ErrorMessageMessageService {
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
+    @Override
+    public int create(ErrorMessageMessage errorMessageMessage) {
+        mongoTemplate.save(errorMessageMessage);
+        return IotConstant.SUCCESS;
+    }
+
+    @Override
+    public ErrorMessageMessage findById(String id) {
+        return mongoTemplate.findById(id, ErrorMessageMessage.class);
+    }
+
+    @Override
+    public List<ErrorMessageMessage> findAll() {
+        return mongoTemplate.findAll(ErrorMessageMessage.class);
+    }
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/AcquisitionBillingModeMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/AcquisitionBillingModeMessageListener.java
index 6286373..0dc777d 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/AcquisitionBillingModeMessageListener.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/AcquisitionBillingModeMessageListener.java
@@ -52,14 +52,14 @@
         BeanUtils.copyProperties(message,acquisitionBillingMode);
         acquisitionBillingModeService.create(acquisitionBillingMode);
         // 业务处理  计费模型请求应答  1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段
-        List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getDetailListByCode(message.getCharging_pile_code()).getData();
-        Map<Integer, TAccountingStrategyDetail> strategyPrice = StrategyUtil.getStrategyPrice(accountingStrategyDetails);
-        // 价格设置
-        AcquisitionBillingModeReply acquisitionBillingModeReply = new AcquisitionBillingModeReply();
-        StrategyUtil.setStrategyPrice(strategyPrice,acquisitionBillingModeReply);
-        // 时段设置
-        StrategyUtil.setTime(accountingStrategyDetails,acquisitionBillingModeReply);
-        iotMessageProduce.sendMessage(acquisitionBillingModeReply.getCharging_pile_code(), ServiceIdMenu.ACQUISITION_BILLING_MODE_REPLY.getKey(),messageUtil.acquisitionBillingModeReply(acquisitionBillingModeReply));
+//        List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getDetailListByCode(message.getCharging_pile_code()).getData();
+//        Map<Integer, TAccountingStrategyDetail> strategyPrice = StrategyUtil.getStrategyPrice(accountingStrategyDetails);
+//        // 价格设置
+//        AcquisitionBillingModeReply acquisitionBillingModeReply = new AcquisitionBillingModeReply();
+//        StrategyUtil.setStrategyPrice(strategyPrice,acquisitionBillingModeReply);
+//        // 时段设置
+//        StrategyUtil.setTime(accountingStrategyDetails,acquisitionBillingModeReply);
+//        iotMessageProduce.sendMessage(acquisitionBillingModeReply.getCharging_pile_code(), ServiceIdMenu.ACQUISITION_BILLING_MODE_REPLY.getKey(),messageUtil.acquisitionBillingModeReply(acquisitionBillingModeReply));
     }
 
     @Override
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/ErrorMessageMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/ErrorMessageMessageListener.java
new file mode 100644
index 0000000..8c67b98
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/ErrorMessageMessageListener.java
@@ -0,0 +1,80 @@
+package com.ruoyi.integration.rocket.listener;
+
+import com.ruoyi.integration.mongodb.service.ErrorMessageMessageService;
+import com.ruoyi.integration.rocket.model.ErrorMessageMessage;
+import com.ruoyi.integration.rocket.util.EnhanceMessageHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.rocketmq.spring.annotation.MessageModel;
+import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
+import org.apache.rocketmq.spring.core.RocketMQListener;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+@RocketMQMessageListener(
+        messageModel = MessageModel.CLUSTERING,
+        consumerGroup = "charge_error_message",
+        topic = "charge_error_message",
+        selectorExpression = "error_message",
+        consumeThreadMax = 5 //默认是64个线程并发消息,配置 consumeThreadMax 参数指定并发消费线程数,避免太大导致资源不够
+)
+public class ErrorMessageMessageListener extends EnhanceMessageHandler<ErrorMessageMessage> implements RocketMQListener<ErrorMessageMessage> {
+
+    @Autowired
+    private ErrorMessageMessageService errorMessageMessageService;
+
+
+    @Override
+    protected void handleMessage(ErrorMessageMessage message) throws Exception {
+        // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试
+        log.info("错误报文-业务消息处理:{}",message);
+        // 持久化消息
+        ErrorMessageMessage errorMessageMessage = new ErrorMessageMessage();
+        BeanUtils.copyProperties(message,errorMessageMessage);
+        errorMessageMessageService.create(errorMessageMessage);
+        // 业务处理
+    }
+
+    @Override
+    protected void handleMaxRetriesExceeded(ErrorMessageMessage message) {
+        // 当超过指定重试次数消息时此处方法会被调用
+        // 生产中可以进行回退或其他业务操作
+        log.error("消息消费失败,请执行后续处理");
+    }
+
+
+    /**
+     * 是否执行重试机制
+     */
+    @Override
+    protected boolean isRetry() {
+        return true;
+    }
+
+    @Override
+    protected boolean throwException() {
+        // 是否抛出异常,false搭配retry自行处理异常
+        return false;
+    }
+
+    /**
+     * 若需要处理消息过滤,在父级中进行统一处理,或者在此处实现之后,自行处理
+     * @param message 待处理消息
+     * @return true: 本次消息被过滤,false:不过滤
+     */
+    @Override
+    protected boolean filter(ErrorMessageMessage message) {
+        // 此处可做消息过滤
+        return false;
+    }
+
+    /**
+     * 监听消费消息,不需要执行业务处理,委派给父类做基础操作,父类做完基础操作后会调用子类的实际处理类型
+     */
+    @Override
+    public void onMessage(ErrorMessageMessage message) {
+        super.dispatchMessage(message);
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsDemandAndChargerExportationMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsDemandAndChargerExportationMessage.java
index 8e958b7..f7ac9d4 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsDemandAndChargerExportationMessage.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsDemandAndChargerExportationMessage.java
@@ -22,7 +22,8 @@
     private Integer bms_charging_mode; // BMS 充电模式(1:恒压充电;2:恒流充电)
     private BigDecimal bms_voltage_measurement_value; // BMS 充电电压测量值
     private BigDecimal bms_current_measurement_value; // BMS 充电电流测量值
-    private Integer bms_battery_voltage_and_group_number; // BMS 最高单体动力蓄电池电压及组号(1-12 位:最高单体动力蓄电池电压,数据分辨率:0.01 V/位,0 V 偏移量;数据范围:0~24 V;13-16 位:最高单体动力蓄电池电压所在组号,数据分辨率:1/位,0 偏移量;数据范围:0~15)
+    private BigDecimal bms_battery_voltage; //  最高电压 BMS 最高单体动力蓄电池电压及组号(1-12 位:最高单体动力蓄电池电压,数据分辨率:0.01 V/位,0 V 偏移量;数据范围:0~24 V;13-16 位:最高单体动力蓄电池电压所在组号,数据分辨率:1/位,0 偏移量;数据范围:0~15)
+    private Integer bms_group_number; //  所在组号 BMS 最高单体动力蓄电池电压及组号(1-12 位:最高单体动力蓄电池电压,数据分辨率:0.01 V/位,0 V 偏移量;数据范围:0~24 V;13-16 位:最高单体动力蓄电池电压所在组号,数据分辨率:1/位,0 偏移量;数据范围:0~15)
     private BigDecimal bms_charged_status; // BMS 当前荷电状态 SOC( %)
     private Integer bms_remaining_charging_time; // BMS 估算剩余充电时间
     private BigDecimal voltage_output_value; // 电桩电压输出值
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/EndChargeMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/EndChargeMessage.java
index 4cfaafa..7231ba4 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/EndChargeMessage.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/EndChargeMessage.java
@@ -18,8 +18,8 @@
     private BigDecimal bms_battery_charging_status; // BMS 中止荷电状态 SOC
     private BigDecimal bms_minimum_battery_voltage; // BMS 动力蓄电池单体最低电压
     private BigDecimal bms_maximum_battery_voltage; // BMS 动力蓄电池单体最高电压
-    private Integer bms_minimum_battery_temperature; // BMS 动力蓄电池最低温度
-    private Integer bms_maximum_battery_temperature; // BMS 动力蓄电池最高温度
+    private BigDecimal bms_minimum_battery_temperature; // BMS 动力蓄电池最低温度
+    private BigDecimal bms_maximum_battery_temperature; // BMS 动力蓄电池最高温度
     private BigDecimal cumulative_charging_time; // 电桩累计充电时间
     private BigDecimal output_energy; // 电桩输出能量
     private String charger_code; // 电桩充电机编号
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ErrorMessageMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ErrorMessageMessage.java
new file mode 100644
index 0000000..97f289e
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ErrorMessageMessage.java
@@ -0,0 +1,35 @@
+package com.ruoyi.integration.rocket.model;
+
+import com.ruoyi.integration.rocket.base.BaseMessage;
+import lombok.Data;
+
+@Data
+public class ErrorMessageMessage extends BaseMessage {
+
+    private String transaction_serial_number; // 交易流水号
+    private String charging_pile_code; // 桩编码
+    private String charging_gun_code; // 抢号
+    private Integer charger_identification_0; // 接收 SPN2560=0x00 的充电机辨识报文超时(0=正常,1=超时,10=不可信状态)
+    private Integer charger_identification_170; // 接收 SPN2560=0xAA 的充电机辨识报文超时(0=正常,1=超时,10=不可信状态)
+    private String charger_identification_reserve; // 预留位
+    private Integer time_synchronization_and_maximum_output_charger; // 接收充电机的时间同步和充电机最大输出能力报文超时(0=正常,1=超时,10=不可信状态)
+    private Integer charge_preparation; // 接收充电机完成充电准备报文超时(0=正常,1=超时,10=不可信状态)
+    private String charge_preparation_reserve; // 预留位
+    private Integer charging_status; // 接收充电机充电状态报文超时(0=正常,1=超时,10=不可信状态)
+    private Integer stop_charging; // 接收充电机中止充电报文超时(0=正常,1=超时,10=不可信状态)
+    private String charge_reserve; // 预留位
+    private Integer charging_statistics; // 接收充电机充电统计报文超时(0=正常,1=超时,10=不可信状态)
+    private String bms_other; // BMS 其他
+    private Integer bms_and_vehicle_identification; // 接收 BMS 和车辆的辨识报文超时(0=正常,1=超时,10=不可信状态)
+    private String bms_and_vehicle_identification_reserve; // 预留位
+    private Integer battery_charging_parameter; // 接收电池充电参数报文超时(0=正常,1=超时,10=不可信状态)
+    private Integer bms_completes_charging_preparation; // 接收 BMS 完成充电准备报文超时(0=正常,1=超时,10=不可信状态)
+    private String bms_completes_charging_preparation_reserve; // 预留位
+    private Integer total_battery_charging_status; // 接收电池充电总状态报文超时(0=正常,1=超时,10=不可信状态)
+    private Integer battery_charging_requirements; // 接收电池充电要求报文超时(0=正常,1=超时,10=不可信状态)
+    private Integer bms_stop_charging; // 接收 BMS 中止充电报文超时(0=正常,1=超时,10=不可信状态)
+    private Integer bms_reserve; // 预留位
+    private Integer bms_charging_statistics; // 接收 BMS 充电统计报文超时0=正常,1=超时,10=不可信状态)
+    private String charger_other; // 充电机其他
+
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ParameterSettingMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ParameterSettingMessage.java
index 9a40e77..6efffe2 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ParameterSettingMessage.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ParameterSettingMessage.java
@@ -21,7 +21,7 @@
     private BigDecimal bms_maximum_charging_current; // BMS 最高允许充电电流
     private BigDecimal bms_battery_total_energy; // BMS 动力蓄电池标称总能量
     private BigDecimal bms_total_charging_voltage; // BMS 最高允许充电总电压
-    private Integer bms_maximum_temperature; // BMS 最高允许温度
+    private BigDecimal bms_maximum_temperature; // BMS 最高允许温度
     private BigDecimal bms_battery_charging_status; // BMS 整车动力蓄电池荷电状态 (soc)
     private BigDecimal bms_battery_voltage; // BMS 整车动力蓄电池当前电池 电压
     private BigDecimal maximum_output_voltage; // 电桩最高输出电压
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/UploadRealTimeMonitoringDataMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/UploadRealTimeMonitoringDataMessage.java
index 8a8f765..dd1c034 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/UploadRealTimeMonitoringDataMessage.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/UploadRealTimeMonitoringDataMessage.java
@@ -22,10 +22,10 @@
     private Integer insertion_status; // 是否插枪(0:否,1:是)
     private BigDecimal output_voltage; // 输出电压,精确到小数点后一位;待机置零
     private BigDecimal output_current; // 输出电流,精确到小数点后一位;待机置零
-    private Integer gun_line_temperature; // 枪线温度,整形,偏移量-50;待机置零
+    private BigDecimal gun_line_temperature; // 枪线温度,整形,偏移量-50;待机置零
     private String gun_line_code; // 枪线编码,没有置零
     private Integer soc; // SOC待机置零;交流桩置零
-    private Integer battery_temperature; // 电池组最高温度,整形,偏移量-50 ºC;待机置零;交流桩置零
+    private BigDecimal battery_temperature; // 电池组最高温度,整形,偏移量-50 ºC;待机置零;交流桩置零
     private Integer cumulative_charging_time; // 累计充电时间,单位:min;待机置零
     private Integer time_remaining; // 剩余时间,单位:min;待机置零、交流桩置零
     private BigDecimal charging_degree; // 充电度数,精确到小数点后四位;待机置零
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 ba614a5..a3a2137 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
@@ -2,6 +2,7 @@
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.integration.api.model.ErrorMessage;
 import com.ruoyi.integration.api.model.ParameterSetting;
 import com.ruoyi.integration.iotda.constant.SendTagConstant;
 import com.ruoyi.integration.rocket.model.*;
@@ -55,6 +56,16 @@
         message.setSource(SendTagConstant.END_CHARGE);
         return rocketMQEnhanceTemplate.send(TOPIC+SendTagConstant.END_CHARGE, SendTagConstant.END_CHARGE, message);
     }
+    /**
+     * 错误报文
+     */
+    public SendResult errorMessageMessage(ErrorMessageMessage message) {
+        // 设置业务key
+        message.setKey(UUID.randomUUID().toString());
+        // 设置消息来源,便于查询
+        message.setSource(SendTagConstant.ERROR_MESSAGE);
+        return rocketMQEnhanceTemplate.send(TOPIC+SendTagConstant.ERROR_MESSAGE, SendTagConstant.ERROR_MESSAGE, message);
+    }
 
     /**
      * 计费模型验证请求

--
Gitblit v1.7.1