优化结算订单逻辑

This commit is contained in:
Guoqs
2025-03-26 15:30:39 +08:00
parent e4a8602f74
commit 94c3f33b5e

View File

@@ -277,7 +277,7 @@ public abstract class AbstractProgramLogic implements InitializingBean {
* @return 查询并更新过数据的orderDetail * @return 查询并更新过数据的orderDetail
*/ */
public OrderDetail returnUpdateOrderDetail(OrderBasicInfo orderBasicInfo, TransactionRecordsData data) { public OrderDetail returnUpdateOrderDetail(OrderBasicInfo orderBasicInfo, TransactionRecordsData data) {
logger.info("获取更新数据后的orderDetail对象, orderBasicInfo:{}, TransactionRecordsData:{}", JSON.toJSONString(orderBasicInfo), JSON.toJSONString(data)); logger.info("start更新订单详情:【{}】, orderBasicInfo:{}, TransactionRecordsData:{}", orderBasicInfo.getOrderCode(), JSON.toJSONString(orderBasicInfo), JSON.toJSONString(data));
String orderCode = orderBasicInfo.getOrderCode(); String orderCode = orderBasicInfo.getOrderCode();
BigDecimal orderAmount = orderBasicInfo.getOrderAmount(); BigDecimal orderAmount = orderBasicInfo.getOrderAmount();
// 更新订单详情 查询订单详情 修改订单数据 // 更新订单详情 查询订单详情 修改订单数据
@@ -472,6 +472,7 @@ public abstract class AbstractProgramLogic implements InitializingBean {
orderDetail.setTotalUsedElectricity(totalElectricity.max(sumUsedElectricity)); orderDetail.setTotalUsedElectricity(totalElectricity.max(sumUsedElectricity));
// 订单总金额 // 订单总金额
orderDetail.setTotalOrderAmount(orderAmount); orderDetail.setTotalOrderAmount(orderAmount);
logger.info("end更新订单详情:【{}】, 电费总金额:{}, 服务费总金额:{}, 总用电量:{}, 订单总金额:{}", orderCode, totalElectricityAmount, totalServiceAmount, orderDetail.getTotalUsedElectricity(), orderAmount);
} catch (Exception e) { } catch (Exception e) {
logger.error("orderCode:{}, 设置订单详情参数发生异常", orderCode, e); logger.error("orderCode:{}, 设置订单详情参数发生异常", orderCode, e);
} }
@@ -724,10 +725,10 @@ public abstract class AbstractProgramLogic implements InitializingBean {
String memberId = orderBasicInfo.getMemberId(); // 会员id String memberId = orderBasicInfo.getMemberId(); // 会员id
String stationId = orderBasicInfo.getStationId(); // 站点id String stationId = orderBasicInfo.getStationId(); // 站点id
String merchantId = orderBasicInfo.getMerchantId(); // 运营商id String merchantId = orderBasicInfo.getMerchantId(); // 运营商id
String orderCode = orderBasicInfo.getOrderCode(); // 订单号
if (orderDetail == null) { if (orderDetail == null) {
logger.info("计算订单折扣V2, OrderDetail为空(orderCode:{}, transactionCode:{}), 直接返回!", logger.info("计算订单折扣V2, OrderDetail为空(orderCode:{}, transactionCode:{}), 直接返回!", orderCode, orderBasicInfo.getTransactionCode());
orderBasicInfo.getOrderCode(), orderBasicInfo.getTransactionCode());
return; return;
} }
@@ -760,69 +761,70 @@ public abstract class AbstractProgramLogic implements InitializingBean {
// 尖时段用电量 // 尖时段用电量
BigDecimal sharpUsedElectricity = orderDetail.getSharpUsedElectricity(); BigDecimal sharpUsedElectricity = orderDetail.getSharpUsedElectricity();
if (sharpUsedElectricity != null) { if (sharpUsedElectricity != null) {
// 计算该时段电费单价
BigDecimal electricityPrice = billingTemplateVO.getSharpElectricityPrice();
// 计算该时段电费 = 电费单价 x 用电量 // 计算该时段电费 = 电费单价 x 用电量
BigDecimal sharpElectricityAmount = billingTemplateVO.getSharpElectricityPrice() BigDecimal electricityAmount = electricityPrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN);
.multiply(sharpUsedElectricity) // 计算该时段服务费单价
.setScale(2, RoundingMode.DOWN); BigDecimal servicePrice = billingTemplateVO.getSharpServicePrice();
// 计算该时段服务费 // 计算该时段服务费
BigDecimal sharpServiceAmount = billingTemplateVO.getSharpServicePrice() BigDecimal serviceAmount = servicePrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN);
.multiply(sharpUsedElectricity)
.setScale(2, RoundingMode.DOWN);
// 汇总 // 汇总
afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(sharpElectricityAmount); afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount);
afterDiscountServiceAmount = afterDiscountServiceAmount.add(sharpServiceAmount); afterDiscountServiceAmount = afterDiscountServiceAmount.add(serviceAmount);
// logger.info("计算订单折扣V2:【{}】, 当前为尖时段, 电费单价:{}, 服务费单价:{}, 耗电量:{}, 平台计算该时段消费金额:{}, 桩传的单价:{}, 桩传的金额:{}");
} }
// 峰时段用电量 // 峰时段用电量
BigDecimal peakUsedElectricity = orderDetail.getPeakUsedElectricity(); BigDecimal peakUsedElectricity = orderDetail.getPeakUsedElectricity();
if (peakUsedElectricity != null) { if (peakUsedElectricity != null) {
// 计算该时段电费单价
BigDecimal electricityPrice = billingTemplateVO.getPeakElectricityPrice();
// 计算该时段电费 = 电费单价 x 用电量 // 计算该时段电费 = 电费单价 x 用电量
BigDecimal peakElectricityAmount = billingTemplateVO.getPeakElectricityPrice() BigDecimal electricityAmount = electricityPrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN);
.multiply(peakUsedElectricity)
.setScale(2, RoundingMode.DOWN);
// 计算该时段服务费 // 计算该时段服务费
BigDecimal peakServiceAmount = billingTemplateVO.getPeakServicePrice() BigDecimal servicePrice = billingTemplateVO.getPeakServicePrice();
.multiply(peakUsedElectricity) // 计算该时段服务费 = 服务费单价 x 用电量
.setScale(2, RoundingMode.DOWN); BigDecimal serviceAmount = servicePrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN);
// 汇总 // 汇总
afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(peakElectricityAmount); afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount);
afterDiscountServiceAmount = afterDiscountServiceAmount.add(peakServiceAmount); afterDiscountServiceAmount = afterDiscountServiceAmount.add(serviceAmount);
} }
// 平时段用电量 // 平时段用电量
BigDecimal flatUsedElectricity = orderDetail.getFlatUsedElectricity(); BigDecimal flatUsedElectricity = orderDetail.getFlatUsedElectricity();
if (flatUsedElectricity != null) { if (flatUsedElectricity != null) {
// 计算该时段电费单价
BigDecimal electricityPrice = billingTemplateVO.getFlatElectricityPrice();
// 计算该时段电费 = 电费单价 x 用电量 // 计算该时段电费 = 电费单价 x 用电量
BigDecimal flatElectricityAmount = billingTemplateVO.getFlatElectricityPrice() BigDecimal electricityAmount = electricityPrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN);
.multiply(flatUsedElectricity) // 计算该时段服务费单价
.setScale(2, RoundingMode.DOWN); BigDecimal servicePrice = billingTemplateVO.getFlatServicePrice();
// 计算该时段服务费 // 计算该时段服务费
BigDecimal flatServiceAmount = billingTemplateVO.getFlatServicePrice() BigDecimal serviceAmount = servicePrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN);
.multiply(flatUsedElectricity)
.setScale(2, RoundingMode.DOWN);
// 汇总 // 汇总
afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(flatElectricityAmount); afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount);
afterDiscountServiceAmount = afterDiscountServiceAmount.add(flatServiceAmount); afterDiscountServiceAmount = afterDiscountServiceAmount.add(serviceAmount);
} }
// 谷时段用电量 // 谷时段用电量
BigDecimal valleyUsedElectricity = orderDetail.getValleyUsedElectricity(); BigDecimal valleyUsedElectricity = orderDetail.getValleyUsedElectricity();
if (valleyUsedElectricity != null) { if (valleyUsedElectricity != null) {
// 计算该时段电费单价
BigDecimal electricityPrice = billingTemplateVO.getValleyElectricityPrice();
// 计算该时段电费 = 电费单价 x 用电量 // 计算该时段电费 = 电费单价 x 用电量
BigDecimal valleyElectricityAmount = billingTemplateVO.getValleyElectricityPrice() BigDecimal electricityAmount = electricityPrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN);
.multiply(valleyUsedElectricity) // 计算该时段服务费单价
.setScale(2, RoundingMode.DOWN); BigDecimal servicePrice = billingTemplateVO.getValleyServicePrice();
// 计算该时段服务费 // 计算该时段服务费
BigDecimal valleyServiceAmount = billingTemplateVO.getValleyServicePrice() BigDecimal serviceAmount = servicePrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN);
.multiply(valleyUsedElectricity)
.setScale(2, RoundingMode.DOWN);
// 汇总 // 汇总
afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(valleyElectricityAmount); afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount);
afterDiscountServiceAmount = afterDiscountServiceAmount.add(valleyServiceAmount); afterDiscountServiceAmount = afterDiscountServiceAmount.add(serviceAmount);
} }
// 计算优惠了多少钱 // 计算优惠了多少钱
@@ -830,6 +832,9 @@ public abstract class AbstractProgramLogic implements InitializingBean {
electricityAmountDiscount = originalTotalElectricityAmount.subtract(afterDiscountElectricityAmount); electricityAmountDiscount = originalTotalElectricityAmount.subtract(afterDiscountElectricityAmount);
// 服务费折扣金额 = 优惠前服务费 - 优惠后服务费 // 服务费折扣金额 = 优惠前服务费 - 优惠后服务费
serviceAmountDiscount = originalTotalServiceAmount.subtract(afterDiscountServiceAmount); serviceAmountDiscount = originalTotalServiceAmount.subtract(afterDiscountServiceAmount);
logger.info("计算订单折扣, orderCode:{}, 原始电费金额:{}, 折扣后电费金额:{}, 电费折扣金额:{}, 原始服务费金额:{}, 折扣后服务费金额:{}, 服务费折扣金额:{}",
orderCode, originalTotalElectricityAmount, afterDiscountElectricityAmount, electricityAmountDiscount, originalTotalServiceAmount, afterDiscountServiceAmount, serviceAmountDiscount);
} }
/* /*
@@ -858,7 +863,7 @@ public abstract class AbstractProgramLogic implements InitializingBean {
// 服务费折扣金额(服务费便宜了多少钱) // 服务费折扣金额(服务费便宜了多少钱)
orderDetail.setDiscountServiceAmount(serviceAmountDiscount); orderDetail.setDiscountServiceAmount(serviceAmountDiscount);
logger.info("计算订单折扣, orderCode:{}, memberId:{}, 订单折扣金额:{}, 电费折扣金额:{}, 服务费折扣金额:{}, 优惠后总消费金额:{}", logger.info("计算订单折扣, orderCode:{}, memberId:{}, 订单折扣金额:{}, 电费折扣金额:{}, 服务费折扣金额:{}, 优惠后总消费金额:{}",
orderBasicInfo.getOrderCode(), memberId, discountAmount, electricityAmountDiscount, serviceAmountDiscount, totalConsumeAmount); orderCode, memberId, discountAmount, electricityAmountDiscount, serviceAmountDiscount, totalConsumeAmount);
} }
/** /**