using DS.Module.Core; using DS.Module.Core.Extensions; using DS.Module.Core.Helpers; using DS.Module.UserModule; using DS.WMS.Core.System.Dtos; using DS.WMS.Core.System.Entity; using DS.WMS.Core.System.Interface; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using SqlSugar; using System.Diagnostics; using System.Runtime.InteropServices; using Mapster; using Newtonsoft.Json; namespace DS.WMS.Core.System.Method; /// /// 公共服务 /// public class CommonService : ICommonService { private readonly IServiceProvider _serviceProvider; private readonly ISqlSugarClient db; private readonly IUser user; private readonly IHttpContextAccessor IhttpContext; private readonly IWebHostEnvironment _environment; /// /// /// /// public CommonService(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; db = _serviceProvider.GetRequiredService(); user = _serviceProvider.GetRequiredService(); IhttpContext = _serviceProvider.GetRequiredService(); _environment = _serviceProvider.GetRequiredService(); } /// /// 用户登录 /// /// /// public DataResult UserLogin(UserLoginModel model) { var userInfo = db.Queryable().Filter(null, true) .First(x => x.UserCode == model.UserName); if (userInfo == null) { return DataResult.Failed("账号不存在,请检查!"); } if (userInfo.MD5Password != model.Password) { return DataResult.Failed("密码错误!"); } var tokenModel = new JwtHelper.JwtTokenModel { Uid = userInfo.Id.ToString(), // CompanyId = userInfo.CompanyId, // GID = userInfo.GID, TenantId = userInfo.TenantId.ToString(), }; var token = JwtHelper.Encrypt(tokenModel); return DataResult.Success(token); } /// /// /// /// /// public DataResult GetUserInfo() { var userId = long.Parse(user.UserId); var tenantId = user.GetTenantId(); var data = db.Queryable().Filter(null, true).Where(x => x.Id == userId) .Select(a => new CurrentUserViewModel { UserId = a.Id, UserCode = a.UserCode, UserName = a.NickName, TenantId = tenantId, UserType = a.UserType, CompanyId = a.CompanyId, ClientId = a.ClientId, IsLimitClient = a.IsLimitClient // CompanyId = a.CompanyId.ToString(), CompanyName = a.CustomerName }) .Mapper(it => { //只能写在Select后面 it.HomePath = "/analysis"; }) .First(); return DataResult.Success(data); } /// /// 查询用户拥有的菜单权限 /// /// public DataResult> GetUserPermissionByToken() { List list = new List(); var userId = long.Parse(user.UserId); var userInfo = db.Queryable().Filter(null, true).Where(x => x.Id == userId).First(); //超级管理员 if (userInfo.UserType == 0) { list = db.Queryable().Filter(null, true).Where(x => x.MenuType == 1 && x.IsHidden == false) .OrderBy(x => x.SortCode) .Select(a => new RouteItem { Id = a.Id, Path = a.Url, Name = a.PermissionName, Component = a.Component, Redirect = a.Redirect, Meta = new RouteMeta() { Title = a.Title, Icon = a.Icon, } }) .ToList(); foreach (var item in list) { var childs = db.Queryable().Filter(null, true) .Where(x => x.MenuType == 2 && x.ParentId == item.Id && x.IsHidden == false) .OrderBy(x => x.SortCode) .Select(a => new RouteItem { Path = a.Url, Name = a.PermissionName, Component = a.Component, Meta = new RouteMeta() { Title = a.Title, Icon = a.Icon, } }).ToList(); item.Children = childs; } } else { var roleIds = db.Queryable().Where(x => x.UserId == userId).Select(x => x.RoleId).ToList(); var permissions = db.Queryable().Where(x => roleIds.Contains(x.RoleId)) .Select(x => x.PermissionId).Distinct().ToList(); var perlist = db.Queryable() .Where(x => x.MenuType == 1 && x.IsHidden == false && permissions.Contains(x.Id)) .OrderBy(x => x.SortCode) .Select(a => new RouteItem { Id = a.Id, Path = a.Url, Name = a.PermissionName, Component = a.Component, Redirect = a.Redirect, SortCode = a.SortCode, Meta = new RouteMeta() { Title = a.Title, Icon = a.Icon, } }) .ToList(); // if (perlist.Count == 0) // { // //公共菜单权限 // var publicFirstMenu = db.Queryable().Filter(null, true).Where(x => // x.MenuType == 1 && x.IsHidden == false && x.PermissionType == (int)PermissionType.Public) // .OrderBy(x=>x.SortCode) // .Select(a => new RouteItem // { // Id = a.Id, // Path = a.Url, // Name = a.PermissionName, // Component = a.Component, // Redirect = a.Redirect, // SortCode = a.SortCode, // Meta = new RouteMeta() // { // Title = a.Title, // Icon = a.Icon, // } // }) // .ToList(); // list.AddRange(publicFirstMenu); // // // 权限身份菜单 // var identityFirstMenu = db.Queryable().Filter(null, true).Where(x => // x.MenuType == 1 && x.IsHidden == false && x.PermissionType == userInfo.PermissionIdentity) // .OrderBy(x=>x.SortCode) // .Select(a => new RouteItem // { // Id = a.Id, // Path = a.Url, // Name = a.PermissionName, // Component = a.Component, // Redirect = a.Redirect, // SortCode = a.SortCode, // Meta = new RouteMeta() // { // Title = a.Title, // Icon = a.Icon, // } // }) // .ToList(); // list.AddRange(identityFirstMenu); // } list.AddRange(perlist); //去重 list.Distinct(); //排序 list = list.OrderBy(x => x.SortCode).ToList(); foreach (var item in list) { var childs = db.Queryable().Where(x => x.MenuType == 2 && x.ParentId == item.Id && x.IsHidden == false && permissions.Contains(x.Id)) .OrderBy(x => x.SortCode) .Select(a => new RouteItem { Path = a.Url, Name = a.PermissionName, Component = a.Component, Meta = new RouteMeta() { Title = a.Title, Icon = a.Icon, } }).ToList(); // if (childs.Count == 0) // { // var publicSecondMenu = db.Queryable().Filter(null, true).Where(x => // x.MenuType == 2 && x.ParentId == item.Id && x.IsHidden == false && x.PermissionType == (int)PermissionType.Public) // .OrderBy(x=>x.SortCode) // .Select(a => new RouteItem // { // Path = a.Url, // Name = a.PermissionName, // Component = a.Component, // Meta = new RouteMeta() // { // Title = a.Title, // Icon = a.Icon, // } // }).ToList(); // childs.AddRange(publicSecondMenu); // // // 权限身份菜单 // var identityecondMenu = db.Queryable().Filter(null, true).Where(x => // x.MenuType == 2 && x.ParentId == item.Id && x.IsHidden == false && x.PermissionType == userInfo.PermissionIdentity) // .OrderBy(x=>x.SortCode) // .Select(a => new RouteItem // { // Id = a.Id, // Path = a.Url, // Name = a.PermissionName, // Component = a.Component, // Redirect = a.Redirect, // Meta = new RouteMeta() // { // Title = a.Title, // Icon = a.Icon, // } // }) // .ToList(); // childs.AddRange(identityecondMenu); // } //去重 childs.Distinct(); //排序 childs = childs.OrderBy(x => x.SortCode).ToList(); item.Children = childs; } } // list = list.OrderBy(x => x.Id).ToList(); return DataResult>.Success("获取数据成功!", list); } #region 获取服务器信息 /// /// 获取服务器信息 /// /// public DataResult GetServerInfo() { //核心数 int cpuNum = Environment.ProcessorCount; string computerName = Environment.MachineName; string osName = RuntimeInformation.OSDescription; string osArch = RuntimeInformation.OSArchitecture.ToString(); string version = RuntimeInformation.FrameworkDescription; string appRAM = ((double)Process.GetCurrentProcess().WorkingSet64 / 1048576).ToString("N2") + " MB"; string startTime = Process.GetCurrentProcess().StartTime.ToString("yyyy-MM-dd HH:mm:ss"); string sysRunTime = ComputerHelper.GetRunTime(); string serverIP = IhttpContext.HttpContext.Connection.LocalIpAddress.MapToIPv4().ToString() + ":" + IhttpContext.HttpContext.Connection.LocalPort; //获取服务器IP var programStartTime = Process.GetCurrentProcess().StartTime; string programRunTime = DateTimeHelper.FormatTime((DateTime.Now - programStartTime).TotalMilliseconds.ToString().Split('.')[0] .ParseToLong()); var data = new { cpu = ComputerHelper.GetComputerInfo(), disk = ComputerHelper.GetDiskInfos(), sys = new { cpuNum, computerName, osName, osArch, serverIP, runTime = sysRunTime }, app = new { name = _environment.EnvironmentName, rootPath = _environment.ContentRootPath, webRootPath = _environment.WebRootPath, version, appRAM, startTime, runTime = programRunTime, host = serverIP }, }; return DataResult.Success(data); } #endregion 获取服务器信息 #region 获取角色下拉列表 /// /// 获取角色下拉列表 /// /// public DataResult> GetRoleList() { var list = db.Queryable() .Select(a => new ApiSelectViewModel { Label = a.RoleName, Value = a.Id, }) .ToList(); return DataResult>.Success("获取数据成功!", list); } #endregion 获取角色下拉列表 #region 修改密码 /// /// 修改密码 /// /// /// public DataResult ChangePassword(ChangePasswordReq model) { var userId = long.Parse(user.UserId); var userInfo = db.Queryable().First(x => x.Id == userId); if (model.OldPassword == model.NewPassword) { return DataResult.Failed("旧密码与新密码一致!"); } if (model.NewPassword != model.ConfirmPassword) { return DataResult.Failed("新密码与确认密码不一致!"); } if (userInfo.Password == model.NewPassword) { return DataResult.Failed("新密码与用户密码一致!"); } userInfo.Password = model.ConfirmPassword; userInfo.MD5Password = MD5Helper.MD5Encrypt(model.ConfirmPassword); db.Updateable(userInfo).ExecuteCommand(); return DataResult.Successed("密码修改成功!"); } #endregion 修改密码 #region 租户注册 /// /// 租户注册 /// /// /// public DataResult TenantRegister(TenantRegisterReq req) { if (!req.Policy) { return DataResult.Failed("请阅读并勾选合同规定!"); } var existApply = db.Queryable().Where(x => x.TaxNo == req.TaxNo && x.AuditStatus == AuditStatusEnum.Approve).Select(x => x.TaxNo).First(); if (!existApply.IsNullOrEmpty()) { return DataResult.Failed("该企业信息已经注册!"); } var auditApply = db.Queryable().Where(x => x.TaxNo == req.TaxNo && (x.AuditStatus == AuditStatusEnum.NoAudit || x.AuditStatus == AuditStatusEnum.Auditing)) .Select(x => x.TaxNo).First(); if (!auditApply.IsNullOrEmpty()) { return DataResult.Failed("该企业信息待提交或待审批,请勿重复注册!"); } var checkAdminUser = db.Queryable().Where(x => x.AdminUserCode == req.AdminUserCode.Trim()).Select(x => x.AdminUserCode).First(); if (!checkAdminUser.IsNullOrEmpty()) { return DataResult.Failed(checkAdminUser + " 管理员登录账号已经注册!"); } if (req.AdminUserPassword != req.AgainPassword) return DataResult.Failed("密码不一致!"); try { //开启事务 db.Ado.BeginTran(); var apply = req.Adapt(); // var apply = new SysTenantApply // { // Name = req.Name, // TaxNo = req.TaxNo, // Phone = req.Phone, // AdminUserCode = req.AdminUserCode, // AdminUserPassword = req.AdminUserPassword, // AuditStatus = AuditStatusEnum.NoAudit, // PinYinCode = PinYinUtil.GetFristLetter(req.Name), // }; apply.AuditStatus = AuditStatusEnum.NoAudit; apply.PinYinCode = PinYinUtil.GetFristLetter(req.Name); db.Insertable(apply).ExecuteCommand(); //写入注册用户 var userEntity = new SysUser { UserCode = req.AdminUserCode, UserName = req.Name, Password = req.AdminUserPassword, PinYinCode = PinYinUtil.GetFristLetter(req.Name), MD5Password = MD5Helper.MD5Encrypt(req.AdminUserPassword), NickName = req.AdminUserCode, Email = "", Phone = req.Phone, UserType = UserTypeEnum.Admin.ToEnumInt(), //管理员 Status = 0, //正常 TenantId = 1288018625843826688, }; var adminUser = db.Insertable(userEntity).ExecuteReturnEntity(); //写入用户角色 指定角色 var roleUser = new SysRoleUser { RoleId = 1744922920100171776, UserId = adminUser.Id }; db.Insertable(roleUser).ExecuteCommand(); db.Ado.CommitTran(); return DataResult.Successed("企业注册成功!请登录后完善相关资料并提交审核!"); } catch (Exception ex) { db.Ado.RollbackTran(); return DataResult.Failed("企业注册失败!" + ex); } } #endregion public DataResult> GetDataRuleEntityFields(string permissionId) { // var query = GetDataRuleFilter(); // SysUser us = new SysUser(); // var temp = us.GetEntityFieldProperty(); var role = new EntityFieldProperty() { FieldName = ComonConst.DataRule_LoginRole, FieldComment = "当前登录用户的角色", FieldType = "String" }; var permission = db.Queryable().First(x => x.Id == long.Parse(permissionId)); if (permission.IsNull()) { return DataResult>.Failed("权限模块不存在!"); } var list = permission.PermissionEntity.GetEntityFieldByName(); // var entity = db.EntityMaintenance.GetEntityInfo(permission.PermissionEntity.GetEntity()); // var list = entity.GetEntityFieldByName(); if (list.Count == 0) { return DataResult>.Failed("请配置实体属性!"); } list.Add(role); return DataResult>.Success(list); } /// /// 获取当前登录用户的数据访问权限 /// /// linq表达式参数的名称,如u=>u.name中的"u" /// public ISugarQueryable GetDataRuleFilter() { var userInfo = db.Queryable().First(x => x.Id == long.Parse(user.UserId)); if (userInfo.UserType == 0) { return db.Queryable(); //超级管理员特权 } var moduleName = typeof(T).Name; var rule = db.Queryable().First(u => u.PermissionName == moduleName); if (rule == null) return db.Queryable(); //没有设置数据规则,那么视为该资源允许被任何主体查看 var ruleConditions = JsonConvert.DeserializeObject(rule.DataRules); if (ruleConditions.RoleCondition.Count > 0) { var roles = db.Queryable().Where(x => x.UserId == long.Parse(user.UserId)) .Select(u => u.RoleId.ToString()).ToList(); roles.Sort(); //按字母排序,这样可以进行like操作 var ruleCondition = ruleConditions.RoleCondition[0]; if (ruleCondition.ConditionalType == SqlSugar.ConditionalType.In) { var s = ruleCondition.FieldValue.Split(','); var intersectArr = roles.Intersect(s); if (intersectArr.Count() == 0) { throw new Exception("该用户角色无权限!"); } } } if (ruleConditions.QueryCondition.Count > 0) { return db.Queryable() .Where(ruleConditions.QueryCondition); } else { return db.Queryable(); } } }