997 lines
51 KiB
C#
997 lines
51 KiB
C#
|
|
using APT.Infrastructure.Core;
|
|||
|
|
using APT.BaseData.Domain.ApiModel;
|
|||
|
|
using APT.BaseData.Domain.Entities.FM;
|
|||
|
|
using APT.BaseData.Domain.IServices.FM;
|
|||
|
|
using APT.Utility;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Linq.Expressions;
|
|||
|
|
using System.Collections.Immutable;
|
|||
|
|
using APT.BaseData.Domain.Entities;
|
|||
|
|
using APT.BaseData.Domain.Enums;
|
|||
|
|
using APT.Infrastructure.Api;
|
|||
|
|
using APT.MS.Domain.Entities.PF;
|
|||
|
|
using APT.BaseData.Domain.Dtos;
|
|||
|
|
using Castle.Core.Internal;
|
|||
|
|
|
|||
|
|
namespace APT.BaseData.Services.Services.FM
|
|||
|
|
{
|
|||
|
|
public partial class FMUserService : CommonService, IFMUserService
|
|||
|
|
{
|
|||
|
|
public FMUserService(IRepository repository)
|
|||
|
|
: base(repository)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public List<T_FM_USER> Login(string userName, string pwd)
|
|||
|
|
{
|
|||
|
|
var person = this.GetEntities<T_FM_USER>(i => i.CODE == userName && i.PASSWORD == pwd.Trim()).ToList();
|
|||
|
|
return person;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public UserRoleModel GetRolesByUser(Guid userId, KeywordFilter filter)
|
|||
|
|
{
|
|||
|
|
List<Guid> list = new List<Guid>();
|
|||
|
|
list.Add(userId);
|
|||
|
|
var result = GetRolesByUser(list, filter);
|
|||
|
|
if (result != null && result.Any())
|
|||
|
|
return result[0];
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public UserRoleModel AppGetRolesByUser(Guid userId, KeywordFilter filter)
|
|||
|
|
{
|
|||
|
|
List<Guid> list = new List<Guid>();
|
|||
|
|
list.Add(userId);
|
|||
|
|
var result = GetAppRolesByUser(list, filter);
|
|||
|
|
if (result != null && result.Any())
|
|||
|
|
return result[0];
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
public List<UserRoleModel> GetAppRolesByUser(IEnumerable<Guid> userIds, KeywordFilter filter)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
if (userIds == null || userIds.Count() <= 0) return null;
|
|||
|
|
var list = this.GetEntities<T_FM_USER>(t => userIds.Contains(t.ID), filter, new string[] { "Nav_BelongRoles.Nav_BelongRole",
|
|||
|
|
"Nav_Org","Nav_Department"}).ToList();
|
|||
|
|
List<UserRoleModel> result = new List<UserRoleModel>();
|
|||
|
|
List<T_FM_ROLE_GROUP> roleGroupList = null;
|
|||
|
|
List<T_FM_USER_GROUP> userGroupList = null;
|
|||
|
|
foreach (var user in list)
|
|||
|
|
{
|
|||
|
|
Dictionary<Guid, byte> existsUserGroupIds = new Dictionary<Guid, byte>();
|
|||
|
|
List<Guid> roleIds = new List<Guid>();
|
|||
|
|
if (user.Nav_BelongRoles != null && user.Nav_BelongRoles.Any())
|
|||
|
|
{
|
|||
|
|
var tmpList = user.Nav_BelongRoles.Where(x => x.Nav_BelongRole.PLATFORM_TYPE ==
|
|||
|
|
(int)PFPlatTypeEnum.APP).Select(t => t.BELONG_ROLE_ID).ToList();
|
|||
|
|
GetRoleByStr(tmpList, roleIds);
|
|||
|
|
}
|
|||
|
|
if (user.Nav_BelongRoleGroups != null && user.Nav_BelongRoleGroups.Any())
|
|||
|
|
{
|
|||
|
|
var tmpList = user.Nav_BelongRoleGroups.Select(t => t.BELONG_ROLE_GROUP_ID).ToList();
|
|||
|
|
GetRoleByRoleGroupStr(user.ORG_ID, tmpList, roleIds, ref roleGroupList);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (user.Nav_BelongUserGroups != null && user.Nav_BelongUserGroups.Any())
|
|||
|
|
{
|
|||
|
|
var tmpList = user.Nav_BelongUserGroups.Select(t => t.BELONG_USER_GROUP_ID).ToList();
|
|||
|
|
foreach (var s in tmpList)
|
|||
|
|
GetRoleByUserGroup(user.ORG_ID, s, existsUserGroupIds, ref userGroupList,
|
|||
|
|
ref roleGroupList, roleIds);
|
|||
|
|
}
|
|||
|
|
UserRoleModel userRoleModel = new UserRoleModel();
|
|||
|
|
userRoleModel.User = user;
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (roleIds.Any())
|
|||
|
|
{
|
|||
|
|
RolePerm rolePerm = new RolePerm();
|
|||
|
|
userRoleModel.Nav_RolePerm = rolePerm;
|
|||
|
|
|
|||
|
|
var roles = this.GetEntities<T_FM_ROLE>(t => roleIds.Contains(t.ID) && t.ENABLE_STATUS == 0, filter,
|
|||
|
|
new string[] { "Nav_MenuPermissions.Nav_PermissionForm" }).ToList();
|
|||
|
|
userRoleModel.Roles = roles;
|
|||
|
|
var menuIds = roles.SelectMany(i => i.Nav_MenuPermissions).Select(i => i?.MENU_ID).Distinct().ToList();
|
|||
|
|
if (!roles.Any(x => x.ROLE_TYPE == (int)PFUserTypeEnum.管理员))
|
|||
|
|
{
|
|||
|
|
foreach (var item in roles)
|
|||
|
|
{
|
|||
|
|
//表单授权
|
|||
|
|
if (item.Nav_MenuPermissions != null && item.Nav_MenuPermissions.Any())
|
|||
|
|
{
|
|||
|
|
foreach (var menu in item.Nav_MenuPermissions)
|
|||
|
|
{
|
|||
|
|
if (!menu.IS_PERMISSION || menu.Nav_PermissionForm == null) continue;
|
|||
|
|
var form = rolePerm.Nav_RolePermForms.Where(t => t.MenuId == menu.MENU_ID.ToString() && t.PermFormId == menu.PERMISSION_FORM_ID.ToString()).FirstOrDefault();
|
|||
|
|
if (form == null)
|
|||
|
|
{
|
|||
|
|
form = new PermMenuDto();
|
|||
|
|
form.PermFormId = menu.PERMISSION_FORM_ID.ToString();
|
|||
|
|
form.MenuId = menu.MENU_ID?.ToString();
|
|||
|
|
//form.Nav_PermForm = menu.Nav_PermissionForm;
|
|||
|
|
rolePerm.Nav_RolePermForms.Add(form);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//清空导航
|
|||
|
|
user.Nav_BelongRoleGroups = null;
|
|||
|
|
user.Nav_BelongRoles = null;
|
|||
|
|
user.Nav_BelongUserGroups = null;
|
|||
|
|
result.Add(userRoleModel);
|
|||
|
|
}
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw new Exception(LogHelper.GetCurSourceFileName() + " - " + LogHelper.GetLineNum() + ":" + ex.Message);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public List<UserRoleModel> GetRolesByUser(IEnumerable<Guid> userIds, KeywordFilter filter)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
if (userIds == null || userIds.Count() <= 0) return null;
|
|||
|
|
//var list = this.GetEntities<T_FM_USER>(t => userIds.Contains(t.ID));
|
|||
|
|
//if (list == null || !list.Any()) return null;
|
|||
|
|
//var def = list.FirstOrDefault();
|
|||
|
|
var list = this.GetEntities<T_FM_USER>(t => userIds.Contains(t.ID), filter, new string[] { "Nav_BelongRoles.Nav_BelongRole",
|
|||
|
|
"Nav_BelongRoleGroups.Nav_BelongRoleGroup",
|
|||
|
|
"Nav_BelongUserGroups.Nav_BelongUserGroup","Nav_Org","Nav_Department"}).ToList();
|
|||
|
|
//var userBelongRules = this.GetEntitiesByRedis<T_FM_USER_BELONG_ROLE>(def.ORG_ID ?? Guid.Empty);
|
|||
|
|
//var belongRules = this.GetEntitiesByRedis<T_FM_ROLE>(def.ORG_ID ?? Guid.Empty);
|
|||
|
|
//userBelongRules = userBelongRules.Where(i => userIds.Contains(i.USER_ID)).ToList();
|
|||
|
|
//foreach (var u in userBelongRules)
|
|||
|
|
//{
|
|||
|
|
// u.Nav_BelongRole = belongRules.FirstOrDefault(i => i.ID == u.BELONG_ROLE_ID);
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//var userBelongRuleGroups = this.GetEntitiesByRedis<T_FM_USER_BELONG_ROLE_GROUP>(def.ORG_ID ?? Guid.Empty);
|
|||
|
|
//var belongRuleGroups = this.GetEntitiesByRedis<T_FM_ROLE_GROUP>(def.ORG_ID ?? Guid.Empty);
|
|||
|
|
//userBelongRuleGroups = userBelongRuleGroups.Where(i => userIds.Contains(i.USER_ID)).ToList();
|
|||
|
|
//foreach (var u in userBelongRuleGroups)
|
|||
|
|
//{
|
|||
|
|
// u.Nav_BelongRoleGroup = belongRuleGroups.FirstOrDefault(i => i.ID == u.BELONG_ROLE_GROUP_ID);
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
//var userBelongUserGroups = this.GetEntitiesByRedis<T_FM_USER_BELONG_USER_GROUP>(def.ORG_ID ?? Guid.Empty);
|
|||
|
|
//var belongUserGroups = this.GetEntitiesByRedis<T_FM_USER_GROUP>(def.ORG_ID ?? Guid.Empty);
|
|||
|
|
//userBelongUserGroups = userBelongUserGroups.Where(i => userIds.Contains(i.USER_ID)).ToList();
|
|||
|
|
//foreach (var u in userBelongUserGroups)
|
|||
|
|
//{
|
|||
|
|
// u.Nav_BelongUserGroup = belongUserGroups.FirstOrDefault(i => i.ID == u.BELONG_USER_GROUP_ID);
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
//foreach (var l in list)
|
|||
|
|
//{
|
|||
|
|
// l.Nav_BelongRoles = userBelongRules.Where(i => i.USER_ID == l.ID).ToList();
|
|||
|
|
// l.Nav_BelongRoleGroups = userBelongRuleGroups.Where(i => i.USER_ID == l.ID).ToList();
|
|||
|
|
// l.Nav_BelongUserGroups = userBelongUserGroups.Where(i => i.USER_ID == l.ID).ToList();
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
|
|||
|
|
List<UserRoleModel> result = new List<UserRoleModel>();
|
|||
|
|
|
|||
|
|
//var roleService = ServiceUtils.GetCommonService<T_FM_ROLE>();
|
|||
|
|
//var roleGroupService = ServiceUtils.GetCommonService<T_FM_ROLE_GROUP>();
|
|||
|
|
//var userGroupService = ServiceUtils.GetCommonService<T_FM_USER_GROUP>();
|
|||
|
|
List<T_FM_ROLE_GROUP> roleGroupList = null;
|
|||
|
|
List<T_FM_USER_GROUP> userGroupList = null;
|
|||
|
|
foreach (var user in list)
|
|||
|
|
{
|
|||
|
|
Dictionary<Guid, byte> existsUserGroupIds = new Dictionary<Guid, byte>();
|
|||
|
|
List<Guid> roleIds = new List<Guid>();
|
|||
|
|
if (user.Nav_BelongRoles != null && user.Nav_BelongRoles.Any())
|
|||
|
|
{
|
|||
|
|
var tmpList = user.Nav_BelongRoles.Where(x => x.Nav_BelongRole.PLATFORM_TYPE == Convert.ToInt32(filter.Parameter3)).Select(t => t.BELONG_ROLE_ID).ToList();
|
|||
|
|
GetRoleByStr(tmpList, roleIds);
|
|||
|
|
}
|
|||
|
|
if (user.Nav_BelongRoleGroups != null && user.Nav_BelongRoleGroups.Any())
|
|||
|
|
{
|
|||
|
|
var tmpList = user.Nav_BelongRoleGroups.Select(t => t.BELONG_ROLE_GROUP_ID).ToList();
|
|||
|
|
GetRoleByRoleGroupStr(user.ORG_ID, tmpList, roleIds, ref roleGroupList);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (user.Nav_BelongUserGroups != null && user.Nav_BelongUserGroups.Any())
|
|||
|
|
{
|
|||
|
|
var tmpList = user.Nav_BelongUserGroups.Select(t => t.BELONG_USER_GROUP_ID).ToList();
|
|||
|
|
foreach (var s in tmpList)
|
|||
|
|
GetRoleByUserGroup(user.ORG_ID, s, existsUserGroupIds, ref userGroupList,
|
|||
|
|
ref roleGroupList, roleIds);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
UserRoleModel userRoleModel = new UserRoleModel();
|
|||
|
|
userRoleModel.User = user;
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (roleIds.Any())
|
|||
|
|
{
|
|||
|
|
RolePerm rolePerm = new RolePerm();
|
|||
|
|
userRoleModel.Nav_RolePerm = rolePerm;
|
|||
|
|
|
|||
|
|
var roles = this.GetEntities<T_FM_ROLE>(t => roleIds.Contains(t.ID) && t.ENABLE_STATUS == 0, filter,
|
|||
|
|
new string[] { "Nav_MenuPermissions.Nav_PermissionBtns.Nav_Btn",
|
|||
|
|
"Nav_MenuPermissions.Nav_PermissionForm",
|
|||
|
|
"Nav_Panels.Nav_Panel.Nav_PanelInfo.Nav_Info",
|
|||
|
|
"Nav_MenuPermissions.Nav_PermissionColumns.Nav_Column"
|
|||
|
|
}).ToList();
|
|||
|
|
|
|||
|
|
|
|||
|
|
//var roles = this.GetEntities<T_FM_ROLE>(i => i.ORG_ID == orgId);
|
|||
|
|
//roles = roles.Where(t => roleIds.Contains(t.ID) && t.ENABLE_STATUS == 0).ToList();
|
|||
|
|
|
|||
|
|
//List<T_FM_ROLE_MENU_PERM> nav_MenuPermissions = new List<T_FM_ROLE_MENU_PERM>();
|
|||
|
|
|
|||
|
|
//foreach (var s in roleIds)
|
|||
|
|
//{
|
|||
|
|
// var roleMenuPerm = this.GetEntitiesByRedis<T_FM_ROLE_MENU_PERM>(i => i.ORG_ID == def.ORG_ID, new BaseFilter(), s.ToString());
|
|||
|
|
// nav_MenuPermissions.AddRange(roleMenuPerm);
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
//nav_MenuPermissions = nav_MenuPermissions.Where(i => roleIds.Contains(i.ROLE_ID)).ToList();
|
|||
|
|
|
|||
|
|
//var nav_Panels = this.GetEntitiesByRedis<T_FM_PANEL_BELONG_ROLE>(def.ORG_ID ?? Guid.Empty);
|
|||
|
|
//nav_Panels = nav_Panels.Where(i => roleIds.Contains(i.BELONG_ROLE_ID)).ToList();
|
|||
|
|
|
|||
|
|
//var nav_PermissionBtns = this.GetEntitiesByRedis<T_FM_ROLE_MENU_PERM_BTN>(def.ORG_ID ?? Guid.Empty);
|
|||
|
|
//var nav_Btn = this.GetEntitiesByRedis<T_PF_BTN>(def.ORG_ID ?? Guid.Empty);
|
|||
|
|
//var nav_PermissionForm = this.GetEntitiesByRedis<T_PF_FORM>(def.ORG_ID ?? Guid.Empty);
|
|||
|
|
//var nav_Panel = this.GetEntitiesByRedis<T_FM_PANEL>(def.ORG_ID ?? Guid.Empty);
|
|||
|
|
//var nav_PanelInfo = this.GetEntitiesByRedis<T_FM_PANEL_INFO>(def.ORG_ID ?? Guid.Empty);
|
|||
|
|
//var nav_Info = this.GetEntitiesByRedis<T_FM_INFO>(def.ORG_ID ?? Guid.Empty);
|
|||
|
|
//var nav_PermissionColumns = this.GetEntitiesByRedis<T_FM_ROLE_MENU_PERM_COL>(def.ORG_ID ?? Guid.Empty);
|
|||
|
|
//var nav_Column = this.GetEntitiesByRedis<T_PF_COLUMN>(def.ORG_ID ?? Guid.Empty);
|
|||
|
|
//// "Nav_Panels.Nav_Panel.Nav_PanelInfo.Nav_Info"
|
|||
|
|
//foreach (var p in nav_Panels)
|
|||
|
|
//{
|
|||
|
|
// p.Nav_Panel = nav_Panel.FirstOrDefault(i => i.ID == p.PANEL_ID);
|
|||
|
|
// if (p.Nav_Panel != null)
|
|||
|
|
// p.Nav_Panel.Nav_PanelInfo = nav_PanelInfo.Where(i => i.PANEL_ID == p.PANEL_ID).ToList();
|
|||
|
|
// if (p.Nav_Panel.Nav_PanelInfo.Any())
|
|||
|
|
// {
|
|||
|
|
// foreach (var info in p.Nav_Panel.Nav_PanelInfo)
|
|||
|
|
// {
|
|||
|
|
// info.Nav_Info = nav_Info.FirstOrDefault(i => i.ID == info.INFO_ID);
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
//}
|
|||
|
|
////"Nav_MenuPermissions.Nav_PermissionBtns.Nav_Btn";"Nav_Panels.Nav_Panel.Nav_PanelInfo.Nav_Info"
|
|||
|
|
////"Nav_MenuPermissions.Nav_PermissionColumns.Nav_Column"
|
|||
|
|
//foreach (var p in nav_MenuPermissions)
|
|||
|
|
//{
|
|||
|
|
// p.Nav_PermissionBtns = nav_PermissionBtns.Where(i => i.ROLE_MENU_PERMISSION_ID == p.ID).ToList();
|
|||
|
|
// if (p.Nav_PermissionBtns.Any())
|
|||
|
|
// {
|
|||
|
|
// foreach (var btn in p.Nav_PermissionBtns)
|
|||
|
|
// {
|
|||
|
|
// btn.Nav_Btn = nav_Btn.FirstOrDefault(i => i.ID == btn.BTN_ID);
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
// p.Nav_PermissionForm = nav_PermissionForm.FirstOrDefault(i => i.ID == p.PERMISSION_FORM_ID);
|
|||
|
|
|
|||
|
|
// //Nav_Column
|
|||
|
|
// p.Nav_PermissionColumns = nav_PermissionColumns.Where(i => i.ROLE_MENU_PERMISSION_ID == p.ID).ToList();
|
|||
|
|
// if (p.Nav_PermissionColumns.Any())
|
|||
|
|
// {
|
|||
|
|
// foreach (var col in p.Nav_PermissionColumns)
|
|||
|
|
// {
|
|||
|
|
// col.Nav_Column = nav_Column.FirstOrDefault(i => i.ID == col.COLUMN_ID);
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
////因MySQL 不支持多个列表的导航取值,这里对Nav_MenuPermissions.Nav_PermissionColumns特殊处理
|
|||
|
|
|
|||
|
|
//var tempRoles = this.GetEntities<T_FM_ROLE>(t => roleIds.Contains(t.ID) && t.ENABLE_STATUS == 0,
|
|||
|
|
// new string[] { "Nav_MenuPermissions.Nav_PermissionColumns.Nav_Column" }).ToList();
|
|||
|
|
userRoleModel.Roles = roles;
|
|||
|
|
var menuIds = roles.SelectMany(i => i.Nav_MenuPermissions).Select(i => i?.MENU_ID).Distinct().ToList();
|
|||
|
|
//var filter = new BaseFilter();
|
|||
|
|
//filter.SelectField = new string[] { "ID", "MENU_ID", "BTN_ID", "Nav_Column" };
|
|||
|
|
var perBtns = this.GetEntities<T_FM_ROLE_MENU_PERM_BTN>(i => menuIds.Contains(i.MENU_ID)
|
|||
|
|
&& roleIds.Contains(i.ROLE_ID ?? Guid.Empty), filter, "Nav_Btn");
|
|||
|
|
//filter.SelectField = new string[] { "ID", "MENU_ID", "COLUMN_ID", "Nav_Column.IS_RULE",
|
|||
|
|
// "Nav_Column.FIELD_NAME", "Nav_Column.LABEL", "Nav_Column.PAGE_TABLE_ID", "Nav_Column.IS_DEFAULT",
|
|||
|
|
// "Nav_Column.NUM", "Nav_Column.WIDTH", "Nav_Column.PAGE_TABLE_ID", "Nav_Column.IS_DEFAULT",
|
|||
|
|
// "Nav_Column.FIELD_NAME", "Nav_Column.LABEL", "Nav_Column.PAGE_TABLE_ID", "Nav_Column.IS_DEFAULT",
|
|||
|
|
// "Nav_Column.DATA_TYPE","Nav_Column.NO_SORT","Nav_Column.CONTROL_TYPE", "Nav_Column.VALIDATA_TYPE","Nav_Column.FORMAT","Nav_Column.ENUM" };
|
|||
|
|
var perColumns = this.GetEntities<T_FM_ROLE_MENU_PERM_COL>(i => menuIds.Contains(i.MENU_ID)
|
|||
|
|
&& roleIds.Contains(i.ROLE_ID ?? Guid.Empty), filter, "Nav_Column");
|
|||
|
|
if (!roles.Any(x => x.ROLE_TYPE == (int)PFUserTypeEnum.管理员))
|
|||
|
|
{
|
|||
|
|
foreach (var item in roles)
|
|||
|
|
{
|
|||
|
|
//表单授权
|
|||
|
|
if (item.Nav_MenuPermissions != null && item.Nav_MenuPermissions.Any())
|
|||
|
|
{
|
|||
|
|
//var tempRole = tempRoles.FirstOrDefault(t => t.ID == item.ID);
|
|||
|
|
|
|||
|
|
foreach (var menu in item.Nav_MenuPermissions)
|
|||
|
|
{
|
|||
|
|
//if (!menu.IS_PERMISSION || menu.Nav_PermissionForm == null || menu.Nav_PermissionForm.ENABLE_STATUS == 1) continue;
|
|||
|
|
if (!menu.IS_PERMISSION || menu.Nav_PermissionForm == null) continue;
|
|||
|
|
var form = rolePerm.Nav_RolePermForms.Where(t => t.MenuId == menu.MENU_ID.ToString() && t.PermFormId == menu.PERMISSION_FORM_ID.ToString()).FirstOrDefault();
|
|||
|
|
if (form == null)
|
|||
|
|
{
|
|||
|
|
form = new PermMenuDto();
|
|||
|
|
form.PermFormId = menu.PERMISSION_FORM_ID.ToString();
|
|||
|
|
form.MenuId = menu.MENU_ID?.ToString();
|
|||
|
|
//form.Nav_PermForm = menu.Nav_PermissionForm;
|
|||
|
|
rolePerm.Nav_RolePermForms.Add(form);
|
|||
|
|
}
|
|||
|
|
//按钮
|
|||
|
|
if (perBtns != null && perBtns.Any())
|
|||
|
|
{
|
|||
|
|
perBtns.ForEach(t =>
|
|||
|
|
{
|
|||
|
|
if (t.MENU_ID.ToString() == form.MenuId)
|
|||
|
|
{
|
|||
|
|
if (!form.Nav_Btns.Any(t1 => t1.BtnId == t.BTN_ID.ToString() && t1.MenuId == t.MENU_ID.ToString()))
|
|||
|
|
{
|
|||
|
|
BtnDto btn = new BtnDto();
|
|||
|
|
btn.BtnId = t.BTN_ID.ToString();
|
|||
|
|
btn.MenuId = t.MENU_ID?.ToString();
|
|||
|
|
//btn.Nav_Btn = t.Nav_Btn;
|
|||
|
|
form.Nav_Btns.Add(btn);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
//列
|
|||
|
|
if (perColumns != null && perColumns.Any())
|
|||
|
|
{
|
|||
|
|
perColumns.ForEach(t =>
|
|||
|
|
{
|
|||
|
|
if (t.MENU_ID.ToString() == form.MenuId)
|
|||
|
|
{
|
|||
|
|
if (!form.Nav_Columns.Any(t1 => t1.ColumnId == t.COLUMN_ID.ToString() && t1.MenuId == t.MENU_ID.ToString()))
|
|||
|
|
{
|
|||
|
|
ClumnDto col = new ClumnDto();
|
|||
|
|
col.ColumnId = t.COLUMN_ID.ToString();
|
|||
|
|
col.MenuId = t.MENU_ID?.ToString();
|
|||
|
|
//col.Nav_Column = t.Nav_Column;
|
|||
|
|
form.Nav_Columns.Add(col);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//工作中心授权
|
|||
|
|
//if (item.Nav_Workstages != null && item.Nav_Workstages.Any())
|
|||
|
|
//{
|
|||
|
|
//foreach (var workstate in item.Nav_Workstages)
|
|||
|
|
//{
|
|||
|
|
// if (!workstate.IS_PERMISSION) continue;
|
|||
|
|
// if (workstate.Nav_Workstage == null || workstate.Nav_Workstage.ENABLE_STATUS == 1) continue;
|
|||
|
|
// if (!rolePerm.Nav_RolePermWorkStages.Any(t => t.WorkstageId == workstate.WORKSTAGE_ID))
|
|||
|
|
// {
|
|||
|
|
// RolePermWorkStage tmp = new RolePermWorkStage();
|
|||
|
|
// tmp.WorkstageId = workstate.WORKSTAGE_ID;
|
|||
|
|
// tmp.Nav_WorkStage = workstate.Nav_Workstage;
|
|||
|
|
// rolePerm.Nav_RolePermWorkStages.Add(tmp);
|
|||
|
|
// }
|
|||
|
|
//}
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
//区域授权
|
|||
|
|
//if (item.Nav_Panels != null && item.Nav_Panels.Any())
|
|||
|
|
//{
|
|||
|
|
// foreach (var panel in item.Nav_Panels)
|
|||
|
|
// {
|
|||
|
|
// if (panel.Nav_Panel == null || panel.Nav_Panel.ENABLE_STATUS == 1) continue;
|
|||
|
|
// if (!rolePerm.Nav_RolePermPanels.Any(t => t.PanelId == panel.PANEL_ID))
|
|||
|
|
// {
|
|||
|
|
// RolePermPanel tmp = new RolePermPanel();
|
|||
|
|
// tmp.PanelId = panel.PANEL_ID;
|
|||
|
|
// tmp.Nav_Panel = panel.Nav_Panel;
|
|||
|
|
// rolePerm.Nav_RolePermPanels.Add(tmp);
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
//}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//清空导航
|
|||
|
|
user.Nav_BelongRoleGroups = null;
|
|||
|
|
user.Nav_BelongRoles = null;
|
|||
|
|
user.Nav_BelongUserGroups = null;
|
|||
|
|
result.Add(userRoleModel);
|
|||
|
|
}
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw new Exception(LogHelper.GetCurSourceFileName() + " - " + LogHelper.GetLineNum() + ":" + ex.Message);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public UserRoleModel NewGetRolesByUser(Guid userId, KeywordFilter filter)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
var newUser = this.GetEntity<T_FM_USER>(userId, new string[] { "Nav_Org", "Nav_Department" });
|
|||
|
|
//var newUser = this.GetEntities<T_FM_USER>(t => userId == t.ID, filter, new string[] { "Nav_Org", "Nav_Department" }).FirstOrDefault();
|
|||
|
|
var newFilter = new BaseFilter(filter.GetOrgId());
|
|||
|
|
newFilter.SelectField = new string[] { "ID", "ROLE_TYPE", "PLATFORM_TYPE" };
|
|||
|
|
var rolesa = this.GetEntities<T_FM_ROLE>(i => i.Nav_UserBelongRoles.Any(i => i.USER_ID == userId) && i.PLATFORM_TYPE == Convert.ToInt32(filter.Parameter3), newFilter);
|
|||
|
|
UserRoleModel userRoleModel = new UserRoleModel();
|
|||
|
|
userRoleModel.User = newUser;
|
|||
|
|
userRoleModel.Roles = rolesa.ToList();
|
|||
|
|
if (rolesa.Any(i => i.ROLE_TYPE == (int)FMRoleTypeEnum.管理角色))
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if (rolesa.Any())
|
|||
|
|
{
|
|||
|
|
var rolesId = rolesa.Select(i => i.ID).ToArray();
|
|||
|
|
RolePerm rolePerm = new RolePerm();
|
|||
|
|
userRoleModel.Nav_RolePerm = rolePerm;
|
|||
|
|
newFilter.SelectField = new string[] { "ID", "MENU_ID", "IS_PERMISSION", "PERMISSION_FORM_ID" };
|
|||
|
|
var menuPer = this.GetEntities<T_FM_ROLE_MENU_PERM>(i => rolesId.Contains(i.ROLE_ID), newFilter);
|
|||
|
|
userRoleModel.Roles.FirstOrDefault().Nav_MenuPermissions = menuPer.ToList();
|
|||
|
|
var menuPerIds = menuPer.Select(i => i.ID).ToArray();
|
|||
|
|
var menuFormIds = menuPer.Select(i => i.PERMISSION_FORM_ID).ToArray();
|
|||
|
|
var menuIds = menuPer.Select(i => i?.MENU_ID).Distinct().ToList();
|
|||
|
|
|
|||
|
|
newFilter.SelectField = new string[] { "ID", "MENU_ID", "Nav_Btn.ID" };
|
|||
|
|
var perBtns = this.GetEntities<T_FM_ROLE_MENU_PERM_BTN>(i => menuIds.Contains(i.MENU_ID)
|
|||
|
|
&& rolesId.Contains(i.ROLE_ID ?? Guid.Empty) && i.Nav_Btn.ENABLE_STATUS == (int)FMEnableStatusEnum.启用, newFilter, "Nav_Btn");
|
|||
|
|
|
|||
|
|
newFilter.SelectField = new string[] { "ID", "MENU_ID", "Nav_Column.ID" };
|
|||
|
|
var perColumns = this.GetEntities<T_FM_ROLE_MENU_PERM_COL>(i => menuIds.Contains(i.MENU_ID)
|
|||
|
|
&& rolesId.Contains(i.ROLE_ID ?? Guid.Empty) && i.Nav_Column.IS_DEFAULT, newFilter, "Nav_Column");
|
|||
|
|
|
|||
|
|
newFilter.SelectField = new string[] { "ID", "CODE" };
|
|||
|
|
var perForms = this.GetEntities<T_PF_FORM>(i => menuFormIds.Contains(i.ID), newFilter);
|
|||
|
|
//表单授权
|
|||
|
|
foreach (var menu in menuPer)
|
|||
|
|
{
|
|||
|
|
//if (!menu.IS_PERMISSION) continue;
|
|||
|
|
if (menu.PERMISSION_FORM_ID != null)
|
|||
|
|
{
|
|||
|
|
var form = rolePerm.Nav_RolePermForms.FirstOrDefault(t => t.MenuId == menu.MENU_ID.ToString() && t.PermFormId == menu.PERMISSION_FORM_ID.ToString());
|
|||
|
|
if (form == null)
|
|||
|
|
{
|
|||
|
|
form = new PermMenuDto();
|
|||
|
|
form.PermFormId = menu.PERMISSION_FORM_ID.ToString();
|
|||
|
|
form.MenuId = menu.MENU_ID?.ToString();
|
|||
|
|
//form.Nav_PermForm = perForms.FirstOrDefault(i => i.ID == menu.PERMISSION_FORM_ID);
|
|||
|
|
rolePerm.Nav_RolePermForms.Add(form);
|
|||
|
|
//按钮
|
|||
|
|
var btns = perBtns.Where(i => i.MENU_ID == menu.MENU_ID);
|
|||
|
|
if (btns != null && btns.Any())
|
|||
|
|
{
|
|||
|
|
btns.ForEach(t =>
|
|||
|
|
{
|
|||
|
|
if (!form.Nav_Btns.Any(t1 => t1.BtnId == t.BTN_ID.ToString() && t1.MenuId == t.MENU_ID.ToString()))
|
|||
|
|
{
|
|||
|
|
BtnDto btn = new BtnDto();
|
|||
|
|
btn.BtnId = t.BTN_ID.ToString();
|
|||
|
|
btn.MenuId = t.MENU_ID?.ToString();
|
|||
|
|
//btn.Nav_Btn = t.Nav_Btn;
|
|||
|
|
form.Nav_Btns.Add(btn);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
//列
|
|||
|
|
var columns = perColumns.Where(i => i.MENU_ID == menu.MENU_ID);
|
|||
|
|
if (columns != null && columns.Any())
|
|||
|
|
{
|
|||
|
|
columns.ForEach(t =>
|
|||
|
|
{
|
|||
|
|
if (!form.Nav_Columns.Any(t1 => t1.ColumnId == t.COLUMN_ID.ToString() && t1.MenuId == t.MENU_ID.ToString()))
|
|||
|
|
{
|
|||
|
|
ClumnDto col = new ClumnDto();
|
|||
|
|
col.ColumnId = t.COLUMN_ID.ToString();
|
|||
|
|
col.MenuId = t.MENU_ID?.ToString();
|
|||
|
|
//col.Nav_Column = t.Nav_Column;
|
|||
|
|
form.Nav_Columns.Add(col);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
return userRoleModel;
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
throw new Exception(LogHelper.GetCurSourceFileName() + " - " + LogHelper.GetLineNum() + ":" + ex.Message);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 通过角色获取人员列表
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="roleIds"></param>
|
|||
|
|
/// <param name="orgId"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public List<T_FM_USER> GetUsersByRoles(IEnumerable<string> roleIds, Guid? orgId)
|
|||
|
|
{
|
|||
|
|
//var roleService = ServiceUtils.GetCommonService<T_FM_ROLE>();
|
|||
|
|
//var roleGroupService = ServiceUtils.GetCommonService<T_FM_ROLE_GROUP>();
|
|||
|
|
//var userGroupService = ServiceUtils.GetCommonService<T_FM_USER_GROUP>();
|
|||
|
|
|
|||
|
|
Expression<Func<T_FM_USER, bool>> userExpression = t => false;
|
|||
|
|
Expression<Func<T_FM_ROLE_GROUP, bool>> roleGroupExpression = t => false;
|
|||
|
|
Expression<Func<T_FM_USER_GROUP, bool>> userGroupExpression = t => false;
|
|||
|
|
|
|||
|
|
foreach (var item in roleIds)
|
|||
|
|
{
|
|||
|
|
Guid tmp = new Guid(item);
|
|||
|
|
userExpression = userExpression.Or(t => t.Nav_BelongRoles.Any(i => i.BELONG_ROLE_ID == tmp));
|
|||
|
|
roleGroupExpression = roleGroupExpression.Or(t => t.Nav_BelongRoles.Any(i => i.BELONG_ROLE_ID == tmp));
|
|||
|
|
userGroupExpression = userGroupExpression.Or(t => t.Nav_BelongRoles.Any(i => i.BELONG_ROLE_ID == tmp));
|
|||
|
|
}
|
|||
|
|
roleGroupExpression = roleGroupExpression.And(t => t.ENABLE_STATUS == 0);
|
|||
|
|
var roleGroupIds = this.GetEntities<T_FM_ROLE_GROUP>(roleGroupExpression, new string[] { "Nav_BelongRoles.Nav_BelongRole" }).Select(t => t.ID).ToList();
|
|||
|
|
if (roleGroupIds != null && roleGroupIds.Any())
|
|||
|
|
{
|
|||
|
|
foreach (var item in roleGroupIds)
|
|||
|
|
{
|
|||
|
|
userExpression = userExpression.Or(t => t.Nav_BelongRoleGroups.Any(i => i.BELONG_ROLE_GROUP_ID == item));
|
|||
|
|
userGroupExpression = userGroupExpression.Or(t => t.Nav_BelongRoleGroups.Any(i => i.BELONG_ROLE_GROUP_ID == item));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
userGroupExpression = userGroupExpression.And(t => t.ENABLE_STATUS == 0);
|
|||
|
|
var userGroupList = this.GetEntities<T_FM_USER_GROUP>(userGroupExpression, new string[] { "Nav_BelongRoles.Nav_BelongRole", "Nav_BelongRoleGroups.Nav_BelongRoleGroup", "Nav_BelongUserGroups.Nav_BelongUserGroup" }).Select(t => t.ID).ToList();
|
|||
|
|
if (userGroupList.Any())
|
|||
|
|
{
|
|||
|
|
List<Guid> userGroupIds = new List<Guid>();
|
|||
|
|
Expression<Func<T_FM_USER_GROUP, bool>> tmpExpression = t => true;
|
|||
|
|
if (orgId != null)
|
|||
|
|
tmpExpression = tmpExpression.And(t => t.ORG_ID == orgId);
|
|||
|
|
tmpExpression = tmpExpression.And(t => t.ENABLE_STATUS == 0);
|
|||
|
|
var tmpUserGroupList = this.GetEntities(tmpExpression, new string[] { "Nav_BelongRoles.Nav_BelongRole", "Nav_BelongRoleGroups.Nav_BelongRoleGroup", "Nav_BelongUserGroups.Nav_BelongUserGroup" }).ToList();
|
|||
|
|
GetUserGroups(userGroupList, userGroupIds, tmpUserGroupList);
|
|||
|
|
if (userGroupIds.Any())
|
|||
|
|
{
|
|||
|
|
foreach (var item in userGroupIds)
|
|||
|
|
userExpression = userExpression.Or(t => t.Nav_BelongUserGroups.Any(i => i.BELONG_USER_GROUP_ID == item));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
userExpression = userExpression.And(t => t.ENABLE_STATUS == 0);
|
|||
|
|
return this.GetEntities(userExpression, new string[] { "Nav_BelongRoles.Nav_BelongRole", "Nav_BelongRoleGroups.Nav_BelongRoleGroup", "Nav_BelongUserGroups.Nav_BelongUserGroup" }).ToList();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#region 私有方法
|
|||
|
|
private void GetRoleByStr(List<Guid> list, List<Guid> roleIds)
|
|||
|
|
{
|
|||
|
|
if (list == null || list.Count <= 0) return;
|
|||
|
|
foreach (var item in list)
|
|||
|
|
{
|
|||
|
|
if (!roleIds.Contains(item))
|
|||
|
|
roleIds.Add(item);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void GetRoleByRoleGroupStr(Guid? orgId, List<Guid> list, List<Guid> roleIds, ref List<T_FM_ROLE_GROUP> roleGroupList)
|
|||
|
|
{
|
|||
|
|
if (list == null || list.Count <= 0) return;
|
|||
|
|
|
|||
|
|
if (roleGroupList == null)
|
|||
|
|
{
|
|||
|
|
//Expression<Func<T_FM_ROLE_GROUP, bool>> expression = t => true;
|
|||
|
|
//if (orgId != null)
|
|||
|
|
// expression = expression.And(t => t.ORG_ID == orgId);
|
|||
|
|
//expression = expression.And(t => t.ENABLE_STATUS == 0);
|
|||
|
|
//roleGroupList = this.GetEntities<T_FM_ROLE_GROUP>(expression, new string[] { "Nav_BelongRoles.Nav_BelongRole" }).ToList();
|
|||
|
|
//
|
|||
|
|
var baseFilter = new BaseFilter(orgId ?? Guid.Empty);
|
|||
|
|
baseFilter.IgnoreDataRule = true;
|
|||
|
|
roleGroupList = this.GetEntitiesByRedis<T_FM_ROLE_GROUP>(baseFilter);
|
|||
|
|
roleGroupList = roleGroupList.Where(t => t.ENABLE_STATUS == 0).ToList();
|
|||
|
|
var belongRules = this.GetEntitiesByRedis<T_FM_ROLE_GROUP_BELONG_ROLE>(baseFilter);
|
|||
|
|
var belongRule = this.GetEntitiesByRedis<T_FM_ROLE>(baseFilter);
|
|||
|
|
foreach (var role in belongRules)
|
|||
|
|
{
|
|||
|
|
role.Nav_BelongRole = belongRule.FirstOrDefault(i => i.ID == role.BELONG_ROLE_ID);
|
|||
|
|
}
|
|||
|
|
foreach (var role in roleGroupList)
|
|||
|
|
{
|
|||
|
|
role.Nav_BelongRoles = belongRules.Where(i => i.ROLE_GROUP_ID == role.ID).ToList();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
foreach (var s in list)
|
|||
|
|
{
|
|||
|
|
var rg = roleGroupList.Where(t => t.ID == s).FirstOrDefault();
|
|||
|
|
if (rg != null)
|
|||
|
|
{
|
|||
|
|
if (rg.Nav_BelongRoles != null && rg.Nav_BelongRoles.Any())
|
|||
|
|
{
|
|||
|
|
var tmpList = rg.Nav_BelongRoles.Select(t => t.BELONG_ROLE_ID).ToList();
|
|||
|
|
GetRoleByStr(tmpList, roleIds);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void GetRoleByUserGroup(Guid? orgId, Guid userGroupId, Dictionary<Guid, byte> existsUserGroupIds,
|
|||
|
|
ref List<T_FM_USER_GROUP> userGroupList, ref List<T_FM_ROLE_GROUP> roleGroupList, List<Guid> roleIds)
|
|||
|
|
{
|
|||
|
|
if (userGroupList == null)
|
|||
|
|
{
|
|||
|
|
//Expression<Func<T_FM_USER_GROUP, bool>> expression = t => true;
|
|||
|
|
//if (orgId != null)
|
|||
|
|
// expression = expression.And(t => t.ORG_ID == orgId);
|
|||
|
|
//expression = expression.And(t => t.ENABLE_STATUS == 0);
|
|||
|
|
//userGroupList = this.GetEntities<T_FM_USER_GROUP>(expression, new string[] { "Nav_BelongRoles.Nav_BelongRole",
|
|||
|
|
// "Nav_BelongRoleGroups.Nav_BelongRoleGroup",
|
|||
|
|
// "Nav_BelongUserGroups.Nav_BelongUserGroup" }).ToList();
|
|||
|
|
var baseFilter = new BaseFilter(orgId ?? Guid.Empty);
|
|||
|
|
baseFilter.IgnoreDataRule = true;
|
|||
|
|
userGroupList = this.GetEntitiesByRedis<T_FM_USER_GROUP>(baseFilter);
|
|||
|
|
userGroupList = userGroupList.Where(t => t.ENABLE_STATUS == 0).ToList();
|
|||
|
|
|
|||
|
|
var nav_BelongRoles = this.GetEntitiesByRedis<T_FM_USER_GROUP_BELONG_ROLE>(baseFilter);
|
|||
|
|
var nav_BelongRoleGroups = this.GetEntitiesByRedis<T_FM_USER_GROUP_BELONG_R_G>(baseFilter);
|
|||
|
|
var nav_BelongUserGroups = this.GetEntitiesByRedis<T_FM_USER_GROUP_BELONG_U_G>(baseFilter);
|
|||
|
|
|
|||
|
|
var belongRule = this.GetEntitiesByRedis<T_FM_ROLE>(baseFilter);
|
|||
|
|
var belongRoleGroup = this.GetEntitiesByRedis<T_FM_ROLE_GROUP>(baseFilter);
|
|||
|
|
var belonUserGroup = this.GetEntitiesByRedis<T_FM_USER_GROUP>(baseFilter);
|
|||
|
|
|
|||
|
|
foreach (var role in nav_BelongRoles)
|
|||
|
|
{
|
|||
|
|
role.Nav_BelongRole = belongRule.FirstOrDefault(i => i.ID == role.BELONG_ROLE_ID);
|
|||
|
|
}
|
|||
|
|
foreach (var role in nav_BelongRoleGroups)
|
|||
|
|
{
|
|||
|
|
role.Nav_BelongRoleGroup = belongRoleGroup.FirstOrDefault(i => i.ID == role.BELONG_ROLE_GROUP_ID);
|
|||
|
|
}
|
|||
|
|
foreach (var role in nav_BelongUserGroups)
|
|||
|
|
{
|
|||
|
|
role.Nav_BelongUserGroup = belonUserGroup.FirstOrDefault(i => i.ID == role.BELONG_USER_GROUP_ID);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
foreach (var u in userGroupList)
|
|||
|
|
{
|
|||
|
|
u.Nav_BelongRoles = nav_BelongRoles.Where(i => i.BELONG_ROLE_ID == u.ID).ToList();
|
|||
|
|
u.Nav_BelongRoleGroups = nav_BelongRoleGroups.Where(i => i.BELONG_ROLE_GROUP_ID == u.ID).ToList();
|
|||
|
|
u.Nav_BelongUserGroups = nav_BelongUserGroups.Where(i => i.BELONG_USER_GROUP_ID == u.ID).ToList();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (userGroupList == null || userGroupList.Count <= 0) return;
|
|||
|
|
var userGroup = userGroupList.Where(t => t.ID == userGroupId).FirstOrDefault();
|
|||
|
|
if (userGroup == null) return;
|
|||
|
|
if (existsUserGroupIds.ContainsKey(userGroup.ID)) return;
|
|||
|
|
existsUserGroupIds.Add(userGroup.ID, 0);
|
|||
|
|
if (userGroup.Nav_BelongRoles != null && userGroup.Nav_BelongRoles.Any())
|
|||
|
|
{
|
|||
|
|
var list = userGroup.Nav_BelongRoles.Select(t => t.BELONG_ROLE_ID).ToList();
|
|||
|
|
GetRoleByStr(list, roleIds);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (userGroup.Nav_BelongRoleGroups != null && userGroup.Nav_BelongRoleGroups.Any())
|
|||
|
|
{
|
|||
|
|
var list = userGroup.Nav_BelongRoleGroups.Select(t => t.BELONG_ROLE_GROUP_ID).ToList();
|
|||
|
|
GetRoleByRoleGroupStr(orgId, list, roleIds, ref roleGroupList);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (userGroup.Nav_BelongUserGroups != null && userGroup.Nav_BelongUserGroups.Any())
|
|||
|
|
{
|
|||
|
|
var list = userGroup.Nav_BelongUserGroups.Select(t => t.BELONG_USER_GROUP_ID).ToList();
|
|||
|
|
foreach (var s in list)
|
|||
|
|
GetRoleByUserGroup(orgId, s, existsUserGroupIds, ref userGroupList,
|
|||
|
|
ref roleGroupList, roleIds);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
private void GetUserGroups(List<Guid> ids, List<Guid> resultList, List<T_FM_USER_GROUP> tmpUserGroupList)
|
|||
|
|
{
|
|||
|
|
if (ids == null || ids.Count <= 0) return;
|
|||
|
|
resultList.AddRange(ids);
|
|||
|
|
var list = tmpUserGroupList.Where(t => t.Nav_BelongUserGroups.Any(t1 => ids.Contains(t1.BELONG_USER_GROUP_ID))).Select(t => t.ID).ToList();
|
|||
|
|
if (list.Any())
|
|||
|
|
{
|
|||
|
|
List<Guid> tmps = new List<Guid>();
|
|||
|
|
foreach (var item in list)
|
|||
|
|
{
|
|||
|
|
if (!resultList.Any(t => t == item))
|
|||
|
|
tmps.Add(item);
|
|||
|
|
}
|
|||
|
|
if (tmps.Count > 0)
|
|||
|
|
GetUserGroups(tmps, resultList, tmpUserGroupList);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region wyw
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取部门节点下所有人员信息
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="BaseDepartMentID"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public List<T_FM_USER> GetDownUser(Guid BaseDepartMentID, string[] UserParts = null)
|
|||
|
|
{
|
|||
|
|
List<T_FM_DEPARTMENT> listTemp = null;
|
|||
|
|
List<Guid> listDepartMentID = new List<Guid>();
|
|||
|
|
List<Guid> listDepartMentIDAll = new List<Guid>();
|
|||
|
|
|
|||
|
|
var listDep = GetEntities<T_FM_DEPARTMENT>(e => e.ID == BaseDepartMentID, null, new string[] { "Nav_Children" });
|
|||
|
|
if (listDep.Any())
|
|||
|
|
{
|
|||
|
|
listTemp = listDep.ToList();
|
|||
|
|
listDepartMentID = listTemp.Select(x => x.ID).ToList();
|
|||
|
|
listDepartMentIDAll = listTemp.Select(x => x.ID).ToList();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
IEnumerable<T_FM_DEPARTMENT> listDeps = null;
|
|||
|
|
IEnumerable<T_FM_DEPARTMENT> listTempChil = null;
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
listDeps = GetEntities<T_FM_DEPARTMENT>(e => e.PARENT_ID.HasValue && listDepartMentID.Contains(e.PARENT_ID.Value), null, new string[] { "Nav_Children" });
|
|||
|
|
if (listDeps.Any())
|
|||
|
|
{
|
|||
|
|
listTemp = listDeps.ToList();
|
|||
|
|
listDepartMentID = listTemp.Select(x => x.ID).ToList();
|
|||
|
|
listDepartMentIDAll.AddRange(listDepartMentID);
|
|||
|
|
listTempChil = listDeps.Where(e => e.Nav_Children != null && e.Nav_Children.Count > 0);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
listTempChil = null;
|
|||
|
|
}
|
|||
|
|
} while (listTempChil != null && listTempChil.Any());
|
|||
|
|
if (UserParts == null)
|
|||
|
|
{
|
|||
|
|
UserParts = new string[] { "Nav_Department" };
|
|||
|
|
}
|
|||
|
|
return GetEntities<T_FM_USER>(e => listDepartMentIDAll.Contains(e.DEPARTMENT_ID.Value) && e.ENABLE_STATUS == 0 && !e.IS_DELETED, null, UserParts).OrderBy(e => e.Nav_Department.DEPARTMENT_TYPE).ThenByDescending(e => e.APPROVE_ROLE_ID).ToList();
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取组织成员和下属有审批角色的人(负责人、安全员)
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="DepartMentID"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public List<T_FM_USER> GetUserContentNextHead(Guid DepartMentID)
|
|||
|
|
{
|
|||
|
|
List<T_FM_USER> listUser = new List<T_FM_USER>();
|
|||
|
|
var userDep = GetEntities<T_FM_USER>(e => e.DEPARTMENT_ID.HasValue && e.DEPARTMENT_ID.Value == DepartMentID && e.ENABLE_STATUS == 0, "Nav_Department", "Nav_Person.Nav_Post");
|
|||
|
|
if (userDep != null && userDep.Any())
|
|||
|
|
listUser = userDep.OrderByDescending(e => e.APPROVE_ROLE_ID).ToList();
|
|||
|
|
else
|
|||
|
|
return listUser;
|
|||
|
|
|
|||
|
|
var depChilID = GetEntities<T_FM_DEPARTMENT>(e => e.PARENT_ID.HasValue && e.PARENT_ID.Value == DepartMentID).Select(e => e.ID);
|
|||
|
|
if (depChilID == null || !depChilID.Any())
|
|||
|
|
return listUser;
|
|||
|
|
|
|||
|
|
var listChilUser = GetEntities<T_FM_USER>(e => e.DEPARTMENT_ID.HasValue && depChilID.Contains(e.DEPARTMENT_ID.Value) && e.ENABLE_STATUS == 0 && e.APPROVE_ROLE_ID.HasValue, "Nav_Department", "Nav_Person.Nav_Post");
|
|||
|
|
if (listChilUser == null || !listChilUser.Any())
|
|||
|
|
return listUser;
|
|||
|
|
|
|||
|
|
listUser.AddRange(listChilUser.OrderBy(e => e.DEPARTMENT_ID).ToList());
|
|||
|
|
return listUser;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取登陆者的生产单元
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public List<int> GetMineType(string minType = null)
|
|||
|
|
{
|
|||
|
|
List<int> listResult = new List<int>();
|
|||
|
|
if (minType == null)
|
|||
|
|
{
|
|||
|
|
minType = APT.Infrastructure.Api.AppContext.CurrentSession.MineType;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
if (string.IsNullOrEmpty(minType))
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else if (minType.Contains(","))
|
|||
|
|
{
|
|||
|
|
var listMine = minType.Split(",", StringSplitOptions.RemoveEmptyEntries);
|
|||
|
|
if (listMine != null && listMine.Any())
|
|||
|
|
{
|
|||
|
|
listMine.ForEach(x => listResult.Add(int.Parse(x)));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
listResult.Add(int.Parse(minType));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch { }
|
|||
|
|
|
|||
|
|
return listResult;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取登陆者的生产单元
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public List<string> GetDepmentMineType()
|
|||
|
|
{
|
|||
|
|
List<string> listResult = new List<string>();
|
|||
|
|
string minType = APT.Infrastructure.Api.AppContext.CurrentSession.MineType;
|
|||
|
|
|
|||
|
|
if (string.IsNullOrEmpty(minType))
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else if (minType.Contains(","))
|
|||
|
|
{
|
|||
|
|
var listMine = minType.Split(",", StringSplitOptions.RemoveEmptyEntries);
|
|||
|
|
if (listMine != null && listMine.Any())
|
|||
|
|
{
|
|||
|
|
listMine.ForEach(x => listResult.Add(x));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
listResult.Add(minType);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return listResult;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取特定岗位的人
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="Msg"></param>
|
|||
|
|
/// <param name="postName"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public T_FM_USER GetPostUser(ref string Msg, string postName = "人事专员")
|
|||
|
|
{
|
|||
|
|
var post = GetEntity<T_FM_USER_POST>(e => e.NAME.Contains(postName));
|
|||
|
|
if (post == null)
|
|||
|
|
{
|
|||
|
|
Msg = "未找到岗位【" + postName + "】";
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
T_FM_USER user = GetEntity<T_FM_USER>(e => e.Nav_Person.POST_ID == post.ID, new string[] { "Nav_Person" });
|
|||
|
|
if (user == null)
|
|||
|
|
{
|
|||
|
|
Msg = "系统未配置【" + postName + "】岗位人员";
|
|||
|
|
}
|
|||
|
|
return user;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取某个(部门)审批角色对应人
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="Msg"></param>
|
|||
|
|
/// <param name="RoleName"></param>
|
|||
|
|
/// <param name="DEPARTMENT_ID"></param>
|
|||
|
|
/// <param name="DEPARTMENT_TYPE">FMDepartmentType 部门=0, 车间=1, 班组=2, 公司=3</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public T_FM_USER GetRoleUser(ref string Msg, string RoleName, Guid? DEPARTMENT_ID, int? DEPARTMENT_TYPE)
|
|||
|
|
{
|
|||
|
|
T_FM_USER result = null;
|
|||
|
|
var approveRole = GetEntity<T_PF_APPROVAL_ROLE>(e => e.NAME.Contains(RoleName));
|
|||
|
|
if (approveRole != null)
|
|||
|
|
{
|
|||
|
|
Expression<Func<T_FM_USER, bool>> expression = e => e.APPROVE_ROLE_ID == approveRole.ID;
|
|||
|
|
if (DEPARTMENT_ID.HasValue && DEPARTMENT_ID != Guid.Empty)
|
|||
|
|
{
|
|||
|
|
if (DEPARTMENT_TYPE.HasValue)
|
|||
|
|
{
|
|||
|
|
again:
|
|||
|
|
var dep = GetEntity<T_FM_DEPARTMENT>(e => e.ID == DEPARTMENT_ID.Value, new string[] { "Nav_Parent" });
|
|||
|
|
if (dep == null)
|
|||
|
|
{
|
|||
|
|
Msg = "获取部门失败";
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (dep.DEPARTMENT_TYPE == DEPARTMENT_TYPE)
|
|||
|
|
{
|
|||
|
|
DEPARTMENT_ID = dep.ID;
|
|||
|
|
}
|
|||
|
|
else if (dep.Nav_Parent != null && dep.Nav_Parent.DEPARTMENT_TYPE == DEPARTMENT_TYPE)
|
|||
|
|
{
|
|||
|
|
DEPARTMENT_ID = dep.PARENT_ID;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (dep.PARENT_ID.HasValue)
|
|||
|
|
{
|
|||
|
|
DEPARTMENT_ID = dep.PARENT_ID;
|
|||
|
|
goto again;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Msg = "获取部门失败";
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
expression = expression.And(e => e.DEPARTMENT_ID.HasValue && e.DEPARTMENT_ID == DEPARTMENT_ID);
|
|||
|
|
}
|
|||
|
|
result = GetEntity<T_FM_USER>(expression);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Msg = "未找到审批角色【" + RoleName + "】";
|
|||
|
|
}
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取部门岗位人员
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="Msg"></param>
|
|||
|
|
/// <param name="DEPARTMENT_ID"></param>
|
|||
|
|
/// <param name="POST_ID"></param>
|
|||
|
|
/// <param name="IsOnly">只返回一个人</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public List<T_FM_USER> GetDepPostUser(ref string Msg, Guid DEPARTMENT_ID, Guid POST_ID, bool IsOnly)
|
|||
|
|
{
|
|||
|
|
if (DEPARTMENT_ID == Guid.Empty || POST_ID == Guid.Empty)
|
|||
|
|
{
|
|||
|
|
Msg = "入参有误";
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var listPerson = GetEntities<T_FM_PERSON>(e => e.DEPARTMENT_ID.HasValue && e.DEPARTMENT_ID.Value == DEPARTMENT_ID && e.POST_ID.HasValue && e.POST_ID.Value == POST_ID);
|
|||
|
|
if (listPerson == null || !listPerson.Any())
|
|||
|
|
{
|
|||
|
|
Msg = "后勤部门岗位人员信息失败";
|
|||
|
|
}
|
|||
|
|
Expression<Func<T_FM_USER, bool>> expression = e => !e.IS_DELETED && e.PERSON_ID.HasValue && e.ENABLE_STATUS == 0;
|
|||
|
|
var listPersonID = listPerson.Select(e => e.ID);
|
|||
|
|
if (IsOnly && listPersonID.Count() == 1)// ||
|
|||
|
|
{
|
|||
|
|
Guid personID = listPersonID.ToList()[0];
|
|||
|
|
expression = expression.And(e => e.PERSON_ID.Value == personID);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
expression = expression.And(e => listPersonID.Contains(e.PERSON_ID.Value));
|
|||
|
|
}
|
|||
|
|
return GetEntities(expression).ToList();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|