diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/service/IOrderMainService.java b/aircraft-system/src/main/java/com/aircraft/modules/order/service/IOrderMainService.java index 5f2e2ed..46ca6f3 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/service/IOrderMainService.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/service/IOrderMainService.java @@ -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 { * @param updateOrderMain {@link OrderMain} */ void finishMainOrder(OrderMain updateOrderMain); + + /** + * 获取订单状态为飞行员确认中且时间小于等于当前时间finishTime的 + * + * @param finishTime 自动完成时间 + * @return {@link List} + */ + List obtainOrderNotFinish(Date finishTime); + + /** + * 根据订单ID修改订单状态 + * + * @param orderIds 订单ID集合 + * @param mainOrderStatus 结算状态 + */ + void updateAutoFinishOrder(List orderIds, Integer mainOrderStatus); + } diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/service/impl/OrderMainServiceImpl.java b/aircraft-system/src/main/java/com/aircraft/modules/order/service/impl/OrderMainServiceImpl.java index 27233fd..f623580 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/service/impl/OrderMainServiceImpl.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/service/impl/OrderMainServiceImpl.java @@ -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 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 orderIds, Integer mainOrderStatus) { + if (CollectionUtil.isEmpty(orderIds)) { + return; + } + this.update(Wrappers.lambdaUpdate() + .in(OrderMain::getId, orderIds) + .set(OrderMain::getMainOrderStatus, mainOrderStatus) + .set(OrderMain::getOrderFinishTime, new Date()) + ); + } } diff --git a/aircraft-system/src/main/java/com/aircraft/modules/quartz/task/OrderTask.java b/aircraft-system/src/main/java/com/aircraft/modules/quartz/task/OrderTask.java index ef08486..4fc4f90 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/quartz/task/OrderTask.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/quartz/task/OrderTask.java @@ -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 orderMainList = orderMainService.obtainOrderNotFinish(finishTime); + + if (CollectionUtil.isEmpty(orderMainList)) { + log.info("订单自动完成定时任务无订单"); + } + List orderIds = orderMainList.stream().map(OrderMain::getId).toList(); + // 更新订单状态 + orderMainService.updateAutoFinishOrder(orderIds, MainOrderStatusEnum.COMPLETED.getCode()); + log.info("订单自动完成定时任务执行完毕"); } } diff --git a/aircraft-system/src/test/java/com/aircraft/EladminSystemApplicationTests.java b/aircraft-system/src/test/java/com/aircraft/EladminSystemApplicationTests.java index 079bfe7..273445b 100644 --- a/aircraft-system/src/test/java/com/aircraft/EladminSystemApplicationTests.java +++ b/aircraft-system/src/test/java/com/aircraft/EladminSystemApplicationTests.java @@ -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); + } }