From 80c66990064c4685dfc79f4d005a65e89137f1ca Mon Sep 17 00:00:00 2001 From: chenxiky <2868613334@qq.com> Date: Sun, 20 Jul 2025 13:45:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E9=A3=9E=E8=A1=8C=EF=BC=8C=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=A3=9E=E8=A1=8C=E4=BB=BB=E5=8A=A1=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aircraft/modules/order/biz/OrderBiz.java | 72 +++++++++++++++++++ .../order/controller/OrderMainController.java | 22 +++++- .../domain/enums/OrderTaskStatusEnum.java | 31 ++++++++ .../order/service/IOrderDetailService.java | 16 +++++ .../order/service/IOrderMainService.java | 8 +++ .../service/impl/OrderDetailServiceImpl.java | 13 ++++ .../service/impl/OrderMainServiceImpl.java | 7 ++ 7 files changed, 168 insertions(+), 1 deletion(-) diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/biz/OrderBiz.java b/aircraft-system/src/main/java/com/aircraft/modules/order/biz/OrderBiz.java index 9acedac..80e8645 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/biz/OrderBiz.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/biz/OrderBiz.java @@ -270,6 +270,12 @@ public class OrderBiz { if (!orderMain.getMainOrderStatus().equals(MainOrderStatusEnum.NOT_STARTED.getCode())) { throw new BadRequestException("当前订单状态不是处于未进行中,不允许删除"); } + // 判断当前登录人、是否为订单发起人,不是则不允许修改 + EmEmployees employees = JSON.parseObject(SecurityUtils.getCurrentEmployee(), EmEmployees.class); + Long currentId = employees.getId(); + if (!currentId.equals(orderMain.getOrderInitiatorId())) { + throw new BadRequestException("当前登录用户不是订单发起人,不允许删除订单"); + } // 检查是否存在订单任务 List orderDetailList = orderDetailService.queryOrderDetailByOrderId(orderId); if (CollectionUtil.isNotEmpty(orderDetailList)) { @@ -299,4 +305,70 @@ public class OrderBiz { } return orderOperatorList; } + + /** + * 修改订单任务状态 + * + * @param orderTaskId 订单任务ID + * @param taskStatus 飞行状态 + */ + public void editOrderTaskStatus(Long orderTaskId, Integer taskStatus) { + // 获取订单详情 + OrderDetail orderDetail = orderDetailService.obtainOrderDetailById(orderTaskId); + if (ObjectUtil.isNull(orderDetail)) { + throw new BadRequestException("订单任务不存在"); + } + // 判断当前用户是否是订单发起者 + EmEmployees employees = JSON.parseObject(SecurityUtils.getCurrentEmployee(), EmEmployees.class); + Long currentOperatorId = employees.getId(); + if (!currentOperatorId.equals(orderDetail.getOperatorId())) { + throw new BadRequestException("您没有权限更改此飞行任务状态"); + } + // 获取当前订单状态的枚举值 + OrderTaskStatusEnum orderTaskStatusEnum = OrderTaskStatusEnum.getInstance(orderDetail.getOrderItemStatus()); + if (ObjectUtil.isNull(orderTaskStatusEnum)) { + throw new BadRequestException("订单任务状态错误"); + } + boolean checkStatusTransitionValid = OrderTaskStatusEnum.checkStatusTransitionValid(orderTaskStatusEnum.getCode(), taskStatus); + if (!checkStatusTransitionValid) { + return; + } + // 进行订单状态变更,飞行任务变更 + Long orderId = orderDetail.getOrderId(); + OrderMain orderMain = orderMainService.obtainOrderMainById(orderId); + if (ObjectUtil.isNull(orderMain)) { + throw new BadRequestException("订单不存在,无法更新订单飞行任务状态"); + } + orderDetailService.updateOrderTaskStatus(orderTaskId, taskStatus); + if (MainOrderStatusEnum.PROCESSING.getCode().equals(orderMain.getMainOrderStatus())) { + return; + } + // 更新主单状态 + orderMainService.updateOrderStatus(orderId, MainOrderStatusEnum.PROCESSING.getCode()); + } + + /** + * 删除飞行任务 + * + * @param orderTaskId 订单任务ID + */ + public void deleteOrderTask(Long orderTaskId) { + OrderDetail orderDetail = orderDetailService.obtainOrderDetailById(orderTaskId); + if (ObjectUtil.isNull(orderDetail)) { + throw new BadRequestException("订单飞行任务不存在"); + } + EmEmployees employees = JSON.parseObject(SecurityUtils.getCurrentEmployee(), EmEmployees.class); + Long orderInitiatorId = employees.getId(); + // 判断当前用户是否是订单发起者 + if (!orderInitiatorId.equals(orderDetail.getOperatorId())) { + throw new BadRequestException("您没有权限删除此订单任务"); + } + // 判断订单任务是否处于未开始 + if (!OrderTaskStatusEnum.NOT_STARTED.getCode().equals(orderDetail.getOrderItemStatus())) { + String description = OrderTaskStatusEnum.getInstance(orderDetail.getOrderItemStatus()).getDescription(); + String msg = String.format("订单飞行任务处于[%s]状态,不能进行删除", description); + throw new BadRequestException(msg); + } + orderDetailService.deleteOrderDetailByOrderId(orderTaskId); + } } diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/controller/OrderMainController.java b/aircraft-system/src/main/java/com/aircraft/modules/order/controller/OrderMainController.java index 14122cd..103469b 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/controller/OrderMainController.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/controller/OrderMainController.java @@ -67,13 +67,33 @@ public class OrderMainController { } - @ApiOperation("新增订单任务") + @ApiOperation("新增订单飞行任务") @PostMapping("/addOrderTask") public ResponseEntity addOrderTask(@RequestBody @Validated AddOrderTaskDTO orderTaskDTO) { orderBiz.addOrderTask(orderTaskDTO); return new ResponseEntity<>(HttpStatus.OK); } + @ApiOperation("编辑订单飞行任务状态") + @PutMapping("/editOrderStatus/{orderTaskId}/{taskStatus}") + public ResponseEntity editOrderTaskStatus( + @ApiParam(value = "订单任务ID", required = true, example = "1946509536383438850") + @PathVariable("orderTaskId") Long orderTaskId, + @ApiParam(value = "飞行任务变更状态: 0=未进行中, 1=进行中, 2=已完成, 3=任务失败", required = true, example = "0") + @PathVariable("taskStatus") Integer taskStatus) { + orderBiz.editOrderTaskStatus(orderTaskId, taskStatus); + return new ResponseEntity<>(HttpStatus.OK); + } + + @ApiOperation("删除订单飞行任务") + @DeleteMapping("/deleteOrderTask/{orderTaskId}") + public ResponseEntity deleteOrderTask( + @ApiParam(value = "订单任务ID", required = true, example = "1946509536383438850") + @PathVariable("orderTaskId") Long orderTaskId) { + orderBiz.deleteOrderTask(orderTaskId); + return new ResponseEntity<>(HttpStatus.OK); + } + /** * 根据订单ID查询详情 */ diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/domain/enums/OrderTaskStatusEnum.java b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/enums/OrderTaskStatusEnum.java index 8e0fe1b..d8bdb4a 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/domain/enums/OrderTaskStatusEnum.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/enums/OrderTaskStatusEnum.java @@ -1,5 +1,6 @@ package com.aircraft.modules.order.domain.enums; +import com.aircraft.exception.BadRequestException; import lombok.AllArgsConstructor; import lombok.Getter; @@ -57,4 +58,34 @@ public enum OrderTaskStatusEnum { return Arrays.stream(OrderTaskStatusEnum.values()) .filter(o -> o.getCode().equals(code)).findFirst().orElse(null); } + + + /** + * 检测状态转换是否有效 + * + * @param oldStatusCode 旧状态 + * @param changeStatusCode 将要改变的状态值 + * @return boolean 返回异常信息 变更合法返回true,false 则无需处理状态变更 + */ + public static boolean checkStatusTransitionValid(Integer oldStatusCode, Integer changeStatusCode) { + // 未发生变化直接返回 + if (oldStatusCode.equals(changeStatusCode)){ + return false; + } + if (COMPLETED.code.equals(oldStatusCode) || FAILED.code.equals(oldStatusCode)) { + // 获取对应的值返回错误信息 + OrderTaskStatusEnum oldStatus = OrderTaskStatusEnum.getInstance(oldStatusCode); + String msg = String.format("订单任务状态不能进行状态变更,当前状态为:%s", oldStatus.getDescription()); + throw new BadRequestException(msg); + } + // 订单状态变更要大于本身的值,否则不允许修改,提示相关错误信息 + if (changeStatusCode < oldStatusCode) { + // 当前状态是什么,不允许变更为什么 + OrderTaskStatusEnum changeStatus = OrderTaskStatusEnum.getInstance(changeStatusCode); + OrderTaskStatusEnum oldStatus = OrderTaskStatusEnum.getInstance(oldStatusCode); + String msg = String.format("订单任务状态不能进行状态变更,当前状态为:%s,不允许修改为:%s", oldStatus.getDescription(), changeStatus.getDescription()); + throw new BadRequestException(msg); + } + return true; + } } diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/service/IOrderDetailService.java b/aircraft-system/src/main/java/com/aircraft/modules/order/service/IOrderDetailService.java index b9ff59f..defd9c3 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/service/IOrderDetailService.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/service/IOrderDetailService.java @@ -44,4 +44,20 @@ public interface IOrderDetailService extends IService { * @param orderInitiatorId 飞行员ID */ void checkOrderDetail(Long orderId, Long orderInitiatorId); + + /** + * 获取订单任务详情 + * + * @param orderTaskId 订单任务ID + * @return {@link OrderDetail} + */ + OrderDetail obtainOrderDetailById(Long orderTaskId); + + /** + * 修改订单任务状态 + * + * @param orderTaskId 订单任务ID + * @param taskStatus 订单任务状态 + */ + void updateOrderTaskStatus(Long orderTaskId, Integer taskStatus); } 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 0a19977..a09e809 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 @@ -56,4 +56,12 @@ public interface IOrderMainService extends IService { * @param orderId 订单ID */ void deleteOrderMainById(Long orderId); + + /** + * 修改订单状态 + * + * @param orderId 订单ID + * @param orderStatus 订单状态 + */ + void updateOrderStatus(Long orderId, Integer orderStatus); } diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/service/impl/OrderDetailServiceImpl.java b/aircraft-system/src/main/java/com/aircraft/modules/order/service/impl/OrderDetailServiceImpl.java index e8e17cd..d9156a7 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/service/impl/OrderDetailServiceImpl.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/service/impl/OrderDetailServiceImpl.java @@ -6,6 +6,7 @@ import com.aircraft.modules.order.domain.OrderDetail; import com.aircraft.modules.order.domain.enums.OrderTaskStatusEnum; import com.aircraft.modules.order.mapper.OrderDetailMapper; import com.aircraft.modules.order.service.IOrderDetailService; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @@ -54,4 +55,16 @@ public class OrderDetailServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(OrderDetail::getId, orderTaskId) + .set(OrderDetail::getOrderItemStatus, taskStatus); + } } 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 7444a9b..2ebba6a 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 @@ -77,4 +77,11 @@ public class OrderMainServiceImpl extends ServiceImpllambdaUpdate() + .eq(OrderMain::getId, orderId) + .set(OrderMain::getMainOrderStatus, orderStatus)); + } }