Files
zszq-trs/YLErpDAL/BLL_System/UserBLL.cs

496 lines
18 KiB
C#

using YLErp;
using YLErp.DBModels.Consts;
using YLErp.Helpers;
using YLErp.Model.Enum;
using YLErp.Modules;
using YLErp.Modules.DataProviderModule;
using YLErp.Providers;
namespace BaseOUDAL
{
public class UserBLL
{
static Dictionary<int, SystemUser> UserDic;
static UserBLL()
{
UpdateUsers();
}
public static void UpdateUsers()
{
using (ErpBaseContext db = new ErpBaseContext())
{
UserDic = db.SystemUsers.AsNoTracking().Where(o => o.State != 1).ToDictionary(n => n.Id);
}
MemoryCacheProvider.Default.FlushAll();
}
public static List<SystemUser> GetUsersByPosition()
{
using (var db = new ErpBaseContext())
{
return db.SystemUsers.Where(a => (a.AccountPost & (int)AccountPostEnum.交易员) > 0).ToList();
}
}
public static bool HasRightForVariety(int roleId)
{
if (roleId > 0)
{
var roleCredit = TradeRightProvider.GetRoleCredits(new[] { roleId }).FirstOrDefault();
return roleCredit != null && (roleCredit.IsAll == true || roleCredit.VarietyIdsInt.Any());
}
return false;
}
public static SystemUser GetById(int id)
{
if (UserDic == null)
{
UpdateUsers();
}
return UserDic.TryGetValue(id, out var user) ? user : null;
}
/// <summary>
/// 根据用户ID查找所属业务组(默认返回空字符串)
/// </summary>
public static string GetUserGroup(string userId)
{
if (UserDic == null)
{
UpdateUsers();
}
return int.TryParse(userId, out int uid) ? GetUserGroup(uid) : string.Empty;
}
/// <summary>
/// 根据用户ID查找所属业务组(默认返回空字符串)
/// </summary>
public static string GetUserGroup(int id)
{
if (ConsUserGroup.HasGroup && id > 0)
{
if (UserDic == null)
{
UpdateUsers();
}
return UserDic.TryGetValue(id, out var user) ? user?.UserGroup ?? string.Empty : string.Empty;
}
return string.Empty;
}
public static IEnumerable<SystemUser> Where(Func<SystemUser, bool> predicate)
{
if (predicate is null)
{
throw new ArgumentNullException(nameof(predicate));
}
if (UserDic == null)
{
UpdateUsers();
}
return UserDic.Values.Where(predicate);
}
public static SystemUser FirstOrDefault(Func<SystemUser, bool> predicate)
{
if (predicate is null)
{
throw new ArgumentNullException(nameof(predicate));
}
if (UserDic == null)
{
UpdateUsers();
}
return UserDic.Values.FirstOrDefault(predicate);
}
public static string GetNameById(int? id)
{
return id == null ? string.Empty : GetById(id.Value)?.Name ?? string.Empty;
}
public static List<SystemUser> GetSystemsByUserId()
{
using (var db = new ErpBaseContext())
{
return db.SystemUsers.Where(a => a.State == 0).ToList();
}
}
public static void SetUserVariety(int UserId, string VarietyIds)
{
using (var db = new ErpBaseContext())
{
var systemUser = db.SystemUsers.Where(a => a.State == 0 && a.Id == UserId).FirstOrDefault();
systemUser.VarietyIds = VarietyIds ?? string.Empty;
db.SaveChanges();
}
}
public static List<Role> GetRolesByUserId(int userId)
{
string cacheKey = string.Format("GetRolesByUserId{0}", userId);
var list = MemoryCacheProvider.Default.Get<List<Role>>(cacheKey);
if (list != null)
{
return list;
}
using (var baseCon = new ErpBaseContext())
{
var query = from usserRole in baseCon.RoleUsers
join role in baseCon.Roles.AsNoTracking() on usserRole.RoleId equals role.Id
where usserRole.UserId == userId
select role;
list = query.ToList();
MemoryCacheProvider.Default.Set(cacheKey, list, DateTime.Now.AddMinutes(2));
return list;
}
}
/// <summary>
/// 当前登录人是否是交易员
/// </summary>
/// <returns></returns>
public static bool IsTradeOfCurrentLogin(int userId)
{
if ((UserBLL.GetAccountPostEnum(userId) & (int)AccountPostEnum.交易员) > 0)
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 1 客户经理,2 交易员 ,3 客户经理+交易员
/// </summary>
/// <param name="UserId"></param>
/// <returns></returns>
public static int GetAccountPostEnum(int UserId)
{
using (var basedb = new ErpBaseContext())
{
return basedb.SystemUsers.FirstOrDefault(a => a.Id == UserId && a.State == 0)?.AccountPost ?? 0;
}
}
public static List<SystemUser> GetNotChildrenSystemUsers(int Id)
{
var basedb = new ErpBaseContext();
var systemUserAll = basedb.SystemUsers.Where(a => a.State == 0).AsQueryable().ToList();
var chlidrens = GetChildrenSystemUsers(Id, true);
if (chlidrens.Any())
{
var rootUser = chlidrens.Where(a => a.Id == Id).FirstOrDefault();
if (chlidrens.Any(a => a.Id == rootUser.ParentId))
{
var parentUser = chlidrens.Where(a => a.Id == rootUser.ParentId).FirstOrDefault();
chlidrens.Remove(parentUser);
}
systemUserAll.RemoveAll(a => chlidrens.Any(b => b.Id == a.Id));
}
return systemUserAll;
}
public static List<SystemUser> GetChildrenSystemUsers(int parentId, bool IsParent)
{
using (var basedb = new ErpBaseContext())
{
var systemUserAll = basedb.SystemUsers.Where(a => a.State == 0).AsQueryable().ToList();
var rootUser = systemUserAll.Where(a => a.Id == parentId).FirstOrDefault();
if (rootUser == null)
{
throw new ServiceException("当前账号不存在");
}
List<SystemUser> systemUsers = new List<SystemUser>();
systemUsers.Add(rootUser);
if ((rootUser.ParentId ?? 0) != 0 && IsParent)
{
var parentUser = systemUserAll.Where(a => a.Id == rootUser.ParentId).FirstOrDefault();
if (parentUser != null)
{
systemUsers.Add(parentUser);
}
}
FoundChildNode(systemUserAll, systemUsers, new List<SystemUser>() { rootUser });
return systemUsers;
}
}
public static void FoundChildNode(List<SystemUser> all, List<SystemUser> systemUsers, List<SystemUser> items)
{
List<SystemUser> systemUserChilds = all.Where(c => items.Any(a => a.Id == c.ParentId)).ToList();
if (systemUserChilds.Any())
{
systemUsers.AddRange(systemUserChilds);
FoundChildNode(all, systemUsers, systemUserChilds);
}
}
public SearchListResult<ViewUser> SearchSystemUserList(SystemUserReq req)
{
using (var db = new ErpBaseContext())
{
var predicate = PredicateBuilder.True<SystemUser>();
if (!string.IsNullOrWhiteSpace(req.Ids))
{
predicate = predicate.And(u => req.IdList.Contains(u.Id));
}
if (!string.IsNullOrWhiteSpace(req.DepartmentIds))
{
predicate = predicate.And(u => db.DepartmentUsers.Any(n => n.UserId == u.Id && req.DepartmentIdList.Contains(n.DepartmentId)));
}
if (!string.IsNullOrWhiteSpace(req.RoleIds))
{
predicate = predicate.And(u => db.RoleUsers.Any(n => n.UserId == u.Id && req.RoleIdList.Contains(n.RoleId)));
}
if (req.State.HasValue)
{
predicate = predicate.And(u => u.State == req.State.Value);
}
if (!string.IsNullOrWhiteSpace(req.UserGroup))
{
predicate = predicate.And(u => u.UserGroup == req.UserGroup);
}
var query = from source in db.SystemUsers.Where(predicate)
select new ViewUser
{
id = source.Id,
LoginName = source.LoginName,
Name = source.Name,
Email = source.Email,
Tel = source.Tel,
QQ = source.QQ,
Mobile = source.Mobile,
BondIP = source.BondIP,
DepartmentId = 0,
RoleId = 0,
State = source.State,
UserGroup = source.UserGroup,
AccountPost = source.AccountPost + "",
OaAccount=source.OaAccount
};
var result = query.OrderBy(u => u.id).ToSearchList(req);
var resultList = new List<ViewUser>();
Func<int, string> departmentQuery = (userId) =>
{
var departQuery = from departUser in db.DepartmentUsers
join depart in db.Departments on departUser.DepartmentId equals depart.Id
where departUser.UserId == userId
select depart.Name;
return string.Join(",", departQuery.Distinct());
};
Func<int, string> roleQuery = (userId) =>
{
var rQuery = from roleUser in db.RoleUsers
join role in db.Roles on roleUser.RoleId equals role.Id
where roleUser.UserId == userId
select role.Name;
return string.Join(",", rQuery.Distinct());
};
foreach (var r in result.rows)
{
r.Departments = departmentQuery(r.id);
r.Roles = roleQuery(r.id);
r.AccountPost = ToAccountPost(Convert.ToInt32(r.AccountPost));
}
return result;
}
}
public string ToAccountPost(int AccountPost)
{
if (AccountPost == 0) { return string.Empty; }
switch (AccountPost)
{
case 1: return "对冲交易询价对象";
case 2: return "非对冲交易询价对象";
default: return "对冲交易询价对象,非对冲交易询价对象";
}
}
public static void AddDefaultUser()
{
using (var db = new ErpBaseContext())
{
var dbRole = db.Roles.FirstOrDefault(m => m.Name == "权限管理员");
if (dbRole == null)
{
dbRole = new Role()
{
Name = "权限管理员",
Remark = "初始角色",
Position = "[]",
OptDate = DateTime.Now
};
db.Roles.Add(dbRole);
}
SystemUser dbUser = db.SystemUsers.FirstOrDefault(m => m.LoginName == "superA");
if (dbUser == null)
{
dbUser = new SystemUser { VarietyIds = string.Empty, LoginName = "superA" };
db.SystemUsers.Add(dbUser);
}
else
{
db.RoleUsers.RemoveRange(db.RoleUsers.Where(o => o.UserId == dbUser.Id));
}
dbUser.State = 0;
dbUser.Name = "初始用户";
dbUser.Password = DataHelper.EncryptPassword(dbUser.LoginName.ToLower(), "Abc12345!");
dbUser.RoleType = dbRole.Id.ToString();
db.SaveChanges();
RoleUser roleUser = new RoleUser();
roleUser.UserId = dbUser.Id;
roleUser.RoleId = dbRole.Id;
db.RoleUsers.Add(roleUser);
db.SaveChanges();
}
}
/// <summary>
/// 根据权限查询用户信息
/// 例如:var customerManagerFirst = UserBLL.GetSystemUserByFunction("担任客户经理")
/// </summary>
/// <param name="fName"></param>
/// <returns></returns>
public static List<SystemUser> GetSystemUserByFunction(string fName)
{
var users = new List<SystemUser>();
using (var db = new ErpBaseContext())
{
users = (from a in db.SystemUsers join b in db.RoleUsers on a.Id equals b.UserId join o in db.RoleFunctions on b.RoleId equals o.RoleId join p in db.Functions on o.FunctionId equals p.Id where p.Name == fName && a.State != 1 select a).Distinct().ToList();
return users;
}
}
public static SearchListResult<SystemUserVariety> GetSystemUserVariety(SystemUserVarietyReq req)
{
List<SystemUserVariety> systemUserVarieties = new List<SystemUserVariety>();
using (var db = new ErpBaseContext())
{
var query = db.SystemUsers.Where(a => a.State == 0 && !string.IsNullOrEmpty(a.VarietyIds)).AsQueryable();
if (req.UserId != 0)
{
query = query.Where(a => a.Id == req.UserId);
}
if (req.VarietyIds != null && req.VarietyIds.Any())
{
query = query.Where(a => req.VarietyIds.Any(b => a.VarietyIds.Contains(b + "")));
}
var SystemUsersList = query.OrderBy(a => a.Id).ToSearchList(req);
foreach (var users in SystemUsersList.rows)
{
List<string> varietyNames = new List<string>();
if (users.VarietyIdList.Any())
{
users.VarietyIdList.ForEach(a =>
{
var variety = DataCacheProvider.GetVarietyDataSource().GetData(a);
if (variety != null)
{
varietyNames.Add(variety.VarietyName);
}
});
}
systemUserVarieties.Add(new SystemUserVariety
{
UserId = users.Id,
UserName = users.Name,
VarietyId = users.VarietyIds,
VarietyName = varietyNames.Any() ? string.Join(",", varietyNames) : "无"
});
}
return new SearchListResult<SystemUserVariety>(SystemUsersList, systemUserVarieties);
}
}
/// <summary>
/// 为空代表所有品种均可使用
/// 为0代表没有品种权限
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public static IEnumerable<int> GetUserVarietyIds(int userId)
{
using (var db = new ErpBaseContext())
{
var user = db.SystemUsers.Where(a => a.State == 0 && a.Id == userId).FirstOrDefault();
if (user is null)
{
throw new ServiceException("未找到当前交易员信息");
}
if (user.VarietyIdList.Any())
{
return user.VarietyIdList;
}
return DataCacheProvider.GetVarietyDataSource().AsQueryable().Select(x => x.id);
}
}
/// <summary>
/// 获取用户审批组id
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public static int GetApprovalProcessGroup(int userId)
{
int groupId = 0;
using (var db = new ErpBaseContext())
{
var query = db.approvalgroupmembers.FirstOrDefault(x => x.memberId == userId);
if (query != null)
{
groupId = query.groupId;
}
}
return groupId;
}
/// <summary>
/// 获取审批组用户
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public static List<int> GetApprovalProcessGroupUser(IEnumerable<int> groupId)
{
List<int> userIds = null;
using (var db = new ErpBaseContext())
{
userIds = db.approvalgroupmembers.Where(x => groupId.Contains(x.groupId)).Select(x => x.memberId).ToList();
}
return userIds;
}
}
}