用户修改
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?