fix: 区分金额(附加费+计算重量金额=订单总金额)统计直接取总金额,这里不直接设置到amount是不要污染原本计算值的意义;优化编辑订单接口,重量、附加费变化都需重新计算;

This commit is contained in:
chenxiky 2025-07-26 11:42:54 +08:00
parent 6e7c74dd2f
commit 196cddb071
8 changed files with 79 additions and 14 deletions

View File

@ -238,7 +238,13 @@ public class OrderBiz {
// 根据景区ID 获取对应的 KG金额, 计算出金额 = 重量 * 金额 // 根据景区ID 获取对应的 KG金额, 计算出金额 = 重量 * 金额
EmScenic scenic = emScenicService.obtainScenicById(addOrderDTO.getAttractionId()); EmScenic scenic = emScenicService.obtainScenicById(addOrderDTO.getAttractionId());
if (ObjectUtil.isNull(scenic)) {
throw new BadRequestException("景区不存在");
}
BigDecimal price = scenic.getPrice(); BigDecimal price = scenic.getPrice();
if (ObjectUtil.isNull(price)) {
throw new BadRequestException("景区重量kg配置金额不存在");
}
BigDecimal amount = addOrderDTO.getCargoWeight().multiply(price); BigDecimal amount = addOrderDTO.getCargoWeight().multiply(price);
OrderMain orderMain = new OrderMain(); OrderMain orderMain = new OrderMain();
@ -251,6 +257,13 @@ public class OrderBiz {
orderMain.setRouteIds(routeIdsStr); orderMain.setRouteIds(routeIdsStr);
orderMain.setCargoWeight(addOrderDTO.getCargoWeight()); orderMain.setCargoWeight(addOrderDTO.getCargoWeight());
orderMain.setAmount(amount); orderMain.setAmount(amount);
// 订单总金额
BigDecimal surchargeAmount = addOrderDTO.getSurchargeAmount();
if (surchargeAmount == null) {
surchargeAmount = BigDecimal.ZERO;
}
BigDecimal totalAmount = amount.add(surchargeAmount);
orderMain.setTotalAmount(totalAmount);
orderMain.setSurchargeAmount(addOrderDTO.getSurchargeAmount()); orderMain.setSurchargeAmount(addOrderDTO.getSurchargeAmount());
orderMain.setOrderCreateTime(addOrderDTO.getOrderCreateTime()); orderMain.setOrderCreateTime(addOrderDTO.getOrderCreateTime());
orderMain.setMainOrderStatus(MainOrderStatusEnum.NOT_STARTED.getCode()); orderMain.setMainOrderStatus(MainOrderStatusEnum.NOT_STARTED.getCode());
@ -347,6 +360,7 @@ public class OrderBiz {
orderAllDetailVO.setPhone(orderMain.getPhone()); orderAllDetailVO.setPhone(orderMain.getPhone());
orderAllDetailVO.setCargoWeight(orderMain.getCargoWeight()); orderAllDetailVO.setCargoWeight(orderMain.getCargoWeight());
orderAllDetailVO.setSurchargeAmount(orderMain.getSurchargeAmount()); orderAllDetailVO.setSurchargeAmount(orderMain.getSurchargeAmount());
orderAllDetailVO.setTotalAmount(orderMain.getTotalAmount());
orderAllDetailVO.setAmount(orderMain.getAmount()); orderAllDetailVO.setAmount(orderMain.getAmount());
orderAllDetailVO.setScenicName(emScenicService.obtainScenicById(orderMain.getAttractionId()).getName()); orderAllDetailVO.setScenicName(emScenicService.obtainScenicById(orderMain.getAttractionId()).getName());
// 获取路线 // 获取路线
@ -392,6 +406,7 @@ public class OrderBiz {
Map<Long, AircraftDevice> aircraftDeviceMap = aircraftDeviceList.stream(). Map<Long, AircraftDevice> aircraftDeviceMap = aircraftDeviceList.stream().
collect(Collectors.toMap(AircraftDevice::getId, device -> device)); collect(Collectors.toMap(AircraftDevice::getId, device -> device));
// 构建返回订单任务参数
List<OrderTaskDetailVO> orderTaskDetailList = new ArrayList<>(); List<OrderTaskDetailVO> orderTaskDetailList = new ArrayList<>();
for (OrderDetail orderDetail : orderDetailList) { for (OrderDetail orderDetail : orderDetailList) {
OrderTaskDetailVO orderTaskDetailVO = new OrderTaskDetailVO(); OrderTaskDetailVO orderTaskDetailVO = new OrderTaskDetailVO();
@ -414,7 +429,6 @@ public class OrderBiz {
} }
orderTaskDetailList.add(orderTaskDetailVO); orderTaskDetailList.add(orderTaskDetailVO);
} }
// 组织飞行任务
orderAllDetailVO.setOrderTaskDetailList(orderTaskDetailList); orderAllDetailVO.setOrderTaskDetailList(orderTaskDetailList);
return orderAllDetailVO; return orderAllDetailVO;
} }
@ -463,9 +477,22 @@ public class OrderBiz {
// 当前若存在订单任务则不允许修改 // 当前若存在订单任务则不允许修改
List<OrderDetail> orderDetailList = orderDetailService.queryOrderDetailByOrderId(orderId); List<OrderDetail> orderDetailList = orderDetailService.queryOrderDetailByOrderId(orderId);
if (CollectionUtil.isNotEmpty(orderDetailList)) { if (CollectionUtil.isNotEmpty(orderDetailList)) {
throw new BadRequestException("当前订单存在订单任务,不允许修改"); throw new BadRequestException("当前订单存在订单任务,不允许修改");
} }
// 进行更新订单 // 进行更新订单附加费变化或者重量变化需要重新计算金额
BigDecimal cargoWeight = updateOrderDTO.getCargoWeight();
// 根据景区ID 获取对应的 KG金额, 计算出金额 = 重量 * 金额
EmScenic scenic = emScenicService.obtainScenicById(orderMain.getAttractionId());
if (ObjectUtil.isNull(scenic)) {
throw new BadRequestException("景区不存在");
}
BigDecimal price = scenic.getPrice();
if (ObjectUtil.isNull(price)) {
throw new BadRequestException("景区重量kg配置金额不存在");
}
BigDecimal amount = cargoWeight.multiply(price);
updateOrderDTO.setTotalAmount(amount.add(updateOrderDTO.getSurchargeAmount()));
updateOrderDTO.setAmount(amount);
orderMainService.editOrder(updateOrderDTO); orderMainService.editOrder(updateOrderDTO);
// 删除相关的操作人表进行新增操作 // 删除相关的操作人表进行新增操作

View File

@ -74,9 +74,13 @@ public class OrderMain extends BaseEntity {
* 货物重量 * 货物重量
*/ */
private BigDecimal cargoWeight; private BigDecimal cargoWeight;
/**
* 订单总金额附加费+计算重量的金额
*/
private BigDecimal totalAmount;
/** /**
* 订单金额 * 计算重量的金额
*/ */
private BigDecimal amount; private BigDecimal amount;

View File

@ -76,4 +76,17 @@ public class UpdateOrderDTO {
@DecimalMin(value = "0", message = "额外费用不能小于0") @DecimalMin(value = "0", message = "额外费用不能小于0")
private BigDecimal surchargeAmount; private BigDecimal surchargeAmount;
/**
* 订单总金额附加费变化重量变化都需要重新计算
*/
@ApiModelProperty(value = "订单总金额(附加费+计算重量金额),前端无需传", required = false)
private BigDecimal totalAmount;
/**
* 计算重量的金额重量发生变化需要重新计算
*/
@ApiModelProperty(value = "计算重量金额,前端无需传", required = false)
private BigDecimal amount;
} }

View File

@ -18,11 +18,11 @@ public enum OrderTypeEnum {
/** /**
* 载物订单 * 载物订单
*/ */
ORDER_TYPE_CARGO(1, "载物订单"), ORDER_TYPE_CARGO(1, "载物飞行"),
/** /**
* 载人订单 * 载人订单
*/ */
ORDER_TYPE_PERSON(2, "载人订单"); ORDER_TYPE_PERSON(2, "载人飞行");
/** /**
* 订单类型 Code * 订单类型 Code

View File

@ -85,11 +85,17 @@ public class OrderAllDetailVO {
private BigDecimal surchargeAmount; private BigDecimal surchargeAmount;
/** /**
* 订单金额 * 计算重量的金额
*/ */
@ApiModelProperty(value = "订单金额") @ApiModelProperty(value = "计算重量的金额")
private BigDecimal amount; private BigDecimal amount;
/**
* 订单总金额
*/
@ApiModelProperty(value = "订单总金额(附加费+计算重量金额)")
private BigDecimal totalAmount;
/** /**
* 操作员多个逗号拼接返回 * 操作员多个逗号拼接返回
*/ */

View File

@ -26,7 +26,7 @@ public class OrderMainPageQueryVO {
/** /**
* 订单类型 * 订单类型
*/ */
@ApiModelProperty(value = "订单类型") @ApiModelProperty(value = "订单类型1=载物飞行2=载人飞行)")
private Integer orderType; private Integer orderType;
/** /**
@ -50,6 +50,7 @@ public class OrderMainPageQueryVO {
/** /**
* 订单发起人ID * 订单发起人ID
*/ */
@ApiModelProperty(value = "订单发起人ID飞行员ID")
private Long orderInitiatorId; private Long orderInitiatorId;
/** /**
* 手机号 * 手机号
@ -96,13 +97,25 @@ public class OrderMainPageQueryVO {
private Integer settlementStatus; private Integer settlementStatus;
/** /**
* 附加费surcharge_amount * 重量
*/
@ApiModelProperty(value = "重量")
private BigDecimal cargoWeight;
/**
* 附加费
*/ */
@ApiModelProperty(value = "附加费") @ApiModelProperty(value = "附加费")
private BigDecimal surchargeAmount; private BigDecimal surchargeAmount;
/** /**
* 订单金额 * 计算重量的金额
*/ */
@ApiModelProperty(value = "订单金额") @ApiModelProperty(value = "计算重量的金额")
private BigDecimal amount; private BigDecimal amount;
/**
* 订单总金额
*/
@ApiModelProperty(value = "订单总金额(附加费+计算重量的金额)")
private BigDecimal totalAmount;
} }

View File

@ -70,7 +70,9 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
.set(OrderMain::getAttractionId, updateOrderDTO.getAttractionId()) .set(OrderMain::getAttractionId, updateOrderDTO.getAttractionId())
.set(OrderMain::getRouteIds, routeIdsStr) .set(OrderMain::getRouteIds, routeIdsStr)
.set(OrderMain::getCargoWeight, updateOrderDTO.getCargoWeight()) .set(OrderMain::getCargoWeight, updateOrderDTO.getCargoWeight())
.set(OrderMain::getSurchargeAmount, updateOrderDTO.getSurchargeAmount()); .set(OrderMain::getSurchargeAmount, updateOrderDTO.getSurchargeAmount())
.set(OrderMain::getAmount, updateOrderDTO.getAmount())
.set(OrderMain::getTotalAmount, updateOrderDTO.getTotalAmount());
this.update(updateWrapper); this.update(updateWrapper);
} }

View File

@ -5,7 +5,7 @@
<!-- 通用查询结果列 --> <!-- 通用查询结果列 -->
<sql id="BaseColumn"> <sql id="BaseColumn">
id, order_no, order_type, order_initiator_id, phone, attraction_id, customer_id, id, order_no, order_type, order_initiator_id, phone, attraction_id, customer_id,
customer_name, route_ids, cargo_weight, amount, surcharge_amount, open_id, customer_name, route_ids, cargo_weight, total_amount, amount, surcharge_amount, open_id,
settlement_status, main_order_status, relevance_status, order_create_time, settlement_status, main_order_status, relevance_status, order_create_time,
order_finish_time, create_time, create_by, update_time, update_by, del_flag order_finish_time, create_time, create_by, update_time, update_by, del_flag
</sql> </sql>