Browse Source

feat(charging): 优化充电订单处理及增加测试接口

- 在AppletHomeController中新增/test接口,调用ChargingReceptionService处理请求
- 修改AppStopChargeForm中chargeOrderId字段为字符串类型chargeOrderNo
- 统一充电订单号和设备认证序列号生成规则,使用运营商ID + 唯一编号格式
- 修正设备认证成功逻辑,避免误判认证失败
- 优化ChargeOrderInfoServiceImpl中订单查询逻辑,改用chargeOrderNo查询订单
- ChargingReceptionServiceImpl中新增起始时间字段赋值
- 修正平台服务费计算逻辑,避免空指针异常并改为根据站点ID查询策略费用
- 添加日志输出,提升调试和运维能力
- 调整订单结算调用时机与日志,确保账户余额扣减和积分增加操作正确执行
wzq 2 days ago
parent
commit
6e2edd7e51

+ 11 - 0
src/main/java/com/zsElectric/boot/business/controller/applet/AppletHomeController.java

@@ -5,7 +5,10 @@ import com.zsElectric.boot.business.model.entity.Advertising;
 import com.zsElectric.boot.business.model.query.AdvertisingQuery;
 import com.zsElectric.boot.business.model.vo.AdvertisingVO;
 import com.zsElectric.boot.business.service.AdvertisingService;
+import com.zsElectric.boot.charging.service.ChargingReceptionService;
 import com.zsElectric.boot.common.constant.SystemConstants;
+import com.zsElectric.boot.common.util.electric.RequestParmsEntity;
+import com.zsElectric.boot.common.util.electric.ResponseParmsEntity;
 import com.zsElectric.boot.core.web.Result;
 import io.swagger.v3.oas.annotations.Operation;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -33,6 +36,8 @@ public class AppletHomeController {
 
     private final AdvertisingService advertisingService;
 
+    private final ChargingReceptionService chargingReceptionService;
+
     /**
      * 用户端分页查询站点信息
      *
@@ -87,4 +92,10 @@ public class AppletHomeController {
         );
         return Result.success(list);
     }
+
+    @Operation(summary = "test")
+    @PostMapping("/test")
+    public ResponseParmsEntity test(@RequestBody RequestParmsEntity requestDTO) throws Exception {
+        return chargingReceptionService.chargeOrderResponse(requestDTO);
+    }
 }

+ 1 - 1
src/main/java/com/zsElectric/boot/business/model/form/applet/AppStopChargeForm.java

@@ -18,5 +18,5 @@ public class AppStopChargeForm implements Serializable {
 
     @Schema(description = "充电订单ID")
     @NotBlank(message = "充电订单ID不能为空")
-    private Long chargeOrderId;
+    private String chargeOrderNo;
 }

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

@@ -172,30 +172,29 @@ public class ChargeOrderInfoServiceImpl extends ServiceImpl<ChargeOrderInfoMappe
             Long count = this.baseMapper.selectCount(Wrappers.lambdaQuery(ChargeOrderInfo.class).eq(ChargeOrderInfo::getUserId, userId).in(ChargeOrderInfo::getStatus, SystemConstants.STATUS_ZERO, SystemConstants.STATUS_ONE, SystemConstants.STATUS_TWO));
             Assert.isTrue(count == 0, "您有正在进行中的订单,请等待完成!");
 
-            //生成系统充电订单号及互联互通充电订单号
+            //生成系统充电订单号及互联互通充电订单号 startChargeSeq equipAuthSeq (格式"运营商ID+唯一编号")
             assert userId != null;
             String chargeOrderNo = generateNo(ORDER_NO_PREFIX, userId);
-            String startChargeSeq = ConnectivityConstants.OPERATOR_ID + chargeOrderNo;
+            String seq = ConnectivityConstants.OPERATOR_ID + chargeOrderNo;
 
             //请求设备认证
-            EquipmentAuthResponseVO equipmentAuthResponseVO = chargingBusinessService.queryEquipAuth(startChargeSeq,
+            EquipmentAuthResponseVO equipmentAuthResponseVO = chargingBusinessService.queryEquipAuth(seq,
                     formData.getConnectorId());
 
             if (Objects.equals(equipmentAuthResponseVO.getSuccStat(), SystemConstants.STATUS_ONE)) {
                 throw new BusinessException("设备认证失败");
+            }else {
+                log.info("设备认证成功,设备认证流水号:{}", equipmentAuthResponseVO.getEquipAuthSeq());
             }
 
-            //生成设备流水号(格式"运营商ID+唯一编号")
-            String equipAuthSeq = ConnectivityConstants.OPERATOR_ID + generateNo(EQUIPMENT_NO_PREFIX, userId);
-
             //创建订单
             ChargeOrderInfo chargeOrderInfo = new ChargeOrderInfo();
             chargeOrderInfo.setUserId(userId);
             chargeOrderInfo.setConnectorId(formData.getConnectorId());
             chargeOrderInfo.setEquipmentId(formData.getEquipmentId());
-            chargeOrderInfo.setEquipAuthSeq(equipAuthSeq);
+            chargeOrderInfo.setEquipAuthSeq(seq);
             chargeOrderInfo.setChargeOrderNo(chargeOrderNo);
-            chargeOrderInfo.setStartChargeSeq(startChargeSeq);
+            chargeOrderInfo.setStartChargeSeq(seq);
             chargeOrderInfo.setPhoneNum(userInfo.getPhone());
             chargeOrderInfo.setThirdPartyStationId(formData.getStationId());
             chargeOrderInfo.setOrderType(formData.getOrderType());
@@ -224,7 +223,7 @@ public class ChargeOrderInfoServiceImpl extends ServiceImpl<ChargeOrderInfoMappe
             //启动充电
             StartChargingRequestDTO requestDTO = new StartChargingRequestDTO();
             requestDTO
-                    .setStartChargeSeq(startChargeSeq)
+                    .setStartChargeSeq(seq)
                     .setConnectorID(formData.getConnectorId())
                     .setPhoneNum(userInfo.getPhone())
                     //预支付金额
@@ -256,7 +255,8 @@ public class ChargeOrderInfoServiceImpl extends ServiceImpl<ChargeOrderInfoMappe
             AppChargeVO appInvokeChargeVO = new AppChargeVO();
 
             //订单
-            ChargeOrderInfo chargeOrderInfo = this.getById(formData.getChargeOrderId());
+            ChargeOrderInfo chargeOrderInfo = this.getOne(Wrappers.lambdaQuery(ChargeOrderInfo.class).eq(ChargeOrderInfo::getId,
+                    formData.getChargeOrderNo()).last("limit 1"));
             if(ObjectUtil.isEmpty(chargeOrderInfo)){
                 throw new BusinessException("订单不存在");
             }

+ 25 - 10
src/main/java/com/zsElectric/boot/charging/service/impl/ChargingReceptionServiceImpl.java

@@ -214,6 +214,7 @@ public class ChargingReceptionServiceImpl implements ChargingReceptionService {
             String startChargeSeq = getTextValue(jsonNode, "StartChargeSeq");
             String stopReason = getTextValue(jsonNode, "StopReason");
             String endTime = getTextValue(jsonNode, "EndTime");
+            String startTime = getTextValue(jsonNode, "StartTime");
             String totalPower = getTextValue(jsonNode, "TotalPower");
             String totalElecMoney = getTextValue(jsonNode, "TotalElecMoney");
             String totalMoney = getTextValue(jsonNode, "TotalMoney");
@@ -224,6 +225,7 @@ public class ChargingReceptionServiceImpl implements ChargingReceptionService {
                     .eq(ChargeOrderInfo::getStartChargeSeq, startChargeSeq).last("LIMIT 1"));
 
             chargeOrderInfo.setStopReason(stopReason);
+            chargeOrderInfo.setStartTime(startTime);
             chargeOrderInfo.setEndTime(endTime);
             chargeOrderInfo.setTotalCharge(new BigDecimal(totalPower));
 
@@ -233,22 +235,34 @@ public class ChargingReceptionServiceImpl implements ChargingReceptionService {
 
             ThirdPartyConnectorInfo thirdPartyConnectorInfo = connectorInfoMapper.selectOne(Wrappers.<ThirdPartyConnectorInfo>lambdaQuery()
                     .eq(ThirdPartyConnectorInfo::getConnectorId, connectorID).last("LIMIT 1"));
+            String stationId = thirdPartyConnectorInfo.getStationId();
+            ThirdPartyStationInfo thirdPartyStationInfo = thirdPartyStationInfoMapper.selectOne(Wrappers.<ThirdPartyStationInfo>lambdaQuery()
+                    .eq(ThirdPartyStationInfo::getStationId, stationId).last("LIMIT 1"));
+            if (ObjectUtil.isEmpty(thirdPartyConnectorInfo)) {
+                log.error("thirdPartyConnectorInfo" +"为空===============================================");
+            }
 
             //平台服务费
             BigDecimal serviceFee = BigDecimal.ZERO;
             JsonNode chargeDetails = jsonNode.get("ChargeDetails");
-            for (JsonNode node : chargeDetails) {
-                //提取字段值
-                String itemFlag = node.get("ItemFlag").asText();
-                double detailPower = node.get("DetailPower").asDouble();
-                PolicyFee policyFee = policyFeeMapper.selectOne(Wrappers.<PolicyFee>lambdaQuery()
-                        .eq(PolicyFee::getStationInfoId, thirdPartyConnectorInfo.getId())
-                        .eq(PolicyFee::getPeriodFlag, Integer.parseInt(itemFlag))
-                        .last("LIMIT 1"));
-                BigDecimal opFee = policyFee.getOpFee();
-                serviceFee = serviceFee.add(opFee.multiply(new BigDecimal(detailPower))).setScale(2, RoundingMode.DOWN);
+            if (ObjectUtil.isNotEmpty(chargeDetails)) {
+                for (JsonNode node : chargeDetails) {
+                    //提取字段值
+                    String itemFlag = node.get("ItemFlag").asText();
+                    double detailPower = node.get("DetailPower").asDouble();
+                    PolicyFee policyFee = policyFeeMapper.selectOne(Wrappers.<PolicyFee>lambdaQuery()
+                            .eq(PolicyFee::getStationInfoId, thirdPartyStationInfo.getId())
+                            .eq(PolicyFee::getPeriodFlag, Integer.parseInt(itemFlag))
+                            .last("LIMIT 1"));
+                    if (ObjectUtil.isNotEmpty(policyFee)) {
+                        BigDecimal opFee = policyFee.getOpFee();
+                        log.info("策略费用:{}",opFee);
+                        serviceFee = serviceFee.add(opFee.multiply(new BigDecimal(detailPower))).setScale(2, RoundingMode.DOWN);
+                    }
+                }
             }
 
+            log.info("计算后的平台服务费:{}", serviceFee);
             chargeOrderInfo.setRealServiceCost(serviceFee);
             //订单结算:平台实际收取金额 = 互联互通金额 + 中数电动金额(平台总服务费)
             chargeOrderInfo.setRealCost(chargeOrderInfo.getRealServiceCost().add(chargeOrderInfo.getThirdPartyTotalCost()));
@@ -263,6 +277,7 @@ public class ChargingReceptionServiceImpl implements ChargingReceptionService {
             chargeOrderInfoService.updateById(chargeOrderInfo);
 
             //账户余额扣减(积分增加)
+            log.info("执行账户余额扣减(积分增加)");
             chargeOrderInfoService.orderSettlement(chargeOrderInfo.getId());
 
             // 执行业务处理