Browse Source

获取用户详情

dev
zxc 3 years ago
parent
commit
bc89d8cc35
  1. 2
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/OpenSyncBizDataDTO.java
  2. 28
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/ExemptLoginUserDetailFormDTO.java
  3. 5
      epmet-module/epmet-third/epmet-third-server/pom.xml
  4. 13
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/dingtalk/CallbackController.java
  5. 7
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/OpenSyncBizDataDao.java
  6. 2
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/OpenSyncBizDataEntity.java
  7. 14
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/DingTalkService.java
  8. 78
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/DingTalkServiceImpl.java
  9. 12
      epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/OpenSyncBizDataDao.xml

2
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/OpenSyncBizDataDTO.java

@ -27,6 +27,8 @@ public class OpenSyncBizDataDTO implements Serializable {
*/
private String subscribeId;
private String suiteKey;
/**
* 第三方企业应用的corpid
*/

28
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/ExemptLoginUserDetailFormDTO.java

@ -0,0 +1,28 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2022/9/14 14:52
* @DESC
*/
@Data
public class ExemptLoginUserDetailFormDTO implements Serializable {
private static final long serialVersionUID = -4333806195203619201L;
public interface ExemptLoginUserDetailForm{}
@NotBlank(message = "code不能为空",groups = ExemptLoginUserDetailForm.class)
private String code;
@NotBlank(message = "corpId不能为空",groups = ExemptLoginUserDetailForm.class)
private String corpId;
@NotBlank(message = "miniAppId不能为空",groups = ExemptLoginUserDetailForm.class)
private String miniAppId;
}

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

@ -167,6 +167,11 @@
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibaba-dingtalk-service-sdk</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
<build>

13
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/dingtalk/CallbackController.java

@ -4,10 +4,14 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.dingtalk.util.DingCallbackCrypto;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dao.OpenSyncBizDataDao;
import com.epmet.dto.DingMiniInfoDTO;
import com.epmet.dto.form.ExemptLoginUserDetailFormDTO;
import com.epmet.entity.OpenSyncBizDataEntity;
import com.epmet.redis.DingDingCallbackRedis;
import com.epmet.service.DingTalkService;
import com.epmet.service.OpenSyncBizDataService;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
@ -56,6 +60,8 @@ public class CallbackController {
private OpenSyncBizDataDao openSyncBizDataDao;
@Autowired
private DingDingCallbackRedis dingCallbackRedis;
@Autowired
private DingTalkService dingTalkService;
@PostMapping(value = "dingCallback")
public Object dingCallback(
@ -99,6 +105,7 @@ public class CallbackController {
List<OpenSyncBizDataEntity> list = new ArrayList<>();
bizData.forEach(b -> {
OpenSyncBizDataEntity e = new OpenSyncBizDataEntity();
e.setSuiteKey(suiteKey);
e.setSubscribeId(b.get("subscribe_id").toString());
e.setCorpId(b.get("corp_id").toString());
e.setBizId(b.get("biz_id").toString());
@ -125,4 +132,10 @@ public class CallbackController {
return "fail";
}
}
@PostMapping("getExemptLoginUserDetail")
public Result<Object> getExemptLoginUserDetail(@RequestBody ExemptLoginUserDetailFormDTO formDTO){
ValidatorUtils.validateEntity(formDTO, ExemptLoginUserDetailFormDTO.ExemptLoginUserDetailForm.class);
return new Result<Object>().ok(dingTalkService.getExemptLoginUserDetail(formDTO));
}
}

7
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/OpenSyncBizDataDao.java

@ -2,10 +2,13 @@ package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.DingMiniInfoDTO;
import com.epmet.dto.OpenSyncBizDataDTO;
import com.epmet.entity.OpenSyncBizDataEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
*
*
@ -17,6 +20,10 @@ public interface OpenSyncBizDataDao extends BaseDao<OpenSyncBizDataEntity> {
DingMiniInfoDTO getDingMiniInfo(@Param("suiteKey")String suiteKey);
DingMiniInfoDTO getDingMiniInfoByAppId(@Param("miniAppId")String miniAppId);
Integer delOpenSyncData(OpenSyncBizDataEntity e);
List<OpenSyncBizDataDTO> getOpenSyncData(@Param("suiteKey")String suiteKey, @Param("bizType")String bizType,@Param("corpId")String corpId);
}

2
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/OpenSyncBizDataEntity.java

@ -23,6 +23,8 @@ public class OpenSyncBizDataEntity extends BaseEpmetEntity {
*/
private String subscribeId;
private String suiteKey;
/**
* 第三方企业应用的corpid
*/

14
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/DingTalkService.java

@ -0,0 +1,14 @@
package com.epmet.service;
import com.epmet.dto.form.ExemptLoginUserDetailFormDTO;
/**
* @Author zxc
* @DateTime 2022/9/14 14:56
* @DESC
*/
public interface DingTalkService {
Object getExemptLoginUserDetail(ExemptLoginUserDetailFormDTO formDTO);
}

78
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/DingTalkServiceImpl.java

@ -0,0 +1,78 @@
package com.epmet.service.impl;
import com.alibaba.fastjson.JSON;
import com.aliyun.dingtalk.module.Result;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiV2UserGetRequest;
import com.dingtalk.api.request.OapiV2UserGetuserinfoRequest;
import com.dingtalk.api.response.OapiV2UserGetResponse;
import com.dingtalk.api.response.OapiV2UserGetuserinfoResponse;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.dao.OpenSyncBizDataDao;
import com.epmet.dto.DingMiniInfoDTO;
import com.epmet.dto.form.ExemptLoginUserDetailFormDTO;
import com.epmet.redis.DingDingCallbackRedis;
import com.epmet.service.DingTalkService;
import com.taobao.api.ApiException;
import com.taobao.dingtalk.client.DingTalkClientToken;
import com.taobao.dingtalk.vo.result.AccessTokenResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* @Author zxc
* @DateTime 2022/9/14 14:57
* @DESC
*/
@Service
@Slf4j
public class DingTalkServiceImpl implements DingTalkService {
@Autowired
private DingTalkClientToken dingTalkClientToken;
@Autowired
private OpenSyncBizDataDao openSyncBizDataDao;
@Autowired
private DingDingCallbackRedis dingCallbackRedis;
@Override
public Object getExemptLoginUserDetail(ExemptLoginUserDetailFormDTO formDTO) {
DingMiniInfoDTO dingMiniInfo = openSyncBizDataDao.getDingMiniInfoByAppId(formDTO.getMiniAppId());
Result<AccessTokenResult> isvAccessTokenToken = dingTalkClientToken.getIsvAccessTokenToken(formDTO.getCorpId(), dingMiniInfo.getSuiteKey(), dingMiniInfo.getSuiteSecret(), dingCallbackRedis.get(dingMiniInfo.getSuiteKey()));
if (!isvAccessTokenToken.success()){
throw new EpmetException("获取accessToken失败...");
}
String accessToken = isvAccessTokenToken.getData().getAccessToken();
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getuserinfo");
OapiV2UserGetuserinfoRequest req = new OapiV2UserGetuserinfoRequest();
req.setCode(formDTO.getCode());
Object o = new Object();
try {
OapiV2UserGetuserinfoResponse rsp = client.execute(req, accessToken);
Map<String,Object> map = JSON.parseObject(rsp.getBody(), Map.class);
if (!map.containsValue("ok")){
throw new EpmetException("通过免登码获取用户信息失败...");
}
Map<String,Object> userInfo = JSON.parseObject(map.get("result").toString(), Map.class);
DingTalkClient userDetailClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get");
OapiV2UserGetRequest userDetailRequest = new OapiV2UserGetRequest();
userDetailRequest.setUserid(userInfo.get("userid").toString());
userDetailRequest.setLanguage("zh_CN");
OapiV2UserGetResponse execute = userDetailClient.execute(userDetailRequest, accessToken);
Map<String,Object> userDetailResult = JSON.parseObject(execute.getBody(), Map.class);
if (!userDetailResult.containsValue("ok")){
throw new EpmetException("查询用户详情失败...");
}
o = userDetailResult.get("result");
} catch (ApiException e) {
log.error(e.getMessage());
e.printStackTrace();
}
return o;
}
}

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

@ -15,4 +15,16 @@
<select id="getDingMiniInfo" resultType="com.epmet.dto.DingMiniInfoDTO">
select * from ding_mini_info where del_flag = 0 and suite_key = #{suiteKey}
</select>
<select id="getDingMiniInfoByAppId" resultType="com.epmet.dto.DingMiniInfoDTO">
select * from ding_mini_info where del_flag = 0 and mini_app_id = #{miniAppId}
</select>
<select id="getOpenSyncData" resultType="com.epmet.dto.OpenSyncBizDataDTO">
select * FROM open_sync_biz_data
where del_flag = 0
and biz_type = #{bizType}
and suite_key = #{suiteKey}
<if test='null != corpId and corpId != "" '>
and corp_id = #{corpId}
</if>
</select>
</mapper>
Loading…
Cancel
Save