支付--后台设置自动选择账户扣除--4个账户依次支付

##福利子账户–其他账户–AC01依次扣除,如果所有的账户余额不够支付,剩余的直接微信支付

 //判断福利子账户金额是否大于支付金额
                    BigDecimal payMoney = jsonObject.getBigDecimal("bp"); //支付金额
                    int j = 0; // 支付顺序
                    //1、 福利子账户金额不为0
                    if (accoutnBalance.compareTo(BigDecimal.ZERO) == 1) {
                        // - 福利子账户金额 >= 支付总金额
                        if (accoutnBalance.compareTo(payMoney) > -1) {
                            // 福利子账户扣款金额 =  支付总金额
                            PayAccountInfo payAccountInfo = new PayAccountInfo();
                            payAccountInfo.setPayMoney(payMoney);
                            payAccountInfo.setSubAccountType(giveInfoR.getData().getClassifType2());
                            List<PayAccountInfo> payAccountInfoList = new ArrayList<>();
                            jdOrder.setChildAccountPayMoneyList(payAccountInfoList);
                            // 将支付总金额 设为0
                            payMoney = BigDecimal.ZERO;
                        } else {
                            // 福利子账户全扣
                            // 福利子账户扣款金额 =  支付总金额
                            PayAccountInfo payAccountInfo = new PayAccountInfo();
                            if (map.get(giveInfoR.getData().getClassifType2()) != null) {
                                payAccountInfo.setPayMoney(accoutnBalance);
                                payAccountInfo.setSubAccountNo(map.get(giveInfoR.getData().getClassifType2()).getSubAcntNo());
                                payAccountInfo.setSubAccountType(giveInfoR.getData().getClassifType2());
                                List<PayAccountInfo> payAccountInfoList = new ArrayList<>();
                                jdOrder.setChildAccountPayMoneyList(payAccountInfoList);
                                //支付金额 = 支付金额 - 福利子账户金额
                                payMoney = payMoney.subtract(accoutnBalance);
                            }
                        }
                    }
                    //2、判断其他子账户金额不为0 支付总金额大于0
                    if (acOtherBalance.compareTo(BigDecimal.ZERO) == 1 && payMoney.compareTo(BigDecimal.ZERO) == 1) {
                        if (acOtherBalance.compareTo(payMoney) > -1) {
                            //2、1 定义一个 需要扣除的金额 只扣除了部分子账户金额
                            BigDecimal waitPayMoney = BigDecimal.ZERO;
                            List<PayAccountInfo> payAccountInfoList = new ArrayList<>();
                            for (int i = 0; i < ordinaryAccountDeployList.size(); i++) {
                                //判断账户余额是否为0
                                SubAccount4UserQuery subAccount4UserQuery = map.get(ordinaryAccountDeployList.get(i));
                                if (subAccount4UserQuery != null) {
                                    if (new BigDecimal(subAccount4UserQuery.getSubAcntBalance()).compareTo(BigDecimal.ZERO) == 1) {
                                        //waitPayMoney金额+ 下一个支付账户金额 大于等于支付金额 则停止
                                        if (waitPayMoney.add(new BigDecimal(subAccount4UserQuery.getSubAcntBalance())).compareTo(payMoney) > -1) {
                                            PayAccountInfo payAccountInfo = new PayAccountInfo();
                                            payAccountInfo.setPayMoney(payMoney.subtract(accoutnBalance).subtract(waitPayMoney));
                                            payAccountInfo.setSubAccountNo(subAccount4UserQuery.getSubAcntNo());
                                            payAccountInfo.setSubAccountType(ordinaryAccountDeployList.get(i).getSubAccountType());
                                            payAccountInfo.setSort(j++);
                                            payAccountInfoList.add(payAccountInfo);
                                        } else {
                                            PayAccountInfo payAccountInfo = new PayAccountInfo();
                                            payAccountInfo.setPayMoney(new BigDecimal(subAccount4UserQuery.getSubAcntBalance()));
                                            payAccountInfo.setSubAccountNo(subAccount4UserQuery.getSubAcntNo());
                                            payAccountInfo.setSubAccountType(ordinaryAccountDeployList.get(i).getSubAccountType());
                                            payAccountInfo.setSort(j++);
                                            payAccountInfoList.add(payAccountInfo);
                                            waitPayMoney.add(new BigDecimal(subAccount4UserQuery.getSubAcntBalance()));
                                        }
                                    }
                                }
                            }
                            jdOrder.setOrdinaryAccountPayMoneyList(payAccountInfoList);
                            payMoney = BigDecimal.ZERO;
                        } else {
                            //2、2 其他子账户的钱全扣除
                            List<PayAccountInfo> payAccountInfoList = new ArrayList<>();
                            for (int i = 0; i < ordinaryAccountDeployList.size(); i++) {
                                //判断账户余额是否为0
                                SubAccount4UserQuery subAccount4UserQuery = map.get(ordinaryAccountDeployList.get(i).getSubAccountType());
                                if (subAccount4UserQuery != null) {
                                    if (new BigDecimal(subAccount4UserQuery.getSubAcntBalance()).compareTo(BigDecimal.ZERO) == 1) {
                                        PayAccountInfo payAccountInfo = new PayAccountInfo();
                                        payAccountInfo.setPayMoney(new BigDecimal(subAccount4UserQuery.getSubAcntBalance()));
                                        payAccountInfo.setSubAccountNo(subAccount4UserQuery.getSubAcntNo());
                                        payAccountInfo.setSubAccountType(ordinaryAccountDeployList.get(i).getSubAccountType());
                                        payAccountInfo.setSort(i);
                                        payAccountInfoList.add(payAccountInfo);
                                    }
                                }
                            }
                            jdOrder.setOrdinaryAccountPayMoneyList(payAccountInfoList);
                            //2、3 剩余支付金额 = 支付金额 - 需要扣除的金额
                            payMoney = payMoney.subtract(acOtherBalance);
                        }
                    }
                    //3、2如果AC01金额不为0  支付总金额大于0
                    if (acOneBalance.compareTo(BigDecimal.ZERO) == 1 && payMoney.compareTo(BigDecimal.ZERO) == 1) {
                        SubAccount4UserQuery subAccount4UserQuery = map.get("AC01");
                        if (subAccount4UserQuery != null) {
                            //AC01  >= 支付金额
                            List<PayAccountInfo> payAccountInfoList = new ArrayList<>();
                            if (acOneBalance.compareTo(payMoney) > -1) {
                                //扣除部分AC01账户金额
                                PayAccountInfo payAccountInfo = new PayAccountInfo();
                                payAccountInfo.setPayMoney(payMoney);
                                payAccountInfo.setSubAccountType("AC01");
                                payAccountInfo.setSubAccountNo(subAccount4UserQuery.getSubAcntNo());
                                payAccountInfo.setSort(j);
                                payAccountInfoList.add(payAccountInfo);
                            } else {
                                //扣除全部AC01账户金额
                                PayAccountInfo payAccountInfo = new PayAccountInfo();
                                payAccountInfo.setPayMoney(new BigDecimal(subAccount4UserQuery.getSubAcntBalance()));
                                payAccountInfo.setSubAccountNo(subAccount4UserQuery.getSubAcntNo());
                                payAccountInfo.setSubAccountType("AC01");
                                payAccountInfo.setSort(j);
                                payAccountInfoList.add(payAccountInfo);
                            }
                            jdOrder.setOrdinaryAccountPayMoneyList(payAccountInfoList);
                        }
                        //2、3 剩余支付金额 = 支付金额 - 需要扣除的金额
                        payMoney = payMoney.subtract(acOneBalance);
                    }
                    //4、如果支付总金额 > AC01金额+福利子账户金额+其他子账户金额   支付总金额大于0
                    if (payMoney.compareTo(BigDecimal.ZERO) == 1) {
                        //微信支付
                    }
                    R r = jdOrderApi.insertData(jdOrder);
                    if (!r.ifSuccess()) {
                        throw new Exception("添加订单操作失败");
                    }
                }
            }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值