对账 自动对账
验证不同系统之间交易数据是否一致,以及是否存在错误或异常情况。保障金融交易的安全和可靠
日终文件形式自动对账,三方多挂帐,三方少销账
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