diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkdtlDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkdtlDao.java
index 51301ce..fb538c8 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkdtlDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkdtlDao.java
@@ -1,6 +1,5 @@
 package com.supwisdom.dlpay.api.dao;
 
-import com.supwisdom.dlpay.api.domain.TPersondtl;
 import com.supwisdom.dlpay.api.domain.TTransactionChkdtl;
 import com.supwisdom.dlpay.framework.data.CountAmountBean;
 import com.supwisdom.dlpay.framework.data.ExistBean;
@@ -39,11 +38,19 @@
   @Query("from TTransactionChkdtl t where t.chkfileId=?1 and t.chkresult='uncheck' order by t.recordno ")
   List<TTransactionChkdtl> getUncheckTransactionChkdtls(String chkfileId);
 
-  @Query("select count(t.id) as existed from TTransactionChkdtl t where t.chkfileId=?1 and t.chkresult='uncheck' ")
-  ExistBean getUncheckCount(String chkfileId);
+  @Query("select count(t.id) as existed from TTransactionChkdtl t where t.chkfileId=?1 and t.chkresult=?2 ")
+  ExistBean getCountByChkresult(String chkfileId, String chkresult);
 
   @Query(value = "select t.refno from TB_PERSONDTL t left join TB_TRANSACTION_CHKDTL a on t.REFNO=a.OTHER_REFNO and a.CHKFILE_ID=:chkfileId " +
       " where t.ACCDATE=:accdate and t.SOURCETYPE=:sourcetype and t.status='success' and a.id is null order by t.refno ", nativeQuery = true)
   List<String> findLocalMoreDtls(@Param("accdate") String accdate, @Param("sourcetype") String sourcetype, @Param("chkfileId") String chkfileId);
 
+  @Query("select count(t.id) as existed from TTransactionChkdtl t where t.chkfileId=?1 and t.chkresult<>'equal' and t.chkresult<>'nocharge' ")
+  ExistBean getErrorCount(String chkfileId);
+
+  @Query("from TTransactionChkdtl t where t.chkresult='nocharge' and t.resolved<>'equal' and t.chkfileId=?1 order by t.recordno ")
+  List<TTransactionChkdtl> getNeedRepairChkdtls(String chkfileId);
+
+  @Query("select count(t.id) as existed from TTransactionChkdtl t where t.chkfileId=?1 and t.and t.resolved<>'equal' ")
+  ExistBean getChkdtlNotEqualCount(String chkfileId);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
index 7d7e809..8dcf53c 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
@@ -39,8 +39,9 @@
    * */
   public static final String CHKFILE_STATUS_INIT = "init"; //初始化
   public static final String CHKFILE_STATUS_UNCHECK = "uncheck"; //待对账
-  public static final String CHKFILE_STATUS_finish = "finish"; //对账完成
-  public static final String CHKFILE_STATUS_ERROR = "error"; //对账异常
+  public static final String CHKFILE_STATUS_CHECKOUT = "checkout"; //校对完成
+  public static final String CHKFILE_STATUS_FINISH = "finish"; //对账完成
+  public static final String CHKFILE_STATUS_ERROR = "error"; //保存数据异常
 
   /**
    * 对账文件结果状态
@@ -48,6 +49,7 @@
   public static final String CHKFILE_RESULT_NONE = "none"; //未对账 -
   public static final String CHKFILE_RESULT_EQUAL = "equal"; //对账一致，平
   public static final String CHKFILE_RESULT_UNEQUAL = "unequal"; //对账不一致，不平
+  public static final String CHKFILE_RESULT_ERROR = "error"; //对账明细有异常
 
   /**
    * 对账明细状态
@@ -58,12 +60,13 @@
   public static final String CHKDTL_CHKRESULT_NOCHARGE = "nocharge"; //支付未记账
   public static final String CHKDTL_CHKRESULT_DIFF = "diff"; //金额不相等
   public static final String CHKDTL_CHKRESULT_ERROR = "error"; //记账日期或支付方式错误
+  public static final String CHKDTL_CHKRESULT_SURPLUS = "surplus"; //本地多余成功流水
 
   /**
    * 对账明细解决状态
    * */
+  public static final String CHKDTL_RESOLVED_NONE = "none"; //已处理
   public static final String CHKDTL_RESOLVED_ADD ="add"; //补账
-  public static final String CHKDTL_RESOLVED_PROCESSED = "processed"; //已处理
   public static final String CHKDTL_RESOLVED_FAIL = "fail"; //补账失败
   public static final String CHKDTL_RESOLVED_EQUAL = "equal";  //一致，相等
   public static final String CHKDTL_RESOLVED_HANGUP="hangup"; //挂起
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_checkfile_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_checkfile_service.kt
index 46ae340..253ef36 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_checkfile_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_checkfile_service.kt
@@ -65,7 +65,7 @@
                     ?: transactionReconciliationService.saveInitTransactionChkfile(billDate, checkStatus.sourceType)
 
             if (chkfile.status == ConstantUtil.CHKFILE_STATUS_UNCHECK) {
-                return successDownload("[$billDate]日对账数据入库成功", checkStatus)
+                return successDownload("[$billDate]日对账数据已入库成功", checkStatus)
             }
             val resp = citizencardPayService.getChkfilename(billDate, null)
             when (resp.code) {
@@ -147,7 +147,7 @@
                 BufferedReader(InputStreamReader(stream)).use { reader ->
                     val header = reader.readLine()
                     val fields = header.split(",").mapNotNull { if (it.isNotEmpty()) it else null }
-                    val batchSize = 10000 //每次保存的数目
+                    val batchSize = 5000 //每次保存的数目
                     var failcnt = 0
 
                     val datalist = ArrayList<YnrccChkfileBean>()
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 26018f5..05b5b5b 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
@@ -185,6 +185,7 @@
  *   3. 交易流水不存在（notexist), 表示本地交易流水不存在，影响对账文件表的 result 状态，为error。
  *   4. 支付未记账 ( nocharge) ,表示本地流水未成功，需要补帐
  *   5. 金额不相等（diff), 表示对账明细金额与本地流水不一致, 影响对账文件表的 result 状态，为error。
+ *   6. 本地多流水 (surplus), 表示本地的成功流水在对账单中不存在, 影响对账文件表的 result 状态，为error。
  *   6. 记账日期或支付方式错误 (error) , 其它类型错误，影响对账文件表的 result 状态，为error。
  *
  * 对账明细表(TTransactionChkDtl) 的 result 表示处理结果
@@ -275,62 +276,74 @@
     @Async("sourcetypeCheckTaskExecutor")
     fun reconciliation(checkStatus: TSourceTypeCheckStatus): Future<ExecutorResult> {
         // 3. 完成对账
-        val result = if (!checkStatus.checkStatus) {
-            transactionReconciliationService
-                    .getTransactionChkfile(checkStatus.checkAccdate, checkStatus.sourceType)?.let { chkfile ->
-                        try {
-                            when (doCheckProcess(chkfile, checkStatus).result) {
-                                ConstantUtil.CHKFILE_RESULT_EQUAL -> {
-                                    ExecutorResult(checkStatus, SUCCESS, "对账成功，双方一致")
-                                }
-                                else -> ExecutorResult(checkStatus, FAIL, "对账不平")
-                            }
-                        } catch (ex: Exception) {
-                            ex.printStackTrace()
-                            ExecutorResult(checkStatus, FAIL, "对账异常")
-                        }
-                    } ?: ExecutorResult(checkStatus, FAIL, "未找到[${checkStatus.checkAccdate}]日入库的对账数据")
-        } else if (checkStatus.repairStatus) {
-            // 补帐逻辑
-            ExecutorResult(checkStatus, SUCCESS, "对账成功，双方一致")
-        } else if (checkStatus.settleStatus) {
-            ExecutorResult(checkStatus, SUCCESS, "对账完成，可以结算")
-        } else {
-            ExecutorResult(checkStatus, FAIL, "未找到[${checkStatus.checkAccdate}]日入库的对账数据")
-        }
+        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, "对账不平")
+                }
+            } catch (ex: Exception) {
+                ex.printStackTrace()
+                ExecutorResult(checkStatus, FAIL, "对账异常")
+            }
+        } ?: ExecutorResult(checkStatus, FAIL, "未找到[${checkStatus.checkAccdate}]日入库的对账数据")
+
+//        val result = if (!checkStatus.checkStatus) {
+//            transactionReconciliationService
+//                    .getTransactionChkfile(checkStatus.checkAccdate, checkStatus.sourceType)?.let { chkfile ->
+//                        try {
+//                            when (doCheckProcess(chkfile, checkStatus).result) {
+//                                ConstantUtil.CHKFILE_RESULT_EQUAL -> {
+//                                    ExecutorResult(checkStatus, SUCCESS, "对账成功，双方一致")
+//                                }
+//                                else -> ExecutorResult(checkStatus, FAIL, "对账不平")
+//                            }
+//                        } catch (ex: Exception) {
+//                            ex.printStackTrace()
+//                            ExecutorResult(checkStatus, FAIL, "对账异常")
+//                        }
+//                    } ?: ExecutorResult(checkStatus, FAIL, "未找到[${checkStatus.checkAccdate}]日入库的对账数据")
+//        } else if (checkStatus.repairStatus) {
+//            // 补帐逻辑
+//            ExecutorResult(checkStatus, SUCCESS, "对账成功，双方一致")
+//        } else if (checkStatus.settleStatus) {
+//            ExecutorResult(checkStatus, SUCCESS, "对账完成，可以结算")
+//        } else {
+//            ExecutorResult(checkStatus, FAIL, "未找到[${checkStatus.checkAccdate}]日入库的对账数据")
+//        }
         return AsyncResult(result)
     }
 
-    fun doCheckProcess(chkfile: TTransactionChkfile, checkStatus: TSourceTypeCheckStatus): TTransactionChkfile {
-        // 假设绝大多数记录都是一致的情况下，下面的逻辑采用每1000条批量处理提高性能
-        //统一处理交易一致的记录, 对账 1
+    fun doCheckProcess(chkfile: TTransactionChkfile, checkStatus: TSourceTypeCheckStatus) {
+        //step1: 假设绝大多数记录都是一致的情况下，下面的逻辑采用每1000条批量处理提高性能,统一处理交易一致的记录
         (0..chkfile.othercnt step 1000).forEach {
             try {
                 transactionReconciliationService.doCheckEqualTransdtls(chkfile, it)
             } catch (e1: Exception) {
             }
         }
-        //剩余的未对账记录逐一对比， 对账 2
-        // 这个规则业务可以处理 "对账1" 中可能漏掉的记录
-        var errorDtl = false
+
+        //step2: 剩余的未对账记录逐一对比， 这个规则业务可以处理 "对账1" 中可能漏掉的记录
         transactionReconciliationService.getUncheckTransactionChkdtls(chkfile.id).forEach {
-            transactionReconciliationService.doCheckTransactionChkdtl(it).also { chkdtl ->
-                if (chkdtl.chkresult != ConstantUtil.CHKDTL_CHKRESULT_NOCHARGE
-                        && chkdtl.chkresult != ConstantUtil.CHKDTL_CHKRESULT_EQUAL) {
-                    errorDtl = true
-                }
-            }
+            transactionReconciliationService.doCheckTransactionChkdtl(it)
         }
 
-        //判断chkdtl是否全部对账完成 ， 对账 3
+        //step3: 判断chkdtl是否全部对账完成
         if (transactionReconciliationService.checkUncheckExists(chkfile.id)) {
             throw TransactionException(-2, "存在未对账的明细记录")
         }
-        //判断本地是否有多余成功流水，并保存 ， 对账 4
-        transactionReconciliationService.doCheckLocalMoreDtls(chkfile, checkStatus).also {
-            if (it.isNotEmpty()) {
-                errorDtl = true
-            }
+        //step4: 判断本地是否有多余成功流水，并保存
+        try {
+            transactionReconciliationService.doCheckLocalMoreDtls(chkfile)
+        } catch (e1: TransactionException) {
+            //本地数据存在异常
+            checkStatus.checkStatus = false
+            checkStatus.repairStatus = false
+            checkStatus.settleStatus = false
+            checkStatus.remark = e1.message
+            sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus)
+            return //直接返回
         }
 
         /**
@@ -339,25 +352,25 @@
          * 2. 对"是否可以补帐"的定义是必须"对账完成"
          * 3. 当所有明细完成对账或补帐才能结算
          */
-        return if (!errorDtl) {
-            chkfile.status = ConstantUtil.CHKFILE_STATUS_finish
-            checkStatus.checkStatus = true
-            checkStatus.repairStatus = true
-            checkStatus.settleStatus = false
-            // udpate
-            transactionReconciliationService.doConfirmChkfileStatus(chkfile, checkStatus)
-            // 调用补帐业务进行补帐处理
+        transactionReconciliationService.doFinishChkfileStatus(chkfile, checkStatus)
 
-            // 完成补帐业务进入结算状态
-            checkStatus.settleStatus = true
-            transactionReconciliationService.doConfirmChkfileStatus(chkfile, checkStatus)
-
-        } else {
-            chkfile.status = ConstantUtil.CHKFILE_STATUS_ERROR
-            checkStatus.settleStatus = false
-            checkStatus.repairStatus = false
-            checkStatus.checkStatus = true
-            transactionReconciliationService.doConfirmChkfileStatus(chkfile, checkStatus)
+        //补账, result为equal或unequal时补帐，error跳过
+        if (chkfile.result in setOf(ConstantUtil.CHKFILE_RESULT_EQUAL, ConstantUtil.CHKFILE_RESULT_UNEQUAL)) {
+            transactionReconciliationService.getNeedRepairChkdtls(chkfile).forEach { chkdtl ->
+                try {
+                    transactionReconciliationService.doRepairTransactionChkdtl(chkdtl) //补账
+                } catch (e2: Exception) {
+                    try {
+                        transactionReconciliationService.saveOrUpdateTransctionChkdtl(chkdtl.apply {
+                            this.resolved = ConstantUtil.CHKDTL_RESOLVED_FAIL
+                            this.remark = e2.message ?: e2.javaClass.name
+                        }) //补账失败,记录错误
+                    } catch (e3: Exception) {
+                    }
+                }
+            }
         }
+
+        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 2e2e89a..ad35776 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
@@ -13,6 +13,7 @@
 import com.supwisdom.dlpay.api.service.TransactionReconciliationService
 import com.supwisdom.dlpay.api.service.TransactionServiceProxy
 import com.supwisdom.dlpay.exception.TransactionCheckException
+import com.supwisdom.dlpay.exception.TransactionException
 import com.supwisdom.dlpay.framework.dao.BusinessparaDao
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.tenant.TenantContext
@@ -79,7 +80,7 @@
             this.remark = null
             this.extdata = bean.summary
             this.chkresult = ConstantUtil.CHKDTL_CHKRESULT_UNCHECK
-            this.resolved = null
+            this.resolved = ConstantUtil.CHKDTL_RESOLVED_NONE
             this.lastsaved = systemUtilService.sysdatetime.sysdate
             this.tenantid = TenantContext.getTenantSchema()
         })
@@ -184,25 +185,17 @@
             //需要补账
             chkdtl.chkresult = ConstantUtil.CHKDTL_CHKRESULT_NOCHARGE
             chkdtl.resolved = ConstantUtil.CHKDTL_RESOLVED_ADD
-            chkdtl.remark = "本地未入账，需要"
+            chkdtl.remark = "本地未入账，需要补助"
             transactionChkdtlDao.save(chkdtl) //对账明细表更新
         }
     }
 
     override fun checkUncheckExists(chkfileId: String): Boolean {
-        return transactionChkdtlDao.getUncheckCount(chkfileId).existed > 0
+        return transactionChkdtlDao.getCountByChkresult(chkfileId, ConstantUtil.CHKDTL_CHKRESULT_UNCHECK).existed > 0
     }
 
-    private fun updateCheckStatusWhenError(message: String, checkStatus: TSourceTypeCheckStatus,
-                                           chkfile: TTransactionChkfile) {
-        checkStatus.checkStatus = false
-        checkStatus.remark = message
-        chkfile.status = ConstantUtil.CHKFILE_STATUS_ERROR
-    }
-
-    override fun doCheckLocalMoreDtls(chkfile: TTransactionChkfile, checkStatus: TSourceTypeCheckStatus): List<TTransactionChkdtl> {
-        val result = mutableListOf<TTransactionChkdtl>()
-        transactionChkdtlDao.findLocalMoreDtls(chkfile.accdate, chkfile.sourcetype, chkfile.id)?.also {
+    override fun doCheckLocalMoreDtls(chkfile: TTransactionChkfile): Int {
+        return transactionChkdtlDao.findLocalMoreDtls(chkfile.accdate, chkfile.sourcetype, chkfile.id)?.also {
             it.forEach { refno ->
                 //保存多余的记录
                 transactionMainDao.findByRefno(refno)?.also { transMain ->
@@ -220,54 +213,93 @@
                             else -> transMain.reverseType
                         }
                         this.otherStatus = "unknown"
-                        this.remark = "本地成功流水第三方流水不存在"
+                        this.remark = "本地有成功流水，第三方流水不存在"
                         this.extdata = transMain.personDtl.transdesc
-                        this.chkresult = ConstantUtil.CHKDTL_CHKRESULT_ERROR
+                        this.chkresult = ConstantUtil.CHKDTL_CHKRESULT_SURPLUS
                         this.resolved = ConstantUtil.CHKDTL_RESOLVED_HANGUP
                         this.lastsaved = systemUtilService.sysdatetime.sysdate
                         this.tenantid = chkfile.tenantid
-                    }).also { dtl ->
-                        result.add(dtl)
-                    }//保存本地多出的记录
+                    })//保存本地多出的记录
                 }.also { transMain ->
                     if (transMain == null) {
-                        chkfile.status = ConstantUtil.CHKFILE_STATUS_ERROR
-                        updateCheckStatusWhenError("交易参考号<$refno>异常，未找到Main记录",
-                                checkStatus, chkfile)
-                        return result
+                        throw TransactionException(-3, "本地存在多余成功流水记录，且交易参考号<$refno>异常，未找到transactionMain记录")
                     }
                 }
             }
-        }?.also {
-            if (it.isNotEmpty()) {
-                chkfile.status = ConstantUtil.CHKFILE_STATUS_ERROR
-                updateCheckStatusWhenError("本地有<${it.size}>条流水不在对账文件中，请联系管理员检查",
-                        checkStatus, chkfile)
+        }?.size ?: 0
+    }
+
+    override fun doFinishChkfileStatus(chkfile: TTransactionChkfile, checkStatus: TSourceTypeCheckStatus) {
+        if (transactionChkdtlDao.getCountByChkresult(chkfile.id, ConstantUtil.CHKDTL_CHKRESULT_UNCHECK).existed > 0) {
+            throw TransactionException(-2, "存在未对账的明细记录")
+        }
+        //明细已全部校对完
+        chkfile.status = ConstantUtil.CHKFILE_STATUS_FINISH
+        checkStatus.checkStatus = true
+        checkStatus.repairStatus = false
+        checkStatus.settleStatus = false
+        if (transactionChkdtlDao.getErrorCount(chkfile.id).existed > 0) {
+            //除了需要补账的错误外有其他异常
+            chkfile.result = ConstantUtil.CHKFILE_RESULT_ERROR
+            chkfile.remark = "校对完成，明细存在对比异常"
+            transactionChkdtlDao.getCountByChkresult(chkfile.id, ConstantUtil.CHKDTL_CHKRESULT_SURPLUS).existed.also {
+                if (null != it && it > 0) {
+                    chkfile.remark = "本地有<${it}>条流水不在对账文件中，请联系管理员检查"
+                }
+            }
+        } else {
+            //仅存在一致或需补账的记录
+            if (transactionChkdtlDao.getCountByChkresult(chkfile.id, ConstantUtil.CHKDTL_CHKRESULT_NOCHARGE).existed > 0) {
+                //存在需补账记录
+                chkfile.result = ConstantUtil.CHKFILE_RESULT_UNEQUAL //不平
+                chkfile.remark = "校对完成，存在需补账的交易记录"
+            } else {
+                chkfile.result = ConstantUtil.CHKFILE_RESULT_EQUAL //一致
+                chkfile.remark = "校对完成，双方交易一致"
             }
         }
-        return result
+        transactionChkfileDao.save(chkfile)
+        sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus)
+    }
+
+    override fun getNeedRepairChkdtls(chkfile: TTransactionChkfile): List<TTransactionChkdtl> {
+        return transactionChkdtlDao.getNeedRepairChkdtls(chkfile.id) ?: ArrayList<TTransactionChkdtl>(0)
+    }
+
+    override fun doRepairTransactionChkdtl(chkdtl: TTransactionChkdtl): TTransactionChkdtl {
+        transactionService.repair(chkdtl.localRefno, chkdtl.otherAccdate, chkdtl.otherRefno, "补账成功")
+        chkdtl.resolved = ConstantUtil.CHKDTL_RESOLVED_EQUAL
+        chkdtl.remark = "本地未入账，补账成功"
+        return transactionChkdtlDao.save(chkdtl)
+    }
+
+    override fun saveOrUpdateTransctionChkdtl(chkdtl: TTransactionChkdtl){
+        transactionChkdtlDao.save(chkdtl)
     }
 
     override fun doConfirmChkfileStatus(chkfile: TTransactionChkfile, checkStatus: TSourceTypeCheckStatus): TTransactionChkfile {
-//        if (chkfile.status == ConstantUtil.CHKFILE_STATUS_ERROR) {
-//            chkfile.remark = checkStatus.remark
-//        } else {
-//            val personSumInfo = persondtlDao.getPersondtlSumInfo(chkfile.accdate, chkfile.sourcetype, chkfile.tenantid)
-//            chkfile.localcnt = personSumInfo.totalcnt ?: 0
-//            chkfile.localamt = personSumInfo.totalamt ?: 0.00
-//            chkfile.status = ConstantUtil.CHKFILE_STATUS_finish  //对账结束
-//            if (chkfile.othercnt == chkfile.localcnt && MoneyUtil.moneyEqual(chkfile.otheramt, chkfile.localamt)) {
-//                //fixme: 是否还需判断chkdtl中resolved是否都equal
-//                chkfile.result = ConstantUtil.CHKFILE_RESULT_EQUAL
-//                chkfile.remark = "对账完成，双方一致"
-//                checkStatus.settleStatus = true
-//            } else {
-//                chkfile.result = ConstantUtil.CHKFILE_RESULT_UNEQUAL
-//                chkfile.remark = "对账不平，请查看明细数据"
-//            }
-//            checkStatus.checkStatus = true
-//            checkStatus.remark = "对账完成"
-//        }
+        val personSumInfo = persondtlDao.getPersondtlSumInfo(chkfile.accdate, chkfile.sourcetype, chkfile.tenantid)
+        chkfile.localcnt = personSumInfo.totalcnt ?: 0
+        chkfile.localamt = personSumInfo.totalamt ?: 0.00
+
+        checkStatus.repairStatus = false
+        checkStatus.settleStatus = false
+        checkStatus.remark = chkfile.remark
+        if (chkfile.result in setOf(ConstantUtil.CHKFILE_RESULT_EQUAL, ConstantUtil.CHKFILE_RESULT_UNEQUAL)) {
+            val notEqualCount = transactionChkdtlDao.getChkdtlNotEqualCount(chkfile.id).existed
+            if (notEqualCount == 0 && chkfile.othercnt == chkfile.localcnt && MoneyUtil.moneyEqual(chkfile.otheramt, chkfile.localamt)) {
+                //对平
+                chkfile.remark = when (chkfile.result == ConstantUtil.CHKFILE_RESULT_EQUAL) {
+                    true -> "对账完成，双方交易一致"
+                    else -> "对账完成，补账后双方交易一致"
+                }
+                checkStatus.repairStatus = true
+                checkStatus.settleStatus = true
+                checkStatus.remark = chkfile.remark
+            }else{
+                checkStatus.remark = "对账完成，补账有失败"
+            }
+        }
 
         sourceTypeService.saveOrUpdateSourceTypeCheckStatus(checkStatus)
         return transactionChkfileDao.save(chkfile)
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 9429940..21a16a8 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
@@ -47,9 +47,24 @@
     fun checkUncheckExists(chkfileId: String): Boolean
 
     @Transactional(rollbackFor = [Exception::class])
-    fun doCheckLocalMoreDtls(chkfile: TTransactionChkfile, checkStatus: TSourceTypeCheckStatus): List<TTransactionChkdtl>
+    fun doCheckLocalMoreDtls(chkfile: TTransactionChkfile): Int
+
+    @Transactional(rollbackFor = [Exception::class])
+    fun doFinishChkfileStatus(chkfile: TTransactionChkfile, checkStatus: TSourceTypeCheckStatus)
+
+    @Transactional(rollbackFor = [Exception::class], readOnly = true)
+    fun getNeedRepairChkdtls(chkfile: TTransactionChkfile): List<TTransactionChkdtl>
+
+    @Transactional(rollbackFor = [Exception::class])
+    fun doRepairTransactionChkdtl(chkdtl: TTransactionChkdtl): TTransactionChkdtl
+
+    @Transactional(rollbackFor = [Exception::class])
+    fun saveOrUpdateTransctionChkdtl(chkdtl: TTransactionChkdtl)
+
 
     @Transactional(rollbackFor = [Exception::class])
     fun doConfirmChkfileStatus(chkfile: TTransactionChkfile, checkStatus: TSourceTypeCheckStatus): TTransactionChkfile
 
+
+
 }
\ No newline at end of file
