From 5eee815715be5abdc14741ac917887b248a04005 Mon Sep 17 00:00:00 2001 From: chenxiky <2868613334@qq.com> Date: Sat, 26 Jul 2025 16:33:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=AE=8C=E6=88=90=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=94=9F=E6=88=90=E7=BB=93=E7=AE=97=E5=8D=95=E7=A1=AE=E8=AE=A4?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aircraft/modules/order/biz/OrderBiz.java | 70 +++++++++++++++---- .../controller/SettlementMainController.java | 10 +++ .../vo/GenerateSettlementOrderConfirmVO.java | 34 +++++++++ 3 files changed, 100 insertions(+), 14 deletions(-) create mode 100644 aircraft-system/src/main/java/com/aircraft/modules/order/domain/vo/GenerateSettlementOrderConfirmVO.java 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 fadc3e8..66fa03d 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 @@ -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.UpdateOrderDTO; 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.OrderMainPageQueryVO; import com.aircraft.modules.order.domain.vo.OrderTaskDetailVO; @@ -634,22 +635,13 @@ public class OrderBiz { */ @Transactional(rollbackFor = Exception.class) public void generateSettlementOrder(List orderIds) { + if (CollectionUtil.isEmpty(orderIds)) { + throw new BadRequestException("请选择要生成结算订单的订单"); + } // 验证这些结算订单是否复处于未结算且订单状态为已完成状态 List orderMainList= orderMainService.obtainOrderListByOrderIds(orderIds); - 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("订单状态错误,无法生成结算订单"); - } - } + // 检查订单数据 + checkOrderData(orderIds, orderMainList); // 按照景区ID进行分组 Map> attractionGroupMap = orderMainList.stream().collect(Collectors.groupingBy(OrderMain::getAttractionId)); List settlementMainList = new ArrayList<>(); @@ -691,6 +683,26 @@ public class OrderBiz { orderMainService.updateSettlementStatus(orderIds, OrderSettlementStatusEnum.SETTLING.getCode()); } + /** + * 检查订单数据是否合法 + */ + private void checkOrderData(List orderIds, List 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("订单不属于当前用户,无法完成"); } } + + /** + * 生成结算订单列表 + * + * @param orderIds 订单集合 + * @return {@link List} 待确认结算订单列表 + */ + public List generateSettlementOrderConfirmList(List orderIds) { + if (CollectionUtil.isEmpty(orderIds)) { + throw new BadRequestException("请选择要生成结算订单的订单"); + } + // 验证这些结算订单是否复处于未结算且订单状态为已完成状态 + List orderMainList= orderMainService.obtainOrderListByOrderIds(orderIds); + // 检查订单数据 + this.checkOrderData(orderIds, orderMainList); + + List orderConfirmList = new ArrayList<>(); + // 按照景点分组 + Map> 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; + } } diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/controller/SettlementMainController.java b/aircraft-system/src/main/java/com/aircraft/modules/order/controller/SettlementMainController.java index 8ce4415..98c374b 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/controller/SettlementMainController.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/controller/SettlementMainController.java @@ -4,6 +4,7 @@ package com.aircraft.modules.order.controller; import com.aircraft.modules.order.biz.OrderBiz; import com.aircraft.modules.order.domain.SettlementDetail; import com.aircraft.modules.order.domain.SettlementMain; +import com.aircraft.modules.order.domain.vo.GenerateSettlementOrderConfirmVO; import com.aircraft.modules.order.service.ISettlementMainService; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -77,5 +78,14 @@ public class SettlementMainController { @PathVariable("settlementOrderStatus") Integer settlementOrderStatus) { return new ResponseEntity<>(orderBiz.updateSettlementOrderStatus(settlementOrderId, settlementOrderStatus),HttpStatus.OK); } + + @ApiOperation(value = "获取生成结算单确认列表") + @PostMapping("/generateSettlementOrderConfirmList") + public ResponseEntity> generateSettlementOrderConfirmList( + @ApiParam(value = "订单ID集合(1946509536383438850)", required = true) + @RequestBody List orderIds){ + + return new ResponseEntity<>(orderBiz.generateSettlementOrderConfirmList(orderIds), HttpStatus.OK); + } } diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/domain/vo/GenerateSettlementOrderConfirmVO.java b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/vo/GenerateSettlementOrderConfirmVO.java new file mode 100644 index 0000000..d391353 --- /dev/null +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/vo/GenerateSettlementOrderConfirmVO.java @@ -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; +}