From 40222ba23963b2de5bb025e18624714f04df1499 Mon Sep 17 00:00:00 2001 From: HH Date: Thu, 21 Jul 2022 16:33:27 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E5=88=86=E8=B4=A6=E6=97=B6?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=90=8C=E4=B8=80=E4=B8=AA=E8=B4=A6=E6=88=B7?= =?UTF-8?q?=E7=9A=84=E5=A4=9A=E4=B8=AA=E5=AD=90=E8=B4=A2=E5=8A=A1=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/OrderMasterServiceImpl.java | 47 +++++++++++-------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java index b199f660..e4ff4008 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java @@ -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 financialDetails = financialDetailService.selectByFinancialMasterId(financialMaster.getId()); - // 分账账户 - ArrayList divMembers = new ArrayList<>(); - // 需要自动提现的账户 - ArrayList autoDrawCashMembers = new ArrayList<>(); // 校验金额 主财务单的金额减去所有子财务单的金额是否=0 BigDecimal checkMoney = financialMaster.getPayMoney(); // 确认支付金额 = 主财务单付款金额 - 退款金额 BigDecimal confirmAmt = financialMaster.getPayMoney(); + + // key:memberId(分账账户ID) value:分账金额 + HashMap 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 divMembers = new ArrayList<>(); + // 需要自动提现的账户 + ArrayList autoDrawCashMembers = new ArrayList<>(); + for (Map.Entry 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());