Commit 0036c556 by 程裕兵

feat:refund

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