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
