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()) + ); + } }