using Admin.NET.Core.Service; using Admin.NET.Application.Entity; using Microsoft.AspNetCore.Http; using System.Data; using System.Web; using System.Text; using Admin.NET.Application.Service.WmsSystem.WmsSysPdaMenu.Dto; using DocumentFormat.OpenXml; namespace Admin.NET.Application; /// /// Pda菜单管理服务 /// [ApiDescriptionSettings(ApplicationConst.WmsSystemGroupName, Order = 100)] public class WmsSysPdaMenuService : IDynamicApiController, ITransient { private readonly SqlSugarRepository _rep; private readonly SqlSugarRepository _wmsSysPdaRoleMenuRep; private readonly SqlSugarRepository _sysUserRep; private readonly UserManager _userManager; private readonly SysUserRoleService _sysUserRoleService; public WmsSysPdaMenuService(SqlSugarRepository rep, SqlSugarRepository wmsSysPdaRoleMenuRep, SqlSugarRepository sysUserRep, UserManager userManager, SysUserRoleService sysUserRoleService) { _rep = rep; _wmsSysPdaRoleMenuRep = wmsSysPdaRoleMenuRep; _sysUserRep = sysUserRep; _userManager = userManager; _sysUserRoleService = sysUserRoleService; } /// /// 分页查询Pda菜单管理 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Page")] [Description("WmsSysPdaMenu/Page")] public async Task> Page(WmsSysPdaMenuInput input) { var query = CommonPageFilter(input); return await query.OrderBuilder(input, "", "Id").ToPagedListAsync(input.Page, input.PageSize); } /// /// 不分页查询Pda菜单管理 /// /// /// [HttpGet] [ApiDescriptionSettings(Name = "List")] [Description("WmsSysPdaMenu/List")] public async Task> List([FromQuery] WmsSysPdaMenuInput input) { var query = CommonPageFilter(input); return await query.OrderBuilder(input, "", "Id").Select().ToListAsync(); } /// /// 增加Pda菜单管理 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Add")] [Description("WmsSysPdaMenu/Add")] public async Task Add(AddWmsSysPdaMenuInput input) { var entity = input.Adapt(); //重复性验证 await CheckExist(entity); await _rep.InsertAsync(entity); return entity.Id; } /// /// 删除Pda菜单管理 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Delete")] [Description("WmsSysPdaMenu/Delete")] public async Task Delete(DeleteWmsSysPdaMenuInput input) { var entity = await _rep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002); //await _rep.FakeDeleteAsync(entity); //假删除 await _rep.DeleteAsync(entity); //真删除 } /// /// 更新Pda菜单管理 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Update")] [Description("WmsSysPdaMenu/Update")] public async Task Update(UpdateWmsSysPdaMenuInput input) { var entity = input.Adapt(); //重复性验证 await CheckExist(entity, true); await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); } /// /// 获取Pda菜单管理 /// /// /// [HttpGet] [ApiDescriptionSettings(Name = "Detail")] [Description("WmsSysPdaMenu/Detail")] public async Task Detail([FromQuery] QueryByIdWmsSysPdaMenuInput input) { return await _rep.GetFirstAsync(u => u.Id == input.Id); } /// /// 角色授权pda菜单 /// /// [HttpPost] [ApiDescriptionSettings(Name = "GrantPdaMenu")] [Description("WmsSysPdaMenu/GrantPdaMenu")] public async Task GrantPdaMenu(GrantRolePdaMenuInput input) { var roleMenus = await _wmsSysPdaRoleMenuRep.AsQueryable().Where(u => u.RoleId == input.Id).ToListAsync(); await _rep.FakeDeleteAsync(roleMenus); foreach (var item in input.GrantMenuIdList) { await _wmsSysPdaRoleMenuRep.InsertAsync(new WmsSysPdaRoleMenu { RoleId = input.Id, PdaMenuId = item }); } } /// /// pda菜单列表(树表) /// /// /// [HttpGet] [ApiDescriptionSettings(Name = "GetMenuListPda")] [Description("WmsSysPdaMenu/GetMenuListPda")] public async Task> GetMenuListPda([FromQuery] QueryRoleInput input) { var db_wmsPdaPowerList = await _rep.AsQueryable().Where(u => 1 == 1 && u.IsDelete == false).ToListAsync(); var wmsPdaPowerList = db_wmsPdaPowerList.Adapt>(); var meunIdList = await _wmsSysPdaRoleMenuRep.AsQueryable().Where(n => input.Id == n.RoleId).ToListAsync(); foreach (var item in meunIdList) { var model = wmsPdaPowerList.Where(p => p.Id == item.PdaMenuId).FirstOrDefault(); if (model != null) { wmsPdaPowerList.Where(p => p.Id == item.PdaMenuId).FirstOrDefault().IsCheck = true; } } //分组 var groups = wmsPdaPowerList.GroupBy(x => x.MenuType); var listData = new List(); foreach (var item in groups) { listData.Add(new WmsPdaRoleMenuListOutput() { Name = item.Key.ToString(), WmsPdaRoleMenuOutput = wmsPdaPowerList.Where(n => n.MenuType == item.Key).ToList() }); } return listData; } /// /// 获取当前PDA登录的按钮权限列表 /// /// [HttpGet] [ApiDescriptionSettings(Name = "GetPdaLoginUser")] [Description("WmsSysPdaMenu/GetPdaLoginUser")] public async Task> GetPdaLoginUserAsync() { var user = await _sysUserRep.GetFirstAsync(u => u.Id == _userManager.UserId); if (user == null) throw Oops.Oh(ErrorCodeEnum.D1011); var userId = user.Id; var roleList = await _sysUserRoleService.GetUserRoleIdList(_userManager.UserId); var meunIdList = _wmsSysPdaRoleMenuRep.AsQueryable().Where(n => roleList.Contains(n.RoleId)).Select(n => n.PdaMenuId).ToList(); List wmspdaPowerList; if (user.AccountType == AccountTypeEnum.SuperAdmin) { var newWmspdaPowerList = await _rep.GetListAsync(n => n.IsDelete == false); wmspdaPowerList = newWmspdaPowerList.Adapt>(); } else { var edoPdaPowerOutputs = _rep.AsQueryable().Where(n => meunIdList.Contains(n.Id) && n.IsDelete == false).ToList().Adapt>(); wmspdaPowerList = edoPdaPowerOutputs; } //去重 wmspdaPowerList = wmspdaPowerList.Distinct().ToList(); var temp_wmsPdaPowerList = wmspdaPowerList.Adapt>(); //分组 var groups = temp_wmsPdaPowerList.GroupBy(x => x.MenuType); var listData = new List(); foreach (var item in groups) { listData.Add(new WmsPdaRoleMenuListOutput() { Name = item.Key.ToString(), WmsPdaRoleMenuOutput = temp_wmsPdaPowerList.Where(n => n.MenuType == item.Key).ToList() }); } return listData; } #region 私有方法 /// /// 公共查询Pda菜单管理条件 /// /// /// private ISugarQueryable CommonPageFilter(WmsSysPdaMenuInput input) { var query = _rep.AsQueryable() .WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u => u.Name.Contains(input.SearchKey.Trim()) || u.Code.Contains(input.SearchKey.Trim()) || u.Icon.Contains(input.SearchKey.Trim()) || u.Color.Contains(input.SearchKey.Trim()) || u.CreateUserName.Contains(input.SearchKey.Trim()) || u.UpdateUserName.Contains(input.SearchKey.Trim()) ) .WhereIF(!string.IsNullOrWhiteSpace(input.Name), u => u.Name.Contains(input.Name.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.Code), u => u.Code.Contains(input.Code.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.Icon), u => u.Icon.Contains(input.Icon.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.Color), u => u.Color.Contains(input.Color.Trim())) .WhereIF(input.MenuType.HasValue, u => u.MenuType == input.MenuType) .Select(); return query; } /// /// 重复性验证 /// /// 验证对象 /// 是否是编辑 /// private async Task CheckExist(WmsSysPdaMenu input, bool isEdit = false) { //没有配置组合校验,不需要验重 bool isExistForSingle_Name = false; if (!isEdit)//新增 { //数据是否单独存在重复-名称 isExistForSingle_Name = await _rep.AsQueryable().AnyAsync(u => u.Name.Equals(input.Name)); } else//编辑 { //当前编辑数据以外是否单独存在重复-名称 isExistForSingle_Name = await _rep.AsQueryable().AnyAsync(u => u.Id != input.Id && u.Name.Equals(input.Name)); } if (isExistForSingle_Name) throw Oops.Oh($"验证失败,名称[" + input.Name + "]已存在"); bool isExistForSingle_Code = false; if (!isEdit)//新增 { //数据是否单独存在重复-编码 isExistForSingle_Code = await _rep.AsQueryable().AnyAsync(u => u.Code.Equals(input.Code)); } else//编辑 { //当前编辑数据以外是否单独存在重复-编码 isExistForSingle_Code = await _rep.AsQueryable().AnyAsync(u => u.Id != input.Id && u.Code.Equals(input.Code)); } if (isExistForSingle_Code) throw Oops.Oh($"验证失败,编码[" + input.Code + "]已存在"); } /// /// 根据组合校验和单独校验验证数据是否已存在-导入时验证 /// /// /// private async Task CheckExisitForImport(List inputs) { if (inputs?.Count <= 0) { throw Oops.Oh($"导入数据不能为空"); } //根据组合校验验证表格中中是否已存在相同数据 //根据单独校验验证表格中中是否已存在相同数据 var existExcelItemForSingle_Name = inputs.GroupBy(g => new { g.Name }).Where(g => g.Count() > 1).ToList(); if (existExcelItemForSingle_Name != null && existExcelItemForSingle_Name.Count > 0) { var item = existExcelItemForSingle_Name.First().ToList().First(); throw Oops.Oh($"验证失败,导入的表格中,名称[" + item.Name + "]已重复存在"); } var existExcelItemForSingle_Code = inputs.GroupBy(g => new { g.Code }).Where(g => g.Count() > 1).ToList(); if (existExcelItemForSingle_Code != null && existExcelItemForSingle_Code.Count > 0) { var item = existExcelItemForSingle_Code.First().ToList().First(); throw Oops.Oh($"验证失败,导入的表格中,编码[" + item.Code + "]已重复存在"); } //根据单独校验验证数据库中是否已存在相同数据 var existDBItemList = await _rep.GetListAsync(w => inputs.Select(s => s.Name).ToList().Contains(w.Name) || inputs.Select(s => s.Code).ToList().Contains(w.Code) ); var db_ForSingle_Name = existDBItemList.FirstOrDefault(g => inputs.Select(s => s.Name).ToList().Contains(g.Name)); if (db_ForSingle_Name != null) throw Oops.Oh($"验证失败,系统中,名称[" + db_ForSingle_Name.Name + "]已重复存在"); var db_ForSingle_Code = existDBItemList.FirstOrDefault(g => inputs.Select(s => s.Code).ToList().Contains(g.Code)); if (db_ForSingle_Code != null) throw Oops.Oh($"验证失败,系统中,编码[" + db_ForSingle_Code.Code + "]已重复存在"); } #endregion }