##福利子账户–其他账户–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("添加订单操作失败");
}
}
}