fix: 完成订单接口(飞行端完成限制);优化订单详情返回主订单状态;修复飞行任务更新状态接口

This commit is contained in:
chenxiky 2025-07-26 12:52:00 +08:00
parent 196cddb071
commit 0f01c52dd9
6 changed files with 98 additions and 0 deletions

View File

@ -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<OrderDetail> 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("订单不属于当前用户,无法完成");
}
}
}

View File

@ -101,5 +101,15 @@ public class OrderMainController {
public ResponseEntity<OrderAllDetailVO> queryOrderDetail(@PathVariable("id") Long id) {
return ResponseEntity.ok(orderBiz.queryOrderDetail(id));
}
/**
* 完成订单
*/
@ApiOperation("完成订单-飞行端&客户端")
@PutMapping("/completeOrder/{orderId}")
public ResponseEntity<Object> completeOrder(@PathVariable("orderId") Long orderId) {
orderBiz.completeOrder(orderId);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@ -36,6 +36,12 @@ public class OrderAllDetailVO {
@ApiModelProperty(value = "订单类型")
private String orderType;
/**
* 订单状态
*/
@ApiModelProperty(value = "订单状态")
private String mainOrderStatus;
/**
* 订单发起人
*/

View File

@ -88,4 +88,11 @@ public interface IOrderMainService extends IService<OrderMain> {
* @param settlementStatus 结算状态
*/
void updateSettlementStatus(List<Long> orderIds, Integer settlementStatus);
/**
* 完成订单
*
* @param updateOrderMain {@link OrderMain}
*/
void finishMainOrder(OrderMain updateOrderMain);
}

View File

@ -67,5 +67,6 @@ public class OrderDetailServiceImpl extends ServiceImpl<OrderDetailMapper, Order
LambdaUpdateWrapper<OrderDetail> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(OrderDetail::getId, orderTaskId)
.set(OrderDetail::getOrderItemStatus, taskStatus);
this.update(updateWrapper);
}
}

View File

@ -114,4 +114,14 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
.in(OrderMain::getId, orderIds)
.set(OrderMain::getSettlementStatus, settlementStatus));
}
@Override
public void finishMainOrder(OrderMain updateOrderMain) {
// 根据 ID 进行更新
this.update(updateOrderMain, Wrappers.<OrderMain>lambdaUpdate()
.eq(OrderMain::getId, updateOrderMain.getId())
.set(OrderMain::getOrderFinishTime, updateOrderMain.getOrderFinishTime())
.set(OrderMain::getMainOrderStatus, updateOrderMain.getMainOrderStatus())
);
}
}