流程1的问题:
1、通道一天的数据会有多少,有二三十万条交易数据吗?
2、如果数据过大都存到一个Map里面去,机器不得挂了
步骤1总结:
1、通过channelNo获取通道T的数据,因为通道是一天一个文件给过来。在转成Map,map的key = channelOrderNo+channelNo+amt value = 通道一行数据。
2、通过T查询本地交易数据,主要是拿状态是:未对账+对账不平的数据。
3、找出【共有】的数据,找出【本地多】的,找出【通道多】的。
4、通道的数据有个日期T,本地交易数据都有一个wokeDate,如果是wokeDate一样的,当做当日对账处理,如果不是一样,就当做次日对账处理。
5、当日对账处理,更新本地数据的状态:遍历本地所有数据,判断是属于【共有】的里面,还是【本地多】的,如果是共有的,更新成【之前的状态】【当日对账平】,如果是本地多的就更新成 【之前的状态】【当日本地交易多】
6、次日对账处理,更新本地数据状态,遍历所有本地数据,如果属于【共有】的更新成【之前的状态】【次日对账平】,如果是本地多的就更新成 【之前的状态】【次日本地交易多】,然后更新本地交易的对账数据状态。
7、这种次日多的和当日多的,后面会有特殊处理。
8、遍历通道测的数据,如果workDate一样,判断是属于【共有】的里面,还是【通道多】的,如果是共有的,更新成【之前的状态】【当日对账平】,如果是通道测多的,更新成 【之前的状态】【当日通道侧多】
9、遍历通道测的数据,如果workDate不一样,判断是共有还是通道多的,更新成【之前的状态】【次日对账平】和【之前的状态】【次日通道侧多】,然后通道对账数据的对账状态。
流程2的问题:
步骤2总结:
1、获取通道T日,短交易的【交易数据】,获取通道T-1的短交易数据,转成Map
2、获取本地T日,长交易的【本地交易数据】,获取本地T-1日,长交易的【本地交易数据】转成Map
3、找出【共有】的,本地多的,通道多的,注意只要是一方多的,都是未对平的数据。
4、先遍历本地多的数据,如果wokedate一样,判断是在【共有】还是【本地多的】里面,如果是共有里面,转成【之前的状态】【本日对账平】,否则【之前的状态】【当日本地交易多】
4、遍历本地多的数据,如果wokedate不一样,判断是在【共有】还是【本地多的】里面,如果是共有里面,转成【之前的状态】【次日对账平】,否则【之前的状态】【次日本地交易多】
5、再把本地交易数据更新掉去。
6、在遍历通道多的数据,规则也是一样。判断wokeDate是否一样,更新通道数据的状态。
流程3的问题:
流程3的总结:
1、获取通道T日和T+1的数据,为对平的数据,主要是通道多的数据,
2、通过通道的数据,根据通道订单号+通道No+金额查询本地订单表的数据,
3、如果本地交易找到了,那就更新订单的状态,此时还没有更新到数据,只是更新数据在内存中的状态。
4、既然找到了本地数据,那么同时也要把通道订单表的数据状态更新下。这里也只是更新内存中的
5、这里也包括处理公缴的本地交易订单。
6、如果本地交易没有找到,从交易的文件表里面找
7、如果文件表找到了,更新数据状态,并且把这条交易文件数据保存到,本地交易数据里面去。
8、如果交易文件也没有找到,那么这条通道数据就是是多的。需要补本地交易数据
流程4:未知转失败问题
怎么知道未知转失败?一般是本地有,通道那边没有,都视为未知转失败。
流程4:未知转失败总结
1、获取本地交易T-1日的数据:未对账+订单状态处理中+付款类型
2、判断是:T日确认失败+T-1日确认失败,更具workDate判断,更新本地交易的对账状态,如果是退货类的,那还要补发一个MQ给付款中心。
流程5:未知转失败问题
流程5:未知转失败总结
1、取本地交易的【长交易】数据,时间为T日,然后区分本地这笔交易是收款还是付款,生成一条对账异常数据
2、取本地交易的【长交易销账】数据,时间为T日,然后区分本地这笔交易是收款还是付款,生成一条对账异常数据
3、【时差挂账转对账挂账】,如果是时差挂账,这种就搁置,不处理,因为有可能过几天数据又来了。
4、把上面出现差异的数据,保存到【本地对账差异】表里面去
5、取通道的数据,【短交易】
6、取通道的【通道短交易-核销】数据, 保存到【通道对账差异】数据库。
1、发送对账结果给到交易
2、通知对象是一个集合