对账

对账 自动对账

验证不同系统之间交易数据是否一致,以及是否存在错误或异常情况。保障金融交易的安全和可靠

image-20240808170054346

日终文件形式自动对账,三方多挂帐,三方少销账

1,创建对账任务
    这里加锁创建,根据对账时间来(一般是生成前一天的对账任务)
    1.1)查询是否存在当天任务
    1.2)根据通道生成对账任务
    
2,执行任务
    多线程执行的,继承了Callable实现
    2.1)线程重命名
    2.2)执行任务前的一些前置校验,初始化参数,任务加锁(乐观锁,根据数据库字段判断)
    2.3)逻辑处理
        逐笔对账,解析三方账单
        JDBC并发对账(只产生挂账)。挂帐:我们这边多,三方少
        挂帐笔数是否超过配置
        
        处理销账的单。销账:三方有,本地没有,成功订单,调用第三方接口去同步订单的状态,时间 金额 并写入数据库继续比对
    2.4)结束对账,后置处理,更新任务,订单信息同步,创建一个线程触发机构日结任务
    2.5)7点后还有未对平的则发短信提醒
        
        
        
遇到的问题点

调用三方接口生成文件 进行下载  需做重试机制

退款表 修改字段长度 此时插入数据是否会锁表

1,新增对账处理器

实现 cn.swiftpass.core.server.acc.service.billdownloader.impl.AbstractCheckBillProcessor
    
@Service
@ApiProvider(apiProviderValue = AccConstants.自己约定的值)
public class WlmqFastPayCheckBillProcessor extends AbstractCheckBillProcessor {
    重写
        beforeProcess,下载文件前做些什么
        getTargetDownFileName,获取下载文件名称
        downloadCheckBillInner,下载第三方账单
        parsePayOrderDtoByLine,按照行解析文件,
            这里把第三方订单信息存放thirdMap,
            需关注存入的是否为威富通订单号
            1,key 威富通订单号
            2,key 不是威富通订单号
        
        
}

2,对账前置校验

cn.swiftpass.core.server.acc.account.worker.CheckBillWorker#validate
需改动
如果第三方返回的有下载路径,这不需要验证,配置下载文件路径

3,逐笔对账

cn.swiftpass.core.server.acc.account.worker.CheckBillWorker#work

jdbc逐笔对账
cn.swiftpass.core.server.acc.account.job.CheckBillPayOrderJob#execute     支付订单处理
cn.swiftpass.core.server.acc.account.job.CheckBillRefundOrderJob#execute  退款订单处理
    thirdMap key不是威富通订单号
        thirdPayOrder = thirdMap.get(wftPayOrder.getOrderNo())需改动
        checkedThirdOrderNoSet.add(wftPayOrder.getOrderNo()) 需改动
    
    checkedThirdOrderNoSet是已对的第三方账单Set
    checkBillUpDownDtos挂销账List
    
销账处理,过滤thirdMap中已对账的订单,剩下之前挂账的订单
cn.swiftpass.core.server.acc.account.worker.CheckBillWorker#dealRemainingBill
    
根据thirdMap中订单号获取本地订单信息
    thirdMap key不是威富通订单号,需改动,获取威富通订单号
cn.swiftpass.core.server.acc.account.utils.ThirdMoreOrderHandler#thirdMoreOrderHandle

4,模拟造订单数据

运行bill-generator服务
修改数据库连接信息

1,下载最新导入模板
2,select * from TRA_PAY_TYPE; --- 支付类型
     获取 支付类型简称,pay_type_id,pay_center_id通道id,api_code
   SELECT * FROM CMS_MERCHANT; --- 商户表
     获取 商户号    商户编号
3,修改excel,新增订单

5,修改订单商户手续费 / 模拟造订单数据 设置手续费

支付订单
SELECT * FROM PAY_ORDER ORDER BY OUT_TRADE_NO DESC;
修改 calc_state为1(计算完成),mch_theory_procedure_fee, mch_real_procedure_fee, mch_discount_fee 为0 

退款订单
SELECT * FROM pay_refund ORDER BY REFUND_NO  DESC;
修改 calc_state为1(计算完成)...手续费为0

5,构造第三方订单文件

按照第三方订单格式修改数据

修改订单号或者流水号为 我们造的数据 的订单号或第三方订单号等

上传到ftp

6,挂销账处理

// 其他销账处理
cn.swiftpass.core.server.acc.account.utils.ThirdMoreOrderHandler#thirdMoreOrderHandle
// pos销账处理
cn.swiftpass.core.server.acc.account.utils.ThirdMoreOrderHandler#thirdMorePosOrderHandle

7,同步订单

//对账结束后的善后工作
//这里会 更新任务状态,订单信息同步,触发下一个任务(机构日结)
cn.swiftpass.core.server.acc.account.worker.Worker#afterWork

7,页面测试

1,支付通道管理配置
2,对账任务设置--选择对账时间--1,删除第三方账单 2,重新对账 3,单任务触发对账



{"ip":"192.168.3.25","port":"22","username":"sftp","pwd":"wft@test",
"path":"/data/sftp/wftsftp/acctest/test/","processChain":"ABDEF"}

日夜颠倒头发少 ,单纯好骗恋爱脑 ,会背九九乘法表 ,下雨只会往家跑 ,搭讪只会说你好 ---- 2050781802@qq.com

×

喜欢就点赞,疼爱就打赏

相册 说点什么