Kaynağa Gözat

feat(order): 限制收货地址仅支持贵州省

- 新增校验方法validateGuizhouAddress,确保订单地址为贵州省范围内
- 在订单地址获取后调用地址校验逻辑,增强地址合法性检查
- 校验逻辑支持检查省、市、区及详细地址多个字段包含“贵州”关键字

feat(platform): 新增申求后退单接口

- 创建SMQJHRefundOrderController控制器,处理售后申请请求
- 实现applyAfterSales接口,接收售后申请数据并调用业务服务处理
- 接口请求和响应使用统一的请求体和返回格式
- 添加请求日志打印,包含唯一日志ID跟踪请求流程
Sheep 1 gün önce
ebeveyn
işleme
76262494a7

+ 26 - 0
yami-shop-api/src/main/java/com/yami/shop/api/controller/OrderController.java

@@ -12,6 +12,7 @@ package com.yami.shop.api.controller;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
+import com.alibaba.excel.util.StringUtils;
 import com.google.common.collect.Lists;
 import com.yami.shop.bean.app.dto.*;
 import com.yami.shop.bean.app.param.*;
@@ -121,6 +122,7 @@ public class OrderController {
 
         // 订单的地址信息
         UserAddr userAddr = userAddrService.getUserAddrByUserId(orderParam.getAddrId(), userId);
+        validateGuizhouAddress(userAddr);
         UserAddrDto userAddrDto = mapperFacade.map(userAddr, UserAddrDto.class);
         // 组装获取用户提交的购物车商品项
         OrderItemParam orderItem = orderParam.getOrderItem();
@@ -400,4 +402,28 @@ public class OrderController {
         orderPayInfoParam.setTotalScore(totalScore);
         return ResponseEntity.ok(orderPayInfoParam);
     }
+
+    private void validateGuizhouAddress(UserAddr userAddr) {
+        if (userAddr == null) {
+            throw new GlobalException("请选择收货地址");
+        }
+        String fullAddress = safeString(userAddr.getProvince())
+                + safeString(userAddr.getCity())
+                + safeString(userAddr.getArea())
+                + safeString(userAddr.getAddr())
+                + safeString(userAddr.getAddress())
+                + safeString(userAddr.getAddressName())
+                + safeString(userAddr.getAddrDetail());
+        if (!containsGuizhou(userAddr.getProvince()) && !containsGuizhou(fullAddress)) {
+            throw new GlobalException("仅支持贵州省收货地址下单");
+        }
+    }
+
+    private boolean containsGuizhou(String text) {
+        return text != null && text.contains("贵州");
+    }
+
+    private String safeString(String text) {
+        return text == null ? "" : text;
+    }
 }

+ 29 - 0
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/smqjh/SMQJHRefundOrderController.java

@@ -0,0 +1,29 @@
+package com.yami.shop.platform.controller.smqjh;
+
+import com.yami.shop.bean.vo.xsb.RefundOrderPushVo;
+import com.yami.shop.common.util.R;
+import com.yami.shop.service.xsb.XSBRefundOrderService;
+import lombok.AllArgsConstructor;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.UUID;
+
+@RestController
+@RequestMapping("/platform/smqjh/refund")
+@AllArgsConstructor
+@Log4j2
+public class SMQJHRefundOrderController {
+
+    private final XSBRefundOrderService xsbRefundOrderService;
+
+    @PostMapping("/applyAfterSales")
+    public R<String> applyAfterSales(@RequestBody RefundOrderPushVo refundOrderPushVo) {
+        String logId = UUID.randomUUID().toString();
+        log.info("[{}] receive smqjh refund apply request: {}", logId, refundOrderPushVo);
+        return xsbRefundOrderService.applySmqjhAfterSales(refundOrderPushVo, logId);
+    }
+}