diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java index 08769c3b0..b9d036e37 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java @@ -1,11 +1,9 @@ package com.jsowell.pile.service; import com.huifu.adapay.core.exception.BaseAdaPayException; -import com.jsowell.adapay.common.DivMember; import com.jsowell.adapay.dto.SplitData; import com.jsowell.adapay.response.PaymentReverseResponse; 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.TransactionRecordsData; import com.jsowell.pile.domain.*; @@ -207,11 +205,17 @@ public interface OrderBasicInfoService{ OrderSplitResult realTimeOrderSplit(AfterSettleOrderDTO afterSettleOrderDTO) throws BaseAdaPayException; + /** + * 计算分账数据 + * @param stationSplitConfigList + * @param afterSettleOrderDTO + * @return + */ List calculationSplitDataList(List stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO); - List calculationOfSplitAmount(List stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO); + // List calculationOfSplitAmount(List stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO); - List calculationOfSplitAmount(List stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO, List paymentInfos); + // List calculationOfSplitAmount(List stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO, List paymentInfos); OrderSplitResult verifyOrderConfirmAmount(List paymentIds, String orderCode, BigDecimal settleAmount, String wechatAppId) throws BaseAdaPayException; diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 28813a8d7..626c8aa8f 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -1868,10 +1868,10 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { * @param afterSettleOrderDTO 订单结算信息 * @return */ - @Override - public List calculationOfSplitAmount(List stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO) { - return calculationOfSplitAmount(stationSplitConfigList, afterSettleOrderDTO, null); - } + // @Override + // public List calculationOfSplitAmount(List stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO) { + // return calculationOfSplitAmount(stationSplitConfigList, afterSettleOrderDTO, null); + // } /** * 计算每个账户需要分账的金额 @@ -1880,62 +1880,62 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { * @param paymentInfos 支付记录信息 * @return */ - @Override - public List calculationOfSplitAmount(List stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO, List paymentInfos) { - List resultList = Lists.newArrayList(); - // 校验stationSplitConfigList中电费分成比例相加等于100% - BigDecimal totalElecSplitRatio = stationSplitConfigList.stream().map(StationSplitConfig::getElectricitySplitRatio).reduce(BigDecimal.ZERO, BigDecimal::add); - // 校验stationSplitConfigList中服务费分成比例相加等于100% - BigDecimal totalServiceSplitRatio = stationSplitConfigList.stream().map(StationSplitConfig::getServiceSplitRatio).reduce(BigDecimal.ZERO, BigDecimal::add); - - // totalElecSplitRatio和totalServiceSplitRatio 都等于100%, 才进行后续操作 - 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); - return resultList; - } - - // 需要分成的电费金额 = 总电费金额 - 电费优惠金额 - BigDecimal orderElectricityAmount = afterSettleOrderDTO.getOrderElectricityAmount().subtract(afterSettleOrderDTO.getOrderElectricityDiscountAmount()); - // 需要分成的服务费金额 = 总服务费金额 - 服务费优惠金额 - BigDecimal orderServiceAmount = afterSettleOrderDTO.getOrderServiceAmount().subtract(afterSettleOrderDTO.getOrderServiceDiscountAmount()); - // 校验 结算金额 = 需要分成的电费金额 + 需要分成的服务费金额 - if (orderElectricityAmount.add(orderServiceAmount).compareTo(afterSettleOrderDTO.getOrderSettleAmount()) != 0) { - logger.info("订单结算金额:{}与需要分成的电费金额:{}+需要分成的服务费金额:{}不相等", afterSettleOrderDTO.getOrderSettleAmount(), orderElectricityAmount, orderServiceAmount); - return resultList; - } - - // 定义两个变量, 分别保存剩余电费金额, 剩余服务费金额, 原始值需要分成的金额相等, 分账后减去响应金额, 最后剩余的金额分给手续费承担者 - BigDecimal remainElectricityAmount = orderElectricityAmount; - BigDecimal remainServiceAmount = orderServiceAmount; - - for (StationSplitConfig stationSplitConfig : stationSplitConfigList) { - DivMember divMember = new DivMember(); - divMember.setMemberId(stationSplitConfig.getAdapayMemberId()); - if (stationSplitConfig.getFeeFlag().equals(Constants.ZERO)) { - // 该用户分到的电费金额 保留两位小数, 后面的舍弃 - BigDecimal elecAmt = stationSplitConfig.getElectricitySplitRatio().divide(BigDecimal.valueOf(100)).multiply(orderElectricityAmount).setScale(2, RoundingMode.DOWN); - remainElectricityAmount = remainElectricityAmount.subtract(elecAmt); - // 该用户分到的服务费金额 - BigDecimal servAmt = stationSplitConfig.getServiceSplitRatio().divide(BigDecimal.valueOf(100)).multiply(orderServiceAmount).setScale(2, RoundingMode.DOWN); - remainServiceAmount = remainServiceAmount.subtract(servAmt); - divMember.setAmount(AdapayUtil.formatAmount(elecAmt.add(servAmt))); - } else { - // 最后剩余的金额分给手续费承担者 - divMember.setAmount(AdapayUtil.formatAmount(remainElectricityAmount.add(remainServiceAmount))); - } - divMember.setFeeFlag(StringUtils.equals(Constants.ONE, stationSplitConfig.getFeeFlag()) ? Constants.Y : Constants.N); - resultList.add(divMember); - } - - // 所有用户电费分账之和 - BigDecimal totalAmt = resultList.stream().map(DivMember::getAmount).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add); - if ((totalAmt).compareTo(afterSettleOrderDTO.getOrderSettleAmount()) != 0 ) { - logger.info("订单结算金额:{}, 与分账后所有用户分到金额总和:{}不相等", afterSettleOrderDTO.getOrderSettleAmount(), totalAmt); - return resultList; - } - - return resultList; - } + // @Override + // public List calculationOfSplitAmount(List stationSplitConfigList, AfterSettleOrderDTO afterSettleOrderDTO, List paymentInfos) { + // List resultList = Lists.newArrayList(); + // // 校验stationSplitConfigList中电费分成比例相加等于100% + // BigDecimal totalElecSplitRatio = stationSplitConfigList.stream().map(StationSplitConfig::getElectricitySplitRatio).reduce(BigDecimal.ZERO, BigDecimal::add); + // // 校验stationSplitConfigList中服务费分成比例相加等于100% + // BigDecimal totalServiceSplitRatio = stationSplitConfigList.stream().map(StationSplitConfig::getServiceSplitRatio).reduce(BigDecimal.ZERO, BigDecimal::add); + // + // // totalElecSplitRatio和totalServiceSplitRatio 都等于100%, 才进行后续操作 + // 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); + // return resultList; + // } + // + // // 需要分成的电费金额 = 总电费金额 - 电费优惠金额 + // BigDecimal orderElectricityAmount = afterSettleOrderDTO.getOrderElectricityAmount().subtract(afterSettleOrderDTO.getOrderElectricityDiscountAmount()); + // // 需要分成的服务费金额 = 总服务费金额 - 服务费优惠金额 + // BigDecimal orderServiceAmount = afterSettleOrderDTO.getOrderServiceAmount().subtract(afterSettleOrderDTO.getOrderServiceDiscountAmount()); + // // 校验 结算金额 = 需要分成的电费金额 + 需要分成的服务费金额 + // if (orderElectricityAmount.add(orderServiceAmount).compareTo(afterSettleOrderDTO.getOrderSettleAmount()) != 0) { + // logger.info("订单结算金额:{}与需要分成的电费金额:{}+需要分成的服务费金额:{}不相等", afterSettleOrderDTO.getOrderSettleAmount(), orderElectricityAmount, orderServiceAmount); + // return resultList; + // } + // + // // 定义两个变量, 分别保存剩余电费金额, 剩余服务费金额, 原始值需要分成的金额相等, 分账后减去响应金额, 最后剩余的金额分给手续费承担者 + // BigDecimal remainElectricityAmount = orderElectricityAmount; + // BigDecimal remainServiceAmount = orderServiceAmount; + // + // for (StationSplitConfig stationSplitConfig : stationSplitConfigList) { + // DivMember divMember = new DivMember(); + // divMember.setMemberId(stationSplitConfig.getAdapayMemberId()); + // if (stationSplitConfig.getFeeFlag().equals(Constants.ZERO)) { + // // 该用户分到的电费金额 保留两位小数, 后面的舍弃 + // BigDecimal elecAmt = stationSplitConfig.getElectricitySplitRatio().divide(BigDecimal.valueOf(100)).multiply(orderElectricityAmount).setScale(2, RoundingMode.DOWN); + // remainElectricityAmount = remainElectricityAmount.subtract(elecAmt); + // // 该用户分到的服务费金额 + // BigDecimal servAmt = stationSplitConfig.getServiceSplitRatio().divide(BigDecimal.valueOf(100)).multiply(orderServiceAmount).setScale(2, RoundingMode.DOWN); + // remainServiceAmount = remainServiceAmount.subtract(servAmt); + // divMember.setAmount(AdapayUtil.formatAmount(elecAmt.add(servAmt))); + // } else { + // // 最后剩余的金额分给手续费承担者 + // divMember.setAmount(AdapayUtil.formatAmount(remainElectricityAmount.add(remainServiceAmount))); + // } + // divMember.setFeeFlag(StringUtils.equals(Constants.ONE, stationSplitConfig.getFeeFlag()) ? Constants.Y : Constants.N); + // resultList.add(divMember); + // } + // + // // 所有用户电费分账之和 + // BigDecimal totalAmt = resultList.stream().map(DivMember::getAmount).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add); + // if ((totalAmt).compareTo(afterSettleOrderDTO.getOrderSettleAmount()) != 0 ) { + // logger.info("订单结算金额:{}, 与分账后所有用户分到金额总和:{}不相等", afterSettleOrderDTO.getOrderSettleAmount(), totalAmt); + // return resultList; + // } + // + // return resultList; + // } public static void main(String[] args) { BigDecimal orderElectricityAmount = new BigDecimal("100");