细化对账逻辑
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 b7f5a14..3f895f9 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
@@ -34,45 +34,48 @@
@Autowired
private lateinit var sourceTypeCheckExecutor: SourceTypeCheckExecutor
- private fun newSourceTypeStatus(sourceType: TSourceType): TSourceTypeCheckStatus {
+ private fun newSourceTypeStatus(sourceType: TSourceType, accdate: String): TSourceTypeCheckStatus {
return TSourceTypeCheckStatus().also {
it.sourceType = sourceType.sourceType
it.tenantId = sourceType.tenantid
// 没有对账文件状态时创建一条以当前系统记账日期为起始时间的对账明细
- it.startAccdate = systemUtilService.accdate
+ it.startAccdate = accdate
it.checkAccdate = it.startAccdate
it.forceRecheck = false
it.checkFileDate = it.startAccdate
it.checkFileOk = false
+ it.checkStatus = false
}.let {
sourceTypeService.saveOrUpdateSourceTypeCheckStatus(it)
}
}
private fun determineSourceTypeCheck(sourcetype: TSourceType): TSourceTypeCheckStatus? {
- if (!sourcetype.checkable) {
+ if (!sourcetype.checkable || !sourcetype.enable) {
return null
}
+ val accdate = systemUtilService.accdate
val status = sourceTypeService.getSourceTypeCheckStatus(sourcetype.sourceType)
- ?: newSourceTypeStatus(sourcetype)
+ ?: newSourceTypeStatus(sourcetype, accdate)
- // 小于对账日期
- val interval = DateUtil.getIntervalDay(status.checkAccdate, systemUtilService.accdate)
- // 已对账
- if (status.checkStatus) {
- // 大于等于结算日期进行对账
- return if (interval >= sourcetype.tplusN) {
- status.checkAccdate = DateUtil.getNewDay(status.checkAccdate, 1)
- status.checkStatus = false
- status.checkFileDate = DateUtil.getNewDay(status.checkFileDate, 1)
- status.checkFileOk = false
- sourceTypeService.saveOrUpdateSourceTypeCheckStatus(status)
- } else {
- // 未到对账时间,跳过
- null
- }
+ val interval = DateUtil.getIntervalDay(status.checkAccdate, accdate).toInt()
+ return if (status.checkStatus && interval == sourcetype.tplusN) {
+ // 当前日期对账已完成,并且已经对账到最后一天
+ null
+ } else if (status.checkStatus && interval > sourcetype.tplusN) {
+ // 当前日期对账已完成 且 后面还有对账可以进行
+ status.checkAccdate = DateUtil.getNewDay(status.checkAccdate, 1)
+ status.checkStatus = false
+ status.checkFileDate = DateUtil.getNewDay(status.checkFileDate, 1)
+ status.checkFileOk = false
+ sourceTypeService.saveOrUpdateSourceTypeCheckStatus(status)
+ } else if (!status.checkStatus && interval >= sourcetype.tplusN) {
+ // 当前对账并未完成 且满足对账条件
+ status
+ } else {
+ // 其它条件不对账
+ null
}
- return status
}
@Scheduled(cron = "\${payapi.sourcetype.checker.scheduler:-}")
@@ -130,10 +133,14 @@
// async task not finished
}
}
- checkProcessResult.removeIf { finishResult.contains(it) }
- finishResult.clear()
- checkProcessResult.addAll(newPrcResult)
- newPrcResult.clear()
+ finishResult.takeIf { it.isNotEmpty() }?.also { list ->
+ checkProcessResult.removeIf { list.contains(it) }
+ list.clear()
+ }
+ newPrcResult.takeIf { it.isNotEmpty() }?.also {
+ checkProcessResult.addAll(it)
+ it.clear()
+ }
}
}
}