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({ 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 framework/src/main/java/cn/lili/modules/order/order/entity/enums/ModifyAddressEnums.java
New file @@ -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; } 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; 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" + 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); /** * 订单发货 * 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 @@ //查询订单和自订单,然后写入vo返回 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); //查询订单和自订单,然后写入vo返回 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); //要记录之前的收货地址,所以需要以代码方式进行调用 不采用注解 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)