From b422efe757e2a6927b122faf9ca89505a244b25d Mon Sep 17 00:00:00 2001 From: Agent Date: Sun, 29 Mar 2026 07:09:54 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=85=AC=E5=BC=80?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=9F=A5=E7=9C=8B=E6=8E=A5=E5=8F=A3=EF=BC=8C?= =?UTF-8?q?=E6=97=A0=E9=9C=80=E8=AE=A4=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PublicOrderController.java | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 src/main/java/com/example/building/controller/PublicOrderController.java diff --git a/src/main/java/com/example/building/controller/PublicOrderController.java b/src/main/java/com/example/building/controller/PublicOrderController.java new file mode 100644 index 0000000..7d558d7 --- /dev/null +++ b/src/main/java/com/example/building/controller/PublicOrderController.java @@ -0,0 +1,91 @@ +package com.example.building.controller; + +import com.example.building.common.Result; +import com.example.building.entity.Order; +import com.example.building.entity.OrderItem; +import com.example.building.mapper.OrderItemMapper; +import com.example.building.mapper.OrderMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 公开订单查看控制器 + * 无需认证,用于客户通过分享链接查看订单 + */ +@RestController +@RequestMapping("/api/v1/public") +public class PublicOrderController { + + @Autowired + private OrderMapper orderMapper; + + @Autowired + private OrderItemMapper orderItemMapper; + + /** + * 通过订单号查询订单详情 + * 公开接口,无需认证 + */ + @GetMapping("/orders/{orderNo}") + public Result> getOrderByNo(@PathVariable String orderNo) { + // 查询订单 + Order order = orderMapper.selectOne( + new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() + .eq(Order::getOrderNo, orderNo) + ); + + if (order == null) { + return Result.error("订单不存在"); + } + + // 查询订单明细 + List items = orderItemMapper.selectList( + new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() + .eq(OrderItem::getOrderId, order.getOrderId()) + ); + + // 构建返回数据(只返回公开信息) + Map result = new HashMap<>(); + result.put("orderNo", order.getOrderNo()); + result.put("status", order.getStatus()); + result.put("statusText", getStatusText(order.getStatus())); + result.put("customerName", order.getCustomerName() != null ? order.getCustomerName() : "散客"); + result.put("customerPhone", order.getCustomerPhone()); + result.put("totalAmount", order.getTotalAmount()); + result.put("discountAmount", order.getDiscountAmount()); + result.put("actualAmount", order.getActualAmount()); + result.put("paymentMethod", getPaymentText(order.getPaymentMethod())); + result.put("createdAt", order.getCreatedAt()); + result.put("items", items); + result.put("remark", order.getRemark()); + + return Result.success(result); + } + + private String getStatusText(Integer status) { + if (status == null) return "未知"; + switch (status) { + case 0: return "进行中"; + case 1: return "已完成"; + case 2: return "已取消"; + case 3: return "退款中"; + case 4: return "已退款"; + case 9: return "退货中"; + default: return "未知"; + } + } + + private String getPaymentText(String method) { + if (method == null) return "-"; + switch (method) { + case "cash": return "现金"; + case "wechat": return "微信"; + case "alipay": return "支付宝"; + default: return method; + } + } +} \ No newline at end of file