如果总耗电量大于0, 并且各个时段耗电量总和为0, 则优惠后金额等于优惠前金额

This commit is contained in:
Guoqs
2025-04-11 16:54:47 +08:00
parent 4fe641de1b
commit ed604022a1
2 changed files with 89 additions and 73 deletions

View File

@@ -941,6 +941,21 @@ public abstract class AbstractProgramLogic implements InitializingBean {
// 优惠后服务费金额 初始值为优惠前金额
BigDecimal afterDiscountServiceAmount = BigDecimal.ZERO;
// 订单总耗电量
BigDecimal totalUsedElectricity = orderDetail.getTotalUsedElectricity();
// 尖时段用电量
BigDecimal sharpUsedElectricity = orderDetail.getSharpUsedElectricity();
// 峰时段用电量
BigDecimal peakUsedElectricity = orderDetail.getPeakUsedElectricity();
// 平时段用电量
BigDecimal flatUsedElectricity = orderDetail.getFlatUsedElectricity();
// 谷时段用电量
BigDecimal valleyUsedElectricity = orderDetail.getValleyUsedElectricity();
// 各时段用电量汇总
BigDecimal sumUsedElectricity = sharpUsedElectricity.add(peakUsedElectricity).add(flatUsedElectricity).add(valleyUsedElectricity);
// 查询会员在该站点享受的优惠
MemberDiscountVO memberDiscountVO = memberGroupService.queryMemberDiscountV2(merchantId, stationId, memberId);
if (memberDiscountVO == null) {
@@ -955,7 +970,6 @@ public abstract class AbstractProgramLogic implements InitializingBean {
BillingTemplateVO billingTemplateVO = memberDiscountVO.getBillingTemplateVO();
// 尖时段用电量
BigDecimal sharpUsedElectricity = orderDetail.getSharpUsedElectricity();
if (sharpUsedElectricity != null && sharpUsedElectricity.compareTo(BigDecimal.ZERO) > 0) {
logger.info("计算订单折扣V2:【{}】, 当前为尖时段, 用电量:{}, orderDetail记录的单价({} + {}), 优惠模板单价({} - {})",
orderCode, sharpUsedElectricity, orderDetail.getSharpElectricityPrice(), orderDetail.getSharpServicePrice(), billingTemplateVO.getSharpElectricityPrice(), billingTemplateVO.getSharpServicePrice());
@@ -978,7 +992,6 @@ public abstract class AbstractProgramLogic implements InitializingBean {
}
// 峰时段用电量
BigDecimal peakUsedElectricity = orderDetail.getPeakUsedElectricity();
if (peakUsedElectricity != null && peakUsedElectricity.compareTo(BigDecimal.ZERO) > 0) {
logger.info("计算订单折扣V2:【{}】, 当前为峰时段, 用电量:{}, orderDetail记录的单价({} + {}), 优惠模板单价({} - {})",
orderCode, peakUsedElectricity, orderDetail.getPeakElectricityPrice(), orderDetail.getPeakServicePrice(), billingTemplateVO.getPeakElectricityPrice(), billingTemplateVO.getPeakServicePrice());
@@ -998,7 +1011,6 @@ public abstract class AbstractProgramLogic implements InitializingBean {
}
// 平时段用电量
BigDecimal flatUsedElectricity = orderDetail.getFlatUsedElectricity();
if (flatUsedElectricity != null && flatUsedElectricity.compareTo(BigDecimal.ZERO) > 0) {
logger.info("计算订单折扣V2:【{}】, 当前为平时段, 用电量:{}, orderDetail记录的单价({} + {}), 优惠模板单价({} - {})",
orderCode, flatUsedElectricity, orderDetail.getFlatElectricityPrice(), orderDetail.getFlatServicePrice(), billingTemplateVO.getFlatElectricityPrice(), billingTemplateVO.getFlatServicePrice());
@@ -1018,7 +1030,6 @@ public abstract class AbstractProgramLogic implements InitializingBean {
}
// 谷时段用电量
BigDecimal valleyUsedElectricity = orderDetail.getValleyUsedElectricity();
if (valleyUsedElectricity != null && valleyUsedElectricity.compareTo(BigDecimal.ZERO) > 0) {
logger.info("计算订单折扣V2:【{}】, 当前为谷时段, 用电量:{}, orderDetail记录的单价({} + {}), 优惠模板单价({} - {})",
orderCode, valleyUsedElectricity, orderDetail.getValleyElectricityPrice(), orderDetail.getValleyServicePrice(), billingTemplateVO.getValleyElectricityPrice(), billingTemplateVO.getValleyServicePrice());
@@ -1047,6 +1058,12 @@ public abstract class AbstractProgramLogic implements InitializingBean {
orderCode, originalTotalElectricityAmount, afterDiscountElectricityAmount, electricityAmountDiscount, originalTotalServiceAmount, afterDiscountServiceAmount, serviceAmountDiscount);
}
// 如果总耗电量大于0, 并且各个时段耗电量总和为0, 则优惠后金额等于优惠前金额
if (totalUsedElectricity.compareTo(BigDecimal.ZERO) > 0 && sumUsedElectricity.compareTo(BigDecimal.ZERO) == 0 ) {
afterDiscountElectricityAmount = orderDetail.getTotalElectricityAmount();
afterDiscountServiceAmount = orderDetail.getTotalServiceAmount();
}
/**
* 电费折扣金额和服务费折扣金额 应该大于等于0, 如小于0, 则设置为0
*/
@@ -1064,7 +1081,6 @@ public abstract class AbstractProgramLogic implements InitializingBean {
afterDiscountServiceAmount = originalTotalServiceAmount;
}
/*
更新 数据
*/

View File

@@ -454,74 +454,74 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
/**
* 订单结算/结算订单逻辑/订单结算逻辑
*/
public void settleOrderOld(TransactionRecordsData data, OrderBasicInfo orderBasicInfo) {
logger.info("【{}】-结算订单start data:{}, orderBasicInfo:{}", this.getClass().getSimpleName(), data.toString(), JSON.toJSONString(orderBasicInfo));
// 判断订单状态
if (StringUtils.equals(orderBasicInfo.getOrderStatus(), OrderStatusEnum.ORDER_COMPLETE.getValue())) {
logger.info("结算订单:{}, 是订单完成状态", orderBasicInfo.getOrderCode());
return;
}
// 获取更新数据后的orderBasicInfo对象
returnUpdateOrderBasicInfo(orderBasicInfo, data);
// 获取更新数据后的orderDetail对象/更新订单详情 查询订单详情 修改订单数据
OrderDetail orderDetail = returnUpdateOrderDetail(orderBasicInfo, data);
// 计算订单折扣
calculateOrderDiscountsV2(orderBasicInfo, orderDetail);
// 更新数据库
OrderTransactionDTO dto = new OrderTransactionDTO();
dto.setOrderBasicInfo(orderBasicInfo);
dto.setOrderDetail(orderDetail);
transactionService.doUpdateOrder(dto);
// 不在新分账逻辑站点列表中的, 可以走退款逻辑
// 2025年2月18日09点17分 全部订单改为实时分账
// if (!YKCUtils.getNewLogicStationIdList().contains(orderBasicInfo.getStationId())) {
// // 订单退款
// refundOrder(orderBasicInfo);
// }
// 订单退款
// refundOrder(orderBasicInfo);
// 组装after参数
AfterSettleOrderDTO afterSettleOrderDTO = AfterSettleOrderDTO.builder()
.orderCode(orderBasicInfo.getOrderCode())
.merchantId(orderBasicInfo.getMerchantId())
.stationId(orderBasicInfo.getStationId())
.orderPayAmount(orderBasicInfo.getPayAmount()) // 支付金额
.orderConsumeAmount(orderBasicInfo.getOrderAmount()) // 消费金额
.orderSettleAmount(orderBasicInfo.getSettleAmount()) // 结算金额
.orderElectricityAmount(orderDetail.getTotalElectricityAmount()) // 电费金额
.orderElectricityDiscountAmount(orderDetail.getDiscountElectricityAmount()) // 电费折扣金额
.orderServiceAmount(orderDetail.getTotalServiceAmount()) // 服务费金额
.orderServiceDiscountAmount(orderDetail.getDiscountServiceAmount()) // 服务费折扣金额
.orderRefundAmount(orderBasicInfo.getRefundAmount()) // 退款金额
.build();
rabbitTemplate.convertAndSend(RabbitConstants.YKC_EXCHANGE_NAME, RabbitConstants.QUEUE_CHARGE_ORDER_DATA, afterSettleOrderDTO);
// 将卡/vin状态解锁
if (!StringUtils.equals("0000000000000000", data.getLogicCard())) {
cardStatusUnlocked(orderBasicInfo.getLogicCard());
}
// 如果是vin启动将启动锁定状态改为正常
if (StringUtils.equals(data.getTransactionIdentifier(), "05")) {
vinStatusUnlocked(data.getVinCode());
}
// 发送停止充电订阅消息
sendMsg(orderBasicInfo);
// 从redis中取出实时记录保存到表中
realTimeMonitorDataRedis2DB(orderBasicInfo.getTransactionCode(), orderBasicInfo.getOrderCode());
logger.info("结算订单end! orderCode:{}, transactionCode:{}, OrderTransactionDTO:{}",
orderBasicInfo.getOrderCode(), orderBasicInfo.getTransactionCode(), JSON.toJSONString(dto));
}
// public void settleOrderOld(TransactionRecordsData data, OrderBasicInfo orderBasicInfo) {
// logger.info("【{}】-结算订单start data:{}, orderBasicInfo:{}", this.getClass().getSimpleName(), data.toString(), JSON.toJSONString(orderBasicInfo));
// // 判断订单状态
// if (StringUtils.equals(orderBasicInfo.getOrderStatus(), OrderStatusEnum.ORDER_COMPLETE.getValue())) {
// logger.info("结算订单:{}, 是订单完成状态", orderBasicInfo.getOrderCode());
// return;
// }
//
// // 获取更新数据后的orderBasicInfo对象
// returnUpdateOrderBasicInfo(orderBasicInfo, data);
//
// // 获取更新数据后的orderDetail对象/更新订单详情 查询订单详情 修改订单数据
// OrderDetail orderDetail = returnUpdateOrderDetail(orderBasicInfo, data);
//
// // 计算订单折扣
// calculateOrderDiscountsV2(orderBasicInfo, orderDetail);
//
// // 更新数据库
// OrderTransactionDTO dto = new OrderTransactionDTO();
// dto.setOrderBasicInfo(orderBasicInfo);
// dto.setOrderDetail(orderDetail);
// transactionService.doUpdateOrder(dto);
//
// // 不在新分账逻辑站点列表中的, 可以走退款逻辑
// // 2025年2月18日09点17分 全部订单改为实时分账
// // if (!YKCUtils.getNewLogicStationIdList().contains(orderBasicInfo.getStationId())) {
// // // 订单退款
// // refundOrder(orderBasicInfo);
// // }
//
// // 订单退款
// // refundOrder(orderBasicInfo);
//
// // 组装after参数
// AfterSettleOrderDTO afterSettleOrderDTO = AfterSettleOrderDTO.builder()
// .orderCode(orderBasicInfo.getOrderCode())
// .merchantId(orderBasicInfo.getMerchantId())
// .stationId(orderBasicInfo.getStationId())
// .orderPayAmount(orderBasicInfo.getPayAmount()) // 支付金额
// .orderConsumeAmount(orderBasicInfo.getOrderAmount()) // 消费金额
// .orderSettleAmount(orderBasicInfo.getSettleAmount()) // 结算金额
// .orderElectricityAmount(orderDetail.getTotalElectricityAmount()) // 电费金额
// .orderElectricityDiscountAmount(orderDetail.getDiscountElectricityAmount()) // 电费折扣金额
// .orderServiceAmount(orderDetail.getTotalServiceAmount()) // 服务费金额
// .orderServiceDiscountAmount(orderDetail.getDiscountServiceAmount()) // 服务费折扣金额
// .orderRefundAmount(orderBasicInfo.getRefundAmount()) // 退款金额
// .build();
// rabbitTemplate.convertAndSend(RabbitConstants.YKC_EXCHANGE_NAME, RabbitConstants.QUEUE_CHARGE_ORDER_DATA, afterSettleOrderDTO);
//
// // 将卡/vin状态解锁
// if (!StringUtils.equals("0000000000000000", data.getLogicCard())) {
// cardStatusUnlocked(orderBasicInfo.getLogicCard());
// }
//
// // 如果是vin启动将启动锁定状态改为正常
// if (StringUtils.equals(data.getTransactionIdentifier(), "05")) {
// vinStatusUnlocked(data.getVinCode());
// }
//
// // 发送停止充电订阅消息
// sendMsg(orderBasicInfo);
//
// // 从redis中取出实时记录保存到表中
// realTimeMonitorDataRedis2DB(orderBasicInfo.getTransactionCode(), orderBasicInfo.getOrderCode());
//
// logger.info("结算订单end! orderCode:{}, transactionCode:{}, OrderTransactionDTO:{}",
// orderBasicInfo.getOrderCode(), orderBasicInfo.getTransactionCode(), JSON.toJSONString(dto));
// }
/**
* 订单结算/结算订单逻辑/订单结算逻辑