From ff42246de768d551105478befaab6b9aed387703 Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Mon, 13 Jul 2020 16:47:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=AC=E4=BC=97=E5=8F=B7=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E9=83=A8=E5=88=86=E6=8E=A5=E5=8F=A3=E9=A6=96=E6=AC=A1=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- epmet-auth/pom.xml | 6 + .../constant/PublicUserLoginConstant.java | 30 +++ .../controller/PublicUserLoginController.java | 50 ++++- .../epmet/dto/form/LoginByPhoneFormDTO.java | 38 ++++ .../dto/form/PublicSendSmsCodeFormDTO.java | 28 +++ .../java/com/epmet/redis/CaptchaRedis.java | 25 +++ .../epmet/service/PublicUserLoginService.java | 32 ++- .../impl/PublicUserLoginServiceImpl.java | 193 +++++++++++++++++- .../common/token/constant/LoginConstant.java | 10 + .../epmet-third/epmet-third-client/pom.xml | 6 + .../java/com/epmet/dto/CustomerMpDTO.java | 7 +- .../main/java/com/epmet/dto/PaUserDTO.java | 4 +- .../java/com/epmet/dto/PaUserVisitedDTO.java | 4 +- .../java/com/epmet/dto/PaUserWechatDTO.java | 14 +- .../epmet/dto/form/CreateAgencyFormDTO.java | 56 +++++ .../com/epmet/dto/form/RegisterFormDTO.java | 54 +++++ .../dto/form/SaveUserVisitedFormDTO.java | 34 +++ .../dto/result/CreateAgencyResultDTO.java | 23 +++ .../dto/result/CustomerUserResultDTO.java | 25 +++ .../epmet/dto/result/SaveUserResultDTO.java | 21 ++ .../epmet/feign/EpmetThirdFeignClient.java | 36 ++++ .../EpmetThirdFeignClientFallback.java | 22 ++ .../epmet-third/epmet-third-server/pom.xml | 6 + .../java/com/epmet/constant/PaConstant.java | 19 ++ .../controller/PaCustomerController.java | 63 ++++++ .../epmet/controller/PaUserController.java | 37 +++- .../controller/PaUserVisitedController.java | 15 +- .../java/com/epmet/dao/PaCustomerDao.java | 13 +- .../main/java/com/epmet/dao/PaUserDao.java | 13 +- .../java/com/epmet/dao/PaUserWechatDao.java | 19 +- .../com/epmet/entity/CustomerMpEntity.java | 7 +- .../com/epmet/entity/PaUserWechatEntity.java | 10 - .../java/com/epmet/excel/CustomerMpExcel.java | 5 +- .../com/epmet/excel/PaUserWechatExcel.java | 6 - .../com/epmet/service/PaCustomerService.java | 29 +++ .../java/com/epmet/service/PaUserService.java | 19 ++ .../epmet/service/PaUserVisitedService.java | 9 + .../epmet/service/PaUserWechatService.java | 8 + .../service/impl/PaCustomerServiceImpl.java | 109 +++++++++- .../epmet/service/impl/PaUserServiceImpl.java | 89 ++++++++ .../impl/PaUserVisitedServiceImpl.java | 39 +++- .../service/impl/PaUserWechatServiceImpl.java | 11 + .../main/resources/mapper/PaCustomerDao.xml | 12 ++ .../src/main/resources/mapper/PaUserDao.xml | 12 ++ .../main/resources/mapper/PaUserWechatDao.xml | 43 ++++ 45 files changed, 1231 insertions(+), 80 deletions(-) create mode 100644 epmet-auth/src/main/java/com/epmet/constant/PublicUserLoginConstant.java create mode 100644 epmet-auth/src/main/java/com/epmet/dto/form/LoginByPhoneFormDTO.java create mode 100644 epmet-auth/src/main/java/com/epmet/dto/form/PublicSendSmsCodeFormDTO.java create mode 100644 epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/CreateAgencyFormDTO.java create mode 100644 epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/RegisterFormDTO.java create mode 100644 epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/SaveUserVisitedFormDTO.java create mode 100644 epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/CreateAgencyResultDTO.java create mode 100644 epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/CustomerUserResultDTO.java create mode 100644 epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/SaveUserResultDTO.java create mode 100644 epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/constant/PaConstant.java diff --git a/epmet-auth/pom.xml b/epmet-auth/pom.xml index de5d22524a..6794c2a2b4 100644 --- a/epmet-auth/pom.xml +++ b/epmet-auth/pom.xml @@ -116,6 +116,12 @@ 3.6.0 compile + + com.epmet + epmet-third-client + 2.0.0 + compile + diff --git a/epmet-auth/src/main/java/com/epmet/constant/PublicUserLoginConstant.java b/epmet-auth/src/main/java/com/epmet/constant/PublicUserLoginConstant.java new file mode 100644 index 0000000000..f2a2462e6a --- /dev/null +++ b/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 = "用户登陆,新增访问记录失败"; + +} diff --git a/epmet-auth/src/main/java/com/epmet/controller/PublicUserLoginController.java b/epmet-auth/src/main/java/com/epmet/controller/PublicUserLoginController.java index 9a48be046c..d083b2a26b 100644 --- a/epmet-auth/src/main/java/com/epmet/controller/PublicUserLoginController.java +++ b/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 wxCodeToToken(@RequestBody PaWxCodeFormDTO formDTO) { ValidatorUtils.validateEntity(formDTO, PaWxCodeFormDTO.AddUserInternalGroup.class); - Map map = publicUserLoginService.loginByWxCode(formDTO); - return new Result().ok(map); + return new Result().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 loginByPhone(@LoginUser TokenDto tokenDTO, @RequestBody LoginByPhoneFormDTO formDTO) { + ValidatorUtils.validateEntity(formDTO, LoginByPhoneFormDTO.AddUserShowGroup.class, LoginByPhoneFormDTO.LoginByPhone.class); + return new Result().ok(publicUserLoginService.loginByPhone(tokenDTO, formDTO)); + } + + } diff --git a/epmet-auth/src/main/java/com/epmet/dto/form/LoginByPhoneFormDTO.java b/epmet-auth/src/main/java/com/epmet/dto/form/LoginByPhoneFormDTO.java new file mode 100644 index 0000000000..8b09d458d9 --- /dev/null +++ b/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; + +} + diff --git a/epmet-auth/src/main/java/com/epmet/dto/form/PublicSendSmsCodeFormDTO.java b/epmet-auth/src/main/java/com/epmet/dto/form/PublicSendSmsCodeFormDTO.java new file mode 100644 index 0000000000..b3e9558600 --- /dev/null +++ b/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; +} diff --git a/epmet-auth/src/main/java/com/epmet/redis/CaptchaRedis.java b/epmet-auth/src/main/java/com/epmet/redis/CaptchaRedis.java index acdd85f490..50433bdaf0 100644 --- a/epmet-auth/src/main/java/com/epmet/redis/CaptchaRedis.java +++ b/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 app、client、phone + * @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; + } } diff --git a/epmet-auth/src/main/java/com/epmet/service/PublicUserLoginService.java b/epmet-auth/src/main/java/com/epmet/service/PublicUserLoginService.java index 20091381c0..0ee6449c90 100644 --- a/epmet-auth/src/main/java/com/epmet/service/PublicUserLoginService.java +++ b/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); + } diff --git a/epmet-auth/src/main/java/com/epmet/service/impl/PublicUserLoginServiceImpl.java b/epmet-auth/src/main/java/com/epmet/service/impl/PublicUserLoginServiceImpl.java index e6386e757b..a5e0a48d3f 100644 --- a/epmet-auth/src/main/java/com/epmet/service/impl/PublicUserLoginServiceImpl.java +++ b/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 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 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 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 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 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; + } + } diff --git a/epmet-commons/epmet-common-clienttoken/src/main/java/com/epmet/common/token/constant/LoginConstant.java b/epmet-commons/epmet-common-clienttoken/src/main/java/com/epmet/common/token/constant/LoginConstant.java index b546108bc8..17cb456a1a 100644 --- a/epmet-commons/epmet-common-clienttoken/src/main/java/com/epmet/common/token/constant/LoginConstant.java +++ b/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"; } diff --git a/epmet-module/epmet-third/epmet-third-client/pom.xml b/epmet-module/epmet-third/epmet-third-client/pom.xml index f9e61c9c99..3a2173aa25 100644 --- a/epmet-module/epmet-third/epmet-third-client/pom.xml +++ b/epmet-module/epmet-third/epmet-third-client/pom.xml @@ -20,6 +20,12 @@ epmet-commons-tools 2.0.0 + + com.github.binarywang + weixin-java-mp + 3.6.0 + compile + diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/CustomerMpDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/CustomerMpDTO.java index fd7db9bb2d..014fbe6678 100644 --- a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/CustomerMpDTO.java +++ b/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.已删除 */ diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/PaUserDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/PaUserDTO.java index 1491066d85..1a61724055 100644 --- a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/PaUserDTO.java +++ b/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_id,user表的id + * user表的id */ - private Integer id; + private String id; /** * 手机号 diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/PaUserVisitedDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/PaUserVisitedDTO.java index 7755dc1182..84f9601199 100644 --- a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/PaUserVisitedDTO.java +++ b/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_id,user表的id + * user表的id */ - private Integer id; + private String id; /** * 用户Id pa_user.id diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/PaUserWechatDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/PaUserWechatDTO.java index 9f11eab524..29106ab239 100644 --- a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/PaUserWechatDTO.java +++ b/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_id,user表的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; - /** * 语言 */ diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/CreateAgencyFormDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/CreateAgencyFormDTO.java new file mode 100644 index 0000000000..dec52622c8 --- /dev/null +++ b/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; +} diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/RegisterFormDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/RegisterFormDTO.java new file mode 100644 index 0000000000..fe16eaab4c --- /dev/null +++ b/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; + +} diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/SaveUserVisitedFormDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/SaveUserVisitedFormDTO.java new file mode 100644 index 0000000000..eecf8da6d0 --- /dev/null +++ b/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; + +} diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/CreateAgencyResultDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/CreateAgencyResultDTO.java new file mode 100644 index 0000000000..f344e5c062 --- /dev/null +++ b/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; + +} diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/CustomerUserResultDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/CustomerUserResultDTO.java new file mode 100644 index 0000000000..3b8d20f9e9 --- /dev/null +++ b/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; +} diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/SaveUserResultDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/SaveUserResultDTO.java new file mode 100644 index 0000000000..bd2ce393a4 --- /dev/null +++ b/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; + +} diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdFeignClient.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdFeignClient.java index db762abafa..4b038324ac 100644 --- a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdFeignClient.java +++ b/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 saveUser(@RequestBody WxMpUser wxMpUser); + + /** + * @param phone + * @return + * @Author sun + * @Description 根据手机号查询公众号用户基本信息,校验用户是否存在 + **/ + @PostMapping(value = "third/pauser/checkpauser/{phone}") + Result checkPaUser(@PathVariable("phone") String phone); + + /** + * @param visited + * @return + * @Author sun + * @Description 用户登陆,新增访问记录数据 + **/ + @PostMapping(value = "third/pauservisited/saveuservisited") + Result saveUserVisited(@RequestBody SaveUserVisitedFormDTO visited); } diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdFeignClientFallback.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdFeignClientFallback.java index 7e58be23e7..b1965cad5a 100644 --- a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdFeignClientFallback.java +++ b/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 saveUser(WxMpUser wxMpUser) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "saveUser", wxMpUser); + } + + @Override + public Result 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); + } } diff --git a/epmet-module/epmet-third/epmet-third-server/pom.xml b/epmet-module/epmet-third/epmet-third-server/pom.xml index a8bba9e38c..438272e2c6 100644 --- a/epmet-module/epmet-third/epmet-third-server/pom.xml +++ b/epmet-module/epmet-third/epmet-third-server/pom.xml @@ -123,6 +123,12 @@ 3.6.0 compile + + com.epmet + epmet-common-clienttoken + 2.0.0 + compile + diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/constant/PaConstant.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/constant/PaConstant.java new file mode 100644 index 0000000000..ee15ddf636 --- /dev/null +++ b/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 = "获取用户微信信息失败"; + + +} diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PaCustomerController.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PaCustomerController.java index 7cc03af30e..5f8f9f5660 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PaCustomerController.java +++ b/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 createAgency(@LoginUser TokenDto tokenDTO, @RequestBody CreateAgencyFormDTO formDTO) { + ValidatorUtils.validateEntity(formDTO, DefaultGroup.class); + return new Result().ok(paCustomerService.createAgency(tokenDTO, formDTO)); + } + + /** + * @param formDTO + * @return + * @Author sun + * @Description 公众号-查询我的信息 + **/ + @PostMapping("myinfo") + public Result myInfo(@LoginUser TokenDto tokenDTO, @RequestBody CreateAgencyFormDTO formDTO) { + ValidatorUtils.validateEntity(formDTO, DefaultGroup.class); + return new Result().ok(paCustomerService.myInfo(formDTO)); + } + + } diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PaUserController.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PaUserController.java index 8f447b191e..d7c07bc506 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PaUserController.java +++ b/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> page(@RequestParam Map params){ + public Result> page(@RequestParam Map params) { PageData page = paUserService.page(params); return new Result>().ok(page); } @GetMapping("{id}") - public Result get(@PathVariable("id") String id){ + public Result get(@PathVariable("id") String id) { PaUserDTO data = paUserService.get(id); return new Result().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 saveUser(@RequestBody WxMpUser wxMpUser) { + return new Result().ok(paUserService.saveUser(wxMpUser)); + } + + /** + * @param phone + * @return + * @Author sun + * @Description 根据手机号查询公众号用户基本信息,校验用户是否存在 + **/ + @PostMapping(value = "/checkpauser/{phone}") + public Result checkPaUser(@PathVariable("phone") String phone) { + return new Result().ok(paUserService.checkPaUser(phone)); + } + } \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PaUserVisitedController.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PaUserVisitedController.java index c89fee64a4..16f5caab3a 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PaUserVisitedController.java +++ b/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(); + } + } \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaCustomerDao.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaCustomerDao.java index 7dc41a284b..ac4f9cd20f 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaCustomerDao.java +++ b/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 { - + + /** + * @param userId + * @return + * @Author sun + * @Description 公众号-根据userId查询用户对应的客户信息 + **/ + List selectCustomerByUserId(@Param("userId") String userId); } \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaUserDao.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaUserDao.java index 858ac17cb2..2ced9f5760 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaUserDao.java +++ b/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 { - + + /** + * @param phone + * @return + * @Author sun + * @Description 根据手机号查询公众号用户基本信息,校验用户是否存在 + **/ + List selectUserByPhone(@Param("phone") String phone); } \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaUserWechatDao.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaUserWechatDao.java index 29e11cb876..8d3f6a6351 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaUserWechatDao.java +++ b/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 { - + + /** + * @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); } \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/CustomerMpEntity.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/CustomerMpEntity.java index f5773ca85f..30ba4b4b15 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/CustomerMpEntity.java +++ b/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; - } diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/PaUserWechatEntity.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/PaUserWechatEntity.java index 61cb92e0b8..c618051cb8 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/PaUserWechatEntity.java +++ b/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; - /** * 语言 */ diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/excel/CustomerMpExcel.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/excel/CustomerMpExcel.java index b4f62eb57f..5c9549a265 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/excel/CustomerMpExcel.java +++ b/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; diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/excel/PaUserWechatExcel.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/excel/PaUserWechatExcel.java index 2e7b5ba12d..1ddb2bf024 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/excel/PaUserWechatExcel.java +++ b/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; diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaCustomerService.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaCustomerService.java index 65586defbf..9bb1547dcf 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaCustomerService.java +++ b/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 { * @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); + } \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserService.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserService.java index b55098f052..c9208eef81 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserService.java +++ b/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 { * @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); } \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserVisitedService.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserVisitedService.java index 130e9d693c..d67c581dea 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserVisitedService.java +++ b/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 { * @date 2020-07-09 */ void delete(String[] ids); + + /** + * @param visited + * @return + * @Author sun + * @Description 用户登陆,新增访问记录数据 + **/ + void saveUserVisited(SaveUserVisitedFormDTO visited); } \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserWechatService.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserWechatService.java index 1a613c796d..31c520d793 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserWechatService.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserWechatService.java @@ -92,4 +92,12 @@ public interface PaUserWechatService extends BaseService { * @date 2020-07-09 */ void delete(String[] ids); + + /** + * @param openId + * @return + * @Author sun + * @Description 根据openId查询user_wechat表信息 + **/ + PaUserWechatDTO getWechatByOpenId(String openId); } \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaCustomerServiceImpl.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaCustomerServiceImpl.java index c1dc9b68f5..7c51bfadc2 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaCustomerServiceImpl.java +++ b/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 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 page(Map params) { @@ -101,4 +131,81 @@ public class PaCustomerServiceImpl extends BaseServiceImpl 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; + } + + + } \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserServiceImpl.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserServiceImpl.java index d902604396..30cd0baed0 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserServiceImpl.java +++ b/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 @Autowired private PaUserRedis paUserRedis; + @Autowired + private PaUserWechatService paUserWechatService; + @Autowired + private PaCustomerDao paCustomerDao; @Override public PageData page(Map params) { @@ -101,4 +114,80 @@ public class PaUserServiceImpl extends BaseServiceImpl 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 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 customerList = paCustomerDao.selectCustomerByUserId(dto.getId()); + + resultDTO.setPaUserResult(dto); + resultDTO.setPaCustomerResult(customerList.size() > NumConstant.ZERO ? customerList.get(NumConstant.ZERO) : new PaCustomerDTO()); + + return resultDTO; + } + } \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserVisitedServiceImpl.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserVisitedServiceImpl.java index fd00039467..2071fde88f 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserVisitedServiceImpl.java +++ b/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 page(Map params) { @@ -101,4 +107,35 @@ public class PaUserVisitedServiceImpl extends BaseServiceImpl + \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PaUserDao.xml b/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PaUserDao.xml index 505b33576c..56db230fa9 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PaUserDao.xml +++ b/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PaUserDao.xml @@ -3,5 +3,17 @@ + \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PaUserWechatDao.xml b/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PaUserWechatDao.xml index a6e8b4ce94..8f77d5598e 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PaUserWechatDao.xml +++ b/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PaUserWechatDao.xml @@ -3,5 +3,48 @@ + + + \ No newline at end of file