From 0f01c52dd9229dda8deaa92f419d95b6808615a3 Mon Sep 17 00:00:00 2001 From: chenxiky <2868613334@qq.com> Date: Sat, 26 Jul 2025 12:52:00 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AE=8C=E6=88=90=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=88=E9=A3=9E=E8=A1=8C=E7=AB=AF=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E9=99=90=E5=88=B6=EF=BC=89=EF=BC=9B=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E8=AF=A6=E6=83=85=E8=BF=94=E5=9B=9E=E4=B8=BB?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=8A=B6=E6=80=81=EF=BC=9B=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E9=A3=9E=E8=A1=8C=E4=BB=BB=E5=8A=A1=E6=9B=B4=E6=96=B0=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aircraft/modules/order/biz/OrderBiz.java | 64 +++++++++++++++++++ .../order/controller/OrderMainController.java | 10 +++ .../order/domain/vo/OrderAllDetailVO.java | 6 ++ .../order/service/IOrderMainService.java | 7 ++ .../service/impl/OrderDetailServiceImpl.java | 1 + .../service/impl/OrderMainServiceImpl.java | 10 +++ 6 files changed, 98 insertions(+) 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 57322b7..fb5eff2 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 @@ -354,6 +354,7 @@ public class OrderBiz { orderAllDetailVO.setId(orderMain.getId()); orderAllDetailVO.setOrderNo(orderMain.getOrderNo()); orderAllDetailVO.setOrderType(OrderTypeEnum.getInstance(orderMain.getOrderType()).getDescription()); + orderAllDetailVO.setMainOrderStatus(MainOrderStatusEnum.getInstance(orderMain.getMainOrderStatus()).getDescription()); orderAllDetailVO.setOrderInitiator(emEmployees.getName()); orderAllDetailVO.setInitiatorPhone(emEmployees.getPhone()); orderAllDetailVO.setCustomerName(customerName); @@ -557,6 +558,7 @@ public class OrderBiz { * @param orderTaskId 订单任务ID * @param taskStatus 飞行状态 */ + @Transactional(rollbackFor = Exception.class) public void editOrderTaskStatus(Long orderTaskId, Integer taskStatus) { // 获取订单详情 OrderDetail orderDetail = orderDetailService.obtainOrderDetailById(orderTaskId); @@ -723,4 +725,66 @@ public class OrderBiz { public Boolean updateSettlementOrderStatus(Long settlementOrderId, Integer settlementOrderStatus) { return true; } + + /** + * 完成订单 + * @param orderId 订单ID + */ + public void completeOrder(Long orderId) { + // 查询订单信息 + OrderMain orderMain = orderMainService.obtainOrderMainById(orderId); + // 获取当前用户(根据不同的登录类型,处理不同的逻辑) + UserTypeEnum currentUserType = SecurityUtils.getCurrentUserType(); + switch (currentUserType) { + case CUSTOMER: + customerCompleteOrder(orderMain); + break; + case EMPLOYEES: + employeesCompleteOrder(orderMain); + break; + default: + break; + } + // 是否存在飞行任务(至少存在一个飞行失败或者完成的,才能点击完成,且不能存在未开始,进行中的) + List orderDetailList = orderDetailService.queryOrderDetailByOrderId(orderId); + if (CollectionUtil.isEmpty(orderDetailList)) { + throw new BadRequestException("该订单不存在飞行任务,无法完成"); + } + // 订单不能存在未开始或者进行中的飞行任务 + boolean hasFlightTask = orderDetailList.stream().anyMatch(orderDetail -> { + Integer flightTaskStatus = orderDetail.getOrderItemStatus(); + return OrderTaskStatusEnum.NOT_STARTED.getCode().equals(flightTaskStatus) + || OrderTaskStatusEnum.PROCESSING.getCode().equals(flightTaskStatus); + }); + if (hasFlightTask) { + throw new BadRequestException("订单存在未开始或者进行中的飞行任务,无法完成"); + } + OrderMain updateOrderMain = new OrderMain(); + updateOrderMain.setId(orderId); + updateOrderMain.setOrderFinishTime(new Date()); + updateOrderMain.setMainOrderStatus(MainOrderStatusEnum.COMPLETED.getCode()); + orderMainService.finishMainOrder(updateOrderMain); + } + + /** + * 客户端完成订单 + * + * @param orderMain {@link OrderMain} + */ + private void customerCompleteOrder(OrderMain orderMain) { + // TODO 客户端不限制 + } + + /** + * 飞行端完成订单 + * + * @param orderMain {@link OrderMain} + */ + private void employeesCompleteOrder(OrderMain orderMain) { + // 飞行员端只能由发起人才能完成 + Long currentUserId = SecurityUtils.getCurrentUserId(); + if (!orderMain.getOrderInitiatorId().equals(currentUserId)) { + throw new BadRequestException("订单不属于当前用户,无法完成"); + } + } } 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 d5320bc..36afcd2 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 @@ -101,5 +101,15 @@ public class OrderMainController { public ResponseEntity queryOrderDetail(@PathVariable("id") Long id) { return ResponseEntity.ok(orderBiz.queryOrderDetail(id)); } + + /** + * 完成订单 + */ + @ApiOperation("完成订单-飞行端&客户端") + @PutMapping("/completeOrder/{orderId}") + public ResponseEntity completeOrder(@PathVariable("orderId") Long orderId) { + orderBiz.completeOrder(orderId); + return new ResponseEntity<>(HttpStatus.OK); + } } diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/domain/vo/OrderAllDetailVO.java b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/vo/OrderAllDetailVO.java index 2b3d89e..e20b61b 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/domain/vo/OrderAllDetailVO.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/vo/OrderAllDetailVO.java @@ -36,6 +36,12 @@ public class OrderAllDetailVO { @ApiModelProperty(value = "订单类型") private String orderType; + /** + * 订单状态 + */ + @ApiModelProperty(value = "订单状态") + private String mainOrderStatus; + /** * 订单发起人 */ 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 9961481..5f2e2ed 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 @@ -88,4 +88,11 @@ public interface IOrderMainService extends IService { * @param settlementStatus 结算状态 */ void updateSettlementStatus(List orderIds, Integer settlementStatus); + + /** + * 完成订单 + * + * @param updateOrderMain {@link OrderMain} + */ + void finishMainOrder(OrderMain updateOrderMain); } 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 66f3376..c8ea183 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 @@ -67,5 +67,6 @@ public class OrderDetailServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(OrderDetail::getId, orderTaskId) .set(OrderDetail::getOrderItemStatus, taskStatus); + this.update(updateWrapper); } } 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 f14de77..92ee760 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 @@ -114,4 +114,14 @@ public class OrderMainServiceImpl extends ServiceImpllambdaUpdate() + .eq(OrderMain::getId, updateOrderMain.getId()) + .set(OrderMain::getOrderFinishTime, updateOrderMain.getOrderFinishTime()) + .set(OrderMain::getMainOrderStatus, updateOrderMain.getMainOrderStatus()) + ); + } }