using SqlSugar;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_SystemServices
{
public class Sys_MenuService : ServiceBase<Sys_Menu, ISys_MenuRepository>, ISys_MenuService
{
private readonly IUnitOfWorkManage _unitOfWorkManage;
public Sys_MenuService(ISys_MenuRepository BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
{
_unitOfWorkManage = unitOfWorkManage;
}
/// <summary>
/// 获å–当å‰ç”¨æˆ·æ‰€æœ‰èœå•与æƒé™
/// </summary>
/// <returns></returns>
public object GetCurrentMenuActionList()
{
object obj = GetMenuActionList(App.User.RoleId);
if (obj is IEnumerable<object> list)
{
if (list.Any())
{
return obj;
}
else
{
return WebResponseContent.Instance.Error("未获å–到èœå•ä¿¡æ¯");
}
}
return obj;
}
/// <summary>
/// æ ¹æ®è§’色ID获å–èœå•与æƒé™
/// </summary>
/// <param name="roleId"></param>
/// <returns></returns>
public object GetMenuActionList(int roleId)
{
if (App.User.IsRoleIdSuperAdmin(roleId))
{
return BaseDal.GetSuperAdminMenu();
}
return BaseDal.GetMenuByRoleId(roleId);
}
public List<Sys_Menu> GetUserMenuList(int roleId)
{
if (App.User.IsRoleIdSuperAdmin(roleId))
{
return BaseDal.GetAllMenu();
}
List<int> menuIds = BaseDal.GetPermissions(roleId).Select(x => x.MenuId).ToList();
return BaseDal.GetAllMenu().Where(x => menuIds.Contains(x.MenuId)).ToList();
}
public List<Sys_Actions> GetActions(int menuId, List<Sys_Actions> menuActions, List<Permissions> permissions, int roleId)
{
if (App.User.IsRoleIdSuperAdmin(roleId))
{
return menuActions;
}
return menuActions.Where(p => permissions
.Exists(w => menuId == w.MenuId
&& w.UserAuthArr.Contains(p.Value)))
.ToList();
}
/// <summary>
/// 编辑修改èœå•æ—¶,èŽ·å–æ‰€æœ‰èœå•
/// </summary>
/// <returns></returns>
public object GetMenu()
{
if (App.User.IsRoleIdSuperAdmin(App.User.RoleId))
{
List<int> menuIds = BaseDal.QueryData().Select(x => x.MenuId).ToList();
return BaseDal.GetMenu(menuIds);
}
else
{
List<int> menuIds = BaseDal.GetPermissions(App.User.RoleId).Select(x => x.MenuId).ToList();
return BaseDal.GetMenu(menuIds);
}
}
/// <summary>
/// 编辑èœå•时,获å–èœå•ä¿¡æ¯
/// </summary>
/// <param name="menuId"></param>
/// <returns></returns>
public object GetTreeItem(int menuId)
{
return BaseDal.GetTreeItem(menuId);
}
/// <summary>
/// 新建或编辑èœå•
/// </summary>
/// <param name="menu"></param>
/// <returns></returns>
public WebResponseContent Save(Sys_Menu menu)
{
WebResponseContent webResponse = new WebResponseContent();
if (menu == null) return webResponse.Error("没有获å–到æäº¤çš„傿•°");
if (menu.MenuId > 0 && menu.MenuId == menu.ParentId) return webResponse.Error("父级IDä¸èƒ½æ˜¯å½“å‰èœå•çš„ID");
try
{
//webResponse = menu.ValidationEntity(x => new { x.MenuName, x.TableName });
//if (!webResponse.Status) return webResponse;
if (menu.TableName != "/" && menu.TableName != ".")
{
// 2022.03.26å¢žç§»åŠ¨ç«¯åŠ èœå•类型判æ–
Sys_Menu sysMenu = BaseDal.QueryFirst(x => x.TableName == menu.TableName);
if (sysMenu != null)
{
sysMenu.MenuType ??= 0;
if (sysMenu.MenuType == menu.MenuType)
{
if ((menu.MenuId > 0 && sysMenu.MenuId != menu.MenuId)
|| menu.MenuId <= 0)
{
return webResponse.Error($"视图/表åã€{menu.TableName}】已被其他èœå•使用");
}
}
}
}
bool _changed = false;
if (menu.MenuId <= 0)
{
int id = BaseDal.AddData(menu);
menu.MenuId = id;
}
else
{
//2020.05.07æ–°å¢žç¦æ¢é€‰æ‹©ä¸Šçº§è§’色为自己
if (menu.MenuId == menu.ParentId)
{
return webResponse.Error($"父级idä¸èƒ½ä¸ºè‡ªå·±");
}
if (BaseDal.QueryFirst(x => x.ParentId == menu.MenuId && menu.ParentId == x.MenuId) != null)
{
return webResponse.Error($"ä¸èƒ½é€‰æ‹©æ¤çˆ¶çº§id,选择的父级id与当å‰èœå•å½¢æˆä¾èµ–关系");
}
_changed = BaseDal.QueryData(c => c.MenuId == menu.MenuId).Select(s => s.Auth).FirstOrDefault() != menu.Auth;
BaseDal.UpdateData(menu);
}
webResponse.OK("ä¿å˜æˆåŠŸ", menu);
}
catch (Exception ex)
{
webResponse.Error(ex.Message);
}
return webResponse;
}
public WebResponseContent DelMenu(int menuId)
{
WebResponseContent webResponse = new WebResponseContent();
if(BaseDal.QueryFirst(x=>x.ParentId == menuId) != null)
{
return webResponse = WebResponseContent.Instance.Error("当å‰èœå•å˜åœ¨åèœå•,è¯·å…ˆåˆ é™¤åèœå•!");
}
BaseDal.DeleteDataById(menuId);
return webResponse = WebResponseContent.Instance.OK("åˆ é™¤æˆåŠŸ");
}
}
}