From 52ef5a3e4d134bfc26ed4db9679a9fbdb16eb3e4 Mon Sep 17 00:00:00 2001 From: jxx <283591387@qq.com> Date: Fri, 18 Apr 2025 10:29:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A08.0=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 + 3.ef后台升级.net8.0.docx | Bin 0 -> 18173 bytes 3.sugar后台升级net8.0.docx | Bin 0 -> 15566 bytes vol.api.sqlsugar/SqlSugar使用说明.txt | 14 - .../Sys/FormCollectionObjectController.cs | 21 ++ .../Sys/FormDesignOptionsController.cs | 21 ++ .../Partial/FormCollectionObjectController.cs | 33 +++ .../Partial/FormDesignOptionsController.cs | 82 ++++++ .../Sys/Partial/Sys_DepartmentController.cs | 131 +++++++++ .../Sys/Partial/Sys_DictionaryController.cs | 64 +++++ .../Partial/Sys_DictionaryListController.cs | 72 +++++ .../Sys/Partial/Sys_MenuController.cs | 58 ++++ .../Sys/Partial/Sys_QuartzLogController.cs | 33 +++ .../Partial/Sys_QuartzOptionsController.cs | 94 +++++++ .../Sys/Partial/Sys_RoleController.cs | 191 +++++++++++++ .../Sys/Partial/Sys_UserController.cs | 194 +++++++++++++ .../Sys/Partial/Sys_WorkFlowController.cs | 255 ++++++++++++++++++ .../Sys/Partial/Sys_WorkFlowStepController.cs | 33 +++ .../Sys_WorkFlowTableAuditLogController.cs | 33 +++ .../Partial/Sys_WorkFlowTableController.cs | 39 +++ .../Sys_WorkFlowTableStepController.cs | 33 +++ .../Sys/Sys_DepartmentController.cs | 21 ++ .../Sys/Sys_DictionaryController.cs | 18 ++ .../Sys/Sys_DictionaryListController.cs | 21 ++ .../Controllers/Sys/Sys_LogController.cs | 22 ++ .../Controllers/Sys/Sys_MenuController.cs | 22 ++ .../Sys/Sys_QuartzLogController.cs | 21 ++ .../Sys/Sys_QuartzOptionsController.cs | 21 ++ .../Controllers/Sys/Sys_RoleController.cs | 26 ++ .../Controllers/Sys/Sys_UserController.cs | 21 ++ .../Controllers/Sys/Sys_WorkFlowController.cs | 21 ++ .../Sys/Sys_WorkFlowStepController.cs | 21 ++ .../Sys_WorkFlowTableAuditLogController.cs | 21 ++ .../Sys/Sys_WorkFlowTableController.cs | 21 ++ .../Sys/Sys_WorkFlowTableStepController.cs | 21 ++ 35 files changed, 1691 insertions(+), 14 deletions(-) create mode 100644 3.ef后台升级.net8.0.docx create mode 100644 3.sugar后台升级net8.0.docx delete mode 100644 vol.api.sqlsugar/SqlSugar使用说明.txt create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/FormCollectionObjectController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/FormDesignOptionsController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/FormCollectionObjectController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/FormDesignOptionsController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_DepartmentController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_DictionaryController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_DictionaryListController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_MenuController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_QuartzLogController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_QuartzOptionsController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_RoleController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_UserController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowStepController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowTableAuditLogController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowTableController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowTableStepController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_DepartmentController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_DictionaryController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_DictionaryListController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_LogController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_MenuController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_QuartzLogController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_QuartzOptionsController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_RoleController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_UserController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowStepController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowTableAuditLogController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowTableController.cs create mode 100644 vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowTableStepController.cs diff --git a/.gitignore b/.gitignore index e189edbd..1882ad48 100644 --- a/.gitignore +++ b/.gitignore @@ -101,3 +101,9 @@ /vol.api/VOL.Entity/bin /vol.api/VOL.MES/obj /vol.api/VOL.MES/bin +/vol.api/.vs +/vol.api/VOL.Sys/obj +/vol.api/VOL.Sys/bin +/vol.api/VOL.WebApi/obj +/vol.api/VOL.WebApi/bin +/vol.api.sqlsugar/.vs diff --git a/3.ef后台升级.net8.0.docx b/3.ef后台升级.net8.0.docx new file mode 100644 index 0000000000000000000000000000000000000000..d94ee6b2bf508cb8b98ed2808bb6b057f5e36d22 GIT binary patch literal 18173 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 SoJZlQoyeinR<_gY1gHaA(L0X- literal 0 HcmV?d00001 diff --git a/3.sugar后台升级net8.0.docx b/3.sugar后台升级net8.0.docx new file mode 100644 index 0000000000000000000000000000000000000000..83f7f685076d8d90955314418a0b852635e2232a GIT binary patch literal 15566 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 literal 0 HcmV?d00001 diff --git a/vol.api.sqlsugar/SqlSugar使用说明.txt b/vol.api.sqlsugar/SqlSugar使用说明.txt deleted file mode 100644 index 01c4b35b..00000000 --- a/vol.api.sqlsugar/SqlSugar使用说明.txt +++ /dev/null @@ -1,14 +0,0 @@ -1、现有后台与SqlSugar区别:SqlSugar版本只有SqlSugar一种操作数据库并且是独立同步维护的;现有版本(.net6后台文件夹)数据库访问是EF+Dapper -2、两个后台版本都会同步维护,按需使用其中一个版本即可; - -3、现有代码迁移SqlSugar版本: - (1)为了更好的开发体验,SqlSugar版本不对框架做兼容,而是重写了整个框架数据库访问,所以现有项目不能直接升级; - (2)升级方式: - a、 现有后台项目不要了,数据库与前端不变; - b、SqlSugar版本项目,修改配置appsettings.json数据库链接 - c、后台双击builder_run.bat启动项目,将现有数据表在代码生成器全部重新点一次【生成model】与【生成业务类】 - d、 业务逻辑迁移:将【表Service】类中的代码直接复制过来即可,里面调用数据库操作大部分方法是一样的。如果有差异自行修改或者截图发群里 - - -其他问题:截图发群里 - \ No newline at end of file diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/FormCollectionObjectController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/FormCollectionObjectController.cs new file mode 100644 index 00000000..14fba588 --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/FormCollectionObjectController.cs @@ -0,0 +1,21 @@ +/* + *代码由框架生成,任何更改都可能导致被代码生成器覆盖 + *如果要增加方法请在当前目录下Partial文件夹FormCollectionObjectController编写 + */ +using Microsoft.AspNetCore.Mvc; +using VOL.Core.Controllers.Basic; +using VOL.Entity.AttributeManager; +using VOL.Sys.IServices; +namespace VOL.Sys.Controllers +{ + [Route("api/FormCollectionObject")] + [PermissionTable(Name = "FormCollectionObject")] + public partial class FormCollectionObjectController : ApiBaseController + { + public FormCollectionObjectController(IFormCollectionObjectService service) + : base(service) + { + } + } +} + diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/FormDesignOptionsController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/FormDesignOptionsController.cs new file mode 100644 index 00000000..b331097b --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/FormDesignOptionsController.cs @@ -0,0 +1,21 @@ +/* + *代码由框架生成,任何更改都可能导致被代码生成器覆盖 + *如果要增加方法请在当前目录下Partial文件夹FormDesignOptionsController编写 + */ +using Microsoft.AspNetCore.Mvc; +using VOL.Core.Controllers.Basic; +using VOL.Entity.AttributeManager; +using VOL.Sys.IServices; +namespace VOL.Sys.Controllers +{ + [Route("api/FormDesignOptions")] + [PermissionTable(Name = "FormDesignOptions")] + public partial class FormDesignOptionsController : ApiBaseController + { + public FormDesignOptionsController(IFormDesignOptionsService service) + : base(service) + { + } + } +} + diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/FormCollectionObjectController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/FormCollectionObjectController.cs new file mode 100644 index 00000000..a05498ff --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/FormCollectionObjectController.cs @@ -0,0 +1,33 @@ +/* + *接口编写处... +*如果接口需要做Action的权限验证,请在Action上使用属性 +*如: [ApiActionPermission("FormCollectionObject",Enums.ActionPermissionOptions.Search)] + */ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Http; +using VOL.Entity.DomainModels; +using VOL.Sys.IServices; + +namespace VOL.Sys.Controllers +{ + public partial class FormCollectionObjectController + { + private readonly IFormCollectionObjectService _service;//访问业务代码 + private readonly IHttpContextAccessor _httpContextAccessor; + + [ActivatorUtilitiesConstructor] + public FormCollectionObjectController( + IFormCollectionObjectService service, + IHttpContextAccessor httpContextAccessor + ) + : base(service) + { + _service = service; + _httpContextAccessor = httpContextAccessor; + } + } +} diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/FormDesignOptionsController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/FormDesignOptionsController.cs new file mode 100644 index 00000000..6673bacd --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/FormDesignOptionsController.cs @@ -0,0 +1,82 @@ +/* + *接口编写处... +*如果接口需要做Action的权限验证,请在Action上使用属性 +*如: [ApiActionPermission("FormDesignOptions",Enums.ActionPermissionOptions.Search)] + */ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Http; +using VOL.Entity.DomainModels; +using VOL.Sys.IServices; +using VOL.Sys.IRepositories; +using System.Linq; +using Microsoft.EntityFrameworkCore; +using VOL.Sys.Services; +using VOL.Core.DBManager; +using SqlSugar; + +namespace VOL.Sys.Controllers +{ + public partial class FormDesignOptionsController + { + private readonly IFormDesignOptionsService _service;//访问业务代码 + private readonly IHttpContextAccessor _httpContextAccessor; + private readonly IFormCollectionObjectRepository _formCollectionRepository; + private readonly IFormDesignOptionsRepository _formDesignOptionsRepository; + [ActivatorUtilitiesConstructor] + public FormDesignOptionsController( + IFormDesignOptionsService service, + IHttpContextAccessor httpContextAccessor, + IFormCollectionObjectRepository formCollectionRepository, + IFormDesignOptionsRepository formDesignOptionsRepository + ) + : base(service) + { + _service = service; + _httpContextAccessor = httpContextAccessor; + _formCollectionRepository = formCollectionRepository; + _formDesignOptionsRepository = formDesignOptionsRepository; + } + ///

+ /// + /// + /// + /// + [Route("getFormOptions"), HttpGet] + public async Task GetFormOptions(Guid id) + { + var options = await _formDesignOptionsRepository.FindAsIQueryable(x => x.FormId == id) + .Select(s => new { s.Title, s.FormOptions }) + .FirstOrDefaultAsync(); + return Json(new { data = options }); + } + /// + /// + /// + /// + /// + [Route("submit"), HttpPost] + public IActionResult Submit([FromBody] SaveModel saveModel) + { + var result = FormCollectionObjectService.Instance.Add(saveModel); + return Json(result); + } + /// + ///获取有数据的设计器 + /// + /// + [Route("getList"), HttpGet] + public IActionResult GetList() + { + var query = _formCollectionRepository.FindAsIQueryable(x => true); + var data = _formDesignOptionsRepository.FindAsIQueryable(x => SqlFunc.Subqueryable().Where(c => c.FormId == x.FormId).Any()) + .Select(s => new { s.FormId, s.Title, s.FormOptions }) + .ToList(); + return Json(data); + + } + } +} diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_DepartmentController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_DepartmentController.cs new file mode 100644 index 00000000..59ba62d5 --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_DepartmentController.cs @@ -0,0 +1,131 @@ +/* + *接口编写处... +*如果接口需要做Action的权限验证,请在Action上使用属性 +*如: [ApiActionPermission("Sys_Department",Enums.ActionPermissionOptions.Search)] + */ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Http; +using VOL.Entity.DomainModels; +using VOL.Sys.IServices; +using VOL.Core.Filters; +using VOL.Core.Enums; +using VOL.Core.Extensions; +using VOL.Sys.IRepositories; +using Microsoft.EntityFrameworkCore; +using System.Linq; +using VOL.Core.ManageUser; +using VOL.Core.UserManager; +using SqlSugar; + +namespace VOL.Sys.Controllers +{ + public partial class Sys_DepartmentController + { + private readonly ISys_DepartmentService _service;//访问业务代码 + private readonly ISys_DepartmentRepository _repository; + private readonly IHttpContextAccessor _httpContextAccessor; + + [ActivatorUtilitiesConstructor] + public Sys_DepartmentController( + ISys_DepartmentService service, + ISys_DepartmentRepository repository, + IHttpContextAccessor httpContextAccessor + ) + : base(service) + { + _service = service; + _repository = repository; + _httpContextAccessor = httpContextAccessor; + } + + + /// + /// treetable 获取子节点数据(2021.05.02) + /// + /// + /// + [ApiActionPermission(ActionPermissionOptions.Search)] + [HttpPost, Route("GetPageData")] + public override ActionResult GetPageData([FromBody] PageDataOptions loadData) + { + if (loadData.Value.GetInt() == 1) + { + return GetTreeTableRootData(loadData).Result; + } + return base.GetPageData(loadData); + } + + /// + /// treetable 获取子节点数据 + /// + /// + [HttpPost, Route("getTreeTableRootData")] + [ApiActionPermission(ActionPermissionOptions.Search)] + public async Task GetTreeTableRootData([FromBody] PageDataOptions options) + { + //页面加载根节点数据条件x => x.ParentId == 0,自己根据需要设置 + var query = _repository.FindAsIQueryable(x => true); + if (UserContext.Current.IsSuperAdmin) + { + query = query.Where(x => x.ParentId == null); + } + else + { + var deptIds = UserContext.Current.DeptIds; + var list = DepartmentContext.GetAllDept().Where(c => deptIds.Contains(c.id)).ToList(); + deptIds = list.Where(c => !list.Any(x => x.id == c.parentId)).Select(x => x.id).ToList(); + query = query.Where(x => deptIds.Contains(x.DepartmentId)); + } + var queryChild = _repository.FindAsIQueryable(x => true); + var rows = await query.TakeOrderByPage(options.Page, options.Rows) + .OrderBy(x => x.DepartmentName).Select(s => new + { + s.DepartmentId, + s.ParentId, + s.DepartmentName, + s.DepartmentCode, + s.Enable, + s.Remark, + s.CreateDate, + s.Creator, + s.Modifier, + s.ModifyDate, + hasChildren = SqlFunc.Subqueryable().Where(x => x.ParentId == s.DepartmentId).Any() + }).ToListAsync(); + return JsonNormal(new { total = await query.CountAsync(), rows }); + } + + /// + ///treetable 获取子节点数据 + /// + /// + [HttpPost, Route("getTreeTableChildrenData")] + [ApiActionPermission(ActionPermissionOptions.Search)] + public async Task GetTreeTableChildrenData(Guid departmentId) + { + //点击节点时,加载子节点数据 + var query = _repository.FindAsIQueryable(x => true); + var rows = await query.Where(x => x.ParentId == departmentId) + .Select(s => new + { + s.DepartmentId, + s.ParentId, + s.DepartmentName, + s.DepartmentCode, + s.Enable, + s.Remark, + s.CreateDate, + s.Creator, + s.Modifier, + s.ModifyDate, + hasChildren = SqlFunc.Subqueryable().Where(x => x.ParentId == s.DepartmentId).Any() + }).ToListAsync(); + return JsonNormal(new { rows }); + } + } +} + diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_DictionaryController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_DictionaryController.cs new file mode 100644 index 00000000..aaa04bee --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_DictionaryController.cs @@ -0,0 +1,64 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System.Collections.Generic; +using System.Threading.Tasks; +using VOL.Core.Controllers.Basic; +using VOL.Core.Extensions; +using VOL.Core.Filters; +using VOL.Sys.IServices; + +namespace VOL.Sys.Controllers +{ + public partial class Sys_DictionaryController + { + [HttpPost, Route("GetVueDictionary")] + [ApiActionPermission()] + public IActionResult GetVueDictionary([FromBody] string[] dicNos) + { + return Content(Service.GetVueDictionary(dicNos).Serialize()); + } + /// + /// table加载数据后刷新当前table数据的字典项(适用字典数据量比较大的情况) + /// + /// + /// + [HttpPost, Route("getTableDictionary")] + public IActionResult GetTableDictionary([FromBody] Dictionary keyData) + { + return Json(Service.GetTableDictionary(keyData)); + } + /// + /// 远程搜索 + /// + /// + /// + [HttpPost, Route("getSearchDictionary")] + public IActionResult GetSearchDictionary(string dicNo, string value) + { + return Json(Service.GetSearchDictionary(dicNo, value)); + } + + /// + /// 表单设置为远程查询,重置或第一次添加表单时,获取字典的key、value + /// + /// + /// + /// + [HttpPost, Route("getRemoteDefaultKeyValue")] + public async Task GetRemoteDefaultKeyValue(string dicNo, string key) + { + return Json(await Service.GetRemoteDefaultKeyValue(dicNo, key)); + } + /// + /// 代码生成器获取所有字典项(超级管理权限) + /// + /// + [HttpPost, Route("GetBuilderDictionary")] + // [ApiActionPermission(ActionRolePermission.SuperAdmin)] + public async Task GetBuilderDictionary() + { + return Json(await Service.GetBuilderDictionary()); + } + + } +} diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_DictionaryListController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_DictionaryListController.cs new file mode 100644 index 00000000..54ed6a0d --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_DictionaryListController.cs @@ -0,0 +1,72 @@ +/* + *接口编写处... +*如果接口需要做Action的权限验证,请在Action上使用属性 +*如: [ApiActionPermission("Sys_DictionaryList",Enums.ActionPermissionOptions.Search)] + */ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Http; +using VOL.Entity.DomainModels; +using VOL.Sys.IServices; +using VOL.Core.Filters; + +namespace VOL.Sys.Controllers +{ + public partial class Sys_DictionaryListController + { + private readonly ISys_DictionaryListService _service;//访问业务代码 + private readonly IHttpContextAccessor _httpContextAccessor; + + [ActivatorUtilitiesConstructor] + public Sys_DictionaryListController( + ISys_DictionaryListService service, + IHttpContextAccessor httpContextAccessor + ) + : base(service) + { + _service = service; + _httpContextAccessor = httpContextAccessor; + } + /// + /// 导出明细 + /// (重写权限)将子表的权限指向主表权限 + /// + /// + /// + [ApiActionPermission("Sys_Dictionary", Core.Enums.ActionPermissionOptions.Export)] + [ApiExplorerSettings(IgnoreApi = false)] + [HttpPost, Route("Export")] + public override ActionResult Export([FromBody] PageDataOptions loadData) + { + return base.Export(loadData); + } + /// + /// 导入表数据Excel + /// (重写权限)将子表的权限指向主表权限 + /// + /// + /// + [HttpPost, Route("Import")] + [ApiActionPermission("Sys_Dictionary", Core.Enums.ActionPermissionOptions.Import)] + [ApiExplorerSettings(IgnoreApi = false)] + public override ActionResult Import(List fileInput) + { + return base.Import(fileInput); + } + /// + /// 下载导入Excel模板 + /// (重写权限)将子表的权限指向主表权限 + /// + /// + [HttpGet, Route("DownLoadTemplate")] + [ApiActionPermission("Sys_Dictionary", Core.Enums.ActionPermissionOptions.Import)] + [ApiExplorerSettings(IgnoreApi = false)] + public override ActionResult DownLoadTemplate() + { + return base.DownLoadTemplate(); + } + } +} diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_MenuController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_MenuController.cs new file mode 100644 index 00000000..92ca5898 --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_MenuController.cs @@ -0,0 +1,58 @@ +using Microsoft.AspNetCore.Mvc; +using System.Threading.Tasks; +using VOL.Core.Enums; +using VOL.Core.Filters; +using VOL.Entity.DomainModels; +using VOL.Sys.IServices; + +namespace VOL.Sys.Controllers +{ + public partial class Sys_MenuController + { + /// + /// + /// + /// + [HttpGet, HttpPost, Route("getTreeMenu")] + //2019.10.24屏蔽用户查询自己权限菜单 + // [ApiActionPermission("Sys_Menu", ActionPermissionOptions.Search)] + public async Task GetTreeMenu() + { + return Json(await _service.GetCurrentMenuActionList()); + } + [HttpPost, Route("getMenu")] + [ApiActionPermission("Sys_Menu", ActionPermissionOptions.Search)] + public async Task GetMenu() + { + return Json(await _service.GetMenu()); + } + + [HttpPost, Route("getTreeItem")] + [ApiActionPermission("Sys_Menu", "1", ActionPermissionOptions.Search)] + public async Task GetTreeItem(int menuId) + { + return Json(await _service.GetTreeItem(menuId)); + } + + //[ActionPermission("Sys_Menu", "1", ActionPermissionOptions.Add)] + //只有角色ID为1的才能进行保存操作 + [HttpPost, Route("save"), ApiActionPermission(ActionRolePermission.SuperAdmin)] + public async Task Save([FromBody] Sys_Menu menu) + { + return Json(await _service.Save(menu)); + } + + /// + /// 限制只能超级管理员才删除菜单 + /// + /// + /// + [ApiActionPermission(ActionRolePermission.SuperAdmin)] + [HttpPost, Route("delMenu")] + public async Task DelMenu(int menuId) + { + return Json(await Service.DelMenu(menuId)); + } + + } +} diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_QuartzLogController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_QuartzLogController.cs new file mode 100644 index 00000000..97ac34ee --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_QuartzLogController.cs @@ -0,0 +1,33 @@ +/* + *接口编写处... +*如果接口需要做Action的权限验证,请在Action上使用属性 +*如: [ApiActionPermission("Sys_QuartzLog",Enums.ActionPermissionOptions.Search)] + */ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Http; +using VOL.Entity.DomainModels; +using VOL.Sys.IServices; + +namespace VOL.Sys.Controllers +{ + public partial class Sys_QuartzLogController + { + private readonly ISys_QuartzLogService _service;//访问业务代码 + private readonly IHttpContextAccessor _httpContextAccessor; + + [ActivatorUtilitiesConstructor] + public Sys_QuartzLogController( + ISys_QuartzLogService service, + IHttpContextAccessor httpContextAccessor + ) + : base(service) + { + _service = service; + _httpContextAccessor = httpContextAccessor; + } + } +} diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_QuartzOptionsController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_QuartzOptionsController.cs new file mode 100644 index 00000000..238bfb30 --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_QuartzOptionsController.cs @@ -0,0 +1,94 @@ +/* + *接口编写处... +*如果接口需要做Action的权限验证,请在Action上使用属性 +*如: [ApiActionPermission("Sys_QuartzOptions",Enums.ActionPermissionOptions.Search)] + */ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Http; +using VOL.Entity.DomainModels; +using VOL.Sys.IServices; +using VOL.Core.Filters; +using VOL.Core.Enums; + +namespace VOL.Sys.Controllers +{ + public partial class Sys_QuartzOptionsController + { + private readonly ISys_QuartzOptionsService _service;//访问业务代码 + private readonly IHttpContextAccessor _httpContextAccessor; + + [ActivatorUtilitiesConstructor] + public Sys_QuartzOptionsController( + ISys_QuartzOptionsService service, + IHttpContextAccessor httpContextAccessor + ) + : base(service) + { + _service = service; + _httpContextAccessor = httpContextAccessor; + } + + /// + /// api加上属性 [ApiTask] + /// + /// + [ApiTask] + [HttpGet, HttpPost, Route("test2")] + public IActionResult Test2() + { + return Content(DateTime.Now.ToString("yyyy-MM-dd HH:mm:sss")); + } + + /// + /// api加上属性 [ApiTask] + /// + /// + [ApiTask] + [HttpGet, HttpPost, Route("taskTest")] + public IActionResult TaskTest() + { + return Content(DateTime.Now.ToString("yyyy-MM-dd HH:mm:sss")); + } + + /// + /// 手动执行一次 + /// + /// + /// + [Route("run"), HttpPost] + [ActionPermission(ActionPermissionOptions.Update)] + public async Task Run([FromBody] Sys_QuartzOptions taskOptions) + { + return await Service.Run(taskOptions); + } + /// + /// 开启任务 + /// + /// + /// + /// + [Route("start"), HttpPost] + [ActionPermission(ActionPermissionOptions.Update)] + public async Task Start([FromBody] Sys_QuartzOptions taskOptions) + { + return await Service.Start(taskOptions); + } + + /// + /// 暂停任务 + /// + /// + /// + /// + [Route("pause"), HttpPost] + [ActionPermission(ActionPermissionOptions.Update)] + public async Task Pause([FromBody] Sys_QuartzOptions taskOptions) + { + return await Service.Pause(taskOptions); + } + } +} diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_RoleController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_RoleController.cs new file mode 100644 index 00000000..cd93fd93 --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_RoleController.cs @@ -0,0 +1,191 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using SqlSugar; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using VOL.Core.Controllers.Basic; +using VOL.Core.Enums; +using VOL.Core.Extensions; +using VOL.Core.Filters; +using VOL.Core.ManageUser; +using VOL.Core.UserManager; +using VOL.Core.Utilities; +using VOL.Entity.AttributeManager; +using VOL.Entity.DomainModels; +using VOL.Sys.IRepositories; +using VOL.Sys.IServices; +using VOL.Sys.Repositories; +using VOL.Sys.Services; + +namespace VOL.Sys.Controllers +{ + [Route("api/role")] + public partial class Sys_RoleController + { + private readonly ISys_RoleService _service;//访问业务代码 + private readonly ISys_RoleRepository _repository; + private readonly IHttpContextAccessor _httpContextAccessor; + + [ActivatorUtilitiesConstructor] + public Sys_RoleController( + ISys_RoleService service, + ISys_RoleRepository repository, + IHttpContextAccessor httpContextAccessor + ) + : base(service) + { + _service = service; + _repository = repository; + _httpContextAccessor = httpContextAccessor; + } + + + [HttpPost, Route("getCurrentTreePermission")] + [ApiActionPermission(ActionPermissionOptions.Search)] + public async Task GetCurrentTreePermission() + { + return Json(await Service.GetCurrentTreePermission()); + } + + [HttpPost, Route("getUserTreePermission")] + [ApiActionPermission(ActionPermissionOptions.Search)] + public async Task GetUserTreePermission(int roleId) + { + return Json(await Service.GetUserTreePermission(roleId)); + } + + [HttpPost, Route("savePermission")] + [ApiActionPermission(ActionPermissionOptions.Update)] + public async Task SavePermission([FromBody] List userPermissions, int roleId) + { + return Json(await Service.SavePermission(userPermissions, roleId)); + } + + /// + /// 获取当前角色下的所有角色 + /// + /// + + [HttpPost, Route("getUserChildRoles")] + [ApiActionPermission(ActionPermissionOptions.Search)] + public IActionResult GetUserChildRoles() + { + int roleId = UserContext.Current.RoleId; + var data = RoleContext.GetAllChildren(UserContext.Current.RoleId); + + if (UserContext.Current.IsSuperAdmin) + { + return Json(WebResponseContent.Instance.OK(null, data)); + } + //不是超级管理,将自己的角色查出来,在树形菜单上作为根节点 + var self = _repository.FindAsIQueryable(x => x.Role_Id == roleId) + .Select(s => new VOL.Core.UserManager.RoleNodes() + { + Id = s.Role_Id, + ParentId = 0,//将自己的角色作为root节点 + RoleName = s.RoleName + }).ToList(); + data.AddRange(self); + return Json(WebResponseContent.Instance.OK(null, data)); + } + + + + /// + /// treetable 获取子节点数据(2021.05.02) + /// + /// + /// + [ApiActionPermission(ActionPermissionOptions.Search)] + [HttpPost, Route("GetPageData")] + public override ActionResult GetPageData([FromBody] PageDataOptions loadData) + { + //获取根节点数据(对应Sys_Role1.js中searchBefore方法) + if (loadData.Value.GetInt() == 1) + { + return GetTreeTableRootData(loadData).Result; + } + return base.GetPageData(loadData); + } + + /// + /// treetable 获取子节点数据(2021.05.02) + /// + /// + [HttpPost, Route("getTreeTableRootData")] + [ApiActionPermission(ActionPermissionOptions.Search)] + public async Task GetTreeTableRootData([FromBody] PageDataOptions options) + { + //页面加载根节点数据条件x => x.ParentId == 0,自己根据需要设置 + var query = _repository.FindAsIQueryable(x => true); + if (UserContext.Current.IsSuperAdmin) + { + query = query.Where(x => x.ParentId == 0); + } + else + { + int roleId = UserContext.Current.RoleId; + query = query.Where(x => x.Role_Id == roleId); + } + var queryChild = _repository.FindAsIQueryable(x => true); + var rows = await query.TakeOrderByPage(options.Page, options.Rows) + .OrderBy(x => x.Role_Id).Select(s => new + { + s.Role_Id, + // ParentId=0, + s.ParentId, + s.RoleName, + s.DeptName, + s.Dept_Id, + s.Enable, + s.CreateDate, + s.Creator, + s.Modifier, + s.ModifyDate, + s.OrderNo, + hasChildren = SqlFunc.Subqueryable().Where(x => x.ParentId == s.Role_Id).Any() + }).ToListAsync(); + return JsonNormal(new { total = await query.CountAsync(), rows }); + } + + /// + ///treetable 获取子节点数据(2021.05.02) + /// + /// + [HttpPost, Route("getTreeTableChildrenData")] + [ApiActionPermission(ActionPermissionOptions.Search)] + public async Task GetTreeTableChildrenData(int roleId) + { + if (!UserContext.Current.IsSuperAdmin && roleId != UserContext.Current.RoleId && !RoleContext.GetAllChildren(UserContext.Current.RoleId).Any(x => x.Id == roleId)) + { + return JsonNormal(new { rows = new object[] { } }); + } + //点击节点时,加载子节点数据 + var roleRepository = Sys_RoleRepository.Instance.FindAsIQueryable(x => true); + var rows = await roleRepository.Where(x => x.ParentId == roleId) + .Select(s => new + { + s.Role_Id, + s.ParentId, + s.RoleName, + s.DeptName, + s.Dept_Id, + s.Enable, + s.CreateDate, + s.Creator, + s.Modifier, + s.ModifyDate, + s.OrderNo, + hasChildren = SqlFunc.Subqueryable().Where(x => x.ParentId == s.Role_Id).Any() + }).ToListAsync(); + return JsonNormal(new { rows }); + } + + } +} + + diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_UserController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_UserController.cs new file mode 100644 index 00000000..90d9867b --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_UserController.cs @@ -0,0 +1,194 @@ + +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Threading.Tasks; +using VOL.Core.CacheManager; +using VOL.Core.Configuration; +using VOL.Core.Controllers.Basic; +using VOL.Core.DBManager; +using VOL.Core.DbContext; +using VOL.Core.Enums; +using VOL.Core.Extensions; +using VOL.Core.Filters; +using VOL.Core.Infrastructure; +using VOL.Core.ManageUser; +using VOL.Core.ObjectActionValidator; +using VOL.Core.Services; +using VOL.Core.Utilities; +using VOL.Entity.AttributeManager; +using VOL.Entity.DomainModels; +using VOL.Sys.IRepositories; +using VOL.Sys.IServices; +using VOL.Sys.Repositories; + +namespace VOL.Sys.Controllers +{ + [Route("api/User")] + public partial class Sys_UserController + { + private ISys_UserRepository _userRepository; + private ICacheService _cache; + [ActivatorUtilitiesConstructor] + public Sys_UserController( + ISys_UserService userService, + ISys_UserRepository userRepository, + ICacheService cahce + ) + : base(userService) + { + _userRepository = userRepository; + _cache = cahce; + } + + [HttpPost, HttpGet, Route("login"), AllowAnonymous] + [ObjectModelValidatorFilter(ValidatorModel.Login)] + public async Task Login([FromBody] LoginInfo loginInfo) + { + return Json(await Service.Login(loginInfo)); + } + + private readonly ConcurrentDictionary _lockCurrent = new ConcurrentDictionary(); + [HttpPost, Route("replaceToken")] + public IActionResult ReplaceToken() + { + WebResponseContent responseContent = new WebResponseContent(); + string error = ""; + string key = $"rp:Token:{UserContext.Current.UserId}"; + UserInfo userInfo = null; + try + { + //如果5秒内替换过token,直接使用最新的token(防止一个页面多个并发请求同时替换token导致token错位) + if (_cache.Exists(key)) + { + return Json(responseContent.OK(null, _cache.Get(key))); + } + var _obj = _lockCurrent.GetOrAdd(UserContext.Current.UserId, new object() { }); + lock (_obj) + { + if (_cache.Exists(key)) + { + return Json(responseContent.OK(null, _cache.Get(key))); + } + string requestToken = HttpContext.Request.Headers[AppSetting.TokenHeaderName]; + requestToken = requestToken?.Replace("Bearer ", ""); + + if (JwtHelper.IsExp(requestToken)) return Json(responseContent.Error("Token已过期!")); + + int userId = UserContext.Current.UserId; + + userInfo = _userRepository.FindAsIQueryable(x => x.User_Id == userId).Select( + s => new UserInfo() + { + User_Id = userId, + UserName = s.UserName, + UserTrueName = s.UserTrueName, + Role_Id = s.Role_Id, + RoleName = s.RoleName + }).FirstOrDefault(); + + if (userInfo == null) return Json(responseContent.Error("未查到用户信息!")); + + string token = JwtHelper.IssueJwt(userInfo); + //移除当前缓存 + _cache.Remove(userId.GetUserIdKey()); + //只更新的token字段 + _userRepository.Update(new Sys_User() { User_Id = userId, Token = token }, x => x.Token, true); + //添加一个5秒缓存 + _cache.Add(key, token, 5); + responseContent.OK(null, token); + } + } + catch (Exception ex) + { + error = ex.Message + ex.StackTrace; + responseContent.Error("token替换异常"); + } + finally + { + _lockCurrent.TryRemove(UserContext.Current.UserId, out object val); + string _message = $"用户{userInfo?.User_Id}_{userInfo?.UserTrueName},({(responseContent.Status ? "token替换成功": "token替换失败")})"; + Logger.Info(LoggerType.ReplaceToeken, _message, null, error); + } + return Json(responseContent); + } + + + [HttpPost, Route("modifyPwd")] + [ApiActionPermission] + public async Task ModifyPwd([FromBody] Dictionary info) + { + return Json(await Service.ModifyPwd(info?["oldPwd"], info?["newPwd"])); + } + + + + [HttpPost, Route("getCurrentUserInfo")] + public async Task GetCurrentUserInfo() + { + return Json(await Service.GetCurrentUserInfo()); + } + + [HttpPost, Route("modifyUserPwd"), ApiActionPermission(ActionPermissionOptions.Update)] + public IActionResult ModifyUserPwd([FromBody] LoginInfo loginInfo) + { + string userName = loginInfo?.UserName; + string password = loginInfo?.Password; + WebResponseContent webResponse = new WebResponseContent(); + if (string.IsNullOrEmpty(password) || string.IsNullOrEmpty(userName)) + { + return Json(webResponse.Error("参数不完整")); + } + if (password.Length < 6) return Json(webResponse.Error("密码长度不能少于6位")); + + ISys_UserRepository repository = Sys_UserRepository.Instance; + Sys_User user = repository.FindFirst(x => x.UserName == userName); + if (user == null) + { + return Json(webResponse.Error("用户不存在")); + } + user.UserPwd = password.EncryptDES(AppSetting.Secret.User); + repository.Update(user, x => new { x.UserPwd }, true); + //如果用户在线,强制下线 + UserContext.Current.LogOut(user.User_Id); + return Json(webResponse.OK("密码修改成功")); + } + /// + /// 2020.06.15增加登陆验证码 + /// + /// + [HttpGet, Route("getVierificationCode"), AllowAnonymous] + public IActionResult GetVierificationCode() + { + string code = VierificationCode.RandomText(); + var data = new + { + img = VierificationCode.CreateBase64Imgage(code), + uuid = Guid.NewGuid() + }; + HttpContext.GetService().Set(data.uuid.ToString(), code, new TimeSpan(0, 5, 0)); + return Json(data); + } + + [ApiActionPermission()] + public override IActionResult Upload(IEnumerable fileInput) + { + return base.Upload(fileInput); + } + [HttpPost, Route("updateUserInfo")] + public IActionResult UpdateUserInfo([FromBody] Sys_User user) + { + user.User_Id = UserContext.Current.UserId; + + _userRepository.Update(user, x => new { x.UserTrueName, x.Gender, x.Remark, x.HeadImageUrl }, true); + return Content("修改成功"); + } + } +} diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowController.cs new file mode 100644 index 00000000..fa4f80d9 --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowController.cs @@ -0,0 +1,255 @@ +/* + *接口编写处... +*如果接口需要做Action的权限验证,请在Action上使用属性 +*如: [ApiActionPermission("Sys_WorkFlow",Enums.ActionPermissionOptions.Search)] + */ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Http; +using VOL.Entity.DomainModels; +using VOL.Sys.IServices; +using VOL.Core.WorkFlow; +using VOL.Sys.IRepositories; +using System.Linq; +using Microsoft.EntityFrameworkCore; +using VOL.Core.ManageUser; +using VOL.Core.Services; +using VOL.Core.Infrastructure; +using VOL.Core.DBManager; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using VOL.Core.Extensions; +using VOL.Core.UserManager; + +namespace VOL.Sys.Controllers +{ + public partial class Sys_WorkFlowController + { + private readonly ISys_WorkFlowService _service;//访问业务代码 + private readonly ISys_UserRepository _userRepository; + private readonly ISys_RoleRepository _roleRepository; + private readonly ISys_DepartmentRepository _departmentRepository; + private readonly ISys_WorkFlowRepository _workFlowRepository; + private readonly ISys_WorkFlowTableRepository _workFlowTableRepository; + private readonly IHttpContextAccessor _httpContextAccessor; + + [ActivatorUtilitiesConstructor] + public Sys_WorkFlowController( + ISys_WorkFlowService service, + ISys_UserRepository userRepository, + ISys_RoleRepository roleRepository, + ISys_WorkFlowRepository workFlowRepository, + ISys_WorkFlowTableRepository workFlowTableRepository, + IHttpContextAccessor httpContextAccessor, + ISys_DepartmentRepository departmentRepository + ) + : base(service) + { + _service = service; + _userRepository = userRepository; + _roleRepository = roleRepository; + _departmentRepository = departmentRepository; + _workFlowRepository = workFlowRepository; + _workFlowTableRepository = workFlowTableRepository; + _httpContextAccessor = httpContextAccessor; + + } + /// + /// 获取工作流程表数据源 + /// + /// + [HttpGet, Route("getTableInfo")] + public IActionResult GetTableInfo() + { + return Json(WorkFlowContainer.GetDic()); + } + /// + /// 获取流程节点数据源(用户与角色) + /// + /// + [HttpGet, Route("getNodeDic")] + public async Task GetNodeDic() + { + var data = new + { + users = await _userRepository.FindAsIQueryable(x => true).Select(s => new { key = s.User_Id, value = s.UserTrueName }).Take(5000).ToListAsync(), + roles = await _roleRepository.FindAsIQueryable(x => true).Select(s => new { key = s.Role_Id, value = s.RoleName }).ToListAsync(), + dept = await _departmentRepository.FindAsIQueryable(x => true).Select(s => new { key = s.DepartmentId, value = s.DepartmentName }).ToListAsync(), + }; + return Json(data); + } + /// + /// 获取单据的审批流程进度 + /// + /// + /// + /// + [HttpPost, Route("getSteps")] + public async Task GetSteps([FromBody] List ids, string tableName) + { + var flows = await _workFlowTableRepository.FindAsIQueryable(x => x.WorkTable == tableName && ids.Contains(x.WorkTableKey)) + .Includes(x => x.Sys_WorkFlowTableStep) + .ToListAsync(); + //不在审核中的数据 + if (flows.Count == 0) + { + return Json(new { status = true }); + } + if (flows.Count > 1 || flows.Count != ids.Count) + { + return Json(new { status = false, message = "只能选择一条数据进行审核" }); + } + + var flow = flows[0]; + var user = UserContext.Current.UserInfo; + // 获取按用户审核的id,如果多用户要进行分割 + // 转换成int数组 + //var auditUsers = flow.Sys_WorkFlowTableStep + // .Where(x => x.StepType == (int)AuditType.用户审批 && x.StepValue != null) + // .SelectMany(x => x.StepValue.Split(",")).Select(int.Parse).ToArray(); + + //未审批时的用户信息 + var unauditSteps = flow.Sys_WorkFlowTableStep + .Where(x => (x.AuditId == null || x.AuditId == 0) && x.StepType == (int)AuditType.用户审批) + .Select(s => new { s.Sys_WorkFlowTableStep_Id, userIds = s.StepValue.Split(",").Select(s => s.GetInt()) } + ).ToList(); + + var unauditUsers = unauditSteps.SelectMany(c => c.userIds).ToList(); + List<(int userId, string userName)> userInfo = new List<(int userId, string userName)>(); + if (unauditUsers.Count > 0) + { + userInfo = (await _userRepository.FindAsIQueryable(x => unauditUsers.Contains(x.User_Id)) + .Select(u => new { u.User_Id, u.UserTrueName }).ToListAsync()) + .Select(c => (c.User_Id, c.UserTrueName)).ToList(); + } + + var log = await _workFlowTableRepository.DbContext.Set() + .Where(x => x.WorkFlowTable_Id == flow.WorkFlowTable_Id) + .OrderBy(x => x.CreateDate) + .ToListAsync(); + + string GetAuditUsers(Sys_WorkFlowTableStep step) + { + if (step.StepType == (int)AuditType.角色审批) + { + int roleId = step.StepValue.GetInt(); + return RoleContext.GetAllRoleId().Where(c => c.Id == roleId).Select(c => c.RoleName).FirstOrDefault(); + } + //按部门审批 + if (step.StepType == (int)AuditType.部门审批) + { + var deptId = step.StepValue.GetGuid(); + return DepartmentContext.GetAllDept().Where(c => c.id == deptId).Select(c => c.value).FirstOrDefault(); + } + var userIds = unauditSteps.Where(c => c.Sys_WorkFlowTableStep_Id == step.Sys_WorkFlowTableStep_Id) + .Select(c => c.userIds).FirstOrDefault(); + if (userIds == null) + { + return ""; + } + return string.Join("/", userInfo.Where(c => userIds.Contains(c.userId)).Select(s => s.userName)); + } + + var steps = flow.Sys_WorkFlowTableStep + .Select(c => new + { + c.AuditId, + Auditor = c.Auditor ?? GetAuditUsers(c), + //Auditor = auditor, + c.AuditDate, + c.AuditStatus, + c.Remark, + c.StepValue, + c.StepName, + c.OrderId, + c.Enable, + c.StepId, + c.StepAttrType, + c.CreateDate, + c.Creator, + //判断是按角色审批 还是用户帐号审批 + isCurrentUser = (c.AuditStatus == null || c.AuditStatus == (int)AuditStatus.审核中 || c.AuditStatus == (int)AuditStatus.待审核) + && c.StepId == flow.CurrentStepId && GetAuditStepValue(c), + isCurrent = c.StepId == flow.CurrentStepId && c.AuditStatus != (int)AuditStatus.审核通过 + }).OrderBy(o => o.OrderId); + + object form = await WorkFlowManager.GetAuditFormDataAsync(ids[0], tableName); + + var data = new + { + status = true, + step = flow.CurrentStepId, + flow.AuditStatus, + auditDic = DictionaryManager.GetDictionary("audit")?.Sys_DictionaryList?.Select(s => new { key = s.DicValue, value = s.DicName }), + list = steps.OrderBy(x => x.OrderId).ToList(), + log = log, + form + }; + + return Json(data); + } + [HttpPost, Route("getFields")] + public async Task GetFields(string table) + { + var query = _workFlowTableRepository.DbContext.Set().Where(c => c.TableName == table); + var fields = WorkFlowContainer.GetFilterFields(table); + if (fields != null && fields.Length > 0) + { + query = query.Where(x => fields.Contains(x.ColumnName)); + } + else + { + query = query.Where(x => x.IsDisplay == 1); + } + var columns = await query.OrderByDescending(c => c.OrderNo) + .Select(s => new + { + field = s.ColumnName, + name = s.ColumnCnName, + dicNo = s.DropNo, + s.ColumnType + }).ToListAsync(); + + + var data = columns.Select(s => new + { + s.field, + s.name, + s.dicNo, + columnType = s.ColumnType, + data = string.IsNullOrEmpty(s.dicNo) + ? null + : DictionaryManager.GetDictionary(s.dicNo)?.Sys_DictionaryList?.Select(c => new { key = c.DicValue, value = c.DicName })?.ToList() + }).ToList(); + return JsonNormal(data); + + } + + private bool GetAuditStepValue(Sys_WorkFlowTableStep flow) + { + if (flow.StepType == (int)AuditType.角色审批) + { + return UserContext.Current.RoleId.ToString() == flow.StepValue; + } + //按部门审批 + if (flow.StepType == (int)AuditType.部门审批) + { + return UserContext.Current.UserInfo.DeptIds.Select(s => s.ToString()).Contains(flow.StepValue); + } + //按用户审批 + //return UserContext.Current.UserId.ToString() == flow.StepValue; + return flow.StepValue.Split(",").Contains(UserContext.Current.UserId.ToString()); + + } + [Route("getOptions"), HttpGet] + public async Task GetOptions(Guid id) + { + var data = await _workFlowRepository.FindAsIQueryable(x => x.WorkFlow_Id == id) + .Includes(c => c.Sys_WorkFlowStep) + .FirstOrDefaultAsync(); + return JsonNormal(data); + } + } +} diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowStepController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowStepController.cs new file mode 100644 index 00000000..87fa61ed --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowStepController.cs @@ -0,0 +1,33 @@ +/* + *接口编写处... +*如果接口需要做Action的权限验证,请在Action上使用属性 +*如: [ApiActionPermission("Sys_WorkFlowStep",Enums.ActionPermissionOptions.Search)] + */ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Http; +using VOL.Entity.DomainModels; +using VOL.Sys.IServices; + +namespace VOL.Sys.Controllers +{ + public partial class Sys_WorkFlowStepController + { + private readonly ISys_WorkFlowStepService _service;//访问业务代码 + private readonly IHttpContextAccessor _httpContextAccessor; + + [ActivatorUtilitiesConstructor] + public Sys_WorkFlowStepController( + ISys_WorkFlowStepService service, + IHttpContextAccessor httpContextAccessor + ) + : base(service) + { + _service = service; + _httpContextAccessor = httpContextAccessor; + } + } +} diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowTableAuditLogController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowTableAuditLogController.cs new file mode 100644 index 00000000..54dbc163 --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowTableAuditLogController.cs @@ -0,0 +1,33 @@ +/* + *接口编写处... +*如果接口需要做Action的权限验证,请在Action上使用属性 +*如: [ApiActionPermission("Sys_WorkFlowTableAuditLog",Enums.ActionPermissionOptions.Search)] + */ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Http; +using VOL.Entity.DomainModels; +using VOL.Sys.IServices; + +namespace VOL.Sys.Controllers +{ + public partial class Sys_WorkFlowTableAuditLogController + { + private readonly ISys_WorkFlowTableAuditLogService _service;//访问业务代码 + private readonly IHttpContextAccessor _httpContextAccessor; + + [ActivatorUtilitiesConstructor] + public Sys_WorkFlowTableAuditLogController( + ISys_WorkFlowTableAuditLogService service, + IHttpContextAccessor httpContextAccessor + ) + : base(service) + { + _service = service; + _httpContextAccessor = httpContextAccessor; + } + } +} diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowTableController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowTableController.cs new file mode 100644 index 00000000..0b739a5d --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowTableController.cs @@ -0,0 +1,39 @@ +/* + *接口编写处... +*如果接口需要做Action的权限验证,请在Action上使用属性 +*如: [ApiActionPermission("Sys_WorkFlowTable",Enums.ActionPermissionOptions.Search)] + */ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Http; +using VOL.Entity.DomainModels; +using VOL.Sys.IServices; +using VOL.Core.Filters; + +namespace VOL.Sys.Controllers +{ + public partial class Sys_WorkFlowTableController + { + private readonly ISys_WorkFlowTableService _service;//访问业务代码 + private readonly IHttpContextAccessor _httpContextAccessor; + + [ActivatorUtilitiesConstructor] + public Sys_WorkFlowTableController( + ISys_WorkFlowTableService service, + IHttpContextAccessor httpContextAccessor + ) + : base(service) + { + _service = service; + _httpContextAccessor = httpContextAccessor; + } + [ApiActionPermission()] + public override ActionResult GetPageData([FromBody] PageDataOptions loadData) + { + return base.GetPageData(loadData); + } + } +} diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowTableStepController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowTableStepController.cs new file mode 100644 index 00000000..0e38e4d7 --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Partial/Sys_WorkFlowTableStepController.cs @@ -0,0 +1,33 @@ +/* + *接口编写处... +*如果接口需要做Action的权限验证,请在Action上使用属性 +*如: [ApiActionPermission("Sys_WorkFlowTableStep",Enums.ActionPermissionOptions.Search)] + */ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Http; +using VOL.Entity.DomainModels; +using VOL.Sys.IServices; + +namespace VOL.Sys.Controllers +{ + public partial class Sys_WorkFlowTableStepController + { + private readonly ISys_WorkFlowTableStepService _service;//访问业务代码 + private readonly IHttpContextAccessor _httpContextAccessor; + + [ActivatorUtilitiesConstructor] + public Sys_WorkFlowTableStepController( + ISys_WorkFlowTableStepService service, + IHttpContextAccessor httpContextAccessor + ) + : base(service) + { + _service = service; + _httpContextAccessor = httpContextAccessor; + } + } +} diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_DepartmentController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_DepartmentController.cs new file mode 100644 index 00000000..6d9e1912 --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_DepartmentController.cs @@ -0,0 +1,21 @@ +/* + *代码由框架生成,任何更改都可能导致被代码生成器覆盖 + *如果要增加方法请在当前目录下Partial文件夹Sys_DepartmentController编写 + */ +using Microsoft.AspNetCore.Mvc; +using VOL.Core.Controllers.Basic; +using VOL.Entity.AttributeManager; +using VOL.Sys.IServices; +namespace VOL.Sys.Controllers +{ + [Route("api/Sys_Department")] + [PermissionTable(Name = "Sys_Department")] + public partial class Sys_DepartmentController : ApiBaseController + { + public Sys_DepartmentController(ISys_DepartmentService service) + : base(service) + { + } + } +} + diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_DictionaryController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_DictionaryController.cs new file mode 100644 index 00000000..393757cf --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_DictionaryController.cs @@ -0,0 +1,18 @@ +using Microsoft.AspNetCore.Mvc; +using System.Threading.Tasks; +using VOL.Core.Controllers.Basic; +using VOL.Core.Extensions; +using VOL.Core.Filters; +using VOL.Sys.IServices; + +namespace VOL.Sys.Controllers +{ + [Route("api/Sys_Dictionary")] + public partial class Sys_DictionaryController : ApiBaseController + { + public Sys_DictionaryController(ISys_DictionaryService service) + : base("System", "System", "Sys_Dictionary", service) + { + } + } +} diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_DictionaryListController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_DictionaryListController.cs new file mode 100644 index 00000000..badcc267 --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_DictionaryListController.cs @@ -0,0 +1,21 @@ +/* + *代码由框架生成,任何更改都可能导致被代码生成器覆盖 + *如果要增加方法请在当前目录下Partial文件夹Sys_DictionaryListController编写 + */ +using Microsoft.AspNetCore.Mvc; +using VOL.Core.Controllers.Basic; +using VOL.Entity.AttributeManager; +using VOL.Sys.IServices; +namespace VOL.Sys.Controllers +{ + [Route("api/Sys_DictionaryList")] + [PermissionTable(Name = "Sys_DictionaryList")] + public partial class Sys_DictionaryListController : ApiBaseController + { + public Sys_DictionaryListController(ISys_DictionaryListService service) + : base(service) + { + } + } +} + diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_LogController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_LogController.cs new file mode 100644 index 00000000..41f870d3 --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_LogController.cs @@ -0,0 +1,22 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using VOL.Core.Controllers.Basic; +using VOL.Core.DBManager; +using VOL.Entity.DomainModels; +using VOL.Sys.IServices; + +namespace VOL.Sys.Controllers +{ + [Route("api/Sys_Log")] + public partial class Sys_LogController : ApiBaseController + { + public Sys_LogController(ISys_LogService service) + : base("System", "System", "Sys_Log", service) + { + } + } +} diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_MenuController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_MenuController.cs new file mode 100644 index 00000000..02fd310a --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_MenuController.cs @@ -0,0 +1,22 @@ +using Microsoft.AspNetCore.Mvc; +using System.Threading.Tasks; +using VOL.Core.Controllers.Basic; +using VOL.Core.Enums; +using VOL.Core.Filters; +using VOL.Entity.DomainModels; +using VOL.Sys.IServices; + +namespace VOL.Sys.Controllers +{ + [Route("api/menu")] + [ApiController, JWTAuthorize()] + public partial class Sys_MenuController : ApiBaseController + { + private ISys_MenuService _service { get; set; } + public Sys_MenuController(ISys_MenuService service) : + base("System", "System", "Sys_Menu", service) + { + _service = service; + } + } +} diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_QuartzLogController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_QuartzLogController.cs new file mode 100644 index 00000000..7e4d0ef4 --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_QuartzLogController.cs @@ -0,0 +1,21 @@ +/* + *代码由框架生成,任何更改都可能导致被代码生成器覆盖 + *如果要增加方法请在当前目录下Partial文件夹Sys_QuartzLogController编写 + */ +using Microsoft.AspNetCore.Mvc; +using VOL.Core.Controllers.Basic; +using VOL.Entity.AttributeManager; +using VOL.Sys.IServices; +namespace VOL.Sys.Controllers +{ + [Route("api/Sys_QuartzLog")] + [PermissionTable(Name = "Sys_QuartzLog")] + public partial class Sys_QuartzLogController : ApiBaseController + { + public Sys_QuartzLogController(ISys_QuartzLogService service) + : base(service) + { + } + } +} + diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_QuartzOptionsController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_QuartzOptionsController.cs new file mode 100644 index 00000000..b9514a5d --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_QuartzOptionsController.cs @@ -0,0 +1,21 @@ +/* + *代码由框架生成,任何更改都可能导致被代码生成器覆盖 + *如果要增加方法请在当前目录下Partial文件夹Sys_QuartzOptionsController编写 + */ +using Microsoft.AspNetCore.Mvc; +using VOL.Core.Controllers.Basic; +using VOL.Entity.AttributeManager; +using VOL.Sys.IServices; +namespace VOL.Sys.Controllers +{ + [Route("api/Sys_QuartzOptions")] + [PermissionTable(Name = "Sys_QuartzOptions")] + public partial class Sys_QuartzOptionsController : ApiBaseController + { + public Sys_QuartzOptionsController(ISys_QuartzOptionsService service) + : base(service) + { + } + } +} + diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_RoleController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_RoleController.cs new file mode 100644 index 00000000..e6327255 --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_RoleController.cs @@ -0,0 +1,26 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System.Collections.Generic; +using System.Threading.Tasks; +using VOL.Core.Controllers.Basic; +using VOL.Core.Enums; +using VOL.Core.Filters; +using VOL.Entity.AttributeManager; +using VOL.Entity.DomainModels; +using VOL.Sys.IServices; + +namespace VOL.Sys.Controllers +{ + [Route("api/Sys_Role")] + [PermissionTable(Name = "Sys_Role")] + public partial class Sys_RoleController : ApiBaseController + { + public Sys_RoleController(ISys_RoleService service) + : base("System", "System", "Sys_Role", service) + { + + } + } +} + + diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_UserController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_UserController.cs new file mode 100644 index 00000000..a3426dc4 --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_UserController.cs @@ -0,0 +1,21 @@ +/* + *代码由框架生成,任何更改都可能导致被代码生成器覆盖 + *如果要增加方法请在当前目录下Partial文件夹Sys_UserController编写 + */ +using Microsoft.AspNetCore.Mvc; +using VOL.Core.Controllers.Basic; +using VOL.Entity.AttributeManager; +using VOL.Sys.IServices; +namespace VOL.Sys.Controllers +{ + [Route("api/Sys_User")] + [PermissionTable(Name = "Sys_User")] + public partial class Sys_UserController : ApiBaseController + { + public Sys_UserController(ISys_UserService service) + : base(service) + { + } + } +} + diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowController.cs new file mode 100644 index 00000000..74abd0ad --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowController.cs @@ -0,0 +1,21 @@ +/* + *代码由框架生成,任何更改都可能导致被代码生成器覆盖 + *如果要增加方法请在当前目录下Partial文件夹Sys_WorkFlowController编写 + */ +using Microsoft.AspNetCore.Mvc; +using VOL.Core.Controllers.Basic; +using VOL.Entity.AttributeManager; +using VOL.Sys.IServices; +namespace VOL.Sys.Controllers +{ + [Route("api/Sys_WorkFlow")] + [PermissionTable(Name = "Sys_WorkFlow")] + public partial class Sys_WorkFlowController : ApiBaseController + { + public Sys_WorkFlowController(ISys_WorkFlowService service) + : base(service) + { + } + } +} + diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowStepController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowStepController.cs new file mode 100644 index 00000000..c5dfff8d --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowStepController.cs @@ -0,0 +1,21 @@ +/* + *代码由框架生成,任何更改都可能导致被代码生成器覆盖 + *如果要增加方法请在当前目录下Partial文件夹Sys_WorkFlowStepController编写 + */ +using Microsoft.AspNetCore.Mvc; +using VOL.Core.Controllers.Basic; +using VOL.Entity.AttributeManager; +using VOL.Sys.IServices; +namespace VOL.Sys.Controllers +{ + [Route("api/Sys_WorkFlowStep")] + [PermissionTable(Name = "Sys_WorkFlowStep")] + public partial class Sys_WorkFlowStepController : ApiBaseController + { + public Sys_WorkFlowStepController(ISys_WorkFlowStepService service) + : base(service) + { + } + } +} + diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowTableAuditLogController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowTableAuditLogController.cs new file mode 100644 index 00000000..89a52914 --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowTableAuditLogController.cs @@ -0,0 +1,21 @@ +/* + *代码由框架生成,任何更改都可能导致被代码生成器覆盖 + *如果要增加方法请在当前目录下Partial文件夹Sys_WorkFlowTableAuditLogController编写 + */ +using Microsoft.AspNetCore.Mvc; +using VOL.Core.Controllers.Basic; +using VOL.Entity.AttributeManager; +using VOL.Sys.IServices; +namespace VOL.Sys.Controllers +{ + [Route("api/Sys_WorkFlowTableAuditLog")] + [PermissionTable(Name = "Sys_WorkFlowTableAuditLog")] + public partial class Sys_WorkFlowTableAuditLogController : ApiBaseController + { + public Sys_WorkFlowTableAuditLogController(ISys_WorkFlowTableAuditLogService service) + : base(service) + { + } + } +} + diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowTableController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowTableController.cs new file mode 100644 index 00000000..122521f0 --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowTableController.cs @@ -0,0 +1,21 @@ +/* + *代码由框架生成,任何更改都可能导致被代码生成器覆盖 + *如果要增加方法请在当前目录下Partial文件夹Sys_WorkFlowTableController编写 + */ +using Microsoft.AspNetCore.Mvc; +using VOL.Core.Controllers.Basic; +using VOL.Entity.AttributeManager; +using VOL.Sys.IServices; +namespace VOL.Sys.Controllers +{ + [Route("api/Sys_WorkFlowTable")] + [PermissionTable(Name = "Sys_WorkFlowTable")] + public partial class Sys_WorkFlowTableController : ApiBaseController + { + public Sys_WorkFlowTableController(ISys_WorkFlowTableService service) + : base(service) + { + } + } +} + diff --git a/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowTableStepController.cs b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowTableStepController.cs new file mode 100644 index 00000000..1a0a0acf --- /dev/null +++ b/vol.api.sqlsugar/VOL.WebApi/Controllers/Sys/Sys_WorkFlowTableStepController.cs @@ -0,0 +1,21 @@ +/* + *代码由框架生成,任何更改都可能导致被代码生成器覆盖 + *如果要增加方法请在当前目录下Partial文件夹Sys_WorkFlowTableStepController编写 + */ +using Microsoft.AspNetCore.Mvc; +using VOL.Core.Controllers.Basic; +using VOL.Entity.AttributeManager; +using VOL.Sys.IServices; +namespace VOL.Sys.Controllers +{ + [Route("api/Sys_WorkFlowTableStep")] + [PermissionTable(Name = "Sys_WorkFlowTableStep")] + public partial class Sys_WorkFlowTableStepController : ApiBaseController + { + public Sys_WorkFlowTableStepController(ISys_WorkFlowTableStepService service) + : base(service) + { + } + } +} +