package com.fzzy.sys.controller.system; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.*; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ShiroUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.shiro.service.SysPasswordService; import com.ruoyi.system.domain.SysCompany; import com.ruoyi.system.service.*; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.stream.Collectors; /** * 组织管理 * * @author andy */ @Controller @RequestMapping("/system/company") public class SysCompanyController extends BaseController { private String prefix = "system/company"; @Autowired private ISysCompanyService companyService; @Autowired private ISysDeptService deptService; @Autowired private ISysRoleService roleService; @Autowired private SysPasswordService passwordService; @Autowired private ISysUserService userService; @Autowired private ISysDictTypeService dictTypeService; @Autowired private ISysDictDataService dictDataService; @Autowired private ISysMenuService menuService; @RequiresPermissions("system:company:view") @GetMapping() public String config() { return prefix + "/company"; } /** * 查询参数配置列表 */ @RequiresPermissions("system:company:list") @PostMapping("/list") @ResponseBody public TableDataInfo list(SysCompany company) { if (null == company.getCompanyId()) { company.setCompanyId(ShiroUtils.getLoginUserCompanyId()); } startPage(); List list = companyService.selectAll(); return getDataTable(list); } @Log(title = "参数管理", businessType = BusinessType.EXPORT) @RequiresPermissions("system:company:export") @PostMapping("/export") @ResponseBody public AjaxResult export(SysCompany config) { List list = companyService.selectAll(); ExcelUtil util = new ExcelUtil(SysCompany.class); return util.exportExcel(list, "参数数据"); } /** * 新增参数配置 */ @GetMapping("/add") public String add() { return prefix + "/add"; } /** * 新增保存参数配置 */ @RequiresPermissions("system:company:add") @Log(title = "参数管理", businessType = BusinessType.INSERT) @PostMapping("/add") @ResponseBody public AjaxResult addSave(@Validated SysCompany company) { if (!companyService.checkCompanyIdUnique(company)) { return error("新增参数'" + company.getName() + "'失败,参数键名已存在"); } company.setCreateBy(getLoginName()); //新增组织 int res = companyService.insertCompany(company); //新增组织后的联动操作,创建部门,用户,角色,菜单,字典 createCompanyStep(company); return toAjax(res); // return toAjax(companyService.insertCompany(company)); } /** * 修改参数配置 */ @RequiresPermissions("system:company:edit") @GetMapping("/edit/{companyId}") public String edit(@PathVariable("companyId") String companyId, ModelMap mmap) { mmap.put("company", companyService.selectCompanyById(companyId)); return prefix + "/edit"; } /** * 修改保存参数配置 */ @RequiresPermissions("system:company:edit") @Log(title = "参数管理", businessType = BusinessType.UPDATE) @PostMapping("/edit") @ResponseBody public AjaxResult editSave(@Validated SysCompany company) { if (!companyService.checkCompanyIdUnique(company)) { return error("修改参数'" + company.getName() + "'失败,参数键名已存在"); } company.setUpdateBy(getLoginName()); return toAjax(companyService.updateCompany(company)); } /** * 删除参数配置 */ @RequiresPermissions("system:company:remove") @Log(title = "参数管理", businessType = BusinessType.DELETE) @PostMapping("/remove") @ResponseBody public AjaxResult remove(String ids) { companyService.deleteCompanyByIds(ids); return success(); } /** * 刷新参数缓存 */ @RequiresPermissions("system:company:remove") @Log(title = "参数管理", businessType = BusinessType.CLEAN) @GetMapping("/refreshCache") @ResponseBody public AjaxResult refreshCache() { companyService.resetCompanyCache(); return success(); } /** * 校验参数键名 */ @PostMapping("/checkCompanyIdUnique") @ResponseBody public boolean checkCompanyIdUnique(SysCompany config) { return companyService.checkCompanyIdUnique(config); } /** * 新增组织后的联动操作,创建部门,用户,角色,菜单,字典 * @param company */ private void createCompanyStep(SysCompany company){ //新增组织复制字典信息 copyDict(company); //新增组织复制菜单信息 List menus = copyMenu(company); //新增组织顶级部门 SysDept dept = addDept(company); //新增组织角色超级管理员,并添加角色权限菜单信息 SysRole role = addRole(company,menus); //新增组织管理用户,并更新用户超级管理员角色权限信息 addUser(company,dept,role); } /** * 新增组织添加顶级部门信息 * @param company */ private SysDept addDept(SysCompany company){ //查看是否存在顶级部门,存在则不进行创建 SysDept dept = new SysDept(); dept.setCompanyId(company.getCompanyId()); List depts = deptService.selectDeptList(dept); if(depts != null && depts.size() > 0){ dept = depts.get(0); return dept; } dept = new SysDept(); dept.setCompanyId(company.getCompanyId()); dept.setDeptId(Long.parseLong(company.getCompanyId())); dept.setParentId(0L); dept.setAncestors("0"); dept.setDeptName(company.getName()); dept.setOrderNum(0); dept.setStatus("0"); dept.setDelFlag("0"); dept.setCreateBy(company.getName()); deptService.insertDept(dept); //防止like查询,提高查询效率 dept.setDeptName(null); depts = deptService.selectDeptList(dept); if(depts != null && depts.size() > 0){ dept = depts.get(0); } return dept; } /** * 新增组织添加超级管理员角色 * @param company */ private SysRole addRole(SysCompany company, List menus){ //查看是否存在管理员权限信息,存在则不进行创建 SysRole role = new SysRole(); role.setCompanyId(company.getCompanyId()); List roles = roleService.selectRoleList(role); if(roles != null && roles.size() > 0){ role = roles.get(0); return role; } role = new SysRole(); role.setCompanyId(company.getCompanyId()); role.setRoleName("超级管理员"); role.setRoleKey("admin" + company.getCompanyId()); role.setRoleSort("0"); role.setDataScope("1"); role.setStatus("0"); role.setDelFlag("0"); role.setRemark("超级管理员"); role.setCreateBy(company.getName()); //封装菜单ID信息 Long[] menuIds = menus.stream().map(SysMenu::getMenuId).toArray(Long[]::new); role.setMenuIds(menuIds); roleService.insertRole(role); role = new SysRole(); role.setCompanyId(company.getCompanyId()); roles = roleService.selectRoleList(role); if(roles != null && roles.size() > 0){ role = roles.get(0); } return role; } /** * 新增组织添加默认登陆用户 * @param company */ private void addUser(SysCompany company,SysDept dept,SysRole role){ SysUser user = new SysUser(); user.setCompanyId(company.getCompanyId()); user.setUserName("系统管理员"); user.setDeptId(dept.getDeptId()); //默认登陆账号:admin+companyId user.setLoginName("admin" + company.getCompanyId()); //默认登陆密码:admin+companyId user.setPassword("admin" + company.getCompanyId()); user.setSalt(ShiroUtils.randomSalt()); // 密码加密 user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt())); user.setPwdUpdateDate(DateUtils.getNowDate()); user.setUserType("00"); user.setSex("2"); user.setStatus("0"); user.setDelFlag("0"); user.setRemark("默认管理用户"); user.setCreateBy(company.getName()); //配置该用户的权限信息 Long[] roleIds = new Long[1]; roleIds[0] = role.getRoleId(); user.setRoleIds(roleIds); userService.insertUser(user); // //查询该组织下的用户 // user = new SysUser(); // user.setCompanyId(company.getCompanyId()); // List users = userService.selectUserList(user); // if(users != null && users.size() > 0){ // user = users.get(0); // } // // //框架中impl实现方法,但是没有在service中做成接口 // // 位置SysUserServiceImpl:315行 // userService.insertUserRole(user.getUserId(),roleIds); } /** * 新增组织复制字典信息 * @param company */ private void copyDict(SysCompany company){ String companyId = ShiroUtils.getLoginUserCompanyId(); //查看组织下是否存在字典信息,存在则不进行复制 List dictTypes = dictTypeService.selectDictTypeAll(company.getCompanyId()); if(dictTypes == null || dictTypes.size() < 1){ //复制字典类型表 sys_dict_type List dictTypeSource = dictTypeService.selectDictTypeAll(companyId); if(dictTypeSource != null && dictTypeSource.size() > 0){ SysDictType dictType = null; for(SysDictType dict : dictTypeSource){ dictType = new SysDictType(); dictType.setCompanyId(company.getCompanyId()); // data.setDictId(dict.getDictId()); dictType.setDictName(dict.getDictName()); dictType.setDictType(dict.getDictType()); dictType.setStatus("0"); dictType.setRemark(dict.getRemark()); dictType.setCreateBy(company.getName()); dictTypeService.insertDictType(dictType); } } } //复制字典数据表 sys_dict_data SysDictData dictData = new SysDictData(); dictData.setCompanyId(company.getCompanyId()); //查看组织下是否存在字典信息,存在则不进行复制 List dictDatas = dictDataService.selectDictDataList(dictData); if(dictDatas == null || dictDatas.size() < 1){ dictData.setCompanyId(companyId); List dictDataSource = dictDataService.selectDictDataList(dictData); if(dictDataSource != null && dictDataSource.size() > 0){ dictData = null; for(SysDictData dict : dictDataSource){ dictData = new SysDictData(); dictData.setCompanyId(company.getCompanyId()); // dictData.setDictCode(dict.getDictCode()); dictData.setDictSort(dict.getDictSort()); dictData.setDictLabel(dict.getDictLabel()); dictData.setDictValue(dict.getDictValue()); dictData.setDictType(dict.getDictType()); dictData.setCssClass(dict.getCssClass()); dictData.setListClass(dict.getListClass()); dictData.setIsDefault(dict.getIsDefault()); dictData.setStatus("0"); dictData.setRemark(dict.getRemark()); dictData.setCreateBy(company.getName()); dictDataService.insertDictData(dictData); } } } } /** * 新增组织复制菜单权限表 * 单独创建一个系统内置的用户,用来进行菜单复制 * @param company */ private List copyMenu(SysCompany company){ //复制菜单权限表 sys_menu SysMenu menuParam = new SysMenu(); menuParam.setCompanyId(company.getCompanyId()); //根据组织号查询菜单列表,查看组织下是否存在菜单信息,存在则不进行复制 List list = menuService.selectBySysMenu(menuParam); if(list == null || list.size() < 1){ menuParam.setCompanyId(ShiroUtils.getLoginUserCompanyId()); Long userId = 1L; //获取目标用户下的所有菜单信息 List menus = menuService.selectMenuList(menuParam, userId); List menuSource = ChildPerms(menus, 0L); //复制菜单 copyChildMenu(menuSource,0L,company); } //查询并返回新插入的菜单信息 menuParam = new SysMenu(); menuParam.setCompanyId(company.getCompanyId()); //根据组织号查询菜单列表 List res = menuService.selectBySysMenu(menuParam); return res; } private List ChildPerms(List menus, Long parentId){ if(menus != null && menus.size() > 0){ //获取所有该父节点的list List res = menus.stream().filter(c -> c.getParentId().equals(parentId)).collect(Collectors.toList()); if(res == null || res.size() < 1){ return null; } for(SysMenu menu : res){ List child = ChildPerms(menus,menu.getMenuId()); if(child != null && child.size() > 0){ menu.setChildren(child); } } return res; }else{ return null; } } private void copyChildMenu(List menus,Long parentId,SysCompany company){ if(menus != null && menus.size() > 0){ SysMenu data = null; SysMenu param = new SysMenu(); for(SysMenu menu : menus){ data = new SysMenu(); data.setCompanyId(company.getCompanyId()); // data.setMenuId(menu.getMenuId()); data.setMenuName(menu.getMenuName()); data.setParentId(parentId); data.setOrderNum(menu.getOrderNum()); data.setUrl(menu.getUrl()); data.setTarget(menu.getTarget()); data.setMenuType(menu.getMenuType()); data.setVisible(menu.getVisible()); data.setIsRefresh(menu.getIsRefresh()); data.setPerms(menu.getPerms()); data.setIcon(menu.getIcon()); data.setRemark(menu.getRemark()); data.setCreateBy(company.getName()); menuService.insertMenu(data); param.setCompanyId(company.getCompanyId()); param.setParentId(parentId); //查询排序,id自增长,以id逆序排序,则第一个就是新插入的菜单 List list = menuService.selectBySysMenu(param); if(list != null){ SysMenu parentMenu = list.get(0); copyChildMenu(menu.getChildren(),parentMenu.getMenuId(),company); } } } } }