Browse Source

/epmetuser/userbaseinfo/dingResiLogin

master
yinzuomei 3 years ago
parent
commit
bffa8e9f35
  1. 2
      epmet-auth/src/main/java/com/epmet/dto/form/ResiDingAppLoginFormDTO.java
  2. 7
      epmet-auth/src/main/java/com/epmet/dto/result/ResiDingAppLoginResDTO.java
  3. 59
      epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java
  4. 79
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/DingMiniAppEnum.java
  5. 60
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/DingLoginResiFormDTO.java
  6. 34
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/DingLoginResiResDTO.java
  7. 16
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java
  8. 19
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java

2
epmet-auth/src/main/java/com/epmet/dto/form/ResiDingAppLoginFormDTO.java

@ -17,7 +17,7 @@ public class ResiDingAppLoginFormDTO {
@NotBlank(message = "authCode不能为空")
private String authCode;
/**
* 第三方企业应用传应用的SuiteSecret
* 第三方企业应用传应用的SuiteKey
*/
@NotBlank(message = "clientId不能为空")
private String clientId;

7
epmet-auth/src/main/java/com/epmet/dto/result/ResiDingAppLoginResDTO.java

@ -31,5 +31,12 @@ public class ResiDingAppLoginResDTO {
* 接口文档https://open.dingtalk.com/document/isvapp-server/dingtalk-retrieve-user-information
*/
private String extInfo;
/**
* 是否注册居民
* true:已注册
* false:未注册
*/
private Boolean regFlag;
}

59
epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java

@ -10,6 +10,7 @@ import com.epmet.common.token.constant.LoginConstant;
import com.epmet.commons.rocketmq.messages.LoginMQMsg;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.enums.DingMiniAppEnum;
import com.epmet.commons.tools.enums.EnvEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
@ -719,7 +720,6 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol
public ResiDingAppLoginResDTO resiLoginDing(ResiDingAppLoginFormDTO formDTO) {
//获取用户手机号
log.info("钉钉居民端应用登录入参:"+ JSON.toJSONString(formDTO));
//todo 调用一下接口
ResiDingAppLoginResDTO resDTO= null;
try {
resDTO = new ResiDingAppLoginResDTO();
@ -732,50 +732,53 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol
resDTO.setCustomerId("45687aa479955f9d06204d415238f7cc");
}
Map<String,String> miniInfo = new HashMap<>();
miniInfo.put("suitew6ccvkquinmrghqy","TooAxiegdsE5BPP6xo1AxK1LdmaUoMpPMyomOcGcBSXtnsxRc8dEfyOlG56oSmEB");
miniInfo.put("suitezhyj12glsrp8em0f","-z5Q_lvMP6l7fTzlArEzUT8D_-5pvqBQaJMuTGHoXnz0nuiqGQMZ8aeya_cxTsN-");
miniInfo.put("suite5yxliro6wawv514w","aQxiPi7DwJSUa9HlbUU_L7Q4wGCLEDmgf__Ffx75cTn3jZwuHy9vdl-9Iv5FeyJU");
miniInfo.put("suitemcestnonr6y0xigc","kKCNCkfDhmLoVnl_wuAiScyDG4776mkTevuSBuiYhHg-Bvz1-vhb_4IA-Km7nK2I");
//获取用户手机号
//1、获取用户手机号
String clientId = formDTO.getClientId();
com.aliyun.dingtalk.module.Result<AccessTokenResult> userAccessToken = dingTalkClientToken.getUserAccessToken(formDTO.getAuthCode(), clientId, miniInfo.get(clientId));
com.aliyun.dingtalk.module.Result<AccessTokenResult> userAccessToken = dingTalkClientToken.getUserAccessToken(formDTO.getAuthCode(), clientId, DingMiniAppEnum.getEnum(clientId).getSuiteSecret());
log.info("resiLoginDing userAccessToken:{}",JSON.toJSONString(userAccessToken));
if (userAccessToken.success() && userAccessToken.getData() != null){
if (!userAccessToken.success() || null == userAccessToken.getData()) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "调用微信api异常:" + JSON.toJSONString(userAccessToken), EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getMsg());
}
com.aliyun.dingtalk.module.Result<UserBaseInfo> me = dingTalkClientUser.getUserInfo("me", userAccessToken.getData().getAccessToken());
log.info("resiLoginDing me:{}",JSON.toJSONString(me));
resDTO.setExtInfo(JSON.toJSONString(me.getData()));
}
// //todo 调用一下接口 调用userfeign接口,拿到用户id以及注册网格id
resDTO.setGridId("763d6e09b9081d63195d53da84b3ae3a");
resDTO.setEpmetUserId("f838614e67cf8ae0edaefe562b6660e5");
//生成token串
Map<String, Object> map = new HashMap<>();
map.put("app", AppClientConstant.APP_RESI);
map.put("client", AppClientConstant.MINI_DING);
map.put("userId", resDTO.getEpmetUserId());
String token = jwtTokenUtils.createToken(map);
// 2、调用userfeign接口获取userId、注册网格相关信息 todo
DingLoginResiFormDTO dingLoginResiFormDTO=ConvertUtils.sourceToTarget(me.getData(),DingLoginResiFormDTO.class);
dingLoginResiFormDTO.setCustomerId(resDTO.getCustomerId());
Result<DingLoginResiResDTO> loginResiResDTOResult = epmetUserOpenFeignClient.dingResiLogin(dingLoginResiFormDTO);
if (!loginResiResDTOResult.success() || null == loginResiResDTOResult.getData()) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "获取epmetUserId异常:" + JSON.toJSONString(loginResiResDTOResult), EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getMsg());
}
DingLoginResiResDTO resiResDTO=loginResiResDTOResult.getData();
resDTO.setGridId(resiResDTO.getGridId());
resDTO.setGridName(resiResDTO.getGridName());
resDTO.setAgencyId(resiResDTO.getAgencyId());
resDTO.setEpmetUserId(resiResDTO.getEpmetUserId());
resDTO.setRegFlag(resiResDTO.getRegFlag());
//3.生成token,并且存放Redis
String token=this.saveTokenDtoDing(AppClientConstant.APP_RESI,AppClientConstant.MINI_DING, resDTO.getEpmetUserId(), resDTO.getCustomerId());
resDTO.setAuthorization(token);
//4.存放Redis
this.saveTokenDtoDing(AppClientConstant.APP_RESI,AppClientConstant.MINI_DING, resDTO.getEpmetUserId(), token, resDTO.getCustomerId());
} catch (ApiException e) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), e.getErrMsg(), EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getMsg());
}
return resDTO;
}
private String saveTokenDtoDing(String app,String client, String userId, String token, String customerId) {
private String saveTokenDtoDing(String app,String client, String userId,String customerId) {
//生成token串
Map<String, Object> map = new HashMap<>();
map.put(AppClientConstant.APP, AppClientConstant.APP_RESI);
map.put(AppClientConstant.CLIENT, AppClientConstant.MINI_DING);
map.put("userId", userId);
String token = jwtTokenUtils.createToken(map);
int expire = jwtTokenProperties.getExpire();
TokenDto tokenDto = new TokenDto();
tokenDto.setCustomerId(customerId);
tokenDto.setApp(AppClientConstant.APP_RESI);
tokenDto.setClient(AppClientConstant.MINI_DING);
tokenDto.setApp(app);
tokenDto.setClient(client);
tokenDto.setUserId(userId);
tokenDto.setToken(token);
tokenDto.setUpdateTime(System.currentTimeMillis());

79
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/DingMiniAppEnum.java

@ -0,0 +1,79 @@
package com.epmet.commons.tools.enums;
/**
* @Description
* @Author yzm
* @Date 2022/9/14 19:11
*/
public enum DingMiniAppEnum {
// 亿联云盘CorpId:dingd1e19e397c754c7735c2f4657eb6378f
//
// //各应用秘钥
// 随手拍
// SuiteId:27501006
// AppId:119450
// MiniAppId:5000000002934668
// SuiteKey:suitew6ccvkquinmrghqy
// SuiteSecret:TooAxiegdsE5BPP6xo1AxK1LdmaUoMpPMyomOcGcBSXtnsxRc8dEfyOlG56oSmEB
//
// 随时讲
// SuiteId:27564007
// AppId:119451
// MiniAppId:5000000002934374
// SuiteKey:suitezhyj12glsrp8em0f
// SuiteSecret:-z5Q_lvMP6l7fTzlArEzUT8D_-5pvqBQaJMuTGHoXnz0nuiqGQMZ8aeya_cxTsN-
//
// 我的报事
// SuiteId:27569006
// AppId:119452
// MiniAppId:5000000002934456
// SuiteKey:suite5yxliro6wawv514w
// SuiteSecret:aQxiPi7DwJSUa9HlbUU_L7Q4wGCLEDmgf__Ffx75cTn3jZwuHy9vdl-9Iv5FeyJU
//
// 实时动态
// SuiteId:27458011
// AppId:119453
// MiniAppId:5000000002934488
// SuiteKey:suitemcestnonr6y0xigc
// SuiteSecret:kKCNCkfDhmLoVnl_wuAiScyDG4776mkTevuSBuiYhHg-Bvz1-vhb_4IA-Km7nK2I
SSP("suitew6ccvkquinmrghqy", "随手拍", "TooAxiegdsE5BPP6xo1AxK1LdmaUoMpPMyomOcGcBSXtnsxRc8dEfyOlG56oSmEB"),
SSJ("suitezhyj12glsrp8em0f", "随时讲", "-z5Q_lvMP6l7fTzlArEzUT8D_-5pvqBQaJMuTGHoXnz0nuiqGQMZ8aeya_cxTsN-"),
MY_REPORT_EVENT("suite5yxliro6wawv514w", "我的报事", "aQxiPi7DwJSUa9HlbUU_L7Q4wGCLEDmgf__Ffx75cTn3jZwuHy9vdl-9Iv5FeyJU"),
SSDT("suitemcestnonr6y0xigc", "实时动态", "kKCNCkfDhmLoVnl_wuAiScyDG4776mkTevuSBuiYhHg-Bvz1-vhb_4IA-Km7nK2I");
private String suiteKey;
private String name;
private String suiteSecret;
DingMiniAppEnum(String suiteKey, String name, String suiteSecret) {
this.suiteKey = suiteKey;
this.name = name;
this.suiteSecret = suiteSecret;
}
public static DingMiniAppEnum getEnum(String suiteKey) {
DingMiniAppEnum[] values = DingMiniAppEnum.values();
for (DingMiniAppEnum value : values) {
if (value.getSuiteKey().equals(suiteKey)) {
return value;
}
}
return null;
}
public String getSuiteKey() {
return suiteKey;
}
public String getName() {
return name;
}
public String getSuiteSecret() {
return suiteSecret;
}
}

60
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/DingLoginResiFormDTO.java

@ -0,0 +1,60 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* @Description 钉钉居民端应用注册 // 接口逻辑:
* // (1)根据clientId去XXX表找到customerId
* // (2)通过1、2拿到手机号之后,根据mobile+customerId去user_base_info表找userId,
* // 是否注册居民:register_relation
* // (3)没有则生成user、user_Base_info表记录
* @Author yzm
* @Date 2022/9/15 9:28
*/
@Data
public class DingLoginResiFormDTO {
public interface AddUserInternalGroup {
}
public interface AddUserShowGroup extends CustomerClientShowGroup {
}
@NotBlank(message = "customerId不能为空", groups = AddUserShowGroup.class)
private String customerId;
// 以下参数是微信返回的
/**
* 头像URL
*/
public String avatarUrl;
/**
* 用户的个人邮箱
*/
public String email;
/**
* 用户的手机号
* 说明 如果要获取用户手机号需要在开发者后台申请个人手机号信息权限如下图
*/
@NotBlank(message = "手机号不能为空", groups = AddUserShowGroup.class)
public String mobile;
/**
* 用户的钉钉昵称
*/
public String nick;
/**
*
*/
public String openId;
/**
* 手机号对应的国家号
*/
public String stateCode;
/**
*
*/
public String unionId;
}

34
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/DingLoginResiResDTO.java

@ -0,0 +1,34 @@
package com.epmet.dto.result;
import lombok.Data;
/**
* @Description
* @Author yzm
* @Date 2022/9/15 9:33
*/
@Data
public class DingLoginResiResDTO {
private String customerId;
private String gridId;
/**
* XXX社区-网格名
*/
private String gridName;
/**
* 网格所属的组织id
*/
private String agencyId;
/**
* 居民端用户id
*/
private String epmetUserId;
/**
* 是否注册居民
* true:已注册
* false:未注册
*/
private Boolean regFlag;
}

16
epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java

@ -885,4 +885,20 @@ public interface EpmetUserOpenFeignClient {
@PostMapping("/epmetuser/icresiuser/updateYlfn")
Result updateYlfn();
/**
* 钉钉居民端登录
* // 接入流程:https://open.dingtalk.com/document/isvapp-server/unified-authorization-suite-access-process
* // 1、获取个人用户token:https://open.dingtalk.com/document/isvapp-server/obtain-user-token
* // 2、获取用户通讯录个人信息:https://open.dingtalk.com/document/isvapp-server/dingtalk-retrieve-user-information
* // 接口逻辑:
* // (1)根据clientId去XXX表找到customerId
* // (2)通过1、2拿到手机号之后,根据mobile+customerId去user_base_info表找userId,
* // 是否注册居民:register_relation
* // (3)没有则生成user、user_Base_info表记录
* @param formDTO
* @return
*/
@PostMapping("/epmetuser/userbaseinfo/dingResiLogin")
Result<DingLoginResiResDTO> dingResiLogin(@RequestBody DingLoginResiFormDTO formDTO);
}

19
epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java

@ -683,4 +683,23 @@ public class EpmetUserOpenFeignClientFallback implements EpmetUserOpenFeignClien
public Result updateYlfn() {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "updateYlfn", null);
}
/**
* 钉钉居民端登录
* // 接入流程:https://open.dingtalk.com/document/isvapp-server/unified-authorization-suite-access-process
* // 1、获取个人用户token:https://open.dingtalk.com/document/isvapp-server/obtain-user-token
* // 2、获取用户通讯录个人信息:https://open.dingtalk.com/document/isvapp-server/dingtalk-retrieve-user-information
* // 接口逻辑:
* // (1)根据clientId去XXX表找到customerId
* // (2)通过1、2拿到手机号之后,根据mobile+customerId去user_base_info表找userId,
* // 是否注册居民:register_relation
* // (3)没有则生成user、user_Base_info表记录
*
* @param formDTO
* @return
*/
@Override
public Result<DingLoginResiResDTO> dingResiLogin(DingLoginResiFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "dingResiLogin", formDTO);
}
}

Loading…
Cancel
Save