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