123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Linq.Expressions;
- using System.Threading.Tasks;
- using YiSha.Data.Repository;
- using YiSha.Entity.SystemManage;
- using YiSha.Enum.SystemManage;
- using YiSha.Model.Param.SystemManage;
- using YiSha.Util.Extension;
- using YiSha.Util.Model;
- using YiSha.Util;
- using YiSha.Enum;
- using YiSha.IService.SystemManage;
- namespace YiSha.Service.SystemManage
- {
- public partial class RoleService
- {
- private IRepositoryFactory _baseRepository;
- private IMenuAuthorizeService _menuAuthorizeService;
- public RoleService(IRepositoryFactory baseRepository, IMenuAuthorizeService menuAuthorizeService)
- {
- _baseRepository = baseRepository;
- _menuAuthorizeService = menuAuthorizeService;
- }
- #region 获取数据
- public async Task<List<RoleEntity>> GetListPartial(RoleListParam param)
- {
- var expression = ListFilterPartial(param);
- var list = await _baseRepository.BaseRepository(dbConnectType).FindList(expression);
- return list.ToList();
- }
- public async Task<List<RoleEntity>> GetPageListPartial(RoleListParam param, Pagination pagination)
- {
- var expression = ListFilterPartial(param);
- var list = await _baseRepository.BaseRepository(dbConnectType).FindList(expression, pagination);
- return list.ToList();
- }
- public async Task<RoleEntity> GetEntityPartial(int id)
- {
- return await _baseRepository.BaseRepository(dbConnectType).FindEntity<RoleEntity>(id);
- }
- public async Task<int> GetMaxSortPartial()
- {
- object result = await _baseRepository.BaseRepository(dbConnectType).FindObject("SELECT MAX(RoleSort) FROM SysRole");
- int sort = result.ParseToInt();
- sort++;
- return sort;
- }
- public bool ExistRoleNamePartial(RoleEntity entity)
- {
- var expression = LinqExtensions.True<RoleEntity>();
- expression = expression.And(t => t.BaseIsDelete == (int)IsDeleteEnum.No);
- if (entity.Id.IsNullOrZero())
- {
- expression = expression.And(t => t.RoleName == entity.RoleName);
- }
- else
- {
- expression = expression.And(t => t.RoleName == entity.RoleName && t.Id != entity.Id);
- }
- return _baseRepository.BaseRepository(dbConnectType).IQueryable(expression).Count() > 0 ? true : false;
- }
- #endregion
- #region 提交数据
- public async Task SaveFormPartial(RoleEntity entity)
- {
- var isAdd = false;
- try
- {
- //如果id为0,先在数据库中新增用户信息,获取用户的userid便于职位、角色信息的关联(事务中无法获取到用户的userid)
- if (entity.Id.IsNullOrZero())
- {
- isAdd = true;
- //新增角色
- await entity.Create();
- await _baseRepository.BaseRepository(dbConnectType).Insert(entity);
- }
- // 角色对应的菜单、页面和按钮权限
- var menuAuthorizeList = new List<MenuAuthorizeEntity>();
- if (!string.IsNullOrEmpty(entity.MenuIds))
- {
- foreach (int menuId in TextHelper.SplitToArray<int>(entity.MenuIds, ','))
- {
- MenuAuthorizeEntity menuAuthorizeEntity = new MenuAuthorizeEntity();
- menuAuthorizeEntity.AuthorizeId = entity.Id;
- menuAuthorizeEntity.MenuId = menuId;
- menuAuthorizeEntity.AuthorizeType = AuthorizeTypeEnum.Role.ParseToInt();
- await menuAuthorizeEntity.Create();
- menuAuthorizeList.Add(menuAuthorizeEntity);
- }
- }
- //开启事务
- var db = await _baseRepository.BaseRepository(dbConnectType).BeginTrans();
- try
- {
- if (!isAdd)
- {
- //修改角色
- await db.Delete<MenuAuthorizeEntity>(t => t.AuthorizeId == entity.Id);
- await entity.Modify();
- await db.Update(entity);
- }
- if (menuAuthorizeList.Any())
- await _menuAuthorizeService.InsertMany(menuAuthorizeList);
- await db.CommitTrans();
- }
- catch
- {
- await db.RollbackTrans();
- throw;
- }
- }
- catch
- {
- //如果id为0且用户的userid不为零,则需要删除新增的用户信息
- if (isAdd)
- {
- await _baseRepository.BaseRepository(dbConnectType).Delete(entity);
- }
- }
- }
- public async Task DeleteFormPartial(string ids)
- {
- string[] idArr = TextHelper.SplitToArray<string>(ids, ',');
- await _baseRepository.BaseRepository(dbConnectType).Delete<RoleEntity>(idArr);
- }
- #endregion
- #region 私有方法
- private Expression<Func<RoleEntity, bool>> ListFilterPartial(RoleListParam param)
- {
- var expression = LinqExtensions.True<RoleEntity>();
- expression = expression.And(t => t.BaseIsDelete == (int)IsDeleteEnum.No);
- if (param != null)
- {
- if (!string.IsNullOrEmpty(param.RoleName))
- {
- expression = expression.And(t => t.RoleName.Contains(param.RoleName));
- }
- if (!string.IsNullOrEmpty(param.RoleIds))
- {
- int[] roleIdArr = TextHelper.SplitToArray<int>(param.RoleIds, ',');
- expression = expression.And(t => roleIdArr.Contains(t.Id));
- }
- if (!string.IsNullOrEmpty(param.RoleName))
- {
- expression = expression.And(t => t.RoleName.Contains(param.RoleName));
- }
- if (param.RoleStatus > -1)
- {
- expression = expression.And(t => t.RoleStatus == param.RoleStatus);
- }
- if (!string.IsNullOrEmpty(param.StartTime.ParseToString()))
- {
- expression = expression.And(t => t.BaseModifyTime >= param.StartTime);
- }
- if (!string.IsNullOrEmpty(param.EndTime.ParseToString()))
- {
- param.EndTime = param.EndTime.Value.Date.Add(new TimeSpan(23, 59, 59));
- expression = expression.And(t => t.BaseModifyTime <= param.EndTime);
- }
- }
- return expression;
- }
- #endregion
- }
- }
|