Kaynağa Gözat

fix 添加租户

jay 11 ay önce
ebeveyn
işleme
b5db785c53

+ 3 - 0
iot-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysMenuData.java

@@ -67,4 +67,7 @@ public interface ISysMenuData extends ICommonData<SysMenu, Long> {
     boolean checkMenuNameUnique(SysMenu menu);
 
 
+    List<Long> selectParentIdByMenuIds(List<Long> menuIds);
+
+    List<Long> findByMenuIdListAndNotParentIdList(List<Long> menuIds, List<Long> parentIds);
 }

+ 17 - 0
iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysMenuDataImpl.java

@@ -35,8 +35,11 @@ import cc.iotkit.data.model.TbSysMenu;
 import cc.iotkit.data.system.ISysMenuData;
 import cc.iotkit.data.util.PredicateBuilder;
 import cc.iotkit.model.system.SysMenu;
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.querydsl.core.types.Predicate;
 import com.querydsl.core.types.Projections;
+import com.querydsl.jpa.impl.JPAQuery;
 import com.querydsl.jpa.impl.JPAQueryFactory;
 import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Primary;
@@ -229,4 +232,18 @@ public class SysMenuDataImpl implements ISysMenuData, IJPACommData<SysMenu, Long
                                 .build()).fetchOne();
         return Objects.isNull(tbSysMenu);
     }
+
+    @Override
+    public List<Long> selectParentIdByMenuIds(List<Long> menuIds) {
+        return jpaQueryFactory.select(tbSysMenu.parentId).from(tbSysMenu).where(tbSysMenu.id.in(menuIds)).fetch();
+
+    }
+
+    @Override
+    public List<Long> findByMenuIdListAndNotParentIdList(List<Long> menuIds, List<Long> parentIds) {
+        Predicate build = PredicateBuilder.instance()
+                .and(tbSysMenu.id.in(menuIds))
+                .and(CollectionUtil.isNotEmpty(parentIds), () -> tbSysMenu.id.notIn(parentIds)).build();
+        return jpaQueryFactory.select(tbSysMenu.id).from(tbSysMenu).where(build).fetch();
+    }
 }

+ 22 - 0
iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysTenantDataImpl.java

@@ -23,6 +23,8 @@
 
 package cc.iotkit.data.service;
 
+import cc.iotkit.common.tenant.dao.TenantAware;
+import cc.iotkit.common.tenant.helper.TenantHelper;
 import cc.iotkit.common.utils.MapstructUtils;
 import cc.iotkit.common.utils.StringUtils;
 import cc.iotkit.data.dao.IJPACommData;
@@ -30,7 +32,10 @@ import cc.iotkit.data.dao.SysTenantRepository;
 import cc.iotkit.data.model.TbSysTenant;
 import cc.iotkit.data.system.ISysTenantData;
 import cc.iotkit.data.util.PredicateBuilder;
+import cc.iotkit.model.TenantModel;
 import cc.iotkit.model.system.SysTenant;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.bean.copier.CopyOptions;
 import cn.hutool.core.util.ObjectUtil;
 import com.querydsl.jpa.impl.JPAQueryFactory;
 import lombok.RequiredArgsConstructor;
@@ -40,6 +45,7 @@ import org.springframework.stereotype.Service;
 
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 
 import static cc.iotkit.data.model.QTbSysTenant.tbSysTenant;
 
@@ -100,4 +106,20 @@ public class SysTenantDataImpl implements ISysTenantData, IJPACommData<SysTenant
                         .build()).fetchOne();
         return Objects.isNull(ret);
     }
+    @Override
+    public SysTenant save(SysTenant data) {
+        Long id = data.getId();
+        Object tbData = MapstructUtils.convert(data, getJpaRepositoryClass());
+        Optional byId = id == null ? Optional.empty() : getBaseRepository().findById(id);
+        if (byId.isPresent()) {
+            Object dbObj = byId.get();
+            //只更新不为空的字段
+            BeanUtil.copyProperties(tbData, dbObj, CopyOptions.create().ignoreNullValue());
+            tbData = dbObj;
+        }
+
+        Object o = getBaseRepository().save(tbData);
+        return (SysTenant) MapstructUtils.convert(o, getTClass());
+    }
+
 }

+ 16 - 0
iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysMenuController.java

@@ -176,6 +176,22 @@ public class SysMenuController extends BaseController {
         menuService.updateMenu(menu);
     }
 
+
+    /**
+     * 加载对应租户套餐菜单列表树
+     *
+     * @param packageId 租户套餐ID
+     */
+    @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
+    @SaCheckPermission("system:menu:query")
+    @PostMapping(value = "/tenantPackageMenuTreeselect")
+    public MenuTreeSelectVo tenantPackageMenuTreeselect(@Validated @RequestBody Request<Long> bo) {
+        List<SysMenuVo> menus = menuService.selectMenuList(LoginHelper.getUserId());
+        MenuTreeSelectVo selectVo = new MenuTreeSelectVo();
+        selectVo.setCheckedKeys(menuService.selectMenuListByPackageId(bo.getData()));
+        selectVo.setMenus(menuService.buildMenuTreeSelect(menus));
+        return selectVo;
+    }
     /**
      * 删除菜单
      *

+ 2 - 2
iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysTenantController.java

@@ -114,7 +114,7 @@ public class SysTenantController extends BaseController {
         if (!tenantService.checkCompanyNameUnique(data)) {
             fail("新增租户'" + data.getCompanyName() + "'失败,企业名称已存在");
         }
-        tenantService.insertByBo(data);
+        TenantHelper.ignore(()->tenantService.insertByBo(data));
     }
 
     /**
@@ -131,7 +131,7 @@ public class SysTenantController extends BaseController {
         if (!tenantService.checkCompanyNameUnique(data)) {
             fail("修改租户'" + data.getCompanyName() + "'失败,公司名称已存在");
         }
-        tenantService.updateByBo(data);
+        TenantHelper.ignore(()->tenantService.updateByBo(data)); ;
     }
 
     /**

+ 5 - 8
iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysTenantPackageController.java

@@ -99,15 +99,14 @@ public class SysTenantPackageController extends BaseController {
     /**
      * 获取租户套餐详细信息
      *
-     * @param packageId 主键
+     * @param  主键
      */
     @ApiOperation("获取租户套餐详细信息")
     @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
     @SaCheckPermission("system:tenantPackage:query")
     @PostMapping("/getInfo")
-    public SysTenantPackageVo getInfo(@NotNull(message = "主键不能为空")
-                                      @PathVariable Long packageId) {
-        return tenantPackageService.queryById(packageId);
+    public SysTenantPackageVo getInfo(@RequestBody @Validated Request<Long> bo) {
+        return tenantPackageService.queryById(bo.getData());
     }
 
     /**
@@ -149,15 +148,13 @@ public class SysTenantPackageController extends BaseController {
     /**
      * 删除租户套餐
      *
-     * @param packageIds 主键串
      */
     @ApiOperation("删除租户套餐")
     @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
     @SaCheckPermission("system:tenantPackage:remove")
     @Log(title = "租户套餐", businessType = BusinessType.DELETE)
     @PostMapping("/delete")
-    public void remove(@NotEmpty(message = "主键不能为空")
-                       @PathVariable Long[] packageIds) {
-        tenantPackageService.deleteWithValidByIds(List.of(packageIds), true);
+    public void remove(@RequestBody Request<List<Long>> bo) {
+        tenantPackageService.deleteWithValidByIds(bo.getData(), true);
     }
 }

+ 4 - 0
iot-module/iot-system/src/main/java/cc/iotkit/system/dto/bo/SysTenantBo.java

@@ -24,6 +24,7 @@
 package cc.iotkit.system.dto.bo;
 
 import cc.iotkit.common.api.BaseDto;
+import cc.iotkit.common.utils.DateUtils;
 import cc.iotkit.common.validate.AddGroup;
 import cc.iotkit.common.validate.EditGroup;
 import cc.iotkit.model.system.SysTenant;
@@ -32,7 +33,9 @@ import org.hibernate.validator.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
 
+import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
@@ -120,6 +123,7 @@ public class SysTenantBo extends BaseDto {
     /**
      * 过期时间
      */
+    @DateTimeFormat(pattern = DateUtils.YYYY_MM_DD_HH_MM_SS)
     private Date expireTime;
 
     /**

+ 2 - 0
iot-module/iot-system/src/main/java/cc/iotkit/system/service/ISysMenuService.java

@@ -159,4 +159,6 @@ public interface ISysMenuService {
      * @return 结果
      */
     boolean checkMenuNameUnique(SysMenuBo menu);
+
+    List<Long> selectMenuListByPackageId(Long data);
 }

+ 31 - 0
iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysMenuServiceImpl.java

@@ -30,23 +30,34 @@ import cc.iotkit.common.utils.MapstructUtils;
 import cc.iotkit.common.utils.StreamUtils;
 import cc.iotkit.common.utils.StringUtils;
 import cc.iotkit.common.utils.TreeBuildUtils;
+import cc.iotkit.data.dao.SysTenantPackageRepository;
 import cc.iotkit.data.system.ISysMenuData;
 import cc.iotkit.data.system.ISysRoleData;
 import cc.iotkit.data.system.ISysRoleMenuData;
+import cc.iotkit.data.system.ISysTenantPackageData;
+import cc.iotkit.data.util.PredicateBuilder;
 import cc.iotkit.model.system.SysMenu;
 import cc.iotkit.model.system.SysRole;
+import cc.iotkit.model.system.SysTenantPackage;
 import cc.iotkit.system.dto.bo.SysMenuBo;
 import cc.iotkit.system.dto.vo.MetaVo;
 import cc.iotkit.system.dto.vo.RouterVo;
 import cc.iotkit.system.dto.vo.SysMenuVo;
 import cc.iotkit.system.service.ISysMenuService;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.convert.Convert;
 import cn.hutool.core.lang.tree.Tree;
+import com.querydsl.core.types.Predicate;
 import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
 
+import static cc.iotkit.data.model.QTbSysConfig.tbSysConfig;
+import static cc.iotkit.data.model.QTbSysMenu.tbSysMenu;
+
 /**
  * 菜单 业务层处理
  *
@@ -60,6 +71,9 @@ public class SysMenuServiceImpl implements ISysMenuService {
     private final ISysRoleData sysRoleData;
     private final ISysRoleMenuData iSysRoleMenuData;
 
+
+    private final ISysTenantPackageData iSysTenantPackageData;
+
     /**
      * 根据用户查询系统菜单列表
      *
@@ -383,6 +397,23 @@ public class SysMenuServiceImpl implements ISysMenuService {
         return sysMenuData.checkMenuNameUnique(bo.to(SysMenu.class));
     }
 
+    @Override
+    public List<Long> selectMenuListByPackageId(Long packageId) {
+        SysTenantPackage tenantPackage = iSysTenantPackageData.findById(packageId);
+        List<Long> menuIds = StringUtils.splitTo(tenantPackage.getMenuIds(), Convert::toLong);
+        if (CollUtil.isEmpty(menuIds)) {
+            return List.of();
+        }
+        List<Long> parentIds;
+        if (Objects.equals(tenantPackage.getMenuCheckStrictly(),true)) {
+            parentIds = sysMenuData.selectParentIdByMenuIds(menuIds);
+        } else {
+            parentIds = null;
+        }
+
+        return sysMenuData.findByMenuIdListAndNotParentIdList(menuIds, parentIds);
+    }
+
     /**
      * 根据父节点的ID获取所有子节点
      *

+ 5 - 1
iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysTenantServiceImpl.java

@@ -111,7 +111,9 @@ public class SysTenantServiceImpl implements ISysTenantService {
 
     @Override
     public void insertByBo(SysTenantBo bo) {
-        bo.setTenantId(YitIdHelper.nextId());
+        long tenantId = YitIdHelper.nextId();
+        bo.setId(tenantId);
+        bo.setTenantId(tenantId);
         SysTenant sysTenant=sysTenantData.save(bo.to(SysTenant.class));
         // 根据套餐创建角色
         Long roleId = createTenantRole(sysTenant.getTenantId(), bo.getPackageId());
@@ -131,6 +133,7 @@ public class SysTenantServiceImpl implements ISysTenantService {
         SysRoleDept roleDept = new SysRoleDept();
         roleDept.setRoleId(roleId);
         roleDept.setDeptId(deptId);
+        roleDept.setTenantId(tenantId);
         sysRoleDeptData.save(roleDept);
 
         // 创建系统用户
@@ -155,6 +158,7 @@ public class SysTenantServiceImpl implements ISysTenantService {
         SysUserRole userRole = new SysUserRole();
         userRole.setUserId(retUser.getId());
         userRole.setRoleId(roleId);
+        userRole.setTenantId(tenantId);
         sysUserRoleData.save(userRole);
 
         Long defaultTenantId = TenantConstants.DEFAULT_TENANT_ID;