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 _sysUserRep =App.GetService>(); // 用户表仓储 private readonly IRepository _sysOrgRep =App.GetService< IRepository>(); private readonly IRepository _sysEmpRep=App.GetService>(); private readonly IRepository _sysEmpExtOrgPosRep= App.GetService>(); private readonly IRepository _sysRoleRep= App.GetService>(); private readonly IOrganize _organize = new Organize(); private readonly IUserManager _userManager = App.GetService(); private readonly IRepository _sysRoleDataScopeRep= App.GetService>(); /// /// 根据一组ID字符串得到人员的姓名 /// /// 逗号分开的ID /// public string GetNames(string ids) { if (ids.IsNullOrEmpty()) { return string.Empty; } StringBuilder stringBuilder = new StringBuilder(); List userids = new List(); 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 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('、'); } /// /// 判断一个人员ID是否在一个组织机构字符串中 /// /// /// /// 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; } /// /// 判断一个人员是否在一个组织架构字符串里 /// /// /// /// 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); } /// /// 得到人员的签章图片路径(VUE版本) /// /// 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; } } /// /// 重置签章图片 /// /// /// /// 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; } /// /// 生成签章图片 /// /// /// 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; } /// /// 获取用户部门 /// /// /// 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 userIds = new HashSet(); 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; } /// /// 得到一个人员所在部门的工作角色 /// /// 人员id /// public JArray GetWorkRole(string userId) { SysUser usr =_sysUserRep.DetachedEntities.FirstOrDefault(x => x.Id == userId); return JArray.FromObject(usr.SysRoles); } /// /// 得到一批人员的部门领导和分管领导 /// /// /// public (string leader, string chargeLeader) GetLeader(List 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(',')); } /// /// 得到一个人员的上级部门领导 /// /// guid(人ID),u_guid(人ID),r_guid(关系表ID) /// 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 userIds = new HashSet(); 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); } /// /// 得到一批人员的上级部门领导 /// /// guid(人ID),u_guid(人ID),r_guid(关系表ID) /// public (string leader, string chargeLeader) GetParentLeader(List 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(',')); } /// /// 得到一个人员的所有上级部门领导 /// /// /// 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 orgIds = new List(); foreach (string str in org.Pids.Split("],",StringSplitOptions.RemoveEmptyEntries)) { orgIds.Add(str.TrimStart('[')); } List emps =_sysEmpRep.DetachedEntities.Where(x => orgIds.Contains(x.OrgId)).ToList(); HashSet uids = new HashSet(); 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); } /// /// 得到一批人员的所有上级部门领导 /// /// /// public (string leader, string chargeLeader) GetAllParentLeader(List userIds) { var empss = _sysEmpRep.DetachedEntities.Where(x => userIds.Contains(x.Id) ).ToList(); HashSet orgset = new HashSet(); foreach (var em in empss) { orgset.Add(em.OrgId); } var orgs =_sysOrgRep.DetachedEntities.Where(x => orgset.Contains(x.Id)); HashSet orgIds = new HashSet(); foreach (var org in orgs) { foreach (string str in org.Pids.Split("],", StringSplitOptions.RemoveEmptyEntries)) { orgIds.Add(str.TrimStart('[')); } } List emps = _sysEmpRep.DetachedEntities.Where(x => orgIds.Contains(x.OrgId)).ToList(); HashSet uids = new HashSet(); 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); } /// /// 得到人员ID字符串 /// /// /// u_人员ID1,u_人员ID2 public string GetUserIds(List 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 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 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(','); } /// /// 得到一个人员所在部门所有人员 /// /// guid(人ID),u_guid(人ID),r_guid(关系表ID) /// public List 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 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); } /// /// 得到用户加密后的密码 /// /// 用户ID /// 密码 /// public string GetMD5Password(string userId, string password) { return (userId.ToString().ToUpper() + password).MD5(); } } }