确认分账时合并同一个账户的多个子财务单
This commit is contained in:
parent
67621c8250
commit
40222ba239
|
|
@ -29,9 +29,7 @@ import org.springframework.util.Assert;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -145,41 +143,33 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
||||||
|
|
||||||
// 用子财务单组成分账信息
|
// 用子财务单组成分账信息
|
||||||
List<FinancialDetail> financialDetails = financialDetailService.selectByFinancialMasterId(financialMaster.getId());
|
List<FinancialDetail> financialDetails = financialDetailService.selectByFinancialMasterId(financialMaster.getId());
|
||||||
// 分账账户
|
|
||||||
ArrayList<DivMember> divMembers = new ArrayList<>();
|
|
||||||
// 需要自动提现的账户
|
|
||||||
ArrayList<DivMember> autoDrawCashMembers = new ArrayList<>();
|
|
||||||
// 校验金额 主财务单的金额减去所有子财务单的金额是否=0
|
// 校验金额 主财务单的金额减去所有子财务单的金额是否=0
|
||||||
BigDecimal checkMoney = financialMaster.getPayMoney();
|
BigDecimal checkMoney = financialMaster.getPayMoney();
|
||||||
// 确认支付金额 = 主财务单付款金额 - 退款金额
|
// 确认支付金额 = 主财务单付款金额 - 退款金额
|
||||||
BigDecimal confirmAmt = financialMaster.getPayMoney();
|
BigDecimal confirmAmt = financialMaster.getPayMoney();
|
||||||
|
|
||||||
|
// key:memberId(分账账户ID) value:分账金额
|
||||||
|
HashMap<String, BigDecimal> memberMap = new HashMap<>();
|
||||||
|
|
||||||
for (FinancialDetail financialDetail : financialDetails) {
|
for (FinancialDetail financialDetail : financialDetails) {
|
||||||
checkMoney = checkMoney.subtract(financialDetail.getPayMoney());
|
checkMoney = checkMoney.subtract(financialDetail.getPayMoney());
|
||||||
String memberId, amount;
|
String memberId;
|
||||||
DivMember member;
|
|
||||||
switch (financialDetail.getFinancialDetailType()) {
|
switch (financialDetail.getFinancialDetailType()) {
|
||||||
case 0:
|
case 0:
|
||||||
// 上门师傅结单 分账同下
|
// 上门师傅结单 分账同下
|
||||||
case 1:
|
case 1:
|
||||||
// 大师傅/店铺提成
|
// 大师傅/店铺提成
|
||||||
memberId = AdapayUtils.getWorkerMemberId(financialDetail.getPayeeId(), orderMaster.getDeptId());
|
memberId = AdapayUtils.getWorkerMemberId(financialDetail.getPayeeId(), orderMaster.getDeptId());
|
||||||
amount = AdapayUtils.bigDecimalToString(financialDetail.getPayMoney());
|
memberMap.merge(memberId, financialDetail.getPayMoney(), BigDecimal::add);
|
||||||
member = new DivMember(memberId, amount, false);
|
|
||||||
divMembers.add(member);
|
|
||||||
autoDrawCashMembers.add(member);
|
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
// 平台提成 并且是手续费承担方
|
// 平台提成 并且是手续费承担方
|
||||||
amount = AdapayUtils.bigDecimalToString(financialDetail.getPayMoney());
|
memberMap.merge("0", financialDetail.getPayMoney(), BigDecimal::add);
|
||||||
divMembers.add(new DivMember("0", amount, true));
|
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
// 分销
|
// 分销
|
||||||
memberId = AdapayUtils.getCustomerMemberId(financialDetail.getPayeeId(), orderMaster.getDeptId());
|
memberId = AdapayUtils.getCustomerMemberId(financialDetail.getPayeeId(), orderMaster.getDeptId());
|
||||||
amount = AdapayUtils.bigDecimalToString(financialDetail.getPayMoney());
|
memberMap.merge(memberId, financialDetail.getPayMoney(), BigDecimal::add);
|
||||||
member = new DivMember(memberId, amount, false);
|
|
||||||
divMembers.add(member);
|
|
||||||
autoDrawCashMembers.add(member);
|
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
// 退款
|
// 退款
|
||||||
|
|
@ -192,6 +182,25 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
||||||
// 这里校验一次主财务单的金额减去所有子财务单的金额是否=0
|
// 这里校验一次主财务单的金额减去所有子财务单的金额是否=0
|
||||||
Assert.isTrue(BigDecimal.ZERO.compareTo(checkMoney) == 0, "订单异常,请稍后再试");
|
Assert.isTrue(BigDecimal.ZERO.compareTo(checkMoney) == 0, "订单异常,请稍后再试");
|
||||||
|
|
||||||
|
// 分账账户
|
||||||
|
ArrayList<DivMember> divMembers = new ArrayList<>();
|
||||||
|
// 需要自动提现的账户
|
||||||
|
ArrayList<DivMember> autoDrawCashMembers = new ArrayList<>();
|
||||||
|
for (Map.Entry<String, BigDecimal> entry : memberMap.entrySet()) {
|
||||||
|
String memberId = entry.getKey();
|
||||||
|
BigDecimal money = entry.getValue();
|
||||||
|
String amount = AdapayUtils.bigDecimalToString(money);
|
||||||
|
if ("0".equals(memberId)) {
|
||||||
|
// 0是平台账户 只参与分账 不自动提现
|
||||||
|
divMembers.add(new DivMember("0", amount, true));
|
||||||
|
} else {
|
||||||
|
DivMember member = new DivMember(memberId, amount, false);
|
||||||
|
divMembers.add(member);
|
||||||
|
autoDrawCashMembers.add(member);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
JSONObject response = adapayService.paymentConfirm(orderMaster.getDeptId(), payment.getId(), payment.getOrderNo(),
|
JSONObject response = adapayService.paymentConfirm(orderMaster.getDeptId(), payment.getId(), payment.getOrderNo(),
|
||||||
AdapayUtils.bigDecimalToString(confirmAmt), divMembers, null, null);
|
AdapayUtils.bigDecimalToString(confirmAmt), divMembers, null, null);
|
||||||
logger.info("订单[code={}]分账结果: {}", orderMaster.getCode(), response.toJSONString());
|
logger.info("订单[code={}]分账结果: {}", orderMaster.getCode(), response.toJSONString());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue