Commit 0036c556 by 程裕兵

feat:refund

parent 67855b9b
...@@ -60,27 +60,28 @@ public class SettleConvert { ...@@ -60,27 +60,28 @@ public class SettleConvert {
public static List<StudioSettleRecord> convertStudioSettle(MerchantSettleRecord record, public static List<StudioSettleRecord> convertStudioSettle(MerchantSettleRecord record,
Map<Long, BigDecimal> studioPayAmountMap, Map<Long, BigDecimal> studioRefundAmountMap, Map<Long, BigDecimal> studioPayAmountMap, Map<Long, BigDecimal> studioRefundAmountMap,
Map<Long, StudioVO> studioMap) { Map<Long, StudioVO> studioMap) {
// A场馆支付了100,B场馆支付了0,B场馆发起退款-》成功。结算记录-》 return studioMap.keySet().stream().map(studioId -> {
// A场馆支付了0,B场馆支付了0,B场馆发起退款-》失败 // 存在只退款,未收款,或者收款金额少于退款金额的场景,此时的结算金额为负数
// A场馆支付了100,B场馆支付了0,B场馆发起退款-》成功,A场馆发起退款100-》失败 BigDecimal settleAmount = MoneyUtil.subtract(studioPayAmountMap.getOrDefault(studioId, BigDecimal.ZERO),
return studioPayAmountMap.keySet().stream().map(studioId -> StudioSettleRecord.builder() studioRefundAmountMap.getOrDefault(studioId, BigDecimal.ZERO));
.id(IdWorker.getId()) return StudioSettleRecord.builder()
.parentId(record.getId()) .id(IdWorker.getId())
.studioId(studioId) .parentId(record.getId())
.studioName(Optional.ofNullable(studioMap.get(studioId)).map(StudioVO::getName).orElse("-")) .studioId(studioId)
.merchantId(record.getMerchantId()) .studioName(Optional.ofNullable(studioMap.get(studioId)).map(StudioVO::getName).orElse("-"))
.merchantNo(record.getMerchantNo()) .merchantId(record.getMerchantId())
.transState(record.getTransState()) .merchantNo(record.getMerchantNo())
.transAmount(MoneyUtil.subtract(studioPayAmountMap.getOrDefault(studioId, BigDecimal.ZERO), .transState(record.getTransState())
studioRefundAmountMap.getOrDefault(studioId, BigDecimal.ZERO))) .transAmount(settleAmount)
.settleDate(record.getSettleDate()) .settleDate(record.getSettleDate())
.cardNo(record.getCardNo()) .cardNo(record.getCardNo())
.bankName(record.getBankName()) .bankName(record.getBankName())
.failMsg(record.getFailMsg()) .failMsg(record.getFailMsg())
.salt(record.getSalt()) .salt(record.getSalt())
.createTime(record.getCreateTime()) .createTime(record.getCreateTime())
.updateTime(record.getUpdateTime()) .updateTime(record.getUpdateTime())
.build()).collect(Collectors.toList()); .build();
}).collect(Collectors.toList());
} }
public static StudioCheckSettleRecord convertCheckSettle(StudioMerchantApply apply, SettleVO vo, public static StudioCheckSettleRecord convertCheckSettle(StudioMerchantApply apply, SettleVO vo,
......
...@@ -5,6 +5,7 @@ import static java.util.stream.Collectors.toList; ...@@ -5,6 +5,7 @@ import static java.util.stream.Collectors.toList;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.jiejing.common.utils.collection.CollectionUtil; import com.jiejing.common.utils.collection.CollectionUtil;
import com.jiejing.common.utils.time.TimeUtil; import com.jiejing.common.utils.time.TimeUtil;
import com.jiejing.fitness.enums.finance.BrandCashierTransStateEnum; import com.jiejing.fitness.enums.finance.BrandCashierTransStateEnum;
...@@ -30,6 +31,7 @@ import java.time.temporal.ChronoUnit; ...@@ -30,6 +31,7 @@ import java.time.temporal.ChronoUnit;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer; import java.util.function.Consumer;
import javax.annotation.Resource; import javax.annotation.Resource;
...@@ -231,20 +233,22 @@ public class SettleServiceImpl implements SettleService { ...@@ -231,20 +233,22 @@ public class SettleServiceImpl implements SettleService {
private void doCheckSettleSuccess(SettleVO vo, StudioMerchantApply apply, Date startDate, Date endDate) { private void doCheckSettleSuccess(SettleVO vo, StudioMerchantApply apply, Date startDate, Date endDate) {
// 对账成功 // 对账成功:存在AB两个场馆同时绑定一个商户,A场馆没有收款但发起退款的场景。
Map<Long, BigDecimal> studioPayAmountMap = studioCashierRecordRpService.sumMerchantPaySuccessGroupByStudioId( Map<Long, BigDecimal> studioPayAmountMap = studioCashierRecordRpService.sumMerchantPaySuccessGroupByStudioId(
apply.getMerchantId(), startDate, endDate); apply.getMerchantId(), startDate, endDate);
Map<Long, BigDecimal> studioRefundAmountMap = studioCashierRecordRpService.sumMerchantRefundSuccessGroupByStudioId( Map<Long, BigDecimal> studioRefundAmountMap = studioCashierRecordRpService.sumMerchantRefundSuccessGroupByStudioId(
apply.getMerchantId(), startDate, endDate); apply.getMerchantId(), startDate, endDate);
Map<Long, StudioVO> studioMap = studioRpcService.mapStudio( Set<Long> studioIds = Sets.newHashSet();
Lists.newArrayList(studioPayAmountMap.keySet())); studioIds.addAll(studioPayAmountMap.keySet());
studioIds.addAll(studioRefundAmountMap.keySet());
Map<Long, StudioVO> studioMap = studioRpcService.mapStudio(Lists.newArrayList(studioIds));
transactionTemplate.executeWithoutResult(action -> { transactionTemplate.executeWithoutResult(action -> {
MerchantSettleRecord record = SettleConvert.convertMerchantSettle(apply, vo); MerchantSettleRecord record = SettleConvert.convertMerchantSettle(apply, vo);
merchantSettleRecordRpService.insert(record); merchantSettleRecordRpService.insert(record);
studioSettleRecordRpService.insertAll( studioSettleRecordRpService.insertAll(
SettleConvert.convertStudioSettle(record, studioPayAmountMap, studioRefundAmountMap, SettleConvert.convertStudioSettle(record, studioPayAmountMap, studioRefundAmountMap, studioMap));
studioMap));
}); });
if (TransStateEnums.SUCCESS == TransStateEnums.getByCode(vo.getTransState())) { if (TransStateEnums.SUCCESS == TransStateEnums.getByCode(vo.getTransState())) {
// 结算成功,则更新收银流水状态为记录为入账成功 // 结算成功,则更新收银流水状态为记录为入账成功
......
...@@ -74,39 +74,48 @@ public class FeeUtil { ...@@ -74,39 +74,48 @@ public class FeeUtil {
BigDecimal fee1 = test33(payTransAmount, payActualAmount, payFee, refundAmount1, BigDecimal fee1 = test33(payTransAmount, payActualAmount, payFee, refundAmount1,
new BigDecimal("0")); new BigDecimal("0"));
BigDecimal refundActualAmount1 = MoneyUtil.subtract(refundAmount1, fee1);
BigDecimal historyRefundActualAmount1 = MoneyUtil.subtract(refundAmount1, fee1); BigDecimal historyRefundActualAmount1 = MoneyUtil.subtract(refundAmount1, fee1);
BigDecimal leftPayActualAmount1 = MoneyUtil.subtract(payActualAmount, historyRefundActualAmount1); BigDecimal leftPayActualAmount1 = MoneyUtil.subtract(payActualAmount, historyRefundActualAmount1);
System.out.println( System.out.println(
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 收款金额:\t" + payTransAmount + ",实收金额:\t" + payActualAmount + ",收款手续费:\t" ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 收款金额:\t" + payTransAmount + ",实收金额:\t" + payActualAmount + ",收款手续费:\t"
+ payFee + ",退款申请金额:\t" + refundAmount1 + ",手续费:\t" + fee1 + ",剩余实收金额:\t" + leftPayActualAmount1); + payFee + ",退款申请金额:\t" + refundAmount1 + ",手续费:\t" + fee1 + ",实退金额:\t" + refundActualAmount1 + ",剩余实收金额:\t" + leftPayActualAmount1);
BigDecimal fee2 = test33(payTransAmount, payActualAmount, payFee, refundAmount2, BigDecimal fee2 = test33(payTransAmount, payActualAmount, payFee, refundAmount2,
historyRefundActualAmount1); historyRefundActualAmount1);
BigDecimal historyRefundActualAmount2 = MoneyUtil.add(MoneyUtil.subtract(refundAmount2, fee2), BigDecimal refundActualAmount2 = MoneyUtil.subtract(refundAmount2, fee2);
historyRefundActualAmount1); BigDecimal historyRefundActualAmount2 = MoneyUtil.add(refundActualAmount2, historyRefundActualAmount1);
BigDecimal leftPayActualAmount2 = MoneyUtil.subtract(payActualAmount, historyRefundActualAmount2); BigDecimal leftPayActualAmount2 = MoneyUtil.subtract(payActualAmount, historyRefundActualAmount2);
System.out.println( System.out.println(
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 收款金额:\t" + payTransAmount + ",实收金额:\t" + payActualAmount + ",收款手续费:\t" ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 收款金额:\t" + payTransAmount + ",实收金额:\t" + payActualAmount + ",收款手续费:\t"
+ payFee + ",退款申请金额:\t" + refundAmount2 + ",手续费:\t" + fee2 + ",剩余实收金额:\t" + leftPayActualAmount2); + payFee + ",退款申请金额:\t" + refundAmount2 + ",手续费:\t" + fee2 + ",实退金额:\t" + refundActualAmount2 + ",剩余实收金额:\t" + leftPayActualAmount2);
BigDecimal fee3 = test33(payTransAmount, payActualAmount, payFee, refundAmount3, BigDecimal fee3 = test33(payTransAmount, payActualAmount, payFee, refundAmount3,
historyRefundActualAmount2); historyRefundActualAmount2);
BigDecimal historyRefundActualAmount3 = MoneyUtil.add(MoneyUtil.subtract(refundAmount3, fee3), BigDecimal refundActualAmount3 = MoneyUtil.subtract(refundAmount3, fee3);
historyRefundActualAmount2); BigDecimal historyRefundActualAmount3 = MoneyUtil.add(refundActualAmount3, historyRefundActualAmount2);
BigDecimal leftPayActualAmount3 = MoneyUtil.subtract(payActualAmount, historyRefundActualAmount3); BigDecimal leftPayActualAmount3 = MoneyUtil.subtract(payActualAmount, historyRefundActualAmount3);
System.out.println( System.out.println(
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 收款金额:\t" + payTransAmount + ",实收金额:\t" + payActualAmount + ",收款手续费:\t" ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 收款金额:\t" + payTransAmount + ",实收金额:\t" + payActualAmount + ",收款手续费:\t"
+ payFee + ",退款申请金额:\t" + refundAmount3 + ",手续费:\t" + fee3 + ",剩余实收金额:\t" + leftPayActualAmount3); + payFee + ",退款申请金额:\t" + refundAmount3 + ",手续费:\t" + fee3 + ",实退金额:\t" + refundActualAmount3 + ",剩余实收金额:\t" + leftPayActualAmount3);
BigDecimal fee4 = test33(payTransAmount, payActualAmount, payFee, refundAmount4, BigDecimal fee4 = test33(payTransAmount, payActualAmount, payFee, refundAmount4,
historyRefundActualAmount3); historyRefundActualAmount3);
BigDecimal historyRefundActualAmount4 = MoneyUtil.add(MoneyUtil.subtract(refundAmount4, fee4), BigDecimal refundActualAmount4 = MoneyUtil.subtract(refundAmount4, fee4);
historyRefundActualAmount3); BigDecimal historyRefundActualAmount4 = MoneyUtil.add(refundActualAmount4, historyRefundActualAmount3);
BigDecimal leftPayActualAmount4 = MoneyUtil.subtract(payActualAmount, historyRefundActualAmount4); BigDecimal leftPayActualAmount4 = MoneyUtil.subtract(payActualAmount, historyRefundActualAmount4);
System.out.println( System.out.println(
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 收款金额:\t" + payTransAmount + ",实收金额:\t" + payActualAmount + ",收款手续费:\t" ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 收款金额:\t" + payTransAmount + ",实收金额:\t" + payActualAmount + ",收款手续费:\t"
+ payFee + ",退款申请金额:\t" + refundAmount4 + ",手续费:\t" + fee4 + ",剩余实收金额:\t" + leftPayActualAmount4); + payFee + ",退款申请金额:\t" + refundAmount4 + ",手续费:\t" + fee4 + ",实退金额:\t" + refundActualAmount4 + ",剩余实收金额:\t" + leftPayActualAmount4);
BigDecimal fee5 = test33(payTransAmount, payActualAmount, payFee, refundAmount4,
historyRefundActualAmount4);
BigDecimal refundActualAmount5 = MoneyUtil.subtract(refundAmount4, fee5);
BigDecimal historyRefundActualAmount5 = MoneyUtil.add(refundActualAmount5, historyRefundActualAmount4);
BigDecimal leftPayActualAmount5 = MoneyUtil.subtract(payActualAmount, historyRefundActualAmount5);
System.out.println(
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 收款金额:\t" + payTransAmount + ",实收金额:\t" + payActualAmount + ",收款手续费:\t"
+ payFee + ",退款申请金额:\t" + refundAmount4 + ",手续费:\t" + fee5 + ",实退金额:\t" + refundActualAmount3 + ",剩余实收金额:\t" + leftPayActualAmount5);
} }
private static BigDecimal test33(BigDecimal payTransAmount, BigDecimal payActualAmount, BigDecimal payFee, private static BigDecimal test33(BigDecimal payTransAmount, BigDecimal payActualAmount, BigDecimal payFee,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment