diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/util/IDTypes.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/util/IDTypes.java
index 999f37f..79d4b62 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/util/IDTypes.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/util/IDTypes.java
@@ -1,16 +1,23 @@
 package com.supwisdom.dlpay.api.util;
 
 public enum IDTypes {
-  IDTYPE_IDCARD("idcard"), // 身份证
-  IDTYPE_PASSPORT("passport"), // 护照
-  IDTYPE_DRIVING_LICENSE("driving_license"), // 驾照
-  IDTYPE_HK_MACAU_PASS("hk_macau_pass"), // 港澳通行证
-  IDTYPE_STUDENT_IDCARD("student_idcard"), // 学生证
-  IDTYPE_OTHER("unknown"),
-  IDTYPE_LIST(new IDTypes[]{IDTYPE_IDCARD, IDTYPE_PASSPORT,
-      IDTYPE_DRIVING_LICENSE, IDTYPE_HK_MACAU_PASS, IDTYPE_STUDENT_IDCARD, IDTYPE_OTHER}); // 其它
+  IDCARD(52, "idcard"), // 身份证
+  RESIDENCE_BOOKLET(55, "residence_booklet"), //户口簿
+  PASSPORT(70, "passport"), // 护照
+  HK_MACAU_PASS(76, "hk_macau_pass"), // 港澳居民来往内地通行证
+  TAIWAN_PASS(67, "taiwan_pass"), // 台湾同胞来往内地通行证
+  FOREIGNER_RESIDENCE_PERMIT(68, "foreigner_residence_permit"), // 外国人居留证
+  MILITARY_IDCARD(58, "military_idcard"), //  军官证
+  SOLDIER_IDCARD(64, "soldier_idcard"), //  士兵证
+  DRIVING_LICENSE(-97, "driving_license"), // 驾照
+  STUDENT_IDCARD(-98, "student_idcard"), // 学生证
+  OTHERS(-99, "unknown"),
+  IDTYPE_LIST(-100, new IDTypes[]{IDCARD, RESIDENCE_BOOKLET, PASSPORT, HK_MACAU_PASS, TAIWAN_PASS, FOREIGNER_RESIDENCE_PERMIT, MILITARY_IDCARD, SOLDIER_IDCARD,
+      DRIVING_LICENSE, STUDENT_IDCARD, OTHERS}); // 其它
 
-  IDTypes(Object data) {
+
+  IDTypes(int id, Object data) {
+    this.id = id;
     this.data = data;
   }
 
@@ -18,9 +25,35 @@
     return this.data.toString();
   }
 
+  public int getId() {
+    return this.id;
+  }
+
   public Object getData() {
     return this.data;
   }
 
   private Object data;
+
+  private int id;
+
+  public static String findById(int id) {
+    IDTypes[] list = (IDTypes[]) IDTypes.IDTYPE_LIST.getData();
+    for (IDTypes item : list) {
+      if (item.getId() == id) {
+        return item.value();
+      }
+    }
+    return null;
+  }
+
+  public static int findByValue(String idtype) {
+    IDTypes[] list = (IDTypes[]) IDTypes.IDTYPE_LIST.getData();
+    for (IDTypes item : list) {
+      if (item.value().equals(idtype)) {
+        return item.getId();
+      }
+    }
+    return -999;
+  }
 }
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/validator/IDNoCheckValidator.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/validator/IDNoCheckValidator.java
index 9d67476..ea51688 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/validator/IDNoCheckValidator.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/validator/IDNoCheckValidator.java
@@ -29,7 +29,7 @@
       if (StringUtils.isEmpty(idno)) {
         return false;
       }
-      if (IDTypes.IDTYPE_IDCARD.value().equals(idtype) && idno.length() != 18) {
+      if (IDTypes.IDCARD.value().equals(idtype) && idno.length() != 18) {
         return false;
       }
       return true;
diff --git a/payapi-common/src/test/java/com/supwisdom/dlpay/api/bean/CitizenCardPayinitParamTest.java b/payapi-common/src/test/java/com/supwisdom/dlpay/api/bean/CitizenCardPayinitParamTest.java
index 3fa5c38..680fb98 100644
--- a/payapi-common/src/test/java/com/supwisdom/dlpay/api/bean/CitizenCardPayinitParamTest.java
+++ b/payapi-common/src/test/java/com/supwisdom/dlpay/api/bean/CitizenCardPayinitParamTest.java
@@ -55,7 +55,7 @@
     List<ConstraintViolation<OpenUserParam>> result = validate(param);
     assertFalse(getViolationMessage(result), result.isEmpty());
 
-    param.setIdtype(IDTypes.IDTYPE_IDCARD.value());
+    param.setIdtype(IDTypes.IDCARD.value());
     param.setIdno("123213");
     param.setUid("1231323");
     param.setName("lily");
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayReq.java b/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayReq.java
index 3678cc0..0af068f 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayReq.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayReq.java
@@ -1,48 +1,282 @@
 package com.supwisdom.dlpay.api.bean;
 
+import com.supwisdom.dlpay.framework.util.MD5;
+
 public class DlpayReq {
   private static final String prefix = "<?xml version=\"1.0\" encoding=\"GBK\"?>";
+  private static final String BANKCARD_BIND_TRANSCODE = "BC5510";
+  private static final String BANKCARD_SIGN_TRANSCODE = "BC5511";
+  private static final String BANKCARD_PAY_TRANSCODE = "BC5512";
+  private static final String BANKCARD_PAYREFUND_TRANSCODE = "BC5513";
+  private static final String BANKCARD_QUERYRESULT_TRANSCODE = "BC5514";
+  private static final String BANKCARD_CHKFILE_TRANSCODE = "BC5515";
 
-  //HEAD
-  private String jkdm; //<JKDM>接口代码</JKDM>
-  private String jgdm; //<JGDM>结果代码</JGDM>
-  private String fsdw; //<FSDW>发送单位</FSDW>
-  private String jsdw; //<JSDW>接收单位</JSDW>
-  private String czyh; //<CZYH>操作员号</CZYH>
-  private String jyxh; //<JYXH>交易序号</JYXH>
-  private String jyqd; //<JYQD>交易渠道</JYQD>
-  private String yhxx; //<YHXX>安全用户信息</YHXX>
-  private String klxx; //<KLXX>安全口令信息</KLXX>
+  public static final String DLPAY_CATEGORIE = "C001"; //消费类别
 
-  //DATA业务参数  <KEY>key值</KEY>
+  private String transdate; //交易日期
+  private String transtime; //交易时间
+  private String sn; //应用系统唯一流水号
+  private String bcNo; //银行卡卡号
+  private String name; //户名
+  private String idType; //证件类型
+  private String idNo; //证件号码
+  private String phone; //手机号
 
+  private String categorie; //消费类别
+  private String transType; //交易类型 签约1，解约2
 
-  private String getPayXml() {
+  private String merchantBcno; //商户卡号
+  private String merchantName; //商户户名
+  private Integer amount; //消费金额
+  private String description; //描述交易内容
+
+  private String oriSn; //原应用系统唯一流水号
+  private String chkdate; //对账日期
+
+  /**
+   * 市民卡绑定请求XML
+   * */
+  public String getBindCardXml() {
     StringBuffer xml = new StringBuffer();
     xml.append(prefix)
-        .append("<FORMDATA>")
-        //HEAD
-        .append("<HEAD>")
-        .append("<JKDM>").append(jkdm).append("</JKDM>")
-        .append("<JGDM>").append("000000").append("</JGDM>") //发送时填充000000
-        .append("<FSDW>").append(fsdw).append("</FSDW>")
-        .append("<JSDW>").append(jsdw).append("</JSDW>")
-        .append("<CZYH>").append(czyh).append("</CZYH>")
-        .append("<JYXH>").append(jyxh).append("</JYXH>")
-        .append("<JYQD>").append(jyqd).append("</JYQD>")
-        .append("<YHXX>").append(yhxx).append("</YHXX>")
-        .append("<KLXX>").append(klxx).append("</KLXX>")
-        .append("</HEAD>")
-        //DATA
-        .append("<DATA>")
-//        .append("<REFNO>").append("201906211124000011").append("</REFNO>")
-        .append("</DATA>")
-        .append("</FORMDATA>");
+        .append("<root>")
+        .append("<TRANSCODE>").append(BANKCARD_BIND_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("<PHONE>").append(phone).append("</PHONE>")
+        .append("</root>");
     return String.format("%08d", xml.toString().length()) + xml.toString();
   }
 
 
+  /**
+   * 市民卡签约/解约请求XML
+   * */
+  public String getSignXml(){
+    StringBuffer xml = new StringBuffer();
+    xml.append(prefix)
+        .append("<root>")
+        .append("<TRANSCODE>").append(BANKCARD_SIGN_TRANSCODE).append("</TRANSCODE>")
+        .append("<TRANSDATE>").append(transdate).append("</TRANSDATE>")
+        .append("<TRANSTIME>").append(transtime).append("</TRANSTIME>")
+        .append("<SN>").append(sn).append("</SN>")
+        .append("<CATEGORIE>").append(categorie).append("</CATEGORIE>")
+        .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("<PHONE>").append(phone).append("</PHONE>")
+        .append("<TRANS_TYPE>").append(transType).append("</TRANS_TYPE>")
+        .append("</root>");
+    return String.format("%08d", xml.toString().length()) + xml.toString();
+  }
 
+  /**
+   * 市民卡代扣消费接口请求报文
+   * */
+  public String getCardpayXml(){
+    StringBuffer xml = new StringBuffer();
+    xml.append(prefix)
+        .append("<root>")
+        .append("<TRANSCODE>").append(BANKCARD_PAY_TRANSCODE).append("</TRANSCODE>")
+        .append("<TRANSDATE>").append(transdate).append("</TRANSDATE>")
+        .append("<TRANSTIME>").append(transtime).append("</TRANSTIME>")
+        .append("<SN>").append(sn).append("</SN>")
+        .append("<CATEGORIE>").append(categorie).append("</CATEGORIE>")
+        .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("<MERCHANT_BCNO>").append(merchantBcno).append("</MERCHANT_BCNO>")
+        .append("<MERCHANT_NAME>").append(merchantName).append("</MERCHANT_NAME>")
+        .append("<AMOUNT>").append(amount).append("</AMOUNT>")
+        .append("<DESCRIPTION>").append(description).append("</DESCRIPTION>")
+        .append("<MAC>").append(MD5.encodeByMD5ForDlpay(merchantBcno + bcNo + amount)).append("</MAC>")
+        .append("</root>");
+    return String.format("%08d", xml.toString().length()) + xml.toString();
+  }
 
+  /**
+   * 市民卡退款接口请求报文
+   * */
+  public String getPayRefundXml(){
+    StringBuffer xml = new StringBuffer();
+    xml.append(prefix)
+        .append("<root>")
+        .append("<TRANSCODE>").append(BANKCARD_PAYREFUND_TRANSCODE).append("</TRANSCODE>")
+        .append("<TRANSDATE>").append(transdate).append("</TRANSDATE>")
+        .append("<TRANSTIME>").append(transtime).append("</TRANSTIME>")
+        .append("<SN>").append(sn).append("</SN>")
+        .append("<ORI_SN>").append(oriSn).append("</ORI_SN>")
+        .append("<AMOUNT>").append(amount).append("</AMOUNT>")
+        .append("<DESCRIPTION>").append(description).append("</DESCRIPTION>")
+        .append("</root>");
+    return String.format("%08d", xml.toString().length()) + xml.toString();
+  }
 
+  /**
+   * 市民卡交易查询接口请求报文
+   * */
+  public String getQueryResultXml(){
+    StringBuffer xml = new StringBuffer();
+    xml.append(prefix)
+        .append("<root>")
+        .append("<TRANSCODE>").append(BANKCARD_QUERYRESULT_TRANSCODE).append("</TRANSCODE>")
+        .append("<TRANSDATE>").append(transdate).append("</TRANSDATE>")
+        .append("<TRANSTIME>").append(transtime).append("</TRANSTIME>")
+        .append("<SN>").append(sn).append("</SN>")
+        .append("<ORI_SN>").append(oriSn).append("</ORI_SN>")
+        .append("</root>");
+    return String.format("%08d", xml.toString().length()) + xml.toString();
+  }
+
+  /**
+   * 市民卡对账接口请求报文
+   * */
+  public String getChkfileXml(){
+    StringBuffer xml = new StringBuffer();
+    xml.append(prefix)
+        .append("<root>")
+        .append("<TRANSCODE>").append(BANKCARD_CHKFILE_TRANSCODE).append("</TRANSCODE>")
+        .append("<TRANSDATE>").append(transdate).append("</TRANSDATE>")
+        .append("<TRANSTIME>").append(transtime).append("</TRANSTIME>")
+        .append("<SN>").append(sn).append("</SN>")
+        .append("<DZDATE>").append(chkdate).append("</DZDATE>")
+        .append("<MERCHANT_BCNO>").append("</MERCHANT_BCNO>")
+        .append("</root>");
+    return String.format("%08d", xml.toString().length()) + xml.toString();
+  }
+
+  public String getTransdate() {
+    return transdate;
+  }
+
+  public void setTransdate(String transdate) {
+    this.transdate = transdate;
+  }
+
+  public String getTranstime() {
+    return transtime;
+  }
+
+  public void setTranstime(String transtime) {
+    this.transtime = transtime;
+  }
+
+  public String getSn() {
+    return sn;
+  }
+
+  public void setSn(String sn) {
+    this.sn = sn;
+  }
+
+  public String getBcNo() {
+    return bcNo;
+  }
+
+  public void setBcNo(String bcNo) {
+    this.bcNo = bcNo;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getIdType() {
+    return idType;
+  }
+
+  public void setIdType(String idType) {
+    this.idType = idType;
+  }
+
+  public String getIdNo() {
+    return idNo;
+  }
+
+  public void setIdNo(String idNo) {
+    this.idNo = idNo;
+  }
+
+  public String getPhone() {
+    return phone;
+  }
+
+  public void setPhone(String phone) {
+    this.phone = phone;
+  }
+
+  public String getCategorie() {
+    return categorie;
+  }
+
+  public void setCategorie(String categorie) {
+    this.categorie = categorie;
+  }
+
+  public String getTransType() {
+    return transType;
+  }
+
+  public void setTransType(String transType) {
+    this.transType = transType;
+  }
+
+  public String getMerchantBcno() {
+    return merchantBcno;
+  }
+
+  public void setMerchantBcno(String merchantBcno) {
+    this.merchantBcno = merchantBcno;
+  }
+
+  public String getMerchantName() {
+    return merchantName;
+  }
+
+  public void setMerchantName(String merchantName) {
+    this.merchantName = merchantName;
+  }
+
+  public Integer getAmount() {
+    return amount;
+  }
+
+  public void setAmount(Integer amount) {
+    this.amount = amount;
+  }
+
+  public String getDescription() {
+    return description;
+  }
+
+  public void setDescription(String description) {
+    this.description = description;
+  }
+
+  public String getOriSn() {
+    return oriSn;
+  }
+
+  public void setOriSn(String oriSn) {
+    this.oriSn = oriSn;
+  }
+
+  public String getChkdate() {
+    return chkdate;
+  }
+
+  public void setChkdate(String chkdate) {
+    this.chkdate = chkdate;
+  }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayResp.java b/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayResp.java
new file mode 100644
index 0000000..ba5e113
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/bean/DlpayResp.java
@@ -0,0 +1,88 @@
+package com.supwisdom.dlpay.api.bean;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "root")
+public class DlpayResp {
+  private String code;
+  private String message;
+  private String transdate;
+  private String transtime;
+  private String bankjourno;
+  private String captcha;
+  private String status;
+  private String filename;
+
+  @XmlElement(name = "CODE")
+  public String getCode() {
+    return code;
+  }
+
+  public void setCode(String code) {
+    this.code = code;
+  }
+
+  @XmlElement(name = "MESSAGE")
+  public String getMessage() {
+    return message;
+  }
+
+  public void setMessage(String message) {
+    this.message = message;
+  }
+
+  @XmlElement(name = "TRANSDATE")
+  public String getTransdate() {
+    return transdate;
+  }
+
+  public void setTransdate(String transdate) {
+    this.transdate = transdate;
+  }
+
+  @XmlElement(name = "TRANSTIME")
+  public String getTranstime() {
+    return transtime;
+  }
+
+  public void setTranstime(String transtime) {
+    this.transtime = transtime;
+  }
+
+  @XmlElement(name = "BANKJOURNO")
+  public String getBankjourno() {
+    return bankjourno;
+  }
+
+  public void setBankjourno(String bankjourno) {
+    this.bankjourno = bankjourno;
+  }
+
+  @XmlElement(name = "CAPTCHA")
+  public String getCaptcha() {
+    return captcha;
+  }
+
+  public void setCaptcha(String captcha) {
+    this.captcha = captcha;
+  }
+
+  @XmlElement(name = "STATUS")
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+  @XmlElement(name = "FILENAME")
+  public String getFilename() {
+    return filename;
+  }
+
+  public void setFilename(String filename) {
+    this.filename = filename;
+  }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPaytypeConfig.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPaytypeConfig.java
index b310480..4a239dd 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPaytypeConfig.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPaytypeConfig.java
@@ -24,6 +24,9 @@
   @Column(name = "CONFIG_NAME", length = 200)
   private String configName;
 
+  @Column(name = "GLOBALFLAG", length = 200)
+  private Boolean globalflag = false;
+
   @Column(name = "tenantid", length = 20)
   @NotNull
   private String tenantid = "";
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPerson.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPerson.java
index 75fa85a..9e31db8 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPerson.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPerson.java
@@ -26,7 +26,7 @@
   @NotNull
   private String status;
 
-  @Column(name = "IDTYPE", length = 20)
+  @Column(name = "IDTYPE", length = 60)
   private String idtype;
 
   @Column(name = "IDNO", length = 30)
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/MD5.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/MD5.java
index 4d5ba84..91abab4 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/MD5.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/MD5.java
@@ -67,4 +67,21 @@
         return hexDigits[d1] + hexDigits[d2];  
     }
 
+    public static String encodeByMD5ForDlpay(String originString) {
+        if (originString != null) {
+            try {
+                //创建具有指定算法名称的信息摘要
+                MessageDigest md = MessageDigest.getInstance("MD5");
+                //使用指定的字节数组对摘要进行最后更新，然后完成摘要计算
+                byte[] results = md.digest(originString.getBytes("GBK"));
+                //将得到的字节数组变成字符串返回
+                String resultString = byteArrayToHexString(results);
+                return resultString;
+            } catch (Exception ex) {
+                ex.printStackTrace();
+            }
+        }
+        return null;
+    }
+
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java
index 66deb65..996af8e 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java
@@ -7,8 +7,8 @@
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
+import javax.xml.bind.Unmarshaller;
+import java.io.*;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -38,56 +38,30 @@
     return xmlContent;
   }
 
-  /*
-    public static <T> T getXmlToObject(String xmlContent, Class clazz) {
+  public static <T> T getXmlToObject(String xmlContent, String charset, Class clazz) {
+    try {
+      JAXBContext context = JAXBContext.newInstance(clazz);
+      // xml转换为对象 XML------Object
+      InputStream inputStream;
       try {
-        JAXBContext context = JAXBContext.newInstance(clazz);
-        // xml转换为对象 XML------Object
-        InputStream inputStream;
-        try {
-          inputStream = new ByteArrayInputStream(
-              xmlContent.getBytes("GBK"));
-          Unmarshaller um = context.createUnmarshaller();
+        inputStream = new ByteArrayInputStream(
+            xmlContent.getBytes(charset));
+        Unmarshaller um = context.createUnmarshaller();
 
-          @Suppress("UNCHECKED_CAST")
-          return (T) um.unmarshal(inputStream);
-        } catch (UnsupportedEncodingException e) {
-          // TODO Auto-generated catch block
-          e.printStackTrace();
-        }catch (Exception e) {
-          e.printStackTrace();
-        }
-      } catch (JAXBException e) {
-
+        return (T) um.unmarshal(inputStream);
+      } catch (UnsupportedEncodingException e) {
+        // TODO Auto-generated catch block
+        e.printStackTrace();
+      } catch (Exception e) {
         e.printStackTrace();
       }
-      return null;
+    } catch (JAXBException e) {
+
+      e.printStackTrace();
     }
+    return null;
+  }
 
-    public static <T> T getXmlToObject(String xmlContent,String charset, Class clazz) {
-      try {
-        JAXBContext context = JAXBContext.newInstance(clazz);
-        // xml转换为对象 XML------Object
-        InputStream inputStream;
-        try {
-          inputStream = new ByteArrayInputStream(
-              xmlContent.getBytes(charset));
-          Unmarshaller um = context.createUnmarshaller();
-
-          return (T) um.unmarshal(inputStream);
-        } catch (UnsupportedEncodingException e) {
-          // TODO Auto-generated catch block
-          e.printStackTrace();
-        }catch (Exception e) {
-          e.printStackTrace();
-        }
-      } catch (JAXBException e) {
-
-        e.printStackTrace();
-      }
-      return null;
-    }
-  */
   public static Map<String, String> parseXml(String xml) throws Exception {
     Map<String, String> map = new HashMap<String, String>();
     Document document = DocumentHelper.parseText(xml);
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/util/DlpayUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/util/DlpayUtil.java
index 5aa25fb..7f8bf3f 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/util/DlpayUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/util/DlpayUtil.java
@@ -13,6 +13,30 @@
 import java.util.Random;
 
 public class DlpayUtil {
+  public static final Map<String, String> errcode = new HashMap<>(0);
+
+  static {
+    errcode.put("0000", "成功");
+    errcode.put("0101", "手机号不一致");
+    errcode.put("0102", "无预留手机号");
+    errcode.put("0103", "证件类型不一致");
+    errcode.put("0104", "证件号码不一致");
+    errcode.put("0105", "户名不符");
+    errcode.put("0106", "卡状态异常");
+    errcode.put("0107", "无此卡号");
+    errcode.put("0201", "未进行银行卡绑定");
+    errcode.put("0202", "无效的交易类型");
+    errcode.put("0301", "未签约");
+    errcode.put("0302", "余额不足");
+    errcode.put("0303", "MD5校验失败");
+    errcode.put("0401", "原始流水不存在");
+    errcode.put("0402", "原始流水未成功");
+    errcode.put("0403", "原始流水已退款");
+    errcode.put("4004", "商户账户余额不足");
+    errcode.put("0405", "不在退款时间范围内");
+    errcode.put("0406", "当日无交易明细");
+  }
+
   /**
    * socket方式请求农商行
    */
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt
index 3b5bd5e..430499c 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt
@@ -3,14 +3,14 @@
 import com.google.gson.Gson
 import com.sun.jersey.api.client.Client
 import com.sun.jersey.api.client.ClientResponse
-import com.supwisdom.dlpay.api.bean.BaseResp
-import com.supwisdom.dlpay.api.bean.SupStatusRevResp
-import com.supwisdom.dlpay.api.bean.SupYktResp
-import com.supwisdom.dlpay.api.bean.WechatReqResp
+import com.supwisdom.dlpay.api.bean.*
 import com.supwisdom.dlpay.api.domain.TPersondtl
 import com.supwisdom.dlpay.api.domain.TShopdtl
+import com.supwisdom.dlpay.api.util.IDTypes
 import com.supwisdom.dlpay.framework.util.*
 import com.supwisdom.dlpay.util.Code
+import com.supwisdom.dlpay.util.DlpayUtil
+import mu.KotlinLogging
 
 class CallBackResp {
     var retcode: String = "99"
@@ -24,6 +24,8 @@
 class CallService {
 
     companion object {
+        private val logger = KotlinLogging.logger { }
+
         fun callYktPay(config: Map<String, String?>, paydtl: TPersondtl, time: String, stuempno: String, yktshopid: String, devphyid: String?): CallBackResp {
             val code = CallBackResp()
             val appid = config["appid"]
@@ -235,6 +237,214 @@
             }
         }
 
+
+        /**
+         * 大理农商行银行卡绑定
+         * */
+        fun CallCitizenCardBind(config: Map<String, String?>, transdate: String, transtime: String, refno: String, bankcardno: String, name: String, idtype: String, idno: String, phone: String): CallBackResp {
+            val resp = CallBackResp()
+            val ip = config["socket.ip"]
+            val port = config["socket.port"]
+            val idType = IDTypes.findByValue(idtype)
+            if (ip.isNullOrEmpty() || port.isNullOrEmpty()) {
+                resp.retcode = "99"
+                resp.retmsg = "市民卡socket的IP和端口未配置"
+                return resp
+            }
+            if (idType < 0) {
+                resp.retcode = "99"
+                resp.retmsg = "证件类型未识别[$idtype]"
+                return resp
+            }
+
+            val req = DlpayReq().apply {
+                this.transdate = transdate
+                this.transtime = transtime
+                this.sn = refno
+                this.bcNo = bankcardno
+                this.name = name
+                this.idType = "$idType"
+                this.idNo = idno
+                this.phone = phone
+            }
+            logger.info("请求绑定银行卡发送报文：\n${req.bindCardXml}")
+            try {
+                val returnXml = DlpayUtil.send(ip, port.toInt(), 10, req.bindCardXml)
+                logger.info("请求绑定银行卡返回报文[$refno]：\n$returnXml")
+                if (returnXml.isNullOrEmpty()) {
+                    resp.retcode = "99"
+                    resp.retmsg = "请求绑定银行卡返回报文为空"
+                    return resp
+                }
+                val returnResp = XmlUtils.getXmlToObject<DlpayResp>(returnXml.substring(8), "GBK", DlpayResp::class.java)
+                if (null == returnResp) {
+                    resp.retcode = "99"
+                    resp.retmsg = "解析返回报文错误！"
+                    return resp
+                }
+
+                if ("0000" == returnResp.code) {
+                    resp.retcode = "0"
+                    resp.retmsg = "success"
+                    resp.add("outtradeno", returnResp.bankjourno) //银行流水号
+                    resp.add("verifycode", returnResp.captcha) //fixme:短信验证码！！
+                } else {
+                    resp.retcode = "99"
+                    resp.retmsg = returnResp.message
+                }
+                return resp
+            } catch (e: Exception) {
+                e.printStackTrace()
+                resp.retcode = "99"
+                resp.retmsg = "请求绑定银行卡异常！e:${e.message}"
+                return resp
+            }
+        }
+
+        /**
+         * 大理农商行银行卡签约/解约
+         * transtype:1-签约，2-解约
+         * */
+        fun CallCitizenCardSigned(config: Map<String, String?>, transdate: String, transtime: String, refno: String, bankcardno: String, name: String, idtype: String, idno: String, phone: String, transtype: String): CallBackResp {
+            val resp = CallBackResp()
+            val ip = config["socket.ip"]
+            val port = config["socket.port"]
+            val idType = IDTypes.findByValue(idtype)
+            if (ip.isNullOrEmpty() || port.isNullOrEmpty()) {
+                resp.retcode = "99"
+                resp.retmsg = "市民卡socket的IP和端口未配置"
+                return resp
+            }
+            if (idType < 0) {
+                resp.retcode = "99"
+                resp.retmsg = "证件类型未识别[$idtype]"
+                return resp
+            }
+            if ("1" != transtype && "2" != transtype) {
+                resp.retcode = "99"
+                resp.retmsg = "请求操作类型错误[$transtype]"
+                return resp
+            }
+
+            val req = DlpayReq().apply {
+                this.transdate = transdate
+                this.transtime = transtime
+                this.sn = refno
+                this.categorie = DlpayReq.DLPAY_CATEGORIE  //业务类别
+                this.bcNo = bankcardno
+                this.name = name
+                this.idType = "$idType"
+                this.idNo = idno
+                this.phone = phone
+                this.transType = transtype  //1-签约，2-解约
+            }
+            logger.info("代扣签(解)约发送报文：\n${req.signXml}")
+            try {
+                val returnXml = DlpayUtil.send(ip, port.toInt(), 10, req.signXml)
+                logger.info("请求代扣签(解)约返回报文[$refno]：\n$returnXml")
+                if (returnXml.isNullOrEmpty()) {
+                    resp.retcode = "99"
+                    resp.retmsg = "请求代扣签(解)约返回报文为空"
+                    return resp
+                }
+                val returnResp = XmlUtils.getXmlToObject<DlpayResp>(returnXml.substring(8), "GBK", DlpayResp::class.java)
+                if (null == returnResp) {
+                    resp.retcode = "99"
+                    resp.retmsg = "解析返回报文错误！"
+                    return resp
+                }
+
+                if ("0000" == returnResp.code) {
+                    resp.retcode = "0"
+                    resp.retmsg = "success"
+                    resp.add("outtradeno", returnResp.bankjourno) //银行流水号
+                } else {
+                    resp.retcode = "99"
+                    resp.retmsg = returnResp.message
+                }
+                return resp
+            } catch (e: Exception) {
+                e.printStackTrace()
+                resp.retcode = "99"
+                resp.retmsg = "请求代扣签(解)约异常！e:${e.message}"
+                return resp
+            }
+        }
+
+        /**
+         * 大理农商行银行卡代扣消费
+         * */
+        fun callCitizenCardPay(config: Map<String, String?>, transdate: String, transtime: String, refno: String, amount:Double, bankcardno: String, name: String, idtype: String, idno: String, phone: String): CallBackResp {
+            val resp = CallBackResp()
+            val ip = config["socket.ip"]
+            val port = config["socket.port"]
+            val merchantBankCardno = config["bankcardno"] //商户银行账号
+            val merchantBankAccname = config["bankaccname"] //商户银行开户名
+            val idType = IDTypes.findByValue(idtype)
+            if (ip.isNullOrEmpty() || port.isNullOrEmpty()) {
+                resp.retcode = "99"
+                resp.retmsg = "市民卡socket的IP和端口未配置"
+                return resp
+            }else if(merchantBankCardno.isNullOrEmpty() || merchantBankAccname.isNullOrEmpty()){
+                resp.retcode = "99"
+                resp.retmsg = "商户银行收款参数未配置"
+                return resp
+            }
+
+            if (idType < 0) {
+                resp.retcode = "99"
+                resp.retmsg = "证件类型未识别[$idtype]"
+                return resp
+            }
+
+            val req = DlpayReq().apply {
+                this.transdate = transdate
+                this.transtime = transtime
+                this.sn = refno
+                this.categorie = DlpayReq.DLPAY_CATEGORIE //业务代码
+                this.bcNo = bankcardno
+                this.name = name
+                this.idType = "$idType"
+                this.idNo = idno
+                this.merchantBcno = merchantBankCardno
+                this.merchantName = merchantBankAccname
+                this.amount = MoneyUtil.YuanToFen(amount)
+                this.description="市民卡代扣消费"
+            }
+            logger.info("请求代扣消费发送报文：\n${req.cardpayXml}")
+            try {
+                val returnXml = DlpayUtil.send(ip, port.toInt(), 10, req.cardpayXml)
+                logger.info("请求代扣消费返回报文[$refno]：\n$returnXml")
+                if (returnXml.isNullOrEmpty()) {
+                    resp.retcode = "99"
+                    resp.retmsg = "请求代扣消费返回报文为空"
+                    return resp
+                }
+                val returnResp = XmlUtils.getXmlToObject<DlpayResp>(returnXml.substring(8), "GBK", DlpayResp::class.java)
+                if (null == returnResp) {
+                    resp.retcode = "99"
+                    resp.retmsg = "解析返回报文错误！"
+                    return resp
+                }
+
+                if ("0000" == returnResp.code) {
+                    resp.retcode = "0"
+                    resp.retmsg = "success"
+                    resp.add("outtradeno", returnResp.bankjourno) //银行流水号
+                } else {
+                    resp.retcode = "99"
+                    resp.retmsg = returnResp.message
+                }
+                return resp
+            } catch (e: Exception) {
+                e.printStackTrace()
+                //fixme: 查询逻辑？
+                resp.retcode = "99"
+                resp.retmsg = "请求代扣消费异常！e:${e.message}"
+                return resp
+            }
+        }
+
         fun CallCitizenCardPay(config: Map<String, String?>, paydtl: TShopdtl): CallBackResp {
             val resp = CallBackResp()
             resp.retcode = "0"
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
index d373525..739b2c3 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
@@ -2,10 +2,8 @@
 
 import com.google.gson.Gson
 import com.google.gson.reflect.TypeToken
-import com.supwisdom.dlpay.api.APIRequestParam
 import com.supwisdom.dlpay.api.exception.RequestParamCheckException
 import com.supwisdom.dlpay.framework.util.*
-import com.supwisdom.dlpay.util.ConstantUtil
 import com.supwisdom.dlpay.util.DESedeUtil
 
 class DaliDatasyncParam {
@@ -45,7 +43,7 @@
 
     fun decData(deskey: String): ArrayList<DaliDatasyncDetail> {
         try {
-            val listType = object : TypeToken<ArrayList<ConsumeFeetype>>() {}.type
+            val listType = object : TypeToken<ArrayList<DaliDatasyncDetail>>() {}.type
             val decstr = DESedeUtil.getInstance(deskey).decode(data)
             return Gson().fromJson(decstr, listType)
         } catch (e: Exception) {
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index 37daf22..fdec8f7 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -452,32 +452,38 @@
 VALUES ('wechat', 't', '微信支付', 't', 't', 't', 't', 'f', '{tenantid}');
 
 -- 支付方式
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('yktpay','appid',null,'100005', '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('yktpay','appkey',null,'adc4ac6822fd462780f878b86cb94688', '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('yktpay','orderurl',null,'http://172.28.201.101:9116/epayapi/services/thirdparty/common/pay', '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('yktpay','reverseurl',null,'http://172.28.201.101:9116/epayapi/services/thirdparty/common/payreverse', '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('alipay', 'alipay.gateway', '支付宝网关地址', 'https://openapi.alipay.com/gateway.do', '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('alipay', 'enable.paymethod', '支付渠道', 'balance,moneyFund,debitCardExpress,bankPay,pcredit', '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('alipay', 'notify.url', '异步通知地址', 'http://ykt.supwisdom.com:9116/epay/zfb/newnotify', '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('alipay', 'timeout.express', '支付超时时间', '5m', '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('alipay', 'alipay.public.key', '支付宝商户应用的支付宝公钥', NULL, '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('alipay', 'alipay.rsa.private.key', '支付宝商户应用RSA私钥', NULL, '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('alipay', 'alipay.rsa.public.key', '支付宝商户应用RSA公钥', NULL, '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('alipay', 'appid', '支付宝应用APPID', NULL, '{tenantid}');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
-VALUES ('citizenCard', 'bankcardno', NULL, NULL, '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('yktpay','appid',null,'100005', 't', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('yktpay','appkey',null,'adc4ac6822fd462780f878b86cb94688', 't', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('yktpay','orderurl',null,'http://172.28.201.101:9116/epayapi/services/thirdparty/common/pay', 't', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('yktpay','reverseurl',null,'http://172.28.201.101:9116/epayapi/services/thirdparty/common/payreverse', 't', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('alipay', 'alipay.gateway', '支付宝网关地址', 'https://openapi.alipay.com/gateway.do', 't', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('alipay', 'enable.paymethod', '支付渠道', 'balance,moneyFund,debitCardExpress,bankPay,pcredit', 'f', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('alipay', 'notify.url', '异步通知地址', 'http://ykt.supwisdom.com:9116/epay/zfb/newnotify', 't', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('alipay', 'timeout.express', '支付超时时间', '5m', 't', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('alipay', 'alipay.public.key', '支付宝商户应用的支付宝公钥', NULL, 'f', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('alipay', 'alipay.rsa.private.key', '支付宝商户应用RSA私钥', NULL, 'f', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('alipay', 'alipay.rsa.public.key', '支付宝商户应用RSA公钥', NULL, 'f', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('alipay', 'appid', '支付宝应用APPID', NULL, 'f', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('citizenCard', 'socket.ip', 'socket的IP', NULL, 't', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('citizenCard', 'socket.port', 'socket的端口', NULL, 't', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('citizenCard', 'bankcardno', '商户银行卡号', NULL, 'f', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
+VALUES ('citizenCard', 'bankaccname', '银行开户名', NULL, 'f', '{tenantid}');
 
 INSERT INTO "tb_syspara" ("paraid", "displayflag", "editflag", "lastsaved", "paraname", "paraunit", "paraval", "remark", "valuetype", "tenantid")
 VALUES (1, 'yes', 1, '20190514165658', '账户最大余额默认值', '元', '10001', '账户开户时的默认账户最大余额', 'amount', '{tenantid}');
@@ -511,18 +517,27 @@
 VALUES ('cancel','dtlStatusList', '交易取消', '流水状态', '{tenantid}');
 
 INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
-VALUES ('1', 'idtypeList', '身份证', '证件类型', '{tenantid}');
+VALUES ('idcard', 'idtypeList', '身份证', '证件类型', '{tenantid}');
 INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
-VALUES ('2', 'idtypeList', '护照', '证件类型', '{tenantid}');
+VALUES ('residence_booklet', 'idtypeList', '户口簿', '证件类型', '{tenantid}');
 INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
-VALUES ('3', 'idtypeList', '驾照', '证件类型', '{tenantid}');
+VALUES ('passport', 'idtypeList', '护照', '证件类型', '{tenantid}');
 INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
-VALUES ('4', 'idtypeList', '港澳通行证', '证件类型', '{tenantid}');
+VALUES ('hk_macau_pass', 'idtypeList', '港澳居民来往内地通行证', '证件类型', '{tenantid}');
 INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
-VALUES ('5', 'idtypeList', '学工号', '证件类型', '{tenantid}');
+VALUES ('taiwan_pass', 'idtypeList', '港澳通行证', '台湾同胞来往内地通行证', '{tenantid}');
 INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
-VALUES ('9', 'idtypeList', '其他', '证件类型', '{tenantid}');
-
+VALUES ('foreigner_residence_permit', 'idtypeList', '港澳通行证', '外国人居留证', '{tenantid}');
+INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES ('military_idcard', 'idtypeList', '港澳通行证', '军官证', '{tenantid}');
+INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES ('soldier_idcard', 'idtypeList', '港澳通行证', '士兵证', '{tenantid}');
+INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES ('driving_license', 'idtypeList', '驾照', '证件类型', '{tenantid}');
+INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES ('student_idcard', 'idtypeList', '学工号', '证件类型', '{tenantid}');
+INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES ('unknown', 'idtypeList', '其他', '证件类型', '{tenantid}');
 
 INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
 VALUES ('male', 'sexList', '男', '性别', '{tenantid}');
