Browse Source

用户小程序登录配置及接口功能;其他

dev
yujintao 6 years ago
parent
commit
0e53782087
  1. 11
      esua-epdc/epdc-commons/epdc-wx/pom.xml
  2. 115
      esua-epdc/epdc-commons/epdc-wx/src/main/java/com/elink/esua/epdc/wx/mp/config/WxMaConfig.java
  3. 41
      esua-epdc/epdc-commons/epdc-wx/src/main/java/com/elink/esua/epdc/wx/mp/config/WxMaProperties.java
  4. 34
      esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/form/EpdcAppUserMaTokenFormDTO.java
  5. 36
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiAdminController.java
  6. 43
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiAppUserController.java
  7. 2
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/IssueFeignClient.java
  8. 1
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/NewsFeignClient.java
  9. 23
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/AdminService.java
  10. 52
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/AppUserService.java
  11. 36
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AdminServiceImpl.java
  12. 198
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AppUserServiceImpl.java
  13. 15
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/resources/application.yml
  14. 52
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/test/java/com/elink/esua/epdc/UserTest.java

11
esua-epdc/epdc-commons/epdc-wx/pom.xml

@ -13,12 +13,11 @@
<artifactId>epdc-wx</artifactId>
<packaging>jar</packaging>
<name>Wechat mp demo with Spring Boot and WxJava</name>
<description>基于 WxJava 和 Spring Boot 实现的微信公众号后端开发演示项目</description>
<!-- <name>Wechat mp demo with Spring Boot and WxJava</name>-->
<!-- <description>基于 WxJava 和 Spring Boot 实现的微信公众号后端开发演示项目</description>-->
<properties>
<weixin-java-mp.version>3.5.0</weixin-java-mp.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
@ -57,5 +56,11 @@
<scope>compile</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId>
<version>3.4.0</version>
</dependency>
</dependencies>
</project>

115
esua-epdc/epdc-commons/epdc-wx/src/main/java/com/elink/esua/epdc/wx/mp/config/WxMaConfig.java

@ -0,0 +1,115 @@
package com.elink.esua.epdc.wx.mp.config;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage;
import cn.binarywang.wx.miniapp.bean.WxMaTemplateData;
import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;
import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig;
import cn.binarywang.wx.miniapp.message.WxMaMessageHandler;
import cn.binarywang.wx.miniapp.message.WxMaMessageRouter;
import com.google.common.collect.Lists;
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.File;
/**
* @author <a href="https://github.com/binarywang">Binary Wang</a>
*/
@Configuration
@EnableConfigurationProperties(WxMaProperties.class)
public class WxMaConfig {
private WxMaProperties properties;
@Autowired
public WxMaConfig(WxMaProperties properties) {
this.properties = properties;
}
@Bean
public WxMaService wxMaService() {
WxMaProperties wxMaProperties = this.properties;
if (wxMaProperties == null) {
throw new RuntimeException("大哥,拜托先看下项目首页的说明(readme文件),添加下相关配置,注意别配错了!");
}
WxMaInMemoryConfig config = new WxMaInMemoryConfig();
config.setAppid(wxMaProperties.getAppid());
config.setSecret(wxMaProperties.getSecret());
config.setToken(wxMaProperties.getToken());
config.setAesKey(wxMaProperties.getAesKey());
config.setMsgDataFormat(wxMaProperties.getMsgDataFormat());
WxMaService maService = new WxMaServiceImpl();
maService.setWxMaConfig(config);
return maService;
}
@Bean
public WxMaMessageRouter newRouter(WxMaService service) {
final WxMaMessageRouter router = new WxMaMessageRouter(service);
router
.rule().handler(logHandler).next()
.rule().async(false).content("模板").handler(templateMsgHandler).end()
.rule().async(false).content("文本").handler(textHandler).end()
.rule().async(false).content("图片").handler(picHandler).end()
.rule().async(false).content("二维码").handler(qrcodeHandler).end();
return router;
}
private final WxMaMessageHandler templateMsgHandler = (wxMessage, context, service, sessionManager) ->
service.getMsgService().sendTemplateMsg(WxMaTemplateMessage.builder()
.templateId("此处更换为自己的模板id")
.formId("自己替换可用的formid")
.data(Lists.newArrayList(
new WxMaTemplateData("keyword1", "339208499", "#173177")))
.toUser(wxMessage.getFromUser())
.build());
private final WxMaMessageHandler logHandler = (wxMessage, context, service, sessionManager) -> {
System.out.println("收到消息:" + wxMessage.toString());
service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("收到信息为:" + wxMessage.toJson())
.toUser(wxMessage.getFromUser()).build());
};
private final WxMaMessageHandler textHandler = (wxMessage, context, service, sessionManager) ->
service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("回复文本消息")
.toUser(wxMessage.getFromUser()).build());
private final WxMaMessageHandler picHandler = (wxMessage, context, service, sessionManager) -> {
try {
WxMediaUploadResult uploadResult = service.getMediaService()
.uploadMedia("image", "png",
ClassLoader.getSystemResourceAsStream("tmp.png"));
service.getMsgService().sendKefuMsg(
WxMaKefuMessage
.newImageBuilder()
.mediaId(uploadResult.getMediaId())
.toUser(wxMessage.getFromUser())
.build());
} catch (WxErrorException e) {
e.printStackTrace();
}
};
private final WxMaMessageHandler qrcodeHandler = (wxMessage, context, service, sessionManager) -> {
try {
final File file = service.getQrcodeService().createQrcode("123", 430);
WxMediaUploadResult uploadResult = service.getMediaService().uploadMedia("image", file);
service.getMsgService().sendKefuMsg(
WxMaKefuMessage
.newImageBuilder()
.mediaId(uploadResult.getMediaId())
.toUser(wxMessage.getFromUser())
.build());
} catch (WxErrorException e) {
e.printStackTrace();
}
};
}

41
esua-epdc/epdc-commons/epdc-wx/src/main/java/com/elink/esua/epdc/wx/mp/config/WxMaProperties.java

@ -0,0 +1,41 @@
package com.elink.esua.epdc.wx.mp.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* 微信小程序框架配置类
*
* @author rongchao
* @Date 19-5-13
*/
@Data
@ConfigurationProperties(prefix = "wx.miniapp")
public class WxMaProperties {
/**
* 设置微信小程序的appid
*/
private String appid;
/**
* 设置微信小程序的Secret
*/
private String secret;
/**
* 设置微信小程序消息服务器配置的token
*/
private String token;
/**
* 设置微信小程序消息服务器配置的EncodingAESKey
*/
private String aesKey;
/**
* 消息格式XML或者JSON
*/
private String msgDataFormat;
}

34
esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/form/EpdcAppUserMaTokenFormDTO.java

@ -0,0 +1,34 @@
package com.elink.esua.epdc.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 用户登录获取token
*
* @author yujintao
* @email yujintao@elink-cn.com
* @date 2019/9/9 10:48
*/
@Data
public class EpdcAppUserMaTokenFormDTO implements Serializable {
private static final long serialVersionUID = -2336721768758390329L;
/**
* 微信code
*/
@NotBlank(message = "微信code不能为空")
private String wxCode;
/*@NotBlank(message = "用户信息不能为空")
private String encryptedData;
*//**
* 加密算法的初始向量
*//*
@NotBlank(message = "初始向量不能为空")
private String iv;*/
}

36
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiAdminController.java

@ -0,0 +1,36 @@
package com.elink.esua.epdc.controller;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.service.AdminService;
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;
/**
* 管理端对外接口
*
* @author yujintao
* @email yujintao@elink-cn.com
* @date 2019/9/11 9:25
*/
@RestController
@RequestMapping("admin")
public class ApiAdminController {
@Autowired
private AdminService adminService;
/**
* 获取完整机构名称市区/街道/社区/网格
*
* @param gridId
* @return com.elink.esua.epdc.commons.tools.utils.Result<java.lang.String>
* @author yujintao
* @date 2019/9/11 09:47
*/
@GetMapping("/dept/completeName")
public Result<String> getCompleteDeptName(Long gridId) {
return adminService.getCompleteDeptName(gridId);
}
}

43
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiAppUserController.java

@ -8,6 +8,7 @@ import com.elink.esua.epdc.dto.epdc.form.EpdcUserRegistFormDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcUserUpdateAvatarFromDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcUserUpdateMobileFromDTO;
import com.elink.esua.epdc.dto.epdc.result.EpdcUserInfoResultDTO;
import com.elink.esua.epdc.dto.form.EpdcAppUserMaTokenFormDTO;
import com.elink.esua.epdc.dto.form.EpdcAppUserTokenFormDTO;
import com.elink.esua.epdc.dto.result.EpdcAppAuthorizationDTO;
import com.elink.esua.epdc.service.AppUserService;
@ -36,24 +37,52 @@ public class ApiAppUserController {
* @author yujintao
* @date 2019/9/9 10:41
*/
@PostMapping("user/regist")
public Result userRegist(@RequestBody EpdcUserRegistFormDTO formDto) {
@PostMapping("user/mp/regist")
public Result mpUserRegist(@RequestBody EpdcUserRegistFormDTO formDto) {
ValidatorUtils.validateEntity(formDto);
return appUserService.userRegist(formDto);
return appUserService.mpUserRegist(formDto);
}
/**
* 用户登录获取token
* 小程序端用户注册
*
* @param formDto
* @return com.elink.esua.epdc.commons.tools.utils.Result
* @author yujintao
* @date 2019/9/9 10:41
*/
@PostMapping("user/ma/regist")
public Result maUserRegist(@RequestBody EpdcUserRegistFormDTO formDto) {
ValidatorUtils.validateEntity(formDto);
return appUserService.maUserRegist(formDto);
}
/**
* 公众号用户登录获取token
*
* @param formDto
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.result.EpdcAppAuthorizationDTO>
* @author yujintao
* @date 2019/9/9 10:52
*/
@GetMapping("user/getToken")
public Result<EpdcAppAuthorizationDTO> getToken(@RequestBody EpdcAppUserTokenFormDTO formDto) {
@GetMapping("user/mp/getToken")
public Result<EpdcAppAuthorizationDTO> getToken(EpdcAppUserTokenFormDTO formDto) {
ValidatorUtils.validateEntity(formDto);
return appUserService.getMpToken(formDto);
}
/**
* 小程序端登录获取token
*
* @param formDto
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.result.EpdcAppAuthorizationDTO>
* @author yujintao
* @date 2019/9/10 20:47
*/
@GetMapping("user/ma/getToken")
public Result<EpdcAppAuthorizationDTO> getMaToken(EpdcAppUserMaTokenFormDTO formDto) {
ValidatorUtils.validateEntity(formDto);
return appUserService.getToken(formDto);
return appUserService.getMaToken(formDto);
}
/***

2
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/IssueFeignClient.java

@ -25,7 +25,7 @@ import java.util.List;
* @Author LC
* @Date 2019/9/7 11:34
*/
@FeignClient(name = ServiceConstant.EPDC_EVENTS_SERVER, fallback = IssueFeignClientFallback.class, url = "http://127.0.0.1:9066")
@FeignClient(name = ServiceConstant.EPDC_EVENTS_SERVER, fallback = IssueFeignClientFallback.class)
public interface IssueFeignClient {
/**

1
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/NewsFeignClient.java

@ -1,6 +1,5 @@
package com.elink.esua.epdc.feign;
import com.elink.esua.epdc.common.token.dto.TokenDto;
import com.elink.esua.epdc.commons.tools.constant.ServiceConstant;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.dto.epdc.form.*;

23
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/AdminService.java

@ -0,0 +1,23 @@
package com.elink.esua.epdc.service;
import com.elink.esua.epdc.commons.tools.utils.Result;
/**
* 管理端相关接口
*
* @author yujintao
* @email yujintao@elink-cn.com
* @date 2019/9/11 9:40
*/
public interface AdminService {
/**
* 获取完整机构名称市区/街道/社区/网格
*
* @param gridId
* @return com.elink.esua.epdc.commons.tools.utils.Result<java.lang.String>
* @author yujintao
* @date 2019/9/11 09:46
*/
Result<String> getCompleteDeptName(Long gridId);
}

52
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/AppUserService.java

@ -6,6 +6,7 @@ import com.elink.esua.epdc.dto.epdc.form.EpdcUserRegistFormDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcUserUpdateAvatarFromDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcUserUpdateMobileFromDTO;
import com.elink.esua.epdc.dto.epdc.result.EpdcUserInfoResultDTO;
import com.elink.esua.epdc.dto.form.EpdcAppUserMaTokenFormDTO;
import com.elink.esua.epdc.dto.form.EpdcAppUserTokenFormDTO;
import com.elink.esua.epdc.dto.result.EpdcAppAuthorizationDTO;
@ -24,17 +25,17 @@ public interface AppUserService {
* @author yujintao
* @date 2019/9/7 09:54
*/
Result userRegist(EpdcUserRegistFormDTO formDto);
Result mpUserRegist(EpdcUserRegistFormDTO formDto);
/**
* 用户登录获取token
* 公众号用户登录获取token
*
* @param formDto
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.result.EpdcAppAuthorizationDTO>
* @author yujintao
* @date 2019/9/9 10:52
*/
Result<EpdcAppAuthorizationDTO> getToken(EpdcAppUserTokenFormDTO formDto);
Result<EpdcAppAuthorizationDTO> getMpToken(EpdcAppUserTokenFormDTO formDto);
/***
@ -49,23 +50,44 @@ public interface AppUserService {
Result<EpdcUserInfoResultDTO> getInfoById(TokenDto userDetail);
/***
* @Description 修改头像
* @Author qushutong
* @Date 2019/9/9 17:52
* @Param [userDetail, fromDTO]
* @Return com.elink.esua.epdc.commons.tools.utils.Result
* @Description 修改头像
* @Author qushutong
* @Date 2019/9/9 17:52
* @Param [userDetail, fromDTO]
* @Return com.elink.esua.epdc.commons.tools.utils.Result
* @Exception
*
*/
Result updateAvatar( TokenDto userDetail, EpdcUserUpdateAvatarFromDTO fromDTO);
Result updateAvatar(TokenDto userDetail, EpdcUserUpdateAvatarFromDTO fromDTO);
/***
* @Description 修改手机号
* @Author qushutong
* @Date 2019/9/9 17:52
* @Param [userDetail, fromDTO]
* @Return com.elink.esua.epdc.commons.tools.utils.Result
* @Description 修改手机号
* @Author qushutong
* @Date 2019/9/9 17:52
* @Param [userDetail, fromDTO]
* @Return com.elink.esua.epdc.commons.tools.utils.Result
* @Exception
*
*/
Result updateMobile( TokenDto userDetail, EpdcUserUpdateMobileFromDTO fromDTO);
Result updateMobile(TokenDto userDetail, EpdcUserUpdateMobileFromDTO fromDTO);
/**
* 小程序登录
*
* @param formDto
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.result.EpdcAppAuthorizationDTO>
* @author yujintao
* @date 2019/9/10 20:34
*/
Result<EpdcAppAuthorizationDTO> getMaToken(EpdcAppUserMaTokenFormDTO formDto);
/**
* 小程序端用户注册
*
* @param formDto
* @return com.elink.esua.epdc.commons.tools.utils.Result
* @author yujintao
* @date 2019/9/10 20:48
*/
Result maUserRegist(EpdcUserRegistFormDTO formDto);
}

36
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AdminServiceImpl.java

@ -0,0 +1,36 @@
package com.elink.esua.epdc.service.impl;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.dto.CompleteDeptDTO;
import com.elink.esua.epdc.feign.AdminFeignClient;
import com.elink.esua.epdc.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author yujintao
* @email yujintao@elink-cn.com
* @date 2019/9/11 9:40
*/
@Service
public class AdminServiceImpl implements AdminService {
@Autowired
private AdminFeignClient adminFeignClient;
@Override
public Result<String> getCompleteDeptName(Long gridId) {
Result<CompleteDeptDTO> adminResult = adminFeignClient.getCompleteDept(gridId);
CompleteDeptDTO completeDept = adminResult.getData();
if (!adminResult.success() || null == completeDept || null == completeDept.getGridId()) {
return new Result().error(adminResult.getMsg());
}
String deptName = completeDept.getDistrict().concat("/")
.concat(completeDept.getStreet()).concat("/")
.concat(completeDept.getCommunity()).concat("/")
.concat(completeDept.getGrid());
return new Result().error(deptName);
}
}

198
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AppUserServiceImpl.java

@ -1,5 +1,7 @@
package com.elink.esua.epdc.service.impl;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import com.elink.esua.epdc.common.token.dto.TokenDto;
import com.elink.esua.epdc.common.token.util.CpUserDetailRedis;
import com.elink.esua.epdc.common.token.util.TokenUtil;
@ -13,6 +15,7 @@ import com.elink.esua.epdc.dto.epdc.form.EpdcUserRegistFormDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcUserUpdateAvatarFromDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcUserUpdateMobileFromDTO;
import com.elink.esua.epdc.dto.epdc.result.EpdcUserInfoResultDTO;
import com.elink.esua.epdc.dto.form.EpdcAppUserMaTokenFormDTO;
import com.elink.esua.epdc.dto.form.EpdcAppUserTokenFormDTO;
import com.elink.esua.epdc.dto.result.EpdcAppAuthorizationDTO;
import com.elink.esua.epdc.enums.AppUserAuditStateEnum;
@ -56,6 +59,9 @@ public class AppUserServiceImpl implements AppUserService {
@Autowired
private WxMpService wxMpService;
@Autowired
private WxMaService wxMaService;
@Autowired
private AdminFeignClient adminFeignClient;
@ -73,17 +79,19 @@ public class AppUserServiceImpl implements AppUserService {
@Override
public Result<EpdcAppAuthorizationDTO> getToken(EpdcAppUserTokenFormDTO formDto) {
public Result<EpdcAppAuthorizationDTO> getMpToken(EpdcAppUserTokenFormDTO formDto) {
return this.getTokenByOpenId(this.getMpOpenId(formDto.getWxCode()));
}
@Override
public Result<EpdcAppAuthorizationDTO> getMaToken(EpdcAppUserMaTokenFormDTO formDto) {
return this.getTokenByOpenId(this.getMaOpenId(formDto.getWxCode()));
}
private Result<EpdcAppAuthorizationDTO> getTokenByOpenId(String openId) {
WxMpOAuth2AccessToken wxMpOAuth2AccessToken;
try {
wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(formDto.getWxCode());
} catch (WxErrorException e) {
log.error("->[getToken]::error[{}]", "解析微信code失败");
return new Result().error("解析微信code失败");
}
// 查询当前微信是否已注册用户
Result<UserDTO> userInfoResult = userFeignClient.getUserInfoByOpenId(wxMpOAuth2AccessToken.getOpenId());
Result<UserDTO> userInfoResult = userFeignClient.getUserInfoByOpenId(openId);
if (!userInfoResult.success()) {
return new Result().error("查询用户信息失败");
}
@ -130,96 +138,107 @@ public class AppUserServiceImpl implements AppUserService {
authorization.setUserState(AppUserStateEnum.AUDIT_FAILURE.value());
}
return new Result().ok(authorization);
}
@Override
public Result<EpdcUserInfoResultDTO> getInfoById(TokenDto userDetail) {
return userFeignClient.getInfoById(userDetail.getUserId());
}
@Override
public Result updateAvatar(TokenDto userDetail, EpdcUserUpdateAvatarFromDTO fromDTO) {
UserDTO userDto = new UserDTO();
userDto.setId(userDetail.getUserId());
userDto.setFaceImg(fromDTO.getAvatar());
return userFeignClient.updateMobileOrAvatar(userDto);
}
public Result maUserRegist(EpdcUserRegistFormDTO formDto) {
@Override
public Result updateMobile(TokenDto userDetail, EpdcUserUpdateMobileFromDTO fromDTO) {
// 校验手机验证码
String mobile = fromDTO.getMobile();
String smsCode = appUserRedis.getSmsCode(mobile);
if (StringUtils.isBlank(smsCode) || !smsCode.equals(fromDTO.getSmsCode())) {
return new Result().error("手机验证码错误");
}
UserDTO userDto = new UserDTO();
userDto.setId(userDetail.getUserId());
PhoneDto phoneDto = PhoneUtil.getPhoneDto(mobile);
if (phoneDto != null) {
userDto.setMobile(mobile);
userDto.setMobileCarrier(phoneDto.getCarrier());
userDto.setMobileCity(phoneDto.getCityName());
userDto.setMobileProvince(phoneDto.getProvinceName());
}
return userFeignClient.updateMobileOrAvatar(userDto);
this.checkSmsCode(formDto.getMobile(), formDto.getSmsCode());
String openId = this.getMaOpenId(formDto.getWxCode());
UserDTO userDto = this.packageUserDto(formDto, null, openId);
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
userDto.setLastLoginIp(IpUtils.getIpAddr(request));
return userFeignClient.userRegist(userDto);
}
@Override
public Result userRegist(EpdcUserRegistFormDTO formDto) {
@Override
public Result mpUserRegist(EpdcUserRegistFormDTO formDto) {
// 校验手机验证码
String mobile = formDto.getMobile();
String smsCode = appUserRedis.getSmsCode(mobile);
if (StringUtils.isBlank(smsCode) || !smsCode.equals(formDto.getSmsCode())) {
return new Result().error("手机验证码错误");
}
this.checkSmsCode(formDto.getMobile(), formDto.getSmsCode());
// 解析微信用户信息
WxMpUser wxMpUser = this.getWxMpUser(formDto.getWxCode());
UserDTO userDto = this.packageUserDto(formDto, wxMpUser, wxMpUser.getOpenId());
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
userDto.setLastLoginIp(IpUtils.getIpAddr(request));
return userFeignClient.userRegist(userDto);
}
/**
* 校验手机验证码
*
* @param mobile 手机号
* @param smsCode 用户输入的验证码
* @return void
* @author yujintao
* @date 2019/9/11 09:20
*/
private void checkSmsCode(String mobile, String smsCode) {
String redisSmsCode = appUserRedis.getSmsCode(mobile);
if (StringUtils.isBlank(redisSmsCode) || !redisSmsCode.equals(smsCode)) {
throw new RenException("手机验证码错误");
}
}
/**
* 组装用户对象
*
* @param formDto 前端提交的注册数据
* @param wxMpUser 公众号用户对象小程序端注册的时候传人null
* @param openId 微信openId
* @return com.elink.esua.epdc.dto.UserDTO
* @author yujintao
* @date 2019/9/10 21:09
*/
private UserDTO packageUserDto(EpdcUserRegistFormDTO formDto, WxMpUser wxMpUser, String openId) {
// 查询当前微信是否已注册用户
Result<UserDTO> userInfoResult = userFeignClient.getUserInfoByOpenId(wxMpUser.getOpenId());
Result<UserDTO> userInfoResult = userFeignClient.getUserInfoByOpenId(openId);
if (!userInfoResult.success()) {
return new Result().error("查询用户信息失败");
throw new RenException("查询用户信息失败");
}
UserDTO userDto = userInfoResult.getData();
if (null != userDto) {
if (AppUserAuditStateEnum.UNDER_AUDIT.value().equals(userDto.getState())) {
return new Result().error("用户尚在审核中,请耐心等待");
throw new RenException("用户尚在审核中,请耐心等待");
}
return new Result().error("此微信号已注册用户,请前往登录");
throw new RenException("此微信号已注册用户,请前往登录");
}
// 获取网格机构详情
String gridId = formDto.getGridId();
Result<CompleteDeptDTO> adminDeptResult = adminFeignClient.getCompleteDept(Long.parseLong(gridId));
if (!adminDeptResult.success() || null == adminDeptResult.getData()) {
return new Result().error("查询网格信息失败");
throw new RenException("查询网格信息失败");
}
CompleteDeptDTO completeDept = adminDeptResult.getData();
userDto = this.packUserDto(formDto, wxMpUser, completeDept);
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
userDto.setLastLoginIp(IpUtils.getIpAddr(request));
return userFeignClient.userRegist(userDto);
return this.packageUserDto(formDto, wxMpUser, openId, completeDept);
}
/**
* 组装用户对象
*
* @param formDto 前端表单提交
* @param wxMpUser 用户微信信息
* @param wxMpUser 微信公众号用户信息
* @param openId 微信openId
* @param completeDept 用户机构信息
* @return com.elink.esua.epdc.dto.UserDTO
* @author yujintao
* @date 2019/9/7 14:13
*/
private UserDTO packUserDto(EpdcUserRegistFormDTO formDto, WxMpUser wxMpUser, CompleteDeptDTO completeDept) {
private UserDTO packageUserDto(EpdcUserRegistFormDTO formDto, WxMpUser wxMpUser, String openId, CompleteDeptDTO completeDept) {
UserDTO user = ConvertUtils.sourceToTarget(formDto, UserDTO.class);
user.setWxOpenId(openId);
if (null != wxMpUser) {
user.setFaceImg(wxMpUser.getHeadImgUrl());
}
PhoneDto phoneDto = PhoneUtil.getPhoneDto(formDto.getMobile());
if (phoneDto != null) {
user.setMobileProvince(phoneDto.getProvinceName());
@ -249,9 +268,6 @@ public class AppUserServiceImpl implements AppUserService {
.concat(StringUtils.isNotBlank(formDto.getHouseCode()) ? formDto.getHouseCode() : "");
user.setAddress(address);
user.setWxOpenId(wxMpUser.getOpenId());
user.setFaceImg(wxMpUser.getHeadImgUrl());
user.setRegisterTime(new Date());
user.setState(AppUserAuditStateEnum.UNDER_AUDIT.value());
user.setPartyFlag(YesOrNoEnum.NO.value());
@ -260,6 +276,33 @@ public class AppUserServiceImpl implements AppUserService {
return user;
}
private String getMaOpenId(String wxCode) {
WxMaJscode2SessionResult wxMaJscode2SessionResult = null;
try {
wxMaJscode2SessionResult = wxMaService.jsCode2SessionInfo(wxCode);
} catch (WxErrorException e) {
log.error("->[getMaOpenId]::error[{}]", "解析微信code失败");
}
if (null == wxMaJscode2SessionResult || StringUtils.isBlank(wxMaJscode2SessionResult.getOpenid())) {
throw new RenException("解析微信code失败");
}
return wxMaJscode2SessionResult.getOpenid();
}
private String getMpOpenId(String wxCode) {
WxMpOAuth2AccessToken wxMpOAuth2AccessToken = null;
try {
wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(wxCode);
} catch (WxErrorException e) {
log.error("->[getMpOpenId]::error[{}]", "解析微信code失败");
}
if (null == wxMpOAuth2AccessToken || StringUtils.isBlank(wxMpOAuth2AccessToken.getOpenId())) {
throw new RenException("解析微信code失败");
}
return wxMpOAuth2AccessToken.getOpenId();
}
/**
* 解析微信code获取微信用户信息
*
@ -274,11 +317,44 @@ public class AppUserServiceImpl implements AppUserService {
WxMpOAuth2AccessToken wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(wxCode);
wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken, null);
} catch (WxErrorException e) {
throw new RenException("解析微信code失败");
log.error("->[getWxMpUser]::error[{}]", "解析微信用户信息失败");
}
if (null == wxMpUser || StringUtils.isBlank(wxMpUser.getOpenId())) {
throw new RenException("解析微信用户信息失败");
}
return wxMpUser;
}
@Override
public Result<EpdcUserInfoResultDTO> getInfoById(TokenDto userDetail) {
return userFeignClient.getInfoById(userDetail.getUserId());
}
@Override
public Result updateAvatar(TokenDto userDetail, EpdcUserUpdateAvatarFromDTO fromDTO) {
UserDTO userDto = new UserDTO();
userDto.setId(userDetail.getUserId());
userDto.setFaceImg(fromDTO.getAvatar());
return userFeignClient.updateMobileOrAvatar(userDto);
}
@Override
public Result updateMobile(TokenDto userDetail, EpdcUserUpdateMobileFromDTO fromDto) {
// 校验手机验证码
String mobile = fromDto.getMobile();
this.checkSmsCode(mobile, fromDto.getSmsCode());
UserDTO userDto = new UserDTO();
userDto.setId(userDetail.getUserId());
userDto.setMobile(mobile);
PhoneDto phoneDto = PhoneUtil.getPhoneDto(mobile);
if (phoneDto != null) {
userDto.setMobileCarrier(phoneDto.getCarrier());
userDto.setMobileCity(phoneDto.getCityName());
userDto.setMobileProvince(phoneDto.getProvinceName());
}
return userFeignClient.updateMobileOrAvatar(userDto);
}
}

15
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/resources/application.yml

@ -93,12 +93,19 @@ wx:
secret: @wx.mp.configs.secret@
token: @wx.mp.configs.token@
aesKey: @wx.mp.configs.aesKey@
miniapp:
appid: wx2b862c59497ae1d6
secret: 5410f00cdb6eb03d2bf5077a328a8047
token: #微信小程序消息服务器配置的token
aesKey: #微信小程序消息服务器配置的EncodingAESKey
msgDataFormat: JSON
token:
expire: 21600
jwt:
#秘钥
secret: 7016867071f0ebf1c46f123eaaf4b9d6[elink.epdc]
#token有效时长,默认7天,单位秒
expire: 604800
token:
#秘钥
secret: 7016867071f0ebf1c46f123eaaf4b9d6[elink.epdc]
#token有效时长,默认7天,单位秒
expire: 604800

52
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/test/java/com/elink/esua/epdc/UserTest.java

@ -0,0 +1,52 @@
package com.elink.esua.epdc;
import com.elink.esua.epdc.common.token.dto.TokenDto;
import com.elink.esua.epdc.common.token.util.CpUserDetailRedis;
import com.elink.esua.epdc.commons.tools.enums.YesOrNoEnum;
import com.elink.esua.epdc.commons.tools.utils.ConvertUtils;
import com.elink.esua.epdc.jwt.JwtTokenProperties;
import com.elink.esua.epdc.jwt.JwtTokenUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
*
* @author yujintao
* @email yujintao@elink-cn.com
* @date 2019/9/11 9:27
*/
@SpringBootTest
@RunWith(SpringRunner.class)
public class UserTest {
@Autowired
private JwtTokenUtils jwtTokenUtils;
@Autowired
private JwtTokenProperties jwtTokenProperties;
@Autowired
private CpUserDetailRedis cpUserDetailRedis;
@Test
public void test(){
TokenDto tokenDto = new TokenDto();
tokenDto.setUserId("userId:ttteeesssttt");
tokenDto.setFaceImg("http://b-ssl.duitang.com/uploads/item/201707/19/20170719211350_4PnBt.jpeg");
tokenDto.setGridId(1169158285790900226L);
tokenDto.setMobile("15555555555");
tokenDto.setNickname("测试用户");
tokenDto.setPartyFlag(YesOrNoEnum.YES.value());
tokenDto.setRealName("无名氏");
String token = jwtTokenUtils.generateToken(tokenDto.getUserId());
Long expire = (long) jwtTokenProperties.getExpire();
cpUserDetailRedis.set(tokenDto, expire);
System.out.println(token);
}
}
Loading…
Cancel
Save