Merge branch 'hotfix/1.0.15'
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java
index e1cbc30..79daf31 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java
@@ -14,6 +14,8 @@
   public static final String BANKCARD_PAYREFUND_TRANSCODE = "BC5513";
   public static final String BANKCARD_QUERYRESULT_TRANSCODE = "BC5514";
   public static final String BANKCARD_CHKFILE_TRANSCODE = "BC5515";
+  public static final String BANKCARD_CHKMAKESURE_TRANSCODE = "BC5516";
+  public static final String BANKCARD_BANKCARDLOSS_TRANSCODE = "BC5517";
 
   public static final String DLPAY_CATEGORIE = "C001"; //消费类别
 
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/util/QrCodeTotpUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/util/QrCodeTotpUtil.java
index fa51bb3..6cc621c 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/util/QrCodeTotpUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/util/QrCodeTotpUtil.java
@@ -2,7 +2,7 @@
 
 public class QrCodeTotpUtil {
     public static String generateTOTP(String seed){
-        long X = 30;
+        long X = 5;
         long T0 = 0;
         String steps = "0";
         long time = System.currentTimeMillis() / 1000;
@@ -16,7 +16,7 @@
     }
 
     public static String generateTOTP(String seed,String returnDigits){
-        long X = 30;
+        long X = 5;
         long T0 = 0;
         String steps = "0";
         long time = System.currentTimeMillis() / 1000;
@@ -31,7 +31,7 @@
 
     public static boolean verifyCode(String totp, String secret, int offset) {
 
-        String second = "30";
+        String second = "5";
         long T0 = 0;
         String[] keys = new String[offset * 2 + 1];
         long time = System.currentTimeMillis() / 1000;
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
index b601151..526d447 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
@@ -27,6 +27,9 @@
 
     fun getChkfilename(checkdate: String, merchantBankcardno: String?): DlpayResp
 
+    fun makeSureCheckResult(trxdate: String, transcnt: Int, transamt: Long): DlpayResp
+
+    fun bankCardLoss(bankcardno: String, username: String, idtype: String, idno: String): DlpayResp
 }
 
 @Component("citizenCardAgent")
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
index aa5c0ae..bc1ecca 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
@@ -393,4 +393,113 @@
         }
     }
 
+    override fun makeSureCheckResult(trxdate: String, transcnt: Int, transamt: Long): DlpayResp {
+        var resp = DlpayResp()
+        val config = sourceTypeService.getChargePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, true)
+        if (!checkCitizencardConfig(config, resp)) {
+            return resp
+        }
+
+        val systime = systemUtilService.sysdatetime
+        val refno = systemUtilService.refno
+        val params = hashMapOf<String, String>()
+        params["transcode"] = YnrccUtil.BANKCARD_CHKMAKESURE_TRANSCODE
+        params["transdate"] = systime.hostdate
+        params["transtime"] = systime.hosttime
+        params["refno"] = refno
+        params["stltrxdate"] = trxdate
+        params["stlamt"] = transamt.toString()
+        params["jnlcount"] = transcnt.toString()
+        params["sign_type"] = "MD5"
+        val sign = MD5.encodeByMD5(StringUtil.createLinkString(StringUtil.paraFilter(params)) + config[YnrccUtil.YNRCC_SIGNKEY]!!.trim())
+        params["sign"] = sign
+
+        val postData = MultivaluedMapImpl()
+        params.forEach { (t, u) -> postData.add(t, u) }
+
+        val url = config[YnrccUtil.YNRCC_ANGENT_URL]!!.trim() + "/checkmakesure"
+        logger.error("url=[$url], params=[" + Gson().toJson(params) + "]")
+        try {
+            val client = Client.create()
+            client.setConnectTimeout(YnrccUtil.AGENT_CONNECT_TIMEOUT * 1000)
+            client.setReadTimeout(YnrccUtil.AGENT_READ_TIMEOUT * 1000)
+            val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).accept(MediaType.APPLICATION_JSON).post(ClientResponse::class.java, postData)
+            return if (200 == respClient.status) {
+                val jsonStr = respClient.getEntity(String::class.java)
+                logger.error("refno=[$refno],trxdate=[$trxdate], url=[$url], return=[$jsonStr]")
+                resp = Gson().fromJson(jsonStr, DlpayResp::class.java)
+                resp
+            } else {
+                resp.code = "99"
+                resp.message = "请求前置返回失败[httpStatus=$respClient.status]"
+                logger.error(resp.message)
+                resp
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+            resp.code = YnrccUtil.CODE_EXCEPTION
+            resp.message = "请求前置抛出异常"
+            logger.error(resp.message)
+            return resp
+        }
+    }
+
+    override fun bankCardLoss(bankcardno: String, username: String, idtype: String, idno: String): DlpayResp {
+        var resp = DlpayResp()
+        val config = sourceTypeService.getChargePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, true)
+        if (!checkCitizencardConfig(config, resp)) {
+            return resp
+        }
+        val idType = IDTypes.findByValue(idtype)
+        if (idType < 0) {
+            resp.code = YnrccUtil.PARAM_VALUE_ERROR
+            resp.message = "证件类型未识别[$idtype]"
+            logger.error(resp.message)
+            return resp
+        }
+
+        val systime = systemUtilService.sysdatetime
+        val refno = systemUtilService.refno
+        val params = hashMapOf<String, String>()
+        params["transcode"] = YnrccUtil.BANKCARD_BANKCARDLOSS_TRANSCODE
+        params["transdate"] = systime.hostdate
+        params["transtime"] = systime.hosttime
+        params["refno"] = refno
+        params["bankcardno"] = bankcardno
+        params["username"] = username
+        params["idtype"] = idType.toString()
+        params["idno"] = idno
+        params["sign_type"] = "MD5"
+        val sign = MD5.encodeByMD5(StringUtil.createLinkString(StringUtil.paraFilter(params)) + config[YnrccUtil.YNRCC_SIGNKEY]!!.trim())
+        params["sign"] = sign
+
+        val postData = MultivaluedMapImpl()
+        params.forEach { (t, u) -> postData.add(t, u) }
+
+        val url = config[YnrccUtil.YNRCC_ANGENT_URL]!!.trim() + "/bankcardloss"
+        logger.error("url=[$url], params=[" + Gson().toJson(params) + "]")
+        try {
+            val client = Client.create()
+            client.setConnectTimeout(YnrccUtil.AGENT_CONNECT_TIMEOUT * 1000)
+            client.setReadTimeout(YnrccUtil.AGENT_READ_TIMEOUT * 1000)
+            val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).accept(MediaType.APPLICATION_JSON).post(ClientResponse::class.java, postData)
+            return if (200 == respClient.status) {
+                val jsonStr = respClient.getEntity(String::class.java)
+                logger.error("refno=[$refno],bankcardno=[$bankcardno], url=[$url], return=[$jsonStr]")
+                resp = Gson().fromJson(jsonStr, DlpayResp::class.java)
+                resp
+            } else {
+                resp.code = "99"
+                resp.message = "请求前置返回失败[httpStatus=$respClient.status]"
+                logger.error(resp.message)
+                resp
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+            resp.code = YnrccUtil.CODE_EXCEPTION
+            resp.message = "请求前置抛出异常"
+            logger.error(resp.message)
+            return resp
+        }
+    }
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt
index 9cc9393..f26dafa 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt
@@ -60,7 +60,7 @@
         val qrcode = AesUtil.encryptCFB("$uid:$encdata", rootkey, iv, "AES/CFB/NoPadding")
 
         val key = MD5.encodeByMD5ToURLSafeBase64(qrcode)
-        redisTemplate.opsForValue().set(key,qrcode, Duration.ofMinutes(3))
+        redisTemplate.opsForValue().set(key,qrcode, Duration.ofSeconds(20))
         resp.retcode = 0
         resp.retmsg = key
         return resp
@@ -74,7 +74,7 @@
             val rootkey = systemUtilService.getBusinessValue("aes.cfb.rootkey")
             val iv = systemUtilService.getBusinessValue("aes.cfb.iv")
             val totpoffset = systemUtilService.getBusinessValue("aes.cfb.totp.offset")
-            var offset = 20
+            var offset = 3
             if (NumberUtils.isDigits(totpoffset)) {
                 offset = Integer.valueOf(totpoffset).toInt()
             }
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/Util/DlpayUtil.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/Util/DlpayUtil.java
index c54c0a1..2f2af64 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/Util/DlpayUtil.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/Util/DlpayUtil.java
@@ -19,6 +19,9 @@
   public static final String OPTYPE_PAYREFUND = "payrefund"; //消费退款
   public static final String OPTYPE_QUERYRESULT = "queryresult"; //消费结果查询
   public static final String OPTYPE_CHKDTL = "chkdtl"; //流水对账
+  public static final String OPTYPE_CHK_MAKESURE = "chkmakesure"; //流水对账
+  public static final String OPTYPE_BANKCARD_LOSS = "bankcardloss"; //流水对账
+
 
   public static final String TRANSTYPE_SIGNCARD = "1"; //签约
 
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 bc5954f..c1b8ca5 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
@@ -38,6 +38,10 @@
   private String captcha; //签约验证码
   private String scenario;//消费场景
 
+  private String stltrxdate; //(核心记账日期)不允许为当前营业日期
+  private Long stlamt; //清算金额
+  private Integer jnlcount; //交易流水笔数
+
   /**
    * 市民卡绑定请求XML
    */
@@ -158,6 +162,43 @@
     return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString();
   }
 
+  /**
+   * 对账确认接口请求报文
+   * */
+  public String getChkMakeSureXml() throws UnsupportedEncodingException {
+    StringBuffer xml = new StringBuffer();
+    xml.append(prefix)
+        .append("<root>")
+        .append("<TRANSCODE>").append(transcode).append("</TRANSCODE>")
+        .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("<STLAMT>").append(stlamt/100.00).append("</STLAMT>")
+        .append("<JNLCOUNT>").append(jnlcount).append("</JNLCOUNT>")
+        .append("</root>");
+    return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString();
+  }
+
+  /**
+   * 银行口挂请求报文
+   * */
+  public String getLossBankcardXml()throws UnsupportedEncodingException {
+    StringBuffer xml = new StringBuffer();
+    xml.append(prefix)
+        .append("<root>")
+        .append("<TRANSCODE>").append(transcode).append("</TRANSCODE>")
+        .append("<TRANSDATE>").append(transdate).append("</TRANSDATE>")
+        .append("<TRANSTIME>").append(transtime).append("</TRANSTIME>")
+        .append("<SN>").append(sn).append("</SN>")
+        .append("<BC_NO>").append(bcNo).append("</BC_NO>")
+        .append("<NAME>").append(name).append("</NAME>")
+        .append("<ID_TYPE>").append(idType).append("</ID_TYPE>")
+        .append("<ID_NO>").append(idNo).append("</ID_NO>")
+        .append("</root>");
+    return String.format("%08d", xml.toString().getBytes("GBK").length) + xml.toString();
+  }
+
   public String getTransdate() {
     return transdate;
   }
@@ -309,4 +350,28 @@
   public void setScenario(String scenario) {
     this.scenario = scenario;
   }
+
+  public String getStltrxdate() {
+    return stltrxdate;
+  }
+
+  public void setStltrxdate(String stltrxdate) {
+    this.stltrxdate = stltrxdate;
+  }
+
+  public Long getStlamt() {
+    return stlamt;
+  }
+
+  public void setStlamt(Long stlamt) {
+    this.stlamt = stlamt;
+  }
+
+  public Integer getJnlcount() {
+    return jnlcount;
+  }
+
+  public void setJnlcount(Integer jnlcount) {
+    this.jnlcount = jnlcount;
+  }
 }
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 398cd67..5b34717 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
@@ -524,4 +524,107 @@
     };
     return new ResponseEntity(stream, HttpStatus.OK);
   }
+
+  /**
+   * 对账确认接口BC5516
+   * */
+  @PostMapping("/checkmakesure")
+  public DlpayResp makeCheckdtlSure(@FormParam("transcode") String transcode, @FormParam("transdate") String transdate,
+                                    @FormParam("transtime") String transtime, @FormParam("refno") String refno,
+                                    @FormParam("stltrxdate") String stltrxdate, @FormParam("stlamt") Long stlamt,
+                                    @FormParam("jnlcount") Integer jnlcount, @FormParam("sign_type") String sign_type,
+                                    @FormParam("sign") String sign){
+    DlpayResp resp = new DlpayResp();
+    if (!ynrccParamCheckService.checkChkMakesureParam(transcode, transdate, transtime, refno, stltrxdate, stlamt, jnlcount, sign_type, sign, resp)) {
+      logger.error(resp.errPrint());
+      return resp;
+    }
+
+    Map<String, String> params = new HashMap<>(0);
+    params.put("transcode", transcode);
+    params.put("transdate", transdate);
+    params.put("transtime", transtime);
+    params.put("refno", refno);
+    params.put("stltrxdate", stltrxdate);
+    params.put("stlamt", stlamt.toString());
+    params.put("jnlcount", jnlcount.toString());
+    params.put("sign_type", sign_type);
+    params.put("sign", sign);
+    if (!checkYnrccSign(params, resp)) {
+      return resp;
+    }
+
+    try{
+      DlpayReq req = new DlpayReq();
+      req.setTranscode(transcode);
+      req.setTransdate(transdate);
+      req.setTranstime(transtime);
+      req.setSn(refno);
+      req.setStltrxdate(stltrxdate);
+      req.setStlamt(stlamt);
+      req.setJnlcount(jnlcount);
+      return ynrccApiService.sendToYnrcc(DlpayUtil.OPTYPE_CHK_MAKESURE, req);
+    } catch (BussinessException be) {
+      resp.setCode(ErrorCode.BUSSINESS_ERROR);
+      resp.setMessage(be.getMessage());
+      logger.error(resp.errPrint());
+      return resp;
+    }catch (Exception e){
+      doSystemError(e, resp);
+      return resp;
+    }
+  }
+
+  /**
+   * 口挂接口 BC5517
+   * */
+  @PostMapping("/bankcardloss")
+  public DlpayResp bankcardLoss(@FormParam("transcode") String transcode, @FormParam("transdate") String transdate,
+                                @FormParam("transtime") String transtime, @FormParam("refno") String refno,
+                                @FormParam("bankcardno") String bankcardno, @FormParam("username") String username,
+                                @FormParam("idtype") String idtype, @FormParam("idno") String idno,
+                                @FormParam("sign_type") String sign_type, @FormParam("sign") String sign){
+    DlpayResp resp = new DlpayResp();
+    if (!ynrccParamCheckService.checkLossBankcardParam(transcode, transdate, transtime, refno, bankcardno, username, idtype, idno, sign_type, sign, resp)) {
+      logger.error(resp.errPrint());
+      return resp;
+    }
+
+    Map<String, String> params = new HashMap<>(0);
+    params.put("transcode", transcode);
+    params.put("transdate", transdate);
+    params.put("transtime", transtime);
+    params.put("refno", refno);
+    params.put("bankcardno", bankcardno);
+    params.put("username", username);
+    params.put("idtype", idtype);
+    params.put("idno", idno);
+    params.put("sign_type", sign_type);
+    params.put("sign", sign);
+    if (!checkYnrccSign(params, resp)) {
+      return resp;
+    }
+
+    try{
+      DlpayReq req = new DlpayReq();
+      req.setTranscode(transcode);
+      req.setTransdate(transdate);
+      req.setTranstime(transtime);
+      req.setSn(refno);
+      req.setBcNo(bankcardno);
+      req.setName(username);
+      req.setIdType(idtype);
+      req.setIdNo(idno);
+      return ynrccApiService.sendToYnrcc(DlpayUtil.OPTYPE_BANKCARD_LOSS, req);
+    } catch (BussinessException be) {
+      resp.setCode(ErrorCode.BUSSINESS_ERROR);
+      resp.setMessage(be.getMessage());
+      logger.error(resp.errPrint());
+      return resp;
+    }catch (Exception e){
+      doSystemError(e, resp);
+      return resp;
+    }
+  }
+
 }
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccParamCheckService.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccParamCheckService.java
index 9673aff..35b38ed 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccParamCheckService.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/YnrccParamCheckService.java
@@ -24,4 +24,9 @@
   boolean checkQueryResultParam(String transcode, String transdate, String transtime, String refno, String orignRefno, String sign_type, String sign, DlpayResp resp);
 
   boolean checkChkfileParam(String transcode, String transdate, String transtime, String refno, String checkdate, String merchant_bankcardno, String sign_type, String sign, DlpayResp resp);
+
+  boolean checkChkMakesureParam(String transcode, String transdate, String transtime, String refno, String stltrxdate, Long stlamt, Integer jnlcount, String sign_type, String sign, DlpayResp resp);
+
+  boolean checkLossBankcardParam(String transcode, String transdate, String transtime, String refno, String bankcardno, String username, String idtype, String idno, String sign_type, String sign, DlpayResp resp);
+
 }
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java
index 1d492e0..5c80430 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccApiServiceImpl.java
@@ -64,6 +64,14 @@
       sendXml = req.getChkfileXml();
       logger.error("请求【获取对账单=" + req.getChkdate() + "】发送报文:\n" + sendXml);
 
+    } else if (DlpayUtil.OPTYPE_CHK_MAKESURE.equals(optype)){
+      sendXml = req.getChkMakeSureXml();
+      logger.error("请求【对账确认="+req.getStltrxdate()+"】发送报文:\n"+ sendXml);
+
+    } else if(DlpayUtil.OPTYPE_BANKCARD_LOSS.equals(optype)){
+      sendXml = req.getLossBankcardXml();
+      logger.error("请求【银行卡口挂】发送报文:\n"+ sendXml);
+
     } else {
       throw new BussinessException("请求类型[" + optype + "]错误!");
     }
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java
index cd6429e..6b925f7 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java
@@ -244,4 +244,60 @@
 
     return true;
   }
+
+  @Override
+  public boolean checkChkMakesureParam(String transcode, String transdate, String transtime, String refno, String stltrxdate, Long stlamt, Integer jnlcount, String sign_type, String sign, DlpayResp resp) {
+    if (!checkYnrccBaseParam(transcode, transdate, transtime, refno, sign_type, sign, resp)) {
+      return false;
+    }
+
+    if (!StringUtil.checkDatetimeValid(stltrxdate, "yyyyMMdd")) {
+      resp.setCode(ErrorCode.REQ_PARAM_ERROR);
+      resp.setMessage("请求参数错误[待清算流水日期]");
+      return false;
+    }
+
+    if(null == stlamt){
+      resp.setCode(ErrorCode.REQ_PARAM_ERROR);
+      resp.setMessage("请求参数错误[清算金额]");
+      return false;
+    }
+
+    if(null==jnlcount || jnlcount<0){
+      resp.setCode(ErrorCode.REQ_PARAM_ERROR);
+      resp.setMessage("请求参数错误[交易流水笔数]");
+      return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public boolean checkLossBankcardParam(String transcode, String transdate, String transtime, String refno, String bankcardno, String username, String idtype, String idno, String sign_type, String sign, DlpayResp resp) {
+    if (!checkYnrccBaseParam(transcode, transdate, transtime, refno, sign_type, sign, resp)) {
+      return false;
+    }
+    if (StringUtil.isEmpty(bankcardno)) {
+      resp.setCode(ErrorCode.REQ_PARAM_ERROR);
+      resp.setMessage("请求参数错误[用户银行卡号为空]");
+      return false;
+    }
+    if (StringUtil.isEmpty(username)) {
+      resp.setCode(ErrorCode.REQ_PARAM_ERROR);
+      resp.setMessage("请求参数错误[用户名为空]");
+      return false;
+    }
+    if(StringUtil.isEmpty(idtype)){
+      resp.setCode(ErrorCode.REQ_PARAM_ERROR);
+      resp.setMessage("请求参数错误[证件类型为空]");
+      return false;
+    }
+    if (StringUtil.isEmpty(idno)) {
+      resp.setCode(ErrorCode.REQ_PARAM_ERROR);
+      resp.setMessage("请求参数错误[证件号为空]");
+      return false;
+    }
+
+    return true;
+  }
 }