mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-06-15 04:39:50 +08:00
【公共方法】 returnUpdateOrderBasicInfo 与 returnUpdateOrderDetail 逻辑合并
This commit is contained in:
@@ -467,6 +467,7 @@ public abstract class AbstractProgramLogic implements InitializingBean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 【公共方法】 returnUpdateOrderBasicInfo 与 returnUpdateOrderDetail 逻辑合并
|
||||||
* 更新订单主表和订单详情中的各种金额
|
* 更新订单主表和订单详情中的各种金额
|
||||||
* 只交易记录中的耗电量, 其他金额都以平台计算为主
|
* 只交易记录中的耗电量, 其他金额都以平台计算为主
|
||||||
* @param data 交易记录数据
|
* @param data 交易记录数据
|
||||||
@@ -481,7 +482,7 @@ public abstract class AbstractProgramLogic implements InitializingBean {
|
|||||||
// data中的消费金额 精确到小数点后四位,包含电费、 服务费
|
// data中的消费金额 精确到小数点后四位,包含电费、 服务费
|
||||||
BigDecimal dataOrderAmount = new BigDecimal(data.getConsumptionAmount()).setScale(2, RoundingMode.HALF_UP);
|
BigDecimal dataOrderAmount = new BigDecimal(data.getConsumptionAmount()).setScale(2, RoundingMode.HALF_UP);
|
||||||
// data中的总用电量
|
// data中的总用电量
|
||||||
BigDecimal totalElectricity = new BigDecimal(StringUtils.isBlank(data.getTotalElectricity()) ? Constants.ZERO : data.getTotalElectricity());
|
BigDecimal dataTotalElectricity = new BigDecimal(StringUtils.isBlank(data.getTotalElectricity()) ? Constants.ZERO : data.getTotalElectricity());
|
||||||
// 总电费金额
|
// 总电费金额
|
||||||
BigDecimal totalElectricityAmount = BigDecimal.ZERO;
|
BigDecimal totalElectricityAmount = BigDecimal.ZERO;
|
||||||
// 总服务费金额
|
// 总服务费金额
|
||||||
@@ -587,8 +588,12 @@ public abstract class AbstractProgramLogic implements InitializingBean {
|
|||||||
// 平台计算的总消费金额 平台计算总电费金额 + 平台计算总服务费金额
|
// 平台计算的总消费金额 平台计算总电费金额 + 平台计算总服务费金额
|
||||||
BigDecimal computeTotalAmount = totalElectricityAmount.add(totalServiceAmount);
|
BigDecimal computeTotalAmount = totalElectricityAmount.add(totalServiceAmount);
|
||||||
|
|
||||||
// 如果算出来的 电费金额 + 服务费金额 != 总消费金额,则电费金额等于总消费金额 - 服务费金额
|
/*
|
||||||
if (computeTotalAmount.compareTo(dataOrderAmount) != 0) {
|
如果算出来的 电费金额 + 服务费金额 != 总消费金额,并且尖峰平谷总用电量大于0, 则使用平台计算金额
|
||||||
|
例如: 尖峰平谷存在耗电量, 平台计算得出50元, 交易记录中传的总金额是60元, 则使用平台计算金额
|
||||||
|
尖峰平谷不存在耗电量, 平台计算得出0元, 交易记录中传的总金额是40元, 则使用交易记录中传的总金额(比如人工结算订单场景)
|
||||||
|
*/
|
||||||
|
if (computeTotalAmount.compareTo(dataOrderAmount) != 0 && (sumUsedElectricity.compareTo(BigDecimal.ZERO) > 0)) {
|
||||||
// 2025年3月26日15点50分, 订单金额以平台计算为主,所以注释掉, 并打印日志说明
|
// 2025年3月26日15点50分, 订单金额以平台计算为主,所以注释掉, 并打印日志说明
|
||||||
// totalElectricityAmount = dataOrderAmount.subtract(totalServiceAmount);
|
// totalElectricityAmount = dataOrderAmount.subtract(totalServiceAmount);
|
||||||
logger.info("updateOrderBasicInfoAndOrderDetail平台计算出电费金额:{}, 服务费金额:{}, 汇总:{}, 交易记录传来的金额:{}", totalElectricityAmount, totalServiceAmount, computeTotalAmount, dataOrderAmount);
|
logger.info("updateOrderBasicInfoAndOrderDetail平台计算出电费金额:{}, 服务费金额:{}, 汇总:{}, 交易记录传来的金额:{}", totalElectricityAmount, totalServiceAmount, computeTotalAmount, dataOrderAmount);
|
||||||
@@ -644,7 +649,7 @@ public abstract class AbstractProgramLogic implements InitializingBean {
|
|||||||
orderDetail.setTotalElectricityAmount(totalElectricityAmount); // 电费总金额
|
orderDetail.setTotalElectricityAmount(totalElectricityAmount); // 电费总金额
|
||||||
orderDetail.setTotalServiceAmount(totalServiceAmount); // 服务费总金额
|
orderDetail.setTotalServiceAmount(totalServiceAmount); // 服务费总金额
|
||||||
// sumUsedElectricity与totalElectricity对比, 取最大的值
|
// sumUsedElectricity与totalElectricity对比, 取最大的值
|
||||||
orderDetail.setTotalUsedElectricity(totalElectricity.max(sumUsedElectricity));
|
orderDetail.setTotalUsedElectricity(dataTotalElectricity.max(sumUsedElectricity));
|
||||||
orderDetail.setTotalOrderAmount(dataOrderAmount); // 订单总金额
|
orderDetail.setTotalOrderAmount(dataOrderAmount); // 订单总金额
|
||||||
logger.info("end updateOrderBasicInfoAndOrderDetail:【{}】, 电费总金额:{}, 服务费总金额:{}, 总用电量:{}, 订单总金额:{}, 退款金额:{}, 虚拟金额:{}, 结算金额:{}",
|
logger.info("end updateOrderBasicInfoAndOrderDetail:【{}】, 电费总金额:{}, 服务费总金额:{}, 总用电量:{}, 订单总金额:{}, 退款金额:{}, 虚拟金额:{}, 结算金额:{}",
|
||||||
orderCode, totalElectricityAmount, totalServiceAmount, orderDetail.getTotalUsedElectricity(), dataOrderAmount,
|
orderCode, totalElectricityAmount, totalServiceAmount, orderDetail.getTotalUsedElectricity(), dataOrderAmount,
|
||||||
|
|||||||
@@ -371,6 +371,48 @@ public class NotDelayMerchantProgramLogic extends AbstractProgramLogic {
|
|||||||
payOrderSuccessCallback(callbackDTO);
|
payOrderSuccessCallback(callbackDTO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
// 更新数据库
|
||||||
|
OrderTransactionDTO dto = new OrderTransactionDTO();
|
||||||
|
dto.setOrderBasicInfo(orderBasicInfo);
|
||||||
|
dto.setOrderDetail(orderDetail);
|
||||||
|
transactionService.doUpdateOrder(dto);
|
||||||
|
|
||||||
|
// 订单退款
|
||||||
|
refundOrder(orderBasicInfo);
|
||||||
|
|
||||||
|
// 将卡/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:{} OrderTransactionDTO:{}", orderBasicInfo.getOrderCode(), JSON.toJSONString(dto));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 订单结算/结算订单逻辑/订单结算逻辑
|
* 订单结算/结算订单逻辑/订单结算逻辑
|
||||||
* @param data
|
* @param data
|
||||||
@@ -386,10 +428,16 @@ public class NotDelayMerchantProgramLogic extends AbstractProgramLogic {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获取更新数据后的orderBasicInfo对象
|
// 获取更新数据后的orderBasicInfo对象
|
||||||
returnUpdateOrderBasicInfo(orderBasicInfo, data);
|
// returnUpdateOrderBasicInfo(orderBasicInfo, data);
|
||||||
|
|
||||||
// 获取更新数据后的orderDetail对象/更新订单详情 查询订单详情 修改订单数据
|
// 获取更新数据后的orderDetail对象/更新订单详情 查询订单详情 修改订单数据
|
||||||
OrderDetail orderDetail = returnUpdateOrderDetail(orderBasicInfo, data);
|
// OrderDetail orderDetail = returnUpdateOrderDetail(orderBasicInfo, data);
|
||||||
|
|
||||||
|
// 查询订单详情
|
||||||
|
OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(orderBasicInfo.getOrderCode());
|
||||||
|
|
||||||
|
// 计算订单各种金额
|
||||||
|
updateOrderBasicInfoAndOrderDetail(data, orderBasicInfo, orderDetail);
|
||||||
|
|
||||||
// 更新数据库
|
// 更新数据库
|
||||||
OrderTransactionDTO dto = new OrderTransactionDTO();
|
OrderTransactionDTO dto = new OrderTransactionDTO();
|
||||||
|
|||||||
Reference in New Issue
Block a user