|
|
@ -1,5 +1,9 @@ |
|
|
|
package com.elink.esua.epdc.service.impl; |
|
|
|
|
|
|
|
import com.elink.esua.epdc.common.token.dto.TokenDto; |
|
|
|
import com.elink.esua.epdc.common.token.property.TokenPropertise; |
|
|
|
import com.elink.esua.epdc.common.token.util.CpUserDetailRedis; |
|
|
|
import com.elink.esua.epdc.common.token.util.TokenUtil; |
|
|
|
import com.elink.esua.epdc.commons.tools.constant.NumConstant; |
|
|
|
import com.elink.esua.epdc.commons.tools.enums.YesOrNoEnum; |
|
|
|
import com.elink.esua.epdc.commons.tools.exception.RenException; |
|
|
@ -7,11 +11,16 @@ import com.elink.esua.epdc.commons.tools.utils.*; |
|
|
|
import com.elink.esua.epdc.dto.CompleteDeptDTO; |
|
|
|
import com.elink.esua.epdc.dto.UserDTO; |
|
|
|
import com.elink.esua.epdc.dto.epdc.form.EpdcUserRegistFormDTO; |
|
|
|
import com.elink.esua.epdc.dto.form.EpdcAppUserTokenFormDTO; |
|
|
|
import com.elink.esua.epdc.dto.result.EpdcAppAuthorizationDTO; |
|
|
|
import com.elink.esua.epdc.enums.AppUserAuditStateEnum; |
|
|
|
import com.elink.esua.epdc.enums.AppUserRegisterSourceEnum; |
|
|
|
import com.elink.esua.epdc.enums.AppUserRegisterWayEnum; |
|
|
|
import com.elink.esua.epdc.enums.AppUserStateEnum; |
|
|
|
import com.elink.esua.epdc.feign.AdminFeignClient; |
|
|
|
import com.elink.esua.epdc.feign.UserFeignClient; |
|
|
|
import com.elink.esua.epdc.jwt.JwtTokenProperties; |
|
|
|
import com.elink.esua.epdc.jwt.JwtTokenUtils; |
|
|
|
import com.elink.esua.epdc.redis.AppUserRedis; |
|
|
|
import com.elink.esua.epdc.service.AppUserService; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
@ -39,6 +48,9 @@ public class AppUserServiceImpl implements AppUserService { |
|
|
|
@Autowired |
|
|
|
private AppUserRedis appUserRedis; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private CpUserDetailRedis cpUserDetailRedis; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private WxMpService wxMpService; |
|
|
|
|
|
|
@ -48,6 +60,75 @@ public class AppUserServiceImpl implements AppUserService { |
|
|
|
@Autowired |
|
|
|
private UserFeignClient userFeignClient; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private TokenUtil tokenUtil; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private JwtTokenProperties jwtTokenProperties; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private JwtTokenUtils jwtTokenUtils; |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
public Result<EpdcAppAuthorizationDTO> getToken(EpdcAppUserTokenFormDTO formDto) { |
|
|
|
|
|
|
|
WxMpOAuth2AccessToken wxMpOAuth2AccessToken; |
|
|
|
try { |
|
|
|
wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(formDto.getWxCode()); |
|
|
|
} catch (WxErrorException e) { |
|
|
|
log.error("->[getToken]::error[{}]", "解析微信code失败"); |
|
|
|
return new Result().error("解析微信code失败"); |
|
|
|
} |
|
|
|
// 查询当前微信是否已注册用户
|
|
|
|
Result<UserDTO> userInfoResult = userFeignClient.getUserInfoByOpenId(wxMpOAuth2AccessToken.getOpenId()); |
|
|
|
if (!userInfoResult.success()) { |
|
|
|
return new Result().error("查询用户信息失败"); |
|
|
|
} |
|
|
|
|
|
|
|
UserDTO userDto = userInfoResult.getData(); |
|
|
|
EpdcAppAuthorizationDTO authorization = new EpdcAppAuthorizationDTO(); |
|
|
|
// 用户未注册
|
|
|
|
if (null == userDto) { |
|
|
|
authorization.setUserState(AppUserStateEnum.UNREGISTERED.value()); |
|
|
|
return new Result().ok(authorization); |
|
|
|
} |
|
|
|
String state = userDto.getState(); |
|
|
|
String userId = userDto.getId(); |
|
|
|
TokenDto tokenInfo = tokenUtil.getTokenInfo(userId); |
|
|
|
|
|
|
|
// 用户已注册且审核通过,可以正常登录系统
|
|
|
|
if (AppUserAuditStateEnum.AUDIT_SUCCESS.value().equals(state)) { |
|
|
|
// 生成token
|
|
|
|
String token = jwtTokenUtils.generateToken(userId); |
|
|
|
Long expire; |
|
|
|
// 用户已登录过,且用户缓存信息未超时
|
|
|
|
if (null != tokenInfo) { |
|
|
|
tokenUtil.delayToken(userId); |
|
|
|
expire = tokenUtil.getExpire(userId); |
|
|
|
} else { |
|
|
|
expire = (long) jwtTokenProperties.getExpire(); |
|
|
|
} |
|
|
|
|
|
|
|
TokenDto tokenDto = ConvertUtils.sourceToTarget(userDto, TokenDto.class); |
|
|
|
tokenDto.setUserId(userId); |
|
|
|
cpUserDetailRedis.set(tokenDto, expire); |
|
|
|
|
|
|
|
authorization.setUserState(AppUserStateEnum.REGISTERED.value()); |
|
|
|
authorization.setToken(token); |
|
|
|
authorization.setUserId(userId); |
|
|
|
authorization.setExpire(expire); |
|
|
|
return new Result().ok(authorization); |
|
|
|
} |
|
|
|
|
|
|
|
// 用户提交注册、正在等待审核或审核失败
|
|
|
|
if (AppUserAuditStateEnum.UNDER_AUDIT.value().equals(state)) { |
|
|
|
authorization.setUserState(AppUserStateEnum.UNDER_AUDIT.value()); |
|
|
|
} else if (AppUserAuditStateEnum.AUDIT_FAILURE.value().equals(state)) { |
|
|
|
authorization.setUserState(AppUserStateEnum.AUDIT_FAILURE.value()); |
|
|
|
} |
|
|
|
return new Result().ok(authorization); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public Result userRegist(EpdcUserRegistFormDTO formDto) { |
|
|
@ -116,6 +197,8 @@ public class AppUserServiceImpl implements AppUserService { |
|
|
|
.concat(NumConstant.ZERO_STR.equals(user.getSex()) ? "女士" : "先生") |
|
|
|
); |
|
|
|
|
|
|
|
user.setDistrict(completeDept.getDistrict()); |
|
|
|
user.setDistrictId(completeDept.getDistrictId()); |
|
|
|
user.setStreet(completeDept.getStreet()); |
|
|
|
user.setStreetId(completeDept.getStreetId()); |
|
|
|
user.setCommunity(completeDept.getCommunity()); |
|
|
@ -126,11 +209,13 @@ public class AppUserServiceImpl implements AppUserService { |
|
|
|
String address = formDto.getRoad() |
|
|
|
.concat(StringUtils.isNotBlank(formDto.getVillageName()) ? formDto.getVillageName() : "") |
|
|
|
.concat(StringUtils.isNotBlank(formDto.getBuildingCode()) ? formDto.getBuildingCode().concat("号楼") : "") |
|
|
|
.concat(StringUtils.isNotBlank(formDto.getUnitCode()) ? formDto.getUnitCode().concat("单元") : ""); |
|
|
|
|
|
|
|
.concat(StringUtils.isNotBlank(formDto.getUnitCode()) ? formDto.getUnitCode().concat("单元") : "") |
|
|
|
.concat(StringUtils.isNotBlank(formDto.getHouseCode()) ? formDto.getHouseCode() : ""); |
|
|
|
user.setAddress(address); |
|
|
|
|
|
|
|
user.setWxOpenId(wxMpUser.getOpenId()); |
|
|
|
user.setFaceImg(wxMpUser.getHeadImgUrl()); |
|
|
|
|
|
|
|
user.setRegisterTime(new Date()); |
|
|
|
user.setState(AppUserAuditStateEnum.UNDER_AUDIT.value()); |
|
|
|
user.setPartyFlag(YesOrNoEnum.NO.value()); |
|
|
|