修改多租户功能

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 insertUserCom(SysUserCom sysUserCom);
/**
*
* @param sysUserCom
@ -35,4 +36,6 @@ public interface SysUserComMapper
public int updateStatus (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 clearAllActive(SysUserExt userExt);
public int setActive(SysUserExt userExt);
}

View File

@ -350,7 +350,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</update>
<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.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,
@ -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
from pro_project_info pi
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'
<if test="currentUserId != null "> left join pro_project_info_subdepts_users psu on psu.project_id = pi.id </if>
<where>

View File

@ -13,6 +13,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</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 uc.*,sd.dept_name com_name
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>
</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 sys_user_com set is_active=0 where user_id=#{userId}
</update>

View File

@ -68,4 +68,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<delete id="deleteSysUserExtById" parameterType="SysUserExt">
delete from sys_user_ext where user_id = #{userId} and project_id=#{projectId}
</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>

View File

@ -17,6 +17,7 @@ import com.yanzhu.common.security.annotation.RequiresPermissions;
import com.yanzhu.common.security.utils.SecurityUtils;
import com.yanzhu.manage.domain.ProProjectInfo;
import com.yanzhu.manage.service.IProProjectInfoService;
import com.yanzhu.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -144,20 +145,16 @@ public class ProProjectInfoController extends BaseController
public TableDataInfo findMyProjectList(ProProjectInfo proProjectInfo)
{
startPage();
String key="proProjectInfo_findMyProjectList-"+ PageUtils.getLocalPage().getPageNum()+"-"+PageUtils.getLocalPage().getPageSize()+"-"+SecurityUtils.getUserId()+"-"+proProjectInfo.getProjectName();
List<ProProjectInfo> list = redisService.getCacheObject(key);
if(StringUtils.isNotEmpty(list)){
return getDataTable(list);
}
if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
LoginUser loginUser = SecurityUtils.getLoginUser();
proProjectInfo.setComId(loginUser.getSysUser().getComId());
if(!SecurityUtils.isAdmin(loginUser.getUserid())){
if(SecurityUtils.isGSAdmin()){
proProjectInfo.setActiveComId(SecurityUtils.getLoginUser().getProjectDeptId());
}else{
proProjectInfo.setCurrentUserId(SecurityUtils.getUserId());
}
}
list = proProjectInfoService.selectMyProjectList(proProjectInfo);
redisService.setCacheObject(key, list, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
List<ProProjectInfo> list = proProjectInfoService.selectMyProjectList(proProjectInfo);
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.RemoteUserService;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -69,6 +73,11 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
@Autowired
private ProProjectInfoSubdeptsUsersMapper proProjectInfoSubdeptsUsersMapper;
@Autowired
private SysUserExtMapper sysUserExtMapper;
@Autowired
private SysUserMapper sysUserMapper;
private static final Logger log = LoggerFactory.getLogger(ProProjectInfoSubdeptsUsersServiceImpl.class);
/**
@ -848,7 +857,17 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
proProjectInfoSubdeptsUsers.setSortBy(0L);
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){
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));
}
@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("");
}
}
}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();
@ -456,7 +465,8 @@ public class SysUserController extends BaseController {
@PostMapping("/activeUserCom")
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 loginUser = tokenService.getLoginUser(request);
@ -470,5 +480,19 @@ public class SysUserController extends BaseController {
tokenService.refreshToken(loginUser);
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);
/**
*
* @param userId
* @return
*/
public List<SysUserCom> getUserComs(Long userId);
/**
*
* @param userCom
* @return
*/
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.web.domain.AjaxResult;
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.RemoteUserService;
import com.yanzhu.system.api.domain.SysDept;
@ -89,7 +92,8 @@ public class SysUserServiceImpl implements ISysUserService
@Autowired
private TokenService tokenService;
@Autowired
private ProProjectInfoMapper proProjectInfoMapper;
/**
*
*
@ -325,6 +329,20 @@ public class SysUserServiceImpl implements ISysUserService
@Transactional(rollbackFor = Exception.class)
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()));
SysDept dept = deptMapper.selectDeptById(user.getDeptId());
@ -345,7 +363,13 @@ public class SysUserServiceImpl implements ISysUserService
user.setUserId(sysUser.getUserId());
user.setIsActive(0l);
user.setStatus("0");
userMapper.insertUserCom(user);
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);
}
sysUser.setUserName(user.getUserName());
sysUser.setComId(user.getComId());
sysUser.setDeptId(user.getDeptId());
@ -371,16 +395,10 @@ public class SysUserServiceImpl implements ISysUserService
// 新增用户与角色管理
insertUserRole(user);
try {
if(Objects.equals(user.getUserType(),"99")){
// 根据单位递归查询项目信息
SysDept sysDept = deptMapper.selectDeptById(user.getDeptId());
// 是项目单位时,将人员信息加入到花名册
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);
}
}
if(isPrjUser) {
Map<String, Object> data = packageSubDeptUsers(user, sysDept);
R<AjaxResult> res = remoteProService.syspushSubDeptsUser(data, SecurityConstants.INNER);
}
}catch (Exception e){
e.printStackTrace();
}
@ -943,6 +961,42 @@ public class SysUserServiceImpl implements ISysUserService
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) {
SysUserExt find=null;
for(SysUserExt userExt:userExts){

View File

@ -176,4 +176,11 @@ export function activeUserCom(userCom){
method:'post',
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 { switchProject, cancelProject } from '@/api/login'
import { changeDefaultProject } from "@/api/manage/proProjectInfoSubdeptsUsers";
import { reload } from "@/api/system/user";
const { proxy } = getCurrentInstance();
import useUserStore from '@/store/modules/user'
@ -117,6 +117,15 @@ function resetQuery() {
/** 改变默认项目 */
function changeDefault(proId) {
changeDefaultProject(proId).then(response =>{
reload().then(d=>{
proxy.$modal.loading("正在切换项目信息,请稍后...");
setTimeout("window.location.reload()", 500);
});
});
}
function changeDefaultOld(proId) {
if(isAdmin.value){
switchProject(proId).then(res =>{
if(res.code==200){