|
@@ -0,0 +1,287 @@
|
|
|
+package com.bizmatics.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.bizmatics.common.mvc.base.AbstractCrudService;
|
|
|
+import com.bizmatics.model.SysPlatformMenu;
|
|
|
+import com.bizmatics.model.SysTenantMenu;
|
|
|
+import com.bizmatics.model.system.SysMenu;
|
|
|
+import com.bizmatics.model.system.SysRole;
|
|
|
+import com.bizmatics.model.system.SysRoleMenu;
|
|
|
+import com.bizmatics.model.vo.SysMenuOneVo;
|
|
|
+import com.bizmatics.model.vo.SysMenuTwoVo;
|
|
|
+import com.bizmatics.model.vo.SysMenuVo;
|
|
|
+import com.bizmatics.model.vo.TenantMenuVo;
|
|
|
+import com.bizmatics.persistence.mapper.SysPlatformMenuMapper;
|
|
|
+import com.bizmatics.service.SysPlatformMenuService;
|
|
|
+import com.bizmatics.service.SysTenantMenuService;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * <p>
|
|
|
+ * 平台和菜单关联表 服务实现类
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @author ya
|
|
|
+ * @since 2022-05-18
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class SysPlatformMenuServiceImpl extends AbstractCrudService<SysPlatformMenuMapper, SysPlatformMenu> implements SysPlatformMenuService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SysTenantMenuService sysTenantMenuService;
|
|
|
+
|
|
|
+// public List<SysMenuOneVo> getMenuList(Integer platformId, Integer tenantId){
|
|
|
+// List<SysMenuTwoVo> MenuListOne = new ArrayList<>();
|
|
|
+// List<SysMenuOneVo> MenuListTwo = new ArrayList<>();
|
|
|
+// //平台全部一级目录
|
|
|
+// List<SysMenu> sysMenuListOne=baseMapper.getMenuList(platformId,"M");
|
|
|
+// //平台全部二级目录
|
|
|
+// List<SysMenu> sysMenuListTwo=baseMapper.getMenuList(platformId,"C");
|
|
|
+// if (sysMenuListTwo.size()<0||sysMenuListOne.size()<0) {
|
|
|
+// throw new BusinessException("平台目录配置错误或尚未配置");
|
|
|
+// }
|
|
|
+// //租户所选中的目录
|
|
|
+// LambdaQueryWrapper<SysTenantMenu> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+// queryWrapper.eq(SysTenantMenu::getTenantId, tenantId);
|
|
|
+// List<SysTenantMenu> sysTenantMenuList = sysTenantMenuService.list(queryWrapper);
|
|
|
+// for (int i = 0; i < sysMenuListTwo.size(); i++) {
|
|
|
+// SysMenuTwoVo sysMenuTwoVo = new SysMenuTwoVo();
|
|
|
+// sysMenuTwoVo.setId(sysMenuListTwo.get(i).getMenuId());
|
|
|
+// sysMenuTwoVo.setName(sysMenuListTwo.get(i).getMenuName());
|
|
|
+// sysMenuTwoVo.setFid(sysMenuListTwo.get(i).getParentId());
|
|
|
+// long Id = sysMenuListTwo.get(i).getMenuId();
|
|
|
+// sysMenuTwoVo.setChecked(false);
|
|
|
+// if (sysTenantMenuList.size() > 0) {
|
|
|
+// for (int j = 0; j < sysTenantMenuList.size(); j++) {
|
|
|
+// long MenuId = sysTenantMenuList.get(j).getMenuId();
|
|
|
+// if (Id == MenuId) {
|
|
|
+// sysMenuTwoVo.setChecked(true);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// } else {
|
|
|
+// sysMenuTwoVo.setChecked(false);
|
|
|
+// }
|
|
|
+// MenuListOne.add(sysMenuTwoVo);
|
|
|
+// }
|
|
|
+//
|
|
|
+// for (int i = 0; i < sysMenuListOne.size(); i++) {
|
|
|
+// SysMenuOneVo sysMenuOneVo = new SysMenuOneVo();
|
|
|
+// sysMenuOneVo.setId(sysMenuListOne.get(i).getMenuId());
|
|
|
+// sysMenuOneVo.setMenu(sysMenuListOne.get(i).getMenuName());
|
|
|
+// sysMenuOneVo.setFid(sysMenuListOne.get(i).getParentId());
|
|
|
+// long id = sysMenuListOne.get(i).getMenuId();
|
|
|
+// List<SysMenuTwoVo> sysMenuVoListTwo = new ArrayList<>();
|
|
|
+// for (int j = 0; j < MenuListOne.size(); j++) {
|
|
|
+// long FId = MenuListOne.get(j).getFid();
|
|
|
+// if (id == FId) {
|
|
|
+// sysMenuVoListTwo.add(MenuListOne.get(j));
|
|
|
+// }
|
|
|
+// }
|
|
|
+// sysMenuOneVo.setAuthority(sysMenuVoListTwo);
|
|
|
+// if (sysMenuVoListTwo.size()>0){
|
|
|
+// sysMenuOneVo.setChecked(true);
|
|
|
+// }else {
|
|
|
+// sysMenuOneVo.setChecked(false);
|
|
|
+// }
|
|
|
+// MenuListTwo.add(sysMenuOneVo);
|
|
|
+// }
|
|
|
+// return MenuListTwo;
|
|
|
+// }
|
|
|
+
|
|
|
+ public List<Object> getMenuList(Integer platformId, Integer tenantId) {
|
|
|
+
|
|
|
+ List<SysMenu> menuList = null;
|
|
|
+ List<SysMenu> sysMenuListTwo = new ArrayList<>();
|
|
|
+ List<SysMenu> sysMenuListOne = new ArrayList<>();
|
|
|
+ List<SysMenu> sysMenuListThree = new ArrayList<>();
|
|
|
+ //全部目录查询
|
|
|
+ sysMenuListTwo = baseMapper.getMenuList(platformId, "M");
|
|
|
+ //全部菜单查询
|
|
|
+ sysMenuListOne = baseMapper.getMenuList(platformId, "C");
|
|
|
+ //全部按钮列表
|
|
|
+ sysMenuListThree = baseMapper.getMenuList(platformId, "F");
|
|
|
+ //已选中按钮列表
|
|
|
+
|
|
|
+ LambdaQueryWrapper<SysTenantMenu> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper.eq(SysTenantMenu::getTenantId, tenantId);
|
|
|
+ List<SysTenantMenu> sysMenuListFour = sysTenantMenuService.list(queryWrapper);
|
|
|
+
|
|
|
+
|
|
|
+ List<SysMenuTwoVo> sysMenuVoListOne = new ArrayList<>();
|
|
|
+ List<SysMenuOneVo> SysMenuVoList = new ArrayList<>();
|
|
|
+ List<SysMenuVo> SysMenuVoListOne = new ArrayList<>();
|
|
|
+ List<Object> list = new ArrayList<>();
|
|
|
+// if (sysMenuListFour.size()>0){
|
|
|
+ for (int i = 0; i < sysMenuListThree.size(); i++) {
|
|
|
+ SysMenuTwoVo sysMenuTwoVo = new SysMenuTwoVo();
|
|
|
+ sysMenuTwoVo.setId(sysMenuListThree.get(i).getMenuId());
|
|
|
+ sysMenuTwoVo.setName(sysMenuListThree.get(i).getMenuName());
|
|
|
+ sysMenuTwoVo.setFid(sysMenuListThree.get(i).getParentId());
|
|
|
+ long Id = sysMenuListThree.get(i).getMenuId();
|
|
|
+ sysMenuTwoVo.setChecked(false);
|
|
|
+ if (sysMenuListFour.size() > 0) {
|
|
|
+ for (int j = 0; j < sysMenuListFour.size(); j++) {
|
|
|
+ long MenuId = sysMenuListFour.get(j).getMenuId();
|
|
|
+ if (Id == MenuId) {
|
|
|
+ sysMenuTwoVo.setChecked(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ sysMenuTwoVo.setChecked(false);
|
|
|
+ }
|
|
|
+
|
|
|
+ sysMenuVoListOne.add(sysMenuTwoVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (int i = 0; i < sysMenuListOne.size(); i++) {
|
|
|
+ SysMenuOneVo sysMenuOneVo = new SysMenuOneVo();
|
|
|
+ sysMenuOneVo.setId(sysMenuListOne.get(i).getMenuId());
|
|
|
+ sysMenuOneVo.setMenu(sysMenuListOne.get(i).getMenuName());
|
|
|
+ sysMenuOneVo.setFid(sysMenuListOne.get(i).getParentId());
|
|
|
+ long id = sysMenuListOne.get(i).getMenuId();
|
|
|
+ List<SysMenuTwoVo> sysMenuVoListTwo = new ArrayList<>();
|
|
|
+ for (int j = 0; j < sysMenuVoListOne.size(); j++) {
|
|
|
+ long FId = sysMenuVoListOne.get(j).getFid();
|
|
|
+ if (id == FId) {
|
|
|
+ sysMenuVoListTwo.add(sysMenuVoListOne.get(j));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sysMenuOneVo.setAuthority(sysMenuVoListTwo);
|
|
|
+ if (sysMenuVoListTwo.size()>0){
|
|
|
+ sysMenuOneVo.setChecked(true);
|
|
|
+ }else {
|
|
|
+ sysMenuOneVo.setChecked(false);
|
|
|
+ }
|
|
|
+ SysMenuVoList.add(sysMenuOneVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (int i = 0; i < sysMenuListTwo.size(); i++) {
|
|
|
+ SysMenuVo sysMenuVo = new SysMenuVo();
|
|
|
+ sysMenuVo.setId(sysMenuListTwo.get(i).getMenuId());
|
|
|
+ sysMenuVo.setMenu(sysMenuListTwo.get(i).getMenuName());
|
|
|
+ sysMenuVo.setFid(sysMenuListTwo.get(i).getParentId());
|
|
|
+ long id = sysMenuListTwo.get(i).getMenuId();
|
|
|
+ List<SysMenuOneVo> SysMenuVoListThree = new ArrayList<>();
|
|
|
+ for (int j = 0; j < SysMenuVoList.size(); j++) {
|
|
|
+ long FId = SysMenuVoList.get(j).getFid();
|
|
|
+ if (id == FId) {
|
|
|
+ SysMenuVoListThree.add(SysMenuVoList.get(j));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sysMenuVo.setChildren(SysMenuVoListThree);
|
|
|
+ if (SysMenuVoListThree.size()>0){
|
|
|
+ sysMenuVo.setChecked(true);
|
|
|
+ }else {
|
|
|
+ sysMenuVo.setChecked(false);
|
|
|
+ }
|
|
|
+
|
|
|
+ SysMenuVoListOne.add(sysMenuVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (int i = 0; i < SysMenuVoListOne.size(); i++) {
|
|
|
+ String name = SysMenuVoListOne.get(i).getMenu();
|
|
|
+ if (name.equals("数据管理") || name.equals("电能质量") || name.equals("系统管理")|| name.equals("租户管理")) {
|
|
|
+ list.add(SysMenuVoListOne.get(i));
|
|
|
+ } else {
|
|
|
+ for (int j = 0; j < SysMenuVoList.size(); j++) {
|
|
|
+ String name2 = SysMenuVoList.get(j).getMenu();
|
|
|
+ if (name.equals(name2)) {
|
|
|
+ list.add(SysMenuVoList.get(j));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+// }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public void updateMenu(TenantMenuVo tenantMenuVo)
|
|
|
+ {
|
|
|
+ Long[] arr = tenantMenuVo.getMenuIds();
|
|
|
+ //菜单ID
|
|
|
+ List<SysMenu> menuIdList = baseMapper.getMenuIdList(arr, "F");
|
|
|
+ Long arr1[] = new Long[menuIdList.size()];
|
|
|
+ for (int i=0;i<menuIdList.size();i++){
|
|
|
+ arr1[i] = menuIdList.get(i).getParentId();
|
|
|
+ }
|
|
|
+ //目录ID
|
|
|
+ List<SysMenu> menuIdListOne = baseMapper.getMenuIdList(arr1, "C");
|
|
|
+ Long arr2[] = new Long[menuIdListOne.size()];
|
|
|
+ for (int i=0;i<menuIdListOne.size();i++){
|
|
|
+ arr2[i] = menuIdListOne.get(i).getParentId();
|
|
|
+ }
|
|
|
+ List<SysMenu> menuIdListTwo = baseMapper.getMenuIdList(arr, "C");
|
|
|
+ Long arr4[] = new Long[menuIdListTwo.size()];
|
|
|
+ for (int i=0;i<menuIdListTwo.size();i++){
|
|
|
+ arr4[i] = menuIdListTwo.get(i).getParentId();
|
|
|
+ }
|
|
|
+ Long[] arr5 =arrayMerge(arr1,arr2);
|
|
|
+ Long[] arr6 =arrayMerge(arr5,arr4);
|
|
|
+ List arr3 = new ArrayList();
|
|
|
+ for (int i=0;i<arr6.length;i++){
|
|
|
+ if(!arr3.contains(arr6[i])){
|
|
|
+ arr3.add(arr6[i]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+// Long[] arr3 =ifRepeat2(arr6);
|
|
|
+// Long arr3[] = new Long[arr1.length+arr2.length+arr.length];
|
|
|
+// for (int i=0;i<arr1.length;i++){
|
|
|
+// arr3[i] = arr1[i];
|
|
|
+// }
|
|
|
+// for (int i=0;i<arr2.length;i++){
|
|
|
+// arr3[i+arr1.length] = arr2[i];
|
|
|
+// }
|
|
|
+// for (int i=0;i<arr.length;i++){
|
|
|
+// arr3[i+arr1.length+arr2.length] = arr[i];
|
|
|
+// }
|
|
|
+
|
|
|
+ // 删除角色与菜单关联
|
|
|
+ baseMapper.deleteTenantMenuBy(tenantMenuVo.getTenantId());
|
|
|
+ //新增菜单
|
|
|
+ if (arr3.size()>0){
|
|
|
+ for (int i=0;i<arr3.size();i++){
|
|
|
+ SysTenantMenu sysTenantMenu = new SysTenantMenu();
|
|
|
+ sysTenantMenu.setMenuId((Long) arr3.get(i));
|
|
|
+ sysTenantMenu.setTenantId(tenantMenuVo.getTenantId());
|
|
|
+ sysTenantMenuService.save(sysTenantMenu);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public Long[] arrayMerge(Long[] arr1,Long[] arr2){
|
|
|
+ Long arr3[] = new Long[arr1.length+arr2.length];
|
|
|
+ for (int i=0;i<arr1.length;i++){
|
|
|
+ arr3[i] = arr1[i];
|
|
|
+ }
|
|
|
+ for (int i=0;i<arr2.length;i++){
|
|
|
+ arr3[i+arr1.length] = arr2[i];
|
|
|
+ }
|
|
|
+ return arr3;
|
|
|
+ }
|
|
|
+
|
|
|
+ public Object[] ifRepeat2(Object[] arr){
|
|
|
+ //创建一个集合
|
|
|
+ List list = new ArrayList();
|
|
|
+ //遍历数组往集合里存元素
|
|
|
+ for(int i=0;i<arr.length;i++){
|
|
|
+ //如果集合里面没有相同的元素才往里存
|
|
|
+ if(!list.contains(arr[i])){
|
|
|
+ list.add(arr[i]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //toArray()方法会返回一个包含集合所有元素的Object类型数组
|
|
|
+ Object[] newArr = list.toArray();
|
|
|
+ return newArr;
|
|
|
+
|
|
|
+ }
|
|
|
+}
|