diff --git a/fastbee-common/src/main/java/com/fastbee/common/core/domain/entity/SysDept.java b/fastbee-common/src/main/java/com/fastbee/common/core/domain/entity/SysDept.java index 2d394ad..7d23ad6 100644 --- a/fastbee-common/src/main/java/com/fastbee/common/core/domain/entity/SysDept.java +++ b/fastbee-common/src/main/java/com/fastbee/common/core/domain/entity/SysDept.java @@ -105,7 +105,9 @@ public class SysDept extends BaseEntity @ApiModelProperty("部门管理的项目id") private Long projectId; - + /** 机构的行政级别(3县4镇5村) */ + @ApiModelProperty("机构的行政级别(3县4镇5村)") + private Integer administrativeLevel; //业务字段----------------------------------------------------------------------------------------------------------- /** 父部门名称 */ 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 b47464b..3ca8fcf 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 @@ -64,11 +64,9 @@ public class ProjectDataIsolationInterceptor implements HandlerInterceptor { for (Cookie cookie : requestCookies){ //获取cookie中的projectIds if ("projectIds".equals(cookie.getName())) { - byte[] decode = Base64.decode(cookie.getValue()); - //转成List集合 - String decodedStr = new String(decode); - if (StringUtils.isNotBlank(decodedStr)) { - JSONArray objects = JSONUtil.parseArray(decodedStr); + + if (StringUtils.isNotBlank(cookie.getValue())) { + JSONArray objects = JSONUtil.parseArray(cookie.getValue()); projectInfo.setProjectIdList(objects.toList(Long.class)); } } @@ -85,22 +83,6 @@ public class ProjectDataIsolationInterceptor implements HandlerInterceptor { } ProjectHolder.setProjectInfo(projectInfo); - -// //获取路径中的查询字符串参数 -// String projectIds = request.getParameter("projectIds"); -// -// //为空则是超级管理员不做数据隔离 -// if (StringUtils.isBlank(projectIds)) { -// ProjectHolder.setProjectInfo(ProjectInfo.builder().projectId("").build()); -// return true; -// } -// byte[] decode = Base64.decode(projectIds); -// //转成List集合 -// String decodedStr = new String(decode); -// JSONArray objects = JSONUtil.parseArray(decodedStr); -// ProjectHolder.setProjectInfo(ProjectInfo.builder() -// .projectIdList(objects.toList(Long.class)) -// .build()); return true; } @Override diff --git a/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/domain/vo/GGroupSiteVo.java b/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/domain/vo/GGroupSiteVo.java index 30fe3dd..5a4be04 100644 --- a/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/domain/vo/GGroupSiteVo.java +++ b/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/domain/vo/GGroupSiteVo.java @@ -1,5 +1,7 @@ package com.fastbee.ggroup.domain.vo; +import com.fastbee.common.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @@ -13,7 +15,8 @@ public class GGroupSiteVo { private String type; // 对应 gs.type private String space; // 对应 gs.space private String spaceValue; // 对应 gs.space - private String areaCode;// 对应 gs.area_code + private String areaCode;// 对应 站点行政区划代码 + private String fullAreaCode;//站点行政区划完整代码 // Getter 和 Setter 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 1fc9d6c..71a6a95 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 @@ -83,7 +83,8 @@ public class GGroupsServiceImpl implements IGGroupsService .select(GSiteGroups::getId, GSiteGroups::getParentId, GSiteGroups::getSiteId) // .select(GGroups::getName)//起个别名 // .selectAs(GGroups::getName, "parentName") - .select(GSites::getName, GSites::getIcon, GSites::getType, GSites::getSpace, GSites::getSpaceValue) + .select(GSites::getName, GSites::getIcon, GSites::getType, GSites::getSpace, GSites::getSpaceValue, + GSites::getAreaCode,GSites::getFullAreaCode) .leftJoin(GGroups.class, GGroups::getId, GSiteGroups::getParentId) .leftJoin(GSites.class, GSites::getId, GSiteGroups::getSiteId) .eq(GSiteGroups::getParentId, gGroups.getParentId()) @@ -175,7 +176,8 @@ public class GGroupsServiceImpl implements IGGroupsService public List selectGGroupsAllListSites(GGroups gGroups) { MPJLambdaWrapper gSiteGroupsMPJLambdaWrapper = new MPJLambdaWrapper() .select(GSiteGroups::getId, GSiteGroups::getParentId, GSiteGroups::getSiteId) - .select(GSites::getName, GSites::getIcon, GSites::getType, GSites::getSpace, GSites::getSpaceValue,GSites::getAreaCode) + .select(GSites::getName, GSites::getIcon, GSites::getType, GSites::getSpace, + GSites::getSpaceValue,GSites::getAreaCode,GSites::getFullAreaCode) .leftJoin(GGroups.class, GGroups::getId, GSiteGroups::getParentId) .leftJoin(GSites.class, GSites::getId, GSiteGroups::getSiteId) .in(!ProjectHolder.getProjectInfo().getProjectIdList().isEmpty(),GGroups::getProjectId,ProjectHolder.getProjectInfo().getProjectIdList()); 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 9f95583..155d9af 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 @@ -3,6 +3,8 @@ package com.fastbee.ggroup.service.impl; import java.util.List; import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -62,7 +64,7 @@ public class GSitesServiceImpl extends ServiceImpl selectGSitesList(GSitesSelectDto gSites) { return new LambdaQueryChainWrapper<>(gSitesMapper) - .select(GSites::getId, GSites::getName, GSites::getIcon, GSites::getType) + .select(GSites::getId, GSites::getName, GSites::getIcon, GSites::getType,GSites::getAreaCode,GSites::getFullAreaCode) .eq(GSites::getProjectId, gSites.getProjectId()) .list(); } @@ -149,9 +151,9 @@ public class GSitesServiceImpl extends ServiceImpl= -180 && value <= 180) { - return true; - } - //满足纬度值 - else if (value >= -90 && value <= 90) { - return true; - } - return false; + String regex = "^[-+]?\\d{1,3}(\\.\\d+)?$"; // 修改了正则表达式的格式,允许有或无小数部分 + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(str); + + // 如果字符串匹配正则表达式且值的范围在经纬度范围内,则返回 true + return matcher.matches() && isValueInRange(str); } + private boolean isValueInRange(String str) { + double value = Double.parseDouble(str); + return value >= -180 && value <= 180; // 经度范围 + // 如果需要判断纬度,则再添加一行判断逻辑:else if (value >= -90 && value <= 90) return true; 或者根据需要合并到一行判断中。 + } /** * 修改站点 diff --git a/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/domain/Project.java b/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/domain/Project.java index 96eba97..bb9ebd3 100644 --- a/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/domain/Project.java +++ b/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/domain/Project.java @@ -168,5 +168,9 @@ public class Project extends BaseEntity * 确认密码 */ private String confirmPassword; + /** + * 手机号 + */ + private String phoneNumber; } 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 6808097..2f20a3e 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 @@ -14,6 +14,7 @@ import com.fastbee.common.core.domain.entity.SysUser; import com.fastbee.common.exception.ServiceException; import com.fastbee.common.holder.ProjectHolder; import com.fastbee.common.utils.DateUtils; +import com.fastbee.framework.web.domain.server.Sys; import com.fastbee.iot.model.RegisterUserInput; import com.fastbee.iot.model.RegisterUserOutput; import com.fastbee.iot.service.IToolService; @@ -77,17 +78,30 @@ public class ProjectServiceImpl implements IProjectService */ @Override public Project selectProjectByProjectId(Long projectId) - { + { //查询项目信息 List projectList = new LambdaQueryChainWrapper<>(projectMapper) .select(Project::getProjectName, Project::getSysShowName, Project::getCentralCoordinates, Project::getScope, Project::getAdministrativeAreaCode, Project::getLevel, Project::getDeptId, Project::getDeptName, Project::getVideoIntroduction, Project::getImage, Project::getLogo, Project::getRemark) .eq(Project::getId, projectId) .list(); + //查询项目管理员信息 + List list = new LambdaQueryChainWrapper<>(sysUserMapper) + .select(SysUser::getUserId, SysUser::getUserName, SysUser::getPhonenumber) + .eq(SysUser::getDeptId, projectList.get(0).getDeptId()) + .list(); + if(projectList.isEmpty()){ throw new ServiceException("项目不存在!"); } - return projectList.get(0); + if(list.isEmpty()){ + throw new ServiceException("项目机构管理员不存在!"); + } + Project project = projectList.get(0); + project.setUserName(list.get(0).getUserName()); + project.setPhoneNumber(list.get(0).getPhonenumber()); + + return project; } /** @@ -113,13 +127,6 @@ public class ProjectServiceImpl implements IProjectService @Transactional(rollbackFor = Exception.class) public int insertProject(Project project) { - //判断选择的机构下是否已经绑定项目 -// List projectList = new LambdaQueryChainWrapper<>(projectMapper) -// .select(Project::getId, Project::getProjectName) -// .eq(Project::getDeptId, project.getDeptId()).list(); -// if(!projectList.isEmpty()){ -// throw new ServiceException("该机构下已经存在项目"); -// } //TODO 参数校验 //获取当前时间 Date nowDate = DateUtils.getNowDate(); @@ -135,7 +142,10 @@ public class ProjectServiceImpl implements IProjectService newSysDept.setCreateTime(nowDate); //设置默认机构名称 newSysDept.setDeptName(project.getProjectName()); - newSysDept.setLeader("admin"); + //设置默认机构类型 + newSysDept.setDeptType(3); + //设置机构领导 + newSysDept.setLeader("hanzhen"); //设置机构型行政区域信息 newSysDept.setAdministrativeAreaCode(Objects.nonNull(project.getAdministrativeAreaCode())?project.getAdministrativeAreaCode():null); @@ -150,11 +160,13 @@ public class ProjectServiceImpl implements IProjectService throw new ServiceException("创建默认机构失败!"); } // 新增机构关联系统账号 - // 添加管理员角色,给所有权限 SysDept sysDept = deptService.selectDeptById(100L); List sysMenuList = sysMenuService.selectMenuList(new SysMenu(), sysDept.getDeptUserId()); - Long[] menuIdList = sysMenuList.stream().map(SysMenu::getMenuId).toArray(Long[]::new); + Long[] menuIdList = sysMenuList.stream().map(SysMenu::getMenuId) + .filter(menuId-> menuId!=3469L&&menuId!=3L&&menuId!=2L) + . + toArray(Long[]::new); SysRole sysRole = new SysRole(); sysRole.setRoleName("管理员"); sysRole.setRoleKey("manager"); @@ -168,7 +180,7 @@ public class ProjectServiceImpl implements IProjectService RegisterUserInput registerUserInput = new RegisterUserInput(); registerUserInput.setUsername(project.getUserName()); registerUserInput.setPassword(project.getPassword()); - registerUserInput.setPhonenumber("15666617898"); + registerUserInput.setPhonenumber(String.valueOf(UUID.randomUUID()).substring(5,9)); registerUserInput.setDeptId(newSysDept.getDeptId()); registerUserInput.setRoleIds(new Long[]{sysRole.getRoleId()}); RegisterUserOutput registerUserOutput = toolService.registerNoCaptcha(registerUserInput); @@ -180,21 +192,8 @@ public class ProjectServiceImpl implements IProjectService // 更新机构管理员角色绑定信息 deptService.updateDeptUserId(newSysDept.getDeptId(), registerUserOutput.getSysUserId()); - - -// //创建该机构的登录账号数据 -// SysUser newSysUser = new SysUser(); -// newSysUser.setUserName(project.getUserName()); -// newSysUser.setPassword(project.getPassword()); -// newSysUser.setNickName(project.getProjectName()+"管理员"); -// newSysUser.setDeptId(newSysDept.getDeptId()); -// newSysUser.setCreateTime(nowDate); -// newSysUser.setCreateBy(project.getCreateBy()); -// -// if(sysUserMapper.insertUser(newSysUser)<1){ -// throw new ServiceException("创建默认机构管理员账号失败!"); -// } project.setDeptId(newSysDept.getDeptId()); + project.setDeptName(project.getProjectName()); project.setCreateTime(DateUtils.getNowDate()); return projectMapper.insertProject(project); } @@ -335,28 +334,44 @@ public class ProjectServiceImpl implements IProjectService .select(SysUser::getUserId, SysUser::getDeptId) .eq(SysUser::getUserId, userId) .one(); + //查询机构 + SysDept sysDept = new LambdaQueryChainWrapper<>(sysDeptMapper) + .select(SysDept::getProvinceCode, SysDept::getCityCode, SysDept::getCountyCode, + SysDept::getTownCode, SysDept::getVillageCode,SysDept::getAdministrativeLevel,SysDept::getProjectId) + .eq(SysDept::getDeptId, sysUser.getDeptId()) + .one(); + if(Objects.isNull(sysDept)) { + return null; + } //查询该管理员所管理的项目id以及子项目id列表 Project project = new LambdaQueryChainWrapper<>(projectMapper) .select(Project::getId, Project::getProjectName,Project::getLevel,Project::getDeptId - ,Project::getCityCode,Project::getCountyCode) - .eq(Project::getDeptId, sysUser.getDeptId()) + ,Project::getCityCode,Project::getCountyCode) + .eq(Project::getId, sysDept.getProjectId()) .one(); if(Objects.isNull(project)){ return null; } + //查询项目对应行政区划的地图轮廓数据 - List sysDistrictList = new LambdaQueryChainWrapper<>(sysDistrictMapper) - .select(SysDistrict::getMapOutline, SysDistrict::getMapOutlineUrl,SysDistrict::getLng,SysDistrict::getLat) - .eq(SysDistrict::getAdcode, JSONUtil.parseArray(project.getCountyCode()).get(0)) + LambdaQueryChainWrapper sysDistrictLambdaQueryChainWrapper = new LambdaQueryChainWrapper<>(sysDistrictMapper) + .select(SysDistrict::getMapOutline, SysDistrict::getMapOutlineUrl, SysDistrict::getLng, SysDistrict::getLat); + if(sysDept.getAdministrativeLevel() == 3){ + sysDistrictLambdaQueryChainWrapper.eq(SysDistrict::getAdcode, JSONUtil.parseArray(sysDept.getCountyCode()).get(0)); + } + if(sysDept.getAdministrativeLevel() == 4){ + sysDistrictLambdaQueryChainWrapper.eq(SysDistrict::getAdcode, JSONUtil.parseArray(sysDept.getTownCode()).get(0)); + } + if(sysDept.getAdministrativeLevel() == 5){ + sysDistrictLambdaQueryChainWrapper.eq(SysDistrict::getAdcode, JSONUtil.parseArray(sysDept.getVillageCode()).get(0)); + } + List sysDistrictList = sysDistrictLambdaQueryChainWrapper .list(); - - - List projects = getAllProjects(project.getId()); - //把列表进行Base64编码 - String projectsBase64 = Base64.encode(projects.toString()); HashMap map = new HashMap<>(); - map.put("projectIds",projectsBase64); + ArrayList projectIds = new ArrayList<>(); + projectIds.add(project.getId()); + map.put("projectIds",projectIds.toString()); map.put("projectId",project.getId()); map.put("projectName", project.getProjectName()); @@ -378,7 +393,6 @@ public class ProjectServiceImpl implements IProjectService map.put("longitude",sysDistrictList.get(0).getLng()); map.put("latitude",sysDistrictList.get(0).getLat()); } - return map; } @@ -440,11 +454,6 @@ public class ProjectServiceImpl implements IProjectService throw new ServiceException("超出行政级别查询范围(1~5级)!"); } //查询项目的行政区划信息 -// Project project = new LambdaQueryChainWrapper<>(projectMapper) -// .select(Project::getProvinceCode, Project::getCityCode, Project::getCountyCode, -// Project::getTownCode, Project::getVillageCode) -// .eq(Project::getId, projectId) -// .one(); SysDept sysDept = new LambdaQueryChainWrapper<>(sysDeptMapper) .select(SysDept::getDeptId,SysDept::getProvinceCode, SysDept::getCityCode, SysDept::getCountyCode, SysDept::getTownCode, SysDept::getVillageCode) @@ -464,15 +473,13 @@ public class ProjectServiceImpl implements IProjectService LambdaQueryChainWrapper sysDistrictLambdaQueryChainWrapper = new LambdaQueryChainWrapper<>(sysDistrictMapper) .select(SysDistrict::getId, SysDistrict::getParentId, SysDistrict::getName, SysDistrict::getAdcode, SysDistrict::getLevel, SysDistrict::getFullName, SysDistrict::getName - , SysDistrict::getLng, SysDistrict::getLat); + , SysDistrict::getLng, SysDistrict::getLat,SysDistrict::getMapOutline,SysDistrict::getMapOutlineUrl); //限制行政区划级别 projectDistrictList = sysDistrictLambdaQueryChainWrapper .in(!administrativeCodeList.isEmpty(),SysDistrict::getAdcode,administrativeCodeList) .list(); -// System.err.println("项目所属县下面的所有镇、村行政区划列表"); -// System.err.println(projectDistrictList); //构建树状结构 return buildTree(projectDistrictList); } @@ -519,10 +526,6 @@ public class ProjectServiceImpl implements IProjectService distinctTownCodeList = townCodeList.stream().distinct().collect(Collectors.toList()); JSONArray villageCodeList = JSONUtil.parseArray(sysDept.getVillageCode()); -// System.err.println("镇行政区划代码"); -// System.err.println(distinctTownCodeList); -// System.err.println("村行政区划代码"); -// System.err.println(villageCodeList); //合并省、市、县、镇、村行政区划代码集合 List administrativeCodeList = new ArrayList<>(); int[] startLevels = {1, 2, 3, 4, 5}; @@ -542,9 +545,9 @@ public class ProjectServiceImpl implements IProjectService } private void isProvinceCodeBlank(SysDept sysDept) { -// if(sysDept.getDeptId().toString().equals("100")){ -// return ; -// } + if(sysDept.getDeptId().toString().equals("100")){ + return ; + } if (StringUtils.isBlank(sysDept.getProvinceCode())){ throw new ServiceException("项目省级行政区划信息缺失!"); } diff --git a/fastbee-service/fastbee-system-service/src/main/resources/mapper/system/SysDeptMapper.xml b/fastbee-service/fastbee-system-service/src/main/resources/mapper/system/SysDeptMapper.xml index b919c5b..54aed1e 100644 --- a/fastbee-service/fastbee-system-service/src/main/resources/mapper/system/SysDeptMapper.xml +++ b/fastbee-service/fastbee-system-service/src/main/resources/mapper/system/SysDeptMapper.xml @@ -6,7 +6,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + @@ -25,7 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select d.dept_id, d.dept_user_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.dept_type + select d.dept_id, d.dept_user_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.dept_type,d.administrative_level from sys_dept d @@ -61,7 +61,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"