feat:完成获取生成结算单确认列表

This commit is contained in:
chenxiky 2025-07-26 16:33:27 +08:00
parent 8a95d0b077
commit 5eee815715
3 changed files with 100 additions and 14 deletions

View File

@ -17,6 +17,7 @@ import com.aircraft.modules.order.domain.dto.AddOrderTaskDTO;
import com.aircraft.modules.order.domain.dto.OrderMainPageQueryDTO; import com.aircraft.modules.order.domain.dto.OrderMainPageQueryDTO;
import com.aircraft.modules.order.domain.dto.UpdateOrderDTO; import com.aircraft.modules.order.domain.dto.UpdateOrderDTO;
import com.aircraft.modules.order.domain.enums.*; import com.aircraft.modules.order.domain.enums.*;
import com.aircraft.modules.order.domain.vo.GenerateSettlementOrderConfirmVO;
import com.aircraft.modules.order.domain.vo.OrderAllDetailVO; import com.aircraft.modules.order.domain.vo.OrderAllDetailVO;
import com.aircraft.modules.order.domain.vo.OrderMainPageQueryVO; import com.aircraft.modules.order.domain.vo.OrderMainPageQueryVO;
import com.aircraft.modules.order.domain.vo.OrderTaskDetailVO; import com.aircraft.modules.order.domain.vo.OrderTaskDetailVO;
@ -634,22 +635,13 @@ public class OrderBiz {
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void generateSettlementOrder(List<Long> orderIds) { public void generateSettlementOrder(List<Long> orderIds) {
if (CollectionUtil.isEmpty(orderIds)) {
throw new BadRequestException("请选择要生成结算订单的订单");
}
// 验证这些结算订单是否复处于未结算且订单状态为已完成状态 // 验证这些结算订单是否复处于未结算且订单状态为已完成状态
List<OrderMain> orderMainList= orderMainService.obtainOrderListByOrderIds(orderIds); List<OrderMain> orderMainList= orderMainService.obtainOrderListByOrderIds(orderIds);
if (CollectionUtil.isEmpty(orderMainList)) { // 检查订单数据
throw new BadRequestException("订单不存在"); checkOrderData(orderIds, orderMainList);
}
// 待优化提示完整错误信息
for (OrderMain orderMain : orderMainList) {
if (!orderIds.contains(orderMain.getId())) {
throw new BadRequestException("订单不存在");
}
// 判断订单是否处于未结算且订单状态为已完成状态
if (!OrderSettlementStatusEnum.NOT_SETTLED.getCode().equals(orderMain.getSettlementStatus())
|| !MainOrderStatusEnum.COMPLETED.getCode().equals(orderMain.getMainOrderStatus())) {
throw new BadRequestException("订单状态错误,无法生成结算订单");
}
}
// 按照景区ID进行分组 // 按照景区ID进行分组
Map<Long, List<OrderMain>> attractionGroupMap = orderMainList.stream().collect(Collectors.groupingBy(OrderMain::getAttractionId)); Map<Long, List<OrderMain>> attractionGroupMap = orderMainList.stream().collect(Collectors.groupingBy(OrderMain::getAttractionId));
List<SettlementMain> settlementMainList = new ArrayList<>(); List<SettlementMain> settlementMainList = new ArrayList<>();
@ -691,6 +683,26 @@ public class OrderBiz {
orderMainService.updateSettlementStatus(orderIds, OrderSettlementStatusEnum.SETTLING.getCode()); orderMainService.updateSettlementStatus(orderIds, OrderSettlementStatusEnum.SETTLING.getCode());
} }
/**
* 检查订单数据是否合法
*/
private void checkOrderData(List<Long> orderIds, List<OrderMain> orderMainList) {
if (CollectionUtil.isEmpty(orderMainList)) {
throw new BadRequestException("订单不存在");
}
// 待优化提示完整错误信息
for (OrderMain orderMain : orderMainList) {
if (!orderIds.contains(orderMain.getId())) {
throw new BadRequestException("订单不存在");
}
// 判断订单是否处于未结算且订单状态为已完成状态
if (!OrderSettlementStatusEnum.NOT_SETTLED.getCode().equals(orderMain.getSettlementStatus())
|| !MainOrderStatusEnum.COMPLETED.getCode().equals(orderMain.getMainOrderStatus())) {
throw new BadRequestException("订单状态错误,无法生成结算订单");
}
}
}
/** /**
* 构建结算订单明细数据 * 构建结算订单明细数据
* *
@ -812,4 +824,34 @@ public class OrderBiz {
throw new BadRequestException("订单不属于当前用户,无法完成"); throw new BadRequestException("订单不属于当前用户,无法完成");
} }
} }
/**
* 生成结算订单列表
*
* @param orderIds 订单集合
* @return {@link List<GenerateSettlementOrderConfirmVO>} 待确认结算订单列表
*/
public List<GenerateSettlementOrderConfirmVO> generateSettlementOrderConfirmList(List<Long> orderIds) {
if (CollectionUtil.isEmpty(orderIds)) {
throw new BadRequestException("请选择要生成结算订单的订单");
}
// 验证这些结算订单是否复处于未结算且订单状态为已完成状态
List<OrderMain> orderMainList= orderMainService.obtainOrderListByOrderIds(orderIds);
// 检查订单数据
this.checkOrderData(orderIds, orderMainList);
List<GenerateSettlementOrderConfirmVO> orderConfirmList = new ArrayList<>();
// 按照景点分组
Map<Long, List<OrderMain>> attractionGroupMap = orderMainList.stream().collect(Collectors.groupingBy(OrderMain::getAttractionId));
attractionGroupMap.forEach((attractionId, orderList) -> {
GenerateSettlementOrderConfirmVO orderConfirmVO = new GenerateSettlementOrderConfirmVO();
orderConfirmVO.setAttractionId(attractionId);
// 计算重量 相加
orderConfirmVO.setCargoWeight(orderList.stream().map(OrderMain::getCargoWeight).reduce(BigDecimal.ZERO, BigDecimal::add));
// 计算总金额 相加
orderConfirmVO.setTotalAmount(orderList.stream().map(OrderMain::getTotalAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
orderConfirmList.add(orderConfirmVO);
});
return orderConfirmList;
}
} }

View File

@ -4,6 +4,7 @@ package com.aircraft.modules.order.controller;
import com.aircraft.modules.order.biz.OrderBiz; import com.aircraft.modules.order.biz.OrderBiz;
import com.aircraft.modules.order.domain.SettlementDetail; import com.aircraft.modules.order.domain.SettlementDetail;
import com.aircraft.modules.order.domain.SettlementMain; import com.aircraft.modules.order.domain.SettlementMain;
import com.aircraft.modules.order.domain.vo.GenerateSettlementOrderConfirmVO;
import com.aircraft.modules.order.service.ISettlementMainService; import com.aircraft.modules.order.service.ISettlementMainService;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -77,5 +78,14 @@ public class SettlementMainController {
@PathVariable("settlementOrderStatus") Integer settlementOrderStatus) { @PathVariable("settlementOrderStatus") Integer settlementOrderStatus) {
return new ResponseEntity<>(orderBiz.updateSettlementOrderStatus(settlementOrderId, settlementOrderStatus),HttpStatus.OK); return new ResponseEntity<>(orderBiz.updateSettlementOrderStatus(settlementOrderId, settlementOrderStatus),HttpStatus.OK);
} }
@ApiOperation(value = "获取生成结算单确认列表")
@PostMapping("/generateSettlementOrderConfirmList")
public ResponseEntity<List<GenerateSettlementOrderConfirmVO>> generateSettlementOrderConfirmList(
@ApiParam(value = "订单ID集合(1946509536383438850)", required = true)
@RequestBody List<Long> orderIds){
return new ResponseEntity<>(orderBiz.generateSettlementOrderConfirmList(orderIds), HttpStatus.OK);
}
} }

View File

@ -0,0 +1,34 @@
package com.aircraft.modules.order.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 生成结算订单确认列表
*
* @author chenxiky
* @version 1.0.0
* @since 2025/7/26
*/
@Data
public class GenerateSettlementOrderConfirmVO {
/**
* 景区ID
*/
@ApiModelProperty(value = "景区ID")
private Long attractionId;
/**
* 重量
*/
@ApiModelProperty(value = "重量")
private BigDecimal cargoWeight;
/**
* 金额
*/
@ApiModelProperty(value = "金额")
private BigDecimal totalAmount;
}