diff --git a/fastbee-common/src/main/java/com/fastbee/common/holder/ProjectInfo.java b/fastbee-common/src/main/java/com/fastbee/common/holder/ProjectInfo.java index 7f0b264..dc3f126 100644 --- a/fastbee-common/src/main/java/com/fastbee/common/holder/ProjectInfo.java +++ b/fastbee-common/src/main/java/com/fastbee/common/holder/ProjectInfo.java @@ -13,5 +13,6 @@ public class ProjectInfo { private String projectAdminId;//项目管理员id private List projectIdList;//项目id列表包含子项目id private String projectId;//当前项目id + private String projectDeptId;//项目机构id } diff --git a/fastbee-framework/src/main/java/com/fastbee/framework/config/ResourcesConfig.java b/fastbee-framework/src/main/java/com/fastbee/framework/config/ResourcesConfig.java index 76b9ac9..06b1dbd 100644 --- a/fastbee-framework/src/main/java/com/fastbee/framework/config/ResourcesConfig.java +++ b/fastbee-framework/src/main/java/com/fastbee/framework/config/ResourcesConfig.java @@ -61,7 +61,7 @@ public class ResourcesConfig implements WebMvcConfigurer "/tool/gen/**"); //配置项目数据隔离拦截器 registry.addInterceptor(projectDataIsolationInterceptor) - .addPathPatterns("/gis/groups/**", "/gis/legend/**","/gis/site/**","/project/**"); + .addPathPatterns("/gis/groups/**", "/gis/legend/**","/gis/site/**","/project/**","/system/**"); } /** diff --git a/fastbee-framework/src/main/java/com/fastbee/framework/interceptor/ProjectDataIsolationInterceptor.java b/fastbee-framework/src/main/java/com/fastbee/framework/interceptor/ProjectDataIsolationInterceptor.java index 3ca8fcf..cfa8ea1 100644 --- a/fastbee-framework/src/main/java/com/fastbee/framework/interceptor/ProjectDataIsolationInterceptor.java +++ b/fastbee-framework/src/main/java/com/fastbee/framework/interceptor/ProjectDataIsolationInterceptor.java @@ -1,29 +1,23 @@ 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.JSONUtil; -import com.alibaba.fastjson.JSONObject; import com.fastbee.common.holder.ProjectHolder; import com.fastbee.common.holder.ProjectInfo; import lombok.extern.slf4j.Slf4j; - import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; - import javax.annotation.Nullable; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotNull; import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; + /** @@ -73,12 +67,16 @@ public class ProjectDataIsolationInterceptor implements HandlerInterceptor { //获取cookie中的projectId if ("projectId".equals(cookie.getName())) { projectInfo.setProjectId(cookie.getValue()); + System.err.println("获取cooke的项目id:"+cookie.getValue()); } //获取cookie中的userId if ("userId".equals(cookie.getName())) { projectInfo.setProjectAdminId(cookie.getValue()); } - + //获取cookie中的projectDeptId + if ("deptId".equals(cookie.getName())) { + projectInfo.setProjectDeptId(cookie.getValue()); + } } } diff --git a/fastbee-service/fastbee-ggroup-service/pom.xml b/fastbee-service/fastbee-ggroup-service/pom.xml index fbe97b0..03e349d 100644 --- a/fastbee-service/fastbee-ggroup-service/pom.xml +++ b/fastbee-service/fastbee-ggroup-service/pom.xml @@ -29,7 +29,9 @@ 1.5.0 compile - - + + com.fastbee + fastbee-system-service + \ No newline at end of file diff --git a/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/domain/dto/GSitesEditDto.java b/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/domain/dto/GSitesEditDto.java index 8b897df..35eac0f 100644 --- a/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/domain/dto/GSitesEditDto.java +++ b/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/domain/dto/GSitesEditDto.java @@ -1,6 +1,8 @@ package com.fastbee.ggroup.domain.dto; +import com.fastbee.common.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -27,4 +29,8 @@ private static final long serialVersionUID = 1L; private String parentId;//父节点id + private String areaCode;//区域编码 + + private String fullAreaCode;//完整区域编码 + } diff --git a/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/service/impl/GGroupsServiceImpl.java b/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/service/impl/GGroupsServiceImpl.java index 8d4ae1b..40efaa4 100644 --- a/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/service/impl/GGroupsServiceImpl.java +++ b/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/service/impl/GGroupsServiceImpl.java @@ -1,10 +1,13 @@ package com.fastbee.ggroup.service.impl; +import cn.hutool.json.JSONUtil; 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.holder.ProjectHolder; import com.fastbee.common.utils.DateUtils; +import com.fastbee.common.utils.json.JsonUtils; import com.fastbee.ggroup.domain.GGroups; import com.fastbee.ggroup.domain.GSiteGroups; 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.GSiteGroupsMapper; import com.fastbee.ggroup.service.IGGroupsService; +import com.fastbee.system.mapper.SysDeptMapper; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -34,9 +38,12 @@ public class GGroupsServiceImpl implements IGGroupsService 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.gSiteGroupsMapper = gSiteGroupsMapper; + this.sysDeptMapper = sysDeptMapper; } @@ -79,6 +86,7 @@ public class GGroupsServiceImpl implements IGGroupsService */ @Override public List selectGGroupsListSites(GGroups gGroups) { + MPJLambdaWrapper gSiteGroupsMPJLambdaWrapper = new MPJLambdaWrapper() .select(GSiteGroups::getId, GSiteGroups::getParentId, GSiteGroups::getSiteId) // .select(GGroups::getName)//起个别名 @@ -89,7 +97,29 @@ public class GGroupsServiceImpl implements IGGroupsService .leftJoin(GSites.class, GSites::getId, GSiteGroups::getSiteId) .eq(GSiteGroups::getParentId, gGroups.getParentId()) .like(StringUtils.isNotBlank(gGroups.getSearchValue()), GSites::getName, gGroups.getSearchValue()); - return gSiteGroupsMapper.selectJoinList(GGroupSiteVo.class,gSiteGroupsMPJLambdaWrapper); + List 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 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; } /** diff --git a/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/service/impl/GSitesServiceImpl.java b/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/service/impl/GSitesServiceImpl.java index 155d9af..5925ace 100644 --- a/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/service/impl/GSitesServiceImpl.java +++ b/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/service/impl/GSitesServiceImpl.java @@ -151,9 +151,9 @@ public class GSitesServiceImpl extends ServiceImpl= -180 && value <= 180; // 经度范围 - // 如果需要判断纬度,则再添加一行判断逻辑:else if (value >= -90 && value <= 90) return true; 或者根据需要合并到一行判断中。 + /** + * 判断值是否在经纬度范围内 + * @param str 经纬度字符串表示的值 + * @return true 如果值在范围内,false 否则 + */ + private static boolean isValueInRange(String str) { + try { + double value = Double.parseDouble(str); + return value >= -180 && value <= 180; // 经度范围 + } catch (NumberFormatException e) { + // 字符串无法转换为数字,认为不在范围内 + return false; + } } /** diff --git a/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/impl/ProjectServiceImpl.java b/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/impl/ProjectServiceImpl.java index d4edda3..eb5d814 100644 --- a/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/impl/ProjectServiceImpl.java +++ b/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/impl/ProjectServiceImpl.java @@ -85,6 +85,7 @@ public class ProjectServiceImpl implements IProjectService Project::getAdministrativeAreaCode, Project::getLevel, Project::getDeptId, Project::getDeptName, Project::getVideoIntroduction, Project::getImage, Project::getLogo, Project::getRemark) .eq(Project::getId, projectId) + .eq(Project::getDelFlag,0) .list(); //查询项目管理员信息 List list = new LambdaQueryChainWrapper<>(sysUserMapper) @@ -117,6 +118,7 @@ public class ProjectServiceImpl implements IProjectService Project::getLogo, Project::getImage, Project::getLevel, Project::getDeptName, Project::getCreateTime, Project::getAdministrativeAreaCode,Project::getAdministrativeArea, Project::getProvinceCode,Project::getCityCode,Project::getCountyCode) + .eq(Project::getDelFlag,0) .like(StringUtils.isNotBlank(project.getSearchValue()),Project::getProjectName, project.getSearchValue()) .list(); } @@ -169,7 +171,7 @@ public class ProjectServiceImpl implements IProjectService SysDept sysDept = deptService.selectDeptById(100L); List sysMenuList = sysMenuService.selectMenuList(new SysMenu(), sysDept.getDeptUserId()); 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); SysRole sysRole = new SysRole(); sysRole.setRoleName("管理员"); @@ -184,7 +186,7 @@ public class ProjectServiceImpl implements IProjectService RegisterUserInput registerUserInput = new RegisterUserInput(); registerUserInput.setUsername(project.getUserName()); registerUserInput.setPassword(project.getPassword()); - registerUserInput.setPhonenumber(String.valueOf(UUID.randomUUID()).substring(5,9)); + registerUserInput.setPhonenumber(project.getPhoneNumber()); registerUserInput.setDeptId(newSysDept.getDeptId()); registerUserInput.setRoleIds(new Long[]{sysRole.getRoleId()}); RegisterUserOutput registerUserOutput = toolService.registerNoCaptcha(registerUserInput); @@ -331,9 +333,35 @@ public class ProjectServiceImpl implements IProjectService * 删除项目 */ @Override + @Transactional(rollbackFor = Exception.class) public int deleteProjectByProjectIds(Long projectId) - { - return projectMapper.deleteById(projectId); + { //逻辑删除项目信息 + boolean updateProject = new LambdaUpdateChainWrapper<>(projectMapper) + .set(Project::getDelFlag, "2") + .eq(Project::getId, projectId) + .update(); + //查询项目下的机构 + List 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 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.setProjectAreaCode(JSONUtil.parseArray(project.getCityCode()).get(0).toString()); } - if(project.getLevel().equals("县级")){ + if(project.getLevel().equals("县/区级")){ projectLoginBaseInfo.setProjectLevel(ProjectLevelConstant.LEVEL_COUNTY); projectLoginBaseInfo.setProjectAreaCode(JSONUtil.parseArray(project.getCountyCode()).get(0).toString()); } @@ -530,9 +558,12 @@ public class ProjectServiceImpl implements IProjectService } //先根据项目机构行政管理级别查上层的行政区划信息 - List aboveSysDistrictList = aboveSysDistrictLambdaQueryChainWrapper - .in(SysDistrict::getAdcode, queryInAdcodeList) - .list(); + List aboveSysDistrictList =new ArrayList<>(); + if(!queryInAdcodeList.isEmpty()){ + aboveSysDistrictList= aboveSysDistrictLambdaQueryChainWrapper + .in(SysDistrict::getAdcode, queryInAdcodeList) + .list(); + } //根据行政区划级别查询下级行政区划信息 List belowSysDistrictList = belowSysDistrictLambdaQueryChainWrapper .in(!queryInLevelList.isEmpty(),SysDistrict::getLevel, queryInLevelList) diff --git a/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/impl/SysDeptServiceImpl.java b/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/impl/SysDeptServiceImpl.java index c7cc0fa..ad526fe 100644 --- a/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/impl/SysDeptServiceImpl.java +++ b/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/impl/SysDeptServiceImpl.java @@ -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.text.Convert; import com.fastbee.common.exception.ServiceException; +import com.fastbee.common.holder.ProjectHolder; import com.fastbee.common.utils.DateUtils; import com.fastbee.common.utils.SecurityUtils; import com.fastbee.common.utils.StringUtils; @@ -251,6 +252,8 @@ public class SysDeptServiceImpl implements ISysDeptService } //设置祖级别列表 dept.setAncestors(info.getAncestors() + "," + dept.getParentId()); + //设置项目id + dept.setProjectId(Long.valueOf(ProjectHolder.getProjectInfo().getProjectId())); //处理机构所管理行政区划信息 parseAdministrativeDivisionInfo(dept); dept.setCreateTime(DateUtils.getNowDate());