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