496 lines
18 KiB
C#
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;
|
|
}
|
|
}
|
|
} |