Quellcode durchsuchen

修改获取订单列表

qmj vor 1 Monat
Ursprung
Commit
796156c31f

+ 60 - 0
ruoyi-admin/src/main/java/com/ruoyi/app/order/UserOrderController.java

@@ -404,5 +404,65 @@ public class UserOrderController extends BaseController {
         } catch (Exception ignored) {}
     }
 
+    /**
+     * 确认取餐(自取类型订单,state=2 → state=3)
+     */
+    @PostMapping("/confirmPickup")
+    @Auth
+    @Anonymous
+    public AjaxResult confirmPickup(@RequestHeader String token, @RequestParam String ddId) {
+        JwtUtil jwtUtil = new JwtUtil();
+        String userId = jwtUtil.getusid(token);
+
+        PosOrder order = posOrderService.getOne(
+            new LambdaQueryWrapper<PosOrder>()
+                .eq(PosOrder::getDdId, ddId)
+                .eq(PosOrder::getUserId, Long.valueOf(userId))
+        );
+        if (order == null) {
+            return error("订单不存在");
+        }
+        if (order.getType() == null || order.getType() != 1) {
+            return error("仅自取订单可确认取餐");
+        }
+        if (order.getState() == null || order.getState() != 2) {
+            return error("当前订单状态不可确认取餐");
+        }
+        if (order.getPayStatus() == null || order.getPayStatus() != 1) {
+            return error("订单未支付,不可确认取餐");
+        }
+        if (order.getAfterSaleStatus() != null && order.getAfterSaleStatus() > 0) {
+            return error("订单存在售后处理中,不可确认取餐");
+        }
+        order.setState(3L);
+        posOrderService.updateById(order);
+        return success("确认取餐成功");
+    }
+
+    /**
+     * 取消订单(未接单前,state=0 → state=4)
+     */
+    @PostMapping("/cancelOrder")
+    @Auth
+    @Anonymous
+    public AjaxResult cancelOrder(@RequestHeader String token, @RequestParam String ddId) {
+        JwtUtil jwtUtil = new JwtUtil();
+        String userId = jwtUtil.getusid(token);
+
+        PosOrder order = posOrderService.getOne(
+            new LambdaQueryWrapper<PosOrder>()
+                .eq(PosOrder::getDdId, ddId)
+                .eq(PosOrder::getUserId, Long.valueOf(userId))
+        );
+        if (order == null) {
+            return error("订单不存在");
+        }
+        if (order.getState() == null || order.getState() != 0) {
+            return error("仅待处理状态的订单可取消");
+        }
+        order.setState(4L);
+        posOrderService.updateById(order);
+        return success("取消订单成功");
+    }
 
 }

+ 2 - 1
specs/006-orderstate/spec.md

@@ -315,7 +315,7 @@ ALTER TABLE pos_order ADD COLUMN after_sale_status BIGINT DEFAULT 0 COMMENT '售
 | 自取 | 商家 | 商家点"完成" → state=3, payStatus=1 | 出餐后 N 小时自动完成 |
 | 堂食 | 商家 | 商家点"完成" → state=3, payStatus=1 | 出餐后 N 小时自动完成 |
 
-- **用户确认**:可提供可选的"确认取餐"按钮,用户点了也设 `state=3`,但不点也不影响
+- **用户确认取餐**:可选的"确认取餐"按钮,仅限自取订单(type=1)且已支付(payStatus=1)的用户可操作,用户点了设 `state=3`。现金自取订单(payStatus=0)的用户无法自己确认取餐,只能等商家通过"完成"操作同时设置 state=3 和 payStatus=1。这样避免出现 state=3(已完成) 但 payStatus=0(未支付) 的矛盾状态。
 - **定时任务兜底**:商家出餐(state=2)后超时未完成,系统自动设为 `state=3`
 
 ### 8. 订单创建(UserOrderController)
@@ -332,6 +332,7 @@ ALTER TABLE pos_order ADD COLUMN after_sale_status BIGINT DEFAULT 0 COMMENT '售
 ### 10. 售后/退款操作(OrderAppealController 等)
 
 > **本次不实现完整退款流程**。系统尚未接入在线支付,暂无退款场景。afterSaleStatus 字段预留,但只实现以下两个操作:
+> - 用户确认取餐(自取已支付订单):`state` → 3,仅限 type=1 且 payStatus=1 且 state=2 的订单
 > - 用户取消订单(未接单前):`state` → 4,`afterSaleStatus` 保持 0
 > - 商家取消订单:`state` → 4,`afterSaleStatus` 保持 0
 >