551 lines
21 KiB
C#
551 lines
21 KiB
C#
using Ewide.Core;
|
||
using Furion;
|
||
using Furion.DatabaseAccessor;
|
||
using Furion.DependencyInjection;
|
||
using Newtonsoft.Json.Linq;
|
||
using RoadFlow.Data;
|
||
using RoadFlow.Model.FlowRunModel;
|
||
using RoadFlow.Utility;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Drawing;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
|
||
|
||
namespace RoadFlow.Data
|
||
{
|
||
public class UserDummy: IUserDummy, ITransient
|
||
{
|
||
private readonly IRepository<SysUser> _sysUserRep =App.GetService<IRepository<SysUser>>(); // 用户表仓储
|
||
private readonly IRepository<SysOrg> _sysOrgRep =App.GetService< IRepository<SysOrg>>();
|
||
private readonly IRepository<SysEmp> _sysEmpRep=App.GetService<IRepository<SysEmp>>();
|
||
private readonly IRepository<SysEmpExtOrgPos> _sysEmpExtOrgPosRep= App.GetService<IRepository<SysEmpExtOrgPos>>();
|
||
private readonly IRepository<SysRole> _sysRoleRep= App.GetService<IRepository<SysRole>>();
|
||
private readonly IOrganize _organize = new Organize();
|
||
private readonly IUserManager _userManager = App.GetService<IUserManager>();
|
||
private readonly IRepository<SysRoleDataScope> _sysRoleDataScopeRep= App.GetService<IRepository<SysRoleDataScope>>();
|
||
|
||
/// <summary>
|
||
/// 根据一组ID字符串得到人员的姓名
|
||
/// </summary>
|
||
/// <param name="id">逗号分开的ID</param>
|
||
/// <returns></returns>
|
||
public string GetNames(string ids)
|
||
{
|
||
if (ids.IsNullOrEmpty())
|
||
{
|
||
return string.Empty;
|
||
}
|
||
StringBuilder stringBuilder = new StringBuilder();
|
||
List<string> userids = new List<string>();
|
||
foreach (string id in ids.Split(','))
|
||
{
|
||
string userId = id;
|
||
if (id.StartsWith(IOrganize.PREFIX_USER))
|
||
{
|
||
userId = id.RemoveUserPrefix();
|
||
}
|
||
if (!userId.IsGuid())
|
||
{
|
||
continue;
|
||
}
|
||
userids.Add(userId);
|
||
}
|
||
List<SysUser> users = _sysUserRep.DetachedEntities.Where(x => userids.Contains(x.Id)).ToList();
|
||
foreach (SysUser u in users)
|
||
{
|
||
stringBuilder.Append(u.Name);
|
||
stringBuilder.Append("、");
|
||
}
|
||
return stringBuilder.ToString().TrimEnd('、');
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 判断一个人员ID是否在一个组织机构字符串中
|
||
/// </summary>
|
||
/// <param name="organizeIds"></param>
|
||
/// <param name="userId"></param>
|
||
/// <returns></returns>
|
||
public bool Contains(string organizeIds, string userId)
|
||
{
|
||
string[] orgids = organizeIds.Split(',');
|
||
for (int a = 0; a < orgids.Length; a++)
|
||
{
|
||
string curent = orgids[a];
|
||
if (curent.StartsWith(IOrganize.PREFIX_USER) && curent.RemoveUserPrefix() == userId)
|
||
return true;
|
||
if (curent.StartsWith(IOrganize.PREFIX_RELATION) && curent.RemoveUserRelationPrefix() == userId)
|
||
return true;
|
||
if (curent.StartsWith(IOrganize.PREFIX_WORKGROUP))
|
||
orgids[a] = curent.RemoveWorkGroupPrefix();
|
||
}
|
||
bool emp =_sysEmpRep.Count(x => x.Id == userId && orgids.Contains(x.OrgId))>0;
|
||
bool extEmp=_sysEmpExtOrgPosRep.Count(x => x.SysEmpId == userId && orgids.Contains(x.SysOrgId)) > 0;
|
||
return emp | extEmp;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 判断一个人员是否在一个组织架构字符串里
|
||
/// </summary>
|
||
/// <param name="userId"></param>
|
||
/// <param name="memberIds"></param>
|
||
/// <returns></returns>
|
||
public bool IsIn(string userId, string memberIds)
|
||
{
|
||
if (!userId.IsGuid())
|
||
{
|
||
return false;
|
||
}
|
||
else if (userId.StartsWith(IOrganize.PREFIX_USER))
|
||
{
|
||
userId = userId.RemoveUserPrefix();
|
||
}
|
||
else if (userId.StartsWith(IOrganize.PREFIX_RELATION))
|
||
{
|
||
userId = userId.RemoveUserRelationPrefix ();
|
||
}
|
||
|
||
var users = _organize.GetAllUsers(memberIds);
|
||
return users.Exists(p => p.Id == userId);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 得到人员的签章图片路径(VUE版本)
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public string GetSignSrcVue(string userId = "", string userName = "")
|
||
{
|
||
string rootPath = Tools.GetContentRootPath() + "/wwwroot";
|
||
string signPath = "/roadflow-files/user-signs/" + (userId.IsNullOrWhiteSpace() ? _userManager.UserId.ToLower() : userId.ToLower()) + "/default.png";
|
||
if (File.Exists(rootPath + signPath))
|
||
{
|
||
return signPath;
|
||
}
|
||
else
|
||
{
|
||
string dirName = Path.GetDirectoryName(rootPath + signPath);
|
||
if (!Directory.Exists(dirName))
|
||
{
|
||
Directory.CreateDirectory(dirName);
|
||
}
|
||
var img = CreateSignImage(userName.IsNullOrWhiteSpace() ? _userManager.Name : userName);
|
||
img.Save(rootPath + signPath, System.Drawing.Imaging.ImageFormat.Png);
|
||
return signPath;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 重置签章图片
|
||
/// </summary>
|
||
/// <param name="userId"></param>
|
||
/// <param name="userName"></param>
|
||
/// <returns></returns>
|
||
public string ResetSignSrcVue(string userId = "", string userName = "")
|
||
{
|
||
string rootPath = Tools.GetContentRootPath() + "/wwwroot";
|
||
string signPath = "/roadflow-files/user-signs/" + (userId.IsNullOrWhiteSpace() ? _userManager.UserId.ToLower(): userId.ToLower()) + "/default.png";
|
||
string dirName = Path.GetDirectoryName(rootPath + signPath);
|
||
if (!Directory.Exists(dirName))
|
||
{
|
||
Directory.CreateDirectory(dirName);
|
||
}
|
||
var img = CreateSignImage(userName.IsNullOrWhiteSpace() ? _userManager.Name : userName);
|
||
img.Save(rootPath + signPath, System.Drawing.Imaging.ImageFormat.Png);
|
||
return signPath;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 生成签章图片
|
||
/// </summary>
|
||
/// <param name="UserName"></param>
|
||
/// <returns></returns>
|
||
public Bitmap CreateSignImage(string UserName)
|
||
{
|
||
if (UserName.IsNullOrEmpty())
|
||
{
|
||
return null;
|
||
}
|
||
Random rand = new Random(UserName.GetHashCode());
|
||
Size ImageSize = Size.Empty;
|
||
Font myFont;
|
||
try
|
||
{
|
||
myFont = new Font("LiSu", 16);
|
||
}
|
||
catch
|
||
{
|
||
myFont = new Font(new FontFamily(System.Drawing.Text.GenericFontFamilies.Monospace), 16);
|
||
}
|
||
// 计算图片大小
|
||
using (Bitmap bmp1 = new Bitmap(5, 5))
|
||
{
|
||
using (Graphics g = Graphics.FromImage(bmp1))
|
||
{
|
||
SizeF size = g.MeasureString(UserName, myFont, 10000);
|
||
ImageSize.Width = (int)size.Width + 4;
|
||
ImageSize.Height = (int)size.Height;
|
||
}
|
||
}
|
||
// 创建图片
|
||
Bitmap bmp = new Bitmap(ImageSize.Width, ImageSize.Height);
|
||
// 绘制文本
|
||
using (Graphics g = Graphics.FromImage(bmp))
|
||
{
|
||
g.Clear(Color.White);
|
||
using (StringFormat f = new StringFormat())
|
||
{
|
||
f.Alignment = StringAlignment.Center;
|
||
f.LineAlignment = StringAlignment.Center;
|
||
f.FormatFlags = StringFormatFlags.NoWrap;
|
||
g.DrawString(
|
||
UserName,
|
||
myFont,
|
||
Brushes.Red,
|
||
new RectangleF(
|
||
0,
|
||
2,
|
||
ImageSize.Width,
|
||
ImageSize.Height),
|
||
f);
|
||
}
|
||
}
|
||
|
||
// 随机制造噪点 (用户名绑定)
|
||
Color c = Color.Red;
|
||
int x, y;
|
||
int num = ImageSize.Width * ImageSize.Height * 8 / 100;
|
||
for (int iCount = 0; iCount < num; iCount++)
|
||
{
|
||
x = rand.Next(0, 4);
|
||
y = rand.Next(ImageSize.Height);
|
||
bmp.SetPixel(x, y, c);
|
||
|
||
x = rand.Next(ImageSize.Width - 4, ImageSize.Width);
|
||
y = rand.Next(ImageSize.Height);
|
||
bmp.SetPixel(x, y, c);
|
||
|
||
}
|
||
|
||
int num1 = ImageSize.Width * ImageSize.Height * 20 / 100;
|
||
for (int iCount = 0; iCount < num1; iCount++)
|
||
{
|
||
x = rand.Next(ImageSize.Width);
|
||
y = rand.Next(0, 4);
|
||
bmp.SetPixel(x, y, c);
|
||
|
||
x = rand.Next(ImageSize.Width);
|
||
y = rand.Next(ImageSize.Height - 4, ImageSize.Height);
|
||
bmp.SetPixel(x, y, c);
|
||
}
|
||
|
||
int num2 = ImageSize.Width * ImageSize.Height / 150;
|
||
for (int iCount = 0; iCount < num2; iCount++)
|
||
{
|
||
x = rand.Next(ImageSize.Width);
|
||
y = rand.Next(ImageSize.Height);
|
||
bmp.SetPixel(x, y, c);
|
||
}
|
||
myFont.Dispose();
|
||
return bmp;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取用户部门
|
||
/// </summary>
|
||
/// <param name="uid"></param>
|
||
/// <returns></returns>
|
||
public SysOrg GetDept(string uid)
|
||
{
|
||
string oid = _sysEmpRep.DetachedEntities.FirstOrDefault(x => x.Id == uid).OrgId;
|
||
return _sysOrgRep.DetachedEntities.FirstOrDefault(x => x.Id == oid);
|
||
|
||
}
|
||
|
||
public SysPos GetStation(string uid)
|
||
{
|
||
return _sysEmpRep.DetachedEntities.FirstOrDefault(x => x.Id == uid).SysEmpPos[0].SysPos;
|
||
}
|
||
|
||
public string GetWorkGroupsId(string userId)
|
||
{
|
||
return string.Empty;
|
||
}
|
||
public string GetWorkGroupsName(string userId)
|
||
{
|
||
return string.Empty;
|
||
}
|
||
public static string LEADER_CODE="";
|
||
|
||
public string GetLeader(string userId)
|
||
{
|
||
string orgid =_sysEmpRep.DetachedEntities.FirstOrDefault(x => x.Id == userId).OrgId;
|
||
var emps =_sysEmpRep.DetachedEntities.Where(x => x.OrgId == orgid).ToList();
|
||
HashSet<string> userIds = new HashSet<string>();
|
||
foreach (var e in emps)
|
||
userIds.Add(e.Id);
|
||
var leaders =_sysRoleRep.DetachedEntities.Where(x => x.Code == LEADER_CODE).ToList();
|
||
foreach (var l in leaders)
|
||
{
|
||
foreach (var u in l.SysUsers)
|
||
{
|
||
if (userIds.Contains(u.Id))
|
||
return u.Id;
|
||
}
|
||
|
||
}
|
||
return string.Empty;
|
||
|
||
}
|
||
public SysOrg GetUnit(string userId)
|
||
{
|
||
string orgid =_sysEmpRep.DetachedEntities.FirstOrDefault(x => x.Id == userId).OrgId;
|
||
return _sysOrgRep.DetachedEntities.FirstOrDefault(x => x.Id == orgid);
|
||
}
|
||
|
||
public string GetName(string userId)
|
||
{
|
||
return _sysUserRep.DetachedEntities.FirstOrDefault(x => x.Id == userId)?.Name;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 得到一个人员所在部门的工作角色
|
||
/// </summary>
|
||
/// <param name="id">人员id</param>
|
||
/// <returns></returns>
|
||
public JArray GetWorkRole(string userId)
|
||
{
|
||
SysUser usr =_sysUserRep.DetachedEntities.FirstOrDefault(x => x.Id == userId);
|
||
return JArray.FromObject(usr.SysRoles);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 得到一批人员的部门领导和分管领导
|
||
/// </summary>
|
||
/// <param name="userIds"></param>
|
||
/// <returns></returns>
|
||
public (string leader, string chargeLeader) GetLeader(List<string> userIds)
|
||
{
|
||
StringBuilder leaderBuilder = new StringBuilder();
|
||
StringBuilder chargeLeaderBuilder = new StringBuilder();
|
||
foreach (string userId in userIds)
|
||
{
|
||
string leader = GetLeader(userId);
|
||
string chargeLeader = leader;
|
||
leaderBuilder.Append(leader);
|
||
leaderBuilder.Append(",");
|
||
chargeLeaderBuilder.Append(chargeLeader);
|
||
chargeLeaderBuilder.Append(",");
|
||
}
|
||
return (leaderBuilder.ToString().TrimEnd(','), chargeLeaderBuilder.ToString().TrimEnd(','));
|
||
}
|
||
|
||
/// <summary>
|
||
/// 得到一个人员的上级部门领导
|
||
/// </summary>
|
||
/// <param name="userId">guid(人ID),u_guid(人ID),r_guid(关系表ID)</param>
|
||
/// <returns></returns>
|
||
public (string leader, string chargeLeader) GetParentLeader(string userId)
|
||
{
|
||
var emp = _sysEmpRep.DetachedEntities.FirstOrDefault(x => x.Id == userId);
|
||
var org = _sysOrgRep.DetachedEntities.FirstOrDefault(x => x.Id == emp.OrgId);
|
||
var parent = _sysOrgRep.DetachedEntities.FirstOrDefault(x => x.Id == org.Pid);
|
||
|
||
var emps = _sysEmpRep.DetachedEntities.Where(x => x.OrgId == parent.Id).ToList();
|
||
HashSet<string> userIds = new HashSet<string>();
|
||
foreach (var e in emps)
|
||
userIds.Add(e.Id);
|
||
var leaders = _sysRoleRep.DetachedEntities.Where(x => x.Code == LEADER_CODE).ToList();
|
||
foreach (var l in leaders)
|
||
{
|
||
foreach (var u in l.SysUsers)
|
||
{
|
||
if (userIds.Contains(u.Id))
|
||
return (u.Id,u.Id);
|
||
}
|
||
|
||
}
|
||
return (string.Empty, string.Empty);
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 得到一批人员的上级部门领导
|
||
/// </summary>
|
||
/// <param name="userId">guid(人ID),u_guid(人ID),r_guid(关系表ID)</param>
|
||
/// <returns></returns>
|
||
public (string leader, string chargeLeader) GetParentLeader(List<string> userIds)
|
||
{
|
||
StringBuilder leaderBuilder = new StringBuilder();
|
||
StringBuilder chargeLeaderBuilder = new StringBuilder();
|
||
foreach (string userId in userIds)
|
||
{
|
||
(string leader, string chargeLeader) = GetParentLeader(userId);
|
||
leaderBuilder.Append(leader);
|
||
leaderBuilder.Append(",");
|
||
chargeLeaderBuilder.Append(chargeLeader);
|
||
chargeLeaderBuilder.Append(",");
|
||
}
|
||
return (leaderBuilder.ToString().TrimEnd(','), chargeLeaderBuilder.ToString().TrimEnd(','));
|
||
}
|
||
|
||
/// <summary>
|
||
/// 得到一个人员的所有上级部门领导
|
||
/// </summary>
|
||
/// <param name="userId"></param>
|
||
/// <returns></returns>
|
||
public (string leader, string chargeLeader) GetAllParentLeader(string userId)
|
||
{
|
||
|
||
var emp = _sysEmpRep.DetachedEntities.FirstOrDefault(x => x.Id == userId);
|
||
var org = _sysOrgRep.DetachedEntities.FirstOrDefault(x => x.Id == emp.OrgId);
|
||
List<string> orgIds = new List<string>();
|
||
foreach (string str in org.Pids.Split("],",StringSplitOptions.RemoveEmptyEntries))
|
||
{
|
||
orgIds.Add(str.TrimStart('['));
|
||
}
|
||
List<SysEmp> emps =_sysEmpRep.DetachedEntities.Where(x => orgIds.Contains(x.OrgId)).ToList();
|
||
HashSet<string> uids = new HashSet<string>();
|
||
foreach (SysEmp em in emps)
|
||
uids.Add(em.Id);
|
||
|
||
var leaders = _sysRoleRep.DetachedEntities.Where(x => x.Code == LEADER_CODE).ToList();
|
||
|
||
StringBuilder leader = new StringBuilder();
|
||
foreach (var l in leaders)
|
||
{
|
||
foreach (var u in l.SysUsers)
|
||
{
|
||
if (uids.Contains(u.Id))
|
||
leader.Append(u.Id).Append(",");
|
||
}
|
||
}
|
||
string rtn = leader.ToString().TrimEnd(',');
|
||
return (rtn,rtn);
|
||
|
||
}
|
||
/// <summary>
|
||
/// 得到一批人员的所有上级部门领导
|
||
/// </summary>
|
||
/// <param name="userId"></param>
|
||
/// <returns></returns>
|
||
public (string leader, string chargeLeader) GetAllParentLeader(List<string> userIds)
|
||
{
|
||
var empss = _sysEmpRep.DetachedEntities.Where(x => userIds.Contains(x.Id) ).ToList();
|
||
HashSet<string> orgset = new HashSet<string>();
|
||
foreach (var em in empss)
|
||
{
|
||
orgset.Add(em.OrgId);
|
||
}
|
||
var orgs =_sysOrgRep.DetachedEntities.Where(x => orgset.Contains(x.Id));
|
||
HashSet<string> orgIds = new HashSet<string>();
|
||
foreach (var org in orgs)
|
||
{
|
||
foreach (string str in org.Pids.Split("],", StringSplitOptions.RemoveEmptyEntries))
|
||
{
|
||
orgIds.Add(str.TrimStart('['));
|
||
}
|
||
}
|
||
List<SysEmp> emps = _sysEmpRep.DetachedEntities.Where(x => orgIds.Contains(x.OrgId)).ToList();
|
||
HashSet<string> uids = new HashSet<string>();
|
||
foreach (SysEmp em in emps)
|
||
uids.Add(em.Id);
|
||
|
||
var leaders = _sysRoleRep.DetachedEntities.Where(x => x.Code == LEADER_CODE).ToList();
|
||
|
||
StringBuilder leader = new StringBuilder();
|
||
foreach (var l in leaders)
|
||
{
|
||
foreach (var u in l.SysUsers)
|
||
{
|
||
if (uids.Contains(u.Id))
|
||
leader.Append(u.Id).Append(",");
|
||
}
|
||
}
|
||
string rtn = leader.ToString().TrimEnd(',');
|
||
return (rtn, rtn);
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 得到人员ID字符串
|
||
/// </summary>
|
||
/// <param name="users"></param>
|
||
/// <returns>u_人员ID1,u_人员ID2</returns>
|
||
public string GetUserIds(List<User> users)
|
||
{
|
||
StringBuilder stringBuilder = new StringBuilder();
|
||
foreach (var user in users)
|
||
{
|
||
stringBuilder.Append(IOrganize.PREFIX_USER);
|
||
stringBuilder.Append(user.Id);
|
||
stringBuilder.Append(",");
|
||
}
|
||
return stringBuilder.ToString().TrimEnd(',');
|
||
}
|
||
public string GetUserIds(List<SysUser> users)
|
||
{
|
||
StringBuilder stringBuilder = new StringBuilder();
|
||
foreach (var user in users)
|
||
{
|
||
stringBuilder.Append(IOrganize.PREFIX_USER);
|
||
stringBuilder.Append(user.Id);
|
||
stringBuilder.Append(",");
|
||
}
|
||
return stringBuilder.ToString().TrimEnd(',');
|
||
}
|
||
|
||
public string GetUserIds(List<SysEmp> users)
|
||
{
|
||
StringBuilder stringBuilder = new StringBuilder();
|
||
foreach (var user in users)
|
||
{
|
||
stringBuilder.Append(IOrganize.PREFIX_USER);
|
||
stringBuilder.Append(user.Id);
|
||
stringBuilder.Append(",");
|
||
}
|
||
return stringBuilder.ToString().TrimEnd(',');
|
||
}
|
||
/// <summary>
|
||
/// 得到一个人员所在部门所有人员
|
||
/// </summary>
|
||
/// <param name="userId">guid(人ID),u_guid(人ID),r_guid(关系表ID)</param>
|
||
/// <returns></returns>
|
||
public List<SysEmp> GetOrganizeUsers(string userId)
|
||
{
|
||
string id = userId.StartsWith(IOrganize.PREFIX_RELATION) ? userId.RemoveUserRelationPrefix() : userId.StartsWith(IOrganize.PREFIX_USER) ? userId.RemoveUserPrefix() : userId;
|
||
string oid =_sysEmpRep.DetachedEntities.FirstOrDefault(x => x.Id == id).OrgId;
|
||
return _sysEmpRep.DetachedEntities.Where(x => x.OrgId == oid).ToList();
|
||
/*Guid organzieId = GetOrganizeId(userId);
|
||
return new Organize(systemCode).GetAllUsers(organzieId);*/
|
||
}
|
||
private HashSet<SysUser> tmpUserCache;
|
||
public SysUser GetFromTempCache(string userId)
|
||
{
|
||
if (tmpUserCache == null)
|
||
tmpUserCache = _sysUserRep.DetachedEntities.ToHashSet();
|
||
return tmpUserCache.FirstOrDefault(x => x.Id == userId);
|
||
}
|
||
|
||
public SysUser Get(string id)
|
||
{
|
||
return _sysUserRep.DetachedEntities.FirstOrDefault(x=>x.Id ==id);
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 得到用户加密后的密码
|
||
/// </summary>
|
||
/// <param name="userId">用户ID</param>
|
||
/// <param name="password">密码</param>
|
||
/// <returns></returns>
|
||
public string GetMD5Password(string userId, string password)
|
||
{
|
||
return (userId.ToString().ToUpper() + password).MD5();
|
||
}
|
||
}
|
||
}
|