diff --git a/config/application-devel-pg-xkx.properties b/config/application-devel-pg-xkx.properties
index 16830f5..e03fe08 100644
--- a/config/application-devel-pg-xkx.properties
+++ b/config/application-devel-pg-xkx.properties
@@ -45,6 +45,7 @@
 #send.delay.notice.task.cron=29 0/1 * * * ?
 #points.outdate.cron=0 0 0 * * ?
 #points.consume.cron=0 0 0 * * ?
+citizencard.confirm.chkdtl.cron=*/30 * * * * ?
 #############################################
 spring.cloud.consul.enabled=false
 spring.cloud.consul.host=172.28.201.70
@@ -76,3 +77,4 @@
 # \u6307\u5B9A\u6D88\u606Fkey\u548C\u6D88\u606F\u4F53\u7684\u7F16\u89E3\u7801\u65B9\u5F0F
 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/PersondtlDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java
index 3be4457..e91b882 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java
@@ -2,7 +2,6 @@
 
 import com.supwisdom.dlpay.api.domain.TPersondtl;
 import com.supwisdom.dlpay.framework.data.CountAmountBean;
-import com.supwisdom.dlpay.framework.domain.TPointsdtl;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
@@ -27,4 +26,8 @@
     List<TPersondtl> findAllByTransdateAndReverseFlagAndStatusAndTradeflag(String transdate,String reverseFlag,String status,String tradeflag);
 
     TPersondtl findTopByUseridAndStatusAndTradeflag(String userid, String status, String tradeFlag);
+
+    @Query(value = "select sum(case when t.amount<=0 then 1 else -1 end) as totalcnt,sum(-1*t.amount) as totalamt from TPersondtl t where t.status='success' and t.accdate=?1 and t.sourceType=?2 ")
+    CountAmountBean getChkClearSumInfo(String accdate, String sourcetype);
+
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/citizencard/service/CitizencardManagerService.java b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/service/CitizencardManagerService.java
index c799ee2..779e6dd 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/citizencard/service/CitizencardManagerService.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/service/CitizencardManagerService.java
@@ -19,4 +19,7 @@
 
   @Transactional(rollbackFor = Exception.class)
   TCitizencardLossApply doFinishCitizencardLoss(TCitizencardLossApply lossApply);
+
+  @Transactional(rollbackFor = Exception.class)
+  boolean doConfirmCitizencardCheckProcess(String checkdate) throws Exception;
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/citizencard/service/impl/CitizencardManagerServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/service/impl/CitizencardManagerServiceImpl.java
index c628015..c19bc54 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/citizencard/service/impl/CitizencardManagerServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/service/impl/CitizencardManagerServiceImpl.java
@@ -1,14 +1,26 @@
 package com.supwisdom.dlpay.citizencard.service.impl;
 
+import com.google.gson.Gson;
+import com.supwisdom.dlpay.agent.citizencard.DlpayResp;
+import com.supwisdom.dlpay.agent.citizencard.YnrccUtil;
+import com.supwisdom.dlpay.agent.service.CitizencardPayService;
 import com.supwisdom.dlpay.api.dao.CardDao;
+import com.supwisdom.dlpay.api.dao.PersondtlDao;
 import com.supwisdom.dlpay.api.domain.TCard;
 import com.supwisdom.dlpay.citizencard.dao.CitizencardLossApplyDao;
 import com.supwisdom.dlpay.citizencard.domain.TCitizencardLossApply;
 import com.supwisdom.dlpay.citizencard.service.CitizencardManagerService;
+import com.supwisdom.dlpay.framework.dao.BusinessparaDao;
+import com.supwisdom.dlpay.framework.data.CountAmountBean;
+import com.supwisdom.dlpay.framework.domain.TBusinesspara;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.framework.util.TradeDict;
 import com.supwisdom.dlpay.util.ConstantUtil;
+import com.supwisdom.dlpay.util.WebCheckException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -22,8 +34,17 @@
   @Autowired
   private CardDao cardDao;
   @Autowired
+  private BusinessparaDao businessparaDao;
+  @Autowired
+  private PersondtlDao persondtlDao;
+
+  @Autowired
+  private CitizencardPayService citizencardPayService;
+  @Autowired
   private SystemUtilService systemUtilService;
 
+  private static final Logger logger = LoggerFactory.getLogger(CitizencardManagerServiceImpl.class);
+
   @Override
   public List<TCitizencardLossApply> getNewApplyCitizencardLossRecords() {
     List<TCitizencardLossApply> list = citizencardLossApplyDao.findCardlossApplyRecordsByStatus(ConstantUtil.CITIZENCARD_LOSSAPPLY_STATUS_APPLY);
@@ -58,4 +79,32 @@
     }
     return citizencardLossApplyDao.save(lossApply);
   }
+
+  @Override
+  public boolean doConfirmCitizencardCheckProcess(String checkdate) throws Exception {
+    TBusinesspara param = businessparaDao.findByParakeyForUpdate(ConstantUtil.BUSINESS_CITIZENCARD_CLEARDATE);
+    if (null == param || !DateUtil.checkDatetimeValid(param.getParaval(), "yyyyMMdd") || !DateUtil.checkDatetimeValid(checkdate, "yyyyMMdd")) {
+      throw new WebCheckException("确认清算参数错误！");
+    }
+    if (!checkdate.trim().equals(DateUtil.getNewDay(param.getParaval(), 1))) {
+      throw new WebCheckException("非连续清算确认！！！ 上次清算确认日期【" + checkdate + "】，本次清算确认日期【" + checkdate + "】！");
+    }
+
+    CountAmountBean sumInfo = persondtlDao.getChkClearSumInfo(checkdate.trim(), TradeDict.PAYTYPE_CITIZEN_CARD);
+    if (null == sumInfo) throw new Exception("确认清算：统计本地流水信息异常！");
+    final int totalcnt = sumInfo.getTotalcnt() == null ? 0 : sumInfo.getTotalcnt().intValue();
+    final long totalamt = sumInfo.getTotalamt() == null ? 0 : Math.round(100 * sumInfo.getTotalamt());
+
+    logger.info("【" + checkdate + "】请求清算确认：jnlcount=[" + totalcnt + "],stlamt=[" + totalamt + "]");
+    DlpayResp resp = citizencardPayService.makeSureCheckResult(checkdate.trim(), totalcnt, totalamt);
+    if (YnrccUtil.CODE_SUCCESS.equals(resp.getCode())) {
+      logger.info("【" + checkdate + "】确认清算成功！");
+      param.setParaval(checkdate);
+      businessparaDao.save(param);
+      return true;
+    }
+
+    logger.error("【" + checkdate + "】确认清算失败：" + new Gson().toJson(resp));
+    throw new WebCheckException(resp.getMessage());
+  }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/citizencard/task/CitizencardCheckConfirmTask.java b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/task/CitizencardCheckConfirmTask.java
new file mode 100644
index 0000000..3cb0417
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/task/CitizencardCheckConfirmTask.java
@@ -0,0 +1,84 @@
+package com.supwisdom.dlpay.citizencard.task;
+
+import com.supwisdom.dlpay.api.domain.TSourceTypeCheckStatus;
+import com.supwisdom.dlpay.api.service.SourceTypeService;
+import com.supwisdom.dlpay.citizencard.service.CitizencardManagerService;
+import com.supwisdom.dlpay.framework.domain.TBusinesspara;
+import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.tenant.TenantContext;
+import com.supwisdom.dlpay.framework.util.Constants;
+import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.framework.util.TradeDict;
+import com.supwisdom.dlpay.util.ConstantUtil;
+import com.supwisdom.dlpay.util.WebCheckException;
+import net.javacrumbs.shedlock.core.SchedulerLock;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 市民卡代扣对账成功后向银行确认任务
+ */
+@Component
+public class CitizencardCheckConfirmTask {
+  @Autowired
+  private CitizencardManagerService citizencardManagerService;
+  @Autowired
+  private SystemUtilService systemUtilService;
+  @Autowired
+  private SourceTypeService sourceTypeService;
+
+  private static final Logger logger = LoggerFactory.getLogger(CitizencardCheckConfirmTask.class);
+
+  @Scheduled(cron = "${citizencard.confirm.chkdtl.cron}")
+  @SchedulerLock(name = "CitizencardChkClearConfirmTask", lockAtMostForString = "PT10M")
+  public void doConfirmCitizenCardChkdtlTask() {
+    try { long t1 = System.currentTimeMillis();
+      if (null == TenantContext.getTenantSchema()) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID);
+
+      TBusinesspara businessParam = systemUtilService.getBusinessValueForUpdateNowait(ConstantUtil.BUSINESS_CITIZENCARD_CLEARDATE);
+      if (null == businessParam || !DateUtil.checkDatetimeValid(businessParam.getParaval(), "yyyyMMdd")) {
+        logger.error("市民卡代扣对账清算确认：未找到上次清算确认日期！");
+        return;
+      }
+
+      final String lastChkDate = businessParam.getParaval().trim(); //已确认清算的日期
+
+      TSourceTypeCheckStatus checkStatus = sourceTypeService.getSourceTypeCheckStatus(TradeDict.PAYTYPE_CITIZEN_CARD);
+      if (null == checkStatus) {
+        logger.error("市民卡代扣对账清算确认：未找到【市民卡代扣】对账状态！！！");
+        return;
+      }
+      final String canChkDate = checkStatus.getSettleStatus() ? checkStatus.getCheckAccdate() : DateUtil.getNewDay(checkStatus.getCheckAccdate(), -1);
+
+      long diffDays = DateUtil.getIntervalDay(lastChkDate, canChkDate);
+      if (diffDays > 0) logger.info("执行市民卡代扣对账清算确认任务开始：");
+
+      for (int i = 1; i <= diffDays; i++) {
+        final String clearDate = DateUtil.getNewDay(lastChkDate, i);
+        try {
+          citizencardManagerService.doConfirmCitizencardCheckProcess(clearDate);
+        } catch (WebCheckException be) {
+          logger.error("市民卡代扣对账清算确认【" + clearDate + "】失败！ " + be.getMessage());
+          break;
+        } catch (Exception e) {
+          logger.error("市民卡代扣对账清算确认【" + clearDate + "】失败！ " + e.getMessage());
+          e.printStackTrace();
+          break;
+        }
+      }
+
+      if (diffDays > 0) {
+        long t2 = System.currentTimeMillis();
+        logger.info("执行市民卡代扣对账清算确认结束，耗时 " + (t2 - t1) + " ms");
+      }
+
+    } catch (Exception ex) {
+      logger.error("执行市民卡代扣对账确认任务报错！");
+      ex.printStackTrace();
+    }
+  }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
index 4f6d410..8efd374 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
@@ -104,4 +104,6 @@
    * */
   public static final String KAFKA_MAGTYPE_NOTICE = "dlsmk_phone_notice";
   public static final String KAFKA_MAGTYPE_CONSUME = "dlsmk_card_consume";
+
+  public static final String BUSINESS_CITIZENCARD_CLEARDATE = "citizencard.check.clear.lastdate";
 }
diff --git a/payapi/src/main/resources/application.properties b/payapi/src/main/resources/application.properties
index 0881a1c..6e19153 100644
--- a/payapi/src/main/resources/application.properties
+++ b/payapi/src/main/resources/application.properties
@@ -1,9 +1,9 @@
-#######################################springboot配置 start#################################
+#######################################springboot\u914D\u7F6E start#################################
 spring.application.name=supwisdom.payapi
 spring.cloud.consul.discovery.health-check-path=${management.context-path}/api/common/version
 spring.cloud.consul.discovery.health-check-interval=10s
 spring.cloud.consul.discovery.instanceId=${spring.application.name}:${spring.application.instance_id:${random.value}}
-# 单库数据库配置
+# \u5355\u5E93\u6570\u636E\u5E93\u914D\u7F6E
 spring.jpa.show-sql=true
 spring.datasource.hikari.connection-timeout=60000
 spring.datasource.hikari.maximum-pool-size=5
@@ -23,7 +23,7 @@
 spring.thymeleaf.mode=HTML5
 spring.thymeleaf.cache=false
 spring.thymeleaf.enabled=true
-################## 全局字符编码设置 ######################
+################## \u5168\u5C40\u5B57\u7B26\u7F16\u7801\u8BBE\u7F6E ######################
 spring.http.encoding.force=true
 spring.http.encoding.charset=UTF-8
 spring.http.encoding.enabled=true
@@ -38,6 +38,7 @@
 send.delay.notice.task.cron=29 0/1 * * * ?
 points.outdate.cron=0 0 0 * * ?
 points.consume.cron=0 0 0 * * ?
+citizencard.confirm.chkdtl.cron=* */30 * * * ?
 ################################################
 # user password
 auth.password.bcrypt.length=10
diff --git a/payapi/src/main/resources/templates/system/param/busparaform.html b/payapi/src/main/resources/templates/system/param/busparaform.html
index 39dd9de..daccbb1 100644
--- a/payapi/src/main/resources/templates/system/param/busparaform.html
+++ b/payapi/src/main/resources/templates/system/param/busparaform.html
@@ -2,7 +2,7 @@
     <div class="layui-form-item">
         <label class="layui-form-label">参数名</label>
         <div class="layui-input-block">
-            <input name="parakey" placeholder="请输入参数名" type="text" class="layui-input" maxlength="30"
+            <input name="parakey" placeholder="请输入参数名" type="text" class="layui-input" maxlength="50"
                    lay-verify="required|businame" required/>
         </div>
     </div>
