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