From 7d614736d2d3a438be0eac23feff9c58621a9ecf Mon Sep 17 00:00:00 2001 From: Xia Kaixiang Date: Mon, 9 Sep 2019 18:41:45 +0800 Subject: [PATCH] =?utf8?q?=E5=AF=B9=E8=B4=A6=E4=BB=BB=E5=8A=A1=E4=B9=90?= =?utf8?q?=E8=A7=82=E9=94=81=E6=8A=A5=E9=94=99=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../dlpay/api/scheduler_sourcetype_chk.kt | 30 +++++++++---------- ...transaction_reconciliation_service_impl.kt | 11 +++---- .../transaction_reconciliation_service.kt | 2 +- 3 files changed, 22 insertions(+), 21 deletions(-) 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 11903379..7da32f14 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 @@ class SourceTypeCheck { 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 @@ class SourceTypeCheck { @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 @@ class SourceTypeCheckExecutor { fun checkAndDownloadChkfile(checkStatus: TSourceTypeCheckStatus): Future { // 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 @@ class SourceTypeCheckExecutor { @Async("sourcetypeCheckTaskExecutor") fun reconciliation(checkStatus: TSourceTypeCheckStatus): Future { // 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 @@ class SourceTypeCheckExecutor { 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 @@ class SourceTypeCheckExecutor { 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 @@ class SourceTypeCheckExecutor { if (transactionReconciliationService.checkUncheckExists(chkfile.id)) { throw TransactionException(-2, "存在未对账的明细记录") } - //step4: 判断本地是否有多余成功流水,并保存 + + //step4: 判断本地是否有多余成功流水,并保存recordno为负值 try { transactionReconciliationService.doCheckLocalMoreDtls(chkfile) } catch (e1: TransactionException) { @@ -387,8 +388,7 @@ class SourceTypeCheckExecutor { checkStatus.repairStatus = false checkStatus.settleStatus = false checkStatus.remark = e1.message - sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus) - return //直接返回 + return sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus) } /** @@ -397,7 +397,7 @@ class SourceTypeCheckExecutor { * 2. 对"是否可以补帐"的定义是必须"对账完成" * 3. 当所有明细完成对账或补帐才能结算 */ - transactionReconciliationService.doFinishChkfileStatus(chkfile, checkStatus) + transactionReconciliationService.doFinishChkfileStatus(chkfile, checkStatus) //乐观锁,此事务不更新数据库。否则会影响两表的version //补账, result为equal或unequal时补帐,error跳过 if (checkStatus.checkStatus && checkStatus.repairStatus) { @@ -416,6 +416,6 @@ class SourceTypeCheckExecutor { } } - 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 2fbe26ae..b368d5aa 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 @@ class TransactionReconciliationServiceImpl : TransactionReconciliationService { 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 { @@ -277,7 +278,7 @@ class TransactionReconciliationServiceImpl : TransactionReconciliationService { 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 @@ class TransactionReconciliationServiceImpl : TransactionReconciliationService { } } - 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 21a16a82..d7ce27dd 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 @@ interface TransactionReconciliationService { @Transactional(rollbackFor = [Exception::class]) - fun doConfirmChkfileStatus(chkfile: TTransactionChkfile, checkStatus: TSourceTypeCheckStatus): TTransactionChkfile + fun doConfirmChkfileStatus(chkfile: TTransactionChkfile, checkStatus: TSourceTypeCheckStatus): TSourceTypeCheckStatus -- 2.17.1