对账任务乐观锁报错修改
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt
index 1190337..7da32f1 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt
@@ -99,7 +99,7 @@
private fun canStartCheck(sourcetype: TSourceType): Boolean {
val hosttime = systemUtilService.sysdatetime.hosttime
- if(DateUtil.checkDatetimeValid(sourcetype.startChktime,DateUtil.TIME_FMT) && DateUtil.compareDatetime(hosttime, sourcetype.startChktime, DateUtil.TIME_FMT)<=0){
+ if (DateUtil.checkDatetimeValid(sourcetype.startChktime, DateUtil.TIME_FMT) && DateUtil.compareDatetime(hosttime, sourcetype.startChktime, DateUtil.TIME_FMT) <= 0) {
return false //sourcetype 设定了每天开始对账时间,小于这个对账时间不能对账
}
return true
@@ -159,7 +159,7 @@
@Scheduled(cron = "\${payapi.sourcetype.checker.scheduler:-}")
@SchedulerLock(name = "payapiSourceTypeCheckLock", lockAtMostForString = "PT30M")
fun runCheck() {
- if(TenantContext.getTenantSchema()==null) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID)
+ if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID)
val allSourcetype = sourceTypeService.allEnabledSourcetype
?: return
@@ -270,7 +270,7 @@
fun checkAndDownloadChkfile(checkStatus: TSourceTypeCheckStatus): Future<ExecutorResult> {
// 2. 根据对账日期下载对账文件
try {
- if(TenantContext.getTenantSchema()==null) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID)
+ if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(checkStatus.tenantId)
if (checkStatus.settleStatus) {
return AsyncResult(ExecutorResult(checkStatus, FAIL, "[${checkStatus.checkAccdate}]日对账已完成"))
}
@@ -313,7 +313,7 @@
@Async("sourcetypeCheckTaskExecutor")
fun reconciliation(checkStatus: TSourceTypeCheckStatus): Future<ExecutorResult> {
// 3. 完成对账
- if(TenantContext.getTenantSchema()==null) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID)
+ if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(checkStatus.tenantId)
if (!checkStatus.checkFileOk) {
return AsyncResult(ExecutorResult(checkStatus, FAIL, "checkAccdate=[${checkStatus.checkAccdate}]对账单未完成下载,不能对账"))
} else if (checkStatus.settleStatus) {
@@ -321,12 +321,12 @@
return AsyncResult(ExecutorResult(checkStatus, SUCCESS, "checkAccdate=[${checkStatus.checkAccdate}]对账已成功"))
}
- val result =transactionReconciliationService.getTransactionChkfile(checkStatus.checkAccdate, checkStatus.sourceType)?.let { chkfile ->
+ val result = transactionReconciliationService.getTransactionChkfile(checkStatus.checkAccdate, checkStatus.sourceType)?.let { chkfile ->
try {
- doCheckProcess(chkfile, checkStatus) //执行对账过程
- when (checkStatus.settleStatus) {
- true -> ExecutorResult(checkStatus, SUCCESS, "对账成功,双方一致")
- false -> ExecutorResult(checkStatus, FAIL, chkfile.remark)
+ val chkStatus = doCheckProcess(chkfile, checkStatus) //执行对账过程
+ when (chkStatus.settleStatus) {
+ true -> ExecutorResult(chkStatus, SUCCESS, "对账成功,双方一致")
+ false -> ExecutorResult(chkStatus, FAIL, chkfile.remark)
}
} catch (ex: Exception) {
ex.printStackTrace()
@@ -360,7 +360,7 @@
return AsyncResult(result)
}
- fun doCheckProcess(chkfile: TTransactionChkfile, checkStatus: TSourceTypeCheckStatus) {
+ fun doCheckProcess(chkfile: TTransactionChkfile, checkStatus: TSourceTypeCheckStatus): TSourceTypeCheckStatus {
//step1: 假设绝大多数记录都是一致的情况下,下面的逻辑采用每1000条批量处理提高性能,统一处理交易一致的记录
(0..chkfile.othercnt step 1000).forEach {
try {
@@ -378,7 +378,8 @@
if (transactionReconciliationService.checkUncheckExists(chkfile.id)) {
throw TransactionException(-2, "存在未对账的明细记录")
}
- //step4: 判断本地是否有多余成功流水,并保存
+
+ //step4: 判断本地是否有多余成功流水,并保存recordno为负值
try {
transactionReconciliationService.doCheckLocalMoreDtls(chkfile)
} catch (e1: TransactionException) {
@@ -387,8 +388,7 @@
checkStatus.repairStatus = false
checkStatus.settleStatus = false
checkStatus.remark = e1.message
- sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus)
- return //直接返回
+ return sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus)
}
/**
@@ -397,7 +397,7 @@
* 2. 对"是否可以补帐"的定义是必须"对账完成"
* 3. 当所有明细完成对账或补帐才能结算
*/
- transactionReconciliationService.doFinishChkfileStatus(chkfile, checkStatus)
+ transactionReconciliationService.doFinishChkfileStatus(chkfile, checkStatus) //乐观锁,此事务不更新数据库。否则会影响两表的version
//补账, result为equal或unequal时补帐,error跳过
if (checkStatus.checkStatus && checkStatus.repairStatus) {
@@ -416,6 +416,6 @@
}
}
- transactionReconciliationService.doConfirmChkfileStatus(chkfile, checkStatus)
+ return transactionReconciliationService.doConfirmChkfileStatus(chkfile, checkStatus)
}
}
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt
index 2fbe26a..b368d5a 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt
@@ -258,8 +258,9 @@
checkStatus.repairStatus = true
}
checkStatus.remark = chkfile.remark
- transactionChkfileDao.save(chkfile)
- sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus)
+
+// transactionChkfileDao.save(chkfile)
+// sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus)
}
override fun getNeedRepairChkdtls(chkfile: TTransactionChkfile): List<TTransactionChkdtl> {
@@ -277,7 +278,7 @@
transactionChkdtlDao.save(chkdtl)
}
- override fun doConfirmChkfileStatus(chkfile: TTransactionChkfile, checkStatus: TSourceTypeCheckStatus): TTransactionChkfile {
+ override fun doConfirmChkfileStatus(chkfile: TTransactionChkfile, checkStatus: TSourceTypeCheckStatus): TSourceTypeCheckStatus {
val personSumInfo = persondtlDao.getPersondtlSumInfo(chkfile.accdate, chkfile.sourcetype, chkfile.tenantid)
chkfile.localcnt = personSumInfo.totalcnt ?: 0
chkfile.localamt = personSumInfo.totalamt ?: 0.00
@@ -301,7 +302,7 @@
}
}
- sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus)
- return transactionChkfileDao.save(chkfile)
+ transactionChkfileDao.save(chkfile)
+ return sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus)
}
}
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_reconciliation_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_reconciliation_service.kt
index 21a16a8..d7ce27d 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_reconciliation_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_reconciliation_service.kt
@@ -63,7 +63,7 @@
@Transactional(rollbackFor = [Exception::class])
- fun doConfirmChkfileStatus(chkfile: TTransactionChkfile, checkStatus: TSourceTypeCheckStatus): TTransactionChkfile
+ fun doConfirmChkfileStatus(chkfile: TTransactionChkfile, checkStatus: TSourceTypeCheckStatus): TSourceTypeCheckStatus