using AutoMapper; using System; using System.Collections.Generic; using System.Security.Policy; using System.Text; using System.Threading.Tasks; using Model.ModelDto.SysDto; using WMS.Entity.SysEntity; using WMS.IBLL.ISysServer; using WMS.IDAL.ISysInterface; using Model.ModelVm.SysVm; using System.Linq; using SqlSugar; using WMS.DAL; using WMS.Entity.Context; namespace WMS.BLL.SysServer { /// <summary> /// èœå•æœåŠ¡å®žè·µ /// </summary> public class MenuServer : DbHelper<SysFunctionMenu>,IMenuServer { private static readonly SqlSugarScope Db = DataContext.Db; /// <summary> /// ä¾èµ–注入 /// </summary> public IMenuRepository _menu { get; set; } readonly IMapper _mapper; /// <summary> /// æž„é€ å‡½æ•° /// </summary> /// <param name="menu">èœå•仓储</param> /// <param name="mapper">automapper</param> public MenuServer(IMenuRepository menu, IMapper mapper) : base(Db) { _menu = menu; _mapper = mapper; } /// <summary> /// 获å–èœå•ä¿¡æ¯åˆ—表 /// </summary> /// <param name="menuDto">èœå•Dto</param> /// <returns></returns> public List<FunctionMenuVm> GetMenuList(string MenuName, string pMenuNo, string MenuNo, string level = "") { string str = "select menu1.Id,menu1.MenuNo,menu1.MenuName,menu2.MenuName ParentName,menu1.ParentNo,menu1.Ord,menu1.Url,menu1.level,menu1.IsEnable,menu1.Demo,menu1.IsDel,menu1.CreateTime,menu1.CreateUser,menu1.UpdateTime,menu1.UpdateUser,user1.RealName CreateUserName from SysFunctionMenu menu1 left join sysfunctionmenu menu2 on menu1.parentNo = menu2.MenuNo join SysUserInfor user1 on menu1.CreateUser = user1.id where menu1.IsDel = '0' and menu1.IsEnable = '0' "; //判æ–页é¢èœå• if (!string.IsNullOrEmpty(MenuNo)) { //判æ–层级是å¦ä¸ºç©º if (!string.IsNullOrEmpty(level)) { //判æ–层级 if (level == "1") { //é¡µé¢ str += $" and menu1.MenuNo = '{MenuNo}'"; } if (level == "2") { //按钮 str += $" and menu1.ParentNo = '{MenuNo}'"; } if (level == "0") { //æ¨¡å— str += $" and menu1.ParentNo = '{MenuNo}'"; } } else { if (!string.IsNullOrEmpty(MenuName)) { str += $" and menu1.ParentNo = '{MenuNo}'"; } else { str += $" and menu1.ParentNo = '{MenuNo}' or menu1.MenuNo = '{MenuNo}'"; } } } //åˆ¤æ–æ¨¡å—èœå• if (!string.IsNullOrEmpty(pMenuNo)) { //判æ–层级是å¦ä¸ºç©º if (!string.IsNullOrEmpty(level)) { //判æ–层级 if (level == "1") { //é¡µé¢ str += $" and menu1.ParentNo = '{pMenuNo}'"; } if (level == "2") { //按钮 str += $" and menu1.ParentNo in (select MenuNo from SysFunctionMenu where ParentNo = '{pMenuNo}')"; } if (level == "0") { //æ¨¡å— str += $" and menu1.MenuNo= '{pMenuNo}'"; } } else { //判æ–èœå•å称是å¦ä¸ºç©º if (!string.IsNullOrEmpty(MenuName) && string.IsNullOrEmpty(MenuNo)) { str += $" and menu1.ParentNo in (select MenuNo from SysFunctionMenu where ParentNo = '{pMenuNo}')"; } else if (!string.IsNullOrEmpty(MenuNo)) { str += $" or menu1.MenuNo = '{MenuNo}'"; } else { str += $" and ( menu1.ParentNo = '{pMenuNo}' or menu1.MenuNo = '{pMenuNo}' or menu1.ParentNo in (select MenuNo from SysFunctionmenu where ParentNo = {pMenuNo}) )"; } } } //判æ–èœå•åç§°ä¸Žç¼–å·æ˜¯å¦ä¸ºç©º if (!string.IsNullOrEmpty(MenuName)) { str += $" and menu1.MenuName like '%{MenuName}%'"; //判æ–父级èœå•是å¦ä¸ºç©º if (!string.IsNullOrEmpty(pMenuNo) && string.IsNullOrEmpty(MenuNo)) { str += $" or menu1.MenuNo in (select MenuNo from SysFunctionMenu where ( ParentNo = '{pMenuNo}' or MenuNo='{pMenuNo}' ) and MenuName like '%{MenuName}%')"; } } //判æ–èœå•层级 if (!string.IsNullOrEmpty(level)) { str += $" and menu1.Level = '{level}'"; } str += " order by menu1.MenuNo,menu1.Ord"; List<FunctionMenuVm> menulist = _menu.GetMenuList(str); return menulist; } /// <summary> /// æ ¹æ®å±‚级获å–èœå•列表 /// </summary> /// <param name="level"></param> /// <param name="UserId"></param> /// <returns></returns> public List<FunctionMenuVm> GetMenuListForRight(string level, string UserId) { var userEntry = Db.Ado.SqlQuery<SysUserInfor>($"select * from SysUserInfor where Id ={UserId}").FirstOrDefault(); string sqlStr = "select * from SysFunctionMenu where IsDel='0' "; if (!string.IsNullOrEmpty(level)) { sqlStr += $" and level='{level}' "; } //åˆ†é…æƒé™åªèƒ½åˆ†é…当å‰ç™»å½•用户有的æƒé™ if (userEntry != null && userEntry.UserName.ToUpper() != "ADMIN") { sqlStr += $"and MenuNo in (select MenuNo from SysRoleRight where RoleNo='{userEntry.RoleNo}') "; } List<FunctionMenuVm> menulist = Db.Ado.SqlQuery<FunctionMenuVm>(sqlStr); return menulist; } /// <summary> /// èŽ·å–æ¨¡å—èœå• /// </summary> /// <returns></returns> public List<SysFunctionMenu> GetParentMenuList() { List<SysFunctionMenu> menulist = _menu.GetParentMenuList(); return menulist; } /// <summary> /// æ ¹æ®id获å–èœå•ä¿¡æ¯åˆ—表 /// </summary> /// <param name="menuid">èœå•id</param> /// <returns></returns> public SysFunctionMenu GetMenuListById(int menuid) { SysFunctionMenu menu = _menu.GetMenuListById(menuid); return menu; } /// <summary> /// æ ¹æ®ç¼–å·èŽ·å–èœå•ä¿¡æ¯åˆ—表 /// </summary> /// <param name="menuno">èœå•ç¼–å·</param> /// <returns></returns> public int GetMenuListByNo(string menuno) { string str = $"select * from SysFunctionMenu where MenuNo = '{menuno}'"; List<SysFunctionMenu> menulist = _menu.GetMenuListByNo(str); return menulist.Count; } /// <summary> /// 新增èœå•ä¿¡æ¯ /// </summary> /// <param name="menudto">èœå•DTO模型</param> /// <param name="userId">当剿“作用户id</param> /// <returns></returns> /// <exception cref="Exception">æ•获异常</exception> public async Task<int> InsertMenu(FunctionMenuDto menudto) { //æ•获异常 try { //æ¨¡åž‹æ˜ å°„ SysFunctionMenu menu = _mapper.Map<SysFunctionMenu>(menudto); //是å¦å¯ç”¨ menu.IsEnable = "0"; int i = 0; int count = GetMenuListByNo(menu.MenuNo); //判æ–èœå•å·æ˜¯å¦å”¯ä¸€ if (count > 0) { i = 3; } else if (count == 0) { //验è¯å±‚级 0:模å—ã€1:页é¢ã€2:按钮 switch (menu.Level) { case "0": if (!string.IsNullOrWhiteSpace(menu.ParentNo)) { throw new Exception("模å—类型为模å—,父级èœå•应为空"); } break; case "1": if (string.IsNullOrWhiteSpace(menu.ParentNo)) { throw new Exception("模å—类型为页é¢ï¼Œçˆ¶çº§èœå•ä¸èƒ½ä¸ºç©º"); } var menuData = Db.Queryable<SysFunctionMenu>().First(m => m.MenuNo == menu.ParentNo); if (menuData == null) { throw new Exception("未查询到父级èœå•ä¿¡æ¯ï¼Œè¯·æ ¸å®ž"); } if (menuData.Level != "0") { throw new Exception("当剿¨¡å—类型是页é¢ï¼Œçˆ¶çº§èœå•类型应为模å—"); } break; case "2": if (string.IsNullOrWhiteSpace(menu.ParentNo)) { throw new Exception("模å—类型为页é¢ï¼Œçˆ¶çº§èœå•ä¸èƒ½ä¸ºç©º"); } var menuData2 = Db.Queryable<SysFunctionMenu>().First(m => m.MenuNo == menu.ParentNo); if (menuData2 == null) { throw new Exception("未查询到父级èœå•ä¿¡æ¯ï¼Œè¯·æ ¸å®ž"); } if (menuData2.Level != "1") { throw new Exception("当剿¨¡å—类型是按钮,父级èœå•类型应为页é¢"); } break; default: throw new Exception("模å—类型异常"); } i = await _menu.InsertMenu(menu); } return i; } catch (Exception ex) { //抛出异常 throw new Exception(ex.Message); } } /// <summary> /// åˆ é™¤èœå•ä¿¡æ¯ /// </summary> /// <param name="id">èœå•id</param> /// <returns></returns> /// <exception cref="Exception">æ•获异常</exception> public async Task<int> DeleteMenu(SysFunctionMenu menu) { //æ•获异常 try { int i = await _menu.DeleteMenu(menu); return i; } catch (Exception ex) { //抛出异常 throw new Exception("åˆ é™¤èœå•ä¿¡æ¯å¼‚常", ex); } } /// <summary> /// 编辑èœå•ä¿¡æ¯ /// </summary> /// <returns></returns> /// <exception cref="Exception">æ•获异常</exception> public async Task<int> UpdateMenu(FunctionMenuVm menuvm) { //æ•获异常 try { SysFunctionMenu menu = _mapper.Map<SysFunctionMenu>(menuvm); //验è¯å±‚级 0:模å—ã€1:页é¢ã€2:按钮 switch (menu.Level) { case "0": if (!string.IsNullOrWhiteSpace(menu.ParentNo)) { throw new Exception("模å—类型为模å—,父级èœå•应为空"); } break; case "1": if (string.IsNullOrWhiteSpace(menu.ParentNo)) { throw new Exception("模å—类型为页é¢ï¼Œçˆ¶çº§èœå•ä¸èƒ½ä¸ºç©º"); } var menuData = Db.Queryable<SysFunctionMenu>().First(m => m.MenuNo == menu.ParentNo); if (menuData == null) { throw new Exception("未查询到父级èœå•ä¿¡æ¯ï¼Œè¯·æ ¸å®ž"); } if (menuData.Level != "0") { throw new Exception("当剿¨¡å—类型是页é¢ï¼Œçˆ¶çº§èœå•类型应为模å—"); } break; case "2": if (string.IsNullOrWhiteSpace(menu.ParentNo)) { throw new Exception("模å—类型为页é¢ï¼Œçˆ¶çº§èœå•ä¸èƒ½ä¸ºç©º"); } var menuData2 = Db.Queryable<SysFunctionMenu>().First(m => m.MenuNo == menu.ParentNo); if (menuData2 == null) { throw new Exception("未查询到父级èœå•ä¿¡æ¯ï¼Œè¯·æ ¸å®ž"); } if (menuData2.Level != "1") { throw new Exception("当剿¨¡å—类型是按钮,父级èœå•类型应为页é¢"); } break; default: throw new Exception("模å—类型异常"); } int i = await _menu.UpdateMenu(menu); return i; } catch (Exception ex) { //抛出异常 throw new Exception(ex.Message); } } /// <summary> /// æ ¹æ®çˆ¶çº§èœå•å·èŽ·å–èœå•ä¿¡æ¯ /// </summary> /// <param name="MenuNo">èœå•å·</param> /// <returns></returns> public List<FunctionMenuVm> GetMenuByParentNo(string MenuNo) { List<FunctionMenuVm> menulist = _menu.GetMenuByParentNo(MenuNo); return menulist; } } }