gongzuming
2024-09-08 3cba581ee0e601c39653a754e6293de9e0df70c5
库位分配逻辑修改
已修改4个文件
79 ■■■■■ 文件已修改
src/main/java/com/mzl/flower/dto/response/payment/OrderDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/response/warehouse/WarehouseLocationDTO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/schedule/WarehouseScheduleService.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/warehouse/WarehouseService.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
}
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;
}
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());
                            }
                        }
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;
    }