资金确认JOB
2024-05-24 17:58:52 0 举报
资金确认JOB
作者其他创作
大纲/内容
核心逻辑历史功能的实现 && 基于历史功能实现逻辑
参数申明:List<TodoRunRecordModel> batch方法结束返回该参数
数据来源
构建financeConfirmData对象1.sonList参数申明:开票金额与关联金额差额surplus=ticket.realOpenTicketMoney -减 ticket.bankRelationMoney发生金额与关联金额差额debit=bankFlow.debit -减 bankFlow.connectMoney
是
否
前置条件:1.appIds不为空2.appIds.size() == 13.appId不包含A
跳出第一层allBankFlows,执行下一次循环
return:true
查询tb_ticket_connect_bank_info表(条件:)bank_id---银行账单ID、is_disable---状态:0:正常
allBankFlows.removeAll(filterBankFlow)对已经有关联关系的数据进行去重
完全匹配的加款
unMatchedAddFunds--执行方法返回List<TodoRunRecordModel> todoRunRecordModels
已关联的账户余额总额:totalConnectMoney=累加connect_money---银行账单关联金额
逻辑判断 金额是否相等:debit.compareTo(surplus) == 0
跳出第二层needMatchTicketDetail,执行下一次循环
查询tb_ticket_connect_settle_info表数据发票申请与结算单关联表
结束
详细流程
再查询账户汇款单判断,是否已经加款(条件:bankFlowId),汇款单是否为空
返回空集合
入参param
financeMatchedData--执行方法处理流水表数据和发票数据完全匹配的数据
打印日志
更新linkSettleReturnMap--ticketSettleBindDto.newReturnMoney值逻辑:newReturnMoney---usedHistory:使用历史+minMatch:最小值
第二层 遍历集合:reciprocalAccountName-companyId
tb_ticket_apply_detail 发票申请表
参数说明:1.linkSettleReturnMap2.TicketConnectSettleModel---第一层集合对象3.usedHistory---已经使用的额度4.minMatch---最小的值
1.构建TodoRunRecordModel对象2.发送钉钉任务
结束TODO流程,调用综合运营平台接口
allBankFlows分组,每1000条
ticketSettleBindDto是否为空
前置条件:1.connectMoney.compareTo(BigDecimal.ZERO) > 0满足条件1.TicketConnectSettleModel model = tSettleResponse.get(0);// 获取当前关联但已经使用的额度 TicketSettleBindDto ticketSettleBindDto---linkSettleReturnMap获取对象usedHistory = ticketSettleBindDto为空BigDecimal.ZERO,不为空ticketSettleBindDto.getNewReturnMoney()
TbTicketApplyModel ticket = needMatchTicketDetail.get(index)参数申明:开票金额与关联金额差额surplus=ticket.realOpenTicketMoney -减 ticket.bankRelationMoney发生金额与关联金额差额debit=bankFlow.debit -减 bankFlow.connectMoney
临时参数:1.ticketUsedIndex添加index2.filterBankFlow添加bankFlow接着构建financeConfirmData对象1.bankFlowModel---bankFlow2.ticketApplyDetail---needMatchTicketDetail.get(index)结束第二层needMatchTicketDetail
后续流程同 matchFullLogic 方法
结果不为空
前置条件:appInfos.get(0)1.批量插入tb_run_todo_record2.走人工加款,发送钉钉代办任务
逻辑判断 是否包含:ticketUsedIndex.contains(needMatchTicketList.index)
判断关联单子剩余额度是否大于需要回款金额currentSubMoney.compareTo(sStatistic.getNeedReturnMoney()) >= 0
逻辑判断 发票申请表子数据是否为空:TbTicketApplyModel ticket = needMatchTicketDetail.get(index)1.查询tb_ticket_apply_detail表(条件:parent_id---父id、client_name---客户名称、ticketCompanyId),返回sonList
1.前置条件,applyName特定格式(xxx)2.则按照xxx查询appInfo
matchSettleBindMethod方法返回boolean
入参构建:1.allBankFlows2.查询tb_ticket_apply_detail表,条件ticketCompanyId---开票主体B编号、refundBankName---回款银行名称、confirmBankName---资金确认后的回款银行名称,返回历史匹配集合hisClientNames3.查询tb_ticket_apply_detail表,条件params.emptyBankRelationMoney=0、ticketCompanyId---开票主体B编号、hisClientNames---历史匹配集合,返回历史开票集合ticketHistory
线下申请 applyName 不为空
遍历集合--确定匹配的数据集合:List<FinanceConfirmData> confirmMatchData
根据bankFlow参数参数查询,条件如下:一、固定条件1.status---数据状态非 1:资金确认手动关闭2.send_status---任务发送状态 0:未发送(或者为空)3.debit:贷方发生额(收入)>connect_money:关联金额4.company_id---归属公司 ouFei为空or为null5.reciprocal_account_name---对方开户名为空6.reciprocal_account_no---对方账号为空or为null7.bank_account_no---我司银行账户为空or为null二、动态传入参数1.reciprocalAccountNameNotIn--》not in(reciprocal_account_name---对方开户名)2.reciprocalAccountNameNotLike--》not like(reciprocal_account_name---对方开户名)3.dataSource---1:银企直联
执行doLinkSettleReturn
// 当前关联单子剩余额度(tb_ticket_connect_settle_info) = 总额度 减去已经回款的 && 当前已经操作过的数据currentSubMoney=tb_ticket_connect_settle_info.settle_connect_money(结算关联金额) -减tb_ticket_connect_settle_info.return_money(回款金额) -减 usedHistory(使用历史)
批量插入 todoRunRecordModels
matchFullLogic--方法执行
遍历bankFlowModels集合
第一层 遍历集合:allBankFlows参数申明:1.List<Integer> ticketUsedIndex2.List<BankFlowModel> filterBankFlow
1.批量插入tb_run_todo_record2.走人工加款,发送钉钉代办任务
第二层 遍历集合:needMatchTicketList
matchTicketConnectBank详细说明
执行update方法资金确认更新数据方法
查询条件1.rt_id---对账单id
1.将总的关联金额更新到对应的主单中,更新tb_ticket_apply_detail表(条件:id),bank_relation_money---银行账单关联金额2.跳出第二层needMatchTicketDetail,执行下一次循环
入参构建:1.allBankFlows2.查询tb_ticket_apply_detail表,条件ticketCompanyId---开票主体B编号、refundBankName---回款银行名称,返回需要开票的集合needMatchTicket
方法详细逻辑
说明
前置条件:SettleStatisticsModel.id==list集合里面对象的id更新集合里面对象diffMoney操作:settleStatisticsBindDto.setDiffMoney=原值+minMatch:最小的值最后:break循环
第一层 遍历集合:reciprocalAccountName
是:usedHistory=BigDecimal.ZERO
金额汇总:总关联金额totalConnectMoney=sonList.bankRelationMoney 累加总开票金额totalTicketMoney=sonList.realOpenTicketMoney 累加逻辑判断(主单的金额与其子单的总金额不等的情况下,直接跳过):totalTicketMoney.compareTo(ticket.getRealOpenTicketMoney()) != 0
参数申明:List<FinanceReconBean> financeReconBeans
unMatchedConfirmDate--执行方法不完全配置的数据
return:false
遍历集合--来源最外层:List<SettleStatisticsBindDto> list
1.只有一个app_id 走自动加款 掉账务dubbo接口2.更新tb_bank_flow(条件:id),payOrderId---账务交易单号、addFundStatus---信用点的加款状态
判断是否存在加款记录checkIsAddFund(bankFlowModel)--执行方法
资金确认
return:true
分页处理,每次2000条
后续流程同 matchFullLogicParent 方法
1.occurDateStart:发生日期起止时间(参数不能空,为空直接终止)2.dataSource:默认值--1:银企直联bankFlow参数组装(查询tb_settle_config固定参数---finance.job.filter)1.reciprocalAccountNameNotIn:\"南京一键通电子商务有限公司\
parentId是否为空
加款前判断,该条流水是否是客服工单拒绝状态
遍历集合:ticketWithReconsIds(对账单id)
appInfos是否为空
当前关联金额已经大于账单流水totalConnectMoney.compareTo(bankFlowModel.debit) >= 0
查询tb_ticket_connect_recon_info表数据发票申请与对账单关联表
逻辑判断 (历史匹配集合 或 历史开票集合为空):isEmpty(hisClientNames) or isEmpty(ticketHistory)
第一层 遍历集合:List<TicketConnectSettleModel> tSettleResponse参数:List<Long> contains = list.stream() .map(t -> t.getSettleStatistics().getId()) .collect(Collectors.toList());
返回 confirmMatchData
1.调账务查询汇款单信息(条件:payOrderId--账务交易单号)。2.如果存在,先进行查询BD 然后进行查询申请者。3.不存在,打印日志“资金确认根据银行流水payOrderId未查询到对应的账务汇款单信息”,跳过循环(List<FinanceConfirmData> confirmMatchData)
遍历结束
跳过,执行下一次
逻辑判断(总关联金额不等于0):totalConnectMoney.compareTo(BigDecimal.ZERO) != 0
第一层 遍历集合:allBankFlows 结束
跳出,执行下一次循环
执行dealIsAutoAddFund方法
存在多个appId, 发送代办任务,构建TodoRunRecordModel对象
查询tb_bank_flow数据
contains.add(SettleStatisticsModel.id)
// 取出最小的值minMatch = sStatistic.getNeedReturnMoney().compareTo(connectMoney) >= 0 ? connectMoney: sStatistic.getNeedReturnMoney();// 关联金额赋值connectMoney = connectMoney.subtract(minMatch);
return:false
否:usedHistory=ticketSettleBindDto.newReturnMoney
true
无加款记录dealIsAutoAddFundUNMatched
包含
满足下面任意条件即可1.当前关联单子剩余额度---currentSubMoney.compareTo(BigDecimal.ZERO) <= 02.传入的关联金额---connectMoney.compareTo(BigDecimal.ZERO) <= 03.需要回款金额---tb_settle_detail_statistics.need_return_money.compareTo(BigDecimal.ZERO)<= 0
查询tb_settle_detail_statistics表数据
checkIsAddFund--执行方法判断该条数据是否是客服工单拒绝
1.走自动加款 掉账务dubbo接口2.更新tb_bank_flow(条件:id),payOrderId---账务交易单号、addFundStatus---信用点的加款状态
是:传入主键id
执行settleBindDto方法进行汇集settle数据
方法详细说明
qryBindBdList根据bankFlowModel返回appInfos
// 取出最小的值minMatch = currentSubMoney.compareTo(connectMoney) >= 0 ? connectMoney: currentSubMoney;// 关联金额赋值connectMoney = connectMoney.subtract(minMatch);接下来逻辑同--是的流程
linkSettleReturnMap是否包含TicketConnectSettleModel.id
contains包含SettleStatisticsModel.id
参数申明:FinanceReconBean beanList<Integer> statusList
appInfos.size() = 1appid只有一个
获取当前关联但已经使用的额度 TicketSettleBindDto ticketSettleBindDto = linkSettleReturnMap.get(tb_ticket_connect_settle_info.id);
matchHis--方法执行
matchHisParent--方法执行
查询条件1.ticket_id---TicketApplyDetail.id2.is_disable---0:正常
判断匹配的发票的app_id 是否存在多个
前置条件:List<SettleStatisticsBindDto> list不为空取第一条SettleStatisticsBindDto settleStatisticsBindDto = list.get(0);更新diffMoney:差异金额settleStatisticsBindDto.getDiffMoney() 为 空 BigDecimal.ZEROsettleStatisticsBindDto.getDiffMoney() 不为空 settleStatisticsBindDto.getDiffMoney()).add(connectMoney)
方法说明
1.查询集合数据rtStatusList,不在配置key=finance.reconnode状态集中,则添加到statusList2.statusList构建到FinanceReconBean中,并添加到financeReconBeans
doLinkSettleReturn方法--构建linkSettleReturnMap
逻辑判断 (历史匹配集合 或 历史开票集合为空):isEmpty(hisClientNames) or isEmpty(ticketHistory)
绑定bd数据来源于回款银行appInfos是否为空
matchFullLogicParent--方法执行
查询tb_recon_task_record_node表数据
作为执行方法入参
集合是否为空
1.首先校验该条银行流水是否已经加款或加款中(addFundStatus=0 or addFundStatus=1)2.加款中直接返回3.已加款,发送一条已加款并成功关联发票的通知,查不到资金流水也会打印错误日志
核心处理逻辑 && 完全匹配的数据 直接进行更新数据表&关联表
参数说明
不包含
BindBdDTO.sources是否 回款公司
dealIsAutoAddFundUNMatched
第二层 遍历集合:List<SettleStatisticsModel> settleStatisticsModels
判断是否已经处理完成
1.向BD发送一条银行流水已成功关联发票已成功加款的通知2.更新tb_bank_flow表(条件:id),payOrderId---账务交易单号、addFundStatus---信用点的加款状态
否:传入parentId
集合再按照-font color=\"#e74f4c\
第二层 遍历集合:needMatchTicketList
判断匹配的发票的app_id 是否为空
校验该条银行流水是否已经加款(条件:payOrderId---不为空,addFundStatus---1:已加款)
查询条件1.settle_connect_money:结算关联金额> return_money:回款金额2.is_disable---0:正常3.ticket_id---发票申请表ID
再判断“支付订单是否已经关闭或者退款”(条件:refundStatus=1 or payStatus=3 or payStatus=2)
1.批量插入tb_run_todo_record(todoType=6)
发送资金组任务,构建TodoRunRecordModel对象
前置条件:1.reciprocalAccountNo为空(对方账号)2.bankAccountNo为空
查询条件1.id---tb_ticket_connect_settle_info.settleId:结算单ID
参数申明:List<TodoRunRecordModel> batch
集合按照-font color=\"#e74f4c\
遍历集合,执行
收藏
0 条评论
下一页