From 982e6d72181843d54a2fd41d15c81a1ad475c2a5 Mon Sep 17 00:00:00 2001 From: chenxiky <2868613334@qq.com> Date: Sat, 2 Aug 2025 10:47:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=AE=A2=E5=8D=95=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=AE=8C=E6=88=90=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/service/IOrderMainService.java | 18 +++++++++++ .../service/impl/OrderMainServiceImpl.java | 24 ++++++++++++++ .../modules/quartz/task/OrderTask.java | 31 +++++++++++++++++-- .../EladminSystemApplicationTests.java | 14 +++++++++ 4 files changed, 85 insertions(+), 2 deletions(-) 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); + } }