Просмотр исходного кода

feat(charge): 增加充电状态字段并优化订单查询逻辑

- 在AppChargeVO中新增充电状态字段status,表示订单的不同充电阶段
- 优化ChargeOrderInfoServiceImpl中查询进行中订单逻辑,改为查询单条订单避免重复下单
- 查询到进行中订单时直接返回订单信息和状态,提升用户体验
- 保留原有生成系统充电订单号的逻辑,确保订单号唯一性与一致性
SheepHy 3 недель назад
Родитель
Сommit
d7a6188af5

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

@@ -20,4 +20,7 @@ public class AppChargeVO implements Serializable {
 
     @Schema(description = "订单号")
     private String chargeOrderNo;
+
+    @Schema(description = "充电状态 状态0待启动 1 充电中 2 结算中 3 已完成, 5未成功充电")
+    private int status;
 }

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

@@ -169,9 +169,16 @@ public class ChargeOrderInfoServiceImpl extends ServiceImpl<ChargeOrderInfoMappe
             Assert.isTrue(userInfo != null, "用户信息不存在");
 
             //判断有没有正在进行中的订单
-            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, "您有正在进行中的订单,请等待完成!");
-
+            ChargeOrderInfo selectOne = this.baseMapper.selectOne(Wrappers.lambdaQuery(ChargeOrderInfo.class)
+                    .eq(ChargeOrderInfo::getUserId, userId)
+                    .in(ChargeOrderInfo::getStatus, SystemConstants.STATUS_ZERO, SystemConstants.STATUS_ONE, SystemConstants.STATUS_TWO)
+                    .last("limit 1"));
+            if(null != selectOne){
+                appInvokeChargeVO.setChargeOrderId(selectOne.getId());
+                appInvokeChargeVO.setChargeOrderNo(selectOne.getChargeOrderNo());
+                appInvokeChargeVO.setStatus(selectOne.getStatus());
+                return appInvokeChargeVO;
+            }
             //生成系统充电订单号及互联互通充电订单号 startChargeSeq equipAuthSeq (格式"运营商ID+唯一编号")
             assert userId != null;
             String chargeOrderNo = generateNo(ORDER_NO_PREFIX, userId);