From b08e66572bfcefea2e10c1213030b7d533c3ae46 Mon Sep 17 00:00:00 2001
From: liyj <1003249715@qq.com>
Date: Fri, 13 Sep 2024 17:07:05 +0800
Subject: [PATCH] 1、网格化平台单点登录功能
---
dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtAccountService.java | 72 +++++++++++++++++
dyh-gateway/src/main/resources/config/application.yml | 2
dyh-service/dyh-cust/src/main/java/cn/huge/module/client/api/impl/SysClientImpl.java | 64 ++++++++++++++++
dyh-service/dyh-sys/src/main/java/cn/huge/module/grid/controller/GridUserInfoController.java | 8 +
dyh-service/dyh-base/src/main/java/cn/huge/module/sys/dto/GridTokenBaseDTO.java | 8 ++
dyh-service/dyh-cust/src/main/java/cn/huge/module/client/api/SysClient.java | 37 +++++++++
dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtAccountWebController.java | 17 ++++
dyh-service/dyh-base/src/main/java/cn/huge/module/sys/dto/GridUserBaseDTO.java | 29 +++++++
8 files changed, 232 insertions(+), 5 deletions(-)
diff --git a/dyh-gateway/src/main/resources/config/application.yml b/dyh-gateway/src/main/resources/config/application.yml
index ec6f5e9..0fa1de3 100644
--- a/dyh-gateway/src/main/resources/config/application.yml
+++ b/dyh-gateway/src/main/resources/config/application.yml
@@ -54,5 +54,5 @@
#refreshToken过期时间:13小时,比token时间长一点
expire-time: 46800000
#不进行token拦截
- auth-skip-urls: /dyh-cust/api/web/ctAccount/login,/dyh-sys/api/v1/sync/universalSync,/dyh-utils/api/web/caseUtils/getNewTimeId,/dyh-utils/api/web/caseUtils/getNewTimeCaseId,/dyh-sys/api/web/fileInfo/show,/dyh-sys/api/web/fileInfo/down,/dyh-sys/api/wechat/fileInfo/show,/dyh-sys/api/wechat/fileInfo/down,/dyh-cust/api/wechat/paAccount/empower
+ auth-skip-urls: /dyh-cust/api/web/ctAccount/login,/dyh-sys/api/v1/sync/universalSync,/dyh-utils/api/web/caseUtils/getNewTimeId,/dyh-utils/api/web/caseUtils/getNewTimeCaseId,/dyh-sys/api/web/fileInfo/show,/dyh-sys/api/web/fileInfo/down,/dyh-sys/api/wechat/fileInfo/show,/dyh-sys/api/wechat/fileInfo/down,/dyh-cust/api/wechat/paAccount/empower,/dyh-cust/api/web/ctAccount/gridLogin
diff --git a/dyh-service/dyh-base/src/main/java/cn/huge/module/sys/dto/GridTokenBaseDTO.java b/dyh-service/dyh-base/src/main/java/cn/huge/module/sys/dto/GridTokenBaseDTO.java
new file mode 100644
index 0000000..55511c9
--- /dev/null
+++ b/dyh-service/dyh-base/src/main/java/cn/huge/module/sys/dto/GridTokenBaseDTO.java
@@ -0,0 +1,8 @@
+package cn.huge.module.sys.dto;
+
+import lombok.Data;
+
+@Data
+public class GridTokenBaseDTO {
+ private String token;
+}
diff --git a/dyh-service/dyh-base/src/main/java/cn/huge/module/sys/dto/GridUserBaseDTO.java b/dyh-service/dyh-base/src/main/java/cn/huge/module/sys/dto/GridUserBaseDTO.java
new file mode 100644
index 0000000..7ac1ac1
--- /dev/null
+++ b/dyh-service/dyh-base/src/main/java/cn/huge/module/sys/dto/GridUserBaseDTO.java
@@ -0,0 +1,29 @@
+package cn.huge.module.sys.dto;
+
+import lombok.Data;
+
+@Data
+public class GridUserBaseDTO {
+ private String id;
+ /**
+ * 所属网格
+ */
+ private String gridCode;
+ /**
+ * 登录账号
+ */
+ private String account;
+ /**
+ * 登录账号
+ */
+ private String name;
+ /**
+ * 电话
+ */
+ private String mobile;
+ /**
+ * 身份证
+ */
+ private String idNumber;
+
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/client/api/SysClient.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/client/api/SysClient.java
new file mode 100644
index 0000000..ad9c336
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/client/api/SysClient.java
@@ -0,0 +1,37 @@
+package cn.huge.module.client.api;
+
+import cn.huge.base.common.bo.R;
+import cn.huge.base.common.bo.ReturnBO;
+import cn.huge.module.sys.dto.GridTokenBaseDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * @title: 系统服务微服务调用接口
+ * @description: 系统服务微服务调用接口
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2021-11-05 16:51:48
+ * @version: 1.0.0
+ */
+@FeignClient(name = "dyh-sys")
+public interface SysClient {
+
+ /**
+ * 公共id-获取时间Id,后四位常量
+ * @url {ctx}/api/client/custUtils/getNewTimeId
+ * @return Object
+ */
+
+
+ /**
+ * 根据用户token获取用户信息
+ * @url {ctx}/api/thrid/grid/user/get-userinfo
+ * @param gridTokenBaseDTO
+ * @return
+ */
+ @PostMapping("/api/thrid/grid/user/get-userinfo")
+ ReturnBO getUserInfo(@RequestBody GridTokenBaseDTO gridTokenBaseDTO);
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/client/api/impl/SysClientImpl.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/client/api/impl/SysClientImpl.java
new file mode 100644
index 0000000..1f43ebb
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/client/api/impl/SysClientImpl.java
@@ -0,0 +1,64 @@
+package cn.huge.module.client.api.impl;
+
+import cn.huge.base.common.bo.ReturnBO;
+import cn.huge.base.common.constant.ReturnConsts;
+import cn.huge.base.common.exception.ClientException;
+import cn.huge.base.common.exception.ServiceException;
+import cn.huge.module.client.api.SysClient;
+import cn.huge.module.client.api.UtilsClient;
+import cn.huge.module.cust.dto.CtUnitDTO;
+import cn.huge.module.sys.dto.GridTokenBaseDTO;
+import cn.huge.module.sys.dto.GridUserBaseDTO;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * @title: 系统服务微服务调用接口
+ * @description: 系统服务微服务调用接口
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2021-11-05 16:51:48
+ * @version: 1.0.0
+ */
+@Slf4j
+@Component
+public class SysClientImpl {
+
+ private SysClient sysClient;
+
+ /**
+ * ObjectMapper工具类
+ */
+ private ObjectMapper objectMapper = new ObjectMapper();
+
+ @Autowired
+ public SysClientImpl(SysClient sysClient) {
+ this.sysClient = sysClient;
+ }
+
+ /**
+ * 根据用户token获取用户信息
+ * @url {ctx}/api/thrid/grid/user/get-userinfo
+ * @param gridTokenBaseDTO
+ * @return
+ */
+ public GridUserBaseDTO getUserInfo(GridTokenBaseDTO gridTokenBaseDTO){
+ GridUserBaseDTO gridUserBaseDTO = null;
+ try{
+ ReturnBO returnBo = sysClient.getUserInfo(gridTokenBaseDTO);
+ if (ReturnConsts.OK == returnBo.getCode()){
+ gridUserBaseDTO = objectMapper.convertValue(returnBo.getData(), GridUserBaseDTO.class);
+ }else{
+ log.error("Client外服务接口[SysClientImpl.getUserInfo]请求异常:" + returnBo.getMsg(), returnBo.getMsg());
+ throw new ClientException("SysClientImpl.getUserInfo", returnBo.getMsg());
+ }
+ }catch (Exception e){
+ log.error("service方法[SysClientImpl.getUserInfo]调用异常:"+e, e);
+ }
+ return gridUserBaseDTO;
+ }
+
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtAccountWebController.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtAccountWebController.java
index 2abecc2..19a19ef 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtAccountWebController.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtAccountWebController.java
@@ -10,6 +10,7 @@
import cn.huge.module.ctuser.dto.CtAccountLoginDTO;
import cn.huge.module.ctuser.dto.CtCipherDTO;
import cn.huge.module.ctuser.service.CtAccountService;
+import cn.huge.module.sys.dto.GridTokenBaseDTO;
import cn.huge.module.utils.JwtUtils;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
@@ -115,4 +116,20 @@
}
}
+ /**
+ * web端-网格系统单点登录
+ * @url {ctx}/api/web/ctAccount/gridLogin
+ * @param gridTokenBaseDTO 网格系统token
+ * @return Object
+ */
+ @PostMapping(value = "gridLogin")
+ public Object gridLogin(@RequestBody GridTokenBaseDTO gridTokenBaseDTO) {
+ try {
+ ReturnBO returnBO = service.webGridLogin(gridTokenBaseDTO);
+ return returnBO;
+ } catch (Exception e) {
+ return ReturnFailUtils.getRepInfo(e.getMessage());
+ }
+ }
+
}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtAccountService.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtAccountService.java
index f9c4a3d..038f297 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtAccountService.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtAccountService.java
@@ -3,6 +3,7 @@
import cn.huge.base.common.bo.ReturnBO;
import cn.huge.base.common.exception.ServiceException;
import cn.huge.base.common.utils.*;
+import cn.huge.module.client.api.impl.SysClientImpl;
import cn.huge.module.client.api.impl.UtilsClientImpl;
import cn.huge.module.ctuser.dao.mapper.CtAccountMapper;
import cn.huge.module.ctuser.domain.po.CtAccount;
@@ -13,6 +14,8 @@
import cn.huge.module.ctuser.dto.CtUserAddrDTO;
import cn.huge.module.ctuser.dto.UserLoginDTO;
import cn.huge.module.cust.constant.UserBaseConsts;
+import cn.huge.module.sys.dto.GridTokenBaseDTO;
+import cn.huge.module.sys.dto.GridUserBaseDTO;
import cn.huge.module.utils.JwtUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -54,6 +57,8 @@
private CtUserService ctUserService;
@Autowired
private CtUseroleService ctUseroleService;
+ @Autowired
+ private SysClientImpl sysClient;
/**
* 更新对象
@@ -209,7 +214,7 @@
try{
// 判断账号密码是否为空
if (StringUtils.isBlank(ctAccountLoginDTO.getAcc()) || StringUtils.isBlank(ctAccountLoginDTO.getCipher())) {
- return ReturnSucUtils.getRepInfo("账号或密码不能为空", null);
+ return ReturnFailUtils.getRepInfo("账号或密码不能为空");
}
// 判断账号是否存在
CtAccount ctAccount = this.getByAccAndType(ctAccountLoginDTO.getAcc(), UserBaseConsts.ACC_TYPE_1);
@@ -315,4 +320,69 @@
}
}
+ /**
+ * web端-网格系统单点登录
+ * @param gridTokenBaseDTO 网格系统token
+ * @return UserLoginDTO
+ */
+ public ReturnBO webGridLogin(GridTokenBaseDTO gridTokenBaseDTO) {
+ try{
+ GridUserBaseDTO gridUserBaseDTO = sysClient.getUserInfo(gridTokenBaseDTO);
+
+ // 判断账号密码是否为空
+ if (ObjectUtils.isEmpty(gridUserBaseDTO)) {
+ return ReturnFailUtils.getRepInfo("gridToken已失效,请重新登录!");
+ }
+ // 判断账号是否存在
+ CtAccount ctAccount = this.getByAccAndType(gridUserBaseDTO.getAccount(), UserBaseConsts.ACC_TYPE_1);
+ if (ObjectUtils.isNotEmpty(ctAccount)){
+ //返回结果
+ UserLoginDTO userLoginDTO = new UserLoginDTO();
+ CtUser ctUser = ctUserService.getById(ctAccount.getUserId());
+ if (ObjectUtils.isEmpty(ctUser)){
+ return ReturnFailUtils.getRepInfo("用户不存在!");
+ }
+ // 封装用户信息
+ userLoginDTO.setToken(JwtUtils.buildJWT(ctUser.getId()));
+ userLoginDTO.setUserId(ctUser.getId());
+ userLoginDTO.setTrueName(ctUser.getTrueName());
+ userLoginDTO.setUnit(ctUser.getUnitName());
+ userLoginDTO.setDept(ctUser.getDeptName());
+ userLoginDTO.setCustId(ctUser.getCustId());
+ // 登录用户角色
+ List<CtUserole> ctUseroleList = ctUseroleService.listByUserId(ctUser.getId());
+ userLoginDTO.setCtUseroleList(ctUseroleList);
+ // 登录用户地址信息
+ CtUserAddrDTO ctUserAddrDTO = new CtUserAddrDTO();
+ ctUserAddrDTO.setProv(ctUser.getProv());
+ ctUserAddrDTO.setProvName(ctUser.getProvName());
+ ctUserAddrDTO.setCity(ctUser.getCity());
+ ctUserAddrDTO.setCityName(ctUser.getCityName());
+ ctUserAddrDTO.setArea(ctUser.getArea());
+ ctUserAddrDTO.setAreaName(ctUser.getAreaName());
+ ctUserAddrDTO.setRoad(ctUser.getRoad());
+ ctUserAddrDTO.setRoadName(ctUser.getRoadName());
+ ctUserAddrDTO.setVillage(ctUser.getVillage());
+ ctUserAddrDTO.setVillageName(ctUser.getVillageName());
+ userLoginDTO.setCtUserAddrDTO(ctUserAddrDTO);
+ // 最后登录时间
+ Date loginTime = ctAccount.getLoginTime();
+ if (ObjectUtils.isEmpty(ctAccount.getLoginTime())){
+ loginTime = DateUtils.getNowDate();
+ }
+ userLoginDTO.setLastLoginTime(loginTime);
+ // 更新最新登录时间
+ UpdateWrapper<CtAccount> accountUpdateWrapper = new UpdateWrapper<>();
+ accountUpdateWrapper.set("login_time", loginTime).eq("id", ctAccount.getId());
+ this.update(accountUpdateWrapper);
+ return ReturnSucUtils.getRepInfo(userLoginDTO);
+ }else{
+ return ReturnFailUtils.getRepInfo("用户不存在!,请确认后重试!");
+ }
+ }catch (Exception e){
+ log.error("service方法[AccountService.webGridLogin]调用失败,异常信息:"+e, e);
+ throw new ServiceException("CtAccountService.webGridLogin", e);
+ }
+ }
+
}
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/grid/controller/GridUserInfoController.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/grid/controller/GridUserInfoController.java
index 3844603..a8c6501 100644
--- a/dyh-service/dyh-sys/src/main/java/cn/huge/module/grid/controller/GridUserInfoController.java
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/grid/controller/GridUserInfoController.java
@@ -1,6 +1,7 @@
package cn.huge.module.grid.controller;
import cn.huge.base.common.bo.R;
+import cn.huge.base.common.utils.ReturnSucUtils;
import cn.huge.module.grid.domain.vo.GridTokenVo;
import cn.huge.module.grid.domain.vo.GridUserRequestVo;
import cn.huge.module.grid.domain.vo.GridUserVo;
@@ -22,11 +23,12 @@
/**
* 根据用户token获取用户信息
- * @param token
+ * @url {ctx}/api/thrid/grid/user/get-userinfo
+ * @param gridTokenVo
* @return
*/
@PostMapping("/get-userinfo")
- public R<GridUserVo> getUserInfo(@RequestBody GridTokenVo gridTokenVo) {
- return gridUserService.getUserInfo(gridTokenVo);
+ public Object getUserInfo(@RequestBody GridTokenVo gridTokenVo) {
+ return ReturnSucUtils.getRepInfo(gridUserService.getUserInfo(gridTokenVo));
}
}
--
Gitblit v1.8.0