修改多租户功能

dev_xd
lj7788@126.com 2025-01-11 17:14:40 +08:00
parent 1492f4ce31
commit 3d7ce9ea79
13 changed files with 195 additions and 29 deletions

View File

@ -27,6 +27,7 @@ public interface SysUserComMapper
*/ */
public int updateActive (SysUserCom sysUserCom); public int updateActive (SysUserCom sysUserCom);
public int insertUserCom(SysUserCom sysUserCom);
/** /**
* *
* @param sysUserCom * @param sysUserCom
@ -35,4 +36,6 @@ public interface SysUserComMapper
public int updateStatus (SysUserCom sysUserCom); public int updateStatus (SysUserCom sysUserCom);
public int updateActiveTo0(SysUserCom sysUserCom); public int updateActiveTo0(SysUserCom sysUserCom);
public List<SysUserCom> selectAdminComs();
} }

View File

@ -49,4 +49,7 @@ public interface SysUserExtMapper
public int deleteSysUserExtById(SysUserExt sysUserExt); public int deleteSysUserExtById(SysUserExt sysUserExt);
public int clearAllActive(SysUserExt userExt);
public int setActive(SysUserExt userExt);
} }

View File

@ -350,7 +350,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</update> </update>
<select id="selectMyProjectList" parameterType="ProProjectInfo" resultMap="ProProjectInfoResult"> <select id="selectMyProjectList" parameterType="ProProjectInfo" resultMap="ProProjectInfoResult">
select pi.id, pi.com_id, pi.dis_dept_id, pi.project_name, select pi.id, pi.com_id, pi.dis_dept_id, pi.project_name,sd.dept_name com_name,
pi.project_code, pi.simple_name, pi.project_type, sdd1.dict_label as project_type_name, pi.project_level, pi.project_regional, pi.project_package, pi.project_address, pi.project_nature, pi.project_code, pi.simple_name, pi.project_type, sdd1.dict_label as project_type_name, pi.project_level, pi.project_regional, pi.project_package, pi.project_address, pi.project_nature,
pi.tech_leader,pi.tech_leader_phone,pi.province,pi.city,pi.district, pi.tech_leader,pi.tech_leader_phone,pi.province,pi.city,pi.district,
pi.licence_number, pi.project_person, pi.project_person_phone, pi.longitude, pi.latitude, pi.project_time_limit, pi.total_investment, pi.licence_number, pi.project_person, pi.project_person_phone, pi.longitude, pi.latitude, pi.project_time_limit, pi.total_investment,
@ -360,6 +360,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
ps.id ps_id,ps.org_name ps_org_name,ps.org_logo ps_org_logo,ps.org_image ps_org_image,ps.org_video ps_org_video,ps.org_plane ps_org_plane ps.id ps_id,ps.org_name ps_org_name,ps.org_logo ps_org_logo,ps.org_image ps_org_image,ps.org_video ps_org_video,ps.org_plane ps_org_plane
from pro_project_info pi from pro_project_info pi
left join pro_project_info_setting ps on pi.id=ps.project_id left join pro_project_info_setting ps on pi.id=ps.project_id
left join sys_dept sd on pi.com_id=sd.dept_id
left join sys_dict_data sdd1 on sdd1.dict_value = pi.project_type and sdd1.dict_type='pro_project_type' left join sys_dict_data sdd1 on sdd1.dict_value = pi.project_type and sdd1.dict_type='pro_project_type'
<if test="currentUserId != null "> left join pro_project_info_subdepts_users psu on psu.project_id = pi.id </if> <if test="currentUserId != null "> left join pro_project_info_subdepts_users psu on psu.project_id = pi.id </if>
<where> <where>

View File

@ -13,6 +13,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap> </resultMap>
<insert id="insertUserCom" parameterType="SysUserCom" >
insert into sys_user_com(
<if test="userId != null and userId != 0">user_id,</if>
<if test="comId != null and comId != 0">com_id,</if>
<if test="status != null and status!=''">status,</if>
is_active
)values(
<if test="userId != null and userId != 0">#{userId},</if>
<if test="comId != null and comId != 0">#{comId},</if>
<if test="status != null and status!=''">#{status},</if>
#{isActive}
)
</insert>
<select id="selectUserComs" parameterType="SysUserCom" resultMap="SysUserComResult"> <select id="selectUserComs" parameterType="SysUserCom" resultMap="SysUserComResult">
select uc.*,sd.dept_name com_name select uc.*,sd.dept_name com_name
from sys_user_com uc left join sys_dept sd on uc.com_id=sd.dept_id from sys_user_com uc left join sys_dept sd on uc.com_id=sd.dept_id
@ -22,6 +36,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where> </where>
</select> </select>
<select id="selectAdminComs" resultMap="SysUserComResult">
select uc.*, sd.dept_name com_name
from (
select DISTINCT com_id
from pro_project_info) uc
left join sys_dept sd on uc.com_id=sd.dept_id
</select>
<update id="updateActiveTo0" parameterType="SysUserCom"> <update id="updateActiveTo0" parameterType="SysUserCom">
update sys_user_com set is_active=0 where user_id=#{userId} update sys_user_com set is_active=0 where user_id=#{userId}
</update> </update>

View File

@ -68,4 +68,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<delete id="deleteSysUserExtById" parameterType="SysUserExt"> <delete id="deleteSysUserExtById" parameterType="SysUserExt">
delete from sys_user_ext where user_id = #{userId} and project_id=#{projectId} delete from sys_user_ext where user_id = #{userId} and project_id=#{projectId}
</delete> </delete>
<update id="clearAllActive" parameterType="SysUserExt">
update sys_user_ext set is_active=0 where user_id=#{userId} and com_id=#{comId}
</update>
<update id="setActive" parameterType="SysUserExt">
update sys_user_ext set is_active=1 where user_id=#{userId} and com_id=#{comId} and project_id=#{projectId}
</update>
</mapper> </mapper>

View File

@ -17,6 +17,7 @@ import com.yanzhu.common.security.annotation.RequiresPermissions;
import com.yanzhu.common.security.utils.SecurityUtils; import com.yanzhu.common.security.utils.SecurityUtils;
import com.yanzhu.manage.domain.ProProjectInfo; import com.yanzhu.manage.domain.ProProjectInfo;
import com.yanzhu.manage.service.IProProjectInfoService; import com.yanzhu.manage.service.IProProjectInfoService;
import com.yanzhu.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -144,20 +145,16 @@ public class ProProjectInfoController extends BaseController
public TableDataInfo findMyProjectList(ProProjectInfo proProjectInfo) public TableDataInfo findMyProjectList(ProProjectInfo proProjectInfo)
{ {
startPage(); startPage();
String key="proProjectInfo_findMyProjectList-"+ PageUtils.getLocalPage().getPageNum()+"-"+PageUtils.getLocalPage().getPageSize()+"-"+SecurityUtils.getUserId()+"-"+proProjectInfo.getProjectName(); LoginUser loginUser = SecurityUtils.getLoginUser();
List<ProProjectInfo> list = redisService.getCacheObject(key); proProjectInfo.setComId(loginUser.getSysUser().getComId());
if(StringUtils.isNotEmpty(list)){ if(!SecurityUtils.isAdmin(loginUser.getUserid())){
return getDataTable(list);
}
if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
if(SecurityUtils.isGSAdmin()){ if(SecurityUtils.isGSAdmin()){
proProjectInfo.setActiveComId(SecurityUtils.getLoginUser().getProjectDeptId()); proProjectInfo.setActiveComId(SecurityUtils.getLoginUser().getProjectDeptId());
}else{ }else{
proProjectInfo.setCurrentUserId(SecurityUtils.getUserId()); proProjectInfo.setCurrentUserId(SecurityUtils.getUserId());
} }
} }
list = proProjectInfoService.selectMyProjectList(proProjectInfo); List<ProProjectInfo> list = proProjectInfoService.selectMyProjectList(proProjectInfo);
redisService.setCacheObject(key, list, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
return getDataTable(list); return getDataTable(list);
} }

View File

@ -22,6 +22,10 @@ import com.yanzhu.security.utils.DictUtils;
import com.yanzhu.system.api.RemoteFlowService; import com.yanzhu.system.api.RemoteFlowService;
import com.yanzhu.system.api.RemoteUserService; import com.yanzhu.system.api.RemoteUserService;
import com.yanzhu.system.api.domain.SysUser; import com.yanzhu.system.api.domain.SysUser;
import com.yanzhu.system.api.model.LoginUser;
import com.yanzhu.system.domain.SysUserExt;
import com.yanzhu.system.mapper.SysUserExtMapper;
import com.yanzhu.system.mapper.SysUserMapper;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -69,6 +73,11 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
@Autowired @Autowired
private ProProjectInfoSubdeptsUsersMapper proProjectInfoSubdeptsUsersMapper; private ProProjectInfoSubdeptsUsersMapper proProjectInfoSubdeptsUsersMapper;
@Autowired
private SysUserExtMapper sysUserExtMapper;
@Autowired
private SysUserMapper sysUserMapper;
private static final Logger log = LoggerFactory.getLogger(ProProjectInfoSubdeptsUsersServiceImpl.class); private static final Logger log = LoggerFactory.getLogger(ProProjectInfoSubdeptsUsersServiceImpl.class);
/** /**
@ -848,7 +857,17 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
proProjectInfoSubdeptsUsers.setSortBy(0L); proProjectInfoSubdeptsUsers.setSortBy(0L);
res = proProjectInfoSubdeptsUsersMapper.updateProProjectInfoSubdeptsUsers(proProjectInfoSubdeptsUsers); res = proProjectInfoSubdeptsUsersMapper.updateProProjectInfoSubdeptsUsers(proProjectInfoSubdeptsUsers);
} }
return res; LoginUser loginUser = SecurityUtils.getLoginUser();
SysUserExt userExt = new SysUserExt();
userExt.setUserId(loginUser.getUserid());
userExt.setComId(loginUser.getSysUser().getComId());
userExt.setProjectId(id);
sysUserExtMapper.clearAllActive(userExt);//清除所有激活状态
sysUserExtMapper.setActive(userExt);//设置激活状态
SysUser oldUser=sysUserMapper.selectUserByUserId(loginUser.getUserid());
oldUser.setDeptId(id);
sysUserMapper.updateUser(oldUser);
return res+1;
} }
} }

View File

@ -157,11 +157,10 @@ public class SysProfileController extends BaseController
if(userId==null||userId.longValue()==0){ if(userId==null||userId.longValue()==0){
userId=SecurityUtils.getLoginUser().getUserid(); userId=SecurityUtils.getLoginUser().getUserid();
} }
boolean isAdmin= (SecurityUtils.isAdmin(SecurityUtils.getUserId()) || SecurityUtils.isGSAdmin());
if(isAdmin){
return AjaxResult.success(userService.getAdminComs());
}
return AjaxResult.success(userService.getUserComs(userId)); return AjaxResult.success(userService.getUserComs(userId));
} }
@PostMapping("/activeUserCom")
public AjaxResult activeUserCom(@RequestBody SysUserCom userCom){
return AjaxResult.success(userService.activeUserCom(userCom));
}
} }

View File

@ -164,6 +164,15 @@ public class SysUserController extends BaseController {
sysUser.setActiveProjectName(""); sysUser.setActiveProjectName("");
} }
} }
}else{
sysUser.setActiveComId(sysUser.getComId());
sysUser.setActiveComName(sysUser.getComName());
sysUser.setActiveProjectId(sysUser.getDeptId());
if(sysUser.getDept()!=null){
sysUser.setActiveProjectName(sysUser.getDept().getDeptName());
}else{
sysUser.setActiveProjectName("");
}
} }
LoginUser sysUserVo = new LoginUser(); LoginUser sysUserVo = new LoginUser();
@ -456,7 +465,8 @@ public class SysUserController extends BaseController {
@PostMapping("/activeUserCom") @PostMapping("/activeUserCom")
public AjaxResult activeUserCom(@RequestBody SysUserCom userCom, HttpServletRequest request){ public AjaxResult activeUserCom(@RequestBody SysUserCom userCom, HttpServletRequest request){
SysUser user= userService.activeUserCom(userCom); boolean isAdmin= (SecurityUtils.isAdmin(SecurityUtils.getUserId()) || SecurityUtils.isGSAdmin());
SysUser user= isAdmin?userService.activeAdminCom(userCom): userService.activeUserCom(userCom);
LoginUser sysUserVo = getLoginInfo(user.getUserName()); LoginUser sysUserVo = getLoginInfo(user.getUserName());
LoginUser loginUser = tokenService.getLoginUser(request); LoginUser loginUser = tokenService.getLoginUser(request);
@ -470,5 +480,19 @@ public class SysUserController extends BaseController {
tokenService.refreshToken(loginUser); tokenService.refreshToken(loginUser);
return AjaxResult.success(); return AjaxResult.success();
} }
@GetMapping("/reload")
public AjaxResult reload(HttpServletRequest request){
LoginUser loginUser = tokenService.getLoginUser(request);
LoginUser sysUserVo = getLoginInfo(loginUser.getUsername());
loginUser.setSysUser(sysUserVo.getSysUser());
loginUser.setProjectId(sysUserVo.getProjectId());
loginUser.setProjectName(sysUserVo.getProjectName());
loginUser.setProjectDeptId(sysUserVo.getProjectDeptId());
loginUser.setProjectDeptName(sysUserVo.getProjectDeptName());
loginUser.setRoles(sysUserVo.getRoles());
loginUser.setPermissions(sysUserVo.getPermissions());
tokenService.refreshToken(loginUser);
return AjaxResult.success();
}
} }

View File

@ -262,7 +262,30 @@ public interface ISysUserService
*/ */
public int updataUserPassWord(AlertUserPassVo alertUserPassVo); public int updataUserPassWord(AlertUserPassVo alertUserPassVo);
/**
*
* @param userId
* @return
*/
public List<SysUserCom> getUserComs(Long userId); public List<SysUserCom> getUserComs(Long userId);
/**
*
* @param userCom
* @return
*/
public SysUser activeUserCom(SysUserCom userCom); public SysUser activeUserCom(SysUserCom userCom);
/**
*
* @return
*/
public List<SysUserCom> getAdminComs();
/**
*
* @param userCom
* @return
*/
public SysUser activeAdminCom(SysUserCom userCom);
} }

View File

@ -11,6 +11,9 @@ import com.yanzhu.common.core.enums.UserTypeEnums;
import com.yanzhu.common.core.utils.DateUtils; import com.yanzhu.common.core.utils.DateUtils;
import com.yanzhu.common.core.web.domain.AjaxResult; import com.yanzhu.common.core.web.domain.AjaxResult;
import com.yanzhu.common.security.service.TokenService; import com.yanzhu.common.security.service.TokenService;
import com.yanzhu.manage.domain.ProProjectInfo;
import com.yanzhu.manage.mapper.ProProjectInfoMapper;
import com.yanzhu.manage.mapper.ProProjectInfoSubdeptsUsersMapper;
import com.yanzhu.system.api.RemoteProService; import com.yanzhu.system.api.RemoteProService;
import com.yanzhu.system.api.RemoteUserService; import com.yanzhu.system.api.RemoteUserService;
import com.yanzhu.system.api.domain.SysDept; import com.yanzhu.system.api.domain.SysDept;
@ -89,7 +92,8 @@ public class SysUserServiceImpl implements ISysUserService
@Autowired @Autowired
private TokenService tokenService; private TokenService tokenService;
@Autowired
private ProProjectInfoMapper proProjectInfoMapper;
/** /**
* *
* *
@ -325,6 +329,20 @@ public class SysUserServiceImpl implements ISysUserService
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int insertUser(SysUser user) public int insertUser(SysUser user)
{ {
boolean isPrjUser = false;//项目单位人员
SysDept sysDept=null;
try {
if(Objects.equals(user.getUserType(),"99")){
// 根据单位递归查询项目信息
sysDept = deptMapper.selectDeptById(user.getDeptId());
// 是项目单位时,将人员信息加入到花名册
if(StringUtils.isNotEmpty(sysDept.getDeptType()) && Objects.equals(sysDept.getDeptType(),"4")){
isPrjUser = true;
}
}
}catch (Exception e){
e.printStackTrace();
}
// 新增用户信息 // 新增用户信息
//user.setUserName(userNameAndCout(user.getNickName())); //user.setUserName(userNameAndCout(user.getNickName()));
SysDept dept = deptMapper.selectDeptById(user.getDeptId()); SysDept dept = deptMapper.selectDeptById(user.getDeptId());
@ -345,7 +363,13 @@ public class SysUserServiceImpl implements ISysUserService
user.setUserId(sysUser.getUserId()); user.setUserId(sysUser.getUserId());
user.setIsActive(0l); user.setIsActive(0l);
user.setStatus("0"); user.setStatus("0");
SysUserCom comWhere=new SysUserCom();
comWhere.setUserId(sysUser.getUserId());
comWhere.setComId(dept.getComId());
List<SysUserCom> userComs= userComMapper.selectUserComs(comWhere);
if(userComs.size()==0){
userMapper.insertUserCom(user); userMapper.insertUserCom(user);
}
sysUser.setUserName(user.getUserName()); sysUser.setUserName(user.getUserName());
sysUser.setComId(user.getComId()); sysUser.setComId(user.getComId());
sysUser.setDeptId(user.getDeptId()); sysUser.setDeptId(user.getDeptId());
@ -371,15 +395,9 @@ public class SysUserServiceImpl implements ISysUserService
// 新增用户与角色管理 // 新增用户与角色管理
insertUserRole(user); insertUserRole(user);
try { try {
if(Objects.equals(user.getUserType(),"99")){ if(isPrjUser) {
// 根据单位递归查询项目信息 Map<String, Object> data = packageSubDeptUsers(user, sysDept);
SysDept sysDept = deptMapper.selectDeptById(user.getDeptId()); R<AjaxResult> res = remoteProService.syspushSubDeptsUser(data, SecurityConstants.INNER);
// 是项目单位时,将人员信息加入到花名册
if(StringUtils.isNotEmpty(sysDept.getDeptType()) && Objects.equals(sysDept.getDeptType(),"4")){
Map<String, Object> data = packageSubDeptUsers(user,sysDept);
R<AjaxResult> res= remoteProService.syspushSubDeptsUser(data, SecurityConstants.INNER);
}
} }
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); e.printStackTrace();
@ -943,6 +961,42 @@ public class SysUserServiceImpl implements ISysUserService
return user; return user;
} }
@Override
public SysUser activeAdminCom(SysUserCom userCom) {
SysUser old=userMapper.selectUserByUserId(SecurityUtils.getUserId());
old.setComId(userCom.getComId());
SysUserExt userExtWhere=new SysUserExt();
userExtWhere.setUserId(userCom.getUserId());
userExtWhere.setComId(userCom.getComId());
List<SysUserExt> userExts=userExtService.selectSysUserExtList(userExtWhere);
if(userExts.size()==0){
ProProjectInfo proWhere=new ProProjectInfo();
proWhere.setComId(userCom.getComId());
List<ProProjectInfo> list = proProjectInfoMapper.selectMyProjectList(proWhere);
if(list.size()>0){
old.setDeptId(list.get(0).getId());
}
}else{
old.setDeptId(userExts.get(0).getProjectId());
}
userMapper.updateUser(old);
return old;
}
@Override
public List<SysUserCom> getAdminComs() {
List<SysUserCom> userComs= userComMapper.selectAdminComs();
LoginUser loginUser=SecurityUtils.getLoginUser();
for (SysUserCom sysUserCom : userComs){
if(sysUserCom.getComId().equals(loginUser.getSysUser().getComId())){
sysUserCom.setIsActive(1l);
}
}
return userComs;
}
private SysUserExt findActiveUserExt(List<SysUserExt> userExts) { private SysUserExt findActiveUserExt(List<SysUserExt> userExts) {
SysUserExt find=null; SysUserExt find=null;
for(SysUserExt userExt:userExts){ for(SysUserExt userExt:userExts){

View File

@ -177,3 +177,10 @@ export function activeUserCom(userCom){
data:userCom data:userCom
}) })
} }
export function reload(){
return request({
url: '/system/user/reload',
method: 'get'
})
}

View File

@ -63,7 +63,7 @@ import { OfficeBuilding } from '@element-plus/icons-vue'
import { findMyProjectList } from "@/api/publics"; import { findMyProjectList } from "@/api/publics";
import { switchProject, cancelProject } from '@/api/login' import { switchProject, cancelProject } from '@/api/login'
import { changeDefaultProject } from "@/api/manage/proProjectInfoSubdeptsUsers"; import { changeDefaultProject } from "@/api/manage/proProjectInfoSubdeptsUsers";
import { reload } from "@/api/system/user";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
import useUserStore from '@/store/modules/user' import useUserStore from '@/store/modules/user'
@ -117,6 +117,15 @@ function resetQuery() {
/** 改变默认项目 */ /** 改变默认项目 */
function changeDefault(proId) { function changeDefault(proId) {
changeDefaultProject(proId).then(response =>{
reload().then(d=>{
proxy.$modal.loading("正在切换项目信息,请稍后...");
setTimeout("window.location.reload()", 500);
});
});
}
function changeDefaultOld(proId) {
if(isAdmin.value){ if(isAdmin.value){
switchProject(proId).then(res =>{ switchProject(proId).then(res =>{
if(res.code==200){ if(res.code==200){