using Furion.DependencyInjection; using Furion.DistributedIDGenerator; using Furion.DynamicApiController; using Microsoft.AspNetCore.Mvc; using Nirvana.Common; using Nirvana.Common.ApiBase; using SqlSugar; using System; using System.Linq; using System.Collections.Generic; using System.Threading.Tasks; using Waste.Domain; namespace Waste.Application { /// /// 系统管理 /// public class SystemService : ISystemService, IDynamicApiController, ITransient { private readonly ISqlSugarRepository repository; private readonly SqlSugarClient dbClient; public SystemService(ISqlSugarRepository sqlSugarRepository) { repository = sqlSugarRepository; dbClient = repository.Context; } /// /// 删除菜单 /// /// /// [HttpGet] [QueryParameters] public async Task DeleteMenuAsync(Guid id) { if (!await dbClient.Queryable().AnyAsync(x => x.Id == id)) { return new ResultInfo() { code = ResultState.FAIL, message = "此菜单未找到!" }; } await dbClient.Deleteable().Where(x => x.Id == id).ExecuteCommandAsync(); await dbClient.Deleteable().Where(x => x.ParentId == id).ExecuteCommandAsync(); return new ResultInfo() { code = ResultState.SUCCESS, message = "删除成功!" }; } /// /// 获取菜单详情 /// /// /// public async Task MenuDetailAsync(Guid id) { return await dbClient.Queryable().FirstAsync(x => x.Id == id); } /// /// 获取菜单列表 /// /// /// [HttpPost] public async Task> GetMenuListAsync(Guid roleid) { var data = new List(); var tempquery = dbClient.Queryable( (m, ra) => new object[] { JoinType.Left,m.Id==ra.MenuId }) .Where((m, ra) => ra.RoleId == roleid && m.Status == 1) ; data = await tempquery .OrderBy((m,ra)=>m.SortCode,OrderByType.Asc) .ToListAsync(); return data; } /// /// 获取菜单列表 /// /// [HttpPost] public async Task> GetMenuListAsync() { var modulequery = dbClient.Queryable(); return await modulequery.OrderBy(x => x.SortCode, OrderByType.Asc).ToListAsync(); } /// /// 菜单编辑 /// /// /// [HttpPost] public async Task SubmitFormMenuAsync(W_Menu model) { if (model.Id == Guid.Empty) { model.CreateTime = DateTime.Now; model.Status = 1; model.Id = IDGen.NextID(); await dbClient.Insertable(model).ExecuteCommandAsync(); return new ResultInfo() { code = ResultState.SUCCESS, message = "添加成功!" }; } else { await dbClient.Updateable().SetColumns(x => new W_Menu { ParentId = model.ParentId, Icon = model.Icon, SortCode = model.SortCode, UrlAddress = model.UrlAddress, Name = model.Name }) .Where(x => x.Id == model.Id) .ExecuteCommandAsync(); return new ResultInfo() { code = ResultState.SUCCESS, message = "修改成功!" }; } } /// /// 获取菜单树形结构 /// /// [HttpPost] public async Task GetMenuTreeJson(QueryParams param) { //获取菜单json树列表 var tempquery = dbClient.Queryable(); if (param != null && param.queryParam != null && param.queryParam.Count > 0) { List conModels = new List(); param.queryParam.ForEach(x => { if (!string.IsNullOrEmpty(x.Value)) { conModels.Add(new ConditionalModel() { FieldName = x.Name, ConditionalType = (ConditionalType)x.Type, FieldValue = x.Value.Trim() }); } }); if (conModels.Count > 0) { tempquery = tempquery.Where(conModels); } } var data = await tempquery.OrderBy(x => x.SortCode, OrderByType.Asc).ToListAsync(); var treeList = new List(); foreach (var item in data) { TreeSelectModel treeModel = new TreeSelectModel(); treeModel.id = item.Id + ""; treeModel.text = item.Name; treeModel.parentId = item.ParentId + ""; treeModel.data = item; treeList.Add(treeModel); } var result = treeList.TreeSelectGuidJson(); return result; } /// /// 获取城市列表 /// /// 国标码 /// 级别 /// [QueryParameters] public async Task> GetCityListAsync(string code = "", int level = 1) { var tempquery = repository.Change().Context.Queryable(); if (!string.IsNullOrEmpty(code) && code != "0") { var data = await dbClient.Queryable().FirstAsync(x => x.code == code); if (data != null) { tempquery = tempquery.Where(x => x.pid == data.Id); } } else { tempquery = tempquery.Where(x => x.level == 1); } return await tempquery.ToListAsync(); } /// /// 获取城市列表 /// /// public async Task> GetListAsync() { var tempquery = repository.Change().Context.Queryable().Where(x => x.level == 1); var query = await tempquery .Select(x => new CityListModel { Id = x.Id, name = x.name, level = x.level, code = x.code }) .Mapper((it, cache) => { var allcity = cache.Get(list => { var ids = list.Select(e => e.Id).ToList(); return repository.Change().Context.Queryable().Where(e => ids.Contains(e.pid)).ToList(); }); it.children = allcity.Where(e => e.pid == it.Id).ToList(); }).ToListAsync(); return query; } } }