diff --git a/src/main/java/com/supwisdom/dlpay/api/dao/AccountDao.java b/src/main/java/com/supwisdom/dlpay/api/dao/AccountDao.java
index 0181720..beb4a88 100644
--- a/src/main/java/com/supwisdom/dlpay/api/dao/AccountDao.java
+++ b/src/main/java/com/supwisdom/dlpay/api/dao/AccountDao.java
@@ -30,4 +30,7 @@
   @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value = "0")})
   @Query("select a from TAccount a where a.userid = ?1")
   TAccount getByUseridForUpdateNowait(String userid);
+
+  @Query("select a from TAccount a where a.userid = ?1 and a.subjno=?2")
+  TAccount findByUseridAndSubjno(String userid, String subjno);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/api/dao/PersonDao.java b/src/main/java/com/supwisdom/dlpay/api/dao/PersonDao.java
index 2898f3f..03fbfcd 100644
--- a/src/main/java/com/supwisdom/dlpay/api/dao/PersonDao.java
+++ b/src/main/java/com/supwisdom/dlpay/api/dao/PersonDao.java
@@ -2,11 +2,15 @@
 
 import com.supwisdom.dlpay.api.domain.TPerson;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
 
 
 /**
  * Created by shuwei on 2019/4/12.
  */
 public interface PersonDao extends JpaRepository<TPerson, String> {
-    TPerson findByThirdUniqueIdenty(String thirdUniqueIdenty);
+    @Query(value = "from TPerson where idtype=?1 and idno=?2 ")
+    TPerson findByIdentity(String idtype, String idno);
+
+    TPerson findByUserid(String userid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TPerson.java b/src/main/java/com/supwisdom/dlpay/api/domain/TPerson.java
index 2b8cf43..fafd0e6 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TPerson.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TPerson.java
@@ -6,7 +6,8 @@
 
 @Entity
 @Table(name = "TB_PERSON",
-    indexes = {@Index(name = "person_name_idx", columnList = "name")})
+    indexes = {@Index(name = "person_name_idx", columnList = "name"),
+        @Index(name = "person_idno_uk", unique = true, columnList = "idtype,idno")})
 public class TPerson {
   @Id
   @GenericGenerator(name = "idGenerator", strategy = "uuid")
@@ -53,16 +54,10 @@
   @Column(name = "LASTSAVED", length = 14)
   private String lastsaved;
 
-  /**
-   * 第三方唯一标识，可为学工号，银行卡号等
-   */
-  @Column(name = "THIRD_UNIQUE_IDENTY", length = 32)
-  private String thirdUniqueIdenty;
-
   public TPerson() {
   }
 
-  public TPerson(String name, String sex, String status, String idtype, String idno, String country, String nation, String email, String tel, String mobile, String addr, String zipcode, String lastsaved, String thirdUniqueIdenty) {
+  public TPerson(String name, String sex, String status, String idtype, String idno, String country, String nation, String email, String tel, String mobile, String addr, String zipcode, String lastsaved) {
     this.name = name;
     this.sex = sex;
     this.status = status;
@@ -76,9 +71,10 @@
     this.addr = addr;
     this.zipcode = zipcode;
     this.lastsaved = lastsaved;
-    this.thirdUniqueIdenty = thirdUniqueIdenty;
   }
 
+
+
   public String getUserid() {
     return userid;
   }
@@ -190,12 +186,4 @@
   public void setLastsaved(String lastsaved) {
     this.lastsaved = lastsaved;
   }
-
-  public String getThirdUniqueIdenty() {
-    return thirdUniqueIdenty;
-  }
-
-  public void setThirdUniqueIdenty(String thirdUniqueIdenty) {
-    this.thirdUniqueIdenty = thirdUniqueIdenty;
-  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java b/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java
index d825148..73a8126 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java
@@ -18,6 +18,15 @@
   @JoinColumn(name = "USERID")
   private TPerson person; //绑定的系统用户
 
+  public TPersonIdentity() {
+  }
+
+  public TPersonIdentity(String thirdUserid, String thirdSyscode, TPerson person) {
+    this.thirdUserid = thirdUserid;
+    this.thirdSyscode = thirdSyscode;
+    this.person = person;
+  }
+
   public String getThirdUserid() {
     return thirdUserid;
   }
diff --git a/src/main/java/com/supwisdom/dlpay/exception/RequestParamCheckException.java b/src/main/java/com/supwisdom/dlpay/exception/RequestParamCheckException.java
new file mode 100644
index 0000000..328a08d
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/exception/RequestParamCheckException.java
@@ -0,0 +1,14 @@
+package com.supwisdom.dlpay.exception;
+
+public class RequestParamCheckException extends Exception {
+  private int errCode;
+
+  public RequestParamCheckException(int errCode, String message) {
+    super(String.format("Req-%d,%s", errCode, message));
+    this.errCode = errCode;
+  }
+
+  public int getErrCode() {
+    return errCode;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java b/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java
index 23c7172..af90257 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java
@@ -76,4 +76,6 @@
   /********************** 获取【系统参数】【业务参数】通用方法 **********************/
 
 
+  String getSubsystemSignKey(String syscode);
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java b/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
index c1d9971..80fad1f 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
@@ -234,4 +234,10 @@
     return null;
   }
 
+  @Override
+  public String getSubsystemSignKey(String syscode){
+    // fixme: 验证数据无误性签名秘钥
+    return "";
+  }
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java
index 8e4e55d..7ea105c 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java
@@ -34,33 +34,6 @@
     return result;
   }
 
-  /**
-   * 把数组所有元素排序，并按照“参数=参数值”的模式用“&”字符拼接成字符串
-   *
-   * @param params 需要排序并参与字符拼接的参数组
-   * @return 拼接后字符串
-   */
-  public static String createLinkString(Map<String, String> params) {
-
-    List<String> keys = new ArrayList<String>(params.keySet());
-    Collections.sort(keys);
-
-    String prestr = "";
-
-    for (int i = 0; i < keys.size(); i++) {
-      String key = keys.get(i);
-      String value = params.get(key);
-
-      if (i == keys.size() - 1) {//拼接时，不包括最后一个&字符
-        prestr = prestr + key + "=" + value;
-      } else {
-        prestr = prestr + key + "=" + value + "&";
-      }
-    }
-
-    return prestr;
-  }
-
   private static String HMACSHAX(String data, String key, String alg) {
     String algorithm = "";
     if ("SHA1".equals(alg)) {
@@ -134,7 +107,7 @@
     mapValue.put("outtradeno", refno);
     mapValue.put("yktshopid", "2");
     mapValue.put("shopid", "68512084");
-    String signstr = createLinkString(HmacUtil.paraFilter(mapValue));
+    String signstr = StringUtil.createLinkString(HmacUtil.paraFilter(mapValue));
     String sign = HmacUtil.HMACSHA1(signstr, "adc4ac6822fd462780f878b86cb94688");
     System.out.println("{\"tradeaccount\":\"10000097\",\"tradename\":\"在线点餐\",\"tradeamount\":\"1\"," +
         "\"paidamount\": \"1\",\"outtradeno\":\"" + refno + "\",\"yktshopid\": \"2\",\"shopid\":\"68512084\",\"sign\": \"" + sign + "\"}");
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
index c3ff38a..9ca1800 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
@@ -1,6 +1,8 @@
 package com.supwisdom.dlpay.framework.util;
 
-import java.util.List;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 public class StringUtil {
   /**
@@ -31,4 +33,102 @@
     return str1 == null ? str2 == null : str1.equals(str2);
   }
 
+  /**
+   * 手机号验证
+   *
+   * @param str
+   * @return
+   */
+  public static boolean isMobile(String str) {
+    Pattern p = Pattern.compile("^1[0-9]{10}$"); // 验证手机号
+    Matcher m = p.matcher(str);
+    return m.matches();
+  }
+
+  /**
+   * 邮箱格式验证
+   */
+  public static boolean isEmail(String email) {
+    boolean ret = true;
+    Pattern pattern = Pattern.compile("^([a-zA-Z0-9]+[_|\\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\\.]?)*[a-zA-Z0-9]+\\.[a-zA-Z]{2,3}$");
+    final Matcher mat = pattern.matcher(email);
+    if (!mat.find()) {
+      ret = false;
+    }
+    return ret;
+  }
+
+  /**
+   * 身份证格式验证
+   *
+   * @param str
+   * @return
+   */
+  public static boolean isIdentity(String str) {
+    // 中国公民身份证格式：长度为15或18位，最后一位可以为字母
+    Pattern pattern = Pattern.compile("(\\d{14}[0-9a-zA-Z])|(\\d{17}[0-9a-zA-Z])");
+    final Matcher m = pattern.matcher(str);
+    return m.matches();
+  }
+
+  /**
+   * 除去数组中的空值和签名参数
+   *
+   * @param sArray 签名参数组
+   * @return 去掉空值与签名参数后的新签名参数组
+   */
+  public static Map<String, String> paraFilter(Map<String, String> sArray) {
+    Map<String, String> result = new HashMap<String, String>();
+    if (sArray == null || sArray.size() <= 0) {
+      return result;
+    }
+    for (String key : sArray.keySet()) {
+      String value = sArray.get(key);
+      if (null == value || "".equals(value.trim()) || "null".equalsIgnoreCase(value.trim()) || key.equalsIgnoreCase("sign") || key.equalsIgnoreCase("sign_type")) {
+        continue;
+      }
+      result.put(key, value);
+    }
+    return result;
+  }
+
+  /**
+   * 把数组所有元素排序，并按照“参数=参数值”的模式用“&”字符拼接成字符串
+   *
+   * @param params 需要排序并参与字符拼接的参数组
+   * @return 拼接后字符串
+   */
+  public static String createLinkString(Map<String, String> params) {
+
+    List<String> keys = new ArrayList<String>(params.keySet());
+    Collections.sort(keys);
+
+    String prestr = "";
+
+    for (int i = 0; i < keys.size(); i++) {
+      String key = keys.get(i);
+      String value = params.get(key);
+
+      if (i == keys.size() - 1) {//拼接时，不包括最后一个&字符
+        prestr = prestr + key + "=" + value;
+      } else {
+        prestr = prestr + key + "=" + value + "&";
+      }
+    }
+
+    return prestr;
+  }
+
+  public static boolean isCharAndNum(String inputStr) {
+    Pattern p = Pattern.compile("\\w+");
+    Matcher m = p.matcher(inputStr);
+    if (m.matches()) {
+      // 除字母和数字外还包含其它字符
+      return false;
+    } else {
+      return true;
+    }
+  }
+
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java
index d3e9b11..07e4aaf 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java
@@ -10,7 +10,9 @@
   public static final String SYSPARA_VALUETYPE_STRING = "string"; //字符串
 
 
-  public static final int SYSPARAID_NO1 = 1; //paraid=1
+  public static final int SYSPARAID_NO1 = 1; //系统默认最大余额限制的ID
   public static final int SYSPARAID_NO2 = 2; //paraid=2
 
+  public static final double SYSPARA_NO1_DEFAULT = 10000.0; // 系统默认最大余额限制
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java b/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
index 6c97c50..13062ef 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
@@ -84,4 +84,25 @@
    * */
   public static final int LOCK_READ_TIMEOUT = 10015;
 
+
+  /**
+   * 请求参数错误
+   * */
+  public static final int REQUEST_PARAM_ERROR = 20000;
+
+  /**
+   * 请求参数错误签名错误
+   * */
+  public static final int REQUEST_SIGN_ERROR = 20001;
+
+  /**
+   * 注册用户已经存在
+   */
+  public static final int REGISTER_USER_EXIST = 20003;
+
+
+  //================= 业务处理错误 ==================//
+
+  public static final int BUSINESS_DEAL_ERROR = 30000; //业务处理错误
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java b/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java
index fefbc51..38695bc 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java
@@ -83,6 +83,7 @@
 		}
 		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);
@@ -92,53 +93,5 @@
 			map.put(e.getName(), e.getText());
 		return map;
 	}
-	/**
-	 * 除去数组中的空值和签名参数
-	 *
-	 * @param sArray 签名参数组
-	 * @return 去掉空值与签名参数后的新签名参数组
-	 */
-	public static Map<String, String> paraFilter(Map<String, String> sArray) {
-		Map<String, String> result = new HashMap<String, String>();
-		if (sArray == null || sArray.size() <= 0) {
-			return result;
-		}
-		for (String key : sArray.keySet()) {
-			String value = sArray.get(key);
-			if (value == null || "".equals(value) || "sign".equalsIgnoreCase(key)
-					|| "sign_type".equalsIgnoreCase(key)) {
-				continue;
-			}
-			result.put(key, value);
-		}
 
-		return result;
-	}
-
-	/**
-	 * 把数组所有元素排序，并按照“参数=参数值”的模式用“&”字符拼接成字符串
-	 *
-	 * @param params 需要排序并参与字符拼接的参数组
-	 * @return 拼接后字符串
-	 */
-	public static String createLinkString(Map<String, String> params) {
-
-		List<String> keys = new ArrayList<String>(params.keySet());
-		Collections.sort(keys);
-
-		String prestr = "";
-
-		for (int i = 0; i < keys.size(); i++) {
-			String key = keys.get(i);
-			String value = params.get(key);
-
-			if (i == keys.size() - 1) {//拼接时，不包括最后一个&字符
-				prestr = prestr + key + "=" + value;
-			} else {
-				prestr = prestr + key + "=" + value + "&";
-			}
-		}
-
-		return prestr;
-	}
 }
diff --git a/src/main/java/com/supwisdom/dlpay/util/ConstUtil.java b/src/main/java/com/supwisdom/dlpay/util/ConstUtil.java
deleted file mode 100644
index 4a54efa..0000000
--- a/src/main/java/com/supwisdom/dlpay/util/ConstUtil.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.supwisdom.dlpay.util;
-
-/**
- * Created by shuwei on 2019/4/9.
- */
-public class ConstUtil {
-    public static final String STATUS_INIT = "init";
-    public static final String STATUS_SUCCESS = "success";
-    public static final String STATUS_FAIL = "fail";
-
-    public static final String ENABLE_YES = "yes";
-
-    public static final String ENABLE_NO = "no";
-
-}
diff --git a/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java b/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
new file mode 100644
index 0000000..7342e18
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
@@ -0,0 +1,22 @@
+package com.supwisdom.dlpay.util;
+
+/**
+ * Created by shuwei on 2019/4/9.
+ */
+public class ConstantUtil {
+
+    public static final String ENABLE_YES = "yes";
+    public static final String ENABLE_NO = "no";
+
+    public static final String SEX_MALE = "male";
+    public static final String SEX_FEMALE = "female";
+
+    public static final String IDTYPE_IDENTITY = "1"; //身份证
+    public static final String IDTYPE_PASSPORT = "2"; //护照
+    public static final String IDTYPE_DRIVING_LICENSE = "3"; //驾照
+    public static final String IDTYPE_HKM_PASS = "4"; //港澳通行证
+    public static final String IDTYPE_STUEMPNO = "5"; //学工号
+    public static final String IDTYPE_OTHER = "9"; //其他
+    public static final String[] IDTYPE_DICTS = {"1", "2", "3", "4", "5", "9"}; //联动
+
+}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt b/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt
index e5844c4..2b3b6ee 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt
@@ -41,7 +41,7 @@
             params.put("timestamp", time)
             params.put("sign_method", "HMAC");
             params.put("limitflag", "off") //是否判断消费限额，on-判断；off-不判断。默认on（判断限额）。为空或不为off都是on；
-            var signstr = HmacUtil.createLinkString(HmacUtil.paraFilter(params))
+            var signstr = StringUtil.createLinkString(HmacUtil.paraFilter(params))
             val sign = HmacUtil.HMACSHA1(signstr, appkey)
             signstr = "$signstr&sign=$sign&sourcetype=food"
             val c = Client.create()
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt b/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
new file mode 100644
index 0000000..9fd9e5d
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
@@ -0,0 +1,69 @@
+package com.supwisdom.dlpay.api.bean
+
+import com.supwisdom.dlpay.exception.RequestParamCheckException
+import com.supwisdom.dlpay.framework.util.MD5
+import com.supwisdom.dlpay.framework.util.StringUtil
+import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import com.supwisdom.dlpay.util.ConstantUtil
+
+open class APIRequestParam {
+    open val param_map = mutableMapOf<String, String>()
+
+    open fun checkSign(key: String): Boolean {
+        val sign = param_map["sign"]
+        if (StringUtil.isEmpty(sign)) return false //未签名
+
+        //判断签名
+        val signdata = StringUtil.createLinkString(StringUtil.paraFilter(param_map))
+        val md5Sign = MD5.encodeByMD5(signdata + key) //默认MD5
+        if (sign.equals(md5Sign, true)) {
+            return true
+        }
+        return false
+    }
+}
+
+class OpenUserParam : APIRequestParam() {
+    var syscode: String = "" //必传
+    var uid: String = ""    //必传
+    var name: String = ""   //必传
+    var sex: String? = ""
+    var idtype: String = "" //必传
+    var idno: String = ""   //必传
+    var mobile: String? = ""
+    var tel: String? = ""
+    var email: String? = ""
+    var address: String? = ""
+    var zipcode: String? = ""
+    var sign: String = "" //必传
+
+    fun checkParam(): Boolean {
+        if (StringUtil.isEmpty(syscode)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "子系统注册代码不能为空")
+        if (StringUtil.isEmpty(uid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "用户唯一号不能为空")
+        if (StringUtil.isEmpty(name)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "姓名不能为空")
+        if (!StringUtil.isEmpty(sex) && !ConstantUtil.SEX_MALE.equals(sex, true) && !ConstantUtil.SEX_FEMALE.equals(sex, true)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "性别非法[male|female]")
+        if (StringUtil.isEmpty(idtype) || !ConstantUtil.IDTYPE_DICTS.contains(idtype)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "证件类型非法")
+        if (StringUtil.isEmpty(idno) || !StringUtil.isCharAndNum(idno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "证件号不能为空，且仅支持数字和字母")
+        if (ConstantUtil.IDTYPE_IDENTITY == idtype && !StringUtil.isIdentity(idno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "身份证格式错误")
+        if (!StringUtil.isEmpty(mobile) && !StringUtil.isMobile(mobile)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "手机号格式错误")
+        if (!StringUtil.isEmpty(email) && !StringUtil.isEmail(email)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "邮箱格式错误")
+
+        param_map.plus(mapOf("syscode" to syscode, "uid" to uid, "name" to name, "sex" to sex, "idtype" to idtype, "idno" to idno, "mobile" to mobile, "tel" to tel, "email" to email, "address" to address, "zipcode" to zipcode, "sign" to sign))
+        return true
+    }
+}
+
+class QueryUserParam : APIRequestParam() {
+    var syscode: String = "" //必传
+    var userid: String? = ""  // 用户ID二选一 (两者都传取userid)
+    var uid: String? = ""    // 用户ID二选一
+    var sign: String = "" //必传
+
+    fun checkParam(): Boolean {
+        if (StringUtil.isEmpty(syscode)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "子系统注册代码不能为空")
+        if (StringUtil.isEmpty(userid) && StringUtil.isEmpty(uid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "用户唯一号不能为空")
+
+        param_map.plus(mapOf("syscode" to syscode, "userid" to userid, "uid" to uid, "sign" to sign))
+        return true
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_service.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
similarity index 97%
rename from src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_service.kt
rename to src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
index f83569b..66cdb7d 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
@@ -10,7 +10,7 @@
 import com.supwisdom.dlpay.exception.TransactionException
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
 import com.supwisdom.dlpay.framework.util.*
-import com.supwisdom.dlpay.util.ConstUtil
+import com.supwisdom.dlpay.util.ConstantUtil
 import com.supwisdom.dlpay.util.PaytypeUtil
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
@@ -76,7 +76,7 @@
         //一卡通支付款 112240
         return try {
             val paytype = paytypeService.getByPaytype(PaytypeUtil.YKTPAY)
-            if (paytype == null || ConstUtil.ENABLE_YES != paytype.enable) {
+            if (paytype == null || ConstantUtil.ENABLE_YES != paytype.enable) {
                 ResponseEntity.ok(ResponseBodyBuilder.create()
                         .fail(1, "支付方式未开启"))
             }
@@ -129,7 +129,7 @@
             val dtl = personBalancePayService.wip(refno)
             val person = personService.getPersonByUserid(dtl.userid)
             val code = CallService.callYktPay(paytypeService.getPaytypeConfigByPaytype(PaytypeUtil.YKTPAY),
-                    dtl, DateUtil.getNow(), person.thirdUniqueIdenty, yktshopid, devphyid)
+                    dtl, DateUtil.getNow(), "", yktshopid, devphyid)
             if (code.retcode == "0") {
                 PersonTransBuilder.newBuilder(accountUtilServcie)
                         .done(dtl.refno, TradeDict.DTL_STATUS_SUCCESS, personBalancePayService)
@@ -164,7 +164,7 @@
                       wechattype: String, realip: String?, qrcode: String?, openid: String?): ResponseEntity<Any> {
         return try {
             val paytype = paytypeService.getByPaytype(PaytypeUtil.WECHAT)
-            if (paytype == null || ConstUtil.ENABLE_YES != paytype.enable) {
+            if (paytype == null || ConstantUtil.ENABLE_YES != paytype.enable) {
                 ResponseEntity.ok(ResponseBodyBuilder.create()
                         .fail(1, "支付方式未开启"))
             }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_controller.kt
index d0fabc1..408cc3d 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_controller.kt
@@ -5,6 +5,7 @@
 import com.supwisdom.dlpay.api.service.PaytypeService
 import com.supwisdom.dlpay.api.service.PersonBalancePayService
 import com.supwisdom.dlpay.framework.util.MD5
+import com.supwisdom.dlpay.framework.util.StringUtil
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.XmlUtils
 import com.supwisdom.dlpay.util.PaytypeUtil
@@ -62,9 +63,9 @@
                 logger.error("签名错误")
                 return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[签名错误]]></return_msg></xml>"
             }
-            map = XmlUtils.paraFilter(map)
+            map = StringUtil.paraFilter(map)
             //TODO 校验签名
-            var signStr = XmlUtils.createLinkString(map)
+            var signStr = StringUtil.createLinkString(map)
             val config = paytypeService.getPaytypeConfigByPaytype(PaytypeUtil.WECHAT)
             if (config["appkey"].isNullOrEmpty()) {
                 logger.error("签名错误")
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
index 998597c..69f081e 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
@@ -1,11 +1,101 @@
 package com.supwisdom.dlpay.api.controller
 
+import com.supwisdom.dlpay.api.bean.OpenUserParam
+import com.supwisdom.dlpay.api.bean.QueryUserParam
+import com.supwisdom.dlpay.api.service.UserService
+import com.supwisdom.dlpay.exception.RequestParamCheckException
+import com.supwisdom.dlpay.exception.TransactionException
+import com.supwisdom.dlpay.framework.ResponseBodyBuilder
+import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.ResponseEntity
+import org.springframework.web.bind.annotation.PostMapping
+import org.springframework.web.bind.annotation.RequestBody
 import org.springframework.web.bind.annotation.RequestMapping
 import org.springframework.web.bind.annotation.RestController
 
 @RestController
 @RequestMapping("/api/user")
 class UserAPIController {
+    @Autowired
+    private lateinit var useService: UserService
+    @Autowired
+    private lateinit var systemUtilService: SystemUtilService
+
+    @PostMapping("/open")
+    fun openAccount(@RequestBody request: OpenUserParam): ResponseEntity<Any> {
+        return try {
+            if (request.checkParam() && request.checkSign(systemUtilService.getSubsystemSignKey(request.syscode))) {
+                ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
+            }
+            useService.findByThirdUniqueIdenty(request.uid, request.syscode).let {
+                if (null != it) {
+                    ResponseEntity.ok(ResponseBodyBuilder.create()
+                            .fail(TradeErrorCode.REGISTER_USER_EXIST, "改用户唯一号已经注册"))
+                }
+
+                useService.registerUser(request).let {
+                    if (null != it) {
+                        ResponseEntity.ok(ResponseBodyBuilder.create()
+                                .data("userid", it.userid)
+                                .data("uid", request.uid)
+                                .success())
+                    }
+
+                    ResponseEntity.ok(ResponseBodyBuilder.create()
+                            .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "用户注册失败"))
+                }
+            }
+        } catch (ex: RequestParamCheckException) {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .requestException(ex, "请求参数错误"))
+        } catch (et: TransactionException) {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .transException(et, "业务处理错误"))
+        }
+    }
+
+    @PostMapping("/query")
+    fun queryAccount(@RequestBody request: QueryUserParam): ResponseEntity<Any> {
+        return try {
+            if (request.checkParam() && request.checkSign(systemUtilService.getSubsystemSignKey(request.syscode))) {
+                ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
+            }
+
+            useService.findByUseridOrThirdUniqueIdenty(request.userid, request.uid, request.syscode).let {
+                if (null != it) {
+                    val account = useService.findAccountByUserid(it.userid, null)
+                    ResponseEntity.ok(ResponseBodyBuilder.create()
+                            .data("userid", it.userid)
+                            .data("name", it.name)
+                            .data("idtype", it.idtype)
+                            .data("idno", it.idno)
+                            .data("status", it.status)
+                            .data("balance", account.let {
+                                if (null == it) {
+                                    0.0
+                                } else {
+                                    it.availbal
+                                }
+                            })
+                            .data("points", 0) //积分
+                            .success())
+                }
+
+                ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账户不存在"))
+            }
+        } catch (ex: RequestParamCheckException) {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .requestException(ex, "请求参数错误"))
+        } catch (et: TransactionException) {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .transException(et, "业务处理错误"))
+        }
+    }
 
 
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/person_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/person_service_impl.kt
index 5ba6a54..6d05a8d 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/person_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/person_service_impl.kt
@@ -15,7 +15,7 @@
     lateinit var personDao: PersonDao
 
     override fun getPersonByThirdUniqueIdenty(thirdUniqueIdenty: String): TPerson {
-        return personDao.findByThirdUniqueIdenty(thirdUniqueIdenty)
+        return personDao.findByUserid(thirdUniqueIdenty)
     }
 
     override fun getPersonByUserid(userid: String): TPerson {
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
new file mode 100644
index 0000000..77c687f
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
@@ -0,0 +1,110 @@
+package com.supwisdom.dlpay.api.service.impl
+
+import com.supwisdom.dlpay.api.bean.OpenUserParam
+import com.supwisdom.dlpay.api.dao.AccountDao
+import com.supwisdom.dlpay.api.dao.PersonDao
+import com.supwisdom.dlpay.api.dao.PersonIdentityDao
+import com.supwisdom.dlpay.api.domain.TAccount
+import com.supwisdom.dlpay.api.domain.TPerson
+import com.supwisdom.dlpay.api.domain.TPersonIdentity
+import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.api.service.UserService
+import com.supwisdom.dlpay.exception.TransactionProcessException
+import com.supwisdom.dlpay.framework.util.*
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Service
+import java.net.URLDecoder
+
+/**
+ * Created by shuwei on 2019/4/15.
+ */
+@Service
+class UserServiceImpl : UserService {
+    @Autowired
+    private lateinit var personDao: PersonDao
+    @Autowired
+    private lateinit var accountDao: AccountDao
+    @Autowired
+    private lateinit var personIdentityDao: PersonIdentityDao
+    @Autowired
+    private lateinit var systemUtilService: SystemUtilService
+
+    override fun registerUser(param: OpenUserParam): TPerson {
+        val username = URLDecoder.decode(param.name, Charsets.UTF_8.toString())
+        var person = personDao.findByIdentity(param.idtype, param.idno)
+        if (null != person && username != person.name)
+            throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "证件指定用户与请求的用户名不匹配")
+
+        val systemdatetime = systemUtilService.sysdatetime
+        if (null == person) {
+            person = personDao.save(TPerson().apply {
+                name = username
+                sex = param.sex ?: null
+                status = TradeDict.STATUS_NORMAL
+                idtype = param.idtype
+                idno = param.idno
+                email = param.email ?: null
+                tel = param.tel ?: null
+                mobile = param.mobile ?: null
+                addr = param.address?.let { URLDecoder.decode(param.address, Charsets.UTF_8.toString()) }
+                zipcode = param.zipcode ?: null
+                lastsaved = systemdatetime.hostdatetime
+            })
+        }
+
+        if (accountDao.findByUseridAndSubjno(person.userid, Subject.SUBJNO_PERSONAL_DEPOSIT) == null) {
+            //开户
+            TAccount().apply {
+                accname = person.name
+                subjno = Subject.SUBJNO_PERSONAL_DEPOSIT
+                userid = person.userid
+                status = person.status
+                balance = 0.0
+                availbal = 0.0
+                frozebal = 0.0
+                lowfreeFlag = false
+                lowfreeLimit = lowfreeLimit
+                daylimit = daylimit
+                maxbal = systemUtilService.getSysparaValueAsDouble(SysparaUtil.SYSPARAID_NO1, SysparaUtil.SYSPARA_NO1_DEFAULT)
+                lasttransdate = systemdatetime.hostdate
+                lastdayTransamt = 0.0
+                lastdayDpsamt = 0.0
+                opendate = systemdatetime.hostdate
+                tac = this.generateTac()
+                accountDao.save(this)
+            }
+        }
+        personIdentityDao.save(TPersonIdentity().apply {
+            thirdUserid = param.uid
+            thirdSyscode = param.syscode
+            person = person
+        }) //保存绑定关系
+
+        return person
+    }
+
+    override fun findByThirdUniqueIdenty(thirdUniqueIdenty: String, syscode: String): TPerson? {
+        return personIdentityDao.getPersonIdentityById(thirdUniqueIdenty, syscode)?.let { it.person }
+    }
+
+    override fun findByUseridOrThirdUniqueIdenty(userid: String?, thirdUniqueIdenty: String?, syscode: String): TPerson? {
+        return if (!StringUtil.isEmpty(userid)) {
+            personDao.findByUserid(userid)
+        } else {
+            personIdentityDao.getPersonIdentityById(thirdUniqueIdenty, syscode)?.let { it.person }
+        }
+    }
+
+    override fun findPersonByUserid(userid: String): TPerson? {
+        return personDao.findByUserid(userid)
+    }
+
+    override fun findAccountByUserid(userid: String, subjno: String?): TAccount? {
+        return if (!StringUtil.isEmpty(subjno)) {
+            accountDao.findByUseridAndSubjno(userid, subjno)
+        } else {
+            accountDao.findByUseridAndSubjno(userid, Subject.SUBJNO_PERSONAL_DEPOSIT)
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt
new file mode 100644
index 0000000..f01258d
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt
@@ -0,0 +1,29 @@
+package com.supwisdom.dlpay.api.service
+
+import com.supwisdom.dlpay.api.bean.OpenUserParam
+import com.supwisdom.dlpay.api.domain.TAccount
+import com.supwisdom.dlpay.api.domain.TPerson
+import org.springframework.transaction.annotation.Propagation
+import org.springframework.transaction.annotation.Transactional
+
+/**
+ * Created by shuwei on 2019/4/15.
+ */
+interface UserService {
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
+    fun registerUser(param: OpenUserParam): TPerson
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun findByThirdUniqueIdenty(thirdUniqueIdenty: String, syscode: String): TPerson?
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun findByUseridOrThirdUniqueIdenty(userid: String?, thirdUniqueIdenty: String?, syscode: String): TPerson?
+
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun findPersonByUserid(userid: String): TPerson?
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun findAccountByUserid(userid: String, subjno:String?): TAccount?
+
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/app/bean/app_request_param.kt b/src/main/kotlin/com/supwisdom/dlpay/app/bean/app_request_param.kt
new file mode 100644
index 0000000..d857281
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/app/bean/app_request_param.kt
@@ -0,0 +1,2 @@
+package com.supwisdom.dlpay.app.bean
+
diff --git a/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt b/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt
index e5ed5fe..894ad77 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt
@@ -1,13 +1,18 @@
 package com.supwisdom.dlpay.framework
 
+import com.google.gson.Gson
+import com.supwisdom.dlpay.exception.RequestParamCheckException
 import com.supwisdom.dlpay.exception.TransactionCheckException
 import com.supwisdom.dlpay.exception.TransactionException
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import org.apache.log4j.Logger
+
 
 class ResponseBodyBuilder private constructor() {
     companion object {
         private const val INVALIDE_RETCODE = -0x7FFFFFFF
         private val RESERVED_KEY = setOf("retcode", "retmsg", "exception")
+        private val LOGGER = Logger.getLogger(ResponseBodyBuilder::class.java)
         fun create() = ResponseBodyBuilder()
     }
 
@@ -51,6 +56,12 @@
         return build()
     }
 
+    fun requestException(exception: RequestParamCheckException, msg: String): Map<String, Any> {
+        data("exception", exception.message!!)
+        result(exception.errCode, "$msg - [${exception.message}]")
+        return build()
+    }
+
     fun data(name: String, value: Any): ResponseBodyBuilder {
         if (name in RESERVED_KEY) {
             throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "返回值 <$name> 为保留值，不能使用")
@@ -62,6 +73,8 @@
     private fun build(): Map<String, Any> {
         if (retCode == INVALIDE_RETCODE) {
             throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未设置返回码!")
+        } else if (retCode != 0) {
+            LOGGER.error(Gson().toJson(this.respData))
         }
         return this.respData.plus(mapOf("retcode" to retCode, "retmsg" to retMsg))
     }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/shop/bean/shop_param.kt b/src/main/kotlin/com/supwisdom/dlpay/shop/bean/shop_param.kt
index 4b8388a..749dd3a 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/shop/bean/shop_param.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/shop/bean/shop_param.kt
@@ -10,12 +10,4 @@
     var mobile: String = ""
     var contactman: String = ""
     var uniqueId: String? = ""
-}
-
-class UserParam {
-    var uniqueId: String? = ""
-    var userid: String? = ""
-    var name: String = ""
-    var addr: String? = ""
-    var mobile: String? = ""
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/user/controller/user_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/user/controller/user_controller.kt
deleted file mode 100644
index 47cb717..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/user/controller/user_controller.kt
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.supwisdom.dlpay.user.controller
-
-import com.supwisdom.dlpay.api.domain.TPerson
-import com.supwisdom.dlpay.framework.ResponseBodyBuilder
-import com.supwisdom.dlpay.framework.util.TradeDict
-import com.supwisdom.dlpay.shop.bean.UserParam
-import com.supwisdom.dlpay.user.service.UserService
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.http.ResponseEntity
-import org.springframework.web.bind.annotation.*
-
-/**
- * Created by shuwei on 2019/4/15.
- */
-@RestController
-@RequestMapping("/api/user")
-class UserController {
-    @Autowired
-    private lateinit var useService: UserService
-
-    @PostMapping("/open")
-    fun openAccount(@RequestBody request: UserParam): ResponseEntity<Any> {
-        if (!request.uniqueId.isNullOrEmpty()) {
-            val person = useService.findByThirdUniqueIdenty(request.uniqueId!!)
-            if (person != null) {
-                return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(1, "[uniqueId]该值已存在"))
-            }
-        }
-        if (request.name.isEmpty()) {
-            return ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .fail(1, "[name]不能为空"))
-        }
-        val person = TPerson()
-        person.addr = request.addr
-        person.name = request.name
-        person.mobile = request.mobile
-        person.status = TradeDict.STATUS_NORMAL
-        person.thirdUniqueIdenty = request.uniqueId
-        useService.save(person)
-        return ResponseEntity.ok(ResponseBodyBuilder.create()
-                .data("userid", person.userid)
-                .success())
-    }
-
-    @PostMapping("/get")
-    fun queryShop(@RequestBody request: UserParam): ResponseEntity<Any> {
-        if (!request.uniqueId.isNullOrEmpty()) {
-            val person = useService.findByThirdUniqueIdenty(request.uniqueId!!)
-            if (person != null) {
-                val account = useService.findAccountByUserid(person.userid)
-                return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .data("person", person)
-                        .data("account", account!!)
-                        .success())
-            }
-        } else if (!request.userid.isNullOrEmpty()) {
-            val person = useService.findPersonByUserid(request.userid!!)
-            if (person != null) {
-                val account = useService.findAccountByUserid(person.userid)
-                return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .data("person", person)
-                        .data("account", account!!)
-                        .success())
-            }
-        }
-        return ResponseEntity.ok(ResponseBodyBuilder.create()
-                .fail(1, "数据不存在"))
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/user/service/impl/user_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/user/service/impl/user_service_impl.kt
deleted file mode 100644
index cb57ca1..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/user/service/impl/user_service_impl.kt
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.supwisdom.dlpay.user.service.impl
-
-import com.supwisdom.dlpay.api.dao.AccountDao
-import com.supwisdom.dlpay.api.dao.PersonDao
-import com.supwisdom.dlpay.api.domain.TAccount
-import com.supwisdom.dlpay.api.domain.TPerson
-import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.util.Subject
-import com.supwisdom.dlpay.user.service.UserService
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.stereotype.Service
-
-/**
- * Created by shuwei on 2019/4/15.
- */
-@Service
-class UserServiceImpl : UserService {
-    @Autowired
-    private lateinit var personDao: PersonDao
-    @Autowired
-    private lateinit var accountDao: AccountDao
-    @Autowired
-    private lateinit var systemUtilService: SystemUtilService
-
-    override fun save(person: TPerson): TPerson {
-        //TODO check tac
-        personDao.save(person)
-        if (accountDao.findByUserid(person.userid) == null) {
-            val systemdatetime = systemUtilService.sysdatetime
-            TAccount().apply {
-                accname = person.name
-                opendate = systemdatetime.hostdate
-                userid = person.userid
-                status = person.status
-                subjno = Subject.SUBJNO_PERSONAL_DEPOSIT
-                balance = 0.0
-                availbal = 0.0
-                frozebal = 0.0
-                lowfreeFlag = false
-                accountDao.save(this)
-            }
-        }
-        return person
-    }
-
-    override fun findByThirdUniqueIdenty(thirdUniqueIdenty: String): TPerson? {
-        return personDao.findByThirdUniqueIdenty(thirdUniqueIdenty)
-    }
-
-    override fun findPersonByUserid(userid: String): TPerson? {
-        return personDao.getOne(userid)
-    }
-
-    override fun findAccountByUserid(userid: String): TAccount? {
-        return accountDao.findByUserid(userid)
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/user/service/user_service.kt b/src/main/kotlin/com/supwisdom/dlpay/user/service/user_service.kt
deleted file mode 100644
index 6bac9c9..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/user/service/user_service.kt
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.supwisdom.dlpay.user.service
-
-import com.supwisdom.dlpay.api.domain.TAccount
-import com.supwisdom.dlpay.api.domain.TPerson
-import org.springframework.transaction.annotation.Propagation
-import org.springframework.transaction.annotation.Transactional
-
-/**
- * Created by shuwei on 2019/4/15.
- */
-interface UserService {
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun save(person: TPerson): TPerson
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
-    fun findByThirdUniqueIdenty(thirdUniqueIdenty: String): TPerson?
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
-    fun findPersonByUserid(userid: String): TPerson?
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
-    fun findAccountByUserid(userid: String): TAccount?
-}
\ No newline at end of file
diff --git a/src/test/kotlin/com/supwisdom/dlpay/controller/UserControllerTest.kt b/src/test/kotlin/com/supwisdom/dlpay/controller/UserControllerTest.kt
index 4147974..44724a3 100644
--- a/src/test/kotlin/com/supwisdom/dlpay/controller/UserControllerTest.kt
+++ b/src/test/kotlin/com/supwisdom/dlpay/controller/UserControllerTest.kt
@@ -2,9 +2,10 @@
 
 import com.google.gson.Gson
 import com.supwisdom.dlpay.MvcBaseTest
+import com.supwisdom.dlpay.api.bean.OpenUserParam
+import com.supwisdom.dlpay.api.bean.QueryUserParam
 import com.supwisdom.dlpay.api.domain.TAccount
 import com.supwisdom.dlpay.api.domain.TPerson
-import com.supwisdom.dlpay.shop.bean.UserParam
 import org.junit.Assert
 import org.junit.Test
 import org.springframework.http.MediaType
@@ -24,11 +25,12 @@
 
     @Test
     fun open() {
-        val userParam = UserParam()
-        userParam.uniqueId = ""//random req
+        val userParam = OpenUserParam()
+        userParam.syscode = "ykt"
+        userParam.uid = ""//random req
         userParam.name = "测试名称"
 
-        val ret = mvc.perform(MockMvcRequestBuilders.post("/user/open").content(gson.toJson(userParam))
+        val ret = mvc.perform(MockMvcRequestBuilders.post("/api/user/open").content(gson.toJson(userParam))
                 .contentType(MediaType.APPLICATION_JSON))
                 .andExpect(MockMvcResultMatchers.status().isOk)
                 .andDo(MockMvcResultHandlers.print())
@@ -44,11 +46,12 @@
 
     @Test
     fun get() {
-        val userParam = UserParam()
-        userParam.uniqueId = "testuseruniqueId"//测试用
-        userParam.name = "测试名称:testuseruniqueId"
+
+        val userParam = QueryUserParam()
+        userParam.syscode = "ykt"
+        userParam.uid = "testuseruniqueId"//测试用
         val gson = Gson()
-        val ret = mvc.perform(MockMvcRequestBuilders.post("/user/open").content(gson.toJson(userParam))
+        val ret = mvc.perform(MockMvcRequestBuilders.post("/api/user/open").content(gson.toJson(userParam))
                 .contentType(MediaType.APPLICATION_JSON))
                 .andExpect(MockMvcResultMatchers.status().isOk)
                 .andDo(MockMvcResultHandlers.print())
@@ -60,7 +63,7 @@
         Assert.assertNotNull(retBeanOpen.userid)
         userParam.userid = retBeanOpen.userid
 
-        val retGet = mvc.perform(MockMvcRequestBuilders.get("/user/get").content(gson.toJson(userParam))
+        val retGet = mvc.perform(MockMvcRequestBuilders.get("/api/user/query").content(gson.toJson(userParam))
                 .contentType(MediaType.APPLICATION_JSON))
                 .andExpect(MockMvcResultMatchers.status().isOk)
                 .andDo(MockMvcResultHandlers.print())
