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 7234feb..2d394ad 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
@@ -73,6 +73,41 @@ public class SysDept extends BaseEntity
@ApiModelProperty("删除标志(0代表存在 2代表删除)")
private String delFlag;
+ /** 行政区域 */
+ @ApiModelProperty("行政区域")
+ private String administrativeArea;
+
+ /** 行政区域代码 */
+ @ApiModelProperty("行政区域代码")
+ private String administrativeAreaCode;
+
+ /** 行政区域省代码 */
+ @ApiModelProperty("行政区域省代码")
+ private String provinceCode;
+
+ /** 行政区域市代码 */
+ @ApiModelProperty("行政区域市代码")
+ private String cityCode;
+
+ /** 行政区域县代码 */
+ @ApiModelProperty("行政区域县代码")
+ private String countyCode;
+
+ /** 行政区域镇代码 */
+ @ApiModelProperty("行政区域镇代码")
+ private String townCode;
+
+ /** 行政区域村代码 */
+ @ApiModelProperty("行政区域村代码")
+ private String villageCode;
+
+ /** 部门管理的项目id */
+ @ApiModelProperty("部门管理的项目id")
+ private Long projectId;
+
+
+ //业务字段-----------------------------------------------------------------------------------------------------------
+
/** 父部门名称 */
@ApiModelProperty("父部门名称")
private String parentName;
diff --git a/fastbee-open-api/src/main/java/com/fastbee/data/controller/project/ProjectController.java b/fastbee-open-api/src/main/java/com/fastbee/data/controller/project/ProjectController.java
index fbeca73..df85f2f 100644
--- a/fastbee-open-api/src/main/java/com/fastbee/data/controller/project/ProjectController.java
+++ b/fastbee-open-api/src/main/java/com/fastbee/data/controller/project/ProjectController.java
@@ -146,7 +146,7 @@ public class ProjectController extends BaseController
*/
@GetMapping("/areaTree")
@ApiOperation("查询项目的行政区划树状列表")
- public AjaxResult getProjectAreaTree(@Param("projectId") Long projectId,@Param("startLevel") Integer startLevel){
- return success(projectService.getProjectAreaTree(projectId, startLevel));
+ public AjaxResult getProjectAreaTree(@Param("projectId") Long deptId,@Param("startLevel") Integer startLevel){
+ return success(projectService.getProjectAreaTree(deptId, startLevel));
}
}
diff --git a/fastbee-service/fastbee-project-service/pom.xml b/fastbee-service/fastbee-project-service/pom.xml
index b38bc7d..51992c0 100644
--- a/fastbee-service/fastbee-project-service/pom.xml
+++ b/fastbee-service/fastbee-project-service/pom.xml
@@ -27,6 +27,10 @@
com.fastbee
fastbee-system-service
+
+ com.fastbee
+ fastbee-iot-service
+
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 c8c7061..96eba97 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
@@ -153,4 +153,20 @@ public class Project extends BaseEntity
@ApiModelProperty("行政区域村代码")
private String villageCode;
+ //业务字段---------------------------------------------------------------------------
+ /**
+ * 系统账号名称
+ */
+ private String userName;
+
+ /**
+ * 系统账号密码
+ */
+ private String password;
+
+ /**
+ * 确认密码
+ */
+ private String confirmPassword;
+
}
diff --git a/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/IProjectService.java b/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/IProjectService.java
index 31aea42..ec3bde1 100644
--- a/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/IProjectService.java
+++ b/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/IProjectService.java
@@ -78,5 +78,5 @@ public interface IProjectService
* 获取项目行政区域列表
* @return 行政区域列表
*/
- List getProjectAreaTree(Long projectId,Integer startLevel);
+ List getProjectAreaTree(Long deptId,Integer startLevel);
}
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 34bbace..6808097 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
@@ -5,12 +5,18 @@ import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONException;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.fastbee.common.constant.ProjectLevelConstant;
import com.fastbee.common.core.domain.entity.SysDept;
+import com.fastbee.common.core.domain.entity.SysMenu;
+import com.fastbee.common.core.domain.entity.SysRole;
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.iot.model.RegisterUserInput;
+import com.fastbee.iot.model.RegisterUserOutput;
+import com.fastbee.iot.service.IToolService;
import com.fastbee.project.domain.Project;
import com.fastbee.project.mapper.ProjectMapper;
import com.fastbee.project.service.IProjectService;
@@ -19,8 +25,12 @@ import com.fastbee.system.domain.SysDistrict;
import com.fastbee.system.mapper.SysDeptMapper;
import com.fastbee.system.mapper.SysDistrictMapper;
import com.fastbee.system.mapper.SysUserMapper;
+import com.fastbee.system.service.ISysDeptService;
+import com.fastbee.system.service.ISysMenuService;
+import com.fastbee.system.service.ISysRoleService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
@@ -40,13 +50,25 @@ public class ProjectServiceImpl implements IProjectService
private final SysDistrictMapper sysDistrictMapper;
- public ProjectServiceImpl(ProjectMapper projectMapper, SysDeptMapper sysDeptMapper, SysUserMapper sysUserMapper, SysDistrictMapper sysDistrictMapper) {
+ private final ISysMenuService sysMenuService;
+
+ private final ISysRoleService sysRoleService;
+
+ private final ISysDeptService deptService;
+ private final IToolService toolService;
+
+ public ProjectServiceImpl(ProjectMapper projectMapper, SysDeptMapper sysDeptMapper, SysUserMapper sysUserMapper, SysDistrictMapper sysDistrictMapper, ISysMenuService sysMenuService, ISysRoleService sysRoleService, ISysDeptService deptService, IToolService toolService) {
this.projectMapper = projectMapper;
this.sysDeptMapper = sysDeptMapper;
this.sysUserMapper = sysUserMapper;
this.sysDistrictMapper = sysDistrictMapper;
+ this.sysMenuService = sysMenuService;
+ this.sysRoleService = sysRoleService;
+ this.deptService = deptService;
+ this.toolService = toolService;
}
+
/**
* 根据主键查询项目
*
@@ -88,21 +110,99 @@ public class ProjectServiceImpl implements IProjectService
* 新增项目
*/
@Override
+ @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("该机构下已经存在项目");
- }
- //处理项目行政区划
+// 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();
+ //处理项目行政区划
parseAdministrativeDivisionInfo(project);
+ //给项目分配一个机构--------------------------------------------------------
+ SysDept newSysDept = new SysDept();
+ //设置上级机构id
+ newSysDept.setParentId(100L);
+ //设置祖级列表
+ newSysDept.setAncestors("0,100");
+ //设置创建时间
+ newSysDept.setCreateTime(nowDate);
+ //设置默认机构名称
+ newSysDept.setDeptName(project.getProjectName());
+ newSysDept.setLeader("admin");
+
+ //设置机构型行政区域信息
+ newSysDept.setAdministrativeAreaCode(Objects.nonNull(project.getAdministrativeAreaCode())?project.getAdministrativeAreaCode():null);
+ newSysDept.setAdministrativeArea(Objects.nonNull(project.getAdministrativeArea())?project.getAdministrativeArea():null);
+ newSysDept.setProvinceCode(Objects.nonNull(project.getProvinceCode())?project.getProvinceCode():null);
+ newSysDept.setCityCode(Objects.nonNull(project.getCityCode())?project.getCityCode():null);
+ newSysDept.setCountyCode(Objects.nonNull(project.getCountyCode())?project.getCountyCode():null);
+ newSysDept.setTownCode(Objects.nonNull(project.getTownCode())?project.getTownCode():null);
+ newSysDept.setVillageCode(Objects.nonNull(project.getVillageCode())?project.getVillageCode():null);
+
+ if(sysDeptMapper.insertDept(newSysDept)<1){
+ 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);
+ SysRole sysRole = new SysRole();
+ sysRole.setRoleName("管理员");
+ sysRole.setRoleKey("manager");
+ sysRole.setRoleSort(1);
+ sysRole.setStatus("0");
+ sysRole.setDeptId(newSysDept.getDeptId());
+ sysRole.setMenuIds(menuIdList);
+ sysRoleService.insertRole(sysRole);
+
+ // 注册机构管理员用户
+ RegisterUserInput registerUserInput = new RegisterUserInput();
+ registerUserInput.setUsername(project.getUserName());
+ registerUserInput.setPassword(project.getPassword());
+ registerUserInput.setPhonenumber("15666617898");
+ registerUserInput.setDeptId(newSysDept.getDeptId());
+ registerUserInput.setRoleIds(new Long[]{sysRole.getRoleId()});
+ RegisterUserOutput registerUserOutput = toolService.registerNoCaptcha(registerUserInput);
+ if (com.fastbee.common.utils.StringUtils.isNotEmpty(registerUserOutput.getMsg())) {
+ deptService.deleteDeptById(newSysDept.getDeptId());
+ sysRoleService.deleteRoleById(sysRole.getRoleId());
+ throw new ServiceException(registerUserOutput.getMsg());
+ }
+ // 更新机构管理员角色绑定信息
+ 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.setCreateTime(DateUtils.getNowDate());
return projectMapper.insertProject(project);
}
+ /**
+ * 解析项目行政区划信息
+ * @param project 项目
+ */
private void parseAdministrativeDivisionInfo(Project project) {
//项目行政区域处理
//拆解项目行政区域代码信息
@@ -131,19 +231,25 @@ public class ProjectServiceImpl implements IProjectService
//单个行政区划代码列表
JSONArray administrativeArea = JSONUtil.parseArray(item);
//拆解出每个行政区划代码里面的镇或村
- if(administrativeArea.size()!=5){
- throw new ServiceException("项目行政区域代码多选列表的元素长度必须为5,到达村级别!");
- }
+// if(administrativeArea.size()!=5){
+// throw new ServiceException("项目行政区域代码多选列表的元素长度必须为5,到达村级别!");
+// }
//保存项目省代码列表
provincialCodeList.add(administrativeArea.get(0).toString());
//保存项目市代码列表
cityCodeList.add(administrativeArea.get(1).toString());
//保存项目县代码列表
countyCodeList.add(administrativeArea.get(2).toString());
- //保存项目镇代码列表
- townCodeList.add(administrativeArea.get(3).toString());
- //保存项目村代码列表
- villageCodeList.add(administrativeArea.get(4).toString());
+
+ if(administrativeArea.size()>=4){
+ //保存项目镇代码列表
+ townCodeList.add(administrativeArea.get(3).toString());
+ }
+ if(administrativeArea.size()>=5){
+ //保存项目村代码列表
+ villageCodeList.add(administrativeArea.get(4).toString());
+ }
+
});
//设置项目省、市、县、镇、村行政区划代码列表
@@ -170,6 +276,7 @@ public class ProjectServiceImpl implements IProjectService
* 修改项目
*/
@Override
+ @Transactional(rollbackFor = Exception.class)
public int updateProject(Project project)
{
//判断选择的机构下是否已经绑定项目
@@ -187,7 +294,24 @@ public class ProjectServiceImpl implements IProjectService
project.setUpdateTime(DateUtils.getNowDate());
//处理项目行政区划
parseAdministrativeDivisionInfo(project);
- return projectMapper.updateProject(project);
+ //同步更新项目所属最顶级部门行政区划数据
+ boolean updateDept = new LambdaUpdateChainWrapper<>(sysDeptMapper)
+ .set(SysDept::getAdministrativeAreaCode, project.getAdministrativeAreaCode())
+ .set(SysDept::getProvinceCode, project.getProvinceCode())
+ .set(SysDept::getCityCode, project.getCityCode())
+ .set(SysDept::getCountyCode, project.getCountyCode())
+ .set(SysDept::getTownCode, project.getTownCode())
+ .set(SysDept::getVillageCode, project.getVillageCode())
+ .eq(SysDept::getDeptId, project.getDeptId())
+ .update();
+ if(!updateDept){
+ throw new ServiceException("同步更新项目所属最顶级部门行政区划数据失败!");
+ }
+ int updateProject = projectMapper.updateProject(project);
+ if(updateProject <1 ){
+ throw new ServiceException("修改项目失败!");
+ }
+ return 1;
}
/**
@@ -211,7 +335,6 @@ public class ProjectServiceImpl implements IProjectService
.select(SysUser::getUserId, SysUser::getDeptId)
.eq(SysUser::getUserId, userId)
.one();
-
//查询该管理员所管理的项目id以及子项目id列表
Project project = new LambdaQueryChainWrapper<>(projectMapper)
.select(Project::getId, Project::getProjectName,Project::getLevel,Project::getDeptId
@@ -311,24 +434,30 @@ public class ProjectServiceImpl implements IProjectService
* 查询项目的行政区划树状列表
*/
@Override
- public List getProjectAreaTree(Long projectId,Integer startLevel) {
+ public List getProjectAreaTree(Long deptId,Integer startLevel) {
//参数校验
if(startLevel>5||startLevel<1){
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)
+// 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)
+ .eq(SysDept::getDeptId, deptId)
.one();
- if (Objects.isNull(project)) {
- throw new ServiceException("项目不存在");
+ if (Objects.isNull(sysDept)) {
+// throw new ServiceException("项目不存在");
+ return null;
}
//判断项目的省、市、县、镇、村行政区划列表数据不为null
- isProvinceCodeBlank(project);
+ isProvinceCodeBlank(sysDept);
- List