添加项目文件。
This commit is contained in:
818
system/Tnb.Systems/Permission/OrganizeAdministratorService.cs
Normal file
818
system/Tnb.Systems/Permission/OrganizeAdministratorService.cs
Normal file
@@ -0,0 +1,818 @@
|
||||
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 => x.UserId).ToListAsync();
|
||||
|
||||
var data = await _repository.AsSugarClient().Queryable<UserEntity>()
|
||||
.Where(x => organizeAdmin.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));
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user