Files
number_zj/20220330_Vote/Ewide.RoadFlow/Data/User/UserDummy.cs
2022-03-30 17:54:33 +08:00

551 lines
21 KiB
C#
Raw 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 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();
}
}
}