using System; using System.Collections.Generic; using System.Data.Common; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using YiSha.Data; using YiSha.Data.Repository; using YiSha.Entity.SystemManage; using YiSha.Enum; using YiSha.IService.SystemManage; using YiSha.Model.Param.SystemManage; using YiSha.Util; using YiSha.Util.Extension; namespace YiSha.Service.SystemManage { public partial class MenuService { private IRepositoryFactory _baseRepository; private IMenuAuthorizeService _menuAuthorizeService; public MenuService(IRepositoryFactory baseRepository,IMenuAuthorizeService menuAuthorizeService) { _baseRepository = baseRepository; _menuAuthorizeService = menuAuthorizeService; } #region 获取数据 public async Task> GetListPartial(MenuListParam param) { var expression = ListFilterPartial(param); var list = await _baseRepository.BaseRepository(dbConnectType).FindList(expression); return list.OrderBy(p => p.MenuSort).ToList(); } public async Task GetEntityPartial(int id) { return await _baseRepository.BaseRepository(dbConnectType).FindEntity(id); } public async Task GetMaxSortPartial(long parentId) { string where = string.Empty; if (parentId > 0) { where += " AND ParentId = " + parentId; } object result = await _baseRepository.BaseRepository(dbConnectType).FindObject("SELECT MAX(MenuSort) FROM SysMenu where BaseIsDelete = 0 " + where); int sort = result.ParseToInt(); sort++; return sort; } public bool ExistMenuNamePartial(MenuEntity entity) { var expression = LinqExtensions.True(); expression = expression.And(t => t.BaseIsDelete == 0); if (entity.Id.IsNullOrZero()) { expression = expression.And(t => t.MenuName == entity.MenuName && t.MenuType == entity.MenuType); } else { expression = expression.And(t => t.MenuName == entity.MenuName && t.MenuType == entity.MenuType && t.Id != entity.Id); } return _baseRepository.BaseRepository(dbConnectType).IQueryable(expression).Count() > 0 ? true : false; } #endregion #region 提交数据 public async Task SaveFormPartial(MenuEntity entity) { if (entity.Id.IsNullOrZero()) { await entity.Create(); await _baseRepository.BaseRepository(dbConnectType).Insert(entity); } else { await entity.Modify(); await _baseRepository.BaseRepository(dbConnectType).Update(entity); } } public async Task DeleteFormPartial(string ids) { var db = await _baseRepository.BaseRepository(dbConnectType).BeginTrans(); try { ids = $"{ string.Join(",", ids.Split(","))}"; List parameters = new List(); parameters.Add(DbParameterExtension.CreateDbParameter("@id", ids, dbConnectType)); //删除菜单 await DeleteFormByWhere(" FIND_IN_SET (id,@id) or FIND_IN_SET (parentid,@id) ", parameters); parameters.Clear();//清除上一个删除操作中的@baseisdelete数据 parameters.Add(DbParameterExtension.CreateDbParameter("@menuid", ids, dbConnectType)); //删除菜单权限 await _menuAuthorizeService.DeleteFormByWhere(" FIND_IN_SET (menuid,@menuid) ", parameters); await db.CommitTrans(); } catch { await db.RollbackTrans(); throw; } } #endregion #region 私有方法 private Expression> ListFilterPartial(MenuListParam param) { var expression = LinqExtensions.True(); expression = expression.And(t => t.BaseIsDelete == (int)IsDeleteEnum.No); if (param != null) { if (!string.IsNullOrEmpty(param.MenuName)) { expression = expression.And(t => t.MenuName.Contains(param.MenuName)); } if (param.MenuStatus > -1) { expression = expression.And(t => t.MenuStatus == param.MenuStatus); } } return expression; } #endregion } }