From b5ceaeed3077210a9543e57d38a9670e8a683e3b Mon Sep 17 00:00:00 2001 From: chuzhichao Date: Mon, 3 Jul 2023 11:42:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E8=AE=A2=E5=8D=95=E5=8F=91?= =?UTF-8?q?=E8=B4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- .../oms/controller/OrderController.java | 30 ++++++ .../pojo/request/DeliverProductRequest.java | 27 ++++++ .../cyl/manager/oms/service/OrderService.java | 92 +++++++++++++++++++ 4 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 ruoyi-mall/src/main/java/com/cyl/manager/oms/pojo/request/DeliverProductRequest.java diff --git a/.gitignore b/.gitignore index a05d4e1..18b3b2d 100644 --- a/.gitignore +++ b/.gitignore @@ -43,7 +43,7 @@ nbdist/ !*/build/*.html !*/build/*.xml /sql/local.sql -*local* +*local /ruoyi-admin/src/main/resources/application-dev.yml /ruoyi-admin/src/main/resources/application-prod.yml diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/oms/controller/OrderController.java b/ruoyi-mall/src/main/java/com/cyl/manager/oms/controller/OrderController.java index d76c0b5..ae48fad 100644 --- a/ruoyi-mall/src/main/java/com/cyl/manager/oms/controller/OrderController.java +++ b/ruoyi-mall/src/main/java/com/cyl/manager/oms/controller/OrderController.java @@ -2,11 +2,16 @@ package com.cyl.manager.oms.controller; import java.util.List; +import com.cyl.h5.config.SecurityUtil; +import com.cyl.manager.oms.pojo.request.DeliverProductRequest; import com.cyl.manager.oms.pojo.request.ManagerOrderQueryRequest; import com.cyl.manager.oms.pojo.vo.ManagerOrderDetailVO; import com.cyl.manager.oms.pojo.vo.ManagerOrderVO; +import com.ruoyi.common.core.redis.RedisService; +import com.ruoyi.common.utils.SecurityUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Page; @@ -39,11 +44,14 @@ import com.ruoyi.common.utils.poi.ExcelUtil; @Api(description ="订单表接口列表") @RestController @RequestMapping("/oms/order") +@Slf4j public class OrderController extends BaseController { @Autowired private OrderService service; @Autowired private OrderConvert convert; + @Autowired + private RedisService redisService; @ApiOperation("查询订单表列表") @PreAuthorize("@ss.hasPermi('oms:order:list')") @@ -101,4 +109,26 @@ public class OrderController extends BaseController { public ResponseEntity saveMerchantNote(@RequestBody Order order){ return ResponseEntity.ok(service.saveMerchantNote(order)); } + + @ApiOperation("管理后台订单发货") + @PreAuthorize("@ss.hasPermi('oms:order:delivery')") + @PostMapping("/deliverProduct") + public ResponseEntity delivery(@RequestBody DeliverProductRequest request){ + Long userId = SecurityUtils.getUserId(); + String redisKey = "oms_order_deliverProduct" + request.getOrderId(); + String redisValue = request.getOrderId() + "_" + System.currentTimeMillis(); + try{ + redisService.lock(redisKey, redisValue, 60); + return ResponseEntity.ok(service.deliverProduct(request, userId)); + }catch (Exception e){ + log.error("订单发货接口异常"); + throw new RuntimeException("发货失败"); + }finally { + try{ + redisService.unLock(redisKey, redisValue);; + }catch (Exception e){ + log.error("", e); + } + } + } } diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/oms/pojo/request/DeliverProductRequest.java b/ruoyi-mall/src/main/java/com/cyl/manager/oms/pojo/request/DeliverProductRequest.java new file mode 100644 index 0000000..4a9b4a1 --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/manager/oms/pojo/request/DeliverProductRequest.java @@ -0,0 +1,27 @@ +package com.cyl.manager.oms.pojo.request; +import com.ruoyi.common.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class DeliverProductRequest { + @ApiModelProperty("订单id") + @NotBlank(message = "订单id不能为空") + @Excel(name = "订单号") + private Long orderId; + + @ApiModelProperty("快递名称") + @NotBlank(message = "快递名称不能为空") + @Excel(name = "快递公司") + private String expressName; + + @ApiModelProperty("快递单号") + @NotBlank(message = "快递单号不能为空") + @Excel(name = "运单号") + private String expressSn; + +} diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/oms/service/OrderService.java b/ruoyi-mall/src/main/java/com/cyl/manager/oms/service/OrderService.java index caa11e4..4298351 100644 --- a/ruoyi-mall/src/main/java/com/cyl/manager/oms/service/OrderService.java +++ b/ruoyi-mall/src/main/java/com/cyl/manager/oms/service/OrderService.java @@ -21,10 +21,13 @@ import com.cyl.h5.pojo.vo.SkuViewDTO; import com.cyl.h5.pojo.vo.form.OrderSubmitForm; import com.cyl.h5.pojo.vo.query.OrderH5Query; import com.cyl.manager.oms.convert.OrderConvert; +import com.cyl.manager.oms.domain.OrderDeliveryHistory; import com.cyl.manager.oms.domain.OrderItem; import com.cyl.manager.oms.domain.OrderOperateHistory; +import com.cyl.manager.oms.mapper.OrderDeliveryHistoryMapper; import com.cyl.manager.oms.mapper.OrderItemMapper; import com.cyl.manager.oms.mapper.OrderOperateHistoryMapper; +import com.cyl.manager.oms.pojo.request.DeliverProductRequest; import com.cyl.manager.oms.pojo.request.ManagerOrderQueryRequest; import com.cyl.manager.oms.pojo.vo.*; import com.cyl.manager.pms.convert.SkuConvert; @@ -89,6 +92,8 @@ public class OrderService { private MemberMapper memberMapper; @Value("${aes.key}") private String aesKey; + @Autowired + private OrderDeliveryHistoryMapper orderDeliveryHistoryMapper; /** * 查询订单表 @@ -280,4 +285,91 @@ public class OrderService { qw.set("merchant_note", order.getMerchantNote()); return orderMapper.update(null, qw); } + + /** + * 管理后台发货 + * 目前发货是这样的:待发货、已发货、已完成都能执行发货,每次都会创建一条新的发货记录且修改订单发货信息 + * @param request 发货请求 + * @param userId 操作人 + * @return 结果 + */ + @Transactional + public String deliverProduct(DeliverProductRequest request, Long userId) { + //查询订单 + Order order = orderMapper.selectById(request.getOrderId()); + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("order_id", request.getOrderId()); + OrderItem orderItem = orderItemMapper.selectOne(qw); + if (order == null || orderItem == null){ + throw new RuntimeException("未找到该订单信息"); + } + // 是否为待发货、已发货 、已完成 + if (!(Constants.OrderStatus.SEND.equals(order.getStatus()) + || Constants.OrderStatus.GET.equals(order.getStatus()) + || Constants.OrderStatus.CONFIRM.equals(order.getStatus()))){ + throw new RuntimeException("订单状态错误"); + } + Integer orderStatus = + Constants.OrderStatus.SEND.equals(order.getStatus()) ? Constants.OrderStatus.GET : order.getStatus(); + //更新订单 + LocalDateTime optDate = LocalDateTime.now(); + UpdateWrapper orderQw = new UpdateWrapper(); + orderQw.eq("id", order.getId()) + .set("status", orderStatus) + .set("delivery_company", request.getExpressName()) + .set("delivery_sn", request.getExpressSn()) + .set("update_time", optDate) + .set("update_by", userId) + .set("delivery_time", optDate); + int rows = orderMapper.update(null, orderQw); + if (rows < 1){ + throw new RuntimeException("更新订单发货信息失败"); + } + //创建新的发货记录 + this.createDeliveryHistory(request, userId, optDate); + //创建订单操作记录 + this.createOrderOptHistory(order.getId(), orderStatus, userId, optDate); + return "发货成功"; + } + + /** + * 创建发货记录 + * @param request 发货请求 + * @param userId 操作人 + * @param optDate 操作时间 + */ + private void createDeliveryHistory(DeliverProductRequest request, Long userId, LocalDateTime optDate){ + OrderDeliveryHistory orderDeliveryHistory = new OrderDeliveryHistory(); + orderDeliveryHistory.setOrderId(request.getOrderId()); + orderDeliveryHistory.setDeliveryCompany(request.getExpressName()); + orderDeliveryHistory.setDeliverySn(request.getExpressSn()); + orderDeliveryHistory.setCreateTime(optDate); + orderDeliveryHistory.setCreateBy(userId); + int rows = orderDeliveryHistoryMapper.insert(orderDeliveryHistory); + if (rows < 1) { + throw new RuntimeException("新增订单发货记录失败"); + } + } + + /** + * 创建订单操作历史 + * @param orderId 订单id + * @param orderStatus 订单状态 + * @param userId 操作人 + * @param optDate 操作时间 + */ + private void createOrderOptHistory(Long orderId, Integer orderStatus, Long userId, LocalDateTime optDate){ + OrderOperateHistory optHistory = new OrderOperateHistory(); + optHistory.setOrderId(orderId); + optHistory.setOperateMan(userId + ""); + optHistory.setOrderStatus(orderStatus); + optHistory.setCreateTime(optDate); + optHistory.setCreateBy(userId); + optHistory.setUpdateBy(userId); + optHistory.setUpdateTime(optDate); + int rows = orderOperateHistoryMapper.insert(optHistory); + if (rows < 1) { + throw new RuntimeException("新增订单操作记录失败"); + } + } }