mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-05-10 04:50:11 +08:00
update 新分账方法
This commit is contained in:
@@ -1,11 +1,9 @@
|
|||||||
package com.jsowell.pile.service;
|
package com.jsowell.pile.service;
|
||||||
|
|
||||||
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
||||||
import com.jsowell.adapay.common.DivMember;
|
|
||||||
import com.jsowell.adapay.dto.SplitData;
|
import com.jsowell.adapay.dto.SplitData;
|
||||||
import com.jsowell.adapay.response.PaymentReverseResponse;
|
import com.jsowell.adapay.response.PaymentReverseResponse;
|
||||||
import com.jsowell.adapay.vo.OrderSplitResult;
|
import com.jsowell.adapay.vo.OrderSplitResult;
|
||||||
import com.jsowell.adapay.vo.PaymentInfo;
|
|
||||||
import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
|
import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
|
||||||
import com.jsowell.common.core.domain.ykc.TransactionRecordsData;
|
import com.jsowell.common.core.domain.ykc.TransactionRecordsData;
|
||||||
import com.jsowell.pile.domain.*;
|
import com.jsowell.pile.domain.*;
|
||||||
@@ -207,11 +205,17 @@ public interface OrderBasicInfoService{
|
|||||||
|
|
||||||
OrderSplitResult realTimeOrderSplit(AfterSettleOrderDTO afterSettleOrderDTO) throws BaseAdaPayException;
|
OrderSplitResult realTimeOrderSplit(AfterSettleOrderDTO afterSettleOrderDTO) throws BaseAdaPayException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算分账数据
|
||||||
|
* @param stationSplitConfigList
|
||||||
|
* @param afterSettleOrderDTO
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
List<SplitData> calculationSplitDataList(List<StationSplitConfig> stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO);
|
List<SplitData> calculationSplitDataList(List<StationSplitConfig> stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO);
|
||||||
|
|
||||||
List<DivMember> calculationOfSplitAmount(List<StationSplitConfig> stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO);
|
// List<DivMember> calculationOfSplitAmount(List<StationSplitConfig> stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO);
|
||||||
|
|
||||||
List<DivMember> calculationOfSplitAmount(List<StationSplitConfig> stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO, List<PaymentInfo> paymentInfos);
|
// List<DivMember> calculationOfSplitAmount(List<StationSplitConfig> stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO, List<PaymentInfo> paymentInfos);
|
||||||
|
|
||||||
OrderSplitResult verifyOrderConfirmAmount(List<String> paymentIds, String orderCode, BigDecimal settleAmount, String wechatAppId) throws BaseAdaPayException;
|
OrderSplitResult verifyOrderConfirmAmount(List<String> paymentIds, String orderCode, BigDecimal settleAmount, String wechatAppId) throws BaseAdaPayException;
|
||||||
|
|
||||||
|
|||||||
@@ -1868,10 +1868,10 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
|
|||||||
* @param afterSettleOrderDTO 订单结算信息
|
* @param afterSettleOrderDTO 订单结算信息
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Override
|
// @Override
|
||||||
public List<DivMember> calculationOfSplitAmount(List<StationSplitConfig> stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO) {
|
// public List<DivMember> calculationOfSplitAmount(List<StationSplitConfig> stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO) {
|
||||||
return calculationOfSplitAmount(stationSplitConfigList, afterSettleOrderDTO, null);
|
// return calculationOfSplitAmount(stationSplitConfigList, afterSettleOrderDTO, null);
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 计算每个账户需要分账的金额
|
* 计算每个账户需要分账的金额
|
||||||
@@ -1880,62 +1880,62 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
|
|||||||
* @param paymentInfos 支付记录信息
|
* @param paymentInfos 支付记录信息
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Override
|
// @Override
|
||||||
public List<DivMember> calculationOfSplitAmount(List<StationSplitConfig> stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO, List<PaymentInfo> paymentInfos) {
|
// public List<DivMember> calculationOfSplitAmount(List<StationSplitConfig> stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO, List<PaymentInfo> paymentInfos) {
|
||||||
List<DivMember> resultList = Lists.newArrayList();
|
// List<DivMember> resultList = Lists.newArrayList();
|
||||||
// 校验stationSplitConfigList中电费分成比例相加等于100%
|
// // 校验stationSplitConfigList中电费分成比例相加等于100%
|
||||||
BigDecimal totalElecSplitRatio = stationSplitConfigList.stream().map(StationSplitConfig::getElectricitySplitRatio).reduce(BigDecimal.ZERO, BigDecimal::add);
|
// BigDecimal totalElecSplitRatio = stationSplitConfigList.stream().map(StationSplitConfig::getElectricitySplitRatio).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
// 校验stationSplitConfigList中服务费分成比例相加等于100%
|
// // 校验stationSplitConfigList中服务费分成比例相加等于100%
|
||||||
BigDecimal totalServiceSplitRatio = stationSplitConfigList.stream().map(StationSplitConfig::getServiceSplitRatio).reduce(BigDecimal.ZERO, BigDecimal::add);
|
// BigDecimal totalServiceSplitRatio = stationSplitConfigList.stream().map(StationSplitConfig::getServiceSplitRatio).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
//
|
||||||
// totalElecSplitRatio和totalServiceSplitRatio 都等于100%, 才进行后续操作
|
// // totalElecSplitRatio和totalServiceSplitRatio 都等于100%, 才进行后续操作
|
||||||
if (totalElecSplitRatio.compareTo(BigDecimal.valueOf(100)) != 0 || totalServiceSplitRatio.compareTo(BigDecimal.valueOf(100)) != 0) {
|
// if (totalElecSplitRatio.compareTo(BigDecimal.valueOf(100)) != 0 || totalServiceSplitRatio.compareTo(BigDecimal.valueOf(100)) != 0) {
|
||||||
logger.info("站点:{}, 分成配置中的电费分成比例相加必须为100.0%, 实际值:{}, 服务费分成比例相加必须为100.0%, 实际值:{}", stationSplitConfigList.get(0).getStationId(), totalElecSplitRatio, totalServiceSplitRatio);
|
// logger.info("站点:{}, 分成配置中的电费分成比例相加必须为100.0%, 实际值:{}, 服务费分成比例相加必须为100.0%, 实际值:{}", stationSplitConfigList.get(0).getStationId(), totalElecSplitRatio, totalServiceSplitRatio);
|
||||||
return resultList;
|
// return resultList;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// 需要分成的电费金额 = 总电费金额 - 电费优惠金额
|
// // 需要分成的电费金额 = 总电费金额 - 电费优惠金额
|
||||||
BigDecimal orderElectricityAmount = afterSettleOrderDTO.getOrderElectricityAmount().subtract(afterSettleOrderDTO.getOrderElectricityDiscountAmount());
|
// BigDecimal orderElectricityAmount = afterSettleOrderDTO.getOrderElectricityAmount().subtract(afterSettleOrderDTO.getOrderElectricityDiscountAmount());
|
||||||
// 需要分成的服务费金额 = 总服务费金额 - 服务费优惠金额
|
// // 需要分成的服务费金额 = 总服务费金额 - 服务费优惠金额
|
||||||
BigDecimal orderServiceAmount = afterSettleOrderDTO.getOrderServiceAmount().subtract(afterSettleOrderDTO.getOrderServiceDiscountAmount());
|
// BigDecimal orderServiceAmount = afterSettleOrderDTO.getOrderServiceAmount().subtract(afterSettleOrderDTO.getOrderServiceDiscountAmount());
|
||||||
// 校验 结算金额 = 需要分成的电费金额 + 需要分成的服务费金额
|
// // 校验 结算金额 = 需要分成的电费金额 + 需要分成的服务费金额
|
||||||
if (orderElectricityAmount.add(orderServiceAmount).compareTo(afterSettleOrderDTO.getOrderSettleAmount()) != 0) {
|
// if (orderElectricityAmount.add(orderServiceAmount).compareTo(afterSettleOrderDTO.getOrderSettleAmount()) != 0) {
|
||||||
logger.info("订单结算金额:{}与需要分成的电费金额:{}+需要分成的服务费金额:{}不相等", afterSettleOrderDTO.getOrderSettleAmount(), orderElectricityAmount, orderServiceAmount);
|
// logger.info("订单结算金额:{}与需要分成的电费金额:{}+需要分成的服务费金额:{}不相等", afterSettleOrderDTO.getOrderSettleAmount(), orderElectricityAmount, orderServiceAmount);
|
||||||
return resultList;
|
// return resultList;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// 定义两个变量, 分别保存剩余电费金额, 剩余服务费金额, 原始值需要分成的金额相等, 分账后减去响应金额, 最后剩余的金额分给手续费承担者
|
// // 定义两个变量, 分别保存剩余电费金额, 剩余服务费金额, 原始值需要分成的金额相等, 分账后减去响应金额, 最后剩余的金额分给手续费承担者
|
||||||
BigDecimal remainElectricityAmount = orderElectricityAmount;
|
// BigDecimal remainElectricityAmount = orderElectricityAmount;
|
||||||
BigDecimal remainServiceAmount = orderServiceAmount;
|
// BigDecimal remainServiceAmount = orderServiceAmount;
|
||||||
|
//
|
||||||
for (StationSplitConfig stationSplitConfig : stationSplitConfigList) {
|
// for (StationSplitConfig stationSplitConfig : stationSplitConfigList) {
|
||||||
DivMember divMember = new DivMember();
|
// DivMember divMember = new DivMember();
|
||||||
divMember.setMemberId(stationSplitConfig.getAdapayMemberId());
|
// divMember.setMemberId(stationSplitConfig.getAdapayMemberId());
|
||||||
if (stationSplitConfig.getFeeFlag().equals(Constants.ZERO)) {
|
// if (stationSplitConfig.getFeeFlag().equals(Constants.ZERO)) {
|
||||||
// 该用户分到的电费金额 保留两位小数, 后面的舍弃
|
// // 该用户分到的电费金额 保留两位小数, 后面的舍弃
|
||||||
BigDecimal elecAmt = stationSplitConfig.getElectricitySplitRatio().divide(BigDecimal.valueOf(100)).multiply(orderElectricityAmount).setScale(2, RoundingMode.DOWN);
|
// BigDecimal elecAmt = stationSplitConfig.getElectricitySplitRatio().divide(BigDecimal.valueOf(100)).multiply(orderElectricityAmount).setScale(2, RoundingMode.DOWN);
|
||||||
remainElectricityAmount = remainElectricityAmount.subtract(elecAmt);
|
// remainElectricityAmount = remainElectricityAmount.subtract(elecAmt);
|
||||||
// 该用户分到的服务费金额
|
// // 该用户分到的服务费金额
|
||||||
BigDecimal servAmt = stationSplitConfig.getServiceSplitRatio().divide(BigDecimal.valueOf(100)).multiply(orderServiceAmount).setScale(2, RoundingMode.DOWN);
|
// BigDecimal servAmt = stationSplitConfig.getServiceSplitRatio().divide(BigDecimal.valueOf(100)).multiply(orderServiceAmount).setScale(2, RoundingMode.DOWN);
|
||||||
remainServiceAmount = remainServiceAmount.subtract(servAmt);
|
// remainServiceAmount = remainServiceAmount.subtract(servAmt);
|
||||||
divMember.setAmount(AdapayUtil.formatAmount(elecAmt.add(servAmt)));
|
// divMember.setAmount(AdapayUtil.formatAmount(elecAmt.add(servAmt)));
|
||||||
} else {
|
// } else {
|
||||||
// 最后剩余的金额分给手续费承担者
|
// // 最后剩余的金额分给手续费承担者
|
||||||
divMember.setAmount(AdapayUtil.formatAmount(remainElectricityAmount.add(remainServiceAmount)));
|
// divMember.setAmount(AdapayUtil.formatAmount(remainElectricityAmount.add(remainServiceAmount)));
|
||||||
}
|
// }
|
||||||
divMember.setFeeFlag(StringUtils.equals(Constants.ONE, stationSplitConfig.getFeeFlag()) ? Constants.Y : Constants.N);
|
// divMember.setFeeFlag(StringUtils.equals(Constants.ONE, stationSplitConfig.getFeeFlag()) ? Constants.Y : Constants.N);
|
||||||
resultList.add(divMember);
|
// resultList.add(divMember);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// 所有用户电费分账之和
|
// // 所有用户电费分账之和
|
||||||
BigDecimal totalAmt = resultList.stream().map(DivMember::getAmount).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add);
|
// BigDecimal totalAmt = resultList.stream().map(DivMember::getAmount).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
if ((totalAmt).compareTo(afterSettleOrderDTO.getOrderSettleAmount()) != 0 ) {
|
// if ((totalAmt).compareTo(afterSettleOrderDTO.getOrderSettleAmount()) != 0 ) {
|
||||||
logger.info("订单结算金额:{}, 与分账后所有用户分到金额总和:{}不相等", afterSettleOrderDTO.getOrderSettleAmount(), totalAmt);
|
// logger.info("订单结算金额:{}, 与分账后所有用户分到金额总和:{}不相等", afterSettleOrderDTO.getOrderSettleAmount(), totalAmt);
|
||||||
return resultList;
|
// return resultList;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
return resultList;
|
// return resultList;
|
||||||
}
|
// }
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
BigDecimal orderElectricityAmount = new BigDecimal("100");
|
BigDecimal orderElectricityAmount = new BigDecimal("100");
|
||||||
|
|||||||
Reference in New Issue
Block a user