From 6a2421ed45403162248cb8257d7f0b71acade289 Mon Sep 17 00:00:00 2001
From: yinzuomei <576302893@qq.com>
Date: Wed, 14 Sep 2022 17:37:58 +0800
Subject: [PATCH] resilogin-ding
---
epmet-auth/pom.xml | 10 +++++
.../main/java/com/epmet/AuthApplication.java | 2 +
.../controller/ThirdLoginController.java | 19 ++++++++++
.../dto/form/ResiDingAppLoginFormDTO.java | 25 +++++++++++++
.../dto/result/ResiDingAppLoginResDTO.java | 20 ++++++++++
.../com/epmet/service/ThirdLoginService.java | 8 ++++
.../service/impl/ThirdLoginServiceImpl.java | 37 +++++++++++++++++++
7 files changed, 121 insertions(+)
create mode 100644 epmet-auth/src/main/java/com/epmet/dto/form/ResiDingAppLoginFormDTO.java
create mode 100644 epmet-auth/src/main/java/com/epmet/dto/result/ResiDingAppLoginResDTO.java
diff --git a/epmet-auth/pom.xml b/epmet-auth/pom.xml
index d14d863674..1822235cdc 100644
--- a/epmet-auth/pom.xml
+++ b/epmet-auth/pom.xml
@@ -138,6 +138,16 @@
epmet-auth-client
2.0.0
+
+ dingtalk-spring-boot-starter
+ com.taobao
+ 1.0.0
+
+
+ commons-codec
+ commons-codec
+ 1.15
+
diff --git a/epmet-auth/src/main/java/com/epmet/AuthApplication.java b/epmet-auth/src/main/java/com/epmet/AuthApplication.java
index 0bf685bd5b..07d85a0d5f 100644
--- a/epmet-auth/src/main/java/com/epmet/AuthApplication.java
+++ b/epmet-auth/src/main/java/com/epmet/AuthApplication.java
@@ -8,6 +8,7 @@
package com.epmet;
+import com.taobao.dingtalk.spring.annotations.EnableDingTalk;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@@ -20,6 +21,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
+@EnableDingTalk
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
diff --git a/epmet-auth/src/main/java/com/epmet/controller/ThirdLoginController.java b/epmet-auth/src/main/java/com/epmet/controller/ThirdLoginController.java
index 144e18d024..917b29de53 100644
--- a/epmet-auth/src/main/java/com/epmet/controller/ThirdLoginController.java
+++ b/epmet-auth/src/main/java/com/epmet/controller/ThirdLoginController.java
@@ -3,6 +3,7 @@ package com.epmet.controller;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.form.*;
+import com.epmet.dto.result.ResiDingAppLoginResDTO;
import com.epmet.dto.result.StaffOrgsResultDTO;
import com.epmet.dto.result.UserTokenResultDTO;
import com.epmet.service.ThirdLoginService;
@@ -116,4 +117,22 @@ public class ThirdLoginController {
return new Result();
}
+ /**
+ *接入流程: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("resilogin-ding")
+ public Result resiLoginDing(@RequestBody ResiDingAppLoginFormDTO formDTO) {
+ ValidatorUtils.validateEntity(formDTO);
+ return new Result().ok(thirdLoginService.resiLoginDing(formDTO));
+ }
+
}
diff --git a/epmet-auth/src/main/java/com/epmet/dto/form/ResiDingAppLoginFormDTO.java b/epmet-auth/src/main/java/com/epmet/dto/form/ResiDingAppLoginFormDTO.java
new file mode 100644
index 0000000000..3e55c44cb3
--- /dev/null
+++ b/epmet-auth/src/main/java/com/epmet/dto/form/ResiDingAppLoginFormDTO.java
@@ -0,0 +1,25 @@
+package com.epmet.dto.form;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @Description
+ * @Author yzm
+ * @Date 2022/9/14 17:11
+ */
+@Data
+public class ResiDingAppLoginFormDTO {
+ /**
+ * 授权统一后的authCode
+ */
+ @NotBlank(message = "authCode不能为空")
+ private String authCode;
+ /**
+ * 第三方企业应用传应用的SuiteSecret
+ */
+ @NotBlank(message = "clientId不能为空")
+ private String clientId;
+}
+
diff --git a/epmet-auth/src/main/java/com/epmet/dto/result/ResiDingAppLoginResDTO.java b/epmet-auth/src/main/java/com/epmet/dto/result/ResiDingAppLoginResDTO.java
new file mode 100644
index 0000000000..83fc4accfe
--- /dev/null
+++ b/epmet-auth/src/main/java/com/epmet/dto/result/ResiDingAppLoginResDTO.java
@@ -0,0 +1,20 @@
+package com.epmet.dto.result;
+
+import lombok.Data;
+
+/**
+ * @Description
+ * @Author yzm
+ * @Date 2022/9/14 17:20
+ */
+@Data
+public class ResiDingAppLoginResDTO {
+ private String authorization;
+ private String customerId;
+ private String gridId;
+ /**
+ *
+ */
+ private String epmetUserId;
+}
+
diff --git a/epmet-auth/src/main/java/com/epmet/service/ThirdLoginService.java b/epmet-auth/src/main/java/com/epmet/service/ThirdLoginService.java
index c79a67d41c..9232fec5e6 100644
--- a/epmet-auth/src/main/java/com/epmet/service/ThirdLoginService.java
+++ b/epmet-auth/src/main/java/com/epmet/service/ThirdLoginService.java
@@ -1,6 +1,7 @@
package com.epmet.service;
import com.epmet.dto.form.*;
+import com.epmet.dto.result.ResiDingAppLoginResDTO;
import com.epmet.dto.result.StaffOrgsResultDTO;
import com.epmet.dto.result.UserTokenResultDTO;
@@ -66,4 +67,11 @@ public interface ThirdLoginService {
* @description 单客户-工作端微信小程序登录-发送验证码
**/
void sendSmsCode(ThirdSendSmsCodeFormDTO formDTO);
+
+ /**
+ * 钉钉应用的登录-居民端
+ * @param formDTO
+ * @return
+ */
+ ResiDingAppLoginResDTO resiLoginDing(ResiDingAppLoginFormDTO formDTO);
}
diff --git a/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java b/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java
index dd48a5577f..a1cd3e8ab7 100644
--- a/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java
+++ b/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java
@@ -32,6 +32,7 @@ import com.epmet.jwt.JwtTokenProperties;
import com.epmet.jwt.JwtTokenUtils;
import com.epmet.redis.CaptchaRedis;
import com.epmet.service.ThirdLoginService;
+import com.taobao.dingtalk.client.DingTalkClientToken;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@@ -73,6 +74,8 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol
private EpmetMessageOpenFeignClient messageOpenFeignClient;
@Autowired
private LoginUserUtil loginUserUtil;
+ @Autowired
+ private DingTalkClientToken dingTalkClientToken;
/**
* @param formDTO
@@ -690,4 +693,38 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol
//getResultDataOrThrowsException(result, ServiceConstant.EPMET_MESSAGE_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "调用Message服务,发送登录事件到MQ失败");
}
+// 接入流程: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 ResiDingAppLoginResDTO resiLoginDing(ResiDingAppLoginFormDTO formDTO) {
+ //获取用户手机号
+ log.info("authCode:"+formDTO.getAuthCode());
+ //todo 调用一下接口
+
+
+ ResiDingAppLoginResDTO resDTO=new ResiDingAppLoginResDTO();
+ resDTO.setCustomerId("45687aa479955f9d06204d415238f7cc");
+ resDTO.setGridId("763d6e09b9081d63195d53da84b3ae3a");
+ resDTO.setEpmetUserId("f838614e67cf8ae0edaefe562b6660e5");
+ //生成token串
+ Map map = new HashMap<>();
+ map.put("app", "resi");
+ map.put("client", "miniding");
+ map.put("userId", resDTO.getEpmetUserId());
+ String token = jwtTokenUtils.createToken(map);
+ resDTO.setAuthorization(token);
+ return resDTO;
+ }
}