project-ask

项目专题

系统1

系统数据流转

任务执行流程

// 大体流程
1. 从原始借据表bp_collect_loan_src同步数据到bp_collect_loan,同步批次号为batch_no的数据。(同步数据时,每个线程处理数量默认为10000,若是当前批次数据量超过10000,会采用多线程来执行)
2. 针对每一个原始借据,数据库里面只有可能有一条与之对应的借据,所以将bp_collect_loan存入数据库的操作采用的是insertOrUpdate操作(任务执行失败后,不会对数据库中的数据造成影响)。
3. 借据同步完成之后,需要执行归案任务,就是将多个借据加工成为一个案件,以人为维度进行催收。
4. 归案完成之后,需要跑规则引擎来执行分案,通过规则引擎分案之后,会在数据库表bp_collect_divide表里面生成分案记录。
5. 将这些分案记录针对案件进行分案(分案记录里面存储了两类,针对个人的分案,针对组的分案)

// 使用到的技术点(分布式锁 redis队列)
1. 由于任务是部署在多台机器上的,多个进程执行任务时,需要获取分布式锁。项目中采用redis来实现了分布式锁,上锁命令采用set命令,外加是否存在,过期时间参数来实现。而释放锁的命令采用lua脚本来实现,因为会有两步骤操作,首先式判断上锁客户端和释放锁的客户端是否一致(存储在value中),其次是删除该锁对应的key,lua脚本保证了该操作的原子性。
2. 在执行归案的过程中,针对每一个案件,需要将该案件分出去,会过规则引擎。而将分案请求交给规则引擎有两种方式,第一种是先将该案件构建成为请求,然后将该请求放到redis的同步队列里面,规则引擎那边从同步队列里面来进行消费。第二种是若同步队列已满,或者放入到同步队列出错,则会将请求直接交给规则引擎来处理。

// 技术难点-如何克服