package com.ruoyi.web.controller.system; 
 | 
  
 | 
import com.ruoyi.common.constant.Constants; 
 | 
import com.ruoyi.common.core.domain.AjaxResult; 
 | 
import com.ruoyi.common.core.domain.entity.SysMenu; 
 | 
import com.ruoyi.common.core.domain.entity.SysUser; 
 | 
import com.ruoyi.common.core.domain.entity.SysUserDept; 
 | 
import com.ruoyi.common.core.domain.model.LoginBody; 
 | 
import com.ruoyi.common.exception.base.BaseException; 
 | 
import com.ruoyi.common.utils.RSAPublicKeyExample; 
 | 
import com.ruoyi.common.utils.SecurityUtils; 
 | 
import com.ruoyi.common.utils.StringUtils; 
 | 
import com.ruoyi.framework.web.service.SysLoginService; 
 | 
import com.ruoyi.framework.web.service.SysPermissionService; 
 | 
import com.ruoyi.system.service.ISysConfigService; 
 | 
import com.ruoyi.system.service.ISysDeptService; 
 | 
import com.ruoyi.system.service.ISysMenuService; 
 | 
import com.smartor.mapper.SysUserDeptMapper; 
 | 
import com.smartor.service.impl.ServiceSLTDHealthcareRecordServiceImpl; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.beans.factory.annotation.Value; 
 | 
import org.springframework.http.HttpStatus; 
 | 
import org.springframework.web.bind.annotation.*; 
 | 
import org.springframework.web.servlet.view.RedirectView; 
 | 
  
 | 
import javax.servlet.http.HttpServletResponse; 
 | 
import java.io.IOException; 
 | 
import java.util.HashMap; 
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
import java.util.Set; 
 | 
  
 | 
/** 
 | 
 * 登录验证 
 | 
 * 
 | 
 * @author ruoyi 
 | 
 */ 
 | 
@Slf4j 
 | 
@RestController 
 | 
public class SysLoginController { 
 | 
    @Autowired 
 | 
    private SysLoginService loginService; 
 | 
  
 | 
    @Autowired 
 | 
    private ISysMenuService menuService; 
 | 
  
 | 
    @Autowired 
 | 
    private ISysDeptService sysDeptService; 
 | 
  
 | 
    @Autowired 
 | 
    private SysPermissionService permissionService; 
 | 
  
 | 
    @Autowired 
 | 
    private ISysConfigService sysConfigService; 
 | 
  
 | 
  
 | 
    @Value("${pri_key}") 
 | 
    private String pri_key; 
 | 
  
 | 
    @Value("${isEncryp}") 
 | 
    private Integer isEncryp; 
 | 
  
 | 
  
 | 
    @Value("${sltd_pub_path}") 
 | 
    private String sltdPubPath; 
 | 
  
 | 
  
 | 
    @Value("${spring.profiles.active}") 
 | 
    private String active; 
 | 
  
 | 
    @Autowired 
 | 
    private SysUserDeptMapper sysUserDeptMapper; 
 | 
  
 | 
    /** 
 | 
     * 登录方法 
 | 
     * 
 | 
     * @param loginBody 登录信息 
 | 
     * @return 结果 
 | 
     */ 
 | 
    @PostMapping("/login") 
 | 
    public AjaxResult login(@RequestBody LoginBody loginBody) { 
 | 
        AjaxResult ajax = AjaxResult.success(); 
 | 
        // 生成令牌 
 | 
        String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), loginBody.getUuid(), loginBody.getOrgid()); 
 | 
        ajax.put(Constants.TOKEN, token); 
 | 
        return ajax; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 单点登录方法(需要配置IP白名单) 
 | 
     * 需要在sys_config表的sys.ip.whitelis中,加入IP才能访问该方法 
 | 
     * <p> 
 | 
     * 参数同时为空,不给查询数据 
 | 
     * <p> 
 | 
     * 【入参规则】 
 | 
     * 如果userName不为空,那orgid也不能为空 
 | 
     * 如果上面两个为空,那token不能为空 
 | 
     * 
 | 
     * @return 结果 
 | 
     */ 
 | 
//    @IpWhitelist 
 | 
    @GetMapping("/SSOLogin") 
 | 
    public RedirectView SSOLogin(@RequestParam(required = false) String userName, @RequestParam(required = false) String orgid, @RequestParam(required = false) String deptId, @RequestParam(required = false) String token) { 
 | 
        if (StringUtils.isEmpty(userName) && StringUtils.isEmpty(token)) { 
 | 
            throw new BaseException("参数不能为空"); 
 | 
        } 
 | 
        log.info("--------进方法了吗?{}", token); 
 | 
        // 重定向地址对象(重定向地址 
 | 
        RedirectView redirectView = new RedirectView(); 
 | 
//        if (active.equals("sltd")) { 
 | 
//            Map<String, String> headers = buildRequestHeaders(); 
 | 
//            Map<String, String> requestParams = new HashMap<>(); 
 | 
//            requestParams.put("token", token); 
 | 
//            String reqData = HttpUtil.postFormRequest(sltdPubPath + "/checkSsoTokenId", requestParams, headers, null); 
 | 
//            log.info("【-----返回的结果为】:{}", reqData); 
 | 
//            if (StringUtils.isEmpty(reqData)) { 
 | 
//                throw new BaseException("token验证失败"); 
 | 
//            } 
 | 
// 
 | 
//            Map<String, Object> map = JSONObject.parseObject(reqData, Map.class); 
 | 
//            if (ObjectUtils.isEmpty(map) || (Integer) map.get("code") != 200) { 
 | 
//                throw new BaseException("token验证失败"); 
 | 
//            } 
 | 
// 
 | 
//            Map<String, Object> data = (Map<String, Object>) map.get("data"); 
 | 
//            //员工编码 
 | 
//            userName = (String) data.get("accountNo"); 
 | 
//        } 
 | 
        log.info("【-----------userName的值为:{}】", userName); 
 | 
        // 生成令牌 
 | 
        if (StringUtils.isEmpty(userName) || StringUtils.isEmpty(orgid)) { 
 | 
            throw new BaseException("用户名或组织机构或部门不能为空"); 
 | 
        } 
 | 
        if (isEncryp != null && isEncryp == 1) { 
 | 
            RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample(); 
 | 
            userName = rsaPublicKeyExample.decryptedData(userName, pri_key); 
 | 
        } 
 | 
  
 | 
        String token2 = loginService.loginByUserName(userName + "&" + orgid + "&" + deptId); 
 | 
        if (StringUtils.isEmpty(token2)) { 
 | 
            throw new BaseException("登陆失败"); 
 | 
        } 
 | 
  
 | 
        String path = sysConfigService.selectConfigByKey("sys.qddz"); 
 | 
        if (StringUtils.isEmpty(path)) { 
 | 
            throw new BaseException("请配置前端地址"); 
 | 
        } 
 | 
        log.info("单点登陆重定向地址为:{}", path + "/loginSSO?token=" + token2 + "&orgid=" + orgid + "&orgname=''" + "&ZuHuID=''&deptCode=''"); 
 | 
        redirectView.setUrl(path + "/loginSSO?token=" + token2 + "&orgid=" + orgid + "&orgname=null" + "&ZuHuID=null&deptCode=null"); 
 | 
        redirectView.setStatusCode(HttpStatus.MOVED_PERMANENTLY); 
 | 
        return redirectView; 
 | 
    } 
 | 
  
 | 
  
 | 
    @GetMapping("/getToken") 
 | 
    public void getToken(HttpServletResponse response) throws IOException { 
 | 
        // 生成或获取token 
 | 
        String token = "eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjRiZGRkMTI0LTViNWMtNDhmMC05YjNkLTA0YjFiMzU0Nzg5NSJ9.16hHNas7jXTlHVrnlZgAJ-YViD44YkKFuoxJxMPm5QLPeSHn3wRyd9xE0Bi7YMdO3zKcZNo6ef5diZvDWN7ImA"; 
 | 
        // 设置响应头,前端可以从响应头获取token 
 | 
        response.addHeader("Authorization", "Bearer " + token); 
 | 
  
 | 
        // 如果需要进行页面跳转,可以设置状态码为302,并设置Location头部 
 | 
        response.setStatus(302); 
 | 
        response.setHeader("Location", "http://localhost:8099/tool/module/classifythreea"); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取用户信息 
 | 
     * 
 | 
     * @return 用户信息 
 | 
     */ 
 | 
    @GetMapping("getInfo") 
 | 
    public AjaxResult getInfo() { 
 | 
        SysUser user = SecurityUtils.getLoginUser().getUser(); 
 | 
        // 角色集合 
 | 
        Set<String> roles = permissionService.getRolePermission(user); 
 | 
        // 权限集合 
 | 
        Set<String> permissions = permissionService.getMenuPermission(user); 
 | 
        AjaxResult ajax = AjaxResult.success(); 
 | 
        ajax.put("user", user); 
 | 
        ajax.put("roles", roles); 
 | 
        ajax.put("permissions", permissions); 
 | 
        List<SysUserDept> sysUserDeptKSs = null; 
 | 
        List<SysUserDept> sysUserDeptBQs = null; 
 | 
        SysUserDept sysUserDept = new SysUserDept(); 
 | 
        sysUserDept.setUserId(user.getUserId()); 
 | 
        sysUserDept.setDeptType("1"); 
 | 
        sysUserDept.setOrgid(user.getOrgid()); 
 | 
        sysUserDeptKSs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept); 
 | 
        ajax.put("belongDepts", sysUserDeptKSs); 
 | 
        sysUserDept.setDeptType("2"); 
 | 
        sysUserDeptBQs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept); 
 | 
        ajax.put("belongWards", sysUserDeptBQs); 
 | 
  
 | 
        return ajax; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取路由信息 
 | 
     * 
 | 
     * @return 路由信息 
 | 
     */ 
 | 
    @GetMapping("getRouters") 
 | 
    public AjaxResult getRouters() { 
 | 
        Long userId = SecurityUtils.getUserId(); 
 | 
        log.info("----------getRouters的userId入参为:{}", userId); 
 | 
        List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId); 
 | 
        return AjaxResult.success(menuService.buildMenus(menus)); 
 | 
    } 
 | 
  
 | 
    @GetMapping("/getDept/{orgid}") 
 | 
    public AjaxResult getDept(@PathVariable String orgid) { 
 | 
        return AjaxResult.success(sysDeptService.selectDept(orgid)); 
 | 
    } 
 | 
  
 | 
  
 | 
    private Map<String, String> buildRequestHeaders() { 
 | 
        Map<String, String> headers = new HashMap<>(); 
 | 
//        headers.put("Content-Type", "application/json"); 
 | 
        headers.put("app-key", ServiceSLTDHealthcareRecordServiceImpl.APP_KEY); 
 | 
        return headers; 
 | 
    } 
 | 
} 
 |