820 lines
46 KiB
C#
820 lines
46 KiB
C#
using JNPF.Common.Core.Manager;
|
||
using JNPF.Common.Enums;
|
||
using JNPF.Common.Extension;
|
||
using JNPF.Common.Filter;
|
||
using JNPF.Common.Models.User;
|
||
using JNPF.Common.Security;
|
||
using JNPF.DatabaseAccessor;
|
||
using JNPF.DependencyInjection;
|
||
using JNPF.DynamicApiController;
|
||
using JNPF.FriendlyException;
|
||
using JNPF.Systems.Entitys.Dto.OrganizeAdministrator;
|
||
using JNPF.Systems.Entitys.Dto.Permission.OrganizeAdministrator;
|
||
using JNPF.Systems.Entitys.Permission;
|
||
using JNPF.Systems.Interfaces.Permission;
|
||
using Mapster;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using SqlSugar;
|
||
|
||
namespace JNPF.Systems;
|
||
|
||
/// <summary>
|
||
/// 分级管理
|
||
/// 版 本:V3.2.0
|
||
/// 版 权:拓通智联科技有限公司(http://www.tuotong-tech.com)
|
||
/// 日 期:2021.09.27.
|
||
/// </summary>
|
||
[ApiDescriptionSettings(Tag = "Permission", Name = "OrganizeAdministrator", Order = 166)]
|
||
[Route("api/permission/[controller]")]
|
||
public class OrganizeAdministratorService : IOrganizeAdministratorService, IDynamicApiController, ITransient
|
||
{
|
||
/// <summary>
|
||
/// 基础仓储 .
|
||
/// </summary>
|
||
private readonly ISqlSugarRepository<OrganizeAdministratorEntity> _repository;
|
||
|
||
/// <summary>
|
||
/// 组织管理.
|
||
/// </summary>
|
||
private readonly IOrganizeService _organizeService;
|
||
|
||
/// <summary>
|
||
/// 用户管理器.
|
||
/// </summary>
|
||
private readonly IUserManager _userManager;
|
||
|
||
/// <summary>
|
||
/// 初始化一个<see cref="OrganizeAdministratorService"/>类型的新实例.
|
||
/// </summary>
|
||
public OrganizeAdministratorService(
|
||
ISqlSugarRepository<OrganizeAdministratorEntity> organizeAdministratorRepository,
|
||
IUserManager userManager,
|
||
IOrganizeService organizeService)
|
||
{
|
||
_repository = organizeAdministratorRepository;
|
||
_userManager = userManager;
|
||
_organizeService = organizeService;
|
||
}
|
||
|
||
#region GET
|
||
|
||
/// <summary>
|
||
/// 拉取机构分级管理.
|
||
/// </summary>
|
||
/// <param name="input"></param>
|
||
/// <returns></returns>
|
||
[HttpGet("")]
|
||
public async Task<dynamic> GetList([FromQuery] PageInputBase input)
|
||
{
|
||
// 处理组织树 名称
|
||
List<OrganizeEntity>? orgTreeNameList = GetOrgListTreeName();
|
||
|
||
// 获取有查看权限的组织
|
||
var dataScope = _repository.AsSugarClient().Queryable<OrganizeAdministratorEntity>()
|
||
.Where(it => SqlFunc.ToString(it.UserId) == _userManager.UserId && it.DeleteMark == null)
|
||
.Where(it => it.ThisLayerSelect.Equals(1) || it.ThisLayerSelect.Equals(1) || it.SubLayerSelect.Equals(1)).ToList();
|
||
|
||
List<string>? orgIds = dataScope.Where(x => x.ThisLayerSelect.Equals(1)).Select(x => x.OrganizeId).ToList();
|
||
if (dataScope.Any(x => x.SubLayerSelect.Equals(1)))
|
||
{
|
||
dataScope.Where(x => x.SubLayerSelect.Equals(1)).ToList().ForEach(item =>
|
||
{
|
||
var resList = _repository.AsSugarClient().Queryable<OrganizeEntity>().Where(o => !o.Id.Equals(item.OrganizeId) && o.OrganizeIdTree.Contains(item.OrganizeId) && o.DeleteMark == null && o.EnabledMark == 1).Select(x => x.Id).ToList();
|
||
orgIds.AddRange(resList);
|
||
});
|
||
}
|
||
|
||
var userIdList = await _repository.AsSugarClient().Queryable<UserRelationEntity>().Where(x => x.ObjectType.Equals("Organize") && orgIds.Contains(x.ObjectId)).Select(x => x.UserId).ToListAsync();
|
||
var organizeAdmin = await _repository.AsSugarClient().Queryable<OrganizeAdministratorEntity>().Where(x => !SqlFunc.ToString(x.UserId).Equals(_userManager.UserId))
|
||
.WhereIF(!_userManager.IsAdministrator, x => orgIds.Contains(x.OrganizeId) && userIdList.Contains(x.UserId))
|
||
.Select(x => new { x.UserId, x.CreatorTime }).ToListAsync();
|
||
|
||
var data = await _repository.AsSugarClient().Queryable<UserEntity>()
|
||
.Where(x => organizeAdmin.Select(xx => xx.UserId).Contains(x.Id) && x.DeleteMark == null)
|
||
.WhereIF(input.keyword.IsNotEmptyOrNull(), x => x.Account.Contains(input.keyword) || x.RealName.Contains(input.keyword))
|
||
.Select(x => new OrganizeAdministratorListOutput()
|
||
{
|
||
id = x.Id,
|
||
account = x.Account,
|
||
gender = SqlFunc.ToString(x.Gender),
|
||
realName = x.RealName,
|
||
mobilePhone = x.MobilePhone,
|
||
creatorTime = x.CreatorTime
|
||
}).ToPagedListAsync(input.currentPage, input.pageSize);
|
||
|
||
List<UserRelationEntity>? orgUserIdAll = await _repository.AsSugarClient().Queryable<UserRelationEntity>()
|
||
.Where(x => x.ObjectType.Equals("Organize") && data.list.Select(x => x.id).Contains(x.UserId)).ToListAsync();
|
||
|
||
foreach (var item in data.list)
|
||
{
|
||
// 获取用户组织集合
|
||
List<string>? roleOrgList = orgUserIdAll.Where(x => x.UserId == item.id).Select(x => x.ObjectId).ToList();
|
||
item.organizeId = string.Join(" , ", orgTreeNameList.Where(x => roleOrgList.Contains(x.Id)).Select(x => x.Description));
|
||
item.creatorTime = organizeAdmin.Find(x => x.UserId.Equals(item.id)).CreatorTime;
|
||
}
|
||
|
||
return PageResult<OrganizeAdministratorListOutput>.SqlSugarPageResult(data);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取下拉框.
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpGet("Selector")]
|
||
public async Task<dynamic> GetSelector(string userId)
|
||
{
|
||
if (userId.IsNullOrEmpty()) userId = _userManager.UserId;
|
||
|
||
// 处理组织树 名称
|
||
List<OrganizeEntity> orgTreeNameList = GetOrgListTreeName();
|
||
|
||
// 获取当前有权限的组织
|
||
var currList = await _repository.AsSugarClient().Queryable<OrganizeAdministratorEntity>().Where(x => orgTreeNameList.Select(xx => xx.Id).Contains(x.OrganizeId)).ToListAsync();
|
||
var result = new List<OrganizeAdministratorSelectorOutput>();
|
||
|
||
// 管理员
|
||
if (_userManager.IsAdministrator)
|
||
{
|
||
orgTreeNameList.ForEach(orgItem =>
|
||
{
|
||
var addItem = new OrganizeAdministratorSelectorOutput();
|
||
|
||
addItem.id = orgItem.Id;
|
||
addItem.fullName = orgItem.FullName;
|
||
addItem.organizeId = orgItem.Id;
|
||
addItem.parentId = orgItem.ParentId;
|
||
addItem.category = orgItem.Category;
|
||
addItem.icon = orgItem.Category.Equals("company") ? "icon-ym icon-ym-tree-organization3" : "icon-ym icon-ym-tree-department1";
|
||
addItem.organizeIdTree = orgItem.OrganizeIdTree;
|
||
|
||
var item = currList.FirstOrDefault(x => x.OrganizeId.Equals(orgItem.Id) && x.UserId.Equals(userId));
|
||
if (item != null && userId != _userManager.UserId)
|
||
{
|
||
addItem.thisLayerSelect = item.ThisLayerSelect;
|
||
addItem.thisLayerAdd = item.ThisLayerAdd;
|
||
addItem.thisLayerEdit = item.ThisLayerEdit;
|
||
addItem.thisLayerDelete = item.ThisLayerDelete;
|
||
addItem.subLayerSelect = item.SubLayerSelect;
|
||
addItem.subLayerAdd = item.SubLayerAdd;
|
||
addItem.subLayerEdit = item.SubLayerEdit;
|
||
addItem.subLayerDelete = item.SubLayerDelete;
|
||
}
|
||
else
|
||
{
|
||
addItem.thisLayerSelect = 0;
|
||
addItem.thisLayerAdd = 0;
|
||
addItem.thisLayerEdit = 0;
|
||
addItem.thisLayerDelete = 0;
|
||
addItem.subLayerSelect = 0;
|
||
addItem.subLayerAdd = 0;
|
||
addItem.subLayerEdit = 0;
|
||
addItem.subLayerDelete = 0;
|
||
}
|
||
|
||
result.Add(addItem);
|
||
});
|
||
|
||
return new { list = result.ToTree("-1") };
|
||
}
|
||
|
||
currList = currList.WhereIF(userId.Equals(_userManager.UserId), x => x.UserId.Equals(_userManager.UserId))
|
||
.WhereIF(!userId.Equals(_userManager.UserId), x => x.UserId == _userManager.UserId || x.UserId == userId).ToList();
|
||
|
||
// 捞取编辑用户权限
|
||
var userList = currList.Where(x => x.ThisLayerAdd.Equals(1) || x.ThisLayerEdit.Equals(1) || x.ThisLayerDelete.Equals(1) || x.ThisLayerSelect.Equals(1) ||
|
||
x.SubLayerAdd.Equals(1) || x.SubLayerEdit.Equals(1) || x.SubLayerDelete.Equals(1) || x.SubLayerSelect.Equals(1)).Where(x => x.UserId.Equals(userId)).ToList().Copy();
|
||
userList.Where(x => x.SubLayerAdd.Equals(1) || x.SubLayerEdit.Equals(1) || x.SubLayerDelete.Equals(1) || x.SubLayerSelect.Equals(1)).ToList().ForEach(item =>
|
||
{
|
||
var orgIds = orgTreeNameList.Where(x => x.OrganizeIdTree.Contains(item.OrganizeId) && !x.Id.Equals(item.OrganizeId)).Select(x => x.Id).ToList();
|
||
var subList = currList.Where(x => orgIds.Contains(x.OrganizeId) && x.UserId.Equals(_userManager.UserId)).ToList().Copy();
|
||
|
||
subList.ForEach(it =>
|
||
{
|
||
var userIt = userList.Find(x => x.OrganizeId.Equals(it.OrganizeId));
|
||
if (userIt == null)
|
||
{
|
||
it.ThisLayerAdd = item.SubLayerAdd.Equals(1) ? 3 : 0;
|
||
it.ThisLayerEdit = item.SubLayerEdit.Equals(1) ? 3 : 0;
|
||
it.ThisLayerDelete = item.SubLayerDelete.Equals(1) ? 3 : 0;
|
||
it.ThisLayerSelect = item.SubLayerSelect.Equals(1) ? 3 : 0;
|
||
it.SubLayerAdd = item.SubLayerAdd.Equals(1) ? 3 : 0;
|
||
it.SubLayerEdit = item.SubLayerEdit.Equals(1) ? 3 : 0;
|
||
it.SubLayerDelete = item.SubLayerDelete.Equals(1) ? 3 : 0;
|
||
it.SubLayerSelect = item.SubLayerSelect.Equals(1) ? 3 : 0;
|
||
}
|
||
else
|
||
{
|
||
it.ThisLayerAdd = userIt.ThisLayerAdd.Equals(1) || userIt.ThisLayerAdd.Equals(3) ? userIt.ThisLayerAdd : item.SubLayerAdd.Equals(1) ? 3 : 0;
|
||
it.ThisLayerEdit = userIt.ThisLayerEdit.Equals(1) || userIt.ThisLayerEdit.Equals(3) ? userIt.ThisLayerEdit : item.SubLayerEdit.Equals(1) ? 3 : 0;
|
||
it.ThisLayerDelete = userIt.ThisLayerDelete.Equals(1) || userIt.ThisLayerDelete.Equals(3) ? userIt.ThisLayerDelete : item.SubLayerDelete.Equals(1) ? 3 : 0;
|
||
it.ThisLayerSelect = userIt.ThisLayerSelect.Equals(1) || userIt.ThisLayerSelect.Equals(3) ? userIt.ThisLayerSelect : item.SubLayerSelect.Equals(1) ? 3 : 0;
|
||
it.SubLayerAdd = userIt.SubLayerAdd.Equals(1) || userIt.SubLayerAdd.Equals(3) ? userIt.SubLayerAdd : item.SubLayerAdd.Equals(1) ? 3 : 0;
|
||
it.SubLayerEdit = userIt.SubLayerEdit.Equals(1) || userIt.SubLayerEdit.Equals(3) ? userIt.SubLayerEdit : item.SubLayerEdit.Equals(1) ? 3 : 0;
|
||
it.SubLayerDelete = userIt.SubLayerDelete.Equals(1) || userIt.SubLayerDelete.Equals(3) ? userIt.SubLayerDelete : item.SubLayerDelete.Equals(1) ? 3 : 0;
|
||
it.SubLayerSelect = userIt.SubLayerSelect.Equals(1) || userIt.SubLayerSelect.Equals(3) ? userIt.SubLayerSelect : item.SubLayerSelect.Equals(1) ? 3 : 0;
|
||
userList.Remove(userIt);
|
||
}
|
||
});
|
||
|
||
userList.AddRange(subList);
|
||
});
|
||
|
||
// 捞取管理员权限
|
||
var adminList = currList.Where(x => x.ThisLayerAdd.Equals(1) || x.ThisLayerEdit.Equals(1) || x.ThisLayerDelete.Equals(1) || x.ThisLayerSelect.Equals(1) ||
|
||
x.SubLayerAdd.Equals(1) || x.SubLayerEdit.Equals(1) || x.SubLayerDelete.Equals(1) || x.SubLayerSelect.Equals(1)).Where(x => x.UserId.Equals(_userManager.UserId)).ToList().Copy();
|
||
adminList.Where(x => x.SubLayerAdd.Equals(1) || x.SubLayerEdit.Equals(1) || x.SubLayerDelete.Equals(1) || x.SubLayerSelect.Equals(1)).ToList().ForEach(item =>
|
||
{
|
||
var orgIds = orgTreeNameList.Where(x => x.OrganizeIdTree.Contains(item.OrganizeId) && !x.Id.Equals(item.OrganizeId)).Select(x => x.Id).ToList();
|
||
var subList = currList.Where(x => orgIds.Contains(x.OrganizeId) && x.UserId.Equals(_userManager.UserId)).ToList().Copy();
|
||
|
||
subList.ForEach(it =>
|
||
{
|
||
var adminIt = adminList.Find(x => x.OrganizeId.Equals(it.OrganizeId));
|
||
if (adminIt == null)
|
||
{
|
||
it.ThisLayerAdd = item.SubLayerAdd.Equals(1) ? 3 : 0;
|
||
it.ThisLayerEdit = item.SubLayerEdit.Equals(1) ? 3 : 0;
|
||
it.ThisLayerDelete = item.SubLayerDelete.Equals(1) ? 3 : 0;
|
||
it.ThisLayerSelect = item.SubLayerSelect.Equals(1) ? 3 : 0;
|
||
it.SubLayerAdd = item.SubLayerAdd.Equals(1) ? 3 : 0;
|
||
it.SubLayerEdit = item.SubLayerEdit.Equals(1) ? 3 : 0;
|
||
it.SubLayerDelete = item.SubLayerDelete.Equals(1) ? 3 : 0;
|
||
it.SubLayerSelect = item.SubLayerSelect.Equals(1) ? 3 : 0;
|
||
}
|
||
else
|
||
{
|
||
it.ThisLayerAdd = adminIt.ThisLayerAdd.Equals(1) || adminIt.ThisLayerAdd.Equals(3) ? adminIt.ThisLayerAdd : item.SubLayerAdd.Equals(1) ? 3 : 0;
|
||
it.ThisLayerEdit = adminIt.ThisLayerEdit.Equals(1) || adminIt.ThisLayerEdit.Equals(3) ? adminIt.ThisLayerEdit : item.SubLayerEdit.Equals(1) ? 3 : 0;
|
||
it.ThisLayerDelete = adminIt.ThisLayerDelete.Equals(1) || adminIt.ThisLayerDelete.Equals(3) ? adminIt.ThisLayerDelete : item.SubLayerDelete.Equals(1) ? 3 : 0;
|
||
it.ThisLayerSelect = adminIt.ThisLayerSelect.Equals(1) || adminIt.ThisLayerSelect.Equals(3) ? adminIt.ThisLayerSelect : item.SubLayerSelect.Equals(1) ? 3 : 0;
|
||
it.SubLayerAdd = adminIt.SubLayerAdd.Equals(1) || adminIt.SubLayerAdd.Equals(3) ? adminIt.SubLayerAdd : item.SubLayerAdd.Equals(1) ? 3 : 0;
|
||
it.SubLayerEdit = adminIt.SubLayerEdit.Equals(1) || adminIt.SubLayerEdit.Equals(3) ? adminIt.SubLayerEdit : item.SubLayerEdit.Equals(1) ? 3 : 0;
|
||
it.SubLayerDelete = adminIt.SubLayerDelete.Equals(1) || adminIt.SubLayerDelete.Equals(3) ? adminIt.SubLayerDelete : item.SubLayerDelete.Equals(1) ? 3 : 0;
|
||
it.SubLayerSelect = adminIt.SubLayerSelect.Equals(1) || adminIt.SubLayerSelect.Equals(3) ? adminIt.SubLayerSelect : item.SubLayerSelect.Equals(1) ? 3 : 0;
|
||
adminList.Remove(adminIt);
|
||
}
|
||
});
|
||
|
||
adminList.AddRange(subList);
|
||
});
|
||
|
||
adminList.ForEach(item =>
|
||
{
|
||
var user = userList.Find(x => x.OrganizeId.Equals(item.OrganizeId));
|
||
var orgItem = orgTreeNameList.Find(x => x.Id.Equals(item.OrganizeId));
|
||
var resultItem = new OrganizeAdministratorSelectorOutput();
|
||
resultItem.id = orgItem.Id;
|
||
resultItem.organizeId = orgItem.Id;
|
||
resultItem.fullName = orgItem.Description;
|
||
resultItem.parentId = orgItem.ParentId;
|
||
resultItem.category = orgItem.Category;
|
||
resultItem.icon = orgItem.Category.Equals("company") ? "icon-ym icon-ym-tree-organization3" : "icon-ym icon-ym-tree-department1";
|
||
resultItem.organizeIdTree = orgItem.OrganizeIdTree;
|
||
|
||
if (user != null && userId != _userManager.UserId)
|
||
{
|
||
if (item.ThisLayerAdd.Equals(0) && user.ThisLayerAdd.Equals(0)) resultItem.thisLayerAdd = -1;
|
||
else if ((item.ThisLayerAdd.Equals(1) || item.ThisLayerAdd.Equals(3)) && user.ThisLayerAdd.Equals(1)) resultItem.thisLayerAdd = 1;
|
||
else if ((item.ThisLayerAdd.Equals(1) || item.ThisLayerAdd.Equals(3)) && user.ThisLayerAdd.Equals(0)) resultItem.thisLayerAdd = 0;
|
||
else if (item.ThisLayerAdd.Equals(0) && user.ThisLayerAdd.Equals(1)) resultItem.thisLayerAdd = 2;
|
||
else if (item.ThisLayerAdd.Equals(0) && user.ThisLayerAdd.Equals(3)) resultItem.thisLayerAdd = 3;
|
||
|
||
if (item.ThisLayerEdit.Equals(0) && user.ThisLayerEdit.Equals(0)) resultItem.thisLayerEdit = -1;
|
||
else if ((item.ThisLayerEdit.Equals(1) || item.ThisLayerEdit.Equals(3)) && user.ThisLayerEdit.Equals(1)) resultItem.thisLayerEdit = 1;
|
||
else if ((item.ThisLayerEdit.Equals(1) || item.ThisLayerEdit.Equals(3)) && user.ThisLayerEdit.Equals(0)) resultItem.thisLayerEdit = 0;
|
||
else if (item.ThisLayerEdit.Equals(0) && user.ThisLayerEdit.Equals(1)) resultItem.thisLayerEdit = 2;
|
||
else if (item.ThisLayerEdit.Equals(0) && user.ThisLayerEdit.Equals(3)) resultItem.thisLayerEdit = 3;
|
||
|
||
if (item.ThisLayerDelete.Equals(0) && user.ThisLayerDelete.Equals(0)) resultItem.thisLayerDelete = -1;
|
||
else if ((item.ThisLayerDelete.Equals(1) || item.ThisLayerDelete.Equals(3)) && user.ThisLayerDelete.Equals(1)) resultItem.thisLayerDelete = 1;
|
||
else if ((item.ThisLayerDelete.Equals(1) || item.ThisLayerDelete.Equals(3)) && user.ThisLayerDelete.Equals(0)) resultItem.thisLayerDelete = 0;
|
||
else if (item.ThisLayerDelete.Equals(0) && user.ThisLayerDelete.Equals(1)) resultItem.thisLayerDelete = 2;
|
||
else if (item.ThisLayerDelete.Equals(0) && user.ThisLayerDelete.Equals(3)) resultItem.thisLayerDelete = 3;
|
||
|
||
if (item.ThisLayerSelect.Equals(0) && user.ThisLayerSelect.Equals(0)) resultItem.thisLayerSelect = -1;
|
||
else if ((item.ThisLayerSelect.Equals(1) || item.ThisLayerSelect.Equals(3)) && user.ThisLayerSelect.Equals(1)) resultItem.thisLayerSelect = 1;
|
||
else if ((item.ThisLayerSelect.Equals(1) || item.ThisLayerSelect.Equals(3)) && user.ThisLayerSelect.Equals(0)) resultItem.thisLayerSelect = 0;
|
||
else if (item.ThisLayerSelect.Equals(0) && user.ThisLayerSelect.Equals(1)) resultItem.thisLayerSelect = 2;
|
||
else if (item.ThisLayerSelect.Equals(0) && user.ThisLayerSelect.Equals(3)) resultItem.thisLayerSelect = 3;
|
||
|
||
if (item.SubLayerAdd.Equals(0) && user.SubLayerAdd.Equals(0)) resultItem.subLayerAdd = -1;
|
||
else if ((item.SubLayerAdd.Equals(1) || item.SubLayerAdd.Equals(3)) && user.SubLayerAdd.Equals(1)) resultItem.subLayerAdd = 1;
|
||
else if ((item.SubLayerAdd.Equals(1) || item.SubLayerAdd.Equals(3)) && user.SubLayerAdd.Equals(0)) resultItem.subLayerAdd = 0;
|
||
else if (item.SubLayerAdd.Equals(0) && user.SubLayerAdd.Equals(1)) resultItem.subLayerAdd = 2;
|
||
else if (item.SubLayerAdd.Equals(0) && user.SubLayerAdd.Equals(3)) resultItem.subLayerAdd = 3;
|
||
|
||
if (item.SubLayerEdit.Equals(0) && user.SubLayerEdit.Equals(0)) resultItem.subLayerEdit = -1;
|
||
else if ((item.SubLayerEdit.Equals(1) || item.SubLayerEdit.Equals(3)) && user.SubLayerEdit.Equals(1)) resultItem.subLayerEdit = 1;
|
||
else if ((item.SubLayerEdit.Equals(1) || item.SubLayerEdit.Equals(3)) && user.SubLayerEdit.Equals(0)) resultItem.subLayerEdit = 0;
|
||
else if (item.SubLayerEdit.Equals(0) && user.SubLayerEdit.Equals(1)) resultItem.subLayerEdit = 2;
|
||
else if (item.SubLayerEdit.Equals(0) && user.SubLayerEdit.Equals(3)) resultItem.subLayerEdit = 3;
|
||
|
||
if (item.SubLayerDelete.Equals(0) && user.SubLayerDelete.Equals(0)) resultItem.subLayerDelete = -1;
|
||
else if ((item.SubLayerDelete.Equals(1) || item.SubLayerDelete.Equals(3)) && user.SubLayerDelete.Equals(1)) resultItem.subLayerDelete = 1;
|
||
else if ((item.SubLayerDelete.Equals(1) || item.SubLayerDelete.Equals(3)) && user.SubLayerDelete.Equals(0)) resultItem.subLayerDelete = 0;
|
||
else if (item.SubLayerDelete.Equals(0) && user.SubLayerDelete.Equals(1)) resultItem.subLayerDelete = 2;
|
||
else if (item.SubLayerDelete.Equals(0) && user.SubLayerDelete.Equals(3)) resultItem.subLayerDelete = 3;
|
||
|
||
if (item.SubLayerSelect.Equals(0) && user.SubLayerSelect.Equals(0)) resultItem.subLayerSelect = -1;
|
||
else if ((item.SubLayerSelect.Equals(1) || item.SubLayerSelect.Equals(3)) && user.SubLayerSelect.Equals(1)) resultItem.subLayerSelect = 1;
|
||
else if ((item.SubLayerSelect.Equals(1) || item.SubLayerSelect.Equals(3)) && user.SubLayerSelect.Equals(0)) resultItem.subLayerSelect = 0;
|
||
else if (item.SubLayerSelect.Equals(0) && user.SubLayerSelect.Equals(1)) resultItem.subLayerSelect = 2;
|
||
else if (item.SubLayerSelect.Equals(0) && user.SubLayerSelect.Equals(3)) resultItem.subLayerSelect = 3;
|
||
}
|
||
else
|
||
{
|
||
resultItem.thisLayerAdd = item.ThisLayerAdd.Equals(1) || item.ThisLayerAdd.Equals(3) ? resultItem.thisLayerAdd = 0 : resultItem.thisLayerAdd = -1;
|
||
resultItem.thisLayerEdit = item.ThisLayerEdit.Equals(1) || item.ThisLayerEdit.Equals(3) ? resultItem.thisLayerEdit = 0 : resultItem.thisLayerEdit = -1;
|
||
resultItem.thisLayerDelete = item.ThisLayerDelete.Equals(1) || item.ThisLayerDelete.Equals(3) ? resultItem.thisLayerDelete = 0 : resultItem.thisLayerDelete = -1;
|
||
resultItem.thisLayerSelect = item.ThisLayerSelect.Equals(1) || item.ThisLayerSelect.Equals(3) ? resultItem.thisLayerSelect = 0 : resultItem.thisLayerSelect = -1;
|
||
resultItem.subLayerAdd = item.SubLayerAdd.Equals(1) || item.SubLayerAdd.Equals(3) ? resultItem.subLayerAdd = 0 : resultItem.subLayerAdd = -1;
|
||
resultItem.subLayerEdit = item.SubLayerEdit.Equals(1) || item.SubLayerEdit.Equals(3) ? resultItem.subLayerEdit = 0 : resultItem.subLayerEdit = -1;
|
||
resultItem.subLayerDelete = item.SubLayerDelete.Equals(1) || item.SubLayerDelete.Equals(3) ? resultItem.subLayerDelete = 0 : resultItem.subLayerDelete = -1;
|
||
resultItem.subLayerSelect = item.SubLayerSelect.Equals(1) || item.SubLayerSelect.Equals(3) ? resultItem.subLayerSelect = 0 : resultItem.subLayerSelect = -1;
|
||
}
|
||
|
||
result.Add(resultItem);
|
||
});
|
||
|
||
userList.ForEach(userItem =>
|
||
{
|
||
var adminItem = adminList.Find(x => x.OrganizeId.Equals(userItem.OrganizeId));
|
||
if (adminItem == null)
|
||
{
|
||
var orgItem = orgTreeNameList.Find(x => x.Id.Equals(userItem.OrganizeId));
|
||
var resultItem = new OrganizeAdministratorSelectorOutput();
|
||
resultItem.id = orgItem.Id;
|
||
resultItem.organizeId = orgItem.Id;
|
||
resultItem.fullName = orgItem.Description;
|
||
resultItem.parentId = orgItem.ParentId;
|
||
resultItem.category = orgItem.Category;
|
||
resultItem.icon = orgItem.Category.Equals("company") ? "icon-ym icon-ym-tree-organization3" : "icon-ym icon-ym-tree-department1";
|
||
resultItem.organizeIdTree = orgItem.OrganizeIdTree;
|
||
|
||
if (userItem.ThisLayerAdd.Equals(0)) resultItem.thisLayerAdd = -1;
|
||
else if (userItem.ThisLayerAdd.Equals(1)) resultItem.thisLayerAdd = 2;
|
||
else if (userItem.ThisLayerAdd.Equals(3) || userItem.ThisLayerAdd.Equals(1)) resultItem.thisLayerAdd = 3;
|
||
|
||
if (userItem.ThisLayerEdit.Equals(0)) resultItem.thisLayerEdit = -1;
|
||
else if (userItem.ThisLayerEdit.Equals(1)) resultItem.thisLayerEdit = 2;
|
||
else if (userItem.ThisLayerEdit.Equals(3) || userItem.ThisLayerEdit.Equals(1)) resultItem.thisLayerEdit = 3;
|
||
|
||
if (userItem.ThisLayerDelete.Equals(0)) resultItem.thisLayerDelete = -1;
|
||
else if (userItem.ThisLayerDelete.Equals(1)) resultItem.thisLayerDelete = 2;
|
||
else if (userItem.ThisLayerDelete.Equals(3) || userItem.ThisLayerDelete.Equals(1)) resultItem.thisLayerDelete = 3;
|
||
|
||
if (userItem.ThisLayerSelect.Equals(0)) resultItem.thisLayerSelect = -1;
|
||
else if (userItem.ThisLayerSelect.Equals(1)) resultItem.thisLayerSelect = 2;
|
||
else if (userItem.ThisLayerSelect.Equals(3) || userItem.ThisLayerSelect.Equals(1)) resultItem.thisLayerSelect = 3;
|
||
|
||
if (userItem.SubLayerAdd.Equals(0)) resultItem.subLayerAdd = -1;
|
||
else if (userItem.SubLayerAdd.Equals(1)) resultItem.subLayerAdd = 2;
|
||
else if (userItem.SubLayerAdd.Equals(3) || userItem.SubLayerAdd.Equals(1)) resultItem.subLayerAdd = 3;
|
||
|
||
if (userItem.SubLayerEdit.Equals(0)) resultItem.subLayerEdit = -1;
|
||
else if (userItem.SubLayerEdit.Equals(1)) resultItem.subLayerEdit = 2;
|
||
else if (userItem.SubLayerEdit.Equals(3) || userItem.SubLayerEdit.Equals(1)) resultItem.subLayerEdit = 3;
|
||
|
||
if (userItem.SubLayerDelete.Equals(0)) resultItem.subLayerDelete = -1;
|
||
else if (userItem.SubLayerDelete.Equals(1)) resultItem.subLayerDelete = 2;
|
||
else if (userItem.SubLayerDelete.Equals(3) || userItem.SubLayerDelete.Equals(1)) resultItem.subLayerDelete = 3;
|
||
|
||
if (userItem.SubLayerSelect.Equals(0)) resultItem.subLayerSelect = -1;
|
||
else if (userItem.SubLayerSelect.Equals(1)) resultItem.subLayerSelect = 2;
|
||
else if (userItem.SubLayerSelect.Equals(3) || userItem.SubLayerSelect.Equals(1)) resultItem.subLayerSelect = 3;
|
||
|
||
if (!result.Any(x => x.organizeId.Equals(resultItem.organizeId))) result.Add(resultItem);
|
||
}
|
||
});
|
||
|
||
// 组织断层处理
|
||
result.Where(x => x.parentId != "-1").OrderByDescending(x => x.organizeIdTree.Length).ToList().ForEach(item =>
|
||
{
|
||
if (!result.Any(x => x.id.Equals(item.parentId)))
|
||
{
|
||
var pItem = result.Find(x => x.id != item.id && item.organizeIdTree.Contains(x.organizeIdTree));
|
||
if (pItem != null)
|
||
{
|
||
item.parentId = pItem.id;
|
||
item.fullName = item.fullName.Replace(pItem.fullName + "/", string.Empty);
|
||
}
|
||
else
|
||
{
|
||
item.parentId = "-1";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var pItem = result.Find(x => x.id.Equals(item.parentId));
|
||
item.fullName = item.fullName.Replace(pItem.fullName + "/", string.Empty);
|
||
}
|
||
});
|
||
|
||
var res = result.ToTree("-1");
|
||
|
||
res.ToObject<List<Dictionary<string, object>>>().ForEach(item =>
|
||
{
|
||
if (item.ContainsValue(-1))
|
||
foreach (var key in item.Where(x => x.Value.Equals(-1))) item.Remove(key.Key);
|
||
});
|
||
|
||
return new { list = res };
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region POST
|
||
|
||
/// <summary>
|
||
/// 更新机构分级管理.
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPut("{id}")]
|
||
[UnitOfWork]
|
||
public async Task Update([FromBody] OrganizeAdminIsTratorUpInput input)
|
||
{
|
||
if (!_userManager.DataScope.Any(it => it.organizeId == input.organizeId && it.Edit) && !_userManager.IsAdministrator)
|
||
throw Oops.Oh(ErrorCode.D1013);
|
||
List<string>? oldUserIds = await _repository.AsQueryable().Where(it => it.OrganizeId == input.organizeId && it.DeleteMark == null).Select(it => it.UserId).ToListAsync();
|
||
|
||
// 计算旧用户数组与新用户数组差
|
||
List<string>? addList = input.userId.Split(',').Except(oldUserIds).ToList();
|
||
List<string>? editList = input.userId.Split(',').Intersect(oldUserIds).ToList();
|
||
List<string>? delList = oldUserIds.Except(input.userId.Split(',')).ToList();
|
||
|
||
// 创建新数据
|
||
if (addList.Count > 0)
|
||
{
|
||
List<OrganizeAdministratorEntity>? addEntityList = new List<OrganizeAdministratorEntity>();
|
||
addList.ForEach(it =>
|
||
{
|
||
OrganizeAdministratorEntity entity = input.Adapt<OrganizeAdministratorEntity>();
|
||
entity.UserId = it;
|
||
addEntityList.Add(entity);
|
||
});
|
||
await _repository.AsSugarClient().Insertable(addEntityList).CallEntityMethod(m => m.Creator()).ExecuteCommandAsync();
|
||
}
|
||
|
||
// 修改旧数据
|
||
if (editList.Count > 0)
|
||
{
|
||
List<OrganizeAdministratorEntity>? editEntityList = await _repository.AsQueryable().Where(it => it.OrganizeId == input.organizeId && editList.Contains(SqlFunc.ToString(it.UserId))).ToListAsync();
|
||
editEntityList.ForEach(it =>
|
||
{
|
||
it.ThisLayerAdd = Convert.ToInt32(input.thisLayerAdd);
|
||
it.ThisLayerEdit = Convert.ToInt32(input.thisLayerEdit);
|
||
it.ThisLayerDelete = Convert.ToInt32(input.thisLayerDelete);
|
||
it.SubLayerAdd = Convert.ToInt32(input.subLayerAdd);
|
||
it.SubLayerEdit = Convert.ToInt32(input.subLayerEdit);
|
||
it.SubLayerDelete = Convert.ToInt32(input.subLayerDelete);
|
||
it.LastModifyTime = DateTime.Now;
|
||
it.LastModifyUserId = _userManager.UserId;
|
||
});
|
||
await _repository.AsSugarClient().Updateable(editEntityList).UpdateColumns(it => new
|
||
{
|
||
it.ThisLayerAdd,
|
||
it.ThisLayerEdit,
|
||
it.ThisLayerDelete,
|
||
it.SubLayerAdd,
|
||
it.SubLayerEdit,
|
||
it.SubLayerDelete,
|
||
it.LastModifyTime,
|
||
it.LastModifyUserId
|
||
}).ExecuteCommandAsync();
|
||
}
|
||
|
||
// 删除旧数据
|
||
if (delList.Count > 0)
|
||
{
|
||
await _repository.AsSugarClient().Updateable<OrganizeAdministratorEntity>().SetColumns(it => new OrganizeAdministratorEntity()
|
||
{
|
||
EnabledMark = 0,
|
||
DeleteMark = 1,
|
||
DeleteTime = SqlFunc.GetDate(),
|
||
DeleteUserId = _userManager.UserId
|
||
}).Where(it => delList.Contains(SqlFunc.ToString(it.UserId)) && it.OrganizeId == input.organizeId).ExecuteCommandAsync();
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更新机构分级管理.
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost("")]
|
||
[UnitOfWork]
|
||
public async Task Save([FromBody] OrganizeAdminIsTratorUpInput input)
|
||
{
|
||
if (input.userId.Equals(_userManager.UserId)) throw Oops.Oh(ErrorCode.D2304);
|
||
|
||
// 处理组织树 名称
|
||
List<OrganizeEntity> orgTreeNameList = GetOrgListTreeName();
|
||
|
||
// 获取当前有权限的组织
|
||
var currList = await _repository.AsSugarClient().Queryable<OrganizeAdministratorEntity>().Where(x => orgTreeNameList.Select(xx => xx.Id).Contains(x.OrganizeId)).ToListAsync();
|
||
|
||
// 用户旧权限
|
||
var oldList = currList.Where(x => x.ThisLayerAdd.Equals(1) || x.ThisLayerEdit.Equals(1) || x.ThisLayerDelete.Equals(1) || x.ThisLayerSelect.Equals(1) ||
|
||
x.SubLayerAdd.Equals(1) || x.SubLayerEdit.Equals(1) || x.SubLayerDelete.Equals(1) || x.SubLayerSelect.Equals(1)).Where(x => x.UserId.Equals(input.userId)).ToList().Copy();
|
||
oldList.Where(x => x.SubLayerAdd.Equals(1) || x.SubLayerEdit.Equals(1) || x.SubLayerDelete.Equals(1) || x.SubLayerSelect.Equals(1)).ToList().ForEach(item =>
|
||
{
|
||
var orgIds = orgTreeNameList.Where(x => x.OrganizeIdTree.Contains(item.OrganizeId) && !x.Id.Equals(item.OrganizeId)).Select(x => x.Id).ToList();
|
||
var subList = currList.Where(x => orgIds.Contains(x.OrganizeId) && x.UserId.Equals(_userManager.UserId)).ToList().Copy();
|
||
|
||
subList.ForEach(it =>
|
||
{
|
||
var userIt = oldList.Find(x => x.OrganizeId.Equals(it.OrganizeId));
|
||
if (userIt == null)
|
||
{
|
||
it.ThisLayerAdd = item.SubLayerAdd.Equals(1) ? 3 : 0;
|
||
it.ThisLayerEdit = item.SubLayerEdit.Equals(1) ? 3 : 0;
|
||
it.ThisLayerDelete = item.SubLayerDelete.Equals(1) ? 3 : 0;
|
||
it.ThisLayerSelect = item.SubLayerSelect.Equals(1) ? 3 : 0;
|
||
it.SubLayerAdd = item.SubLayerAdd.Equals(1) ? 3 : 0;
|
||
it.SubLayerEdit = item.SubLayerEdit.Equals(1) ? 3 : 0;
|
||
it.SubLayerDelete = item.SubLayerDelete.Equals(1) ? 3 : 0;
|
||
it.SubLayerSelect = item.SubLayerSelect.Equals(1) ? 3 : 0;
|
||
}
|
||
else
|
||
{
|
||
it.ThisLayerAdd = userIt.ThisLayerAdd.Equals(1) ? 1 : item.SubLayerAdd.Equals(1) ? 3 : 0;
|
||
it.ThisLayerEdit = userIt.ThisLayerEdit.Equals(1) ? 1 : item.SubLayerEdit.Equals(1) ? 3 : 0;
|
||
it.ThisLayerDelete = userIt.ThisLayerDelete.Equals(1) ? 1 : item.SubLayerDelete.Equals(1) ? 3 : 0;
|
||
it.ThisLayerSelect = userIt.ThisLayerSelect.Equals(1) ? 1 : item.SubLayerSelect.Equals(1) ? 3 : 0;
|
||
it.SubLayerAdd = userIt.SubLayerAdd.Equals(1) ? 1 : item.SubLayerAdd.Equals(1) ? 3 : 0;
|
||
it.SubLayerEdit = userIt.SubLayerEdit.Equals(1) ? 1 : item.SubLayerEdit.Equals(1) ? 3 : 0;
|
||
it.SubLayerDelete = userIt.SubLayerDelete.Equals(1) ? 1 : item.SubLayerDelete.Equals(1) ? 3 : 0;
|
||
it.SubLayerSelect = userIt.SubLayerSelect.Equals(1) ? 1 : item.SubLayerSelect.Equals(1) ? 3 : 0;
|
||
oldList.Remove(userIt);
|
||
}
|
||
});
|
||
|
||
oldList.AddRange(subList);
|
||
});
|
||
|
||
// 管理员权限
|
||
var adminList = currList.Where(x => x.ThisLayerAdd.Equals(1) || x.ThisLayerEdit.Equals(1) || x.ThisLayerDelete.Equals(1) || x.ThisLayerSelect.Equals(1) ||
|
||
x.SubLayerAdd.Equals(1) || x.SubLayerEdit.Equals(1) || x.SubLayerDelete.Equals(1) || x.SubLayerSelect.Equals(1)).Where(x => x.UserId.Equals(_userManager.UserId)).ToList().Copy();
|
||
adminList.Where(x => x.SubLayerAdd.Equals(1) || x.SubLayerEdit.Equals(1) || x.SubLayerDelete.Equals(1) || x.SubLayerSelect.Equals(1)).ToList().ForEach(item =>
|
||
{
|
||
var orgIds = orgTreeNameList.Where(x => x.OrganizeIdTree.Contains(item.OrganizeId) && !x.Id.Equals(item.OrganizeId)).Select(x => x.Id).ToList();
|
||
var subList = currList.Where(x => orgIds.Contains(x.OrganizeId) && x.UserId.Equals(_userManager.UserId)).ToList().Copy();
|
||
|
||
subList.ForEach(it =>
|
||
{
|
||
var adminIt = adminList.Find(x => x.OrganizeId.Equals(it.OrganizeId));
|
||
if (adminIt == null)
|
||
{
|
||
it.ThisLayerAdd = item.SubLayerAdd.Equals(1) ? 3 : 0;
|
||
it.ThisLayerEdit = item.SubLayerEdit.Equals(1) ? 3 : 0;
|
||
it.ThisLayerDelete = item.SubLayerDelete.Equals(1) ? 3 : 0;
|
||
it.ThisLayerSelect = item.SubLayerSelect.Equals(1) ? 3 : 0;
|
||
it.SubLayerAdd = item.SubLayerAdd.Equals(1) ? 3 : 0;
|
||
it.SubLayerEdit = item.SubLayerEdit.Equals(1) ? 3 : 0;
|
||
it.SubLayerDelete = item.SubLayerDelete.Equals(1) ? 3 : 0;
|
||
it.SubLayerSelect = item.SubLayerSelect.Equals(1) ? 3 : 0;
|
||
}
|
||
else
|
||
{
|
||
it.ThisLayerAdd = adminIt.ThisLayerAdd.Equals(1) ? 1 : item.SubLayerAdd.Equals(1) ? 3 : 0;
|
||
it.ThisLayerEdit = adminIt.ThisLayerEdit.Equals(1) ? 1 : item.SubLayerEdit.Equals(1) ? 3 : 0;
|
||
it.ThisLayerDelete = adminIt.ThisLayerDelete.Equals(1) ? 1 : item.SubLayerDelete.Equals(1) ? 3 : 0;
|
||
it.ThisLayerSelect = adminIt.ThisLayerSelect.Equals(1) ? 1 : item.SubLayerSelect.Equals(1) ? 3 : 0;
|
||
it.SubLayerAdd = adminIt.SubLayerAdd.Equals(1) ? 1 : item.SubLayerAdd.Equals(1) ? 3 : 0;
|
||
it.SubLayerEdit = adminIt.SubLayerEdit.Equals(1) ? 1 : item.SubLayerEdit.Equals(1) ? 3 : 0;
|
||
it.SubLayerDelete = adminIt.SubLayerDelete.Equals(1) ? 1 : item.SubLayerDelete.Equals(1) ? 3 : 0;
|
||
it.SubLayerSelect = adminIt.SubLayerSelect.Equals(1) ? 1 : item.SubLayerSelect.Equals(1) ? 3 : 0;
|
||
oldList.Remove(adminIt);
|
||
}
|
||
});
|
||
|
||
adminList.AddRange(subList);
|
||
});
|
||
|
||
var itemList = GetOrganizeAdministrators(input.orgAdminModel, input.userId, oldList, adminList);
|
||
|
||
try
|
||
{
|
||
await _repository.AsSugarClient().Deleteable<OrganizeAdministratorEntity>().Where(x => SqlFunc.ToString(x.UserId).Equals(input.userId)).ExecuteCommandAsync();
|
||
if (itemList.Any()) await _repository.AsSugarClient().Insertable(itemList).CallEntityMethod(m => m.Create()).ExecuteCommandAsync();
|
||
}
|
||
catch
|
||
{
|
||
if (input.id.IsNotEmptyOrNull()) throw Oops.Oh(ErrorCode.D2300);
|
||
else throw Oops.Oh(ErrorCode.D2301);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除.
|
||
/// </summary>
|
||
/// <param name="id">主键.</param>
|
||
/// <returns></returns>
|
||
[HttpDelete("{id}")]
|
||
public async Task Delete(string id)
|
||
{
|
||
var entityList = await _repository.GetListAsync(r => r.UserId == id && r.DeleteMark == null);
|
||
_ = entityList ?? throw Oops.Oh(ErrorCode.D2302);
|
||
|
||
await _repository.AsSugarClient().Deleteable(entityList).ExecuteCommandAsync();
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region PublicMethod
|
||
|
||
/// <summary>
|
||
/// 获取用户数据范围.
|
||
/// </summary>
|
||
/// <param name="userId"></param>
|
||
/// <returns></returns>
|
||
[NonAction]
|
||
public async Task<List<UserDataScopeModel>> GetUserDataScopeModel(string userId)
|
||
{
|
||
List<UserDataScopeModel> data = new List<UserDataScopeModel>();
|
||
List<UserDataScopeModel> subData = new List<UserDataScopeModel>();
|
||
List<UserDataScopeModel> inteList = new List<UserDataScopeModel>();
|
||
List<OrganizeAdministratorEntity>? list = await _repository.AsQueryable().Where(it => SqlFunc.ToString(it.UserId) == userId && it.DeleteMark == null).ToListAsync();
|
||
|
||
// 填充数据
|
||
foreach (OrganizeAdministratorEntity? item in list)
|
||
{
|
||
if (item.SubLayerAdd.ParseToBool() || item.SubLayerEdit.ParseToBool() || item.SubLayerDelete.ParseToBool())
|
||
{
|
||
List<string>? subsidiary = await _organizeService.GetSubsidiary(item.OrganizeId);
|
||
subsidiary.Remove(item.OrganizeId);
|
||
subsidiary.ForEach(it =>
|
||
{
|
||
subData.Add(new UserDataScopeModel()
|
||
{
|
||
organizeId = it,
|
||
Add = item.SubLayerAdd.ParseToBool(),
|
||
Edit = item.SubLayerEdit.ParseToBool(),
|
||
Delete = item.SubLayerDelete.ParseToBool()
|
||
});
|
||
});
|
||
}
|
||
|
||
if (item.ThisLayerAdd.ParseToBool() || item.ThisLayerEdit.ParseToBool() || item.ThisLayerDelete.ParseToBool())
|
||
{
|
||
data.Add(new UserDataScopeModel()
|
||
{
|
||
organizeId = item.OrganizeId,
|
||
Add = item.ThisLayerAdd.ParseToBool(),
|
||
Edit = item.ThisLayerEdit.ParseToBool(),
|
||
Delete = item.ThisLayerDelete.ParseToBool()
|
||
});
|
||
}
|
||
}
|
||
|
||
/* 比较数据
|
||
所有分级数据权限以本级权限为主 子级为辅
|
||
将本级数据与子级数据对比 对比出子级数据内组织ID存在本级数据的组织ID*/
|
||
List<string>? intersection = data.Select(it => it.organizeId).Intersect(subData.Select(it => it.organizeId)).ToList();
|
||
intersection.ForEach(it =>
|
||
{
|
||
UserDataScopeModel? parent = data.Find(item => item.organizeId == it);
|
||
UserDataScopeModel? child = subData.Find(item => item.organizeId == it);
|
||
bool add = false;
|
||
bool edit = false;
|
||
bool delete = false;
|
||
if (parent.Add || child.Add) add = true;
|
||
if (parent.Edit || child.Edit) edit = true;
|
||
if (parent.Delete || child.Delete) delete = true;
|
||
inteList.Add(new UserDataScopeModel()
|
||
{
|
||
organizeId = it,
|
||
Add = add,
|
||
Edit = edit,
|
||
Delete = delete
|
||
});
|
||
data.Remove(parent);
|
||
subData.Remove(child);
|
||
});
|
||
return data.Union(subData).Union(inteList).ToList();
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region PrivateMethod
|
||
|
||
/// <summary>
|
||
/// 处理组织树 名称.
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
private List<OrganizeEntity> GetOrgListTreeName()
|
||
{
|
||
List<OrganizeEntity>? orgTreeNameList = new List<OrganizeEntity>();
|
||
List<OrganizeEntity>? orgList = _repository.AsSugarClient().Queryable<OrganizeEntity>().Where(x => x.DeleteMark == null && x.EnabledMark == 1).ToList();
|
||
orgList.ForEach(item =>
|
||
{
|
||
if (item.OrganizeIdTree.IsNullOrEmpty()) item.OrganizeIdTree = item.Id;
|
||
OrganizeEntity? newItem = item.Adapt<OrganizeEntity>();
|
||
newItem.Id = item.Id;
|
||
var orgNameList = new List<string>();
|
||
item.OrganizeIdTree.Split(",").ToList().ForEach(it =>
|
||
{
|
||
var org = orgList.Find(x => x.Id == it);
|
||
if (org != null) orgNameList.Add(org.FullName);
|
||
});
|
||
newItem.Description = string.Join("/", orgNameList);
|
||
orgTreeNameList.Add(newItem);
|
||
});
|
||
|
||
return orgTreeNameList;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 递归处理 获取所有组织权限,根据前端参数 orgAdminList.
|
||
/// </summary>
|
||
/// <param name="orgAdminList"></param>
|
||
/// <param name="userId"></param>
|
||
/// <param name="oldList"></param>
|
||
/// <param name="adminList"></param>
|
||
/// <returns></returns>
|
||
private List<OrganizeAdministratorEntity> GetOrganizeAdministrators(List<OrganizeAdminCrInput> orgAdminList, string userId, List<OrganizeAdministratorEntity> oldList, List<OrganizeAdministratorEntity> adminList)
|
||
{
|
||
if (!_userManager.IsAdministrator)
|
||
{
|
||
var addItems = new List<OrganizeAdminCrInput>();
|
||
orgAdminList.ForEach(item =>
|
||
{
|
||
var oldItem = oldList.Find(x => x.OrganizeId.Equals(item.organizeId));
|
||
var adminItem = adminList.Find(x => x.OrganizeId.Equals(item.organizeId));
|
||
if (oldItem != null)
|
||
{
|
||
if (adminItem != null)
|
||
{
|
||
item.thisLayerAdd = adminItem.ThisLayerAdd.Equals(1) ? item.thisLayerAdd : oldItem.ThisLayerAdd;
|
||
item.thisLayerDelete = adminItem.ThisLayerDelete.Equals(1) ? item.thisLayerDelete : oldItem.ThisLayerDelete;
|
||
item.thisLayerEdit = adminItem.ThisLayerEdit.Equals(1) ? item.thisLayerEdit : oldItem.ThisLayerEdit;
|
||
item.thisLayerSelect = adminItem.ThisLayerSelect.Equals(1) ? item.thisLayerSelect : oldItem.ThisLayerSelect;
|
||
item.subLayerAdd = adminItem.SubLayerAdd.Equals(1) ? item.subLayerAdd : oldItem.SubLayerAdd;
|
||
item.subLayerDelete = adminItem.SubLayerDelete.Equals(1) ? item.subLayerDelete : oldItem.SubLayerDelete;
|
||
item.subLayerEdit = adminItem.SubLayerEdit.Equals(1) ? item.subLayerEdit : oldItem.SubLayerEdit;
|
||
item.subLayerSelect = adminItem.SubLayerSelect.Equals(1) ? item.subLayerSelect : oldItem.SubLayerSelect;
|
||
}
|
||
else
|
||
{
|
||
item.thisLayerAdd = oldItem.ThisLayerAdd.Equals(1) || oldItem.ThisLayerAdd.Equals(2) ? 1 : item.thisLayerAdd;
|
||
item.thisLayerDelete = oldItem.ThisLayerDelete.Equals(1) || oldItem.ThisLayerDelete.Equals(2) ? 1 : item.thisLayerDelete;
|
||
item.thisLayerEdit = oldItem.ThisLayerEdit.Equals(1) || oldItem.ThisLayerEdit.Equals(2) ? 1 : item.thisLayerEdit;
|
||
item.thisLayerSelect = oldItem.ThisLayerSelect.Equals(1) || oldItem.ThisLayerSelect.Equals(2) ? 1 : item.thisLayerSelect;
|
||
item.subLayerAdd = oldItem.SubLayerAdd.Equals(1) || oldItem.SubLayerAdd.Equals(2) ? 1 : item.subLayerAdd;
|
||
item.subLayerDelete = oldItem.SubLayerDelete.Equals(1) || oldItem.SubLayerDelete.Equals(2) ? 1 : item.subLayerDelete;
|
||
item.subLayerEdit = oldItem.SubLayerEdit.Equals(1) || oldItem.SubLayerEdit.Equals(2) ? 1 : item.subLayerEdit;
|
||
item.subLayerSelect = oldItem.SubLayerSelect.Equals(1) || oldItem.SubLayerSelect.Equals(2) ? 1 : item.subLayerSelect;
|
||
}
|
||
}
|
||
});
|
||
oldList.ForEach(item =>
|
||
{
|
||
if (!orgAdminList.Any(x => x.organizeId.Equals(item.OrganizeId)) && !adminList.Any(x => x.OrganizeId.Equals(item.OrganizeId)))
|
||
{
|
||
addItems.Add(new OrganizeAdminCrInput()
|
||
{
|
||
userId = item.UserId,
|
||
organizeId = item.OrganizeId,
|
||
thisLayerAdd = item.ThisLayerAdd,
|
||
thisLayerDelete = item.ThisLayerDelete,
|
||
thisLayerEdit = item.ThisLayerEdit,
|
||
thisLayerSelect = item.ThisLayerSelect,
|
||
subLayerAdd = item.SubLayerAdd,
|
||
subLayerDelete = item.SubLayerDelete,
|
||
subLayerEdit = item.SubLayerEdit,
|
||
subLayerSelect = item.SubLayerSelect,
|
||
});
|
||
}
|
||
});
|
||
orgAdminList.AddRange(addItems);
|
||
}
|
||
|
||
var resList = new List<OrganizeAdministratorEntity>();
|
||
|
||
orgAdminList.ForEach(item =>
|
||
{
|
||
resList.Add(new OrganizeAdministratorEntity()
|
||
{
|
||
UserId = userId,
|
||
OrganizeId = item.organizeId,
|
||
ThisLayerAdd = item.thisLayerAdd.Equals(1) || item.thisLayerAdd.Equals(2) ? 1 : 0,
|
||
ThisLayerDelete = item.thisLayerDelete.Equals(1) || item.thisLayerDelete.Equals(2) ? 1 : 0,
|
||
ThisLayerEdit = item.thisLayerEdit.Equals(1) || item.thisLayerEdit.Equals(2) ? 1 : 0,
|
||
ThisLayerSelect = item.thisLayerSelect.Equals(1) || item.thisLayerSelect.Equals(2) ? 1 : 0,
|
||
SubLayerAdd = item.subLayerAdd.Equals(1) || item.subLayerAdd.Equals(2) ? 1 : 0,
|
||
SubLayerDelete = item.subLayerDelete.Equals(1) || item.subLayerDelete.Equals(2) ? 1 : 0,
|
||
SubLayerEdit = item.subLayerEdit.Equals(1) || item.subLayerEdit.Equals(2) ? 1 : 0,
|
||
SubLayerSelect = item.subLayerSelect.Equals(1) || item.subLayerSelect.Equals(2) ? 1 : 0
|
||
});
|
||
|
||
if (item.children != null && item.children.Any())
|
||
{
|
||
var children = GetOrganizeAdministrators(item.children.ToObject<List<OrganizeAdminCrInput>>(), userId, oldList, adminList);
|
||
resList.AddRange(children);
|
||
}
|
||
});
|
||
|
||
return resList;
|
||
}
|
||
|
||
#endregion
|
||
} |