// 每一次批量提交的投标审核一定是针对同一个产品,因此不会出现一批投标购买针对不同产品的情况 // 审核提交给第三方后,对第三方返回的执行结果参数的后续处理 @Override public void buyAuditSuccessHandle(List<String> loanNos) throws Exception { if (loanNos == null || loanNos.isEmpty()) { throw new Exception("审核返回列表为空"); } // 每一次批量提交的投标审核一定是针对同一个产品,因此取出第一条投标对应的产品,判断其状态,如果已经为还款中,则说明已经执行成功 String eLoanNo = loanNos.get(0); List<CashStream> eCashStreams = cashStreamDao.findSuccessByActionAndLoanNo(-1, eLoanNo); CashStream eCashStream = eCashStreams.get(0); Submit eSubmit = submitDao.find(eCashStream.getSubmitId()); Product product = productDao.find(eSubmit.getProductId()); GovermentOrder order = orderDao.find(product.getGovermentorderId()); Borrower borrower = borrowerDao.find(order.getBorrowerId()); if (Product.STATE_REPAYING == product.getState()) { // 产品已经处于还款状态,说明针对本产品的购买审核已经执行完毕 return; } for (String loanNo : loanNos) { List<CashStream> cashStreams = cashStreamDao.findSuccessByActionAndLoanNo(-1, loanNo); CashStream cashStream = cashStreams.get(0); if (cashStreams.size() == 2) { // 针对本个LoanNo,在平台上有两条执行成功的现金流与之对应,那肯定说明这次购买已经处理成功,一条冻结,一条转账 continue; // 重复的命令 } try { Integer cashStreamId = null; cashStreamId = accountService.pay( cashStream.getLenderAccountId(), borrower.getAccountId(), cashStream.getChiefamount().negate(), cashStream.getSubmitId(), "支付"); cashStreamDao.updateLoanNo(cashStreamId, loanNo, null); } catch (IllegalConvertException e) { e.printStackTrace(); } } // 校验 Product实际支付额=所有Lender的支付资金流之和 CashStreamSum sum = cashStreamDao.sumProduct(product.getId(), CashStream.ACTION_PAY); if (sum.getChiefAmount().negate().compareTo(product.getRealAmount()) != 0) throw new CheckException("投标购买审核完成总金额与产品实际融资金额不符,查看是否有尚未审核完毕的投标"); // 根据产品实际融资额度重新计算并更新还款计划 innerPayBackService.refreshPayBack(product.getId(), true); // 状态转换为还款中,及一系列后续操作 innerProductService.startRepaying(product.getId()); }
private void buyAuditReturnHandle(List<String> loanNos) throws Exception { if (loanNos == null || loanNos.isEmpty()) { throw new Exception("审核返回列表为空"); } // 每一次批量提交的投标审核一定是针对同一个产品,因此取出第一条投标对应的产品,判断其状态,如果已经为还款中,则说明已经执行成功 String eLoanNo = loanNos.get(0); List<CashStream> eCashStreams = cashStreamDao.findSuccessByActionAndLoanNo(-1, eLoanNo); CashStream eCashStream = eCashStreams.get(0); Submit eSubmit = submitDao.find(eCashStream.getSubmitId()); Product product = productDao.find(eSubmit.getProductId()); GovermentOrder order = orderDao.find(product.getGovermentorderId()); if (Product.STATE_QUITFINANCING == product.getState()) { // 产品已经处于流标状态,说明针对本产品的购买审核已经执行完毕 return; } for (String loanNo : loanNos) { List<CashStream> cashStreams = cashStreamDao.findSuccessByActionAndLoanNo(-1, loanNo); CashStream cashStream = cashStreams.get(0); if (cashStreams.size() == 2) { // 针对本个LoanNo,在平台上有两条执行成功的现金流与之对应,那肯定说明这次购买已经处理成功,一条冻结,一条流标解冻 continue; // 重复的命令 } try { Integer cashStreamId = null; cashStreamId = accountService.unfreezeLenderAccount( cashStream.getLenderAccountId(), cashStream.getChiefamount().negate(), cashStream.getSubmitId(), "流标"); cashStreamDao.updateLoanNo(cashStreamId, loanNo, null); } catch (IllegalConvertException e) { e.printStackTrace(); } } // 校验 Product实际流标解冻额=所有Lender的支付资金流之和 CashStreamSum sum = cashStreamDao.sumProduct(product.getId(), CashStream.ACTION_UNFREEZE); if (sum.getChiefAmount().compareTo(product.getRealAmount()) != 0) throw new CheckException("流标解冻总金额与产品实际融资金额不符,查看是否有尚未审核完毕的投标"); // 状态转换为流标,及一系列后续操作 innerProductService.quitFinancing(product.getId()); }