mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 02:55:04 +08:00
如果总耗电量大于0, 并且各个时段耗电量总和为0, 则优惠后金额等于优惠前金额
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
更新 数据
|
||||
*/
|
||||
|
||||
@@ -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));
|
||||
// }
|
||||
|
||||
/**
|
||||
* 订单结算/结算订单逻辑/订单结算逻辑
|
||||
|
||||
Reference in New Issue
Block a user