From 0e0451fa79474d2ed219c255604bda39b60712c7 Mon Sep 17 00:00:00 2001 From: yujintao Date: Thu, 20 Feb 2020 17:30:02 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=AE=8C=E5=96=84=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=8F=96=E6=B6=88=E6=89=8B?= =?UTF-8?q?=E6=9C=BA=E9=AA=8C=E8=AF=81=E7=A0=81=EF=BC=9B=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=8E=B7=E5=8F=96=E7=94=A8=E6=88=B7=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E6=89=8B=E6=9C=BA=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v2/EpdcCompleteUserInfoFormV2DTO.java | 75 +++++++++++++++++++ .../epdc/controller/ApiAppUserController.java | 16 ++++ .../controller/v2/ApiAppUserV2Controller.java | 23 +++++- .../esua/epdc/service/AppUserService.java | 27 ++++++- .../epdc/service/impl/AppUserServiceImpl.java | 56 +++++++++++--- 5 files changed, 179 insertions(+), 18 deletions(-) create mode 100644 esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/form/v2/EpdcCompleteUserInfoFormV2DTO.java diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/form/v2/EpdcCompleteUserInfoFormV2DTO.java b/esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/form/v2/EpdcCompleteUserInfoFormV2DTO.java new file mode 100644 index 000000000..f4094c08c --- /dev/null +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/form/v2/EpdcCompleteUserInfoFormV2DTO.java @@ -0,0 +1,75 @@ +package com.elink.esua.epdc.dto.form.v2; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * 移动端完善用户信息 + * + * @author work@yujt.net.cn + * @date 2019/10/26 10:56 + */ +@Data +public class EpdcCompleteUserInfoFormV2DTO implements Serializable { + + private static final long serialVersionUID = 7848126935041704928L; + + @NotBlank(message = "党员标识不能为空") + private String partyFlag; + + /** + * 身份证号码 + */ + private String identityNo; + /** + * 手机号 + */ + @NotBlank(message = "手机号不能为空") + private String mobile; + /** + * 真实姓名 + */ + @NotBlank(message = "真实姓名不能为空") + private String realName; + /** + * 所在道路 + */ + @NotBlank(message = "所在道路不能为空") + private String road; + /** + * 小区名 + */ + private String villageName; + /** + * 住处(楼栋-单元-房间) + */ + private String dwellingPlace; + + /** + * 0女,1男 + */ + @NotBlank(message = "性别不能为空") + private String sex; + + /** + * 微信code + */ + private String wxCode; + + /** + * 用户信息 + */ + private String encryptedData; + + /** + * 加密算法的初始向量 + */ + private String iv; + + /** + * 居住网格id + */ + private Long gridId; +} diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiAppUserController.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiAppUserController.java index 8c462b1fa..8f70114a0 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiAppUserController.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiAppUserController.java @@ -106,6 +106,7 @@ public class ApiAppUserController { ValidatorUtils.validateEntity(formDto); return appUserService.checkRegister(formDto); } + /** * 用户生成小程序码 * @@ -241,6 +242,7 @@ public class ApiAppUserController { public Result prepareCompleteUserInfo(@LoginUser TokenDto tokenDto) { return appUserService.prepareCompleteUserInfo(tokenDto); } + /** * 获取邀请记录 * @@ -264,4 +266,18 @@ public class ApiAppUserController { public Result checkWxUnionId(@LoginUser TokenDto tokenDto) { return appUserService.checkWxUnionId(tokenDto); } + + /** + * 获取用户微信手机号 + * + * @param formDto + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author work@yujt.net.cn + * @date 2020/2/20 17:23 + */ + @GetMapping("user/ma/getWxPhone") + public Result getUserWxPhone(EpdcAppUserMaInfoFormDTO formDto) { + ValidatorUtils.validateEntity(formDto); + return appUserService.getUserWxPhone(formDto); + } } diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/v2/ApiAppUserV2Controller.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/v2/ApiAppUserV2Controller.java index c06725cd9..569f9d3bb 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/v2/ApiAppUserV2Controller.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/v2/ApiAppUserV2Controller.java @@ -1,16 +1,18 @@ package com.elink.esua.epdc.controller.v2; +import com.elink.esua.epdc.common.token.dto.TokenDto; import com.elink.esua.epdc.commons.api.version.ApiVersion; +import com.elink.esua.epdc.commons.tools.annotation.LoginUser; import com.elink.esua.epdc.commons.tools.constant.Constant; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.commons.tools.validator.ValidatorUtils; import com.elink.esua.epdc.dto.form.EpdcAppUserRegisterFormDTO; +import com.elink.esua.epdc.dto.form.EpdcCompleteUserInfoFormDTO; +import com.elink.esua.epdc.dto.form.v2.EpdcCompleteUserInfoFormV2DTO; import com.elink.esua.epdc.dto.result.EpdcAppAuthorizationDTO; import com.elink.esua.epdc.service.AppUserService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** * 用户模块迭代接口 v2 @@ -39,4 +41,19 @@ public class ApiAppUserV2Controller { ValidatorUtils.validateEntity(formDto); return appUserService.getMaV2Token(formDto); } + + /** + * 完善个人信息,不再进行验证手机号 + * + * @param tokenDto + * @param formDto + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author work@yujt.net.cn + * @date 2020/2/20 17:11 + */ + @PostMapping("user/" + Constant.VERSION_CONTROL + "/completeInfo") + public Result completeUserInfo(@LoginUser TokenDto tokenDto, @RequestBody EpdcCompleteUserInfoFormV2DTO formDto) { + ValidatorUtils.validateEntity(formDto); + return appUserService.completeUserInfo(tokenDto, formDto); + } } diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/AppUserService.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/AppUserService.java index 4155c3c28..9684a4b13 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/AppUserService.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/AppUserService.java @@ -7,6 +7,7 @@ import com.elink.esua.epdc.dto.epdc.result.EpdcUserGridResultDTO; import com.elink.esua.epdc.dto.epdc.result.EpdcUserInfoResultDTO; import com.elink.esua.epdc.dto.epdc.result.UserInvitationRecordResultDTO; import com.elink.esua.epdc.dto.form.*; +import com.elink.esua.epdc.dto.form.v2.EpdcCompleteUserInfoFormV2DTO; import com.elink.esua.epdc.dto.result.EpdcAppRegisterCallbackDTO; import com.elink.esua.epdc.dto.result.EpdcAppAuthorizationDTO; import com.elink.esua.epdc.dto.result.EpdcCompleteUserInfoDTO; @@ -168,11 +169,10 @@ public interface AppUserService { Result getMaV2Token(EpdcAppUserRegisterFormDTO formDto); /** - * * 更新用户微信信息 * - * @params [userDetail, formDto] * @return com.elink.esua.epdc.commons.tools.utils.Result + * @params [userDetail, formDto] * @author liuchuang * @since 2019/10/25 16:26 */ @@ -189,6 +189,17 @@ public interface AppUserService { */ Result completeUserInfo(TokenDto tokenDto, EpdcCompleteUserInfoFormDTO formDto); + /** + * 用户完善个人信息-保存 + * + * @param tokenDto + * @param formDto + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author work@yujt.net.cn + * @date 2019/10/26 11:05 + */ + Result completeUserInfo(TokenDto tokenDto, EpdcCompleteUserInfoFormV2DTO formDto); + /** * 用于用户完善个人信息页面,获取个人信息 * @@ -215,5 +226,15 @@ public interface AppUserService { * @Description 查看用户是否已保存unionId * @Date 2019/12/7 14:32 **/ - Result checkWxUnionId(TokenDto tokenDto); + Result checkWxUnionId(TokenDto tokenDto); + + /** + * 获取用户微信手机号 + * + * @param formDto + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author work@yujt.net.cn + * @date 2020/2/20 17:24 + */ + Result getUserWxPhone(EpdcAppUserMaInfoFormDTO formDto); } diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AppUserServiceImpl.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AppUserServiceImpl.java index 92bf20d64..8ce80bd59 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AppUserServiceImpl.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AppUserServiceImpl.java @@ -1,6 +1,8 @@ package com.elink.esua.epdc.service.impl; +import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; +import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; import cn.binarywang.wx.miniapp.bean.WxMaUserInfo; import com.elink.esua.epdc.async.GroupTask; import com.elink.esua.epdc.common.token.dto.TokenDto; @@ -23,6 +25,7 @@ import com.elink.esua.epdc.dto.epdc.result.EpdcUserRegisterInfoResultDTO; import com.elink.esua.epdc.dto.epdc.result.EpdcUserInfoResultDTO; import com.elink.esua.epdc.dto.epdc.result.UserInvitationRecordResultDTO; import com.elink.esua.epdc.dto.form.*; +import com.elink.esua.epdc.dto.form.v2.EpdcCompleteUserInfoFormV2DTO; import com.elink.esua.epdc.dto.group.form.GroupUserFormDTO; import com.elink.esua.epdc.dto.group.form.GroupUserPartyMemberFormDTO; import com.elink.esua.epdc.dto.result.EpdcAppRegisterCallbackDTO; @@ -777,16 +780,11 @@ public class AppUserServiceImpl implements AppUserService { return userDto; } - @Override - public Result completeUserInfo(TokenDto tokenDto, EpdcCompleteUserInfoFormDTO infoDto) { + private Result completeUserInfo(TokenDto tokenDto, UserDTO userDto, String wxCode, String encryptedData, String iv, String smsCode) { - UserDTO userDto = ConvertUtils.sourceToTarget(infoDto, UserDTO.class); - userDto.setDeptId(Long.valueOf(infoDto.getGridId())); - userDto.setId(tokenDto.getUserId()); - - if (StringUtils.isNotBlank(infoDto.getWxCode())) { - String sessionKey = this.getUserSessionKey(infoDto.getWxCode()); - WxMaUserInfo wxMaUserInfo = wxMaServiceUtils.normalWxMaService().getUserService().getUserInfo(sessionKey, infoDto.getEncryptedData(), infoDto.getIv()); + if (StringUtils.isNotBlank(wxCode)) { + String sessionKey = this.getUserSessionKey(wxCode); + WxMaUserInfo wxMaUserInfo = wxMaServiceUtils.normalWxMaService().getUserService().getUserInfo(sessionKey, encryptedData, iv); if (StringUtils.isBlank(wxMaUserInfo.getUnionId())) { return new Result().error("解析微信开放平台ID失败"); } @@ -808,7 +806,9 @@ public class AppUserServiceImpl implements AppUserService { userDto.setIdentityNo(null); } // 验证手机号 - this.checkSmsCode(userDto.getMobile(), infoDto.getSmsCode()); + if (StringUtils.isNotBlank(smsCode)) { + this.checkSmsCode(userDto.getMobile(), smsCode); + } // 验证用户提交的信息 Result verifyResult = userFeignClient.verifyUserCompleteData(userDto); if (!verifyResult.success()) { @@ -816,7 +816,7 @@ public class AppUserServiceImpl implements AppUserService { } String userState = verifyResult.getData(); - UserGridRelationDTO userGrid = this.packageUserGridRelationInfo(infoDto.getGridId()); + UserGridRelationDTO userGrid = this.packageUserGridRelationInfo(userDto.getDeptId()); EpdcCompleteAppUserDTO completeAppUserDto = ConvertUtils.sourceToTarget(userDto, EpdcCompleteAppUserDTO.class); completeAppUserDto = this.packageUserCompleteInfo(completeAppUserDto, userState); // 组装对象,准备保存用户信息 @@ -854,12 +854,28 @@ public class AppUserServiceImpl implements AppUserService { formDto.setState(GroupUserStateEnum.GROUP_USER_STATE_EXAMINATION_PASSED.getValue()); groupFeignClient.updateUserPartyMember(formDto); -// groupTask.updateUserPartyMember(formDto); } return new Result().ok(authorizationDto); } + @Override + public Result completeUserInfo(TokenDto tokenDto, EpdcCompleteUserInfoFormDTO infoDto) { + UserDTO userDto = ConvertUtils.sourceToTarget(infoDto, UserDTO.class); + userDto.setDeptId(infoDto.getGridId()); + userDto.setId(tokenDto.getUserId()); + return this.completeUserInfo(tokenDto, userDto, infoDto.getWxCode(), infoDto.getEncryptedData(), infoDto.getIv(), infoDto.getSmsCode()); + } + + + @Override + public Result completeUserInfo(TokenDto tokenDto, EpdcCompleteUserInfoFormV2DTO infoDto) { + UserDTO userDto = ConvertUtils.sourceToTarget(infoDto, UserDTO.class); + userDto.setDeptId(infoDto.getGridId()); + userDto.setId(tokenDto.getUserId()); + return this.completeUserInfo(tokenDto, userDto, infoDto.getWxCode(), infoDto.getEncryptedData(), infoDto.getIv(), null); + } + @Override public Result prepareCompleteUserInfo(TokenDto tokenDto) { @@ -1082,4 +1098,20 @@ public class AppUserServiceImpl implements AppUserService { } return result; } + + @Override + public Result getUserWxPhone(EpdcAppUserMaInfoFormDTO formDto) { + try { + WxMaService wxMaService = wxMaServiceUtils.normalWxMaService(); + WxMaJscode2SessionResult wxMaJscode2SessionResult = wxMaService.jsCode2SessionInfo(formDto.getWxCode()); + WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService().getPhoneNoInfo(wxMaJscode2SessionResult.getSessionKey(), formDto.getEncryptedData(), formDto.getIv()); + if (null != phoneNoInfo) { + return new Result().ok(phoneNoInfo.getPhoneNumber()); + } + } catch (WxErrorException e) { + e.printStackTrace(); + log.error(e.getError().getErrorMsg()); + } + return new Result().error("解析用户手机号失败"); + } }