对账任务乐观锁报错修改
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