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