mh_jy_safe/APT.BaseData.Services/Services/FM/FMUserService.cs
2025-08-25 09:56:57 +08:00

997 lines
51 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
}
}