Преглед на файлове

更新初始化数据
新增套餐表ad_pkg、租户套餐表ad_tenant_pkg、套餐权限表ad_pkg_permission
新增套餐管理服务PkgService

zhontai преди 2 години
родител
ревизия
1298c6e188
променени са 44 файла, в които са добавени 1840 реда и са изтрити 347 реда
  1. 161 141
      src/hosts/ZhonTai.Host/InitData/Admin/ad_api.json
  2. 2 2
      src/hosts/ZhonTai.Host/InitData/Admin/ad_dict.json
  3. 1 1
      src/hosts/ZhonTai.Host/InitData/Admin/ad_dict_type.json
  4. 1 1
      src/hosts/ZhonTai.Host/InitData/Admin/ad_org.json
  5. 1 1
      src/hosts/ZhonTai.Host/InitData/Admin/ad_org.tenant.json
  6. 265 0
      src/hosts/ZhonTai.Host/InitData/Admin/ad_permission.json
  7. 109 129
      src/hosts/ZhonTai.Host/InitData/Admin/ad_permission_api.json
  8. 6 6
      src/hosts/ZhonTai.Host/InitData/Admin/ad_role.json
  9. 6 6
      src/hosts/ZhonTai.Host/InitData/Admin/ad_role.tenant.json
  10. 1 1
      src/hosts/ZhonTai.Host/InitData/Admin/ad_tenant.json
  11. 1 1
      src/hosts/ZhonTai.Host/InitData/Admin/ad_user.json
  12. 1 1
      src/hosts/ZhonTai.Host/InitData/Admin/ad_user.tenant.json
  13. 1 1
      src/hosts/ZhonTai.Host/InitData/Admin/ad_user_org.json
  14. 1 1
      src/hosts/ZhonTai.Host/InitData/Admin/ad_user_role.json
  15. 1 1
      src/hosts/ZhonTai.Host/InitData/Admin/ad_user_staff.json
  16. 1 1
      src/hosts/ZhonTai.Host/InitData/Admin/ad_user_staff.tenant.json
  17. 42 23
      src/hosts/ZhonTai.Host/InitData/Admin/ad_view.json
  18. 22 0
      src/platform/ZhonTai.Admin/Domain/Pkg/IPkgRepository.cs
  19. 73 0
      src/platform/ZhonTai.Admin/Domain/Pkg/PkgEntity.cs
  20. 7 0
      src/platform/ZhonTai.Admin/Domain/PkgPermission/IPkgPermissionRepository.cs
  21. 34 0
      src/platform/ZhonTai.Admin/Domain/PkgPermission/PkgPermissionEntity.cs
  22. 1 1
      src/platform/ZhonTai.Admin/Domain/Role/Dto/RoleGetRoleUserListInput.cs
  23. 7 0
      src/platform/ZhonTai.Admin/Domain/TenantPkg/ITenantPkgRepository.cs
  24. 28 0
      src/platform/ZhonTai.Admin/Domain/TenantPkg/TenantPkgEntity.cs
  25. 40 0
      src/platform/ZhonTai.Admin/Repositories/Pkg/PkgRepository.cs
  26. 12 0
      src/platform/ZhonTai.Admin/Repositories/PkgPermission/PkgPermissionRepository.cs
  27. 12 0
      src/platform/ZhonTai.Admin/Repositories/TenantPkg/TenantPkgRepository.cs
  28. 2 2
      src/platform/ZhonTai.Admin/Services/Permission/PermissionService.cs
  29. 37 0
      src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgAddInput.cs
  30. 20 0
      src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgAddPkgTenantListInput.cs
  31. 9 0
      src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgGetListInput.cs
  32. 34 0
      src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgGetListOutput.cs
  33. 6 0
      src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgGetOutput.cs
  34. 9 0
      src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgGetPageDto.cs
  35. 36 0
      src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgGetPageOutput.cs
  36. 14 0
      src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgGetPkgTenantListInput.cs
  37. 19 0
      src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgGetPkgTenantListOutput.cs
  38. 13 0
      src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgSetPkgPermissionsInput.cs
  39. 17 0
      src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgUpdateInput.cs
  40. 366 0
      src/platform/ZhonTai.Admin/Services/Pkg/PkgService.cs
  41. 13 0
      src/platform/ZhonTai.Admin/Services/Pkg/_MapConfig.cs
  42. 1 1
      src/platform/ZhonTai.Admin/Services/Role/Dto/RoleGetRoleUserListOutput.cs
  43. 4 4
      src/platform/ZhonTai.Admin/Services/Role/RoleService.cs
  44. 403 22
      src/platform/ZhonTai.Admin/ZhonTai.Admin.xml

Файловите разлики са ограничени, защото са твърде много
+ 161 - 141
src/hosts/ZhonTai.Host/InitData/Admin/ad_api.json


+ 2 - 2
src/hosts/ZhonTai.Host/InitData/Admin/ad_dict.json

@@ -15,7 +15,7 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   },
   {
     "id": 187395320369221,
@@ -33,6 +33,6 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   }
 ]

+ 1 - 1
src/hosts/ZhonTai.Host/InitData/Admin/ad_dict_type.json

@@ -12,6 +12,6 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   }
 ]

+ 1 - 1
src/hosts/ZhonTai.Host/InitData/Admin/ad_org.json

@@ -19,6 +19,6 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   }
 ]

+ 1 - 1
src/hosts/ZhonTai.Host/InitData/Admin/ad_org.tenant.json

@@ -20,6 +20,6 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   }
 ]

+ 265 - 0
src/hosts/ZhonTai.Host/InitData/Admin/ad_permission.json

@@ -1373,6 +1373,271 @@
             "createdUserId": null,
             "createdUserName": null,
             "createdTime": null
+          },
+          {
+            "id": 402829461262405,
+            "parentId": 161227168636997,
+            "label": "套餐管理",
+            "code": null,
+            "type": 2,
+            "viewId": 402829224460357,
+            "view": null,
+            "name": null,
+            "path": "/admin/pkg/index",
+            "redirect": null,
+            "icon": "ele-Memo",
+            "hidden": false,
+            "opened": false,
+            "newWindow": false,
+            "external": false,
+            "isKeepAlive": true,
+            "isAffix": false,
+            "link": null,
+            "isIframe": false,
+            "sort": 6,
+            "description": null,
+            "enabled": true,
+            "apis": null,
+            "childs": [
+              {
+                "id": 402838978203717,
+                "parentId": 402829461262405,
+                "label": "查询",
+                "code": "api:admin:pkg:get",
+                "type": 3,
+                "viewId": null,
+                "view": null,
+                "name": null,
+                "path": null,
+                "redirect": null,
+                "icon": null,
+                "hidden": false,
+                "opened": false,
+                "newWindow": false,
+                "external": false,
+                "isKeepAlive": true,
+                "isAffix": false,
+                "link": null,
+                "isIframe": false,
+                "sort": 1,
+                "description": null,
+                "enabled": true,
+                "apis": null,
+                "childs": [],
+                "isDeleted": false,
+                "modifiedUserId": null,
+                "modifiedUserName": null,
+                "modifiedTime": null,
+                "createdUserId": null,
+                "createdUserName": null,
+                "createdTime": null
+              },
+              {
+                "id": 402839687192645,
+                "parentId": 402829461262405,
+                "label": "新增",
+                "code": "api:admin:pkg:add",
+                "type": 3,
+                "viewId": null,
+                "view": null,
+                "name": null,
+                "path": null,
+                "redirect": null,
+                "icon": null,
+                "hidden": false,
+                "opened": false,
+                "newWindow": false,
+                "external": false,
+                "isKeepAlive": true,
+                "isAffix": false,
+                "link": null,
+                "isIframe": false,
+                "sort": 2,
+                "description": null,
+                "enabled": true,
+                "apis": null,
+                "childs": [],
+                "isDeleted": false,
+                "modifiedUserId": null,
+                "modifiedUserName": null,
+                "modifiedTime": null,
+                "createdUserId": null,
+                "createdUserName": null,
+                "createdTime": null
+              },
+              {
+                "id": 402840395829317,
+                "parentId": 402829461262405,
+                "label": "修改",
+                "code": "api:admin:pkg:update",
+                "type": 3,
+                "viewId": null,
+                "view": null,
+                "name": null,
+                "path": null,
+                "redirect": null,
+                "icon": null,
+                "hidden": false,
+                "opened": false,
+                "newWindow": false,
+                "external": false,
+                "isKeepAlive": true,
+                "isAffix": false,
+                "link": null,
+                "isIframe": false,
+                "sort": 3,
+                "description": null,
+                "enabled": true,
+                "apis": null,
+                "childs": [],
+                "isDeleted": false,
+                "modifiedUserId": null,
+                "modifiedUserName": null,
+                "modifiedTime": null,
+                "createdUserId": null,
+                "createdUserName": null,
+                "createdTime": null
+              },
+              {
+                "id": 402840520048709,
+                "parentId": 402829461262405,
+                "label": "删除",
+                "code": "api:admin:pkg:delete",
+                "type": 3,
+                "viewId": null,
+                "view": null,
+                "name": null,
+                "path": null,
+                "redirect": null,
+                "icon": null,
+                "hidden": false,
+                "opened": false,
+                "newWindow": false,
+                "external": false,
+                "isKeepAlive": true,
+                "isAffix": false,
+                "link": null,
+                "isIframe": false,
+                "sort": 4,
+                "description": null,
+                "enabled": true,
+                "apis": null,
+                "childs": [],
+                "isDeleted": false,
+                "modifiedUserId": null,
+                "modifiedUserName": null,
+                "modifiedTime": null,
+                "createdUserId": null,
+                "createdUserName": null,
+                "createdTime": null
+              },
+              {
+                "id": 402840810463301,
+                "parentId": 402829461262405,
+                "label": "添加租户",
+                "code": "api:admin:pkg:add-pkg-tenant",
+                "type": 3,
+                "viewId": null,
+                "view": null,
+                "name": null,
+                "path": null,
+                "redirect": null,
+                "icon": null,
+                "hidden": false,
+                "opened": false,
+                "newWindow": false,
+                "external": false,
+                "isKeepAlive": true,
+                "isAffix": false,
+                "link": null,
+                "isIframe": false,
+                "sort": 5,
+                "description": null,
+                "enabled": true,
+                "apis": null,
+                "childs": [],
+                "isDeleted": false,
+                "modifiedUserId": null,
+                "modifiedUserName": null,
+                "modifiedTime": null,
+                "createdUserId": null,
+                "createdUserName": null,
+                "createdTime": null
+              },
+              {
+                "id": 402840869605445,
+                "parentId": 402829461262405,
+                "label": "移除租户",
+                "code": "api:admin:pkg:remove-pkg-tenant",
+                "type": 3,
+                "viewId": null,
+                "view": null,
+                "name": null,
+                "path": null,
+                "redirect": null,
+                "icon": null,
+                "hidden": false,
+                "opened": false,
+                "newWindow": false,
+                "external": false,
+                "isKeepAlive": true,
+                "isAffix": false,
+                "link": null,
+                "isIframe": false,
+                "sort": 6,
+                "description": null,
+                "enabled": true,
+                "apis": null,
+                "childs": [],
+                "isDeleted": false,
+                "modifiedUserId": null,
+                "modifiedUserName": null,
+                "modifiedTime": null,
+                "createdUserId": null,
+                "createdUserName": null,
+                "createdTime": null
+              },
+              {
+                "id": 402843985313861,
+                "parentId": 402829461262405,
+                "label": "设置套餐权限",
+                "code": "api:admin:pkg:set-pkg-permissions",
+                "type": 3,
+                "viewId": null,
+                "view": null,
+                "name": null,
+                "path": null,
+                "redirect": null,
+                "icon": null,
+                "hidden": false,
+                "opened": false,
+                "newWindow": false,
+                "external": false,
+                "isKeepAlive": true,
+                "isAffix": false,
+                "link": null,
+                "isIframe": false,
+                "sort": 7,
+                "description": null,
+                "enabled": true,
+                "apis": null,
+                "childs": [],
+                "isDeleted": false,
+                "modifiedUserId": null,
+                "modifiedUserName": null,
+                "modifiedTime": null,
+                "createdUserId": null,
+                "createdUserName": null,
+                "createdTime": null
+              }
+            ],
+            "isDeleted": false,
+            "modifiedUserId": null,
+            "modifiedUserName": null,
+            "modifiedTime": null,
+            "createdUserId": null,
+            "createdUserName": null,
+            "createdTime": null
           }
         ],
         "isDeleted": false,

Файловите разлики са ограничени, защото са твърде много
+ 109 - 129
src/hosts/ZhonTai.Host/InitData/Admin/ad_permission_api.json


+ 6 - 6
src/hosts/ZhonTai.Host/InitData/Admin/ad_role.json

@@ -19,7 +19,7 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   },
   {
     "id": 162605510979653,
@@ -41,7 +41,7 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   },
   {
     "id": 336557474730053,
@@ -63,7 +63,7 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   },
   {
     "id": 336557508276293,
@@ -85,7 +85,7 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   },
   {
     "id": 336557578817605,
@@ -107,7 +107,7 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   },
   {
     "id": 340428577087557,
@@ -129,6 +129,6 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   }
 ]

+ 6 - 6
src/hosts/ZhonTai.Host/InitData/Admin/ad_role.tenant.json

@@ -20,7 +20,7 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   },
   {
     "id": 162605510979653,
@@ -43,7 +43,7 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   },
   {
     "id": 336557474730053,
@@ -66,7 +66,7 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   },
   {
     "id": 336557508276293,
@@ -89,7 +89,7 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   },
   {
     "id": 336557578817605,
@@ -112,7 +112,7 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   },
   {
     "id": 340428577087557,
@@ -135,6 +135,6 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   }
 ]

+ 1 - 1
src/hosts/ZhonTai.Host/InitData/Admin/ad_tenant.json

@@ -17,6 +17,6 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   }
 ]

+ 1 - 1
src/hosts/ZhonTai.Host/InitData/Admin/ad_user.json

@@ -26,6 +26,6 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   }
 ]

+ 1 - 1
src/hosts/ZhonTai.Host/InitData/Admin/ad_user.tenant.json

@@ -27,6 +27,6 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   }
 ]

+ 1 - 1
src/hosts/ZhonTai.Host/InitData/Admin/ad_user_org.json

@@ -11,6 +11,6 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   }
 ]

+ 1 - 1
src/hosts/ZhonTai.Host/InitData/Admin/ad_user_role.json

@@ -7,6 +7,6 @@
     "role": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   }
 ]

+ 1 - 1
src/hosts/ZhonTai.Host/InitData/Admin/ad_user_staff.json

@@ -13,6 +13,6 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   }
 ]

+ 1 - 1
src/hosts/ZhonTai.Host/InitData/Admin/ad_user_staff.tenant.json

@@ -14,6 +14,6 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   }
 ]

+ 42 - 23
src/hosts/ZhonTai.Host/InitData/Admin/ad_view.json

@@ -27,7 +27,7 @@
         "modifiedTime": null,
         "createdUserId": 161223411986501,
         "createdUserName": "admin",
-        "createdTime": "2023-04-01T22:06:30"
+        "createdTime": "2023-04-03T18:04:41"
       },
       {
         "id": 161227168432197,
@@ -57,7 +57,7 @@
             "modifiedTime": null,
             "createdUserId": 161223411986501,
             "createdUserName": "admin",
-            "createdTime": "2023-04-01T22:06:30"
+            "createdTime": "2023-04-03T18:04:41"
           },
           {
             "id": 161227168444485,
@@ -76,7 +76,7 @@
             "modifiedTime": null,
             "createdUserId": 161223411986501,
             "createdUserName": "admin",
-            "createdTime": "2023-04-01T22:06:30"
+            "createdTime": "2023-04-03T18:04:41"
           },
           {
             "id": 161227168448582,
@@ -95,7 +95,7 @@
             "modifiedTime": null,
             "createdUserId": 161223411986501,
             "createdUserName": "admin",
-            "createdTime": "2023-04-01T22:06:30"
+            "createdTime": "2023-04-03T18:04:41"
           },
           {
             "id": 161227168456774,
@@ -114,7 +114,7 @@
             "modifiedTime": null,
             "createdUserId": 161223411986501,
             "createdUserName": "admin",
-            "createdTime": "2023-04-01T22:06:30"
+            "createdTime": "2023-04-03T18:04:41"
           },
           {
             "id": 187053736300613,
@@ -133,7 +133,7 @@
             "modifiedTime": null,
             "createdUserId": 161223411986501,
             "createdUserName": "admin",
-            "createdTime": "2023-04-01T22:06:30"
+            "createdTime": "2023-04-03T18:04:41"
           },
           {
             "id": 336556164300869,
@@ -152,7 +152,7 @@
             "modifiedTime": null,
             "createdUserId": 161223411986501,
             "createdUserName": "admin",
-            "createdTime": "2023-04-01T22:06:30"
+            "createdTime": "2023-04-03T18:04:41"
           },
           {
             "id": 371247502852165,
@@ -171,7 +171,7 @@
             "modifiedTime": null,
             "createdUserId": 161223411986501,
             "createdUserName": "admin",
-            "createdTime": "2023-04-01T22:06:30"
+            "createdTime": "2023-04-03T18:04:41"
           }
         ],
         "isDeleted": false,
@@ -180,7 +180,7 @@
         "modifiedTime": null,
         "createdUserId": 161223411986501,
         "createdUserName": "admin",
-        "createdTime": "2023-04-01T22:06:30"
+        "createdTime": "2023-04-03T18:04:41"
       },
       {
         "id": 161227168436293,
@@ -199,7 +199,7 @@
         "modifiedTime": null,
         "createdUserId": 161223411986501,
         "createdUserName": "admin",
-        "createdTime": "2023-04-01T22:06:30"
+        "createdTime": "2023-04-03T18:04:41"
       },
       {
         "id": 161227168436294,
@@ -229,7 +229,7 @@
             "modifiedTime": null,
             "createdUserId": 161223411986501,
             "createdUserName": "admin",
-            "createdTime": "2023-04-01T22:06:30"
+            "createdTime": "2023-04-03T18:04:41"
           },
           {
             "id": 161227168440389,
@@ -248,7 +248,7 @@
             "modifiedTime": null,
             "createdUserId": 161223411986501,
             "createdUserName": "admin",
-            "createdTime": "2023-04-01T22:06:30"
+            "createdTime": "2023-04-03T18:04:41"
           },
           {
             "id": 161227168444486,
@@ -267,7 +267,7 @@
             "modifiedTime": null,
             "createdUserId": 161223411986501,
             "createdUserName": "admin",
-            "createdTime": "2023-04-01T22:06:30"
+            "createdTime": "2023-04-03T18:04:41"
           },
           {
             "id": 161227168448583,
@@ -286,7 +286,7 @@
             "modifiedTime": null,
             "createdUserId": 161223411986501,
             "createdUserName": "admin",
-            "createdTime": "2023-04-01T22:06:30"
+            "createdTime": "2023-04-03T18:04:41"
           },
           {
             "id": 174312361087045,
@@ -305,7 +305,26 @@
             "modifiedTime": null,
             "createdUserId": 161223411986501,
             "createdUserName": "admin",
-            "createdTime": "2023-04-01T22:06:30"
+            "createdTime": "2023-04-03T18:04:41"
+          },
+          {
+            "id": 402829224460357,
+            "parentId": 161227168436294,
+            "name": "admin/pkg",
+            "label": "套餐管理",
+            "path": "admin/pkg/index",
+            "description": null,
+            "cache": true,
+            "sort": 6,
+            "enabled": true,
+            "childs": null,
+            "isDeleted": false,
+            "modifiedUserId": 161223411986501,
+            "modifiedUserName": "admin",
+            "modifiedTime": "2023-04-03T16:56:32",
+            "createdUserId": 161223411986501,
+            "createdUserName": "admin",
+            "createdTime": "2023-04-03T16:56:20"
           }
         ],
         "isDeleted": false,
@@ -314,7 +333,7 @@
         "modifiedTime": null,
         "createdUserId": 161223411986501,
         "createdUserName": "admin",
-        "createdTime": "2023-04-01T22:06:30"
+        "createdTime": "2023-04-03T18:04:41"
       },
       {
         "id": 161227168452677,
@@ -344,7 +363,7 @@
             "modifiedTime": null,
             "createdUserId": 161223411986501,
             "createdUserName": "admin",
-            "createdTime": "2023-04-01T22:06:30"
+            "createdTime": "2023-04-03T18:04:41"
           },
           {
             "id": 161227168456773,
@@ -363,7 +382,7 @@
             "modifiedTime": null,
             "createdUserId": 161223411986501,
             "createdUserName": "admin",
-            "createdTime": "2023-04-01T22:06:30"
+            "createdTime": "2023-04-03T18:04:41"
           }
         ],
         "isDeleted": false,
@@ -372,7 +391,7 @@
         "modifiedTime": null,
         "createdUserId": 161223411986501,
         "createdUserName": "admin",
-        "createdTime": "2023-04-01T22:06:30"
+        "createdTime": "2023-04-03T18:04:41"
       }
     ],
     "isDeleted": false,
@@ -381,7 +400,7 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   },
   {
     "id": 361047466754117,
@@ -411,7 +430,7 @@
         "modifiedTime": null,
         "createdUserId": 161223411986501,
         "createdUserName": "admin",
-        "createdTime": "2023-04-01T22:06:30"
+        "createdTime": "2023-04-03T18:04:41"
       },
       {
         "id": 361047841796165,
@@ -430,7 +449,7 @@
         "modifiedTime": null,
         "createdUserId": 161223411986501,
         "createdUserName": "admin",
-        "createdTime": "2023-04-01T22:06:30"
+        "createdTime": "2023-04-03T18:04:41"
       }
     ],
     "isDeleted": false,
@@ -439,6 +458,6 @@
     "modifiedTime": null,
     "createdUserId": 161223411986501,
     "createdUserName": "admin",
-    "createdTime": "2023-04-01T22:06:30"
+    "createdTime": "2023-04-03T18:04:41"
   }
 ]

+ 22 - 0
src/platform/ZhonTai.Admin/Domain/Pkg/IPkgRepository.cs

@@ -0,0 +1,22 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using ZhonTai.Admin.Core.Repositories;
+
+namespace ZhonTai.Admin.Domain.Pkg;
+
+public interface IPkgRepository : IRepositoryBase<PkgEntity>
+{
+    /// <summary>
+    /// 获得本套餐和下级套餐Id
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    Task<List<long>> GetChildIdListAsync(long id);
+
+    /// <summary>
+    /// 获得当前套餐和下级套餐Id
+    /// </summary>
+    /// <param name="ids"></param>
+    /// <returns></returns>
+    Task<List<long>> GetChildIdListAsync(long[] ids);
+}

+ 73 - 0
src/platform/ZhonTai.Admin/Domain/Pkg/PkgEntity.cs

@@ -0,0 +1,73 @@
+using ZhonTai.Admin.Core.Entities;
+using FreeSql.DataAnnotations;
+using System;
+using System.Collections.Generic;
+using ZhonTai.Admin.Domain.Org;
+using ZhonTai.Admin.Domain.Permission;
+using ZhonTai.Admin.Domain.RolePermission;
+using ZhonTai.Admin.Domain.User;
+using ZhonTai.Admin.Domain.UserRole;
+using ZhonTai.Admin.Domain.Tenant;
+using ZhonTai.Admin.Domain.TenantPkg;
+using ZhonTai.Admin.Domain.PkgPermission;
+
+namespace ZhonTai.Admin.Domain.Pkg;
+
+/// <summary>
+/// 套餐
+/// </summary>
+[Table(Name = "ad_pkg")]
+[Index("idx_{tablename}_01", $"{nameof(ParentId)},{nameof(Name)}", true)]
+public partial class PkgEntity : EntityBase
+{
+    /// <summary>
+    /// 父级Id
+    /// </summary>
+    public long ParentId { get; set; }
+
+    /// <summary>
+    /// 子级列表
+    /// </summary>
+    [Navigate(nameof(ParentId))]
+    public List<PkgEntity> Childs { get; set; }
+
+    /// <summary>
+    /// 名称
+    /// </summary>
+    [Column(StringLength = 50)]
+    public string Name { get; set; }
+
+    /// <summary>
+    /// 编码
+    /// </summary>
+    [Column(StringLength = 50)]
+    public string Code { get; set; }
+
+    /// <summary>
+    /// 说明
+    /// </summary>
+    [Column(StringLength = 200)]
+    public string Description { get; set; }
+
+    /// <summary>
+    /// 启用
+    /// </summary>
+	public bool Enabled { get; set; } = true;
+
+    /// <summary>
+    /// 排序
+    /// </summary>
+	public int Sort { get; set; }
+
+    /// <summary>
+    /// 租户列表
+    /// </summary>
+    [Navigate(ManyToMany = typeof(TenantPkgEntity))]
+    public ICollection<TenantEntity> Tenants { get; set; }
+
+    /// <summary>
+    /// 权限列表
+    /// </summary>
+    [Navigate(ManyToMany = typeof(PkgPermissionEntity))]
+    public ICollection<PermissionEntity> Permissions { get; set; }
+}

+ 7 - 0
src/platform/ZhonTai.Admin/Domain/PkgPermission/IPkgPermissionRepository.cs

@@ -0,0 +1,7 @@
+using ZhonTai.Admin.Core.Repositories;
+
+namespace ZhonTai.Admin.Domain.PkgPermission;
+
+public interface IPkgPermissionRepository : IRepositoryBase<PkgPermissionEntity>
+{
+}

+ 34 - 0
src/platform/ZhonTai.Admin/Domain/PkgPermission/PkgPermissionEntity.cs

@@ -0,0 +1,34 @@
+using ZhonTai.Admin.Core.Entities;
+using FreeSql.DataAnnotations;
+using ZhonTai.Admin.Domain.Permission;
+using ZhonTai.Admin.Domain.Pkg;
+
+namespace ZhonTai.Admin.Domain.PkgPermission;
+
+/// <summary>
+/// 套餐权限
+/// </summary>
+[Table(Name = "ad_pkg_permission")]
+[Index("idx_{tablename}_01", nameof(PkgId) + "," + nameof(PermissionId), true)]
+public class PkgPermissionEntity : EntityAdd
+{
+    /// <summary>
+    /// 套餐Id
+    /// </summary>
+	public long PkgId { get; set; }
+
+    /// <summary>
+    /// 套餐
+    /// </summary>
+    public PkgEntity Pkg { get; set; }
+
+    /// <summary>
+    /// 权限Id
+    /// </summary>
+	public long PermissionId { get; set; }
+
+    /// <summary>
+    /// 权限
+    /// </summary>
+    public PermissionEntity Permission { get; set; }
+}

+ 1 - 1
src/platform/ZhonTai.Admin/Domain/Role/Dto/UserGetRoleUserListInput.cs → src/platform/ZhonTai.Admin/Domain/Role/Dto/RoleGetRoleUserListInput.cs

@@ -1,6 +1,6 @@
 namespace ZhonTai.Admin.Domain.Role.Dto;
 
-public partial class UserGetRoleUserListInput
+public partial class RoleGetRoleUserListInput
 {
     /// <summary>
     /// 姓名

+ 7 - 0
src/platform/ZhonTai.Admin/Domain/TenantPkg/ITenantPkgRepository.cs

@@ -0,0 +1,7 @@
+using ZhonTai.Admin.Core.Repositories;
+
+namespace ZhonTai.Admin.Domain.TenantPkg;
+
+public interface ITenantPkgRepository : IRepositoryBase<TenantPkgEntity>
+{
+}

+ 28 - 0
src/platform/ZhonTai.Admin/Domain/TenantPkg/TenantPkgEntity.cs

@@ -0,0 +1,28 @@
+using ZhonTai.Admin.Core.Entities;
+using FreeSql.DataAnnotations;
+using ZhonTai.Admin.Domain.Tenant;
+using ZhonTai.Admin.Domain.Pkg;
+
+namespace ZhonTai.Admin.Domain.TenantPkg;
+
+/// <summary>
+/// 租户套餐
+/// </summary>
+[Table(Name = "ad_tenant_pkg")]
+[Index("idx_{tablename}_01", nameof(TenantId) + "," + nameof(PkgId), true)]
+public class TenantPkgEntity : EntityAdd
+{
+    /// <summary>
+    /// 租户Id
+    /// </summary>
+    public long TenantId { get; set; }
+
+    public TenantEntity Tenant { get; set; }
+
+    /// <summary>
+    /// 套餐Id
+    /// </summary>
+    public long PkgId { get; set; }
+
+    public PkgEntity Pkg { get; set; }
+}

+ 40 - 0
src/platform/ZhonTai.Admin/Repositories/Pkg/PkgRepository.cs

@@ -0,0 +1,40 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using ZhonTai.Admin.Core.Db.Transaction;
+using ZhonTai.Admin.Domain.Pkg;
+
+namespace ZhonTai.Admin.Repositories;
+
+public class PkgRepository : AdminRepositoryBase<PkgEntity>, IPkgRepository
+{
+    public PkgRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
+    {
+    }
+
+    /// <summary>
+    /// 获得本角色和下级角色Id
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    public async Task<List<long>> GetChildIdListAsync(long id)
+    {
+        return await Select
+        .Where(a => a.Id == id)
+        .AsTreeCte()
+        .ToListAsync(a => a.Id);
+    }
+
+    /// <summary>
+    /// 获得当前角色和下级角色Id
+    /// </summary>
+    /// <param name="ids"></param>
+    /// <returns></returns>
+    public async Task<List<long>> GetChildIdListAsync(long[] ids)
+    {
+        return await Select
+        .Where(a => ids.Contains(a.Id))
+        .AsTreeCte()
+        .ToListAsync(a => a.Id);
+    }
+}

+ 12 - 0
src/platform/ZhonTai.Admin/Repositories/PkgPermission/PkgPermissionRepository.cs

@@ -0,0 +1,12 @@
+using ZhonTai.Admin.Core.Db.Transaction;
+using ZhonTai.Admin.Domain.PkgPermission;
+
+namespace ZhonTai.Admin.Repositories;
+
+public class PkgPermissionRepository : AdminRepositoryBase<PkgPermissionEntity>, IPkgPermissionRepository
+{
+    public PkgPermissionRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
+    {
+
+    }
+}

+ 12 - 0
src/platform/ZhonTai.Admin/Repositories/TenantPkg/TenantPkgRepository.cs

@@ -0,0 +1,12 @@
+using ZhonTai.Admin.Core.Db.Transaction;
+using ZhonTai.Admin.Domain.TenantPkg;
+
+namespace ZhonTai.Admin.Repositories;
+
+public class TenantPkgRepository : AdminRepositoryBase<TenantPkgEntity>, ITenantPkgRepository
+{
+    public TenantPkgRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
+    {
+
+    }
+}

+ 2 - 2
src/platform/ZhonTai.Admin/Services/Permission/PermissionService.cs

@@ -138,7 +138,7 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     }
 
     /// <summary>
-    /// 查询角色权限-权限列表
+    /// 查询授权权限列表
     /// </summary>
     /// <returns></returns>
     public async Task<IEnumerable<dynamic>> GetPermissionList()
@@ -269,7 +269,7 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
 
         if (input.ApiIds != null && input.ApiIds.Any())
         {
-            var permissionApis = input.ApiIds.Select(a => new PermissionApiEntity { PermissionId = entity.Id, ApiId = a });
+            var permissionApis = input.ApiIds.Select(a => new PermissionApiEntity { PermissionId = entity.Id, ApiId = a }).ToList();
             await _permissionApiRepository.InsertAsync(permissionApis);
         }
 

+ 37 - 0
src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgAddInput.cs

@@ -0,0 +1,37 @@
+namespace ZhonTai.Admin.Services.Pkg.Dto;
+
+/// <summary>
+/// 添加
+/// </summary>
+public class PkgAddInput
+{
+    /// <summary>
+    /// 父级Id
+    /// </summary>
+    public long ParentId { get; set; }
+
+    /// <summary>
+    /// 名称
+    /// </summary>
+    public string Name { get; set; }
+
+    /// <summary>
+    /// 编码
+    /// </summary>
+    public string Code { get; set; }
+
+    /// <summary>
+    /// 说明
+    /// </summary>
+    public string Description { get; set; }
+
+    /// <summary>
+    /// 排序
+    /// </summary>
+    public int Sort { get; set; }
+
+    /// <summary>
+    /// 启用
+    /// </summary>
+    public bool Enabled { get; set; }
+}

+ 20 - 0
src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgAddPkgTenantListInput.cs

@@ -0,0 +1,20 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace ZhonTai.Admin.Services.Pkg.Dto;
+
+/// <summary>
+/// 添加套餐租户列表
+/// </summary>
+public class PkgAddPkgTenantListInput
+{
+    /// <summary>
+    /// 套餐
+    /// </summary>
+    [Required(ErrorMessage = "请选择套餐")]
+    public long PkgId { get; set; }
+
+    /// <summary>
+    /// 租户列表
+    /// </summary>
+    public long[] TenantIds { get; set; }
+}

+ 9 - 0
src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgGetListInput.cs

@@ -0,0 +1,9 @@
+namespace ZhonTai.Admin.Services.Pkg.Dto;
+
+public partial class PkgGetListInput
+{
+    /// <summary>
+    /// 名称
+    /// </summary>
+    public string Name { get; set; }
+}

+ 34 - 0
src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgGetListOutput.cs

@@ -0,0 +1,34 @@
+namespace ZhonTai.Admin.Services.Pkg.Dto;
+
+public class PkgGetListOutput
+{
+    /// <summary>
+    /// 主键
+    /// </summary>
+    public long Id { get; set; }
+
+    /// <summary>
+    /// 父级Id
+    /// </summary>
+    public long ParentId { get; set; }
+
+    /// <summary>
+    /// 名称
+    /// </summary>
+    public string Name { get; set; }
+
+    /// <summary>
+    /// 编码
+    /// </summary>
+    public string Code { get; set; }
+
+    /// <summary>
+    /// 排序
+    /// </summary>
+    public int Sort { get; set; }
+
+    /// <summary>
+    /// 描述
+    /// </summary>
+    public string Description { get; set; }
+}

+ 6 - 0
src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgGetOutput.cs

@@ -0,0 +1,6 @@
+
+namespace ZhonTai.Admin.Services.Pkg.Dto;
+
+public class PkgGetOutput : PkgUpdateInput
+{
+}

+ 9 - 0
src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgGetPageDto.cs

@@ -0,0 +1,9 @@
+namespace ZhonTai.Admin.Services.Pkg.Dto;
+
+public partial class PkgGetPageDto
+{
+    /// <summary>
+    /// 名称
+    /// </summary>
+    public string Name { get; set; }
+}

+ 36 - 0
src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgGetPageOutput.cs

@@ -0,0 +1,36 @@
+using System;
+
+namespace ZhonTai.Admin.Services.Pkg.Dto;
+
+public class PkgGetPageOutput
+{
+    /// <summary>
+    /// 主键
+    /// </summary>
+    public long Id { get; set; }
+
+    /// <summary>
+    /// 名称
+    /// </summary>
+    public string Name { get; set; }
+
+    /// <summary>
+    /// 编码
+    /// </summary>
+    public string Code { get; set; }
+
+    /// <summary>
+    /// 说明
+    /// </summary>
+    public string Description { get; set; }
+
+    /// <summary>
+    /// 启用
+    /// </summary>
+	public bool Enabled { get; set; }
+
+    /// <summary>
+    /// 创建时间
+    /// </summary>
+    public DateTime? CreatedTime { get; set; }
+}

+ 14 - 0
src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgGetPkgTenantListInput.cs

@@ -0,0 +1,14 @@
+namespace ZhonTai.Admin.Services.Pkg.Dto;
+
+public partial class PkgGetPkgTenantListInput
+{
+    /// <summary>
+    /// 租户名
+    /// </summary>
+    public string TenantName { get; set; }
+
+    /// <summary>
+    /// 套餐Id
+    /// </summary>
+    public long? PkgId { get; set; }
+}

+ 19 - 0
src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgGetPkgTenantListOutput.cs

@@ -0,0 +1,19 @@
+namespace ZhonTai.Admin.Services.Pkg.Dto;
+
+public class PkgGetPkgTenantListOutput
+{
+    /// <summary>
+    /// 主键Id
+    /// </summary>
+    public long Id { get; set; }
+
+    /// <summary>
+    /// 租户名
+    /// </summary>
+    public string Name { get; set; }
+
+    /// <summary>
+    /// 租户编码
+    /// </summary>
+    public string Code { get; set; }
+}

+ 13 - 0
src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgSetPkgPermissionsInput.cs

@@ -0,0 +1,13 @@
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+
+namespace ZhonTai.Admin.Services.Pkg.Dto;
+
+public class PkgSetPkgPermissionsInput
+{
+    [Required(ErrorMessage = "套餐不能为空!")]
+    public long PkgId { get; set; }
+
+    [Required(ErrorMessage = "权限不能为空!")]
+    public List<long> PermissionIds { get; set; }
+}

+ 17 - 0
src/platform/ZhonTai.Admin/Services/Pkg/Dto/PkgUpdateInput.cs

@@ -0,0 +1,17 @@
+using System.ComponentModel.DataAnnotations;
+using ZhonTai.Admin.Core.Validators;
+
+namespace ZhonTai.Admin.Services.Pkg.Dto;
+
+/// <summary>
+/// 修改
+/// </summary>
+public partial class PkgUpdateInput : PkgAddInput
+{
+    /// <summary>
+    /// 套餐Id
+    /// </summary>
+    [Required]
+    [ValidateRequired("请选择套餐")]
+    public long Id { get; set; }
+}

+ 366 - 0
src/platform/ZhonTai.Admin/Services/Pkg/PkgService.cs

@@ -0,0 +1,366 @@
+using System.Linq;
+using System.Threading.Tasks;
+using ZhonTai.Admin.Core.Dto;
+using ZhonTai.Admin.Domain.Pkg;
+using ZhonTai.Admin.Domain.PkgPermission;
+using ZhonTai.Admin.Services.Pkg.Dto;
+using ZhonTai.DynamicApi;
+using ZhonTai.DynamicApi.Attributes;
+using Microsoft.AspNetCore.Mvc;
+using ZhonTai.Admin.Core.Consts;
+using ZhonTai.Admin.Core.Attributes;
+using ZhonTai.Admin.Domain.TenantPkg;
+using ZhonTai.Admin.Domain.Tenant;
+using System.Collections.Generic;
+using ZhonTai.Admin.Domain.RolePermission;
+using ZhonTai.Admin.Domain.User;
+
+namespace ZhonTai.Admin.Services.Pkg;
+
+/// <summary>
+/// 套餐服务
+/// </summary>
+[Order(51)]
+[DynamicApi(Area = AdminConsts.AreaName)]
+public class PkgService : BaseService, IDynamicApi
+{
+    private IPkgRepository _pkgRepository => LazyGetRequiredService<IPkgRepository>();
+    private ITenantRepository _tenantRepository => LazyGetRequiredService<ITenantRepository>();
+    private ITenantPkgRepository _tenantPkgRepository => LazyGetRequiredService<ITenantPkgRepository>();
+    private IPkgPermissionRepository _pkgPermissionRepository => LazyGetRequiredService<IPkgPermissionRepository>();
+    private IRolePermissionRepository _rolePermissionRepository => LazyGetRequiredService<IRolePermissionRepository>();
+    private IUserRepository _userRepository => LazyGetRequiredService<IUserRepository>();
+
+    public PkgService()
+    {
+    }
+
+    /// <summary>
+    /// 查询
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    public async Task<PkgGetOutput> GetAsync(long id)
+    {
+        return await _pkgRepository.Select
+        .WhereDynamic(id)
+        .ToOneAsync<PkgGetOutput>();
+    }
+
+    /// <summary>
+    /// 查询列表
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    public async Task<List<PkgGetListOutput>> GetListAsync([FromQuery]PkgGetListInput input)
+    {
+        var list = await _pkgRepository.Select
+        .WhereIf(input.Name.NotNull(), a => a.Name.Contains(input.Name))
+        .OrderBy(a => new {a.ParentId, a.Sort})
+        .ToListAsync<PkgGetListOutput>();
+
+        return list;
+    }
+
+    /// <summary>
+    /// 查询分页
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    public async Task<PageOutput<PkgGetPageOutput>> GetPageAsync(PageInput<PkgGetPageDto> input)
+    {
+        var key = input.Filter?.Name;
+
+        var list = await _pkgRepository.Select
+        .WhereDynamicFilter(input.DynamicFilter)
+        .WhereIf(key.NotNull(), a => a.Name.Contains(key))
+        .Count(out var total)
+        .OrderByDescending(true, c => c.Id)
+        .Page(input.CurrentPage, input.PageSize)
+        .ToListAsync<PkgGetPageOutput>();
+
+        var data = new PageOutput<PkgGetPageOutput>()
+        {
+            List = list,
+            Total = total
+        };
+
+        return data;
+    }
+
+    /// <summary>
+    /// 查询套餐租户列表
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    public async Task<List<PkgGetPkgTenantListOutput>> GetPkgTenantListAsync([FromQuery] PkgGetPkgTenantListInput input)
+    {
+        var list = await _tenantRepository.Select.From<TenantPkgEntity>()
+            .InnerJoin(a => a.t2.TenantId == a.t1.Id)
+            .Where(a => a.t2.PkgId == input.PkgId)
+            .WhereIf(input.TenantName.NotNull(), a => a.t1.Org.Name.Contains(input.TenantName))
+            .OrderByDescending(a => a.t1.Id)
+            .ToListAsync(a=> new PkgGetPkgTenantListOutput { Id = a.t1.Id, Name = a.t1.Org.Name, Code = a.t1.Org.Code });
+
+        return list;
+    }
+
+    /// <summary>
+    /// 查询套餐权限列表
+    /// </summary>
+    /// <param name="pkgId">套餐编号</param>
+    /// <returns></returns>
+    public async Task<List<long>> GetPkgPermissionList(long pkgId)
+    {
+        var permissionIds = await _pkgPermissionRepository
+            .Select.Where(d => d.PkgId == pkgId)
+            .ToListAsync(a => a.PermissionId);
+
+        return permissionIds;
+    }
+
+    /// <summary>
+    /// 设置套餐权限
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [AdminTransaction]
+    public virtual async Task SetPkgPermissionsAsync(PkgSetPkgPermissionsInput input)
+    {
+        //查询套餐权限
+        var permissionIds = await _pkgPermissionRepository.Select.Where(d => d.PkgId == input.PkgId).ToListAsync(m => m.PermissionId);
+
+        //批量删除套餐权限
+        var deleteIds = permissionIds.Where(d => !input.PermissionIds.Contains(d));
+        if (deleteIds.Any())
+        {
+            //删除套餐权限
+            await _pkgPermissionRepository.DeleteAsync(m => m.PkgId == input.PkgId && deleteIds.Contains(m.PermissionId));
+            //删除套餐下关联的角色权限
+            await _rolePermissionRepository.DeleteAsync(a => deleteIds.Contains(a.PermissionId));
+        }
+
+        //批量插入套餐权限
+        var pkgPermissions = new List<PkgPermissionEntity>();
+        var insertPermissionIds = input.PermissionIds.Where(d => !permissionIds.Contains(d));
+        if (insertPermissionIds.Any())
+        {
+            foreach (var permissionId in insertPermissionIds)
+            {
+                pkgPermissions.Add(new PkgPermissionEntity()
+                {
+                    PkgId = input.PkgId,
+                    PermissionId = permissionId,
+                });
+            }
+            await _pkgPermissionRepository.InsertAsync(pkgPermissions);
+        }
+
+        //清除套餐下所有用户权限缓存
+        var tenantIds = await _tenantPkgRepository.Select.Where(a => a.PkgId == input.PkgId).ToListAsync(a => a.TenantId);
+        var userIds = await _userRepository.Select.Where(a => tenantIds.Contains(a.TenantId.Value)).ToListAsync(a => a.Id);
+        if (userIds.Any())
+        {
+            foreach (var userId in userIds)
+            {
+                await Cache.DelAsync(CacheKeys.UserPermissions + userId);
+            }
+        }
+    }
+
+    /// <summary>
+    /// 添加套餐租户
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    public async Task AddPkgTenantAsync(PkgAddPkgTenantListInput input)
+    {
+        var pkgId = input.PkgId;
+        var tenantIds = await _tenantPkgRepository.Select.Where(a => a.PkgId == pkgId).ToListAsync(a => a.TenantId);
+        var insertTenantIds = input.TenantIds.Except(tenantIds);
+        if (insertTenantIds != null && insertTenantIds.Any())
+        {
+            var tenantPkgList = insertTenantIds.Select(tenantId => new TenantPkgEntity 
+            { 
+                TenantId = tenantId, 
+                PkgId = pkgId 
+            }).ToList();
+            await _tenantPkgRepository.InsertAsync(tenantPkgList);
+        }
+
+        var clearTenantIds = tenantIds.Concat(input.TenantIds).Distinct();
+        foreach (var tenantId in clearTenantIds)
+        {
+            await Cache.DelAsync(CacheKeys.DataPermission + tenantId);
+        }
+    }
+
+    /// <summary>
+    /// 移除套餐租户
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    public async Task RemovePkgTenantAsync(PkgAddPkgTenantListInput input)
+    {
+        var tenantIds = input.TenantIds;
+        if (tenantIds != null && tenantIds.Any())
+        {
+            await _tenantPkgRepository.Where(a => a.PkgId == input.PkgId && input.TenantIds.Contains(a.TenantId)).ToDelete().ExecuteAffrowsAsync();
+        }
+
+        foreach (var tenantId in tenantIds)
+        {
+            await Cache.DelAsync(CacheKeys.DataPermission + tenantId);
+        }
+    }
+
+    /// <summary>
+    /// 新增
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    public async Task<long> AddAsync(PkgAddInput input)
+    {
+        if (await _pkgRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Name == input.Name))
+        {
+            throw ResultOutput.Exception($"此套餐名已存在");
+        }
+
+        if (input.Code.NotNull() && await _pkgRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Code == input.Code))
+        {
+            throw ResultOutput.Exception($"此套餐编码已存在");
+        }
+
+        var entity = Mapper.Map<PkgEntity>(input);
+        if (entity.Sort == 0)
+        {
+            var sort = await _pkgRepository.Select.Where(a => a.ParentId == input.ParentId).MaxAsync(a => a.Sort);
+            entity.Sort = sort + 1;
+        }
+
+        await _pkgRepository.InsertAsync(entity);
+
+        return entity.Id;
+    }
+
+    /// <summary>
+    /// 修改
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    public async Task UpdateAsync(PkgUpdateInput input)
+    {
+        var entity = await _pkgRepository.GetAsync(input.Id);
+        if (!(entity?.Id > 0))
+        {
+            throw ResultOutput.Exception("套餐不存在");
+        }
+
+        if (await _pkgRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Id != input.Id && a.Name == input.Name))
+        {
+            throw ResultOutput.Exception($"此套餐名已存在");
+        }
+
+        if (input.Code.NotNull() && await _pkgRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Id != input.Id && a.Code == input.Code))
+        {
+            throw ResultOutput.Exception($"此套餐编码已存在");
+        }
+
+        Mapper.Map(input, entity);
+        await _pkgRepository.UpdateAsync(entity);
+
+        var tenantIds = await _tenantPkgRepository.Select.Where(a => a.PkgId == entity.Id).ToListAsync(a => a.TenantId);
+        foreach (var tenantId in tenantIds)
+        {
+            await Cache.DelAsync(CacheKeys.DataPermission + tenantId);
+        }
+    }    
+
+    /// <summary>
+    /// 彻底删除
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    [AdminTransaction]
+    public virtual async Task DeleteAsync(long id)
+    {
+        var pkgIdList = await _pkgRepository.GetChildIdListAsync(id);
+        var tenantIds = await _tenantPkgRepository.Select.Where(a => pkgIdList.Contains(a.PkgId)).ToListAsync(a => a.TenantId);
+
+        //删除租户套餐
+        await _tenantPkgRepository.DeleteAsync(a => a.TenantId == id);
+        //删除套餐权限
+        await _pkgPermissionRepository.DeleteAsync(a => pkgIdList.Contains(a.PkgId));
+        //删除套餐
+        await _pkgRepository.DeleteAsync(a => pkgIdList.Contains(a.Id));
+        
+        foreach (var tenantId in tenantIds)
+        {
+            await Cache.DelAsync(CacheKeys.DataPermission + tenantId);
+        }
+    }
+
+    /// <summary>
+    /// 批量彻底删除
+    /// </summary>
+    /// <param name="ids"></param>
+    /// <returns></returns>
+    [AdminTransaction]
+    public virtual async Task BatchDeleteAsync(long[] ids)
+    {
+        var pkgIdList = await _pkgRepository.GetChildIdListAsync(ids);
+        var tenantIds = await _tenantPkgRepository.Select.Where(a => pkgIdList.Contains(a.PkgId)).ToListAsync(a => a.TenantId);
+
+        //删除租户套餐
+        await _tenantPkgRepository.DeleteAsync(a => pkgIdList.Contains(a.PkgId));
+        //删除套餐权限
+        await _pkgPermissionRepository.DeleteAsync(a => pkgIdList.Contains(a.PkgId));
+        //删除套餐
+        await _pkgRepository.Where(a => pkgIdList.Contains(a.Id)).AsTreeCte().ToDelete().ExecuteAffrowsAsync();
+
+        foreach (var tenantId in tenantIds)
+        {
+            await Cache.DelAsync(CacheKeys.DataPermission + tenantId);
+        }
+    }
+
+    /// <summary>
+    /// 删除
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    [AdminTransaction]
+    public virtual async Task SoftDeleteAsync(long id)
+    {
+        var pkgIdList = await _pkgRepository.GetChildIdListAsync(id);
+        var tenantIds = await _tenantPkgRepository.Select.Where(a => pkgIdList.Contains(a.PkgId)).ToListAsync(a => a.TenantId);
+        await _tenantPkgRepository.DeleteAsync(a => pkgIdList.Contains(a.PkgId));
+        await _pkgPermissionRepository.DeleteAsync(a => pkgIdList.Contains(a.PkgId));
+        await _pkgRepository.SoftDeleteRecursiveAsync(a => pkgIdList.Contains(a.Id));
+        foreach (var tenantId in tenantIds)
+        {
+            await Cache.DelAsync(CacheKeys.DataPermission + tenantId);
+        }
+    }
+
+    /// <summary>
+    /// 批量删除
+    /// </summary>
+    /// <param name="ids"></param>
+    /// <returns></returns>
+    [AdminTransaction]
+    public virtual async Task BatchSoftDeleteAsync(long[] ids)
+    {
+        var pkgIdList = await _pkgRepository.GetChildIdListAsync(ids);
+        var tenantIds = await _tenantPkgRepository.Select.Where(a => ids.Contains(a.PkgId)).ToListAsync(a => a.TenantId);
+        await _tenantPkgRepository.DeleteAsync(a => pkgIdList.Contains(a.PkgId));
+        await _pkgPermissionRepository.DeleteAsync(a => pkgIdList.Contains(a.PkgId));
+        await _pkgRepository.SoftDeleteRecursiveAsync(a => pkgIdList.Contains(a.Id));
+        foreach (var tenantId in tenantIds)
+        {
+            await Cache.DelAsync(CacheKeys.DataPermission + tenantId);
+        }
+    }
+}

+ 13 - 0
src/platform/ZhonTai.Admin/Services/Pkg/_MapConfig.cs

@@ -0,0 +1,13 @@
+using Mapster;
+
+namespace ZhonTai.Admin.Services.Pkg;
+
+/// <summary>
+/// 映射配置
+/// </summary>
+public class MapConfig : IRegister
+{
+    public void Register(TypeAdapterConfig config)
+    {
+    }
+}

+ 1 - 1
src/platform/ZhonTai.Admin/Services/Role/Dto/UserGetRoleUserListOutput.cs → src/platform/ZhonTai.Admin/Services/Role/Dto/RoleGetRoleUserListOutput.cs

@@ -1,6 +1,6 @@
 namespace ZhonTai.Admin.Services.Role.Dto;
 
-public class UserGetRoleUserListOutput
+public class RoleGetRoleUserListOutput
 {
     /// <summary>
     /// 主键Id

+ 4 - 4
src/platform/ZhonTai.Admin/Services/Role/RoleService.cs

@@ -100,20 +100,20 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<List<UserGetRoleUserListOutput>> GetRoleUserListAsync([FromQuery] UserGetRoleUserListInput input)
+    public async Task<List<RoleGetRoleUserListOutput>> GetRoleUserListAsync([FromQuery] RoleGetRoleUserListInput input)
     {
         var list = await _userRepository.Select.From<UserRoleEntity>()
             .InnerJoin(a => a.t2.UserId == a.t1.Id)
             .Where(a => a.t2.RoleId == input.RoleId)
             .WhereIf(input.Name.NotNull(), a => a.t1.Name.Contains(input.Name))
             .OrderByDescending(a => a.t1.Id)
-            .ToListAsync<UserGetRoleUserListOutput>();
+            .ToListAsync<RoleGetRoleUserListOutput>();
 
         return list;
     }
 
     /// <summary>
-    /// 新增角色用户
+    /// 添加角色用户
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
@@ -173,7 +173,7 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     }
 
     /// <summary>
-    /// 添加
+    /// 新增
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>

+ 403 - 22
src/platform/ZhonTai.Admin/ZhonTai.Admin.xml

@@ -2712,6 +2712,95 @@
             权限点
             </summary>
         </member>
+        <member name="T:ZhonTai.Admin.Domain.PkgPermission.PkgPermissionEntity">
+            <summary>
+            套餐权限
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.PkgPermission.PkgPermissionEntity.PkgId">
+            <summary>
+            套餐Id
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.PkgPermission.PkgPermissionEntity.Pkg">
+            <summary>
+            套餐
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.PkgPermission.PkgPermissionEntity.PermissionId">
+            <summary>
+            权限Id
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.PkgPermission.PkgPermissionEntity.Permission">
+            <summary>
+            权限
+            </summary>
+        </member>
+        <member name="M:ZhonTai.Admin.Domain.Pkg.IPkgRepository.GetChildIdListAsync(System.Int64)">
+            <summary>
+            获得本套餐和下级套餐Id
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Domain.Pkg.IPkgRepository.GetChildIdListAsync(System.Int64[])">
+            <summary>
+            获得当前套餐和下级套餐Id
+            </summary>
+            <param name="ids"></param>
+            <returns></returns>
+        </member>
+        <member name="T:ZhonTai.Admin.Domain.Pkg.PkgEntity">
+            <summary>
+            套餐
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Pkg.PkgEntity.ParentId">
+            <summary>
+            父级Id
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Pkg.PkgEntity.Childs">
+            <summary>
+            子级列表
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Pkg.PkgEntity.Name">
+            <summary>
+            名称
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Pkg.PkgEntity.Code">
+            <summary>
+            编码
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Pkg.PkgEntity.Description">
+            <summary>
+            说明
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Pkg.PkgEntity.Enabled">
+            <summary>
+            启用
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Pkg.PkgEntity.Sort">
+            <summary>
+            排序
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Pkg.PkgEntity.Tenants">
+            <summary>
+            租户列表
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.Pkg.PkgEntity.Permissions">
+            <summary>
+            权限列表
+            </summary>
+        </member>
         <member name="T:ZhonTai.Admin.Domain.RoleOrgEntity">
             <summary>
             角色部门
@@ -2802,12 +2891,12 @@
             名称
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Domain.Role.Dto.UserGetRoleUserListInput.Name">
+        <member name="P:ZhonTai.Admin.Domain.Role.Dto.RoleGetRoleUserListInput.Name">
             <summary>
             姓名
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Domain.Role.Dto.UserGetRoleUserListInput.RoleId">
+        <member name="P:ZhonTai.Admin.Domain.Role.Dto.RoleGetRoleUserListInput.RoleId">
             <summary>
             角色Id
             </summary>
@@ -2931,6 +3020,21 @@
             权限
             </summary>
         </member>
+        <member name="T:ZhonTai.Admin.Domain.TenantPkg.TenantPkgEntity">
+            <summary>
+            租户套餐
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.TenantPkg.TenantPkgEntity.TenantId">
+            <summary>
+            租户Id
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Domain.TenantPkg.TenantPkgEntity.PkgId">
+            <summary>
+            套餐Id
+            </summary>
+        </member>
         <member name="P:ZhonTai.Admin.Domain.Tenant.Dto.CreateFreeSqlTenantDto.DbType">
             <summary>
             数据库
@@ -3488,6 +3592,20 @@
             <param name="id"></param>
             <returns></returns>
         </member>
+        <member name="M:ZhonTai.Admin.Repositories.PkgRepository.GetChildIdListAsync(System.Int64)">
+            <summary>
+            获得本角色和下级角色Id
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Repositories.PkgRepository.GetChildIdListAsync(System.Int64[])">
+            <summary>
+            获得当前角色和下级角色Id
+            </summary>
+            <param name="ids"></param>
+            <returns></returns>
+        </member>
         <member name="M:ZhonTai.Admin.Repositories.RoleRepository.GetChildIdListAsync(System.Int64)">
             <summary>
             获得本角色和下级角色Id
@@ -4347,7 +4465,7 @@
         </member>
         <member name="M:ZhonTai.Admin.Services.Dict.DictService.GetListByNamesAsync(System.String[])">
             <summary>
-            根据字典类型名称列表查询列表
+            根据字典类型名称列表查询字典列表
             </summary>
             <param name="names">字典类型名称列表</param>
             <returns></returns>
@@ -5721,7 +5839,7 @@
         </member>
         <member name="M:ZhonTai.Admin.Services.Permission.PermissionService.GetPermissionList">
             <summary>
-            查询角色权限-权限列表
+            查询授权权限列表
             </summary>
             <returns></returns>
         </member>
@@ -5828,6 +5946,269 @@
             映射配置
             </summary>
         </member>
+        <member name="T:ZhonTai.Admin.Services.Pkg.Dto.PkgAddInput">
+            <summary>
+            添加
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgAddInput.ParentId">
+            <summary>
+            父级Id
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgAddInput.Name">
+            <summary>
+            名称
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgAddInput.Code">
+            <summary>
+            编码
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgAddInput.Description">
+            <summary>
+            说明
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgAddInput.Sort">
+            <summary>
+            排序
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgAddInput.Enabled">
+            <summary>
+            启用
+            </summary>
+        </member>
+        <member name="T:ZhonTai.Admin.Services.Pkg.Dto.PkgAddPkgTenantListInput">
+            <summary>
+            添加套餐租户列表
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgAddPkgTenantListInput.PkgId">
+            <summary>
+            套餐
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgAddPkgTenantListInput.TenantIds">
+            <summary>
+            租户列表
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetListInput.Name">
+            <summary>
+            名称
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetListOutput.Id">
+            <summary>
+            主键
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetListOutput.ParentId">
+            <summary>
+            父级Id
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetListOutput.Name">
+            <summary>
+            名称
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetListOutput.Code">
+            <summary>
+            编码
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetListOutput.Sort">
+            <summary>
+            排序
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetListOutput.Description">
+            <summary>
+            描述
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetPageDto.Name">
+            <summary>
+            名称
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetPageOutput.Id">
+            <summary>
+            主键
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetPageOutput.Name">
+            <summary>
+            名称
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetPageOutput.Code">
+            <summary>
+            编码
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetPageOutput.Description">
+            <summary>
+            说明
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetPageOutput.Enabled">
+            <summary>
+            启用
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetPageOutput.CreatedTime">
+            <summary>
+            创建时间
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetPkgTenantListInput.TenantName">
+            <summary>
+            租户名
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetPkgTenantListInput.PkgId">
+            <summary>
+            套餐Id
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetPkgTenantListOutput.Id">
+            <summary>
+            主键Id
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetPkgTenantListOutput.Name">
+            <summary>
+            租户名
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgGetPkgTenantListOutput.Code">
+            <summary>
+            租户编码
+            </summary>
+        </member>
+        <member name="T:ZhonTai.Admin.Services.Pkg.Dto.PkgUpdateInput">
+            <summary>
+            修改
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Pkg.Dto.PkgUpdateInput.Id">
+            <summary>
+            套餐Id
+            </summary>
+        </member>
+        <member name="T:ZhonTai.Admin.Services.Pkg.PkgService">
+            <summary>
+            套餐服务
+            </summary>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Pkg.PkgService.GetAsync(System.Int64)">
+            <summary>
+            查询
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Pkg.PkgService.GetListAsync(ZhonTai.Admin.Services.Pkg.Dto.PkgGetListInput)">
+            <summary>
+            查询列表
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Pkg.PkgService.GetPageAsync(ZhonTai.Admin.Core.Dto.PageInput{ZhonTai.Admin.Services.Pkg.Dto.PkgGetPageDto})">
+            <summary>
+            查询分页
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Pkg.PkgService.GetPkgTenantListAsync(ZhonTai.Admin.Services.Pkg.Dto.PkgGetPkgTenantListInput)">
+            <summary>
+            查询套餐租户列表
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Pkg.PkgService.GetPkgPermissionList(System.Int64)">
+            <summary>
+            查询套餐权限列表
+            </summary>
+            <param name="pkgId">套餐编号</param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Pkg.PkgService.SetPkgPermissionsAsync(ZhonTai.Admin.Services.Pkg.Dto.PkgSetPkgPermissionsInput)">
+            <summary>
+            设置套餐权限
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Pkg.PkgService.AddPkgTenantAsync(ZhonTai.Admin.Services.Pkg.Dto.PkgAddPkgTenantListInput)">
+            <summary>
+            添加套餐租户
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Pkg.PkgService.RemovePkgTenantAsync(ZhonTai.Admin.Services.Pkg.Dto.PkgAddPkgTenantListInput)">
+            <summary>
+            移除套餐租户
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Pkg.PkgService.AddAsync(ZhonTai.Admin.Services.Pkg.Dto.PkgAddInput)">
+            <summary>
+            新增
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Pkg.PkgService.UpdateAsync(ZhonTai.Admin.Services.Pkg.Dto.PkgUpdateInput)">
+            <summary>
+            修改
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Pkg.PkgService.DeleteAsync(System.Int64)">
+            <summary>
+            彻底删除
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Pkg.PkgService.BatchDeleteAsync(System.Int64[])">
+            <summary>
+            批量彻底删除
+            </summary>
+            <param name="ids"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Pkg.PkgService.SoftDeleteAsync(System.Int64)">
+            <summary>
+            删除
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.Pkg.PkgService.BatchSoftDeleteAsync(System.Int64[])">
+            <summary>
+            批量删除
+            </summary>
+            <param name="ids"></param>
+            <returns></returns>
+        </member>
+        <member name="T:ZhonTai.Admin.Services.Pkg.MapConfig">
+            <summary>
+            映射配置
+            </summary>
+        </member>
         <member name="T:ZhonTai.Admin.Services.Role.Dto.RoleAddInput">
             <summary>
             添加
@@ -5958,6 +6339,21 @@
             创建时间
             </summary>
         </member>
+        <member name="P:ZhonTai.Admin.Services.Role.Dto.RoleGetRoleUserListOutput.Id">
+            <summary>
+            主键Id
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Role.Dto.RoleGetRoleUserListOutput.Name">
+            <summary>
+            姓名
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.Role.Dto.RoleGetRoleUserListOutput.Mobile">
+            <summary>
+            手机号
+            </summary>
+        </member>
         <member name="T:ZhonTai.Admin.Services.Role.Dto.RoleSetDataScopeInput">
             <summary>
             设置数据范围
@@ -5988,21 +6384,6 @@
             角色Id
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Services.Role.Dto.UserGetRoleUserListOutput.Id">
-            <summary>
-            主键Id
-            </summary>
-        </member>
-        <member name="P:ZhonTai.Admin.Services.Role.Dto.UserGetRoleUserListOutput.Name">
-            <summary>
-            姓名
-            </summary>
-        </member>
-        <member name="P:ZhonTai.Admin.Services.Role.Dto.UserGetRoleUserListOutput.Mobile">
-            <summary>
-            手机号
-            </summary>
-        </member>
         <member name="T:ZhonTai.Admin.Services.Role.IRoleService">
             <summary>
             角色接口
@@ -6034,7 +6415,7 @@
             <param name="input"></param>
             <returns></returns>
         </member>
-        <member name="M:ZhonTai.Admin.Services.Role.RoleService.GetRoleUserListAsync(ZhonTai.Admin.Domain.Role.Dto.UserGetRoleUserListInput)">
+        <member name="M:ZhonTai.Admin.Services.Role.RoleService.GetRoleUserListAsync(ZhonTai.Admin.Domain.Role.Dto.RoleGetRoleUserListInput)">
             <summary>
             查询角色用户列表
             </summary>
@@ -6043,7 +6424,7 @@
         </member>
         <member name="M:ZhonTai.Admin.Services.Role.RoleService.AddRoleUserAsync(ZhonTai.Admin.Services.Role.Dto.RoleAddRoleUserListInput)">
             <summary>
-            新增角色用户
+            添加角色用户
             </summary>
             <param name="input"></param>
             <returns></returns>
@@ -6057,7 +6438,7 @@
         </member>
         <member name="M:ZhonTai.Admin.Services.Role.RoleService.AddAsync(ZhonTai.Admin.Services.Role.Dto.RoleAddInput)">
             <summary>
-            添加
+            新增
             </summary>
             <param name="input"></param>
             <returns></returns>

Някои файлове не бяха показани, защото твърде много файлове са промени