From deaed57023f0fc03bc99d6e5ea4eec7c9323ac98 Mon Sep 17 00:00:00 2001 From: Xia Kaixiang Date: Mon, 6 May 2019 15:05:46 +0800 Subject: [PATCH] =?utf8?q?=E7=94=A8=E6=88=B7=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../dlpay/api/bean/api_request_param.kt | 50 +++++++++++++++---- .../api/controller/user_api_controller.kt | 36 +++++++++++++ .../api/service/impl/user_service_impl.kt | 42 ++++++++++++---- .../dlpay/api/service/user_service.kt | 3 ++ 4 files changed, 112 insertions(+), 19 deletions(-) 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 9fd9e5d4..79d56ea6 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 @@ class OpenUserParam : APIRequestParam() { 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 OpenUserParam : APIRequestParam() { 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 @@ class QueryUserParam : APIRequestParam() { 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 092d5415..ac86e3a0 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.PostMapping 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 @@ class UserAPIController { .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 @@ class UserAPIController { .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 @@ class UserAPIController { } } + @PostMapping("/modify") + fun modifyAccount(@RequestBody request: ModifyUserParam): ResponseEntity { + 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 e5f3353a..510fd35f 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 @@ class UserServiceImpl : UserService { 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 @@ class UserServiceImpl : UserService { personIdentityDao.save(TPersonIdentity().apply { thirdUserid = param.uid thirdSyscode = param.syscode - person = person + this.person = person }) //保存绑定关系 return person @@ -99,6 +99,28 @@ class UserServiceImpl : UserService { } } + 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 0fe40a53..9f2d3fd8 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 @@ interface UserService { @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? -- 2.17.1