文件名: REPLACE_CARFILE_YYYYMMDD
文件格式: 新卡号 旧卡号
1. 根据gtp策略配置好接收文件路径
2. 筛选出换绑卡的文件并按照日期对文件进行排序,保证有序处理换绑卡的文件
3. 逐行解析,每行放在一个String类型的数组中,1000行放入List<String[]> 中,集中处理一次,
当换卡文件解析失败 或者旧卡号存在多个的话,就将该文件移动到失败目录下,否则移动到成功目录下
4. 处理逻辑: 换卡文件中的处理批量集中入库,(包括新旧卡号 卡更新状态 业务日期 ts)
批量插入使用foreach标签,然后sql语句中提现 insert ignore into 表名(字段1,字段2) select 字段1值,字段2值 from dual where exists (select 1 from 客户表 where 旧卡号 = item.旧卡号字段)
也就是只有养老金的数据,也就是旧卡号存在的情况 才会入库,如果旧卡号不存在的话就不入库了。 此处用sql做了一个过滤筛选。再就是如果已经入库的不会重复入库,保证幂等性。
批量查询这些旧卡存在的卡在 客户表里的数量,现查询封装为list<map<String,Object>> ,每隔元素为map,map中为{bankCard=622333,num=2} ,然后将list<Map> 转化为map ,此时的map就是具体的旧卡号值,value为对应的数量。 再接下来就是从所有的旧卡号集合中过滤出所有的有多个旧卡号的集合,以及只有一个卡号的集合,此时的过滤集合刚才的那个map来进行判断得出的。
接下来 就是批量更新了,批量更新旧卡号存在多个的,在换卡源文件表中进行更新卡更新状态和message。统计失败数量。
如果只有一个旧卡号的话,批量更新换卡源文件表里的卡状态和message。
最后批量更新person表的卡号。 update 客户表 t,换卡文件表 c set t.bank_card = c.new_bank_card where t.bank_card = c.old_bank_card and c.old_bank_card in ();