From 9f92aa108c24a67fabe80977cede0e0352318681 Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期三, 10 九月 2025 19:11:17 +0800
Subject: [PATCH] 扫码修改地址

---
 buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java               |   37 ++++++++++++++++++
 framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderSimpleVO.java         |    1 
 framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java            |    4 ++
 framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java    |   46 +++++++++++++++++++++++
 framework/src/main/java/cn/lili/modules/order/order/entity/enums/ModifyAddressEnums.java |   11 +++++
 framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java                |    5 ++
 framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java              |    2 +
 7 files changed, 105 insertions(+), 1 deletions(-)

diff --git a/buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java
index 61888b1..23db668 100644
--- a/buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java
@@ -10,10 +10,12 @@
 import cn.lili.common.utils.StringUtils;
 import cn.lili.common.vo.ResultMessage;
 import cn.lili.modules.lmk.enums.general.AdminRoleEnum;
+import cn.lili.modules.member.entity.dto.MemberAddressDTO;
 import cn.lili.modules.order.order.entity.dos.Order;
 import cn.lili.modules.order.order.entity.dos.OrderPackage;
 import cn.lili.modules.order.order.entity.dto.OrderSearchParams;
 import cn.lili.modules.order.order.entity.dto.OrderSearchXcxParams;
+import cn.lili.modules.order.order.entity.enums.ModifyAddressEnums;
 import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
 import cn.lili.modules.order.order.entity.vo.OrderDetailVO;
 import cn.lili.modules.order.order.entity.vo.OrderSimpleVO;
@@ -30,10 +32,12 @@
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
+import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.util.ArrayList;
@@ -46,6 +50,7 @@
  * @author Chopper
  * @since 2020/11/16 10:08 涓嬪崍
  */
+@Slf4j
 @RestController
 @Api(tags = "涔板绔�,璁㈠崟鎺ュ彛")
 @RequestMapping("/buyer/order/order")
@@ -115,7 +120,37 @@
         });
         return ResultUtil.data(orderDetailVO);
     }
-
+    @ApiOperation(value = "璁㈠崟鏄庣粏")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "orderSn", value = "璁㈠崟缂栧彿", required = true, paramType = "path")
+    })
+    @GetMapping(value = "/editAddress/{orderSn}")
+    public ResultMessage<OrderDetailVO> editAddress(@NotNull(message = "璁㈠崟缂栧彿涓嶈兘涓虹┖") @PathVariable("orderSn") String orderSn) {
+        OrderDetailVO orderDetailVO = orderService.queryEditAddressDetail(orderSn);
+        Order order = orderDetailVO.getOrder();
+        if (!OrderStatusEnum.UNDELIVERED.name().equals(order.getOrderStatus())) {
+            log.error("璁㈠崟鍙蜂负{}------------------->鐘舵�佸紓甯镐负{}",orderSn,order.getOrderStatus());
+            throw new ServiceException("璁㈠崟鐘舵�佸紓甯告棤娉曢鍙�");
+        }
+        String modifyAddressFlag = order.getModifyAddressFlag();
+        if (ModifyAddressEnums.USED.name().equals(modifyAddressFlag)) {
+            throw new ServiceException("璁㈠崟宸茶棰嗗彇");
+        }
+        orderDetailVO.getOrderItems().forEach(orderItem -> {
+            String image = orderItem.getImage();
+            if (StringUtils.isNotBlank(image)&&!image.contains("http")) {
+                orderItem.setImage(cosUtil.getPreviewUrl(image));
+            }
+        });
+        return ResultUtil.data(orderDetailVO);
+    }
+    @ApiOperation(value = "淇敼鏀惰揣浜轰俊鎭�")
+    @ApiImplicitParam(name = "orderSn", value = "璁㈠崟sn", required = true, dataType = "String", paramType = "path")
+    @PostMapping(value = "/update/editAddress/{orderSn}/consignee")
+    public ResultMessage<Object> consignee(@NotNull(message = "鍙傛暟闈炴硶") @PathVariable String orderSn,
+                                           @Valid @RequestBody MemberAddressDTO memberAddressDTO) {
+        return ResultUtil.data(orderService.updateAddressConsignee(orderSn, memberAddressDTO));
+    }
     @PreventDuplicateSubmissions
     @ApiOperation(value = "纭鏀惰揣")
     @ApiImplicitParams({
diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java
index 0ffe52a..a9636fb 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java
@@ -185,6 +185,11 @@
      */
     @ApiModelProperty(value = "璁㈠崟绫诲瀷")
     private String orderType;
+    /**
+     * 璁㈠崟鍦板潃淇敼鐘舵��
+     */
+    @ApiModelProperty(value = "璁㈠崟鍦板潃淇敼鐘舵��")
+    private String modifyAddressFlag;
 
     /**
      * @see OrderPromotionTypeEnum
diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/ModifyAddressEnums.java b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/ModifyAddressEnums.java
new file mode 100644
index 0000000..60db0f0
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/ModifyAddressEnums.java
@@ -0,0 +1,11 @@
+package cn.lili.modules.order.order.entity.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum ModifyAddressEnums {
+    USED("宸茶棰嗗彇");
+    private final String des;
+}
diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderSimpleVO.java b/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderSimpleVO.java
index 089802f..aa439c6 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderSimpleVO.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderSimpleVO.java
@@ -159,6 +159,7 @@
 
     private String consigneeName;
     private String consigneeMobile;
+    private String modifyAddressFlag;
 
 
     private String memberId;
diff --git a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java
index 6e851de..80f5579 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java
@@ -90,6 +90,7 @@
             "o.consignee_mobile AS consigneeMobile," +
             "o.member_id AS memberId," +
             "m.nick_name AS nickName," +
+            "o.modify_address_flag AS modifyAddressFlag,"+
             " GROUP_CONCAT(oi.goods_id) as group_goods_id," +
             " GROUP_CONCAT(oi.sku_id) as group_sku_id," +
             " GROUP_CONCAT(oi.num) as group_num" +
@@ -117,6 +118,7 @@
             "o.consignee_name AS consigneeName," +
             "o.consignee_mobile AS consigneeMobile," +
             "o.member_id AS memberId," +
+            "o.modify_address_flag AS modifyAddressFlag,"+
             " GROUP_CONCAT(oi.goods_id) as group_goods_id," +
             " GROUP_CONCAT(oi.sku_id) as group_sku_id," +
             " GROUP_CONCAT(oi.num) as group_num" +
diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java
index 9b8efa7..27f7281 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java
@@ -127,6 +127,8 @@
      */
     OrderDetailVO queryDetail(String orderSn);
 
+    OrderDetailVO queryEditAddressDetail(String orderSn);
+
     String sendMqMessage(String  snNo);
     /**
      * 鍒涘缓璁㈠崟
@@ -175,6 +177,8 @@
      */
     Order updateConsignee(String orderSn, MemberAddressDTO memberAddressDTO);
 
+    Order updateAddressConsignee(String orderSn, MemberAddressDTO memberAddressDTO);
+
     /**
      * 璁㈠崟鍙戣揣
      *
diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
index dfe3ded..9d38114 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
@@ -200,6 +200,7 @@
     private RedisTemplate<Object,Object> redisTemplate;
 
     private final static  String LOCK_ORDER_NO_MQ="lock_order_no_mq:";
+    private final static  String LOCK_EDIT_ORDER_ADDRESS="lock_edit_order_address:";
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void intoDB(TradeDTO tradeDTO) {
@@ -488,6 +489,18 @@
         //鏌ヨ璁㈠崟鍜岃嚜璁㈠崟锛岀劧鍚庡啓鍏o杩斿洖
         return new OrderDetailVO(order, orderItems, orderLogs, receipt);
     }
+    @Override
+    public OrderDetailVO queryEditAddressDetail(String orderSn) {
+        Order order = this.getBySn(orderSn);
+        if (order == null) {
+            throw new ServiceException(ResultCode.ORDER_NOT_EXIST);
+        }
+        //鏌ヨ璁㈠崟椤逛俊鎭�
+        List<OrderItem> orderItems = orderItemService.getByOrderSn(orderSn);
+
+        //鏌ヨ璁㈠崟鍜岃嚜璁㈠崟锛岀劧鍚庡啓鍏o杩斿洖
+        return new OrderDetailVO(order, orderItems, null, null);
+    }
 
     @Override
     @Transactional
@@ -666,7 +679,40 @@
 
         return order;
     }
+    @Override
+    @SystemLogPoint(description = "淇敼璁㈠崟", customerLog = "'璁㈠崟[' + #orderSn + ']鏀惰揣淇℃伅淇敼锛屼慨鏀逛负'+#memberAddressDTO.consigneeDetail")
+    @Transactional(rollbackFor = Exception.class)
+    public Order updateAddressConsignee(String orderSn, MemberAddressDTO memberAddressDTO) {
+        Order order = this.getBySn(orderSn);
+        if (order == null) {
+            throw new ServiceException(ResultCode.ORDER_NOT_EXIST);
+        }
+        //闄愬埗30绉掑彧鑳借姹備竴娆¢伩鍏嶅嚭鐜伴噸鏂版彁浜ら棶棰�
+        Boolean b = redisTemplate.opsForValue().setIfAbsent(LOCK_EDIT_ORDER_ADDRESS + orderSn, orderSn,30, TimeUnit.SECONDS);
+        if ( Boolean.FALSE.equals(b)){
+            throw new ServiceException("璇峰湪30绉掑悗閲嶈瘯");
+        }
+        String modifyAddressFlag = order.getModifyAddressFlag();
+        if (StringUtils.isNotBlank(modifyAddressFlag)) {
+            throw new ServiceException("褰撳墠璁㈠崟宸茬粡琚鍙�");
+        }
+        QueryWrapper<Order> wrapper = new QueryWrapper<>();
+        wrapper.eq("id", order.getId());
+        // 浣跨敤 last 鏂规硶鎷兼帴 FOR UPDATE 璇彞
+        wrapper.last("FOR UPDATE");
+        baseMapper.selectOne(wrapper);
+        //瑕佽褰曚箣鍓嶇殑鏀惰揣鍦板潃锛屾墍浠ラ渶瑕佷互浠g爜鏂瑰紡杩涜璋冪敤 涓嶉噰鐢ㄦ敞瑙�
+        String message = "璁㈠崟[" + orderSn + "]鏀惰揣淇℃伅淇敼锛岀敱[" +order.getConsigneeAddressPath()+  order.getConsigneeDetail() + "]淇敼涓篬" + memberAddressDTO.getConsigneeAddressPath()+ memberAddressDTO.getConsigneeDetail() + "]";
+        //璁板綍璁㈠崟鎿嶄綔鏃ュ織
+        BeanUtil.copyProperties(memberAddressDTO, order);
+        order.setModifyAddressFlag(ModifyAddressEnums.USED.name());
+        this.updateById(order);
+        OrderLog orderLog = new OrderLog(orderSn, UserContext.getCurrentUser().getId(), UserContext.getCurrentUser().getRole().getRole(),
+                UserContext.getCurrentUser().getUsername(), message);
+        orderLogService.save(orderLog);
 
+        return order;
+    }
     @Override
     @OrderLogPoint(description = "'璁㈠崟['+#orderSn+']鍙戣揣锛屽彂璐у崟鍙穂'+#logisticsNo+']'", orderSn = "#orderSn")
     @Transactional(rollbackFor = Exception.class)

--
Gitblit v1.8.0