From 3cba581ee0e601c39653a754e6293de9e0df70c5 Mon Sep 17 00:00:00 2001 From: gongzuming <gongzuming> Date: 星期日, 08 九月 2024 15:57:47 +0800 Subject: [PATCH] 库位分配逻辑修改 --- src/main/java/com/mzl/flower/schedule/WarehouseScheduleService.java | 46 +++++++++++++++------- src/main/java/com/mzl/flower/dto/response/warehouse/WarehouseLocationDTO.java | 4 +- src/main/java/com/mzl/flower/dto/response/payment/OrderDTO.java | 3 + src/main/java/com/mzl/flower/service/warehouse/WarehouseService.java | 26 +++++++----- 4 files changed, 51 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/mzl/flower/dto/response/payment/OrderDTO.java b/src/main/java/com/mzl/flower/dto/response/payment/OrderDTO.java index 8f9210e..fb43104 100644 --- a/src/main/java/com/mzl/flower/dto/response/payment/OrderDTO.java +++ b/src/main/java/com/mzl/flower/dto/response/payment/OrderDTO.java @@ -9,6 +9,7 @@ import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.List; @Data public class OrderDTO extends AbstractTransDTO { @@ -135,4 +136,6 @@ @ApiModelProperty(value = "支付单号") private String paymentTrId; + + private List<OrderItemListDTO> items; } diff --git a/src/main/java/com/mzl/flower/dto/response/warehouse/WarehouseLocationDTO.java b/src/main/java/com/mzl/flower/dto/response/warehouse/WarehouseLocationDTO.java index c5fb855..98d2fc9 100644 --- a/src/main/java/com/mzl/flower/dto/response/warehouse/WarehouseLocationDTO.java +++ b/src/main/java/com/mzl/flower/dto/response/warehouse/WarehouseLocationDTO.java @@ -28,7 +28,7 @@ @ApiModelProperty("是否已占用") private Boolean used; - private OrderDTO orderDTO; + private List<OrderDTO> orderDTO; - private List<OrderItemListDTO> items; + } diff --git a/src/main/java/com/mzl/flower/schedule/WarehouseScheduleService.java b/src/main/java/com/mzl/flower/schedule/WarehouseScheduleService.java index 6790866..1c7f2a5 100644 --- a/src/main/java/com/mzl/flower/schedule/WarehouseScheduleService.java +++ b/src/main/java/com/mzl/flower/schedule/WarehouseScheduleService.java @@ -34,25 +34,25 @@ /** * 每天17点,定时分配订单库位(查询前一天17点到今天17点支付完成且未分配库位的订单) */ - @Scheduled(cron = "0 0 17 * * ?") + @Scheduled(cron = "0 35 15 * * ?") public void allocatedWarehouseLocation() { log.info("定时分配订单库位开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); //查询当日待分配的订单 List<Order> orders = orderService.selectPaymentOrderList(); if(orders!=null && orders.size()>0){ //订单按照合伙人分组排序 - Map<Long,List<String>> partnerOrders = new HashMap<>(); - List<String> customerOrders = new ArrayList<>(); + Map<Long,List<Order>> partnerOrders = new HashMap<>(); + List<Order> customerOrders = new ArrayList<>(); for (Order order : orders) { Long partnerId = order.getPartnerId(); if(partnerId==null || partnerId==0){ //非合伙人订单 - customerOrders.add(order.getId()); + customerOrders.add(order); }else{ //合伙人订单 if(partnerOrders.containsKey(partnerId)){ - partnerOrders.get(partnerId).add(order.getId()); + partnerOrders.get(partnerId).add(order); }else{ - List<String> orderIds = new ArrayList<>(); - orderIds.add(order.getId()); + List<Order> orderIds = new ArrayList<>(); + orderIds.add(order); partnerOrders.put(partnerId,orderIds); } } @@ -61,14 +61,22 @@ //查询库位队列信息 Queue<WarehouseLocationDTO> locations = warehouseService.selectAllocatedWarehouseLocation(); if(locations!=null && locations.size()>0){ + Map<String, WarehouseLocationDTO> partnerLocationMap = new HashMap<>(); if(partnerOrders!=null && partnerOrders.size()>0 ){ //合伙人订单 for (Long partnerId : partnerOrders.keySet()) { - List<String> orderIds = partnerOrders.get(partnerId); - for (String orderId : orderIds) { + List<Order> orderIds = partnerOrders.get(partnerId); + for (Order order : orderIds) { if(locations!=null && locations.size()>0){ - WarehouseLocationDTO location = locations.poll(); - orderService.allocatedWarehouseLocation(orderId, location.getWarehouseId(), - location.getWarehouseName(),location.getId(), location.getCode()); + String key = order.getCreateBy()+"||"+order.getCustomerAddress(); + WarehouseLocationDTO location = null; + if(partnerLocationMap.containsKey(key)){ + location = partnerLocationMap.get(key); + } else { + location = locations.poll(); + partnerLocationMap.put(key,location); + } + orderService.allocatedWarehouseLocation(order.getId(), location.getWarehouseId(), + location.getWarehouseName(), location.getId(), location.getCode()); } } if(locations!=null && locations.size()>0){ //两个合伙人之间空一个库位 @@ -77,10 +85,18 @@ } } if(customerOrders!=null && customerOrders.size()>0){ //散户订单 - for (String orderId : customerOrders) { + for (Order order : customerOrders) { + Map<String, WarehouseLocationDTO> customerLocationMap = new HashMap<>(); if(locations!=null && locations.size()>0){ - WarehouseLocationDTO location = locations.poll(); - orderService.allocatedWarehouseLocation(orderId, location.getWarehouseId(), + String key = order.getCreateBy()+"||"+order.getCustomerAddress(); + WarehouseLocationDTO location = null; + if(customerLocationMap.containsKey(key)){ + location = customerLocationMap.get(key); + } else { + location = locations.poll(); + customerLocationMap.put(key,location); + } + orderService.allocatedWarehouseLocation(order.getId(), location.getWarehouseId(), location.getWarehouseName(),location.getId(), location.getCode()); } } diff --git a/src/main/java/com/mzl/flower/service/warehouse/WarehouseService.java b/src/main/java/com/mzl/flower/service/warehouse/WarehouseService.java index 98a13de..c939f09 100644 --- a/src/main/java/com/mzl/flower/service/warehouse/WarehouseService.java +++ b/src/main/java/com/mzl/flower/service/warehouse/WarehouseService.java @@ -22,6 +22,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; @@ -125,15 +126,13 @@ public List<WarehouseLocationDTO> queryWarehouseLocation(Long warehouseId, String code) { List<WarehouseLocationDTO> locations = warehouseLocationMapper.findAll(warehouseId, code); for (WarehouseLocationDTO location : locations) { - OrderDTO orderDTO = getOrderByWarehouseLocation(location.getId()); - if(orderDTO == null){ + List<OrderDTO> orderDTOs = getOrderByWarehouseLocation(location.getId()); + if(orderDTOs == null || orderDTOs.size()==0){ location.setUsed(false); }else{ - location.setItems(orderService.getPtCuOrderItems(orderDTO.getId())); location.setUsed(true); } - location.setOrderDTO(orderDTO); - + location.setOrderDTO(orderDTOs); } return locations; } @@ -142,16 +141,21 @@ * 查询库位订单信息 * */ - public OrderDTO getOrderByWarehouseLocation(Long warehouseLocationId){ + public List<OrderDTO> getOrderByWarehouseLocation(Long warehouseLocationId){ LocalDateTime start = LocalDate.now().plusDays(-1).atTime(17, 0, 0); LocalDateTime end = LocalDate.now().atTime(16, 59, 59); - Order order = orderMapper.selectOne(new QueryWrapper<Order>().eq("deleted", 0) + List<Order> orders = orderMapper.selectList(new QueryWrapper<Order>().eq("deleted", 0) .eq("warehouse_location_id", warehouseLocationId) .gt("payment_time", start).le("payment_time", end)); - if(order!=null){ - OrderDTO dto = new OrderDTO(); - BeanUtils.copyProperties(order, dto); - return dto; + if(orders!=null && orders.size()>0){ + List<OrderDTO> dtos = new ArrayList<>(); + for (Order order : orders) { + OrderDTO dto = new OrderDTO(); + BeanUtils.copyProperties(order, dto); + dto.setItems(orderService.getPtCuOrderItems(dto.getId())); + dtos.add(dto); + } + return dtos; } return null; } -- Gitblit v1.9.3