|
@@ -79,6 +79,7 @@ public class SplitAccountService extends BaseService {
|
|
HashMap<String, BigDecimal> sbm = new HashMap<>();
|
|
HashMap<String, BigDecimal> sbm = new HashMap<>();
|
|
for (SplitAccountPo splitAccountPo : splitBillDetail) {
|
|
for (SplitAccountPo splitAccountPo : splitBillDetail) {
|
|
String subUserNo = splitAccountPo.getSubUserNo();
|
|
String subUserNo = splitAccountPo.getSubUserNo();
|
|
|
|
+ // 计算当前商户号总分账金额
|
|
if (sbm.containsKey(subUserNo)) {
|
|
if (sbm.containsKey(subUserNo)) {
|
|
BigDecimal v = MathUtil.add(sbm.get(subUserNo), splitAccountPo.getSplitAccount());
|
|
BigDecimal v = MathUtil.add(sbm.get(subUserNo), splitAccountPo.getSplitAccount());
|
|
sbm.put(subUserNo, v);
|
|
sbm.put(subUserNo, v);
|
|
@@ -89,6 +90,7 @@ public class SplitAccountService extends BaseService {
|
|
if (subUserNo.equals(shopOrder.getSplitCode())) {
|
|
if (subUserNo.equals(shopOrder.getSplitCode())) {
|
|
splitAccountPo.setMbOrderId(orderRelation.getMbOrderId());
|
|
splitAccountPo.setMbOrderId(orderRelation.getMbOrderId());
|
|
splitAccountPo.setOrderRequestNo(orderRelation.getOrderRequestNo());
|
|
splitAccountPo.setOrderRequestNo(orderRelation.getOrderRequestNo());
|
|
|
|
+ // 供应商自己收款,此部分金额留在自己商户号,作为成本分账
|
|
splitAccountPo.setPayStatus(1);
|
|
splitAccountPo.setPayStatus(1);
|
|
// 保存分账详情
|
|
// 保存分账详情
|
|
newOrderDao.insertSplitAccount(splitAccountPo);
|
|
newOrderDao.insertSplitAccount(splitAccountPo);
|
|
@@ -96,7 +98,11 @@ public class SplitAccountService extends BaseService {
|
|
}
|
|
}
|
|
ArrayList<AccountPayOrder.AccountPayOrderExt.SplitBillRule> splitBillRules = new ArrayList<>();
|
|
ArrayList<AccountPayOrder.AccountPayOrderExt.SplitBillRule> splitBillRules = new ArrayList<>();
|
|
sbm.forEach((key, value) -> {
|
|
sbm.forEach((key, value) -> {
|
|
- // 不是自己的splitcode分走,是自己的不动
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 不是自己的splitcode分走,是自己的不动
|
|
|
|
+ * 把成本之外的金额加入splitRule分账参数,延续上面逻辑,供应商自己的成本由自己的商户号收款,
|
|
|
|
+ * 自己成本部分不需要加入分账参数,仅需在else中做业务表参数处理
|
|
|
|
+ */
|
|
if (!key.equals(shopOrder.getSplitCode())) {
|
|
if (!key.equals(shopOrder.getSplitCode())) {
|
|
//佣金
|
|
//佣金
|
|
AccountPayOrder.AccountPayOrderExt.SplitBillRule splitBillRule = new AccountPayOrder.AccountPayOrderExt.SplitBillRule();
|
|
AccountPayOrder.AccountPayOrderExt.SplitBillRule splitBillRule = new AccountPayOrder.AccountPayOrderExt.SplitBillRule();
|
|
@@ -182,6 +188,10 @@ public class SplitAccountService extends BaseService {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
+ /**
|
|
|
|
+ * 在上述else代码逻辑中已完成成本的业务表参数处理,在分账详情中排除成本,剩余佣金部分在分账结束收到
|
|
|
|
+ * 成功返回码时处理(成本不参与分账)
|
|
|
|
+ */
|
|
splitBillDetail.removeIf(s -> s.getSubUserNo().equals(shopOrder.getSplitCode()));
|
|
splitBillDetail.removeIf(s -> s.getSubUserNo().equals(shopOrder.getSplitCode()));
|
|
if (null != splitBillRules && splitBillRules.size() > 0) {
|
|
if (null != splitBillRules && splitBillRules.size() > 0) {
|
|
//第三方分账接口
|
|
//第三方分账接口
|
|
@@ -198,9 +208,9 @@ public class SplitAccountService extends BaseService {
|
|
accountPayOrder.setP5_customerNumber(shopOrder.getSplitCode());
|
|
accountPayOrder.setP5_customerNumber(shopOrder.getSplitCode());
|
|
AccountPayOrder.AccountPayOrderExt accountPayOrderExt = new AccountPayOrder.AccountPayOrderExt();
|
|
AccountPayOrder.AccountPayOrderExt accountPayOrderExt = new AccountPayOrder.AccountPayOrderExt();
|
|
//收款账户商编 填写splitBillRules时候不填写MerchantNo,Amount并且即使填写这两个参数不生效!!
|
|
//收款账户商编 填写splitBillRules时候不填写MerchantNo,Amount并且即使填写这两个参数不生效!!
|
|
-// accountPayOrderExt.setInMerchantNo(splitMoneyVo.getName());
|
|
|
|
|
|
+ //accountPayOrderExt.setInMerchantNo(splitMoneyVo.getName());
|
|
|
|
+ //accountPayOrderExt.setAmount(splitMoneyVo.getSplitMoney());
|
|
accountPayOrderExt.setOrderType(AccountPayOrderType.TRANSFER);
|
|
accountPayOrderExt.setOrderType(AccountPayOrderType.TRANSFER);
|
|
-// accountPayOrderExt.setAmount(splitMoneyVo.getSplitMoney());
|
|
|
|
accountPayOrderExt.setServerCallbackUrl(Constant.prodSplit);
|
|
accountPayOrderExt.setServerCallbackUrl(Constant.prodSplit);
|
|
accountPayOrderExt.setGoodsName("分账");
|
|
accountPayOrderExt.setGoodsName("分账");
|
|
if (null != splitBillRules && splitBillRules.size() > 0) {
|
|
if (null != splitBillRules && splitBillRules.size() > 0) {
|
|
@@ -314,10 +324,15 @@ public class SplitAccountService extends BaseService {
|
|
//成本+税费
|
|
//成本+税费
|
|
costPrice = MathUtil.add(costPrice, payableTax).doubleValue();
|
|
costPrice = MathUtil.add(costPrice, payableTax).doubleValue();
|
|
}
|
|
}
|
|
|
|
+ /**
|
|
|
|
+ * todo
|
|
|
|
+ * 出于兼容性考虑,且多次支付手续费不同,分账方式为循环每次支付记录,
|
|
|
|
+ * 当前业务满足子订单支付完成才进行分账,可以循环子订单统计支付金额,
|
|
|
|
+ * 进行一次性分账,在当前模式下如果用户分多次支付,精度损失问题较为常见。
|
|
|
|
+ */
|
|
// 判断是否支付过
|
|
// 判断是否支付过
|
|
Double paidAmount = newOrderDao.getOrderProductPaidAmount(orderProduct.getOrderProductId());
|
|
Double paidAmount = newOrderDao.getOrderProductPaidAmount(orderProduct.getOrderProductId());
|
|
// 支付过金额大于0
|
|
// 支付过金额大于0
|
|
- //有已付
|
|
|
|
if (null != paidAmount && MathUtil.compare(paidAmount, 0) > 0) {
|
|
if (null != paidAmount && MathUtil.compare(paidAmount, 0) > 0) {
|
|
//已付>0,成本-已付
|
|
//已付>0,成本-已付
|
|
costPrice = MathUtil.sub(costPrice, paidAmount).doubleValue();
|
|
costPrice = MathUtil.sub(costPrice, paidAmount).doubleValue();
|