forked from gzzfw/backEnd/gz-dyh

liyj
2024-09-13 b08e66572bfcefea2e10c1213030b7d533c3ae46
1、网格化平台单点登录功能
4 files added
4 files modified
237 ■■■■■ changed files
dyh-gateway/src/main/resources/config/application.yml 2 ●●● patch | view | raw | blame | history
dyh-service/dyh-base/src/main/java/cn/huge/module/sys/dto/GridTokenBaseDTO.java 8 ●●●●● patch | view | raw | blame | history
dyh-service/dyh-base/src/main/java/cn/huge/module/sys/dto/GridUserBaseDTO.java 29 ●●●●● patch | view | raw | blame | history
dyh-service/dyh-cust/src/main/java/cn/huge/module/client/api/SysClient.java 37 ●●●●● patch | view | raw | blame | history
dyh-service/dyh-cust/src/main/java/cn/huge/module/client/api/impl/SysClientImpl.java 64 ●●●●● patch | view | raw | blame | history
dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtAccountWebController.java 17 ●●●●● patch | view | raw | blame | history
dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtAccountService.java 72 ●●●●● patch | view | raw | blame | history
dyh-service/dyh-sys/src/main/java/cn/huge/module/grid/controller/GridUserInfoController.java 8 ●●●●● patch | view | raw | blame | history
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
dyh-service/dyh-base/src/main/java/cn/huge/module/sys/dto/GridTokenBaseDTO.java
New file
@@ -0,0 +1,8 @@
package cn.huge.module.sys.dto;
import lombok.Data;
@Data
public class GridTokenBaseDTO {
    private String token;
}
dyh-service/dyh-base/src/main/java/cn/huge/module/sys/dto/GridUserBaseDTO.java
New file
@@ -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;
}
dyh-service/dyh-cust/src/main/java/cn/huge/module/client/api/SysClient.java
New file
@@ -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);
}
dyh-service/dyh-cust/src/main/java/cn/huge/module/client/api/impl/SysClientImpl.java
New file
@@ -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;
    }
}
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());
        }
    }
}
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);
        }
    }
}
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));
    }
}