diff --git a/config/application-devel-pg-xkx.properties b/config/application-devel-pg-xkx.properties
index 3c10fe9..a3f5f41 100644
--- a/config/application-devel-pg-xkx.properties
+++ b/config/application-devel-pg-xkx.properties
@@ -38,3 +38,25 @@
 resttemplate.proxy.type=direct
 resttemplate.proxy.host=127.0.0.1
 resttemplate.proxy.port=8087
+
+#============== kafka ===================
+# 指定kafka 代理地址，可以多个
+#spring.kafka.bootstrap-servers=172.28.201.101:9192
+#=============== provider  =======================
+spring.kafka.producer.retries=3
+# 每次批量发送消息的数量
+spring.kafka.producer.batch-size=16384
+spring.kafka.producer.buffer-memory=33554432
+# 指定消息key和消息体的编解码方式
+spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
+spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
+
+#===============kafka consumer  =======================
+# 指定默认消费者group id
+spring.kafka.consumer.group-id=epaymessager1
+spring.kafka.consumer.auto-offset-reset=earliest
+spring.kafka.consumer.enable-auto-commit=true
+spring.kafka.consumer.auto-commit-interval=100
+# 指定消息key和消息体的编解码方式
+spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
+spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/SourceTypeCheckDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/SourceTypeCheckDao.java
index 361cb42..9f1a81d 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/SourceTypeCheckDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/SourceTypeCheckDao.java
@@ -8,4 +8,6 @@
 public interface SourceTypeCheckDao extends CrudRepository<TSourceTypeCheckStatus, Integer> {
   TSourceTypeCheckStatus getBySourceTypeAndTenantId(String sourceType, String tenantid);
 
+  TSourceTypeCheckStatus getById(int id);
+
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/SourceTypeDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/SourceTypeDao.java
index 38e1b38..718841a 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/SourceTypeDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/SourceTypeDao.java
@@ -22,4 +22,7 @@
   List<TSourceType> getConsumeSourceTypes();
 
   List<TSourceType> findByEnableAndTenantid(Boolean enabled, String tenantid);
+
+  @Query("from TSourceType t where t.enable=true  and t.checkable=true and t.tenantid=?1 order by t.sourceType ")
+  List<TSourceType> findNeedChecks(String tenantid);
 }
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 fb538c8..0b80ad7 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
@@ -4,6 +4,7 @@
 import com.supwisdom.dlpay.framework.data.CountAmountBean;
 import com.supwisdom.dlpay.framework.data.ExistBean;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
@@ -12,7 +13,7 @@
 import java.util.List;
 
 @Repository
-public interface TransactionChkdtlDao extends JpaRepository<TTransactionChkdtl, String> {
+public interface TransactionChkdtlDao extends JpaRepository<TTransactionChkdtl, String>,JpaSpecificationExecutor<TTransactionChkdtl> {
 
   @Modifying
   @Query("delete from TTransactionChkdtl t where t.chkfileId=?1 ")
@@ -51,6 +52,6 @@
   @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' ")
+  @Query("select count(t.id) as existed from TTransactionChkdtl t where t.chkfileId=?1 and t.resolved<>'equal' ")
   ExistBean getChkdtlNotEqualCount(String chkfileId);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkfileDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkfileDao.java
index a42f8ad..88da7c2 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkfileDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkfileDao.java
@@ -2,10 +2,11 @@
 
 import com.supwisdom.dlpay.api.domain.TTransactionChkfile;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Service;
 
 @Service
-public interface TransactionChkfileDao extends JpaRepository<TTransactionChkfile, String> {
+public interface TransactionChkfileDao extends JpaRepository<TTransactionChkfile, String>, JpaSpecificationExecutor<TTransactionChkfile> {
 
   TTransactionChkfile getByAccdateAndSourcetype(String accdate, String sourcetype);
 
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSourceTypeCheckStatus.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSourceTypeCheckStatus.java
index 6a13467..aae858e 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSourceTypeCheckStatus.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSourceTypeCheckStatus.java
@@ -1,21 +1,20 @@
 package com.supwisdom.dlpay.api.domain;
 
-import com.sun.org.apache.xpath.internal.operations.Bool;
-
 import javax.persistence.*;
 import javax.validation.constraints.NotNull;
 import java.sql.Timestamp;
 
 @Entity
 @Table(name = "tb_sourcetype_check",
-    indexes = {@Index(name = "sourcetype_check_idx", columnList = "source_type, tenantid", unique = true)})
+    indexes = {@Index(name = "sourcetype_check_idx", columnList = "sourcetype, tenantid", unique = true)})
 public class TSourceTypeCheckStatus {
   @Id
   @SequenceGenerator(name = "st_checker_id", sequenceName = "SEQ_SOURCETYPE_CHECK", allocationSize = 1)
   @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "st_checker_id")
+  @Column(name = "ID", nullable = false, length = 9)
   private Integer id;
 
-  @Column(name = "source_type", length = 30)
+  @Column(name = "sourcetype", length = 30)
   @NotNull
   private String sourceType;
 
@@ -174,4 +173,5 @@
   public void setRepairStatus(Boolean repairStatus) {
     this.repairStatus = repairStatus;
   }
+
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/SourcetypeCheckController.java b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/SourcetypeCheckController.java
new file mode 100644
index 0000000..f5025bf
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/SourcetypeCheckController.java
@@ -0,0 +1,137 @@
+package com.supwisdom.dlpay.system.controller;
+
+import com.supwisdom.dlpay.api.bean.JsonResult;
+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.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.framework.util.WebConstant;
+import com.supwisdom.dlpay.system.service.SourcetypeCheckManagerService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ * 对账管理
+ */
+@Controller
+public class SourcetypeCheckController {
+  @Autowired
+  private SourcetypeCheckManagerService sourcetypeCheckManagerService;
+
+  /**
+   * ====================================================
+   * 对帐状态总表 checkStatus
+   * ====================================================
+   */
+  @GetMapping("/thirdchk/chkstatus")
+  public String chkStatusIndex() {
+    return "system/thirdchk/chkstatus";
+  }
+
+  @GetMapping("/thirdchk/chkstatuslist")
+  @PreAuthorize("hasPermission('/thirdchk/chkstatus','')")
+  @ResponseBody
+  public PageResult<TSourceTypeCheckStatus> getDataList(@RequestParam("page") Integer pageNo,
+                                                        @RequestParam("limit") Integer pageSize,
+                                                        @RequestParam(value = "searchkey", required = false) String searchKey) {
+    try {
+      if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+      if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+      return sourcetypeCheckManagerService.getSourceTypeCheckStatusPage(searchKey, pageNo, pageSize);
+    } catch (Exception e) {
+      e.printStackTrace();
+      return new PageResult<>(99, "系统查询错误");
+    }
+  }
+
+  @PostMapping("/thirdchk/forcerecheck")
+  @PreAuthorize("hasPermission('/thirdchk/forcerecheck','')")
+  @ResponseBody
+  public JsonResult forceRecheck(@RequestParam("chkid") Integer chkid, @RequestParam("enable") Boolean enable) {
+    try {
+      TSourceTypeCheckStatus checkStatus = sourcetypeCheckManagerService.getSourceTypeCheckStatusById(chkid);
+      if (null == checkStatus) {
+        return JsonResult.error("对账状态记录不存在");
+      } else if (checkStatus.getSettleStatus()) {
+        return JsonResult.error("该对账状态记录已清算完成，不能修改此状态");
+      }
+
+      if (enable.equals(checkStatus.getForceRecheck())) {
+        return JsonResult.error(checkStatus.getForceRecheck() ? "该对账状态记录目前已启用强制重对" : "该对账状态记录目前已关闭强制重对");
+      }
+      checkStatus.setForceRecheck(enable);
+
+      if (sourcetypeCheckManagerService.saveOrUpdateSourceTypeCheckStatus(checkStatus)) {
+        return JsonResult.ok("修改成功！");
+      } else {
+        return JsonResult.error("修改失败");
+      }
+    } catch (Exception ex) {
+      ex.printStackTrace();
+      return JsonResult.error("系统处理异常").put("exception", ex);
+    }
+  }
+
+  /**
+   * ====================================================
+   * 对帐明细表 chkfile  chkdtl
+   * ====================================================
+   */
+  @GetMapping("/thirdchk/chkfile")
+  public String checkFileIndex(Model map) {
+    map.addAttribute("checkSourcetypeList", sourcetypeCheckManagerService.getNeedCheckSourcetype());
+    return "system/thirdchk/chkfile";
+  }
+
+  @GetMapping("/thirdchk/chkfilelist")
+  @PreAuthorize("hasPermission('/thirdchk/chkfile','')")
+  @ResponseBody
+  public PageResult<TTransactionChkfile> getChkfileDataList(@RequestParam("page") Integer pageNo,
+                                                            @RequestParam("limit") Integer pageSize,
+                                                            @RequestParam(value = "startdate", required = false) String startdate,
+                                                            @RequestParam(value = "enddate", required = false) String enddate,
+                                                            @RequestParam(value = "sourcetype", required = false) String sourcetype) {
+    try {
+      if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+      if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+      return sourcetypeCheckManagerService.getTransactionChkfilePage(startdate, enddate, sourcetype, pageNo, pageSize);
+    } catch (Exception e) {
+      e.printStackTrace();
+      return new PageResult<>(99, "系统查询错误");
+    }
+  }
+
+  @GetMapping("/thirdchk/chkdtl")
+  @PreAuthorize("hasPermission('/thirdchk/chkdtl','')")
+  public String load4CheckDtl(@RequestParam("chkfileid") String chkfileid, Model map) {
+    map.addAttribute("chkfileid", chkfileid);
+    return "system/thirdchk/chkdtl";
+  }
+
+  @GetMapping("/thirdchk/chkdtllist")
+  @PreAuthorize("hasPermission('/thirdchk/chkdtl','')")
+  @ResponseBody
+  public PageResult<TTransactionChkdtl> getChkdtlList(@RequestParam("page") Integer pageNo,
+                                                      @RequestParam("limit") Integer pageSize,
+                                                      @RequestParam("chkfileid") String chkfileid,
+                                                      @RequestParam(value = "searchkey", required = false) String searchKey,
+                                                      @RequestParam(value = "chkresult", required = false) String chkresult,
+                                                      @RequestParam(value = "errorshow", required = false) Boolean errorshow) {
+    try {
+      if (StringUtil.isEmpty(chkfileid)) return new PageResult<>(99, "请选择对账明细文件");
+      if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+      if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+      return sourcetypeCheckManagerService.getTransactionChkdtlPage(chkfileid, searchKey, chkresult, (errorshow != null ? errorshow : false), pageNo, pageSize);
+    } catch (Exception e) {
+      e.printStackTrace();
+      return new PageResult<>(99, "系统查询错误");
+    }
+  }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/SourcetypeCheckManagerService.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/SourcetypeCheckManagerService.java
new file mode 100644
index 0000000..dcd9bb5
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/SourcetypeCheckManagerService.java
@@ -0,0 +1,31 @@
+package com.supwisdom.dlpay.system.service;
+
+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.framework.util.PageResult;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+public interface SourcetypeCheckManagerService {
+  @Transactional(rollbackFor = Exception.class, readOnly = true)
+  PageResult<TSourceTypeCheckStatus> getSourceTypeCheckStatusPage(String searchkey, int pageNo, int pageSize);
+
+  @Transactional(rollbackFor = Exception.class, readOnly = true)
+  TSourceTypeCheckStatus getSourceTypeCheckStatusById(Integer chkid);
+
+  @Transactional(rollbackFor = Exception.class)
+  boolean saveOrUpdateSourceTypeCheckStatus(TSourceTypeCheckStatus checkStatus);
+
+
+  @Transactional(rollbackFor = Exception.class, readOnly = true)
+  List<TSourceType> getNeedCheckSourcetype();
+
+  @Transactional(rollbackFor = Exception.class, readOnly = true)
+  PageResult<TTransactionChkfile> getTransactionChkfilePage(String startdate, String enddate, String sourcetype, int pageNo, int pageSize);
+
+  @Transactional(rollbackFor = Exception.class, readOnly = true)
+  PageResult<TTransactionChkdtl> getTransactionChkdtlPage(String chkfileId, String searchKey, String chkresult, boolean errorshow, int pageNo, int pageSize);
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SourcetypeCheckManagerServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SourcetypeCheckManagerServiceImpl.java
new file mode 100644
index 0000000..b8790ae
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SourcetypeCheckManagerServiceImpl.java
@@ -0,0 +1,155 @@
+package com.supwisdom.dlpay.system.service.impl;
+
+import com.supwisdom.dlpay.api.dao.SourceTypeCheckDao;
+import com.supwisdom.dlpay.api.dao.SourceTypeDao;
+import com.supwisdom.dlpay.api.dao.TransactionChkdtlDao;
+import com.supwisdom.dlpay.api.dao.TransactionChkfileDao;
+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.framework.tenant.TenantContext;
+import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.system.service.SourcetypeCheckManagerService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class SourcetypeCheckManagerServiceImpl implements SourcetypeCheckManagerService {
+  @Autowired
+  private TransactionChkfileDao transactionChkfileDao;
+  @Autowired
+  private TransactionChkdtlDao transactionChkdtlDao;
+  @Autowired
+  private SourceTypeCheckDao sourceTypeCheckDao;
+  @Autowired
+  private SourceTypeDao sourceTypeDao;
+
+  @PersistenceContext
+  private EntityManager entityManager;
+
+
+  @Override
+  public PageResult<TSourceTypeCheckStatus> getSourceTypeCheckStatusPage(String searchkey, int pageNo, int pageSize) {
+    StringBuffer querySql = new StringBuffer("select a from TSourceTypeCheckStatus a,TSourceType b where a.sourceType=b.sourceType and a.tenantId=b.tenantid ");
+
+    StringBuffer countSql = new StringBuffer("select count(a.id) as cnt from TSourceTypeCheckStatus a,TSourceType b where a.sourceType=b.sourceType and a.tenantId=b.tenantid ");
+    if (!StringUtil.isEmpty(searchkey)) {
+      querySql.append(" and (b.sourceType like :str or b.paydesc like :str) ");
+      countSql.append(" and (b.sourceType like :str or b.paydesc like :str) ");
+    }
+    querySql.append(" order by a.sourceType ");
+    Query query = entityManager.createQuery(querySql.toString());
+    Query countQuery = entityManager.createQuery(countSql.toString());
+    if (!StringUtil.isEmpty(searchkey)) {
+      query.setParameter("str", "%" + searchkey.trim() + "%");
+      countQuery.setParameter("str", "%" + searchkey.trim() + "%");
+    }
+    query.setFirstResult((pageNo - 1) * pageSize);
+    query.setMaxResults(pageSize); //分页显示
+    List<TSourceTypeCheckStatus> list = query.getResultList();
+    Long count = (Long) countQuery.getSingleResult();
+    return new PageResult<>(count.longValue(), list);
+  }
+
+  @Override
+  public TSourceTypeCheckStatus getSourceTypeCheckStatusById(Integer chkid) {
+    if (null != chkid) {
+      return sourceTypeCheckDao.getById(chkid);
+    }
+    return null;
+  }
+
+  @Override
+  public boolean saveOrUpdateSourceTypeCheckStatus(TSourceTypeCheckStatus checkStatus) {
+    if (null != checkStatus) {
+      sourceTypeCheckDao.save(checkStatus);
+      return true;
+    }
+    return false;
+  }
+
+  @Override
+  public List<TSourceType> getNeedCheckSourcetype() {
+    List<TSourceType> list = sourceTypeDao.findNeedChecks(TenantContext.getTenantSchema());
+    if (!StringUtil.isEmpty(list)) {
+      return list;
+    }
+    return new ArrayList<>(0);
+  }
+
+  @Override
+  public PageResult<TTransactionChkfile> getTransactionChkfilePage(String startdate, String enddate, String sourcetype, int pageNo, int pageSize) {
+    Pageable pageable = PageRequest.of(pageNo - 1, pageSize, Sort.by(Sort.Direction.DESC, "accdate"));
+    Page<TTransactionChkfile> page = transactionChkfileDao.findAll(new Specification<TTransactionChkfile>() {
+      @Override
+      public Predicate toPredicate(Root<TTransactionChkfile> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
+        List<Predicate> predicates = new ArrayList<>();
+        if (!StringUtil.isEmpty(startdate)) {
+          predicates.add(criteriaBuilder.ge(root.get("accdate").as(Integer.class), Integer.valueOf(DateUtil.unParseToDateFormat(startdate))));
+        }
+        if (!StringUtil.isEmpty(enddate)) {
+          predicates.add(criteriaBuilder.le(root.get("accdate").as(Integer.class), Integer.valueOf(DateUtil.unParseToDateFormat(enddate))));
+        }
+        if (!StringUtil.isEmpty(sourcetype)) {
+          predicates.add(criteriaBuilder.equal(root.get("sourcetype").as(String.class), sourcetype.trim()));
+        }
+        return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
+      }
+    }, pageable);
+    return new PageResult<>(page);
+  }
+
+  @Override
+  public PageResult<TTransactionChkdtl> getTransactionChkdtlPage(String chkfileId, String searchKey, String chkresult, boolean errorshow, int pageNo, int pageSize) {
+    StringBuffer querySql = new StringBuffer("select a from TTransactionChkdtl a where a.chkfileId=:chkfileid ");
+    StringBuffer countSql = new StringBuffer("select count(a.id) as cnt from TTransactionChkdtl a where a.chkfileId=:chkfileid  ");
+    if (!StringUtil.isEmpty(searchKey)) {
+      querySql.append(" and (a.otherRefno like :str or a.localRefno like :str) ");
+      countSql.append(" and (a.otherRefno like :str or a.localRefno like :str) ");
+    }
+    if (!errorshow && !StringUtil.isEmpty(chkresult)) {
+      querySql.append(" and a.chkresult=:chkresult ");
+      countSql.append(" and a.chkresult=:chkresult ");
+    }
+    if (errorshow) {
+      querySql.append(" and a.chkresult<>'equal' ");
+      countSql.append(" and a.chkresult<>'equal' ");
+    }
+    querySql.append(" order by a.recordno ");
+    Query query = entityManager.createQuery(querySql.toString());
+    Query countQuery = entityManager.createQuery(countSql.toString());
+    query.setParameter("chkfileid", chkfileId.trim());
+    countQuery.setParameter("chkfileid", chkfileId.trim());
+    if (!StringUtil.isEmpty(searchKey)) {
+      query.setParameter("str", "%" + searchKey.trim() + "%");
+      countQuery.setParameter("str", "%" + searchKey.trim() + "%");
+    }
+    if (!errorshow && !StringUtil.isEmpty(chkresult)) {
+      query.setParameter("chkresult", chkresult.trim());
+      countQuery.setParameter("chkresult", chkresult.trim());
+    }
+    query.setFirstResult((pageNo - 1) * pageSize);
+    query.setMaxResults(pageSize); //分页显示
+    List<TTransactionChkdtl> list = query.getResultList();
+    Long count = (Long) countQuery.getSingleResult();
+    return new PageResult<>(count.longValue(), list);
+  }
+}
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index 80a95a2..362bc3c 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -65,6 +65,13 @@
 VALUES (31, NULL, 1, NULL, '', '/report/shopbusiness', '商户营业情况表', 3, 20, '{tenantid}');
 INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
 VALUES (32, NULL, 1, NULL, '', '/settlelog/index', '结算日志', 5, 3, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (33, NULL, 0, NULL, 'layui-icon-component', '#', '对账中心', 8, -1, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (34, NULL, 1, NULL, '', '/thirdchk/chkstatus', '对账状态查询', 331, 33, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (35, NULL, 1, NULL, '', '/thirdchk/chkfile', '对账明细查询', 332, 33, '{tenantid}');
+
 
 
 INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
@@ -121,6 +128,12 @@
 VALUES ('ff8080816b7947ed016b795577370081', 18, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
 VALUES ('ff8080816c8468e8016c846d7a570017', 32, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
+VALUES ('ff8080816c8468e8016c846d7a570017', 33, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
+VALUES ('ff8080816c8468e8016c846d7a570017', 34, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
+VALUES ('ff8080816c8468e8016c846d7a570017', 35, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 
 INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
 VALUES (4, '1', 4, '添加功能', '/function/add', '{tenantid}');
@@ -252,6 +265,15 @@
 VALUES (77, '', 32, '查询', '/settlelog/index', '{tenantid}');
 INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
 VALUES (78, '', 32, '查询', '/settlelog/dosettle', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (79, '', 34, '查询', '/thirdchk/chkstatus', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (80, '', 34, '强制重对切换', '/thirdchk/forcerecheck', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (81, '', 35, '查询', '/thirdchk/chkfile', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (82, '', 35, '查看详情', '/thirdchk/chkdtl', '{tenantid}');
+
 
 INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid", tenantid)
 VALUES ('ff8080816b7947ed016b795577300036', 16, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
@@ -383,6 +405,15 @@
 VALUES ('ff8080816c8468e8016c846d7a5d0018', 77, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
 VALUES ('ff8080816c85279d016c852aa829000d', 78, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816c985e76016c98659ad00015', 79, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816c985e76016c98659ad10016', 80, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816c985e76016c98659ad10017', 81, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816c99abee016c99b1cb1c0004', 82, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+
 
 INSERT INTO "tb_subject" ("subjid","subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
 VALUES (1, '1001', 1, 'y', 1, NULL, 20190430, 1, '库存现金', 1, '{tenantid}');
diff --git a/payapi/src/main/resources/templates/system/thirdchk/chkdtl.html b/payapi/src/main/resources/templates/system/thirdchk/chkdtl.html
new file mode 100644
index 0000000..fbc2b4e
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/thirdchk/chkdtl.html
@@ -0,0 +1,188 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">对账详情</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#!_thirdchk_chkfile">对账明细查询</a>
+          <a><cite>对账详情</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form" lay-filter="thirdchk-chkdtl-search-form">
+            <div class="layui-form-item" style="margin-bottom: 0;">
+                <div class="layui-inline">
+                    <label class="layui-form-label">关键字</label>
+                    <div class="layui-input-block" style="width: 260px;">
+                        <input type="text" name="searchkey" id="thirdchk-chkdtl-search-searchkey" class="layui-input"
+                               placeholder="输入本地流水号、第三方流水号查询"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">对账结果</label>
+                    <div class="layui-input-block" style="height: 35px;">
+                        <select name="chkresult" id="thirdchk-chkdtl-search-chkresult"
+                                lay-filter="thirdchk-chkdtl-search-chkresult-filter">
+                            <option value="">全部</option>
+                            <option value="uncheck">未检查</option>
+                            <option value="equal">双方一致</option>
+                            <option value="nocharge">本地流水未入账</option>
+                            <option value="notexist">本地流水不存在</option>
+                            <option value="surplus">本地多流水</option>
+                            <option value="diff">金额不相等</option>
+                            <option value="error">流水异常</option>
+                        </select>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <input type="hidden" id="thirdchk-chkdtl-search-chkfileid" th:value="${chkfileid}"/>
+                    <div class="layui-input-block" style="margin-left: 0;">
+                        <input type="checkbox" name="errorshow" id="thirdchk-chkdtl-search-errorshow" value="yes"
+                               lay-skin="primary" title="仅显示不平"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <button id="thirdchk-chkdtl-search-btn" class="layui-btn icon-btn" data-type="search"><i
+                            class="layui-icon">&#xe615;</i>搜索
+                    </button>
+                    <button id="thirdchk-chkdtl-reset-btn" class="layui-btn layui-btn-primary" data-type="reset">清空
+                    </button>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="layui-card-body">
+        <table class="layui-table" id="thirdchkChkdtlTable" lay-filter="thirdchkChkdtlTable-filter"></table>
+    </div>
+</div>
+
+<script type="text/html" id="thirdchk-chkdtl-toolbar">
+    <div class="layui-btn-container"></div>
+</script>
+
+<script>
+    layui.use(['form', 'table', 'admin'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin
+
+        form.render("select");
+        form.render("checkbox");
+
+        // 渲染表格
+        var renderTable = function (obj) {
+            table.render({
+                id: 'thirdchkChkdtlTable',
+                title: '对账详情',
+                elem: '#thirdchkChkdtlTable',
+                url: '[[@{/thirdchk/chkdtllist}]]',
+                page: true,
+                where: obj,
+                toolbar: '#thirdchk-chkdtl-toolbar',
+                cols: [
+                    [
+                        {field: 'accdate', title: '账单日期', align: 'center', width: 100, fixed: 'left'},
+                        {
+                            field: 'sourcetype',
+                            title: '支付方式',
+                            width: 200,
+                            align: 'center',
+                            fixed: 'left',
+                            templet: function (e) {
+                                return getTempDictValue('sourcetypeList', e.sourcetype);
+                            }
+                        },
+                        {field: 'recordno', title: '记录号', align: 'center', width: 80, fixed: 'left'},
+                        {
+                            field: 'amount', title: '交易金额', align: 'center', width: 100, templet: function (e) {
+                                return parseFloat(e.amount).toFixed(2);
+                            }
+                        },
+                        {
+                            field: 'chkresult', title: '对账结果', align: 'center', width: 150, templet: function (e) {
+                                if ("uncheck" == e.chkresult) {
+                                    return '<span class="layui-badge layui-bg-gray">未检查</span>';
+                                } else if ("equal" == e.chkresult) {
+                                    return '<span class="layui-badge layui-bg-green">双方一致</span>';
+                                } else if ("nocharge" == e.chkresult) {
+                                    return '<span class="layui-badge layui-bg-orange">本地流水未入账</span>';
+                                } else if ("notexist" == e.chkresult) {
+                                    return '<span class="layui-badge layui-bg-orange">本地流水不存在</span>';
+                                } else if ("surplus" == e.chkresult) {
+                                    return '<span class="layui-badge">本地多流水</span>';
+                                } else if ("diff" == e.chkresult) {
+                                    return '<span class="layui-badge">金额不相等</span>';
+                                } else {
+                                    return '<span class="layui-badge">流水异常</span>';
+                                }
+                            }
+                        },
+                        {
+                            field: 'resolved', title: '处理结果', align: 'center', width: 100, templet: function (e) {
+                                if ("none" == e.resolved) {
+                                    return '-';
+                                } else if ("equal" == e.resolved) {
+                                    if ("equal" == e.chkresult) {
+                                        return '一致';
+                                    } else {
+                                        return '补账后一致';
+                                    }
+                                } else if ("add" == e.resolved) {
+                                    return '需补账';
+                                } else if ("fail" == e.resolved) {
+                                    return '补账失败';
+                                } else if ("hangup" == e.resolved) {
+                                    return '异常挂起';
+                                } else {
+                                    return e.resolved;
+                                }
+                            }
+                        },
+                        {field: 'remark', title: '备注', align: 'center', width: 200},
+                        {field: 'localRefno', title: '本地流水号', align: 'center', width: 200},
+                        {field: 'otherRefno', title: '外部流水号', align: 'center', width: 200},
+                        {field: 'otherAccdate', title: '外部记账日期', align: 'center', width: 100},
+                        {
+                            field: 'transtype', title: '交易类型', align: 'center', width: 100, templet: function (e) {
+                                if ("pay" == e.transtype) {
+                                    return '支付';
+                                } else if ("refund" == e.transtype) {
+                                    return '退款';
+                                } else if ("cancel" == e.transtype) {
+                                    return '撤销';
+                                } else {
+                                    return e.transtype;
+                                }
+                            }
+                        },
+                        {field: 'extdata', title: '扩展字段', align: 'center', width: 200}
+                    ]
+                ]
+            });
+        }
+        renderTable({
+            chkfileid: $("#thirdchk-chkdtl-search-chkfileid").val(),
+            errorshow: false
+        });
+
+        $("#thirdchk-chkdtl-search-btn").click(function () {
+            table.reload('thirdchkChkdtlTable', {
+                where: {
+                    chkfileid: $("#thirdchk-chkdtl-search-chkfileid").val(),
+                    searchkey: $("#thirdchk-chkdtl-search-searchkey").val(),
+                    chkresult: $("#thirdchk-chkdtl-search-chkresult").val(),
+                    errorshow: $("#thirdchk-chkdtl-search-errorshow").is(':checked')
+                }, page: {curr: 1}
+            });
+        });
+
+        $("#thirdchk-chkdtl-reset-btn").click(function () {
+            $("#thirdchk-chkdtl-search-searchkey").val("");
+            $("#thirdchk-chkdtl-search-chkresult").val("");
+            $("#thirdchk-chkdtl-search-errorshow").prop("checked", false);
+            form.render("select");
+            form.render("checkbox");
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/payapi/src/main/resources/templates/system/thirdchk/chkfile.html b/payapi/src/main/resources/templates/system/thirdchk/chkfile.html
new file mode 100644
index 0000000..0a5bb52
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/thirdchk/chkfile.html
@@ -0,0 +1,173 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">对账明细查询</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#">对账中心</a>
+          <a><cite>对账明细查询</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form" lay-filter="thirdchk-chkfile-search-form">
+            <div class="layui-form-item" style="margin-bottom: 0;">
+                <div class="layui-inline">
+                    <label class="layui-form-label">账单日期</label>
+                    <div class="layui-input-inline">
+                        <input type="text" name="startdate" id="thirdchk-chkfile-search-startdate" placeholder="起始日期"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                    <div class="layui-form-mid">-</div>
+                    <div class="layui-input-inline">
+                        <input type="text" name="enddate" id="thirdchk-chkfile-search-enddate" placeholder="截止日期"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">支付方式</label>
+                    <div class="layui-input-block" style="height: 35px;">
+                        <select name="sourcetype" id="thirdchk-chkfile-search-sourcetype"
+                                lay-filter="thirdchk-chkfile-search-sourcetype-filter">
+                            <option value=""> 全部</option>
+                            <option th:each="pt:${checkSourcetypeList}" th:value="${pt.sourceType}"
+                                    th:text="${pt.paydesc}"></option>
+                        </select>&emsp;
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <button id="btn-search-thirdchk-chkfile" class="layui-btn icon-btn"><i class="layui-icon">&#xe615;</i> 搜 索</button>
+                    <button id="thirdchk-chkfile-reset-btn" class="layui-btn layui-btn-primary" data-type="reset"> 清 空
+                    </button>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="layui-card-body">
+        <table class="layui-table" id="thirdchkChkfileTable" lay-filter="thirdchkChkfileTable-filter"></table>
+    </div>
+</div>
+
+<script type="text/html" id="thirdchk-chkfile-toolbar">
+    <div class="layui-btn-container"></div>
+</script>
+
+<!-- 表格操作列 -->
+<script type="text/html" id="thirdchk-chkfile-table-bar">
+    <a class="layui-btn layui-btn-xs layui-btn-normal" lay-event="load4chkdtl">查看详情</a>
+</script>
+
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'laydate', 'index','element'], function () {
+        var $ = layui.jquery;
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin
+        var laydate = layui.laydate;
+        var index = layui.index;
+        var element = layui.element;
+
+        form.render("select");
+        laydate.render({
+            elem: '#thirdchk-chkfile-search-startdate',
+            trigger: 'click'
+        });
+        laydate.render({
+            elem: '#thirdchk-chkfile-search-enddate',
+            trigger: 'click'
+        });
+
+        // 渲染表格
+        table.render({
+            id: 'thirdchkChkfileTable',
+            title: '对账明细表',
+            elem: '#thirdchkChkfileTable',
+            url: '[[@{/thirdchk/chkfilelist}]]',
+            toolbar: '#thirdchk-chkfile-toolbar',
+            page: true,
+            cols: [
+                [
+                    {
+                        align: 'center',
+                        title: '操作',
+                        width: 100,
+                        fixed: 'left',
+                        toolbar: '#thirdchk-chkfile-table-bar'
+                    },
+                    {
+                        field: 'sourcetype',
+                        title: '名称',
+                        width: 200,
+                        align: 'center',
+                        fixed: 'left',
+                        templet: function (e) {
+                            return getTempDictValue('sourcetypeList', e.sourcetype);
+                        }
+                    },
+                    {field: 'accdate', title: '账单日期', width: 120, align: 'center', fixed: 'left'},
+                    {field: 'othercnt', title: '外部总笔数', width: 120, align: 'center'},
+                    {
+                        field: 'otheramt', title: '外部总金额', width: 120, align: 'center', templet: function (e) {
+                            return parseFloat(e.otheramt).toFixed(2);
+                        }
+                    },
+                    {field: 'localcnt', title: '本地总笔数', width: 120, align: 'center'},
+                    {
+                        field: 'localamt', title: '本地总金额', width: 110, align: 'center', templet: function (e) {
+                            return parseFloat(e.localamt).toFixed(2);
+                        }
+                    },
+                    {
+                        field: 'status', title: '账单状态', width: 120, align: 'center', templet: function (e) {
+                            if ('init' == e.status) {
+                                return '<span class="layui-badge layui-bg-gray">初始化</span>';
+                            } else if ('uncheck' == e.status) {
+                                return '<span class="layui-badge layui-bg-orange">待对账</span>';
+                            } else if ('finish' == e.status) {
+                                return '<span class="layui-badge layui-bg-green">对账完成</span>';
+                            } else if ('error' == e.status) {
+                                return '<span class="layui-badge">异常</span>';
+                            } else if ('checkout' == e.status) {
+                                return '<span class="layui-badge layui-bg-blue">校对完成</span>';
+                            } else {
+                                return e.status;
+                            }
+                        }
+                    },
+                    {field: 'remark', title: '对账结果', align: 'left'}
+                ]
+            ]
+        });
+
+        $("#btn-search-thirdchk-chkfile").click(function () {
+            var startdate = $("#thirdchk-chkfile-search-startdate").val();
+            var enddate = $("#thirdchk-chkfile-search-enddate").val();
+            var sourcetype = $("#thirdchk-chkfile-search-sourcetype").val();
+            table.reload('thirdchkChkfileTable', {
+                where: {
+                    startdate: startdate,
+                    enddate: enddate,
+                    sourcetype: sourcetype
+                }, page: {curr: 1}
+            });
+        });
+
+        $("#thirdchk-chkfile-reset-btn").click(function () {
+            $("#thirdchk-chkfile-search-startdate").val("");
+            $("#thirdchk-chkfile-search-enddate").val("");
+            $("#thirdchk-chkfile-search-sourcetype").val("");
+            form.render("select");
+        });
+
+        //监听单元格
+        table.on('tool(thirdchkChkfileTable-filter)', function (obj) {
+            if ('load4chkdtl' == obj.event) {
+                element.tabDelete('admin-pagetabs', '_thirdchk_chkdtl'); //关闭现有详情
+                index.openNewTab({
+                    url: "[[@{/thirdchk/chkdtl}]]?chkfileid=" + obj.data.id,
+                    menuId: '_thirdchk_chkdtl',
+                    title: '对账详情'
+                })
+            }
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/payapi/src/main/resources/templates/system/thirdchk/chkstatus.html b/payapi/src/main/resources/templates/system/thirdchk/chkstatus.html
new file mode 100644
index 0000000..2114a4a
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/thirdchk/chkstatus.html
@@ -0,0 +1,133 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">对账状态查询</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#">对账管理</a>
+          <a><cite>对账状态查询</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            搜索：
+            <input id="search-chkstatus-searchkey" class="layui-input search-input" type="text" maxlength="20"
+                   placeholder="输入支付能力、名称查询"/>&emsp;
+            <button id="btn-chkstatus-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            </button>
+            <button id="btn-chkstatus-reset" class="layui-btn layui-btn-primary" data-type="reset"><i
+                    class="layui-icon"></i>清 空
+            </button>
+        </div>
+        <table class="layui-table" id="checkStatusTable" lay-filter="checkStatusTable-filter"></table>
+    </div>
+</div>
+
+<!-- 表格状态列 -->
+<script type="text/html" id="chkstatus-forceRechk-tpl-state">
+    <input type="checkbox" lay-filter="chkstatus-forceRechk-tpl-state" value="{{d.id}}" lay-skin="switch"
+           lay-text="启用|关闭" {{d.forceRecheck== true?'checked':''}}/>
+</script>
+
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+        // 渲染表格
+        table.render({
+            elem: '#checkStatusTable',
+            url: '[[@{/thirdchk/chkstatuslist}]]',
+            page: true,
+            cols: [
+                [
+                    {field: 'sourceType', title: '支付方式', width: 130, align: 'center', fixed: 'left', sort: true},
+                    {
+                        field: 'sourceType',
+                        title: '名称',
+                        width: 200,
+                        align: 'center',
+                        fixed: 'left',
+                        templet: function (e) {
+                            return getTempDictValue('sourcetypeList', e.sourceType);
+                        }
+                    },
+                    {field: 'startAccdate', title: '起始日期', width: 110, align: 'center'},
+                    {field: 'checkFileDate', title: '对账日期', width: 110, align: 'center'},
+                    {
+                        field: 'checkFileOk', title: '下载账单状态', width: 120, align: 'center', templet: function (e) {
+                            if (e.checkFileOk) {
+                                return '<span style="color: green">已成功</span>';
+                            } else {
+                                return '<span style="color: red;">未成功</span>';
+                            }
+                        }
+                    },
+                    {
+                        field: 'checkStatus', title: '对账状态', width: 100, align: 'center', templet: function (e) {
+                            if (e.checkStatus) {
+                                return '<span style="color: green">已完成</span>';
+                            } else {
+                                return '<span style="color: red;">未完成</span>';
+                            }
+                        }
+                    },
+                    {
+                        field: 'settleStatus', title: '清算状态', width: 100, align: 'center', templet: function (e) {
+                            if (e.settleStatus) {
+                                return '<span style="color: green">已完成</span>';
+                            } else {
+                                return '<span style="color: red;">未完成</span>';
+                            }
+                        }
+                    },
+                    {
+                        field: 'forceRecheck',
+                        title: '强制重对',
+                        width: 100,
+                        align: 'center',
+                        templet: '#chkstatus-forceRechk-tpl-state',
+                    },
+                    {field: 'remark', title: '备注', align: 'left'}
+                ]
+            ]
+        });
+
+        // 搜索按钮点击事件
+        $('#btn-chkstatus-search').click(function () {
+            var skey = $("#search-chkstatus-searchkey").val();
+            table.reload('checkStatusTable', {where: {searchkey: skey}, page: {curr: 1}});
+
+        });
+
+        $('#btn-reset-sysparam').click(function () {
+            $("#search-chkstatus-searchkey").val("");
+        });
+
+        // 修改状态
+        form.on('switch(chkstatus-forceRechk-tpl-state)', function (obj) {
+            var token = $("meta[name='_csrf_token']").attr("value");
+            admin.go('[[@{/thirdchk/forcerecheck}]]', {
+                chkid: obj.elem.value,
+                enable: obj.elem.checked,
+                _csrf: token
+            }, function (data) {
+                console.log(data);
+                if (data.code === 200) {
+                    layer.msg(data.msg, {icon: 1, time: 1000});
+                    table.reload('checkStatusTable');
+                } else if (data.code === 401) {
+                    layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                        location.replace('[[@{/login}]]');
+                    }, 1000);
+                } else {
+                    layer.msg(data.msg, {icon: 2});
+                    $(obj.elem).prop('checked', !obj.elem.checked);
+                    form.render('checkbox');
+                }
+            }, function (err) {
+                admin.errorBack(err);
+                $(obj.elem).prop('checked', !obj.elem.checked);
+                form.render('checkbox');
+            });
+        });
+    });
+</script>
\ No newline at end of file
