Prechádzať zdrojové kódy

fix(charging): 修正计费策略查询和充电时长计算错误

- 删除未使用的 stationId 变量
- 改正 PolicyFee 查询中使用的 stationInfoId 字段,改为 thirdPartyConnectorInfo.getId()
- 优化充电时长字符串拼接,使用 MOD 函数替代取余操作
- 修正充电订单与状态表连接条件,改为 coi.start_charge_seq = tcs.start_charge_seq
SheepHy 3 dní pred
rodič
commit
57528ab7c9

+ 3 - 0
src/main/java/com/zsElectric/boot/business/model/vo/applet/AppChargingCostVO.java

@@ -72,4 +72,7 @@ public class AppChargingCostVO implements Serializable {
 
     @Schema(description = "最后更新时间")
     private String lastUpdateTime;
+
+    @Schema(description = "充电接口编码")
+    private String connectorCode;
 }

+ 48 - 36
src/main/java/com/zsElectric/boot/charging/service/impl/ChargingReceptionServiceImpl.java

@@ -99,42 +99,7 @@ public class ChargingReceptionServiceImpl implements ChargingReceptionService {
     @Override
     public ResponseParmsEntity chargeResponse(RequestParmsEntity requestDTO) {
         log.info("接收推送启动充电结果请求参数:{}", requestDTO);
-        return processChargeRequest(requestDTO, jsonNode -> {
-            // 启动充电结果业务处理
-            String startChargeSeq = jsonNode.get("StartChargeSeq").asText();
-            int startChargeSeqStat = jsonNode.get("StartChargeSeqStat").asInt();
-            ChargeOrderInfo chargeOrderInfo = chargeOrderInfoService.getOne(new LambdaQueryWrapper<ChargeOrderInfo>()
-                    .eq(ChargeOrderInfo::getStartChargeSeq, startChargeSeq).last("LIMIT 1"));
-            if (startChargeSeqStat == 1) {
-                // 启动中
-                log.info("启动中 - StartChargeSeq: {}", startChargeSeq);
-            }
-            if (startChargeSeqStat == 2) {
-                // 充电中
-                log.info("充电中 - StartChargeSeq: {}", startChargeSeq);
-                //修改订单状态
-                if (ObjectUtil.isNotEmpty(chargeOrderInfo)) {
-                    if (Objects.equals(chargeOrderInfo.getStatus(), SystemConstants.STATUS_ZERO)){
-                        chargeOrderInfo.setStatus(SystemConstants.STATUS_ONE);
-                        chargeOrderInfoService.updateById(chargeOrderInfo);
-                    }
-                }
-            }
-            if (startChargeSeqStat == 3) {
-                // 停止中
-                log.info("停止中 - StartChargeSeq: {}", startChargeSeq);
-            }
-            if (startChargeSeqStat == 4) {
-                // 已结束
-                log.info("已结束 - StartChargeSeq: {}", startChargeSeq);
-            }
-            if (startChargeSeqStat == 5) {
-                // 未知
-                log.info("未知 - StartChargeSeq: {}", startChargeSeq);
-            }
-
-            log.debug("启动充电结果 - StartChargeSeq: {}", getTextValue(jsonNode, "StartChargeSeq"));
-        });
+        return processStartChargeResultRequest(requestDTO);
     }
 
     @Override
@@ -278,6 +243,53 @@ public class ChargingReceptionServiceImpl implements ChargingReceptionService {
         }
     }
 
+    /**
+     * 处理启动充电结果推送请求
+     * 数据格式:{"ConnectorID":"xxx","StartChargeSeq":"xxx","StartChargeSeqStat":2,"StartTime":"xxx"}
+     */
+    private ResponseParmsEntity processStartChargeResultRequest(RequestParmsEntity requestDTO) {
+        try {
+            JsonNode jsonNode = verifyAndDecrypt(requestDTO);
+            
+            // 启动充电结果业务处理
+            String startChargeSeq = getTextValue(jsonNode, "StartChargeSeq");
+            Integer startChargeSeqStat = getIntValue(jsonNode, "StartChargeSeqStat");
+            String startTime = getTextValue(jsonNode, "StartTime");
+            
+            ChargeOrderInfo chargeOrderInfo = chargeOrderInfoService.getOne(new LambdaQueryWrapper<ChargeOrderInfo>()
+                    .eq(ChargeOrderInfo::getStartChargeSeq, startChargeSeq).last("LIMIT 1"));
+            
+            if (startChargeSeqStat != null) {
+                switch (startChargeSeqStat) {
+                    case 1 -> log.info("启动中 - StartChargeSeq: {}", startChargeSeq);
+                    case 2 -> {
+                        log.info("充电中 - StartChargeSeq: {}", startChargeSeq);
+                        // 修改订单状态
+                        if (ObjectUtil.isNotEmpty(chargeOrderInfo)) {
+                            if (Objects.equals(chargeOrderInfo.getStatus(), SystemConstants.STATUS_ZERO)) {
+                                chargeOrderInfo.setStatus(SystemConstants.STATUS_ONE);
+                                chargeOrderInfo.setStartTime(startTime);
+                                chargeOrderInfoService.updateById(chargeOrderInfo);
+                            }
+                        }
+                    }
+                    case 3 -> log.info("停止中 - StartChargeSeq: {}", startChargeSeq);
+                    case 4 -> log.info("已结束 - StartChargeSeq: {}", startChargeSeq);
+                    case 5 -> log.info("未知 - StartChargeSeq: {}", startChargeSeq);
+                    default -> log.warn("未知状态 - StartChargeSeq: {}, Stat: {}", startChargeSeq, startChargeSeqStat);
+                }
+            }
+            
+            // 构建响应
+            return buildChargeResponse(startChargeSeq);
+        } catch (BusinessException e) {
+            throw e;
+        } catch (Exception e) {
+            log.error("处理启动充电结果推送失败:{}", e.getMessage(), e);
+            throw new BusinessException("处理启动充电结果推送失败:" + e.getMessage(), e);
+        }
+    }
+
     /**
      * 处理实时充电状态推送请求
      * 数据格式:{"ConnectorID":"xxx","ConnectorStatus":3,"TotalPower":1.95,"ElecMoney":1.89,...}

+ 4 - 2
src/main/resources/mapper/business/ThirdPartyStationInfoMapper.xml

@@ -564,6 +564,7 @@
         <result property="power" column="power"/>
         <result property="startTime" column="start_time"/>
         <result property="lastUpdateTime" column="last_update_time"/>
+        <result property="connectorCode" column="connector_code"/>
     </resultMap>
 
     <select id="selectCurrentChargingCost" resultMap="AppletChargingCostResultMap">
@@ -591,7 +592,7 @@
             IFNULL(tcs.service_money, 0) AS service_money,
             IFNULL(tcs.total_money, 0) AS total_money,
             tcs.soc,
-            COALESCE(tcs.current_a, tcs.current_b, tcs.current_c) AS current,
+            COALESCE(tcs.current_a, tcs.current_b, tcs.current_c) AS `current`,
             COALESCE(tcs.voltage_a, tcs.voltage_b, tcs.voltage_c) AS voltage,
             ROUND(
                 COALESCE(tcs.voltage_a, tcs.voltage_b, tcs.voltage_c) *
@@ -599,7 +600,8 @@
                 2
             ) AS power,
             DATE_FORMAT(tcs.start_time, '%Y-%m-%d %H:%i:%s') AS start_time,
-            DATE_FORMAT(tcs.update_time, '%Y-%m-%d %H:%i:%s') AS last_update_time
+            DATE_FORMAT(tcs.update_time, '%Y-%m-%d %H:%i:%s') AS last_update_time,
+            tpci.connector_id AS connector_code
         FROM c_charge_order_info coi
         INNER JOIN third_party_charge_status tcs
             ON coi.start_charge_seq = tcs.start_charge_seq