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

新增删除律师咨询订单接口-优化

zhangchen 1 месяц назад
Родитель
Сommit
99889d6ec5

+ 9 - 4
alien-store/src/main/java/shop/alien/store/controller/LawyerConsultationOrderController.java

@@ -13,9 +13,7 @@ import shop.alien.store.service.LawyerConsultationOrderService;
 import shop.alien.store.service.OrderExpirationService;
 import shop.alien.util.myBaticsPlus.QueryBuilder;
 
-import java.math.BigDecimal;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 咨询订单 前端控制器
@@ -79,9 +77,16 @@ public class LawyerConsultationOrderController {
 
     @ApiOperation("删除咨询订单")
     @ApiOperationSupport(order = 4)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "订单ID", dataType = "Integer", paramType = "query", required = true)
+    })
     @DeleteMapping("/deleteConsultationOrder")
-    public R<Boolean> deleteConsultationOrder(@RequestParam(value = "id") Integer id) {
-        log.info("LawyerConsultationOrderController.deleteConsultationOrder?id={}", id);
+    public R<Boolean> deleteConsultationOrder(@RequestParam(value = "id", required = true) Integer id) {
+        log.info("删除咨询订单,订单ID={}", id);
+        if (id == null) {
+            log.warn("删除咨询订单失败:订单ID为空");
+            return R.fail("订单ID不能为空");
+        }
         return consultationOrderService.deleteConsultationOrder(id);
     }
 

+ 56 - 3
alien-store/src/main/java/shop/alien/store/service/impl/LawyerConsultationOrderServiceImpl.java

@@ -206,14 +206,67 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
         return R.fail("修改失败");
     }
 
+    /**
+     * 删除咨询订单
+     * <p>
+     * 删除前会进行以下校验:
+     * 1. 参数校验:订单ID不能为空
+     * 2. 订单存在性校验:订单必须存在
+     * 3. 订单状态校验:进行中的订单不允许删除
+     * 4. 如果订单是待支付状态,会取消Redis中的支付超时计时器
+     * </p>
+     *
+     * @param id 订单ID
+     * @return 删除结果
+     */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public R<Boolean> deleteConsultationOrder(Integer id) {
-        log.info("LawyerConsultationOrderServiceImpl.deleteConsultationOrder?id={}", id);
+        log.info("开始删除咨询订单,订单ID={}", id);
+        
+        // 参数校验
+        if (id == null) {
+            log.warn("删除咨询订单失败:订单ID为空");
+            return R.fail("订单ID不能为空");
+        }
+        
+        // 查询订单信息
+        LawyerConsultationOrder order = consultationOrderMapper.selectById(id);
+        if (order == null) {
+            log.warn("删除咨询订单失败:订单不存在,订单ID={}", id);
+            return R.fail("订单不存在");
+        }
+        
+        // 检查订单状态:进行中的订单不允许删除
+        Integer orderStatus = order.getOrderStatus();
+        Integer inProgressStatus = LawyerStatusEnum.USED.getStatus(); // 2:进行中
+        if (inProgressStatus.equals(orderStatus)) {
+            log.warn("删除咨询订单失败:订单进行中,不允许删除,订单ID={}, 订单编号={}", 
+                    id, order.getOrderNumber());
+            return R.fail("订单进行中,不允许删除");
+        }
+        
+        // 如果订单是待支付状态,取消Redis中的订单支付超时计时
+        Integer waitPayStatus = LawyerStatusEnum.WAIT_PAY.getStatus(); // 0:待支付
+        if (waitPayStatus.equals(orderStatus) && order.getOrderNumber() != null) {
+            try {
+                orderExpirationService.cancelOrderPaymentTimeout(order.getOrderNumber());
+                log.info("已取消订单支付超时计时,订单编号={}", order.getOrderNumber());
+            } catch (Exception e) {
+                log.error("取消订单支付超时计时失败,订单编号={}", order.getOrderNumber(), e);
+                // 继续执行删除操作,不因取消计时器失败而中断
+            }
+        }
+        
+        // 执行删除操作
         boolean result = this.removeById(id);
         if (result) {
-            return R.success("删除成功");
+            log.info("删除咨询订单成功,订单ID={}, 订单编号={}", id, order.getOrderNumber());
+            return R.data(true, "删除成功");
+        } else {
+            log.error("删除咨询订单失败:数据库操作失败,订单ID={}, 订单编号={}", id, order.getOrderNumber());
+            return R.fail("删除失败");
         }
-        return R.fail("删除失败");
     }
 
     /*@Override