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 87107ff..b40489b 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
@@ -118,7 +118,7 @@
             if (status.settleStatus) {
                 //已完成清算可以结算了，直接切换到下一天
                 val nextday = DateUtil.getNewDay(status.checkAccdate, 1)
-                status.apply {
+                status = sourceTypeService.saveOrUpdateSourceTypeCheckStatus(status.apply {
                     this.checkAccdate = nextday
                     this.checkFileOk = false
                     this.checkStatus = false
@@ -127,8 +127,7 @@
                     this.forceRecheck = false
                     this.chkfileUrl = null
                     this.remark = null
-                }
-               status = sourceTypeService.saveOrUpdateSourceTypeCheckStatus(status) //更新
+                }) //更新
             }
 
             val interval = DateUtil.getIntervalDay(status.checkAccdate, accdate).toInt()
@@ -186,14 +185,14 @@
                     val result = it.get(10, TimeUnit.SECONDS)
                     if (result.code == SourceTypeCheckExecutor.SUCCESS) {
                         // 完成对账文件下载 但 还未对账
-                        if (result.status.checkFileOk && !result.status.checkStatus) {
+                        if (result.status.checkFileOk && !result.status.settleStatus) {
                             newPrcResult.add(sourceTypeCheckExecutor.reconciliation(result.status))
                         } else if (!result.status.checkFileOk) {
                             logger.error {
                                 "sourcetype <${result.status.sourceType}> get checkfile error," +
                                         "<${result.message}>"
                             }
-                        } else if (result.status.checkFileOk && result.status.checkStatus) {
+                        } else if (result.status.checkFileOk && result.status.settleStatus) {
                             logger.info {
                                 "sourcetype <${result.status.sourceType}> " +
                                         "date <${result.status.checkAccdate}> 对账成功"
@@ -284,22 +283,22 @@
                     repeat(10) {
                         if (success.code != AgentCode.SUCCESS) {
                             Thread.sleep(3000)
-                            success = provider.queryCheckFile(checkStatus)
+                            success = provider.queryCheckFile(acResp.payload)
                         }
                     }
                     if (success.code == AgentCode.SUCCESS) {
                         downloadFile(provider, success.payload)
                     } else {
-                        ExecutorResult(checkStatus, FAIL, "下载失败,未能查到对账文件")
+                        ExecutorResult(success.payload, FAIL, "下载失败,未能查到对账文件")
                     }
                 } else if (acResp.code == AgentCode.SUCCESS) {
                     if (!acResp.payload.checkFileOk) {
                         downloadFile(provider, acResp.payload)
                     } else {
-                        ExecutorResult(checkStatus, SUCCESS, acResp.agentMsg)
+                        ExecutorResult(acResp.payload, SUCCESS, acResp.agentMsg)
                     }
                 } else {
-                    ExecutorResult(checkStatus, FAIL, acResp.agentMsg)
+                    ExecutorResult(acResp.payload, FAIL, acResp.agentMsg)
                 }
             } ?: ExecutorResult(checkStatus, FAIL, "未定义 CheckFileProvider")
             return AsyncResult(result)
