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