Browse Source

公众号服务部分接口首次提交

master
sunyuchao 5 years ago
parent
commit
ff42246de7
  1. 6
      epmet-auth/pom.xml
  2. 30
      epmet-auth/src/main/java/com/epmet/constant/PublicUserLoginConstant.java
  3. 50
      epmet-auth/src/main/java/com/epmet/controller/PublicUserLoginController.java
  4. 38
      epmet-auth/src/main/java/com/epmet/dto/form/LoginByPhoneFormDTO.java
  5. 28
      epmet-auth/src/main/java/com/epmet/dto/form/PublicSendSmsCodeFormDTO.java
  6. 25
      epmet-auth/src/main/java/com/epmet/redis/CaptchaRedis.java
  7. 32
      epmet-auth/src/main/java/com/epmet/service/PublicUserLoginService.java
  8. 193
      epmet-auth/src/main/java/com/epmet/service/impl/PublicUserLoginServiceImpl.java
  9. 10
      epmet-commons/epmet-common-clienttoken/src/main/java/com/epmet/common/token/constant/LoginConstant.java
  10. 6
      epmet-module/epmet-third/epmet-third-client/pom.xml
  11. 7
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/CustomerMpDTO.java
  12. 4
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/PaUserDTO.java
  13. 4
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/PaUserVisitedDTO.java
  14. 14
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/PaUserWechatDTO.java
  15. 56
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/CreateAgencyFormDTO.java
  16. 54
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/RegisterFormDTO.java
  17. 34
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/SaveUserVisitedFormDTO.java
  18. 23
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/CreateAgencyResultDTO.java
  19. 25
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/CustomerUserResultDTO.java
  20. 21
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/SaveUserResultDTO.java
  21. 36
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdFeignClient.java
  22. 22
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdFeignClientFallback.java
  23. 6
      epmet-module/epmet-third/epmet-third-server/pom.xml
  24. 19
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/constant/PaConstant.java
  25. 63
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PaCustomerController.java
  26. 37
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PaUserController.java
  27. 15
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PaUserVisitedController.java
  28. 13
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaCustomerDao.java
  29. 13
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaUserDao.java
  30. 19
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaUserWechatDao.java
  31. 7
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/CustomerMpEntity.java
  32. 10
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/PaUserWechatEntity.java
  33. 5
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/excel/CustomerMpExcel.java
  34. 6
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/excel/PaUserWechatExcel.java
  35. 29
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaCustomerService.java
  36. 19
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserService.java
  37. 9
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserVisitedService.java
  38. 8
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserWechatService.java
  39. 109
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaCustomerServiceImpl.java
  40. 89
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserServiceImpl.java
  41. 39
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserVisitedServiceImpl.java
  42. 11
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserWechatServiceImpl.java
  43. 12
      epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PaCustomerDao.xml
  44. 12
      epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PaUserDao.xml
  45. 43
      epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PaUserWechatDao.xml

6
epmet-auth/pom.xml

@ -116,6 +116,12 @@
<version>3.6.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-third-client</artifactId>
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>

30
epmet-auth/src/main/java/com/epmet/constant/PublicUserLoginConstant.java

@ -0,0 +1,30 @@
package com.epmet.constant;
/**
* @author sun
* @dscription
*/
public interface PublicUserLoginConstant {
/**
* 初始化用户信息失败
*/
String SAVE_USER_EXCEPTION = "初始化用户信息失败";
/**
* 是否登陆true false
*/
String PARAMETER_EXCEPTION = "是否登陆值错误";
/**
* 登陆验证
*/
String LOGON_EXCEPTION = "该手机号未注册";
/**
* 注册验证
*/
String ZHU_CE_EXCEPTION = "该手机号已注册";
/**
* 用户登陆 新增访问记录
*/
String SAVE_VISITED_EXCEPTION = "用户登陆,新增访问记录失败";
}

50
epmet-auth/src/main/java/com/epmet/controller/PublicUserLoginController.java

@ -1,8 +1,15 @@
package com.epmet.controller;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.constant.PublicUserLoginConstant;
import com.epmet.dto.form.LoginByPhoneFormDTO;
import com.epmet.dto.form.PaWxCodeFormDTO;
import com.epmet.dto.form.PublicSendSmsCodeFormDTO;
import com.epmet.dto.result.UserTokenResultDTO;
import com.epmet.service.PublicUserLoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@ -10,8 +17,6 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
/**
* 描述一下
*
@ -28,15 +33,42 @@ public class PublicUserLoginController {
/**
* @return com.epmet.commons.tools.utils.Result
* @param formDTO
* @author yinzuomei
* @description 测试是否能正常解析wxcode
* @Date 2020/7/9 17:00
* @author sun
* @description 解析wxcode获取用户信息并生成token
**/
@PostMapping(value = "/testwxcode")
public Result loginByWxCode(@RequestBody PaWxCodeFormDTO formDTO) {
@PostMapping(value = "/wxcodetotoken")
public Result<UserTokenResultDTO> wxCodeToToken(@RequestBody PaWxCodeFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, PaWxCodeFormDTO.AddUserInternalGroup.class);
Map map = publicUserLoginService.loginByWxCode(formDTO);
return new Result().ok(map);
return new Result<UserTokenResultDTO>().ok(publicUserLoginService.wxCodeToToken(formDTO));
}
/**
* @param formDTO 手机号
* @return com.epmet.commons.tools.utils.Result
* @Author sun
* @Description 公众号登录-发送验证码
**/
@PostMapping(value = "/sendsmscode")
public Result sendSmsCode(@RequestBody PublicSendSmsCodeFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO,PublicSendSmsCodeFormDTO.AddUserShowGroup.class);
if(formDTO.getIsLogon()!=true&&formDTO.getIsLogon()!=false){
throw new RenException(PublicUserLoginConstant.PARAMETER_EXCEPTION);
}
publicUserLoginService.sendSmsCode(formDTO);
return new Result();
}
/**
* @param formDTO
* @return com.epmet.commons.tools.utils.Result
* @Author sun
* @Description 公众号-手机验证码登陆
**/
@PostMapping(value = "/loginbyphone")
public Result<UserTokenResultDTO> loginByPhone(@LoginUser TokenDto tokenDTO, @RequestBody LoginByPhoneFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, LoginByPhoneFormDTO.AddUserShowGroup.class, LoginByPhoneFormDTO.LoginByPhone.class);
return new Result<UserTokenResultDTO>().ok(publicUserLoginService.loginByPhone(tokenDTO, formDTO));
}
}

38
epmet-auth/src/main/java/com/epmet/dto/form/LoginByPhoneFormDTO.java

@ -0,0 +1,38 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Description 手机验证码登陆接口入参
* @Author sun
*/
@Data
public class LoginByPhoneFormDTO implements Serializable {
private static final long serialVersionUID = 4193133227120225342L;
/**
* 添加用户操作的用户可见异常分组
* 该分组用于校验需要返回给前端错误信息提示的列需要继承CustomerClientShowGroup
* 返回错误码为8999提示信息为DTO中具体的列的校验注解message的内容
*/
public interface AddUserShowGroup extends CustomerClientShowGroup {
}
public interface LoginByPhone extends CustomerClientShowGroup{}
/**
* 手机号
*/
@NotBlank(message = "手机号不能为空", groups = {AddUserShowGroup.class})
private String phone;
/**
* 验证码
*/
@NotBlank(message="验证码不能为空", groups = {LoginByPhone.class})
private String smsCode;
}

28
epmet-auth/src/main/java/com/epmet/dto/form/PublicSendSmsCodeFormDTO.java

@ -0,0 +1,28 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Description 公众号手机号+验证码登录接口入参
* @Author sun
*/
@Data
public class PublicSendSmsCodeFormDTO implements Serializable {
private static final long serialVersionUID = -1852541457359282018L;
/**
* 添加用户操作的用户可见异常分组
* 该分组用于校验需要返回给前端错误信息提示的列需要继承CustomerClientShowGroup
* 返回错误码为8999提示信息为DTO中具体的列的校验注解message的内容
*/
public interface AddUserShowGroup extends CustomerClientShowGroup {
}
@NotBlank(message = "手机号不能为空", groups = {AddUserShowGroup.class})
private String phone;
@NotBlank(message = "是否登陆不能为空", groups = {AddUserShowGroup.class})
private Boolean isLogon;
}

25
epmet-auth/src/main/java/com/epmet/redis/CaptchaRedis.java

@ -11,6 +11,7 @@ package com.epmet.redis;
import com.epmet.common.token.constant.LoginConstant;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.dto.form.PublicSendSmsCodeFormDTO;
import com.epmet.dto.form.SendSmsCodeFormDTO;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ -82,4 +83,28 @@ public class CaptchaRedis {
String smsCode = (String) redisUtils.get(smsCodeKey);
return smsCode;
}
/**
* @param sendSmsCodeFormDTO appclientphone
* @param smsCode 验证码
* @return void
* @Author sun
* @Description 公众号-短信验证码存入redis
**/
public void savePublicSmsCode(PublicSendSmsCodeFormDTO sendSmsCodeFormDTO, String smsCode) {
String smsCodeKey = RedisKeys.getLoginSmsCodeKey(LoginConstant.APP_PUBLIC, LoginConstant.CLIENT_MP, sendSmsCodeFormDTO.getPhone());
logger.info(String.format("短信验证码key=%s", smsCodeKey));
redisUtils.set(smsCodeKey, smsCode, MINUTE_THIRTY_EXPIRE);
}
/**
* @param phone
* @return java.lang.String
* @Author sun
* @Description 公众号-获取登录时发送的验证码
**/
public String getPublicSmsCode(String phone) {
String smsCodeKey = RedisKeys.getLoginSmsCodeKey(LoginConstant.APP_PUBLIC, LoginConstant.CLIENT_MP, phone);
String smsCode = (String) redisUtils.get(smsCodeKey);
return smsCode;
}
}

32
epmet-auth/src/main/java/com/epmet/service/PublicUserLoginService.java

@ -1,8 +1,10 @@
package com.epmet.service;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.dto.form.LoginByPhoneFormDTO;
import com.epmet.dto.form.PaWxCodeFormDTO;
import java.util.Map;
import com.epmet.dto.form.PublicSendSmsCodeFormDTO;
import com.epmet.dto.result.UserTokenResultDTO;
/**
* 描述一下
@ -11,5 +13,29 @@ import java.util.Map;
* @date 2020/7/8 18:31
*/
public interface PublicUserLoginService {
Map loginByWxCode(PaWxCodeFormDTO formDTO);
/**
* @return
* @param formDTO
* @author sun
* @description 解析wxcode获取用户信息并生成token
**/
UserTokenResultDTO wxCodeToToken(PaWxCodeFormDTO formDTO);
/**
* @param formDTO 手机号
* @return com.epmet.commons.tools.utils.Result
* @Author sun
* @Description 公众号登录-发送验证码
**/
void sendSmsCode(PublicSendSmsCodeFormDTO formDTO);
/**
* @param formDTO
* @return com.epmet.commons.tools.utils.Result
* @Author sun
* @Description 公众号-手机验证码登陆
**/
UserTokenResultDTO loginByPhone(TokenDto tokenDTO, LoginByPhoneFormDTO formDTO);
}

193
epmet-auth/src/main/java/com/epmet/service/impl/PublicUserLoginServiceImpl.java

@ -1,7 +1,27 @@
package com.epmet.service.impl;
import com.epmet.common.token.constant.LoginConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.dto.form.PaWxCodeFormDTO;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.CpUserDetailRedis;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.PhoneValidatorUtils;
import com.epmet.constant.PublicUserLoginConstant;
import com.epmet.constant.SmsTemplateConstant;
import com.epmet.dto.PaCustomerDTO;
import com.epmet.dto.PaUserDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.CustomerUserResultDTO;
import com.epmet.dto.result.SaveUserResultDTO;
import com.epmet.dto.result.SendVerificationCodeResultDTO;
import com.epmet.dto.result.UserTokenResultDTO;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.feign.EpmetThirdFeignClient;
import com.epmet.jwt.JwtTokenProperties;
import com.epmet.jwt.JwtTokenUtils;
import com.epmet.redis.CaptchaRedis;
import com.epmet.service.PublicUserLoginService;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
@ -25,16 +45,42 @@ import java.util.Map;
@Service
public class PublicUserLoginServiceImpl implements PublicUserLoginService {
private static final Logger logger = LoggerFactory.getLogger(PublicUserLoginServiceImpl.class);
private static final String SEND_SMS_CODE_ERROR = "发送短信验证码异常,手机号[%s],code[%s],msg[%s]";
@Autowired
private WxMpService wxMpService;
@Autowired
private EpmetThirdFeignClient epmetThirdFeignClient;
@Autowired
private JwtTokenUtils jwtTokenUtils;
@Autowired
private JwtTokenProperties jwtTokenProperties;
@Autowired
private CpUserDetailRedis cpUserDetailRedis;
@Autowired
private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient;
@Autowired
private CaptchaRedis captchaRedis;
@Override
public Map loginByWxCode(PaWxCodeFormDTO formDTO) {
WxMpUser wxMpUser=this.getWxMpUser(formDTO.getWxCode());
Map map =new HashMap();
map.put("微信用户信息",wxMpUser);
return map;
public UserTokenResultDTO wxCodeToToken(PaWxCodeFormDTO formDTO) {
//1.通过微信code获取用户基本信息
WxMpUser wxMpUser = this.getWxMpUser(formDTO.getWxCode());
//2.将获取的用户基本信息初始化到数据库
Result<SaveUserResultDTO> result = epmetThirdFeignClient.saveUser(wxMpUser);
if (!result.success()) {
throw new RenException(PublicUserLoginConstant.SAVE_USER_EXCEPTION);
}
SaveUserResultDTO resultDTO = result.getData();
//3.获取用户token
String token = this.generateGovWxmpToken(resultDTO.getUserId());
//4.保存到redis
this.saveLatestGovTokenDto(resultDTO, wxMpUser, token);
UserTokenResultDTO userTokenResultDTO = new UserTokenResultDTO();
userTokenResultDTO.setToken(token);
return userTokenResultDTO;
}
private WxMpUser getWxMpUser(String wxCode) {
@ -43,13 +89,144 @@ public class PublicUserLoginServiceImpl implements PublicUserLoginService {
WxMpOAuth2AccessToken wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(wxCode);
wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken, null);
} catch (WxErrorException e) {
logger.error("->[getWxMpUser]::error[{}]", "解析微信用户信息失败",e.getMessage());
logger.error("->[getWxMpUser]::error[{}]", "解析微信用户信息失败", e.getMessage());
e.printStackTrace();
throw new RenException("解析微信用户信息失败"+e.getMessage());
throw new RenException("解析微信用户信息失败" + e.getMessage());
}
if (null == wxMpUser || StringUtils.isBlank(wxMpUser.getUnionId())) {
throw new RenException("解析微信用户信息失败");
}
return wxMpUser;
}
/**
* @Description 生成token
**/
private String generateGovWxmpToken(String userId) {
Map<String, Object> map = new HashMap<>();
map.put("app", LoginConstant.APP_PUBLIC);
map.put("client", LoginConstant.CLIENT_MP);
map.put("userId", userId);
String token = jwtTokenUtils.createToken(map);
logger.info("app:" + LoginConstant.APP_PUBLIC + ";client:" + LoginConstant.CLIENT_MP + ";userId:" + userId + ";生成token[" + token + "]");
return token;
}
//保存tokenDto到redis
private void saveLatestGovTokenDto(SaveUserResultDTO resultDTO, WxMpUser wxMpUser, String token) {
TokenDto tokenDTO = new TokenDto();
int expire = jwtTokenProperties.getExpire();
tokenDTO.setOpenId(wxMpUser.getOpenId());
tokenDTO.setUnionId(wxMpUser.getUnionId());
tokenDTO.setToken(token);
//首次初始化时还没有客户
tokenDTO.setCustomerId("");
tokenDTO.setUserId(resultDTO.getUserId());
tokenDTO.setExpireTime(jwtTokenUtils.getExpiration(token).getTime());
tokenDTO.setUpdateTime(System.currentTimeMillis());
cpUserDetailRedis.set(tokenDTO, expire);
logger.info("截止时间:" + DateUtils.format(jwtTokenUtils.getExpiration(token), "yyyy-MM-dd HH:mm:ss"));
}
/**
* @param formDTO 手机号
* @return com.epmet.commons.tools.utils.Result
* @Author sun
* @Description 公众号登录-发送验证码
**/
@Override
public void sendSmsCode(PublicSendSmsCodeFormDTO formDTO) {
//1、校验手机号是否符合规范
if (!PhoneValidatorUtils.isMobile(formDTO.getPhone())) {
logger.error(String.format(SEND_SMS_CODE_ERROR, formDTO.getPhone(), EpmetErrorCode.ERROR_PHONE.getCode(), EpmetErrorCode.ERROR_PHONE.getMsg()));
throw new RenException(EpmetErrorCode.ERROR_PHONE.getCode());
}
//2、根据手机号校验用户是否存在
Result<CustomerUserResultDTO> Result = epmetThirdFeignClient.checkPaUser(formDTO.getPhone());
if (!Result.success()) {
logger.error(String.format(SEND_SMS_CODE_ERROR, formDTO.getPhone(), Result.getCode(), Result.getMsg()));
throw new RenException(Result.getCode());
}
CustomerUserResultDTO ResultDTO = Result.getData();
//登陆
if (formDTO.getIsLogon() && null == ResultDTO.getPaUserResult()) {
throw new RenException(PublicUserLoginConstant.LOGON_EXCEPTION);
}
//注册
if (!formDTO.getIsLogon() && null != ResultDTO.getPaUserResult()) {
throw new RenException(PublicUserLoginConstant.ZHU_CE_EXCEPTION);
}
//3、发送短信验证码
SendVerificationCodeFormDTO sendVerificationCodeFormDTO = new SendVerificationCodeFormDTO();
sendVerificationCodeFormDTO.setMobile(formDTO.getPhone());
//登陆或注册对应的短息模板
sendVerificationCodeFormDTO.setAliyunTemplateCode(formDTO.getIsLogon() ? SmsTemplateConstant.LGOIN_CONFIRM : SmsTemplateConstant.USER_REGISTER);
Result<SendVerificationCodeResultDTO> smsCodeResult = epmetMessageOpenFeignClient.sendVerificationCode(sendVerificationCodeFormDTO);
if (!smsCodeResult.success()) {
logger.error(String.format(SEND_SMS_CODE_ERROR, formDTO.getPhone(), smsCodeResult.getCode(), smsCodeResult.getMsg()));
throw new RenException(smsCodeResult.getCode());
}
//4、保存短信验证码(删除现有短信验证码、将新的短信验证码存入Redis)
captchaRedis.savePublicSmsCode(formDTO, smsCodeResult.getData().getCode());
logger.info(String.format("发送短信验证码成功,手机号[%s]", formDTO.getPhone()));
}
/**
* @param formDTO
* @return com.epmet.commons.tools.utils.Result
* @Author sun
* @Description 公众号-手机验证码登陆
**/
@Override
public UserTokenResultDTO loginByPhone(TokenDto tokenDTO, LoginByPhoneFormDTO formDTO) {
//1.根据手机号查询到用户、客户信息
Result<CustomerUserResultDTO> result = epmetThirdFeignClient.checkPaUser(formDTO.getPhone());
if (!result.success()) {
logger.error(String.format("手机验证码登录异常,手机号[%s],code[%s],msg[%s]", formDTO.getPhone(), result.getCode(), result.getMsg()));
throw new RenException(result.getCode());
}
CustomerUserResultDTO resultDTO = result.getData();
//2.用户不存在时不允许登陆
PaUserDTO userDTO = resultDTO.getPaUserResult();
if (null == resultDTO || StringUtils.isBlank(userDTO.getId())) {
throw new RenException(PublicUserLoginConstant.LOGON_EXCEPTION);
}
//3.校验验证码是否正确
String rightSmsCode = captchaRedis.getPublicSmsCode(formDTO.getPhone());
if (!formDTO.getSmsCode().equals(rightSmsCode)) {
logger.error(String.format("验证码错误code[%s],msg[%s]", EpmetErrorCode.MOBILE_CODE_ERROR.getCode(), EpmetErrorCode.MOBILE_CODE_ERROR.getMsg()));
throw new RenException(EpmetErrorCode.MOBILE_CODE_ERROR.getCode());
}
//获取缓存中的token
TokenDto redisTokenDTO = cpUserDetailRedis.get(LoginConstant.APP_PUBLIC, LoginConstant.CLIENT_MP, userDTO.getId(), TokenDto.class);
if (redisTokenDTO == null) {
return null;
}
//4.判断是否存在客户信息,是否需要生成新的token
PaCustomerDTO customerDTO = resultDTO.getPaCustomerResult();
if (null != customerDTO && !StringUtils.isBlank(customerDTO.getId())) {
redisTokenDTO.setCustomerId(customerDTO.getId());
int expire = jwtTokenProperties.getExpire();
cpUserDetailRedis.set(redisTokenDTO, expire);
}
//5.登陆成功,访问记录表新增访问记录(访问记录新增失败不应影响用户登陆)
SaveUserVisitedFormDTO visited = new SaveUserVisitedFormDTO();
visited.setUserId(userDTO.getId());
visited.setLogonUserId(tokenDTO.getUserId());
visited.setPhone(formDTO.getPhone());
Result visitedResult = epmetThirdFeignClient.saveUserVisited(visited);
if(!visitedResult.success()){
logger.error(PublicUserLoginConstant.SAVE_VISITED_EXCEPTION);
}
//6.返回token
UserTokenResultDTO userTokenResultDTO = new UserTokenResultDTO();
userTokenResultDTO.setToken(redisTokenDTO.getToken());
return userTokenResultDTO;
}
}

10
epmet-commons/epmet-common-clienttoken/src/main/java/com/epmet/common/token/constant/LoginConstant.java

@ -21,6 +21,11 @@ public interface LoginConstant {
*/
String APP_OPER = "oper";
/**
* 公众号
*/
String APP_PUBLIC = "public";
/**
* web
*/
@ -30,4 +35,9 @@ public interface LoginConstant {
* 微信小程序
*/
String CLIENT_WXMP = "wxmp";
/**
* E事通服务号
*/
String CLIENT_MP = "mp";
}

6
epmet-module/epmet-third/epmet-third-client/pom.xml

@ -20,6 +20,12 @@
<artifactId>epmet-commons-tools</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>3.6.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>

7
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/CustomerMpDTO.java

@ -54,15 +54,10 @@ public class CustomerMpDTO implements Serializable {
private Integer appId;
/**
* 是否已经授权
* 是否已经授权 0未授权1已授权
*/
private Integer authorizationFlag;
/**
* 公众账号信息id
*/
private String authorizerInfoId;
/**
* 删除标识0.未删除 1.已删除
*/

4
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/PaUserDTO.java

@ -34,9 +34,9 @@ public class PaUserDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 本主键会用作customer_staff里的user_iduser表的id
* user表的id
*/
private Integer id;
private String id;
/**
* 手机号

4
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/PaUserVisitedDTO.java

@ -34,9 +34,9 @@ public class PaUserVisitedDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 本主键会用作customer_staff里的user_iduser表的id
* user表的id
*/
private Integer id;
private String id;
/**
* 用户Id pa_user.id

14
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/PaUserWechatDTO.java

@ -34,9 +34,9 @@ public class PaUserWechatDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 本主键会用作customer_staff里的user_iduser表的id
* user表的id
*/
private Integer id;
private String id;
/**
* 用户Id user.id
@ -53,11 +53,6 @@ public class PaUserWechatDTO implements Serializable {
*/
private String unionId;
/**
* 手机号
*/
private String phone;
/**
* 1男2女0未知
*/
@ -88,11 +83,6 @@ public class PaUserWechatDTO implements Serializable {
*/
private String city;
/**
* 用户特权信息json 数组如微信沃卡用户为chinaunicom
*/
private String privilege;
/**
* 语言
*/

56
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/CreateAgencyFormDTO.java

@ -0,0 +1,56 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Author sun
* @Description 公众号-创建组织-接口入参
*/
@Data
public class CreateAgencyFormDTO implements Serializable {
private static final long serialVersionUID = -6547893374373422628L;
public interface AddUserInternalGroup {}
/**
* 根组织名称
*/
@NotBlank(message = "组织名称不能为空")
private String agencyName;
/**
* 级别
*/
@NotBlank(message = "组织级别不能为空")
private String level;
/**
* 地区编码
*/
@NotBlank(message = "地区编码不能为空")
private String areaCode;
/**
* 中国字
*/
private String province;
/**
* 中国字
*/
private String city;
/**
* 中国字
*/
private String district;
/**
* 党支部数量
*/
private Integer partyBranchNum = 0;
}

54
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/RegisterFormDTO.java

@ -0,0 +1,54 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @Author sun
* @Description 公众号-手机号注册-接口入参
*/
@Data
public class RegisterFormDTO implements Serializable {
private static final long serialVersionUID = -6547893374373422628L;
public interface AddUserInternalGroup {
}
public interface AddUserShowGroup extends CustomerClientShowGroup {
}
/**
* 手机号
*/
@NotBlank(message = "手机号不能为空", groups = {AddUserInternalGroup.class, AddUserShowGroup.class})
private String phone;
/**
* 手机短信验证码
*/
@NotBlank(message = "验证码不能为空", groups = {AddUserShowGroup.class})
private String smsCode;
/**
* 姓氏
*/
@NotBlank(message = "姓氏不能为空", groups = {AddUserShowGroup.class})
private String surName;
/**
* 性别 1男2女0未知
*/
@NotNull(message = "用户性别不能为空", groups = {AddUserShowGroup.class})
private Integer gender;
/**
* token中userId
*/
private String userId;
}

34
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/SaveUserVisitedFormDTO.java

@ -0,0 +1,34 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Author sun
* @Description 公众号-用户登陆新增访问记录-接口入参
*/
@Data
public class SaveUserVisitedFormDTO implements Serializable {
private static final long serialVersionUID = -6547893374373422628L;
public interface AddUserInternalGroup {}
/**
* 登陆手机号对应的userId
*/
private String userId;
/**
* 登陆人userId
*/
private String logonUserId;
/**
* 登陆手机号
*/
private String phone;
}

23
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/CreateAgencyResultDTO.java

@ -0,0 +1,23 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* @Author sun
* @Description 公众号-创建组织-接口返参
*/
@Data
public class CreateAgencyResultDTO implements Serializable {
private static final long serialVersionUID = 3253989119352850315L;
/**
* 新增客户Id
*/
private String customerId;
}

25
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/CustomerUserResultDTO.java

@ -0,0 +1,25 @@
package com.epmet.dto.result;
import com.epmet.dto.PaCustomerDTO;
import com.epmet.dto.PaUserDTO;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 根据手机号查询用户信息客户信息-接口返参
* @Author sun
*/
@Data
public class CustomerUserResultDTO implements Serializable {
private static final long serialVersionUID = 5214475907074876716L;
/**
* 用户信息
*/
private PaUserDTO paUserResult;
/**
* 用户对应的客户信息
*/
private PaCustomerDTO paCustomerResult;
}

21
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/SaveUserResultDTO.java

@ -0,0 +1,21 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Author sun
* @Description 授权用户信息时新增或更新用户信息-接口返参
*/
@Data
public class SaveUserResultDTO implements Serializable {
private static final long serialVersionUID = 3253989119352850315L;
/**
* 新增或已有用户的Id
*/
private String userId;
}

36
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdFeignClient.java

@ -1,8 +1,17 @@
package com.epmet.feign;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.SaveUserVisitedFormDTO;
import com.epmet.dto.result.CustomerUserResultDTO;
import com.epmet.dto.result.SaveUserResultDTO;
import com.epmet.feign.fallback.EpmetThirdFeignClientFallback;
import me.chanjar.weixin.mp.bean.result.WxMpUser;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* 本服务对外开放的API,其他服务通过引用此client调用该服务
@ -13,4 +22,31 @@ import org.springframework.cloud.openfeign.FeignClient;
@FeignClient(name = ServiceConstant.EPMET_THIRD_SERVER, fallback = EpmetThirdFeignClientFallback.class)
public interface EpmetThirdFeignClient {
/**
* @param wxMpUser
* @return
* @Author sun
* @Description 根据openId新增或更新用户信息
**/
@PostMapping(value = "third/pauser/saveuser", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
Result<SaveUserResultDTO> saveUser(@RequestBody WxMpUser wxMpUser);
/**
* @param phone
* @return
* @Author sun
* @Description 根据手机号查询公众号用户基本信息校验用户是否存在
**/
@PostMapping(value = "third/pauser/checkpauser/{phone}")
Result<CustomerUserResultDTO> checkPaUser(@PathVariable("phone") String phone);
/**
* @param visited
* @return
* @Author sun
* @Description 用户登陆新增访问记录数据
**/
@PostMapping(value = "third/pauservisited/saveuservisited")
Result saveUserVisited(@RequestBody SaveUserVisitedFormDTO visited);
}

22
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdFeignClientFallback.java

@ -1,6 +1,13 @@
package com.epmet.feign.fallback;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.ModuleUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.SaveUserVisitedFormDTO;
import com.epmet.dto.result.CustomerUserResultDTO;
import com.epmet.dto.result.SaveUserResultDTO;
import com.epmet.feign.EpmetThirdFeignClient;
import me.chanjar.weixin.mp.bean.result.WxMpUser;
import org.springframework.stereotype.Component;
/**
@ -9,4 +16,19 @@ import org.springframework.stereotype.Component;
*/
@Component
public class EpmetThirdFeignClientFallback implements EpmetThirdFeignClient {
@Override
public Result<SaveUserResultDTO> saveUser(WxMpUser wxMpUser) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "saveUser", wxMpUser);
}
@Override
public Result<CustomerUserResultDTO> checkPaUser(String phone) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "checkPaUser", phone);
}
@Override
public Result saveUserVisited(SaveUserVisitedFormDTO visited) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "saveUserVisited", visited);
}
}

6
epmet-module/epmet-third/epmet-third-server/pom.xml

@ -123,6 +123,12 @@
<version>3.6.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-common-clienttoken</artifactId>
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>

19
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/constant/PaConstant.java

@ -0,0 +1,19 @@
package com.epmet.constant;
/**
* @Description 公众号-常量
* @author sun
*/
public interface PaConstant {
/**
* 手机号注册
*/
String PHONE_EXCEPTION = "手机号已存在,不允许再次注册";
/**
* 根据userId查询pa_user_wechat表失败
*/
String SELECT_WECHAT_EXCEPTION = "获取用户微信信息失败";
}

63
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PaCustomerController.java

@ -1,5 +1,17 @@
package com.epmet.controller;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.dto.form.CreateAgencyFormDTO;
import com.epmet.dto.form.RegisterFormDTO;
import com.epmet.dto.result.CreateAgencyResultDTO;
import com.epmet.service.*;
import org.springframework.beans.factory.annotation.Autowired;
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;
@ -12,4 +24,55 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("pacustomer")
public class PaCustomerController {
@Autowired
private PaUserService paUserService;
@Autowired
private PaCustomerService paCustomerService;
@Autowired
private PaCustomerAgencyService paCustomerAgencyService;
@Autowired
private PaCustomerUserAgencyService paCustomerUserAgencyService;
@Autowired
private CustomerMpService customerMpService;
/**
* @param formDTO
* @return
* @Author sun
* @Description 公众号-手机号注册
**/
@PostMapping("register")
public Result register(@LoginUser TokenDto tokenDTO, @RequestBody RegisterFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, RegisterFormDTO.AddUserInternalGroup.class, RegisterFormDTO.AddUserShowGroup.class);
formDTO.setUserId(tokenDTO.getUserId());
paCustomerService.register(formDTO);
return new Result();
}
/**
* @param formDTO
* @return
* @Author sun
* @Description 公众号-创建组织
**/
@PostMapping("createagency")
public Result<CreateAgencyResultDTO> createAgency(@LoginUser TokenDto tokenDTO, @RequestBody CreateAgencyFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, DefaultGroup.class);
return new Result<CreateAgencyResultDTO>().ok(paCustomerService.createAgency(tokenDTO, formDTO));
}
/**
* @param formDTO
* @return
* @Author sun
* @Description 公众号-查询我的信息
**/
@PostMapping("myinfo")
public Result<CreateAgencyResultDTO> myInfo(@LoginUser TokenDto tokenDTO, @RequestBody CreateAgencyFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, DefaultGroup.class);
return new Result<CreateAgencyResultDTO>().ok(paCustomerService.myInfo(formDTO));
}
}

37
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PaUserController.java

@ -26,8 +26,11 @@ import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.dto.PaUserDTO;
import com.epmet.dto.result.CustomerUserResultDTO;
import com.epmet.dto.result.SaveUserResultDTO;
import com.epmet.excel.PaUserExcel;
import com.epmet.service.PaUserService;
import me.chanjar.weixin.mp.bean.result.WxMpUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -45,24 +48,24 @@ import java.util.Map;
@RestController
@RequestMapping("pauser")
public class PaUserController {
@Autowired
private PaUserService paUserService;
@GetMapping("page")
public Result<PageData<PaUserDTO>> page(@RequestParam Map<String, Object> params){
public Result<PageData<PaUserDTO>> page(@RequestParam Map<String, Object> params) {
PageData<PaUserDTO> page = paUserService.page(params);
return new Result<PageData<PaUserDTO>>().ok(page);
}
@GetMapping("{id}")
public Result<PaUserDTO> get(@PathVariable("id") String id){
public Result<PaUserDTO> get(@PathVariable("id") String id) {
PaUserDTO data = paUserService.get(id);
return new Result<PaUserDTO>().ok(data);
}
@PostMapping
public Result save(@RequestBody PaUserDTO dto){
public Result save(@RequestBody PaUserDTO dto) {
//效验数据
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
paUserService.save(dto);
@ -70,7 +73,7 @@ public class PaUserController {
}
@PutMapping
public Result update(@RequestBody PaUserDTO dto){
public Result update(@RequestBody PaUserDTO dto) {
//效验数据
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
paUserService.update(dto);
@ -78,7 +81,7 @@ public class PaUserController {
}
@DeleteMapping
public Result delete(@RequestBody String[] ids){
public Result delete(@RequestBody String[] ids) {
//效验数据
AssertUtils.isArrayEmpty(ids, "id");
paUserService.delete(ids);
@ -91,4 +94,26 @@ public class PaUserController {
ExcelUtils.exportExcelToTarget(response, null, list, PaUserExcel.class);
}
/**
* @param wxMpUser
* @return
* @Author sun
* @Description 根据openId新增或更新用户信息
**/
@PostMapping(value = "/saveuser")
public Result<SaveUserResultDTO> saveUser(@RequestBody WxMpUser wxMpUser) {
return new Result<SaveUserResultDTO>().ok(paUserService.saveUser(wxMpUser));
}
/**
* @param phone
* @return
* @Author sun
* @Description 根据手机号查询公众号用户基本信息校验用户是否存在
**/
@PostMapping(value = "/checkpauser/{phone}")
public Result<CustomerUserResultDTO> checkPaUser(@PathVariable("phone") String phone) {
return new Result<CustomerUserResultDTO>().ok(paUserService.checkPaUser(phone));
}
}

15
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PaUserVisitedController.java

@ -23,9 +23,10 @@ import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.AssertUtils;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.dto.PaUserVisitedDTO;
import com.epmet.dto.form.SaveUserVisitedFormDTO;
import com.epmet.excel.PaUserVisitedExcel;
import com.epmet.service.PaUserVisitedService;
import org.springframework.beans.factory.annotation.Autowired;
@ -91,4 +92,16 @@ public class PaUserVisitedController {
ExcelUtils.exportExcelToTarget(response, null, list, PaUserVisitedExcel.class);
}
/**
* @param visited
* @return
* @Author sun
* @Description 用户登陆新增访问记录数据
**/
@PostMapping(value = "/saveuservisited")
public Result saveUserVisited(@RequestBody SaveUserVisitedFormDTO visited) {
paUserVisitedService.saveUserVisited(visited);
return new Result();
}
}

13
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaCustomerDao.java

@ -18,8 +18,12 @@
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.PaCustomerDTO;
import com.epmet.entity.PaCustomerEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 客户信息
@ -29,5 +33,12 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface PaCustomerDao extends BaseDao<PaCustomerEntity> {
/**
* @param userId
* @return
* @Author sun
* @Description 公众号-根据userId查询用户对应的客户信息
**/
List<PaCustomerDTO> selectCustomerByUserId(@Param("userId") String userId);
}

13
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaUserDao.java

@ -18,8 +18,12 @@
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.PaUserDTO;
import com.epmet.entity.PaUserEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 公众号用户信息
@ -29,5 +33,12 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface PaUserDao extends BaseDao<PaUserEntity> {
/**
* @param phone
* @return
* @Author sun
* @Description 根据手机号查询公众号用户基本信息校验用户是否存在
**/
List<PaUserDTO> selectUserByPhone(@Param("phone") String phone);
}

19
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaUserWechatDao.java

@ -18,8 +18,10 @@
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.PaUserWechatDTO;
import com.epmet.entity.PaUserWechatEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 公众号用户信息
@ -29,5 +31,20 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface PaUserWechatDao extends BaseDao<PaUserWechatEntity> {
/**
* @param openId
* @return
* @Author sun
* @Description 根据openId查询user_wechat表信息
**/
PaUserWechatDTO selectWechatByOpenId(@Param("openId") String openId);
/**
* @param dto
* @return
* @Author sun
* @Description 根据userId查询user_wechat表信息
**/
PaUserWechatEntity selectWechatByUserId(PaUserWechatDTO dto);
}

7
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/CustomerMpEntity.java

@ -54,13 +54,8 @@ public class CustomerMpEntity extends BaseEpmetEntity {
private Integer appId;
/**
* 是否已经授权
* 是否已经授权 0未授权1已授权
*/
private Integer authorizationFlag;
/**
* 公众账号信息id
*/
private String authorizerInfoId;
}

10
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/PaUserWechatEntity.java

@ -53,11 +53,6 @@ public class PaUserWechatEntity extends BaseEpmetEntity {
*/
private String unionId;
/**
* 手机号
*/
private String phone;
/**
* 1男2女0未知
*/
@ -88,11 +83,6 @@ public class PaUserWechatEntity extends BaseEpmetEntity {
*/
private String city;
/**
* 用户特权信息json 数组如微信沃卡用户为chinaunicom
*/
private String privilege;
/**
* 语言
*/

5
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/excel/CustomerMpExcel.java

@ -43,12 +43,9 @@ public class CustomerMpExcel {
@Excel(name = "小程序的appId")
private Integer appId;
@Excel(name = "是否已经授权")
@Excel(name = "是否已经授权:0.未授权 1.已授权")
private Integer authorizationFlag;
@Excel(name = "公众账号信息id")
private String authorizerInfoId;
@Excel(name = "删除标识:0.未删除 1.已删除")
private Integer delFlag;

6
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/excel/PaUserWechatExcel.java

@ -43,9 +43,6 @@ public class PaUserWechatExcel {
@Excel(name = "")
private String unionId;
@Excel(name = "手机号")
private String phone;
@Excel(name = "1男2女0未知")
private String gender;
@ -64,9 +61,6 @@ public class PaUserWechatExcel {
@Excel(name = "城市")
private String city;
@Excel(name = "用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)")
private String privilege;
@Excel(name = "语言")
private String language;

29
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaCustomerService.java

@ -19,7 +19,11 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.dto.PaCustomerDTO;
import com.epmet.dto.form.CreateAgencyFormDTO;
import com.epmet.dto.form.RegisterFormDTO;
import com.epmet.dto.result.CreateAgencyResultDTO;
import com.epmet.entity.PaCustomerEntity;
import java.util.List;
@ -92,4 +96,29 @@ public interface PaCustomerService extends BaseService<PaCustomerEntity> {
* @date 2020-07-09
*/
void delete(String[] ids);
/**
* @param formDTO
* @return
* @Author sun
* @Description 公众号-手机号注册
**/
void register(RegisterFormDTO formDTO);
/**
* @param formDTO
* @return
* @Author sun
* @Description 公众号-创建组织
**/
CreateAgencyResultDTO createAgency(TokenDto tokenDTO, CreateAgencyFormDTO formDTO);
/**
* @param formDTO
* @return
* @Author sun
* @Description 公众号-查询我的信息
**/
CreateAgencyResultDTO myInfo(CreateAgencyFormDTO formDTO);
}

19
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserService.java

@ -20,7 +20,10 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dto.PaUserDTO;
import com.epmet.dto.result.CustomerUserResultDTO;
import com.epmet.dto.result.SaveUserResultDTO;
import com.epmet.entity.PaUserEntity;
import me.chanjar.weixin.mp.bean.result.WxMpUser;
import java.util.List;
import java.util.Map;
@ -92,4 +95,20 @@ public interface PaUserService extends BaseService<PaUserEntity> {
* @date 2020-07-09
*/
void delete(String[] ids);
/**
* @param wxMpUser
* @return
* @Author sun
* @Description 根据openId新增或更新用户信息
**/
SaveUserResultDTO saveUser(WxMpUser wxMpUser);
/**
* @param phone
* @return
* @Author sun
* @Description 根据手机号查询公众号用户基本信息校验用户是否存在
**/
CustomerUserResultDTO checkPaUser(String phone);
}

9
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserVisitedService.java

@ -20,6 +20,7 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dto.PaUserVisitedDTO;
import com.epmet.dto.form.SaveUserVisitedFormDTO;
import com.epmet.entity.PaUserVisitedEntity;
import java.util.List;
@ -92,4 +93,12 @@ public interface PaUserVisitedService extends BaseService<PaUserVisitedEntity> {
* @date 2020-07-09
*/
void delete(String[] ids);
/**
* @param visited
* @return
* @Author sun
* @Description 用户登陆新增访问记录数据
**/
void saveUserVisited(SaveUserVisitedFormDTO visited);
}

8
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserWechatService.java

@ -92,4 +92,12 @@ public interface PaUserWechatService extends BaseService<PaUserWechatEntity> {
* @date 2020-07-09
*/
void delete(String[] ids);
/**
* @param openId
* @return
* @Author sun
* @Description 根据openId查询user_wechat表信息
**/
PaUserWechatDTO getWechatByOpenId(String openId);
}

109
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaCustomerServiceImpl.java

@ -19,16 +19,37 @@ package com.epmet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.common.token.constant.LoginConstant;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.constant.PaConstant;
import com.epmet.dao.PaCustomerDao;
import com.epmet.dao.PaUserDao;
import com.epmet.dao.PaUserVisitedDao;
import com.epmet.dao.PaUserWechatDao;
import com.epmet.dto.PaCustomerDTO;
import com.epmet.dto.PaUserDTO;
import com.epmet.dto.PaUserWechatDTO;
import com.epmet.dto.form.CreateAgencyFormDTO;
import com.epmet.dto.form.RegisterFormDTO;
import com.epmet.dto.result.CreateAgencyResultDTO;
import com.epmet.entity.PaCustomerEntity;
import com.epmet.entity.PaUserEntity;
import com.epmet.entity.PaUserVisitedEntity;
import com.epmet.entity.PaUserWechatEntity;
import com.epmet.redis.PaCustomerRedis;
import com.epmet.service.PaCustomerService;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -46,8 +67,17 @@ import java.util.Map;
@Service
public class PaCustomerServiceImpl extends BaseServiceImpl<PaCustomerDao, PaCustomerEntity> implements PaCustomerService {
private Logger logger = LogManager.getLogger(PaCustomerServiceImpl.class);
@Autowired
private PaCustomerRedis paCustomerRedis;
@Autowired
private PaUserDao paUserDao;
@Autowired
private PaUserWechatDao paUserWechatDao;
@Autowired
private PaUserVisitedDao paUserVisitedDao;
@Autowired
private RedisUtils redisUtils;
@Override
public PageData<PaCustomerDTO> page(Map<String, Object> params) {
@ -101,4 +131,81 @@ public class PaCustomerServiceImpl extends BaseServiceImpl<PaCustomerDao, PaCust
baseDao.deleteBatchIds(Arrays.asList(ids));
}
/**
* @param formDTO
* @return
* @Author sun
* @Description 公众号-手机号注册
**/
@Override
@Transactional(rollbackFor = Exception.class)
public void register(RegisterFormDTO formDTO) {
//1.根据手机号查询到用户信息,判断用户是否存
List<PaUserDTO> userList = paUserDao.selectUserByPhone(formDTO.getPhone());
if (null != userList || userList.size() > NumConstant.ZERO) {
throw new RenException(PaConstant.PHONE_EXCEPTION);
}
//2.校验验证码是否正确
String smsCodeKey = RedisKeys.getLoginSmsCodeKey(LoginConstant.APP_PUBLIC, LoginConstant.CLIENT_MP, formDTO.getPhone());
String rightSmsCode = (String) redisUtils.get(smsCodeKey);
if (!formDTO.getSmsCode().equals(rightSmsCode)) {
logger.error(String.format("验证码错误code[%s],msg[%s]", EpmetErrorCode.MOBILE_CODE_ERROR.getCode(), EpmetErrorCode.MOBILE_CODE_ERROR.getMsg()));
throw new RenException(EpmetErrorCode.MOBILE_CODE_ERROR.getCode());
}
//3.pa_user表更新数据
PaUserEntity userEntity = new PaUserEntity();
userEntity.setId(formDTO.getUserId());
userEntity.setPhone(formDTO.getPhone());
userEntity.setRealName(formDTO.getSurName());
userEntity.setGender(formDTO.getGender().toString());
paUserDao.updateById(userEntity);
//2.访问记录表新增数据
PaUserWechatDTO dto = new PaUserWechatDTO();
dto.setUserId(formDTO.getUserId());
PaUserWechatEntity wechatEntity = paUserWechatDao.selectWechatByUserId(dto);
if (null == wechatEntity) {
throw new RenException(PaConstant.SELECT_WECHAT_EXCEPTION);
}
PaUserVisitedEntity visitedEntity = new PaUserVisitedEntity();
visitedEntity.setUserId(formDTO.getUserId());
visitedEntity.setWxOpenId(wechatEntity.getWxOpenId());
visitedEntity.setOpenId(wechatEntity.getWxOpenId());
visitedEntity.setPhone(formDTO.getPhone());
paUserVisitedDao.insert(visitedEntity);
}
/**
* @param formDTO
* @return
* @Author sun
* @Description 公众号-创建组织
**/
@Override
public CreateAgencyResultDTO createAgency(TokenDto tokenDTO, CreateAgencyFormDTO formDTO) {
//1.客户表初始化数据
//2.客户组织表初始化数据
//3.
//4.
//5.
return null;
}
/**
* @param formDTO
* @return
* @Author sun
* @Description 公众号-查询我的信息
**/
@Override
public CreateAgencyResultDTO myInfo(CreateAgencyFormDTO formDTO) {
return null;
}
}

89
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserServiceImpl.java

@ -20,14 +20,23 @@ package com.epmet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.dao.PaCustomerDao;
import com.epmet.dao.PaUserDao;
import com.epmet.dto.PaCustomerDTO;
import com.epmet.dto.PaUserDTO;
import com.epmet.dto.PaUserWechatDTO;
import com.epmet.dto.result.CustomerUserResultDTO;
import com.epmet.dto.result.SaveUserResultDTO;
import com.epmet.entity.PaUserEntity;
import com.epmet.entity.PaUserWechatEntity;
import com.epmet.redis.PaUserRedis;
import com.epmet.service.PaUserService;
import com.epmet.service.PaUserWechatService;
import me.chanjar.weixin.mp.bean.result.WxMpUser;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -48,6 +57,10 @@ public class PaUserServiceImpl extends BaseServiceImpl<PaUserDao, PaUserEntity>
@Autowired
private PaUserRedis paUserRedis;
@Autowired
private PaUserWechatService paUserWechatService;
@Autowired
private PaCustomerDao paCustomerDao;
@Override
public PageData<PaUserDTO> page(Map<String, Object> params) {
@ -101,4 +114,80 @@ public class PaUserServiceImpl extends BaseServiceImpl<PaUserDao, PaUserEntity>
baseDao.deleteBatchIds(Arrays.asList(ids));
}
/**
* @param wxMpUser
* @return
* @Author sun
* @Description 根据openId新增或更新用户信息
**/
@Override
@Transactional(rollbackFor = Exception.class)
public SaveUserResultDTO saveUser(WxMpUser wxMpUser) {
SaveUserResultDTO resultDTO = new SaveUserResultDTO();
//1.根据openId查询user_wechat表是否存在用户信息
PaUserWechatDTO wechatDTO = paUserWechatService.getWechatByOpenId(wxMpUser.getOpenId());
//2.不存在则新增用户信息,存在则更新user_wechat表信息
if (null == wechatDTO || null == wechatDTO.getId()) {
//2.1、user表新增数据
PaUserEntity userEntity = new PaUserEntity();
baseDao.insert(userEntity);
//2.2、user_wechat表新增数据
PaUserWechatEntity wechatEntity = new PaUserWechatEntity();
wechatEntity.setUserId(userEntity.getId());
wechatEntity.setWxOpenId(wxMpUser.getOpenId());
wechatEntity.setUnionId(wxMpUser.getUnionId());
wechatEntity.setGender(wxMpUser.getSex().toString());
wechatEntity.setNickname(wxMpUser.getNickname());
wechatEntity.setHeadImgUrl(wxMpUser.getHeadImgUrl());
wechatEntity.setCountry(wxMpUser.getCountry());
wechatEntity.setProvince(wxMpUser.getProvince());
wechatEntity.setCity(wxMpUser.getCity());
wechatEntity.setLanguage(wxMpUser.getLanguage());
paUserWechatService.insert(wechatEntity);
resultDTO.setUserId(userEntity.getId());
} else {
//2.3、更新user_wechat表数据
PaUserWechatEntity wechatEntity = ConvertUtils.sourceToTarget(wechatDTO, PaUserWechatEntity.class);
wechatEntity.setGender(wxMpUser.getSex().toString());
wechatEntity.setNickname(wxMpUser.getNickname());
wechatEntity.setHeadImgUrl(wxMpUser.getHeadImgUrl());
wechatEntity.setCountry(wxMpUser.getCountry());
wechatEntity.setProvince(wxMpUser.getProvince());
wechatEntity.setCity(wxMpUser.getCity());
wechatEntity.setLanguage(wxMpUser.getLanguage());
paUserWechatService.updateById(wechatEntity);
resultDTO.setUserId(wechatDTO.getUserId());
}
//3.返回userId
return resultDTO;
}
/**
* @param phone
* @return
* @Author sun
* @Description 根据手机号查询公众号用户基本信息校验用户是否存在
**/
@Override
public CustomerUserResultDTO checkPaUser(String phone) {
CustomerUserResultDTO resultDTO = new CustomerUserResultDTO();
List<PaUserDTO> userList = baseDao.selectUserByPhone(phone);
if (null == userList || userList.size() < NumConstant.ONE) {
resultDTO.setPaUserResult(new PaUserDTO());
resultDTO.setPaCustomerResult(new PaCustomerDTO());
return resultDTO;
}
PaUserDTO dto = userList.get(NumConstant.ZERO);
List<PaCustomerDTO> customerList = paCustomerDao.selectCustomerByUserId(dto.getId());
resultDTO.setPaUserResult(dto);
resultDTO.setPaCustomerResult(customerList.size() > NumConstant.ZERO ? customerList.get(NumConstant.ZERO) : new PaCustomerDTO());
return resultDTO;
}
}

39
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserVisitedServiceImpl.java

@ -20,12 +20,16 @@ package com.epmet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.dao.PaUserVisitedDao;
import com.epmet.dao.PaUserWechatDao;
import com.epmet.dto.PaUserVisitedDTO;
import com.epmet.dto.PaUserWechatDTO;
import com.epmet.dto.form.SaveUserVisitedFormDTO;
import com.epmet.entity.PaUserVisitedEntity;
import com.epmet.entity.PaUserWechatEntity;
import com.epmet.redis.PaUserVisitedRedis;
import com.epmet.service.PaUserVisitedService;
import org.apache.commons.lang3.StringUtils;
@ -48,6 +52,8 @@ public class PaUserVisitedServiceImpl extends BaseServiceImpl<PaUserVisitedDao,
@Autowired
private PaUserVisitedRedis paUserVisitedRedis;
@Autowired
private PaUserWechatDao paUserWechatDao;
@Override
public PageData<PaUserVisitedDTO> page(Map<String, Object> params) {
@ -101,4 +107,35 @@ public class PaUserVisitedServiceImpl extends BaseServiceImpl<PaUserVisitedDao,
baseDao.deleteBatchIds(Arrays.asList(ids));
}
/**
* @param visited
* @return
* @Author sun
* @Description 用户登陆新增访问记录数据
**/
@Override
@Transactional(rollbackFor = Exception.class)
public void saveUserVisited(SaveUserVisitedFormDTO visited) {
PaUserWechatDTO dto = new PaUserWechatDTO();
//1.查询登陆手机号对应的用户微信信息
dto.setUserId(visited.getUserId());
PaUserWechatEntity userEntity = paUserWechatDao.selectWechatByUserId(dto);
//2.查询当前登陆人对应的微信信息
String openId = userEntity.getWxOpenId();
if(!visited.getUserId().equals(visited.getLogonUserId())){
dto.setUserId(visited.getLogonUserId());
PaUserWechatEntity logonUser = paUserWechatDao.selectWechatByUserId(dto);
openId = logonUser.getWxOpenId();
}
//3.新增访问记录数据
PaUserVisitedEntity entity = new PaUserVisitedEntity();
entity.setUserId(visited.getUserId());
entity.setWxOpenId(userEntity.getWxOpenId());
entity.setOpenId(openId);
entity.setPhone(visited.getPhone());
baseDao.insert(entity);
}
}

11
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserWechatServiceImpl.java

@ -101,4 +101,15 @@ public class PaUserWechatServiceImpl extends BaseServiceImpl<PaUserWechatDao, Pa
baseDao.deleteBatchIds(Arrays.asList(ids));
}
/**
* @param openId
* @return
* @Author sun
* @Description 根据openId查询user_wechat表信息
**/
@Override
public PaUserWechatDTO getWechatByOpenId(String openId) {
return baseDao.selectWechatByOpenId(openId);
}
}

12
epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PaCustomerDao.xml

@ -3,5 +3,17 @@
<mapper namespace="com.epmet.dao.PaCustomerDao">
<select id="selectCustomerByUserId" resultType="com.epmet.dto.PaCustomerDTO">
SELECT
pc.id,
pc.customer_name
FROM
pa_customer pc
INNER JOIN pa_customer_user_agency pcua ON pc.id = pcua.customer_id
WHERE
pc.del_flag = '0'
AND pcua.del_flag = '0'
AND pcua.user_id = #{userId}
</select>
</mapper>

12
epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PaUserDao.xml

@ -3,5 +3,17 @@
<mapper namespace="com.epmet.dao.PaUserDao">
<select id="selectUserByPhone" resultType="com.epmet.dto.PaUserDTO">
SELECT
id,
phone,
real_name,
gender
FROM
pa_user
WHERE
del_flag = '0'
AND phone = #{phone}
</select>
</mapper>

43
epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PaUserWechatDao.xml

@ -3,5 +3,48 @@
<mapper namespace="com.epmet.dao.PaUserWechatDao">
<select id="selectWechatByOpenId" resultType="com.epmet.dto.PaUserWechatDTO">
SELECT
id,
user_id,
wx_open_id,
union_id,
phone,
gender,
nickname,
head_img_url,
country,
province,
city,
privilege,
`language`
FROM
pa_user_wechat
WHERE
del_flag = '0'
AND wx_open_id = #{openId}
</select>
<select id="selectWechatByUserId" resultType="com.epmet.entity.PaUserWechatEntity">
SELECT
id,
user_id,
wx_open_id,
union_id,
phone,
gender,
nickname,
head_img_url,
country,
province,
city,
privilege,
`language`
FROM
pa_user_wechat
WHERE
del_flag = '0'
AND user_id = #{userId}
</select>
</mapper>
Loading…
Cancel
Save