package com.mzl.flower.schedule;
|
|
import com.mzl.flower.dto.response.warehouse.WarehouseLocationDTO;
|
import com.mzl.flower.entity.payment.Order;
|
import com.mzl.flower.entity.warehouse.WarehouseLocation;
|
import com.mzl.flower.service.payment.OrderService;
|
import com.mzl.flower.service.warehouse.WarehouseService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.time.DateFormatUtils;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
|
import java.time.LocalDateTime;
|
import java.util.*;
|
|
/**
|
* 库位相关定时任务
|
*/
|
@Component
|
@Slf4j
|
public class WarehouseScheduleService {
|
|
|
private final WarehouseService warehouseService;
|
|
private final OrderService orderService;
|
|
public WarehouseScheduleService(WarehouseService warehouseService,
|
OrderService orderService) {
|
this.warehouseService = warehouseService;
|
this.orderService = orderService;
|
}
|
|
/**
|
* 每天17点,定时分配订单库位(查询前一天17点到今天17点支付完成且未分配库位的订单)
|
*/
|
@Scheduled(cron = "0 0 17 * * ?")
|
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<>();
|
for (Order order : orders) {
|
Long partnerId = order.getPartnerId();
|
if(partnerId==null || partnerId==0){ //非合伙人订单
|
customerOrders.add(order.getId());
|
}else{ //合伙人订单
|
if(partnerOrders.containsKey(partnerId)){
|
partnerOrders.get(partnerId).add(order.getId());
|
}else{
|
List<String> orderIds = new ArrayList<>();
|
orderIds.add(order.getId());
|
partnerOrders.put(partnerId,orderIds);
|
}
|
}
|
}
|
if((partnerOrders!=null && partnerOrders.size()>0) || (customerOrders!=null && customerOrders.size()>0)){
|
//查询库位队列信息
|
Queue<WarehouseLocationDTO> locations = warehouseService.selectAllocatedWarehouseLocation();
|
if(locations!=null && locations.size()>0){
|
if(partnerOrders!=null && partnerOrders.size()>0 ){ //合伙人订单
|
for (Long partnerId : partnerOrders.keySet()) {
|
List<String> orderIds = partnerOrders.get(partnerId);
|
for (String orderId : orderIds) {
|
if(locations!=null && locations.size()>0){
|
WarehouseLocationDTO location = locations.poll();
|
orderService.allocatedWarehouseLocation(orderId, location.getWarehouseId(),
|
location.getWarehouseName(),location.getId(), location.getCode());
|
}
|
}
|
if(locations!=null && locations.size()>0){ //两个合伙人之间空一个库位
|
locations.poll();
|
}
|
}
|
}
|
if(customerOrders!=null && customerOrders.size()>0){ //散户订单
|
for (String orderId : customerOrders) {
|
if(locations!=null && locations.size()>0){
|
WarehouseLocationDTO location = locations.poll();
|
orderService.allocatedWarehouseLocation(orderId, location.getWarehouseId(),
|
location.getWarehouseName(),location.getId(), location.getCode());
|
}
|
}
|
}
|
}
|
}
|
}
|
log.info("定时分配订单库位结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
|
}
|
|
/**
|
* 每天凌晨2点,合伙人发货
|
*/
|
@Scheduled(cron = "0 0 2 * * ?")
|
public void clearWarehouseLocation() {
|
log.info("定时合伙人发货开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
|
orderService.setPartnerOrderSend();
|
log.info("定时合伙人发货开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
|
}
|
|
}
|