!296 add 新增租户套餐同步功能
* update 修改按钮简化为同步套餐
* update 修改同步租户套餐接口message错误描述
* update 修改同步租户套餐权限字符
* update 修改状态修改权限字符
* add 租户管理新增租户套餐同步功能
已修改5个文件
94 ■■■■■ 文件已修改
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/system/SysTenantController.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTenantService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/api/system/tenant.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/system/tenant/index.vue 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/system/SysTenantController.java
@@ -122,8 +122,8 @@
     * 状态修改
     */
    @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
    @SaCheckPermission("system:tenantPackage:edit")
    @Log(title = "租户套餐", businessType = BusinessType.UPDATE)
    @SaCheckPermission("system:tenant:edit")
    @Log(title = "租户", businessType = BusinessType.UPDATE)
    @PutMapping("/changeStatus")
    public R<Void> changeStatus(@RequestBody SysTenantBo bo) {
        return toAjax(sysTenantService.updateTenantStatus(bo));
@@ -165,4 +165,19 @@
        return R.ok();
    }
    /**
     * 同步租户套餐
     *
     * @param tenantId  租户id
     * @param packageId 套餐id
     */
    @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
    @SaCheckPermission("system:tenant:edit")
    @Log(title = "租户", businessType = BusinessType.UPDATE)
    @GetMapping("/syncTenantPackage")
    public R<Void> syncTenantPackage(@NotBlank(message = "租户ID不能为空") String tenantId, @NotBlank(message = "套餐ID不能为空") String packageId) {
        return toAjax(sysTenantService.syncTenantPackage(tenantId, packageId));
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTenantService.java
@@ -69,4 +69,9 @@
     * 校验有效期
     */
    String checkExpireTime(String tenantId);
    /**
     * 同步租户套餐
     */
    Boolean syncTenantPackage(String tenantId, String packageId);
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java
@@ -335,4 +335,38 @@
        return TenantConstants.NOT_PASS;
    }
    /**
     * 同步租户套餐
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Boolean syncTenantPackage(String tenantId, String packageId) {
        TenantHelper.enableIgnore();
        SysTenantPackage tenantPackage = sysTenantPackageMapper.selectById(packageId);
        List<SysRole> roles = sysRoleMapper.selectList(
            new LambdaQueryWrapper<SysRole>().eq(SysRole::getTenantId, tenantId));
        List<Long> roleIds = new ArrayList<>(roles.size() - 1);
        List<Long> menuIds = StringUtils.splitTo(tenantPackage.getMenuIds(), Convert::toLong);
        roles.forEach(item -> {
            if (TenantConstants.TENANT_ADMIN_ROLE_KEY.equals(item.getRoleKey())) {
                List<SysRoleMenu> roleMenus = new ArrayList<>(menuIds.size());
                menuIds.forEach(menuId -> {
                    SysRoleMenu roleMenu = new SysRoleMenu();
                    roleMenu.setRoleId(item.getRoleId());
                    roleMenu.setMenuId(menuId);
                    roleMenus.add(roleMenu);
                });
                sysRoleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, item.getRoleId()));
                sysRoleMenuMapper.insertBatch(roleMenus);
            } else {
                roleIds.add(item.getRoleId());
            }
        });
        if (!roleIds.isEmpty()) {
            sysRoleMenuMapper.delete(
                new LambdaQueryWrapper<SysRoleMenu>().in(SysRoleMenu::getRoleId, roleIds).notIn(!menuIds.isEmpty(), SysRoleMenu::getMenuId, menuIds));
        }
        TenantHelper.disableIgnore();
        return true;
    }
}
ruoyi-ui/src/api/system/tenant.js
@@ -73,3 +73,16 @@
  })
}
// 同步租户套餐
export function syncTenantPackage(tenantId, packageId) {
  const data = {
    tenantId,
    packageId
  }
  return request({
    url: '/system/tenant/syncTenantPackage',
    method: 'get',
    params: data
  })
}
ruoyi-ui/src/views/system/tenant/index.vue
@@ -120,6 +120,13 @@
          <el-button
            size="mini"
            type="text"
            icon="el-icon-edit"
            @click="handleSyncTenantPackage(scope.row)"
            v-hasPermi="['system:tenant:edit']"
          >同步套餐</el-button>
          <el-button
            size="mini"
            type="text"
            icon="el-icon-delete"
            @click="handleDelete(scope.row)"
            v-hasPermi="['system:tenant:remove']"
@@ -192,7 +199,7 @@
</template>
<script>
import { listTenant, getTenant, delTenant, addTenant, updateTenant, changeTenantStatus } from "@/api/system/tenant";
import { listTenant, getTenant, delTenant, addTenant, updateTenant, changeTenantStatus, syncTenantPackage} from "@/api/system/tenant";
import { listTenantPackage } from "@/api/system/tenantPackage";
export default {
@@ -406,6 +413,20 @@
        this.loading = false;
      });
    },
    /** 同步租户套餐按钮操作 */
    handleSyncTenantPackage(row) {
      this.$modal.confirm('是否确认同步租户套餐租户编号为"' + row.tenantId + '"的数据项?').then(() => {
        this.loading = true;
        return syncTenantPackage(row.tenantId, row.packageId);
      }).then(() => {
        this.loading = false;
        this.getList();
        this.$modal.msgSuccess("同步成功");
      }).catch(() => {
      }).finally(() => {
        this.loading = false;
      });
    },
    /** 导出按钮操作 */
    handleExport() {
      this.download('system/tenant/export', {