diff --git a/bus-qrcode/build.gradle b/bus-qrcode/build.gradle
index 0817cb6..8559f1d 100644
--- a/bus-qrcode/build.gradle
+++ b/bus-qrcode/build.gradle
@@ -7,7 +7,7 @@
 
 group = rootProject.group
 
-def sdkVersion = '1.3.5'
+def sdkVersion = '1.3.6'
 sourceCompatibility = 1.8
 targetCompatibility = 1.8
 
diff --git a/bus-qrcode/src/main/java/com/supwisdom/dlpay/busqrcode/QrCode.java b/bus-qrcode/src/main/java/com/supwisdom/dlpay/busqrcode/QrCode.java
index 93070d0..e920f0e 100644
--- a/bus-qrcode/src/main/java/com/supwisdom/dlpay/busqrcode/QrCode.java
+++ b/bus-qrcode/src/main/java/com/supwisdom/dlpay/busqrcode/QrCode.java
@@ -13,7 +13,6 @@
 import java.time.Duration;
 import java.time.Instant;
 import java.util.*;
-import java.util.concurrent.TimeUnit;
 
 import static com.supwisdom.dlpay.busqrcode.BinUtil.*;
 import static com.supwisdom.dlpay.busqrcode.CryptoUtil.*;
@@ -37,7 +36,7 @@
     qrDataKeys.add(FIELD_CARDTYPE);
     qrDataKeys.add(FIELD_TOTP);
     qrDataKeys.add(FIELD_RANDOM);
-//    qrDataKeys.add(FIELD_SIGN);
+    qrDataKeys.add(FIELD_SIGN);
   }
 
   private Builder qrBuilder;
@@ -271,18 +270,17 @@
     }
 
     final byte[] sign = sha256(byteConcat(qrData.getBytes(), factor));
-//    final byte[] signT = new byte[20];
-//    System.arraycopy(sign, 0, signT, 0, 20); //取前20位
-    final byte[] encDataPlain = byteConcat(qrData.getBytes(), DELIMITER.getBytes(), sign);
-//    final byte[] encData = aesEncryptCFB(qrBuilder.rootKey, encDataPlain, qrBuilder.iv);
-    final byte[] encData = aesEncryptCFB(qrBuilder.rootKey, qrData.getBytes(), qrBuilder.iv);
+    final byte[] signT = new byte[8];
+    System.arraycopy(sign, 0, signT, 0, 8); //取前8位
+    final byte[] encDataPlain = byteConcat(qrData.getBytes(), DELIMITER.getBytes(), signT);
+    final byte[] encData = aesEncryptCFB(qrBuilder.rootKey, encDataPlain, qrBuilder.iv);
     final String code = encodeBase64(encData);
     String result = code;
     if (qrBuilder.prefix != null) {
       result = qrBuilder.prefix + code;
     }
     if (qrBuilder.debug) {
-      System.out.println("hex sign=[" + encodeHex(sign) + "]");
+      System.out.println("hex sign=[" + encodeHex(signT) + "]");
       System.out.println("hex encDataPlain=[" + encodeHex(encData) + "]");
       System.out.println("QR code=[" + result + "]");
       System.out.println("======================  Build QR Code End  =================================");
@@ -321,8 +319,8 @@
     if (qrBuilder.debug) {
       System.out.println("encDataPlain=[" + encData + "]");
     }
-    final String[] fields = encData.split(DELIMITER, 5);
-    if (fields.length < 5) {
+    final String[] fields = encData.split(DELIMITER, 6);
+    if (fields.length < 6) {
       throw new RuntimeException("二维码数据异常！");
     }
     Map<String, String> result = new HashMap<>();
@@ -340,16 +338,16 @@
     final String uid = result.get(FIELD_UID);
     final byte[] factor = getSignFactor(uid);
     final byte[] calcSign = sha256(byteConcat(qrData.getBytes(), factor));
-//    final byte[] signT = new byte[20];
-//    System.arraycopy(calcSign, 0, signT, 0, 20); //取前20位
+    final byte[] signT = new byte[8];
+    System.arraycopy(calcSign, 0, signT, 0, 8); //取前8位
     if (qrBuilder.debug) {
-//      System.out.println("calcSign=[" + new String(calcSign) + "]");
+      System.out.println("calcSign=[" + new String(signT) + "]");
       System.out.println("    sign=[" + result.get(FIELD_SIGN) + "]");
       System.out.println("======================  Decode QR Code End  =================================");
     }
-//    if (!new String(signT).equalsIgnoreCase(result.get(FIELD_SIGN))) {
-//      throw new RuntimeException("二维码验证错误！");
-//    }
+    if (!new String(signT).equalsIgnoreCase(result.get(FIELD_SIGN))) {
+      throw new RuntimeException("二维码验证错误！");
+    }
 
     return result;
   }
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-common/src/main/java/com/supwisdom/dlpay/api/agent/Constant.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/agent/Constant.java
index 7f572da..39169ac 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/agent/Constant.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/agent/Constant.java
@@ -20,4 +20,5 @@
   public static final String COL_STATUS = "status";
   public static final String COL_FLAG = "flag";
   public static final String COL_RECORDNO = "recordno"; //记录号
+  public static final String COL_BANKSEQNO = "payeeno"; //商户银行序号
 }
diff --git a/payapi/build.gradle b/payapi/build.gradle
index 62de5b2..d7eb36a 100644
--- a/payapi/build.gradle
+++ b/payapi/build.gradle
@@ -125,7 +125,7 @@
     implementation group: 'com.alipay.sdk', name: 'alipay-sdk-java', version: '3.7.110.ALL'
 
     /*大理二维码jar*/
-    implementation 'com.supwisdom:dlsmk-qrcode:1.3.5'
+    implementation 'com.supwisdom:dlsmk-qrcode:1.3.6'
 
     annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
     annotationProcessor 'org.projectlombok:lombok:1.18.8'
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/framework/util/StringUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
index 180679b..9b9059f 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
@@ -198,7 +198,7 @@
     }
 
     //18位社会信用代码判断
-    java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("^([0-9ABCDEFGHJKLMNPQRTUWXY]{2})([0-9]{6})([0-9ABCDEFGHJKLMNPQRTUWXY]{9})([0-9Y])$");
+    java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$");
     java.util.regex.Matcher match = pattern.matcher(businessLicenseNo);
     if (!match.matches()) return false; //社会信用代码校验错误！
 
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
index b8790ae..412522f 100644
--- 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
@@ -8,6 +8,7 @@
 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.service.SystemUtilService;
 import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.PageResult;
@@ -44,6 +45,8 @@
 
   @PersistenceContext
   private EntityManager entityManager;
+  @Autowired
+  private SystemUtilService systemUtilService;
 
 
   @Override
@@ -65,6 +68,22 @@
     query.setFirstResult((pageNo - 1) * pageSize);
     query.setMaxResults(pageSize); //分页显示
     List<TSourceTypeCheckStatus> list = query.getResultList();
+    if (null != list && list.size() > 0) {
+      //处理【对账到】和【已对账】问题，避免修改对账逻辑和结算逻辑，这里直接处理显示问题
+      final String today = systemUtilService.getSysdatetime().getHostdate();
+      for (TSourceTypeCheckStatus stat : list) {
+        if (today.equals(stat.getCheckAccdate())) {
+          //对账到了当前日期，说明昨天已对账完成。切换下展示内容
+          stat.setCheckAccdate(DateUtil.getNewDay(stat.getCheckAccdate(), -1));
+          stat.setCheckFileOk(true);
+          stat.setCheckStatus(true);
+          stat.setRepairStatus(true);
+          stat.setSettleStatus(true);
+          stat.setRemark("对账完成"); //显示昨天已对账完成
+        }
+      }
+    }
+
     Long count = (Long) countQuery.getSingleResult();
     return new PageResult<>(count.longValue(), list);
   }
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/kotlin/com/supwisdom/dlpay/api/service/impl/kafka_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/kafka_service_impl.kt
index fc5afd8..068ab00 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/kafka_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/kafka_service_impl.kt
@@ -42,7 +42,7 @@
 
     @Async("kafkaSendMessageAsyncTask")
     override fun sendJpushMessage(userid: String, title: String, content: String, refno: String, extras: MutableMap<String, String>, tenantId: String?) {
-        val musers = mobileApiService.findByUseridAndStatus(userid, TradeDict.STATUS_NORMAL)
+       // val musers = mobileApiService.findByUseridAndStatus(userid, TradeDict.STATUS_NORMAL)
         var msg = TBMsg().apply {
             this.content = content
             this.title = title
@@ -52,39 +52,36 @@
             this.refno = refno
             this.extras = gson.toJson(extras)
         }
-        if (musers == null || musers.isEmpty()) {
-            msg.pushresult = "没有手机用户，消息未推送"
-            msgDao.save(msg)
-            return
-        }
+//        if (musers == null || musers.isEmpty()) {
+//            msg.pushresult = "没有手机用户，消息未推送"
+//            msgDao.save(msg)
+//            return
+//        }
         msg = msgDao.save(msg)
         var uids = ""
-        musers.forEach {
-            uids += "${it.uid},"
-            var platform = "android"
-            if ("ios".equals(it.lastloginplatform, true)) {
-                platform = "ios"
-            }
-            val message = KafkaXgMessage()
-            message.alltarget = false
-            message.callback = true
-            message.content = msg.content
-            message.title = msg.title
-            message.platform = platform
-            message.retries = 3
-            extras["refno"] = refno
-            message.custom = gson.toJson(extras)
-            message.expiretime = DateUtil.getNewTime(DateUtil.getNow(), 300)
-            message.gids = it.uid
-            if (it.lastloginplatform.isNullOrEmpty()) {
-                message.platform = "all"
-                kafkaTemplate.send(topic, msg.msgid, gson.toJson(message))
-            } else {
-                kafkaTemplate.send(topic, msg.msgid, gson.toJson(message))
-            }
-        }
-        msg.pusheduids = uids
-        msgDao.save(msg)
+//        musers.forEach {
+//            uids += "${it.uid},"
+//            var platform = "android"
+//            if ("ios".equals(it.lastloginplatform, true)) {
+//                platform = "ios"
+//            }
+//
+//        }
+//        msg.pusheduids = uids
+//        msgDao.save(msg)
+        val message = KafkaXgMessage()
+        message.alltarget = false
+        message.callback = true
+        message.content = msg.content
+        message.title = msg.title
+        message.retries = 3
+        extras["refno"] = refno
+        message.custom = gson.toJson(extras)
+        message.expiretime = DateUtil.getNewTime(DateUtil.getNow(), 300)
+        message.gids = userid
+        message.platform = "all"
+        kafkaTemplate.send(topic, msg.msgid, gson.toJson(message))
+
     }
 
     @Async("kafkaSendMessageAsyncTask")
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
index 1214614..781ef04 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
@@ -431,7 +431,7 @@
             //  如果银行返回已签约，保存密钥到UserSecret表
             mobileApiService.signBxy(card, SignBxyParam().apply {
                 this.uid = user.uid
-                this.userid = user.userid
+                this.userid = person.userid
                 this.secertkey = user.secertkey
                 this.rsapublic = user.rsapublic
                 this.rsaprivate = user.rsaprivate
@@ -488,7 +488,7 @@
             //  如果银行返回已签约，保存密钥到UserSecret表
             mobileApiService.signBxy(card, SignBxyParam().apply {
                 this.uid=user.uid
-                this.userid = user.userid
+                this.userid = person.userid
                 this.secertkey = user.secertkey
                 this.rsapublic = user.rsapublic
                 this.rsaprivate = user.rsaprivate
@@ -625,7 +625,7 @@
             mobileApiService.saveUser(user)
             mobileApiService.signBxy(card, SignBxyParam().apply {
                 this.uid=user.uid
-                this.userid = user.userid
+                this.userid = person.userid
                 this.secertkey = user.secertkey
                 this.rsapublic = user.rsapublic
                 this.rsaprivate = user.rsaprivate
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>
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/CheckFileLine.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/CheckFileLine.java
index e3d9b69..3e6cad5 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/CheckFileLine.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/CheckFileLine.java
@@ -1,10 +1,10 @@
 package com.supwisdom.agent.api.bean;
 
 /**
- * * 第二行及以后：交易日期|交易时间|报文业务类型|业务系统流水号|银行流水号|付款银行卡号|收款商户银行卡号|核心记账日期|交易金额|交易摘要|
+ * * 第二行及以后：交易日期|交易时间|报文业务类型|业务系统流水号|银行流水号|付款银行卡号|收款商户银行卡号|[账号序号]|核心记账日期|交易金额|交易摘要|
  * <p>
  * private static final String[]chkFileColumnList=new String[]{"transdate","transtime","flag","refno","agentrefno",
- * "payerid","payeeid","agentdate","amount","summary"};
+ * "payerid","payeeid",["payeeno"],"agentdate","amount","summary"};
  */
 public class CheckFileLine {
   private String transdate;
@@ -14,6 +14,7 @@
   private String agentrefno;
   private String payerid;
   private String payeeid;
+  private String payeeno; //fixme: 银行测试环境修改对账单新增账号序号 2020.11.27
   private String agentdate;
   private Integer amount;
   private String summary;
@@ -97,4 +98,12 @@
   public void setSummary(String summary) {
     this.summary = summary;
   }
+
+  public String getPayeeno() {
+    return payeeno;
+  }
+
+  public void setPayeeno(String payeeno) {
+    this.payeeno = payeeno;
+  }
 }
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/DlpayReq.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/DlpayReq.java
index e1e28e9..eb0f31b 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/DlpayReq.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/bean/DlpayReq.java
@@ -106,12 +106,12 @@
         .append("<ID_NO>").append(idNo).append("</ID_NO>")
         .append("<MERCHANT_BCNO>").append(merchantBcno).append("</MERCHANT_BCNO>")
         .append("<MERCHANT_NAME>").append(merchantName).append("</MERCHANT_NAME>")
-//        .append("<MERCHANT_BCNOSEQ>").append(merchantBcnoSeqno).append("</MERCHANT_BCNOSEQ>")   //fixme: 银行测试环境新加 2020.11.27
+        .append("<MERCHANT_BCNOSEQ>").append(merchantBcnoSeqno).append("</MERCHANT_BCNOSEQ>")   //fixme: 银行测试环境新加 2020.11.27
         .append("<AMOUNT>").append(amount).append("</AMOUNT>")
-//        .append("<SCENARIO>").append(scenario).append("</SCENARIO>")  //fixme: 银行测试环境新加字段 2020.11.27
+        .append("<SCENARIO>").append(scenario).append("</SCENARIO>")  //fixme: 银行测试环境新加字段 2020.11.27
         .append("<DESCRIPTION>").append(description).append("</DESCRIPTION>")
-        .append("<MAC>").append(MD5.encodeByMD5ForYnrcc(merchantBcno + bcNo + amount)).append("</MAC>")
-//        .append("<MAC>").append(MD5.encodeByMD5ForYnrcc(merchantBcno + bcNo + amount + "ynnx@2020|dlsmk" + sn)).append("</MAC>")  //fixme: 银行测试环境修改MAC算法 2020.11.27
+//        .append("<MAC>").append(MD5.encodeByMD5ForYnrcc(merchantBcno + bcNo + amount)).append("</MAC>")
+        .append("<MAC>").append(MD5.encodeByMD5ForYnrcc(merchantBcno + bcNo + amount + "ynnx@2020|dlsmk" + sn)).append("</MAC>")  //fixme: 银行测试环境修改MAC算法 2020.11.27
         .append("</root>");
     return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString();
   }
@@ -163,7 +163,7 @@
         .append("<SN>").append(sn).append("</SN>")
         .append("<DZDATE>").append(chkdate).append("</DZDATE>")
         .append("<MERCHANT_BCNO>").append("</MERCHANT_BCNO>")
-//        .append("<MERCHANT_BCNOSEQ>").append("</MERCHANT_BCNOSEQ>")   //fixme: 银行测试环境新加商户银行卡序号字段 2020.11.27
+        .append("<MERCHANT_BCNOSEQ>").append("</MERCHANT_BCNOSEQ>")   //fixme: 银行测试环境新加商户银行卡序号字段 2020.11.27
         .append("</root>");
     return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString();
   }
@@ -179,8 +179,8 @@
         .append("<TRANSDATE>").append(transdate).append("</TRANSDATE>")
         .append("<TRANSTIME>").append(transtime).append("</TRANSTIME>")
         .append("<SN>").append(sn).append("</SN>")
-        .append("<STLTRXDATE>").append(stltrxdate).append("</STLTRXDATE>")
-//        .append("<STLSNDATE>").append(stltrxdate).append("</STLSNDATE>")  //fixme: 银行测试环境改了字段名(STLTRXDATE 改为 STLSNDATE) 2020.11.27
+//        .append("<STLTRXDATE>").append(stltrxdate).append("</STLTRXDATE>")
+        .append("<STLSNDATE>").append(stltrxdate).append("</STLSNDATE>")  //fixme: 银行测试环境改了字段名(STLTRXDATE 改为 STLSNDATE) 2020.11.27
         .append("<STLAMT>").append(stlamt).append("</STLAMT>")
         .append("<JNLCOUNT>").append(jnlcount).append("</JNLCOUNT>")
         .append("</root>");
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java
index e3f9ea1..f445df7 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java
@@ -40,10 +40,10 @@
 
   /**
    * 第一行：总笔数|总金额|代扣总笔数|代扣总金额|退款总笔数|退款总金额|
-   * 第二行及以后：交易日期|交易时间|报文业务类型|业务系统流水号|银行流水号|付款银行卡号|收款商户银行卡号|核心记账日期|交易金额|交易摘要|
+   * 第二行及以后：交易日期|交易时间|报文业务类型|业务系统流水号|银行流水号|付款银行卡号|收款商户银行卡号|[账号序号]|核心记账日期|交易金额|交易摘要|
    */
   private static final String[] chkFileColumnList = new String[]{"transdate", "transtime", Constant.COL_FLAG,
-      Constant.COL_REFNO, Constant.COL_AGENT_REFNO, Constant.COL_PAYERID, Constant.COL_PAYEEID,
+      Constant.COL_REFNO, Constant.COL_AGENT_REFNO, Constant.COL_PAYERID, Constant.COL_PAYEEID, Constant.COL_BANKSEQNO,
       Constant.COL_AGENT_DATE, Constant.COL_AMOUNT, Constant.COL_SUMMARY};
 
   private static final String chkFileDelimiter = "\\|";
@@ -483,16 +483,18 @@
           flag = Constant.FLAG_PAY;
           fileHeader.setPayCount(fileHeader.getPayCount() - 1);
           fileHeader.setPayAmount(fileHeader.getPayAmount() - record.getAmount());
+          fileHeader.setTotalAmount(fileHeader.getTotalAmount() - record.getAmount());
         } else if (FLAG_REFUND.equals(record.getFlag())) {
           amount = record.getAmount();
           flag = Constant.FLAG_REFUND;
           fileHeader.setRefundCount(fileHeader.getRefundCount() - 1);
           fileHeader.setRefundAmount(fileHeader.getRefundAmount() - record.getAmount());
+          fileHeader.setTotalAmount(fileHeader.getTotalAmount() + record.getAmount());
         } else {
           throw new IllegalArgumentException("对账文件【报文业务类型】错误，行数 " + lineno + " 。");
         }
         fileHeader.setTotalCount(fileHeader.getTotalCount() - 1);
-        fileHeader.setTotalAmount(fileHeader.getTotalAmount() - record.getAmount());
+//        fileHeader.setTotalAmount(fileHeader.getTotalAmount() - record.getAmount());
         writeLine(output, record.getRefno(), record.getAgentrefno(), record.getAgentdate(),
             flag, record.getPayerid(), record.getPayeeid(), Constant.STATUS_SUCCESS,
             amount, record.getSummary(), lineno - 1);
