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
index 9fd9e5d..79d56ea 100644
--- 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
@@ -27,21 +27,21 @@
     var syscode: String = "" //必传
     var uid: String = ""    //必传
     var name: String = ""   //必传
-    var sex: String? = ""
+    var sex: String? = null
     var idtype: String = "" //必传
     var idno: String = ""   //必传
-    var mobile: String? = ""
-    var tel: String? = ""
-    var email: String? = ""
-    var address: String? = ""
-    var zipcode: String? = ""
+    var mobile: String? = null
+    var tel: String? = null
+    var email: String? = null
+    var address: String? = null
+    var zipcode: String? = null
     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(sex) && ConstantUtil.SEX_MALE != sex && ConstantUtil.SEX_FEMALE != sex) 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, "身份证格式错误")
@@ -55,8 +55,8 @@
 
 class QueryUserParam : APIRequestParam() {
     var syscode: String = "" //必传
-    var userid: String? = ""  // 用户ID二选一 (两者都传取userid)
-    var uid: String? = ""    // 用户ID二选一
+    var userid: String? = null  // 用户ID二选一 (两者都传取userid)
+    var uid: String? = null    // 用户ID二选一
     var sign: String = "" //必传
 
     fun checkParam(): Boolean {
@@ -66,4 +66,36 @@
         param_map.plus(mapOf("syscode" to syscode, "userid" to userid, "uid" to uid, "sign" to sign))
         return true
     }
+}
+
+class ModifyUserParam : APIRequestParam() {
+    var syscode: String = "" //必传
+    var userid: String? = null  // 用户ID二选一 (两者都传取userid)
+    var uid: String? = null    // 用户ID二选一
+    var name: String? = null
+    var sex: String? = null
+    var idtype: String? = null
+    var idno: String? = null
+    var mobile: String? = null
+    var tel: String? = null
+    var email: String? = null
+    var address: String? = null
+    var zipcode: String? = null
+    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, "用户唯一号不能为空")
+        if (!StringUtil.isEmpty(sex) && ConstantUtil.SEX_MALE != sex && ConstantUtil.SEX_FEMALE != sex) 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 (!StringUtil.isEmpty(idno) && StringUtil.isEmpty(idtype)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "证件号不能为空时，请指定证件类型")
+        if (!StringUtil.isEmpty(idno) && 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, "userid" to userid, "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
+    }
 }
\ No newline at end of file
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 092d541..ac86e3a 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,5 +1,6 @@
 package com.supwisdom.dlpay.api.controller
 
+import com.supwisdom.dlpay.api.bean.ModifyUserParam
 import com.supwisdom.dlpay.api.bean.OpenUserParam
 import com.supwisdom.dlpay.api.bean.QueryUserParam
 import com.supwisdom.dlpay.api.service.UserService
@@ -14,6 +15,7 @@
 import org.springframework.web.bind.annotation.RequestBody
 import org.springframework.web.bind.annotation.RequestMapping
 import org.springframework.web.bind.annotation.RestController
+import java.net.URLDecoder
 
 @RestController
 @RequestMapping("/api/user")
@@ -36,6 +38,8 @@
                             .fail(TradeErrorCode.REGISTER_USER_EXIST, "改用户唯一号已经注册"))
                 }
 
+                request.name = URLDecoder.decode(request.name, Charsets.UTF_8.toString()) //解码
+                request.address = request.address?.let { URLDecoder.decode(request.address, Charsets.UTF_8.toString()) }  //解码
                 useService.registerUser(request).let {
                     if (null != it) {
                         ResponseEntity.ok(ResponseBodyBuilder.create()
@@ -74,6 +78,8 @@
                             .data("name", it.name)
                             .data("idtype", it.idtype)
                             .data("idno", it.idno)
+                            .data("mobile", it.mobile)
+                            .data("email", it.email)
                             .data("status", it.status)
                             .data("balance", account.let {
                                 if (null == it) {
@@ -104,5 +110,35 @@
         }
     }
 
+    @PostMapping("/modify")
+    fun modifyAccount(@RequestBody request: ModifyUserParam): 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 {
+                request.name = request.name?.let { URLDecoder.decode(request.name, Charsets.UTF_8.toString()) } //解码
+                request.address = request.address?.let { URLDecoder.decode(request.address, Charsets.UTF_8.toString()) } //解码
+                if (useService.modifyUserInfo(it, request)) {
+                    ResponseEntity.ok(ResponseBodyBuilder.create()
+                            .success("修改成功"))
+                } else {
+                    ResponseEntity.ok(ResponseBodyBuilder.create()
+                            .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "账户信息修改失败"))
+                }
+            }
+
+            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/user_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
index e5f3353..510fd35 100644
--- 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
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.api.service.impl
 
+import com.supwisdom.dlpay.api.bean.ModifyUserParam
 import com.supwisdom.dlpay.api.bean.OpenUserParam
 import com.supwisdom.dlpay.api.dao.AccountDao
 import com.supwisdom.dlpay.api.dao.PersonDao
@@ -34,24 +35,23 @@
     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)
+        if (null != person && param.name != 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
+                name = param.name
+                sex = param.sex
                 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
+                email = param.email
+                tel = param.tel
+                mobile = param.mobile
+                addr = param.address
+                zipcode = param.zipcode
                 lastsaved = systemdatetime.hostdatetime
             })
         }
@@ -81,7 +81,7 @@
         personIdentityDao.save(TPersonIdentity().apply {
             thirdUserid = param.uid
             thirdSyscode = param.syscode
-            person = person
+            this.person = person
         }) //保存绑定关系
 
         return person
@@ -99,6 +99,28 @@
         }
     }
 
+    override fun modifyUserInfo(person: TPerson, param: ModifyUserParam): Boolean {
+        if (!StringUtil.isEmpty(param.name) && param.name != person.name) {
+            person.name = param.name
+            accountDao.findByUseridAndSubjno(person.userid, Subject.SUBJNO_PERSONAL_DEPOSIT)?.let {
+                it.accname = param.name
+                accountDao.save(it)
+            }
+        }
+        if (!StringUtil.isEmpty(param.sex)) person.sex = param.sex
+        if (!StringUtil.isEmpty(param.idno)) {
+            person.idtype = param.idtype
+            person.idno = param.idno
+        }
+        if (!StringUtil.isEmpty(param.mobile)) person.mobile = param.mobile
+        if (!StringUtil.isEmpty(param.tel)) person.tel = param.tel
+        if (!StringUtil.isEmpty(param.email)) person.email = param.email
+        if (!StringUtil.isEmpty(param.address)) person.addr = param.address
+        if (!StringUtil.isEmpty(param.zipcode)) person.zipcode = param.zipcode
+        personDao.save(person)
+        return true
+    }
+
     override fun findPersonByUserid(userid: String): TPerson? {
         return personDao.findByUserid(userid)
     }
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
index 0fe40a5..9f2d3fd 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.api.service
 
+import com.supwisdom.dlpay.api.bean.ModifyUserParam
 import com.supwisdom.dlpay.api.bean.OpenUserParam
 import com.supwisdom.dlpay.api.domain.TAccount
 import com.supwisdom.dlpay.api.domain.TPerson
@@ -20,6 +21,8 @@
     @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 modifyUserInfo(person:TPerson,param: ModifyUserParam):Boolean
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
     fun findPersonByUserid(userid: String): TPerson?
