修改项目数据拦截器逻辑,站点相关,项目相关,机构相关接口逻辑完善

This commit is contained in:
mi9688
2024-11-04 18:03:21 +08:00
parent 66c1bd1e0d
commit be83b50ad0
9 changed files with 110 additions and 30 deletions

View File

@ -13,5 +13,6 @@ public class ProjectInfo {
private String projectAdminId;//项目管理员id private String projectAdminId;//项目管理员id
private List<Long> projectIdList;//项目id列表包含子项目id private List<Long> projectIdList;//项目id列表包含子项目id
private String projectId;//当前项目id private String projectId;//当前项目id
private String projectDeptId;//项目机构id
} }

View File

@ -61,7 +61,7 @@ public class ResourcesConfig implements WebMvcConfigurer
"/tool/gen/**"); "/tool/gen/**");
//配置项目数据隔离拦截器 //配置项目数据隔离拦截器
registry.addInterceptor(projectDataIsolationInterceptor) registry.addInterceptor(projectDataIsolationInterceptor)
.addPathPatterns("/gis/groups/**", "/gis/legend/**","/gis/site/**","/project/**"); .addPathPatterns("/gis/groups/**", "/gis/legend/**","/gis/site/**","/project/**","/system/**");
} }
/** /**

View File

@ -1,29 +1,23 @@
package com.fastbee.framework.interceptor; package com.fastbee.framework.interceptor;
import cn.hutool.core.codec.Base64;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONArray; import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.fastbee.common.holder.ProjectHolder; import com.fastbee.common.holder.ProjectHolder;
import com.fastbee.common.holder.ProjectInfo; import com.fastbee.common.holder.ProjectInfo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.HandlerInterceptor;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import javax.servlet.http.Cookie; import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors;
/** /**
@ -73,12 +67,16 @@ public class ProjectDataIsolationInterceptor implements HandlerInterceptor {
//获取cookie中的projectId //获取cookie中的projectId
if ("projectId".equals(cookie.getName())) { if ("projectId".equals(cookie.getName())) {
projectInfo.setProjectId(cookie.getValue()); projectInfo.setProjectId(cookie.getValue());
System.err.println("获取cooke的项目id:"+cookie.getValue());
} }
//获取cookie中的userId //获取cookie中的userId
if ("userId".equals(cookie.getName())) { if ("userId".equals(cookie.getName())) {
projectInfo.setProjectAdminId(cookie.getValue()); projectInfo.setProjectAdminId(cookie.getValue());
} }
//获取cookie中的projectDeptId
if ("deptId".equals(cookie.getName())) {
projectInfo.setProjectDeptId(cookie.getValue());
}
} }
} }

View File

@ -29,7 +29,9 @@
<version>1.5.0</version> <version>1.5.0</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>com.fastbee</groupId>
<artifactId>fastbee-system-service</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -1,6 +1,8 @@
package com.fastbee.ggroup.domain.dto; package com.fastbee.ggroup.domain.dto;
import com.fastbee.common.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
@ -27,4 +29,8 @@ private static final long serialVersionUID = 1L;
private String parentId;//父节点id private String parentId;//父节点id
private String areaCode;//区域编码
private String fullAreaCode;//完整区域编码
} }

View File

@ -1,10 +1,13 @@
package com.fastbee.ggroup.service.impl; package com.fastbee.ggroup.service.impl;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.fastbee.common.core.domain.entity.SysDept;
import com.fastbee.common.exception.ServiceException; import com.fastbee.common.exception.ServiceException;
import com.fastbee.common.holder.ProjectHolder; import com.fastbee.common.holder.ProjectHolder;
import com.fastbee.common.utils.DateUtils; import com.fastbee.common.utils.DateUtils;
import com.fastbee.common.utils.json.JsonUtils;
import com.fastbee.ggroup.domain.GGroups; import com.fastbee.ggroup.domain.GGroups;
import com.fastbee.ggroup.domain.GSiteGroups; import com.fastbee.ggroup.domain.GSiteGroups;
import com.fastbee.ggroup.domain.GSites; import com.fastbee.ggroup.domain.GSites;
@ -12,6 +15,7 @@ import com.fastbee.ggroup.domain.vo.GGroupSiteVo;
import com.fastbee.ggroup.mapper.GGroupsMapper; import com.fastbee.ggroup.mapper.GGroupsMapper;
import com.fastbee.ggroup.mapper.GSiteGroupsMapper; import com.fastbee.ggroup.mapper.GSiteGroupsMapper;
import com.fastbee.ggroup.service.IGGroupsService; import com.fastbee.ggroup.service.IGGroupsService;
import com.fastbee.system.mapper.SysDeptMapper;
import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -34,9 +38,12 @@ public class GGroupsServiceImpl implements IGGroupsService
private final GSiteGroupsMapper gSiteGroupsMapper; private final GSiteGroupsMapper gSiteGroupsMapper;
public GGroupsServiceImpl(GGroupsMapper gGroupsMapper, GSiteGroupsMapper gSiteGroupsMapper) { private final SysDeptMapper sysDeptMapper;
public GGroupsServiceImpl(GGroupsMapper gGroupsMapper, GSiteGroupsMapper gSiteGroupsMapper, SysDeptMapper sysDeptMapper) {
this.gGroupsMapper = gGroupsMapper; this.gGroupsMapper = gGroupsMapper;
this.gSiteGroupsMapper = gSiteGroupsMapper; this.gSiteGroupsMapper = gSiteGroupsMapper;
this.sysDeptMapper = sysDeptMapper;
} }
@ -79,6 +86,7 @@ public class GGroupsServiceImpl implements IGGroupsService
*/ */
@Override @Override
public List<GGroupSiteVo> selectGGroupsListSites(GGroups gGroups) { public List<GGroupSiteVo> selectGGroupsListSites(GGroups gGroups) {
MPJLambdaWrapper<GSiteGroups> gSiteGroupsMPJLambdaWrapper = new MPJLambdaWrapper<GSiteGroups>() MPJLambdaWrapper<GSiteGroups> gSiteGroupsMPJLambdaWrapper = new MPJLambdaWrapper<GSiteGroups>()
.select(GSiteGroups::getId, GSiteGroups::getParentId, GSiteGroups::getSiteId) .select(GSiteGroups::getId, GSiteGroups::getParentId, GSiteGroups::getSiteId)
// .select(GGroups::getName)//起个别名 // .select(GGroups::getName)//起个别名
@ -89,7 +97,29 @@ public class GGroupsServiceImpl implements IGGroupsService
.leftJoin(GSites.class, GSites::getId, GSiteGroups::getSiteId) .leftJoin(GSites.class, GSites::getId, GSiteGroups::getSiteId)
.eq(GSiteGroups::getParentId, gGroups.getParentId()) .eq(GSiteGroups::getParentId, gGroups.getParentId())
.like(StringUtils.isNotBlank(gGroups.getSearchValue()), GSites::getName, gGroups.getSearchValue()); .like(StringUtils.isNotBlank(gGroups.getSearchValue()), GSites::getName, gGroups.getSearchValue());
return gSiteGroupsMapper.selectJoinList(GGroupSiteVo.class,gSiteGroupsMPJLambdaWrapper); List<GGroupSiteVo> gGroupSiteVos = gSiteGroupsMapper.selectJoinList(GGroupSiteVo.class, gSiteGroupsMPJLambdaWrapper);
gSiteGroupsMapper.selectJoinList(GGroupSiteVo.class,gSiteGroupsMPJLambdaWrapper);
//查询该机构下的行政区划列表
SysDept sysDept = new LambdaQueryChainWrapper<>(sysDeptMapper)
.select(SysDept::getDeptId, SysDept::getProvinceCode, SysDept::getCityCode, SysDept::getCountyCode, SysDept::getTownCode, SysDept::getVillageCode)
.eq(SysDept::getDeptId, ProjectHolder.getProjectInfo().getProjectDeptId())
.one();
if(Objects.isNull(sysDept)){
throw new ServiceException("未查询到机构信息");
}
List<Long> adcodeList = new ArrayList<>();
adcodeList.addAll(JsonUtils.parseArray(sysDept.getProvinceCode(), Long.class));
adcodeList.addAll(JsonUtils.parseArray(sysDept.getCityCode(), Long.class));
adcodeList.addAll(JsonUtils.parseArray(sysDept.getCountyCode(), Long.class));
adcodeList.addAll(JsonUtils.parseArray(sysDept.getTownCode(), Long.class));
adcodeList.addAll(JsonUtils.parseArray(sysDept.getVillageCode(), Long.class));
//根据区域代码过滤站点
if(Objects.nonNull(adcodeList) && !adcodeList.isEmpty()){
gGroupSiteVos = gGroupSiteVos
.stream()
.filter(gGroupSiteVo -> adcodeList.contains(Long.valueOf(gGroupSiteVo.getAreaCode()))).collect(Collectors.toList());
}
return gGroupSiteVos;
} }
/** /**

View File

@ -151,9 +151,9 @@ public class GSitesServiceImpl extends ServiceImpl<GSiteGroupsMapper,GSiteGroups
JSONArray jsonArray = JSONUtil.parseArray(coordinates); JSONArray jsonArray = JSONUtil.parseArray(coordinates);
//判断数组每个元素必须为经度或纬度 //判断数组每个元素必须为经度或纬度
for (Object o : jsonArray) { for (Object o : jsonArray) {
/* if(isLongitudeOrLatitude(o.toString())){ if(!isLongitudeOrLatitude(o.toString())){
throw new ServiceException("coordinates数组元素必须为经度或纬度"); throw new ServiceException("coordinates数组元素必须为经度或纬度");
}*/ }
} }
int startIndex = space.indexOf("/profile/upload/"); int startIndex = space.indexOf("/profile/upload/");
@ -169,8 +169,8 @@ public class GSitesServiceImpl extends ServiceImpl<GSiteGroupsMapper,GSiteGroups
* @param str 经纬度字符串 * @param str 经纬度字符串
* @return true 或 false * @return true 或 false
*/ */
private boolean isLongitudeOrLatitude(String str) { private static boolean isLongitudeOrLatitude(String str) {
String regex = "^[-+]?\\d{1,3}(\\.\\d+)?$"; // 修改了正则表达式的格式,允许有或无小数部分 String regex = "^[-+]?\\d{1,3}(\\.\\d+)?$"; // 正则表达式,匹配经度或纬度格式
Pattern pattern = Pattern.compile(regex); Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str); Matcher matcher = pattern.matcher(str);
@ -178,10 +178,19 @@ public class GSitesServiceImpl extends ServiceImpl<GSiteGroupsMapper,GSiteGroups
return matcher.matches() && isValueInRange(str); return matcher.matches() && isValueInRange(str);
} }
private boolean isValueInRange(String str) { /**
* 判断值是否在经纬度范围内
* @param str 经纬度字符串表示的值
* @return true 如果值在范围内false 否则
*/
private static boolean isValueInRange(String str) {
try {
double value = Double.parseDouble(str); double value = Double.parseDouble(str);
return value >= -180 && value <= 180; // 经度范围 return value >= -180 && value <= 180; // 经度范围
// 如果需要判断纬度则再添加一行判断逻辑else if (value >= -90 && value <= 90) return true; 或者根据需要合并到一行判断中。 } catch (NumberFormatException e) {
// 字符串无法转换为数字,认为不在范围内
return false;
}
} }
/** /**

View File

@ -85,6 +85,7 @@ public class ProjectServiceImpl implements IProjectService
Project::getAdministrativeAreaCode, Project::getLevel, Project::getDeptId, Project::getDeptName, Project::getAdministrativeAreaCode, Project::getLevel, Project::getDeptId, Project::getDeptName,
Project::getVideoIntroduction, Project::getImage, Project::getLogo, Project::getRemark) Project::getVideoIntroduction, Project::getImage, Project::getLogo, Project::getRemark)
.eq(Project::getId, projectId) .eq(Project::getId, projectId)
.eq(Project::getDelFlag,0)
.list(); .list();
//查询项目管理员信息 //查询项目管理员信息
List<SysUser> list = new LambdaQueryChainWrapper<>(sysUserMapper) List<SysUser> list = new LambdaQueryChainWrapper<>(sysUserMapper)
@ -117,6 +118,7 @@ public class ProjectServiceImpl implements IProjectService
Project::getLogo, Project::getImage, Project::getLevel, Project::getDeptName, Project::getLogo, Project::getImage, Project::getLevel, Project::getDeptName,
Project::getCreateTime, Project::getCreateTime,
Project::getAdministrativeAreaCode,Project::getAdministrativeArea, Project::getProvinceCode,Project::getCityCode,Project::getCountyCode) Project::getAdministrativeAreaCode,Project::getAdministrativeArea, Project::getProvinceCode,Project::getCityCode,Project::getCountyCode)
.eq(Project::getDelFlag,0)
.like(StringUtils.isNotBlank(project.getSearchValue()),Project::getProjectName, project.getSearchValue()) .like(StringUtils.isNotBlank(project.getSearchValue()),Project::getProjectName, project.getSearchValue())
.list(); .list();
} }
@ -169,7 +171,7 @@ public class ProjectServiceImpl implements IProjectService
SysDept sysDept = deptService.selectDeptById(100L); SysDept sysDept = deptService.selectDeptById(100L);
List<SysMenu> sysMenuList = sysMenuService.selectMenuList(new SysMenu(), sysDept.getDeptUserId()); List<SysMenu> sysMenuList = sysMenuService.selectMenuList(new SysMenu(), sysDept.getDeptUserId());
Long[] menuIdList = sysMenuList.stream().map(SysMenu::getMenuId) Long[] menuIdList = sysMenuList.stream().map(SysMenu::getMenuId)
.filter(menuId-> menuId!=3469L&&menuId!=3L&&menuId!=2L) .filter(menuId-> menuId!=3469L&&menuId!=3L&&menuId!=2L &&menuId!=3468L)
.toArray(Long[]::new); .toArray(Long[]::new);
SysRole sysRole = new SysRole(); SysRole sysRole = new SysRole();
sysRole.setRoleName("管理员"); sysRole.setRoleName("管理员");
@ -184,7 +186,7 @@ public class ProjectServiceImpl implements IProjectService
RegisterUserInput registerUserInput = new RegisterUserInput(); RegisterUserInput registerUserInput = new RegisterUserInput();
registerUserInput.setUsername(project.getUserName()); registerUserInput.setUsername(project.getUserName());
registerUserInput.setPassword(project.getPassword()); registerUserInput.setPassword(project.getPassword());
registerUserInput.setPhonenumber(String.valueOf(UUID.randomUUID()).substring(5,9)); registerUserInput.setPhonenumber(project.getPhoneNumber());
registerUserInput.setDeptId(newSysDept.getDeptId()); registerUserInput.setDeptId(newSysDept.getDeptId());
registerUserInput.setRoleIds(new Long[]{sysRole.getRoleId()}); registerUserInput.setRoleIds(new Long[]{sysRole.getRoleId()});
RegisterUserOutput registerUserOutput = toolService.registerNoCaptcha(registerUserInput); RegisterUserOutput registerUserOutput = toolService.registerNoCaptcha(registerUserInput);
@ -331,9 +333,35 @@ public class ProjectServiceImpl implements IProjectService
* 删除项目 * 删除项目
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public int deleteProjectByProjectIds(Long projectId) public int deleteProjectByProjectIds(Long projectId)
{ { //逻辑删除项目信息
return projectMapper.deleteById(projectId); boolean updateProject = new LambdaUpdateChainWrapper<>(projectMapper)
.set(Project::getDelFlag, "2")
.eq(Project::getId, projectId)
.update();
//查询项目下的机构
List<SysDept> projectDeptList = new LambdaQueryChainWrapper<>(sysDeptMapper)
.eq(SysDept::getProjectId, projectId)
.eq(SysDept::getDelFlag, "0")
.list();
//逻辑删除项目机构信息
boolean updateDept = new LambdaUpdateChainWrapper<>(sysDeptMapper)
.set(SysDept::getDelFlag, "2")
.eq(SysDept::getProjectId, projectId)
.update();
//逻辑删除项目用户信息
boolean updateUser=false;
LambdaUpdateChainWrapper<SysUser> sysUserLambdaUpdateChainWrapper = new LambdaUpdateChainWrapper<>(sysUserMapper);
sysUserLambdaUpdateChainWrapper
.set(SysUser::getDelFlag, "2");
if(!projectDeptList.isEmpty()){
updateUser = sysUserLambdaUpdateChainWrapper.in(SysUser::getDeptId, projectDeptList.stream().map(SysDept::getDeptId).collect(Collectors.toList()))
.update();
}
return updateDept&&updateProject&&updateUser?1:0;
} }
@ -384,7 +412,7 @@ public class ProjectServiceImpl implements IProjectService
projectLoginBaseInfo.setProjectLevel(ProjectLevelConstant.LEVEL_CITY); projectLoginBaseInfo.setProjectLevel(ProjectLevelConstant.LEVEL_CITY);
projectLoginBaseInfo.setProjectAreaCode(JSONUtil.parseArray(project.getCityCode()).get(0).toString()); projectLoginBaseInfo.setProjectAreaCode(JSONUtil.parseArray(project.getCityCode()).get(0).toString());
} }
if(project.getLevel().equals("县级")){ if(project.getLevel().equals("/区")){
projectLoginBaseInfo.setProjectLevel(ProjectLevelConstant.LEVEL_COUNTY); projectLoginBaseInfo.setProjectLevel(ProjectLevelConstant.LEVEL_COUNTY);
projectLoginBaseInfo.setProjectAreaCode(JSONUtil.parseArray(project.getCountyCode()).get(0).toString()); projectLoginBaseInfo.setProjectAreaCode(JSONUtil.parseArray(project.getCountyCode()).get(0).toString());
} }
@ -530,9 +558,12 @@ public class ProjectServiceImpl implements IProjectService
} }
//先根据项目机构行政管理级别查上层的行政区划信息 //先根据项目机构行政管理级别查上层的行政区划信息
List<SysDistrict> aboveSysDistrictList = aboveSysDistrictLambdaQueryChainWrapper List<SysDistrict> aboveSysDistrictList =new ArrayList<>();
if(!queryInAdcodeList.isEmpty()){
aboveSysDistrictList= aboveSysDistrictLambdaQueryChainWrapper
.in(SysDistrict::getAdcode, queryInAdcodeList) .in(SysDistrict::getAdcode, queryInAdcodeList)
.list(); .list();
}
//根据行政区划级别查询下级行政区划信息 //根据行政区划级别查询下级行政区划信息
List<SysDistrict> belowSysDistrictList = belowSysDistrictLambdaQueryChainWrapper List<SysDistrict> belowSysDistrictList = belowSysDistrictLambdaQueryChainWrapper
.in(!queryInLevelList.isEmpty(),SysDistrict::getLevel, queryInLevelList) .in(!queryInLevelList.isEmpty(),SysDistrict::getLevel, queryInLevelList)

View File

@ -12,6 +12,7 @@ import com.fastbee.common.core.domain.entity.SysUser;
import com.fastbee.common.core.domain.model.LoginUser; import com.fastbee.common.core.domain.model.LoginUser;
import com.fastbee.common.core.text.Convert; import com.fastbee.common.core.text.Convert;
import com.fastbee.common.exception.ServiceException; import com.fastbee.common.exception.ServiceException;
import com.fastbee.common.holder.ProjectHolder;
import com.fastbee.common.utils.DateUtils; import com.fastbee.common.utils.DateUtils;
import com.fastbee.common.utils.SecurityUtils; import com.fastbee.common.utils.SecurityUtils;
import com.fastbee.common.utils.StringUtils; import com.fastbee.common.utils.StringUtils;
@ -251,6 +252,8 @@ public class SysDeptServiceImpl implements ISysDeptService
} }
//设置祖级别列表 //设置祖级别列表
dept.setAncestors(info.getAncestors() + "," + dept.getParentId()); dept.setAncestors(info.getAncestors() + "," + dept.getParentId());
//设置项目id
dept.setProjectId(Long.valueOf(ProjectHolder.getProjectInfo().getProjectId()));
//处理机构所管理行政区划信息 //处理机构所管理行政区划信息
parseAdministrativeDivisionInfo(dept); parseAdministrativeDivisionInfo(dept);
dept.setCreateTime(DateUtils.getNowDate()); dept.setCreateTime(DateUtils.getNowDate());