浏览代码

修改编辑订单接口

zhangchen 1 月之前
父节点
当前提交
838f357b94

+ 28 - 2
alien-store/src/main/java/shop/alien/store/controller/LawyerConsultationOrderController.java

@@ -71,8 +71,34 @@ public class LawyerConsultationOrderController {
     @ApiOperationSupport(order = 3)
     @PostMapping("/editConsultationOrder")
     public R<LawyerConsultationOrder> editConsultationOrder(@RequestBody LawyerConsultationOrder consultationOrder) {
-        log.info("LawyerConsultationOrderController.editConsultationOrder?consultationOrder={}", consultationOrder);
-        return consultationOrderService.editConsultationOrder(consultationOrder);
+        log.info("开始编辑咨询订单,订单ID={}, 订单编号={}", 
+                consultationOrder != null ? consultationOrder.getId() : null,
+                consultationOrder != null ? consultationOrder.getOrderNumber() : null);
+        
+        // 参数校验:订单ID不能为空
+        if (consultationOrder == null || consultationOrder.getId() == null) {
+            log.warn("编辑咨询订单失败:订单ID为空");
+            return R.fail("订单ID不能为空");
+        }
+        
+        // 记录修改前的关键信息
+        Integer orderId = consultationOrder.getId();
+        Integer newOrderStatus = consultationOrder.getOrderStatus();
+        Integer newPaymentStatus = consultationOrder.getPaymentStatus();
+        log.info("编辑咨询订单,订单ID={}, 新订单状态={}, 新支付状态={}", 
+                orderId, newOrderStatus, newPaymentStatus);
+        
+        R<LawyerConsultationOrder> result = consultationOrderService.editConsultationOrder(consultationOrder);
+        
+        if (result.isSuccess()) {
+            log.info("编辑咨询订单成功,订单ID={}, 订单编号={}", 
+                    orderId, consultationOrder.getOrderNumber());
+        } else {
+            log.warn("编辑咨询订单失败,订单ID={}, 失败原因={}", 
+                    orderId, result.getMsg());
+        }
+        
+        return result;
     }
 
     @ApiOperation("删除咨询订单")

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

@@ -196,14 +196,105 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
         return R.fail("新增失败");
     }
 
+    /**
+     * 编辑咨询订单
+     * <p>
+     * 编辑前会进行以下校验:
+     * 1. 参数校验:订单ID不能为空
+     * 2. 订单存在性校验:订单必须存在
+     * 3. 订单状态校验:已完成的订单不允许修改关键信息
+     * </p>
+     *
+     * @param consultationOrder 咨询订单
+     * @return 编辑结果
+     */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public R<LawyerConsultationOrder> editConsultationOrder(LawyerConsultationOrder consultationOrder) {
-        log.info("LawyerConsultationOrderServiceImpl.editConsultationOrder?consultationOrder={}", consultationOrder);
+        Integer orderId = consultationOrder.getId();
+        log.info("开始编辑咨询订单,订单ID={}", orderId);
+        
+        // 参数校验:订单ID不能为空
+        if (orderId == null) {
+            log.warn("编辑咨询订单失败:订单ID为空");
+            return R.fail("订单ID不能为空");
+        }
+        
+        // 查询订单信息,验证订单是否存在
+        LawyerConsultationOrder existingOrder = consultationOrderMapper.selectById(orderId);
+        if (existingOrder == null) {
+            log.warn("编辑咨询订单失败:订单不存在,订单ID={}", orderId);
+            return R.fail("订单不存在");
+        }
+        
+        // 记录修改前的订单状态
+        Integer oldOrderStatus = existingOrder.getOrderStatus();
+        Integer oldPaymentStatus = existingOrder.getPaymentStatus();
+        Integer newOrderStatus = consultationOrder.getOrderStatus();
+        Integer newPaymentStatus = consultationOrder.getPaymentStatus();
+        
+        log.info("编辑咨询订单,订单ID={}, 订单编号={}, 原订单状态={}, 新订单状态={}, 原支付状态={}, 新支付状态={}", 
+                orderId, existingOrder.getOrderNumber(), oldOrderStatus, newOrderStatus, 
+                oldPaymentStatus, newPaymentStatus);
+        
+        // 订单状态校验:已完成的订单不允许修改关键信息(订单状态、支付状态、订单金额等)
+        Integer completedStatus = LawyerStatusEnum.COMPLETE.getStatus(); // 3:已完成
+        if (completedStatus.equals(oldOrderStatus)) {
+            // 如果订单已完成,只允许修改评价相关字段(rating, comment)
+            if (newOrderStatus != null && !newOrderStatus.equals(oldOrderStatus)) {
+                log.warn("编辑咨询订单失败:订单已完成,不允许修改订单状态,订单ID={}, 订单编号={}", 
+                        orderId, existingOrder.getOrderNumber());
+                return R.fail("订单已完成,不允许修改订单状态");
+            }
+            if (newPaymentStatus != null && !newPaymentStatus.equals(oldPaymentStatus)) {
+                log.warn("编辑咨询订单失败:订单已完成,不允许修改支付状态,订单ID={}, 订单编号={}", 
+                        orderId, existingOrder.getOrderNumber());
+                return R.fail("订单已完成,不允许修改支付状态");
+            }
+            if (consultationOrder.getOrderAmount() != null && 
+                !consultationOrder.getOrderAmount().equals(existingOrder.getOrderAmount())) {
+                log.warn("编辑咨询订单失败:订单已完成,不允许修改订单金额,订单ID={}, 订单编号={}", 
+                        orderId, existingOrder.getOrderNumber());
+                return R.fail("订单已完成,不允许修改订单金额");
+            }
+        }
+        
+        // 已取消的订单不允许修改为其他状态(除非是管理员操作,这里暂不限制)
+        Integer cancelStatus = LawyerStatusEnum.CANCEL.getStatus(); // 4:已取消
+        if (cancelStatus.equals(oldOrderStatus) && newOrderStatus != null && 
+            !cancelStatus.equals(newOrderStatus)) {
+            log.warn("编辑咨询订单警告:订单已取消,尝试修改订单状态,订单ID={}, 订单编号={}, 原状态={}, 新状态={}", 
+                    orderId, existingOrder.getOrderNumber(), oldOrderStatus, newOrderStatus);
+            // 这里可以根据业务需求决定是否允许,暂时允许修改
+        }
+        
+        // 如果订单状态从待支付变为已支付,需要更新支付时间
+        Integer waitPayStatus = LawyerStatusEnum.WAIT_PAY.getStatus(); // 0:待支付
+        if (waitPayStatus.equals(oldOrderStatus) && newOrderStatus != null && 
+            !waitPayStatus.equals(newOrderStatus) && newPaymentStatus != null && newPaymentStatus == 1) {
+            if (consultationOrder.getPaymentTime() == null) {
+                consultationOrder.setPaymentTime(new Date());
+                log.info("订单状态从待支付变为已支付,自动设置支付时间,订单ID={}, 订单编号={}", 
+                        orderId, existingOrder.getOrderNumber());
+            }
+        }
+        
+        // 设置更新时间
+        consultationOrder.setUpdatedTime(new Date());
+        
+        // 执行更新操作
         boolean result = this.updateById(consultationOrder);
         if (result) {
-            return R.data(consultationOrder);
+            log.info("编辑咨询订单成功,订单ID={}, 订单编号={}, 原订单状态={}, 新订单状态={}", 
+                    orderId, existingOrder.getOrderNumber(), oldOrderStatus, newOrderStatus);
+            // 重新查询更新后的订单信息
+            LawyerConsultationOrder updatedOrder = consultationOrderMapper.selectById(orderId);
+            return R.data(updatedOrder != null ? updatedOrder : consultationOrder);
+        } else {
+            log.error("编辑咨询订单失败:数据库更新失败,订单ID={}, 订单编号={}", 
+                    orderId, existingOrder.getOrderNumber());
+            return R.fail("修改失败");
         }
-        return R.fail("修改失败");
     }
 
     /**