From c7372ea9e06ba1a2df85bbff1fe4d38a45693de8 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期二, 03 九月 2024 17:55:18 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile

---
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java                     |    8 +-
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java |   16 ++++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/EndChargeMessageListener.java      |   88 ++++++++++++++++++++++
 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        |    8 +-
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java                 |   11 ++
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IntegrationClient.java             |    4 
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IntegrationFallbackFactory.java        |    8 +-
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/EndChargeMessage.java                 |   29 +++++++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java       |    3 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java                 |    8 +-
 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml                  |    1 
 12 files changed, 170 insertions(+), 18 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IntegrationFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IntegrationFallbackFactory.java
index 195a34c..87a7d65 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IntegrationFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IntegrationFallbackFactory.java
@@ -48,10 +48,10 @@
                 return R.fail("读取实时监测数据调用失败:" + throwable.getMessage());
             }
 
-            @Override
-            public R<String> endCharge(EndCharge endCharge) {
-                return R.fail("充电结束调用失败:" + throwable.getMessage());
-            }
+//            @Override
+//            public R<String> endCharge(EndCharge endCharge) {
+//                return R.fail("充电结束调用失败:" + throwable.getMessage());
+//            }
 
             @Override
             public R<String> platformConfirmationCharging(PlatformConfirmationCharging platformConfirmationCharging) {
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IntegrationClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IntegrationClient.java
index f8255a7..a6f1d64 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IntegrationClient.java
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IntegrationClient.java
@@ -61,8 +61,8 @@
      * @param endCharge 实体对象
      * @return
      */
-    @PostMapping("/sendMessage/sendMessageendCharge")
-    public R<String> endCharge(@RequestBody EndCharge endCharge);
+//    @PostMapping("/sendMessage/sendMessageendCharge")
+//    public R<String> endCharge(@RequestBody EndCharge endCharge);
 
     /**
      * 运营平台确认启动充电
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java
index 2b2bbd5..ad0bc26 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java
@@ -1,5 +1,6 @@
 package com.ruoyi.chargingPile.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.chargingPile.api.model.TAccountingStrategy;
 import com.ruoyi.chargingPile.api.query.TAccountingStrategyQuery;
@@ -12,9 +13,13 @@
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.feignClient.SysUserClient;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.Comparator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -33,6 +38,10 @@
     public PageInfo<TAccountingStrategyVO> pageList(TAccountingStrategyQuery query) {
         PageInfo<TAccountingStrategyVO> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize());
         List<TAccountingStrategyVO> list = this.baseMapper.pageList(query,pageInfo);
+        List<Integer> parentIds = list.stream().map(TAccountingStrategyVO::getId).collect(Collectors.toList());
+        List<TAccountingStrategy> list1 = this.list(Wrappers.lambdaQuery(TAccountingStrategy.class)
+                .in(TAccountingStrategy::getParentId, parentIds)
+                .in(TAccountingStrategy::getAuditStatus, Arrays.asList(1,2)));
         for (TAccountingStrategyVO tAccountingStrategyVO : list) {
             SysUser data = sysUserClient.getSysUser(tAccountingStrategyVO.getUserId()).getData();
             tAccountingStrategyVO.setUserName(data.getNickName());
@@ -44,6 +53,13 @@
                 SysUser two = sysUserClient.getSysUser(tAccountingStrategyVO.getUserId()).getData();
                 tAccountingStrategyVO.setTwoUserName(two==null?null:two.getNickName());
             }
+            // 匹配编辑后的未审核的
+            List<TAccountingStrategy> accountingStrategies = list1.stream().filter(e -> e.getParentId().equals(tAccountingStrategyVO.getId()))
+                    .sorted(Comparator.comparing(TAccountingStrategy::getCreateTime).reversed()).collect(Collectors.toList());
+            if(!CollectionUtils.isEmpty(accountingStrategies)){
+                TAccountingStrategy tAccountingStrategy = accountingStrategies.get(0);
+                tAccountingStrategyVO.setAuditStatus(tAccountingStrategy.getAuditStatus());
+            }
         }
         pageInfo.setRecords(list);
         return pageInfo;
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml
index 521ac63..e218c2a 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml
@@ -37,6 +37,7 @@
                 AND audit_status = #{query.auditStatus}
             </if>
             AND site_id IS NULL
+            AND (parent_id IS NULL OR audit_status = 3 OR audit_status = 4)
             AND del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()}
         </where>
         ORDER BY create_time DESC
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 9088d1e..8708f9f 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
@@ -15,6 +15,10 @@
 	 */
 	public static final String PING ="ping";
 	/**
+	 * 充电结束
+	 */
+	public static final String END_CHARGE = "end_charge";
+	/**
 	 * 计费模型验证请求
 	 */
 	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 2857dfc..1dde7c6 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
@@ -76,10 +76,10 @@
      * @param endCharge 实体对象
      * @return
      */
-    @PostMapping("/endCharge")
-    public String endCharge(@RequestBody EndCharge endCharge){
-        return  iotMessageProduce.sendMessage(endCharge.getCharging_pile_code(), ServiceIdMenu.END_CHARGE.getKey(),messageUtil.endCharge(endCharge));
-    }
+//    @PostMapping("/endCharge")
+//    public String endCharge(@RequestBody EndCharge endCharge){
+//        return  iotMessageProduce.sendMessage(endCharge.getCharging_pile_code(), ServiceIdMenu.END_CHARGE.getKey(),messageUtil.endCharge(endCharge));
+//    }
 
     /**
      * 运营平台确认启动充电
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 2445ebf..6acaba3 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
@@ -26,10 +26,10 @@
 	 * 读取实时监测数据
 	 */
 	 READ_REAL_TIME_MONITORING_DATA ("读取实时监测数据","read_real_time_monitoring_data"),
-	/**
-	 * 充电结束
-	 */
-	 END_CHARGE ("充电结束","end_charge"),
+//	/**
+//	 * 充电结束
+//	 */
+//	 END_CHARGE ("充电结束","end_charge"),
 	/**
 	 * 运营平台确认启动充电
 	 */
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 3640b42..3883fad 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
@@ -44,6 +44,9 @@
             case SendTagConstant.PING:
                 sendResult = enhanceProduce.pingMessage(content);
                 break;
+            case SendTagConstant.END_CHARGE:
+                sendResult = enhanceProduce.endChargeMessage(content);
+                break;
             case SendTagConstant.BILLING_MODE_VERIFY:
                 sendResult = enhanceProduce.billingModeVerifyMessage(content);
                 break;
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 7610a47..ff62d42 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
@@ -109,10 +109,10 @@
      * @param endCharge 实体对象
      * @return
      */
-    public String endCharge(EndCharge endCharge){
-        endChargeService.create(endCharge);
-        return  getMessageJsonString(endCharge, ServiceIdMenu.END_CHARGE.getValue());
-    }
+//    public String endCharge(EndCharge endCharge){
+//        endChargeService.create(endCharge);
+//        return  getMessageJsonString(endCharge, ServiceIdMenu.END_CHARGE.getValue());
+//    }
 
     /**
      * 运营平台确认启动充电
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/EndChargeMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/EndChargeMessageListener.java
new file mode 100644
index 0000000..c6a325b
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/EndChargeMessageListener.java
@@ -0,0 +1,88 @@
+package com.ruoyi.integration.rocket.listener;
+
+import com.ruoyi.integration.api.model.EndCharge;
+import com.ruoyi.integration.api.model.Ping;
+import com.ruoyi.integration.api.model.Pong;
+import com.ruoyi.integration.iotda.enums.ServiceIdMenu;
+import com.ruoyi.integration.iotda.utils.produce.IotMessageProduce;
+import com.ruoyi.integration.iotda.utils.tools.MessageUtil;
+import com.ruoyi.integration.mongodb.service.EndChargeService;
+import com.ruoyi.integration.mongodb.service.PingService;
+import com.ruoyi.integration.rocket.model.EndChargeMessage;
+import com.ruoyi.integration.rocket.model.PingMessage;
+import com.ruoyi.integration.rocket.util.EnhanceMessageHandler;
+import lombok.extern.slf4j.Slf4j;
+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(
+        consumerGroup = "enhance_consumer_group",
+        topic = "rocket_enhance",
+        selectorExpression = "*",
+        consumeThreadMax = 5 //默认是64个线程并发消息,配置 consumeThreadMax 参数指定并发消费线程数,避免太大导致资源不够
+)
+public class EndChargeMessageListener extends EnhanceMessageHandler<EndChargeMessage> implements RocketMQListener<EndChargeMessage> {
+
+    @Autowired
+    private EndChargeService endChargeService;
+    @Autowired
+    private MessageUtil messageUtil;
+    @Autowired
+    private IotMessageProduce iotMessageProduce;
+    @Override
+    protected void handleMessage(EndChargeMessage message) throws Exception {
+        // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试
+        log.info("充电结束-业务消息处理:{}",message);
+        // 持久化消息
+        EndCharge endCharge = new EndCharge();
+        BeanUtils.copyProperties(message,endCharge);
+        endChargeService.create(endCharge);
+        // 业务处理
+    }
+
+    @Override
+    protected void handleMaxRetriesExceeded(EndChargeMessage 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(EndChargeMessage message) {
+        // 此处可做消息过滤
+        return false;
+    }
+
+    /**
+     * 监听消费消息,不需要执行业务处理,委派给父类做基础操作,父类做完基础操作后会调用子类的实际处理类型
+     */
+    @Override
+    public void onMessage(EndChargeMessage 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/EndChargeMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/EndChargeMessage.java
new file mode 100644
index 0000000..4cfaafa
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/EndChargeMessage.java
@@ -0,0 +1,29 @@
+package com.ruoyi.integration.rocket.model;
+
+import com.ruoyi.integration.rocket.base.BaseMessage;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 充电结束
+ **/
+
+@Data
+public class EndChargeMessage extends BaseMessage {
+
+    private String transaction_serial_number; // 交易流水号
+    private String charging_pile_code; // 桩编码
+    private String charging_gun_code; // 抢号
+    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 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/produce/EnhanceProduce.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java
index 5586e13..611c3b3 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
@@ -48,6 +48,17 @@
         message.setSource(SendTagConstant.PING);
         return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.PING, message);
     }
+    /**
+     * 充电结束
+     */
+    public SendResult endChargeMessage(JSONObject jsonObject) {
+        PingMessage message = JSON.parseObject(jsonObject.toJSONString(),PingMessage.class);
+        // 设置业务key
+        message.setKey(UUID.randomUUID().toString());
+        // 设置消息来源,便于查询
+        message.setSource(SendTagConstant.END_CHARGE);
+        return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.END_CHARGE, message);
+    }
 
     /**
      * 计费模型验证请求

--
Gitblit v1.7.1