Sfoglia il codice sorgente

fix(charge): 优化充电停止处理逻辑及异常提示

- 设备认证失败时提示枪未正确接入充电槽
- 启动充电失败时提示更换设备
- 停止充电时更新订单状态为“停止中”并设置停止类型为主动停止
- 重构停止充电结果推送处理流程,拆分为单一方法
- 停止充电结果处理根据状态更新订单状态为结算中
- 增加停止充电结果的详细日志和异常处理
SheepHy 1 settimana fa
parent
commit
4637af30f0

+ 6 - 4
src/main/java/com/zsElectric/boot/business/service/impl/ChargeOrderInfoServiceImpl.java

@@ -182,7 +182,7 @@ public class ChargeOrderInfoServiceImpl extends ServiceImpl<ChargeOrderInfoMappe
                     formData.getConnectorId());
 
             if (Objects.equals(equipmentAuthResponseVO.getSuccStat(), SystemConstants.STATUS_ONE)) {
-                throw new BusinessException("设备认证失败");
+                throw new BusinessException("设备认证失败,请检查枪是否正确接入充电槽!");
             }else {
                 log.info("设备认证成功,设备认证流水号:{}", equipmentAuthResponseVO.getEquipAuthSeq());
             }
@@ -231,7 +231,7 @@ public class ChargeOrderInfoServiceImpl extends ServiceImpl<ChargeOrderInfoMappe
             ;
             StartChargingResponseVO startChargingResponseVO = chargingBusinessService.startCharging(requestDTO);
             if (!Objects.equals(startChargingResponseVO.getSuccStat(), SystemConstants.STATUS_ZERO)) {
-                throw new BusinessException("启动充电失败");
+                throw new BusinessException("启动充电失败,请更换其它设备!");
             }
 
             //保存订单
@@ -266,8 +266,10 @@ public class ChargeOrderInfoServiceImpl extends ServiceImpl<ChargeOrderInfoMappe
                 throw new BusinessException("停止充电失败,请切换设备或稍后再重试!");
             }
 
-            //保存订单
-            this.save(chargeOrderInfo);
+            // 更新订单状态为停止中(状态3)
+            chargeOrderInfo.setStatus(SystemConstants.STATUS_THREE);
+            chargeOrderInfo.setStopType(1); // 1-主动停止
+            this.updateById(chargeOrderInfo);
 
             appInvokeChargeVO.setChargeOrderId(chargeOrderInfo.getId());
             appInvokeChargeVO.setChargeOrderNo(chargeOrderInfo.getChargeOrderNo());

+ 51 - 37
src/main/java/com/zsElectric/boot/charging/service/impl/ChargingReceptionServiceImpl.java

@@ -111,43 +111,7 @@ public class ChargingReceptionServiceImpl implements ChargingReceptionService {
     @Override
     public ResponseParmsEntity stopChargeResponse(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 (startChargeSeqStat == 3) {
-                // 停止中
-                log.info("停止中 - StartChargeSeq: {}", startChargeSeq);
-            }
-            if (startChargeSeqStat == 4) {
-                // 已结束
-                log.info("已结束 - StartChargeSeq: {}", startChargeSeq);
-                //修改订单状态结算中
-                if (ObjectUtil.isNotEmpty(chargeOrderInfo)) {
-                    if (Objects.equals(chargeOrderInfo.getStatus(), SystemConstants.STATUS_ONE)){
-                        chargeOrderInfo.setStatus(SystemConstants.STATUS_TWO);
-                        chargeOrderInfoService.updateById(chargeOrderInfo);
-                    }
-                }
-            }
-            if (startChargeSeqStat == 5) {
-                // 未知
-                log.info("未知 - StartChargeSeq: {}", startChargeSeq);
-            }
-
-            log.debug("停止充电结果 - StartChargeSeq: {}", getTextValue(jsonNode, "StartChargeSeq"));
-        });
+        return processStopChargeResultRequest(requestDTO);
     }
 
 
@@ -305,6 +269,56 @@ public class ChargingReceptionServiceImpl implements ChargingReceptionService {
         }
     }
 
+    /**
+     * 处理停止充电结果推送请求
+     * 数据格式:{"ConnectorID":"xxx","FailReason":0,"StartChargeSeq":"xxx","StartChargeSeqStat":4,"SuccStat":0}
+     */
+    private ResponseParmsEntity processStopChargeResultRequest(RequestParmsEntity requestDTO) {
+        try {
+            JsonNode jsonNode = verifyAndDecrypt(requestDTO);
+            
+            // 停止充电结果业务处理
+            String startChargeSeq = getTextValue(jsonNode, "StartChargeSeq");
+            Integer startChargeSeqStat = getIntValue(jsonNode, "StartChargeSeqStat");
+            Integer succStat = getIntValue(jsonNode, "SuccStat");
+            Integer failReason = getIntValue(jsonNode, "FailReason");
+            
+            log.info("停止充电结果 - StartChargeSeq: {}, Stat: {}, SuccStat: {}, FailReason: {}",
+                    startChargeSeq, startChargeSeqStat, succStat, failReason);
+            
+            ChargeOrderInfo chargeOrderInfo = chargeOrderInfoService.getOne(new LambdaQueryWrapper<ChargeOrderInfo>()
+                    .eq(ChargeOrderInfo::getStartChargeSeq, startChargeSeq).last("LIMIT 1"));
+            
+            if (startChargeSeqStat != null && ObjectUtil.isNotEmpty(chargeOrderInfo)) {
+                switch (startChargeSeqStat) {
+                    case 1 -> log.info("启动中 - StartChargeSeq: {}", startChargeSeq);
+                    case 2 -> log.info("充电中 - StartChargeSeq: {}", startChargeSeq);
+                    case 3 -> log.info("停止中 - StartChargeSeq: {}", startChargeSeq);
+                    case 4 -> {
+                        log.info("已结束 - StartChargeSeq: {}", startChargeSeq);
+                        // 修改订单状态为结算中
+                        if (Objects.equals(chargeOrderInfo.getStatus(), SystemConstants.STATUS_ONE) ||
+                            Objects.equals(chargeOrderInfo.getStatus(), SystemConstants.STATUS_THREE)) {
+                            chargeOrderInfo.setStatus(SystemConstants.STATUS_TWO);
+                            chargeOrderInfoService.updateById(chargeOrderInfo);
+                            log.info("更新订单状态为结算中 - orderId: {}", chargeOrderInfo.getId());
+                        }
+                    }
+                    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,...}