完成订单自动完成任务

This commit is contained in:
chenxiky 2025-08-02 10:47:54 +08:00
parent 94ff075a1e
commit 982e6d7218
4 changed files with 85 additions and 2 deletions

View File

@ -5,6 +5,7 @@ import com.aircraft.modules.order.domain.dto.OrderMainPageQueryDTO;
import com.aircraft.modules.order.domain.dto.UpdateOrderDTO;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Date;
import java.util.List;
/**
@ -95,4 +96,21 @@ public interface IOrderMainService extends IService<OrderMain> {
* @param updateOrderMain {@link OrderMain}
*/
void finishMainOrder(OrderMain updateOrderMain);
/**
* 获取订单状态为飞行员确认中且时间小于等于当前时间finishTime的
*
* @param finishTime 自动完成时间
* @return {@link List<OrderMain>}
*/
List<OrderMain> obtainOrderNotFinish(Date finishTime);
/**
* 根据订单ID修改订单状态
*
* @param orderIds 订单ID集合
* @param mainOrderStatus 结算状态
*/
void updateAutoFinishOrder(List<Long> orderIds, Integer mainOrderStatus);
}

View File

@ -6,6 +6,8 @@ import cn.hutool.core.util.StrUtil;
import com.aircraft.modules.order.domain.OrderMain;
import com.aircraft.modules.order.domain.dto.OrderMainPageQueryDTO;
import com.aircraft.modules.order.domain.dto.UpdateOrderDTO;
import com.aircraft.modules.order.domain.enums.ConfirmStatusEnum;
import com.aircraft.modules.order.domain.enums.MainOrderStatusEnum;
import com.aircraft.modules.order.mapper.OrderMainMapper;
import com.aircraft.modules.order.service.IOrderMainService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -15,6 +17,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@ -133,4 +136,25 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
OrderMain::getConfirmTime, updateOrderMain.getConfirmTime())
);
}
@Override
public List<OrderMain> obtainOrderNotFinish(Date finishTime) {
return list(Wrappers.lambdaQuery(OrderMain.class)
.eq(OrderMain::getMainOrderStatus, MainOrderStatusEnum.PROCESSING.getCode())
.eq(OrderMain::getConfirmStatus, ConfirmStatusEnum.PILOT_CONFIRMED.getCode())
.le(OrderMain::getOrderFinishTime, finishTime)
);
}
@Override
public void updateAutoFinishOrder(List<Long> orderIds, Integer mainOrderStatus) {
if (CollectionUtil.isEmpty(orderIds)) {
return;
}
this.update(Wrappers.<OrderMain>lambdaUpdate()
.in(OrderMain::getId, orderIds)
.set(OrderMain::getMainOrderStatus, mainOrderStatus)
.set(OrderMain::getOrderFinishTime, new Date())
);
}
}

View File

@ -1,8 +1,17 @@
package com.aircraft.modules.quartz.task;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import com.aircraft.modules.order.domain.OrderMain;
import com.aircraft.modules.order.domain.enums.MainOrderStatusEnum;
import com.aircraft.modules.order.service.IOrderMainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
* 订单自动完成定时任务
*
@ -15,10 +24,28 @@ import org.springframework.stereotype.Service;
@Service("orderTask")
public class OrderTask {
@Resource
private IOrderMainService orderMainService;
/**
* 订单自动完成定时任务
*
* @param hour 小时
*/
public void orderAutoFinishTask() {
log.info("订单自动完成定时任务开始执行");
public void orderAutoFinishTask(Integer hour) {
log.info("订单自动完成定时任务开始执行,参数:{}", hour);
// 订单状态为飞行中且确认状态为飞行员确认,距离时间是超过xx小时就会自动完成
Date currentTime = new Date();
Date finishTime = DateUtil.offsetHour(currentTime, -hour);
List<OrderMain> orderMainList = orderMainService.obtainOrderNotFinish(finishTime);
if (CollectionUtil.isEmpty(orderMainList)) {
log.info("订单自动完成定时任务无订单");
}
List<Long> orderIds = orderMainList.stream().map(OrderMain::getId).toList();
// 更新订单状态
orderMainService.updateAutoFinishOrder(orderIds, MainOrderStatusEnum.COMPLETED.getCode());
log.info("订单自动完成定时任务执行完毕");
}
}

View File

@ -2,11 +2,14 @@ package com.aircraft;
//import com.aircraft.modules.system.domain.FmsAcAircraftDevice;
//import com.aircraft.modules.system.service.FmsAcAircraftDeviceService;
import com.aircraft.modules.quartz.task.OrderTask;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import javax.annotation.Resource;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("dev")
public class EladminSystemApplicationTests {
@ -19,5 +22,16 @@ public class EladminSystemApplicationTests {
public static void main(String[] args) {
}
@Resource
private OrderTask orderTask;
/**
* 测试自动完成订单定时任务
*/
@Test
public void orderAutoFinishTask() {
orderTask.orderAutoFinishTask(1);
}
}