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()
+            }
         }
     }
 }
