using Infrastructure; using Infrastructure.Helpers; using Microsoft.Extensions.Configuration; using OpenAuth.App.BaseApp.Base; using OpenAuth.App.Interface; using OpenAuth.App.Request; using OpenAuth.Repository; using OpenAuth.Repository.Domain; using SqlSugar; namespace OpenAuth.App { public class WFSchemeInfoApp : SqlSugarBaseApp { ISqlSugarClient client; private IConfiguration configuration; public WFSchemeInfoApp( ISugarUnitOfWork unitWork, ISimpleClient repository, IAuth auth, IConfiguration configuration) : base(unitWork, repository, auth) { client = base.Repository.AsSugarClient(); this.configuration = configuration; } public async Task>> LoadPage(PageReq pageReq, string category, string ids) { RefAsync totalCount = 0; var idList = new string[0]; if (!string.IsNullOrEmpty(ids)) { idList = ids.Split(','); } var list = await client.Queryable() .LeftJoin((info, s) => info.SchemeId == s.Id) .WhereIF(!string.IsNullOrEmpty(pageReq.key), info => info.Name.Contains(pageReq.key) || info.Code.Contains(pageReq.key)) .WhereIF(!string.IsNullOrEmpty(category), info => info.Category == category) .WhereIF(!string.IsNullOrEmpty(ids), info => idList.Contains(info.Id)) .OrderByDescending((info, s) => s.CreateDate) .Select((info, s) => new WFSchemeInfo() { AuthType = info.AuthType, Id = info.Id, Category = info.Category, Code = info.Code, Color = info.Color, Description = info.Description, EnabledMark = info.EnabledMark, Icon = info.Icon, IsInApp = info.IsInApp, Mark = info.Mark, Name = info.Name, SchemeId = info.SchemeId, Type = s.Type, CreateDate = s.CreateDate, CreateUserId = s.CreateUserId, CreateUserName = s.CreateUserName }).ToPageListAsync(pageReq.page, pageReq.limit, totalCount); return new PageInfo> { Items = list, Total = totalCount }; } public async Task> Load() { return await base.Repository.GetListAsync(a => a.EnabledMark == 1); } public async Task> GetInfoList() { var currentUser = _auth.GetCurrentUser(); var userId = currentUser.User.Id.ToString(); var postIds = currentUser.Positions.Select(a => a.Id.ToString()).ToList(); var roleIds = currentUser.Roles.Select(a => a.Id.ToString()).ToList(); List ids = new List(); if (!string.IsNullOrEmpty(userId)) { ids.Add(userId); } ids.AddRange(postIds); ids.AddRange(roleIds); var list = await client.Queryable().Where(t => ids.ToArray().Contains(t.ObjId)).ToListAsync(); List schemeinfoIds = new List(); foreach (var item in list) { schemeinfoIds.Add(item.SchemeInfoId); } return await client.Queryable() .LeftJoin((t, s) => t.SchemeId == s.Id) .Where((t, s) => t.EnabledMark == 1 && t.Mark == 1 && (schemeinfoIds.ToArray().Contains(t.Id) || t.AuthType == 1) && s.Type == 1).ToListAsync(); } public async Task GetInfoEntityByCode(string code) { return await base.Repository.GetFirstAsync(t => t.Code == code); } public async Task GetSchemeEntity(string keyValue) { return await client.Queryable().FirstAsync(a => a.Id == keyValue); } public async Task> GetAuthList(string schemeInfoId) { return await client.Queryable().Where(t => t.SchemeInfoId == schemeInfoId).ToListAsync(); } /// /// 获取模板的实体 /// /// 主键 /// public async Task GetScheme(string keyValue) { return await client.Queryable().FirstAsync(a => a.Id == keyValue); } public async Task> UpdateScheme(string schemeInfoId, string schemeId) { WFScheme nWFSchemeEntity = await GetScheme(schemeId); var flag = false; if (nWFSchemeEntity.Type != 1) { flag = await base.Repository .UpdateSetColumnsTrueAsync(a => new WFSchemeInfo() { SchemeId = schemeId, EnabledMark = 0 }, a => a.Id == schemeInfoId); } else { flag = await base.Repository .UpdateSetColumnsTrueAsync(a => new WFSchemeInfo() { SchemeId = schemeId }, a => a.Id == schemeInfoId); } return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } /// /// /// /// 主键吧? /// /// /// /// public async Task> SaveEntity(string keyValue, WFSchemeInfo infoEntity, WFScheme schemeEntity, IEnumerable authList) { // 如果存在schemeEntity content 解码 if (!string.IsNullOrEmpty(schemeEntity.Content)) { var code = configuration.GetSection("AppSetting:ASECode").Value; schemeEntity.Content = AESHelper.AesDecrypt(schemeEntity.Content, code); //"12345678901234567890123456789012" } if (!string.IsNullOrEmpty(keyValue)) { WFScheme oldNWFSchemeEntity = await GetScheme(infoEntity.SchemeId); if (oldNWFSchemeEntity.Content == schemeEntity.Content && oldNWFSchemeEntity.Type == schemeEntity.Type) { schemeEntity = null; } } using (var uwo = UnitWork.CreateContext()) { if (string.IsNullOrEmpty(keyValue)) { infoEntity.Id = Guid.NewGuid().ToString(); infoEntity.EnabledMark = 1; } else { infoEntity.Id = keyValue; } #region 模板信息 if (schemeEntity != null) { schemeEntity.SchemeInfoId = infoEntity.Id; schemeEntity.Id = Guid.NewGuid().ToString(); schemeEntity.CreateDate = DateTime.Now; schemeEntity.CreateUserId = _auth.GetUserId(); schemeEntity.CreateUserName = _auth.GetUserName(); await uwo.WFScheme.InsertAsync(schemeEntity); infoEntity.SchemeId = schemeEntity.Id; } #endregion #region 模板基础信息 if (!string.IsNullOrEmpty(keyValue)) { await uwo.WFSchemeInfo.UpdateAsync(infoEntity); } else { await uwo.WFSchemeInfo.InsertAsync(infoEntity); } #endregion #region 流程模板权限信息 string schemeInfoId = infoEntity.Id; await uwo.WFSchemeAuth.DeleteAsync(t => t.SchemeInfoId.Equals(schemeInfoId)); foreach (var item in authList) { item.Id = Guid.NewGuid().ToString(); item.SchemeInfoId = schemeInfoId; await uwo.WFSchemeAuth.InsertAsync(item); } #endregion var flag = uwo.Commit(); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } } /// /// 更新自定义表单模板状态 /// /// 模板信息主键 /// 状态1启用0禁用 public async Task> UpdateState(string schemeInfoId, int state) { var flag = await base.Repository.UpdateSetColumnsTrueAsync(a => new WFSchemeInfo() { EnabledMark = state }, a => a.Id == schemeInfoId); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } public async Task> DeleteEntity(string keyValue) { using (var uow = base.UnitWork.CreateContext()) { await uow.WFSchemeInfo.DeleteAsync(t => t.Id.Equals(keyValue)); await uow.WFSchemeAuth.DeleteAsync(t => t.SchemeInfoId.Equals(keyValue)); await uow.WFScheme.DeleteAsync(t => t.SchemeInfoId.Equals(keyValue)); var falg = uow.Commit(); return new Response { Result = falg, Message = (falg == true ? "success" : "error") }; } } public WFSchemeInfo SelectBySchemeCode(string schemeCode) { return Repository.GetFirst(a => a.Code == schemeCode); } } }