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 05b5b5b..4b01a8e 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
@@ -5,7 +5,6 @@
 import com.supwisdom.dlpay.agent.CheckFileProvider
 import com.supwisdom.dlpay.api.domain.TSourceType
 import com.supwisdom.dlpay.api.domain.TSourceTypeCheckStatus
-import com.supwisdom.dlpay.api.domain.TTransactionChkdtl
 import com.supwisdom.dlpay.api.domain.TTransactionChkfile
 import com.supwisdom.dlpay.api.service.SourceTypeService
 import com.supwisdom.dlpay.api.service.TransactionReconciliationService
@@ -26,6 +25,46 @@
 import java.util.concurrent.TimeUnit
 import java.util.concurrent.TimeoutException
 
+/**
+ * 对账业务主要由三张表组成 TSourceTypeCheckStatus(对账状态表), TTransactionChkfile(对账文件表）， TTransactionChkDtl（对账明细表)
+ * 对账状态表有五个状态：
+ *  1. checkFileOk: 表示对账文件是否成功导入对账文件表和对账明细表中。对应的"对账文件表"的 status 应该是 unchecked。
+ *  2. checkStatus: 表示核对流水任务是否完成，当核对完成后根据对账文件表的 status 字段来判断，只有当 status 是 finish
+ *      时 checkStatus 才是 true。
+ *  3. repairStatus: 表示核对完成，并且可以进行补帐交易。同时根据对"对账文件表"的对账结果(result)来判断是否完成核对，只有当 result
+ *     是 "一致" 或 "不平" 时 repairStatus 才为 true。对账任务判断 repairStatus == true 之后将会对所有不一致的交易进行补帐。
+ *  4. settleStatus: 表示本次对账完成（核对与补帐都完成），对账任务会在补帐完成后将 settleStatus 置为 true。
+ *      同时 TTransactionChkDtl 的 resovled 状态全部为 'equal'。系统结算任务只有当 settleStatus == true 的时候才会进行
+ *  5. forceRecheck : 表示对当前的 checkDate 的对账文件重新下载并对账
+ *
+ *
+ * 对账文件表的 status 表示本次核对的结果。对账文件表 status 有几种情况：
+ *  1. 初始状态（init)，表示对账任务已经触发；
+ *  2. 待核对状态(unchecked), 表示对账文件已存入数据库中；
+ *  3. 错误状态(error), 保存数据有错误
+ *  4. 完成状态（finish) ， 表示核对完成状态；
+ *
+ * 对账文件表的对账结果字段(result) 表示本次对账处理结果:
+ *  1. 未核对（none), 表示还未与流水进行比对
+ *  2. 一致( equal), 表示对账完全一致
+ *  3. 不平（ notequal)， 表示对账不一致，但可以通过补帐交易完成结算
+ *  4. 错误（ error ) , 表示核对时数据校验不正确，系统不能通过补帐交易完成结算。需人工审核对账文件后，重新下载对账单并核对。
+ *
+ *
+ * 对账明细表(TTransactionChkDtl) 的 chkstatus 表示核对结果：
+ *   1. 未检查(uncheck), 表示记录还未核对
+ *   2. 一致( equal) ,表示记录核对与流水一致
+ *   3. 交易流水不存在（notexist), 表示本地交易流水不存在，影响对账文件表的 result 状态，为error。
+ *   4. 支付未记账 ( nocharge) ,表示本地流水未成功，需要补帐
+ *   5. 金额不相等（diff), 表示对账明细金额与本地流水不一致, 影响对账文件表的 result 状态，为error。
+ *   6. 本地多流水 (surplus), 表示本地的成功流水在对账单中不存在, 影响对账文件表的 result 状态，为error。
+ *   6. 记账日期或支付方式错误 (error) , 其它类型错误，影响对账文件表的 result 状态，为error。
+ *
+ * 对账明细表(TTransactionChkDtl) 的 result 表示处理结果
+ *   1. 需要补帐("add"）
+ *   2. 一致("equal") , 表示一致
+ *   3. 挂起("hangup"), 表示补帐出现异常
+ */
 @Component
 class SourceTypeCheck {
     private val logger = KotlinLogging.logger { }
@@ -39,22 +78,39 @@
     @Autowired
     private lateinit var sourceTypeCheckExecutor: SourceTypeCheckExecutor
 
+    private fun prepareCheckStatus(checkStatus: TSourceTypeCheckStatus) {
+        if (checkStatus.startAccdate.isNullOrEmpty()) {
+            // 没有对账文件状态时创建一条以当前系统记账日期为起始时间的对账明细
+            checkStatus.startAccdate = systemUtilService.accdate
+            checkStatus.checkAccdate = checkStatus.startAccdate
+            checkStatus.checkFileDate = checkStatus.startAccdate
+        } else {
+            checkStatus.apply {
+                checkAccdate = DateUtil.getNewDay(checkAccdate, 1)
+                checkFileDate = DateUtil.getNewDay(checkFileDate, 1)
+            }
+        }
+        checkStatus.apply {
+            this.checkStatus = false
+            checkFileOk = false
+            repairStatus = false
+            settleStatus = false
+            forceRecheck = false
+        }
+    }
+
     private fun newSourceTypeStatus(sourceType: TSourceType, accdate: String): TSourceTypeCheckStatus {
         return TSourceTypeCheckStatus().also {
             it.sourceType = sourceType.sourceType
             it.tenantId = sourceType.tenantid
             // 没有对账文件状态时创建一条以当前系统记账日期为起始时间的对账明细
-            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 isCheckFinish(status: TSourceTypeCheckStatus): Boolean {
+        return (status.checkStatus && status.repairStatus)
+    }
+
     private fun determineSourceTypeCheck(sourcetype: TSourceType): TSourceTypeCheckStatus? {
         if (!sourcetype.checkable || !sourcetype.enable) {
             return null
@@ -69,13 +125,7 @@
             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
-            status.repairStatus = false
-            status.settleStatus = false
-            status.forceRecheck = false
+            prepareCheckStatus(status)
             sourceTypeService.saveOrUpdateSourceTypeCheckStatus(status)
         } else if ((!status.checkStatus || !status.repairStatus) && interval >= sourcetype.tplusN) {
             // 当前对账并未完成 且满足对账条件
@@ -153,46 +203,6 @@
     }
 }
 
-/**
- * 对账业务主要由三张表组成 TSourceTypeCheckStatus(对账状态表), TTransactionChkfile(对账文件表）， TTransactionChkDtl（对账明细表)
- * 对账状态表有五个状态：
- *  1. checkFileOk: 表示对账文件是否成功导入对账文件表和对账明细表中。对应的"对账文件表"的 status 应该是 unchecked。
- *  2. checkStatus: 表示核对流水任务是否完成，当核对完成后根据对账文件表的 status 字段来判断，只有当 status 是 finish
- *      时 checkStatus 才是 true。
- *  3. repairStatus: 表示核对完成，并且可以进行补帐交易。同时根据对"对账文件表"的对账结果(result)来判断是否完成核对，只有当 result
- *     是 "一致" 或 "不平" 时 repairStatus 才为 true。对账任务判断 repairStatus == true 之后将会对所有不一致的交易进行补帐。
- *  4. settleStatus: 表示本次对账完成（核对与补帐都完成），对账任务会在补帐完成后将 settleStatus 置为 true。
- *      同时 TTransactionChkDtl 的 resovled 状态全部为 'equal'。系统结算任务只有当 settleStatus == true 的时候才会进行
- *  5. forceRecheck : 表示对当前的 checkDate 的对账文件重新下载并对账
- *
- *
- * 对账文件表的 status 表示本次核对的结果。对账文件表 status 有几种情况：
- *  1. 初始状态（init)，表示对账任务已经触发；
- *  2. 待核对状态(unchecked), 表示对账文件已存入数据库中；
- *  3. 错误状态(error), 保存数据有错误
- *  4. 完成状态（finish) ， 表示核对完成状态；
- *
- * 对账文件表的对账结果字段(result) 表示本次对账处理结果:
- *  1. 未核对（none), 表示还未与流水进行比对
- *  2. 一致( equal), 表示对账完全一致
- *  3. 不平（ notequal)， 表示对账不一致，但可以通过补帐交易完成结算
- *  4. 错误（ error ) , 表示核对时数据校验不正确，系统不能通过补帐交易完成结算。需人工审核对账文件后，重新下载对账单并核对。
- *
- *
- * 对账明细表(TTransactionChkDtl) 的 chkstatus 表示核对结果：
- *   1. 未检查(uncheck), 表示记录还未核对
- *   2. 一致( equal) ,表示记录核对与流水一致
- *   3. 交易流水不存在（notexist), 表示本地交易流水不存在，影响对账文件表的 result 状态，为error。
- *   4. 支付未记账 ( nocharge) ,表示本地流水未成功，需要补帐
- *   5. 金额不相等（diff), 表示对账明细金额与本地流水不一致, 影响对账文件表的 result 状态，为error。
- *   6. 本地多流水 (surplus), 表示本地的成功流水在对账单中不存在, 影响对账文件表的 result 状态，为error。
- *   6. 记账日期或支付方式错误 (error) , 其它类型错误，影响对账文件表的 result 状态，为error。
- *
- * 对账明细表(TTransactionChkDtl) 的 result 表示处理结果
- *   1. 需要补帐("add"）
- *   2. 一致("equal") , 表示一致
- *   3. 挂起("hangup"), 表示补帐出现异常
- */
 @Component
 class SourceTypeCheckExecutor {
     companion object {
