using System.Diagnostics; using System.IdentityModel.Tokens.Jwt; using System.Runtime.InteropServices; using DS.Module.Core; using DS.Module.Core.Extensions; using DS.Module.Core.Helpers; using DS.Module.User; using DS.WMS.Common.Enum; using DS.WMS.Core.BaseInfo.Dtos; using DS.WMS.Core.BaseInfo.Entity; 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 UAParser; 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, }; var token = JwtHelper.Encrypt(tokenModel); return DataResult.Success(token); } /// /// /// /// /// public DataResult GetUserInfo() { var userId = 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,GID = a.GID // 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 = 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); } /// /// APP更新 /// /// /// public DataResult AppUpdate(string appVersion) { var info = db.Queryable().Where(x => x.PARAMNAME == "AppVersion").First(); var versionArr = info.PARAMVALUE.Split(';'); //转换数组 if (versionArr[0].ToString() == appVersion) { return DataResult.Failed("已经是最新版本!"); } else { return DataResult.Successed("获取最新版本成功!", versionArr[1]); } } #region 获取下拉字典 /// /// 获取下拉字典 /// /// /// public DataResult GetDictTypeDropDown(string code) { var type = db.Queryable().Where(x => x.DicNo == code).First(); if (type.IsNull()) { return DataResult.Failed("字典类型不存在!"); } var data = db.Queryable().Where(x => x.Dic_ID == type.Dic_ID) .Select(a => new DropDownData { Value= a.DicValue, Code = a.DicName, Label = a.DicName }).ToList(); return DataResult.Successed("获取字典成功!", data); } #endregion /// /// 批量获取字典值 /// /// /// public DataResult> GetDictOptions(DropDownDictTypeInput model) { var codes = model.Code.Split(','); var types = db.Queryable().Where(x =>codes.Contains(x.DicNo)).ToList(); var list =new List(); foreach (var item in types) { var temp = new DictOptions { DictCode = item.DicNo, Data = db.Queryable().Where(x => x.Dic_ID == item.Dic_ID) .Select(it=>new DropDownData() { Value= it.DicValue, Code = it.DicName, Label = it.DicName }).ToList() }; list.Add(temp); } return DataResult>.Success("获取字典成功!", list); } /// /// 获取商品分类列表 /// /// public DataResult> GetGoodsTypeList(PageRequest request) { //序列化查询条件 var whereList = db.ConfigQuery.Context.Utilities.JsonToConditionalModels(request.QueryCondition); var data = db.Queryable() .Where(whereList).ToQueryPage(request.PageCondition); return data; } /// /// 获取商品计费大类列表 /// /// /// public DataResult> GetGoodsFeeTypeList(PageRequest request) { //序列化查询条件 var whereList = db.ConfigQuery.Context.Utilities.JsonToConditionalModels(request.QueryCondition); var data = db.Queryable() .Where(whereList).ToQueryPage(request.PageCondition); return data; } /// /// 企业用户注册 /// /// /// public DataResult CompanyRegister(CompanyRegisterInput model) { if (!model.policy) { return DataResult.Failed("请勾选合同规定!"); } var exitCompany = db.Queryable().Where(x => x.TAXNO == model.TaxCode && x.AuditStatus == AuditStatus.Approve.ToEnumInt()).Select(x => x.TAXNO).First(); if (!exitCompany.IsNullOrEmpty()) { return DataResult.Failed("该企业信息已经注册!"); } var auditCompany = db.Queryable().Where(x => x.TAXNO == model.TaxCode && (x.AuditStatus == AuditStatus.NoAudit.ToEnumInt() && x.AuditStatus == AuditStatus.Auditing.ToEnumInt())).Select(x => x.TAXNO).First(); if (!auditCompany.IsNullOrEmpty()) { return DataResult.Failed("该企业信息待提交或待审批,请勿重复提交!"); } var checkShortName = db.Queryable().Where(x => x.SHORTNAME == model.ShortName.Trim()).Select(x => x.SHORTNAME).First(); if (!checkShortName.IsNullOrEmpty()) { return DataResult.Failed(checkShortName + " 公司简称已经注册!"); } var checkLOGINNAME = db.Queryable().Where(x => x.LOGINNAME == model.AdminAccount.Trim()).Select(x => x.LOGINNAME).First(); if (!checkLOGINNAME.IsNullOrEmpty()) { return DataResult.Failed(checkLOGINNAME + " 登录账号已经注册!"); } if (model.AdminPassword != model.AgainPassword) return DataResult.Failed("密码不一致!"); try { //开启事务 db.Ado.BeginTran(); var GID = Guid.NewGuid(); var company = new OP_YARD_COMPANY { GID = GID, TAXNO = model.TaxCode, SHORTNAME = model.ShortName, DESCRIPTION = model.CompanyName, ADDR = "", TEL = "", EMAIL = "", ISTRUCK = false, ISSHIPPER = false, ISCONSIGNEE = false, ISAGENTCN = false, ISOTHER = false, LOGINNAME = model.AdminAccount, LOGINPASSWORD = model.AdminPassword, AuditStatus = AuditStatus.NoAudit.ToEnumInt() // 审核状态改为待提交 }; db.Insertable(company).ExecuteCommand(); //写入注册用户 var user = new tb_User { Gid = Guid.NewGuid(), LoginName = model.AdminAccount, Password = model.AdminPassword, NickName = model.AdminAccount, Email = "", UserType = UserType.Admin.ToEnumInt(), //管理员 CustomerName = model.CompanyName, UpTime = DateTime.Now.ToTimestamp(), AddTime = DateTime.Now.ToTimestamp(), Status = (short)NomalStatus.Approve, //已审核 CompanyId = GID, }; db.Insertable(user).ExecuteCommand(); db.Ado.CommitTran(); return DataResult.Successed("企业注册成功!请登录后完善相关资料并提交审核!"); } catch (Exception ex) { db.Ado.RollbackTran(); return DataResult.Failed("企业注册失败!" + ex); } } #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 /// /// 获取商品下拉列表 /// /// public DataResult GetGoodsList(string code) { var list = db.Queryable() .Where(x=>x.PinYinCode.Contains(code.Trim())) .Select() .ToList(); return DataResult.Successed("获取数据成功!", list); } /// /// 获取仓库下拉列表 /// /// public DataResult> GetStoreHouseList(PageRequest request) { //序列化查询条件 var whereList = db.ConfigQuery.Context.Utilities.JsonToConditionalModels(request.QueryCondition); var data = db.Queryable() .Select() .Where(whereList).ToQueryPage(request.PageCondition); return data; } /// /// 获取仓库库位下拉列表 /// /// public DataResult GetStoreHouseAreaList(string code) { //序列化查询条件 var data = db.Queryable() .LeftJoin((a, b) => a.Pid == b.Id) .Where((a,b)=>b.AREACODE == code ) .Select((a, b) => new StoreAreaSelectViewModel() { Id = a.Id, ParentCode = b.AREACODE, AREANAME = a.AREANAME, AREACODE = a.AREACODE //手动指定一列在自动映射 }).ToList(); return DataResult.Successed("获取数据成功!", data); } /// /// 获取客户列表 /// /// /// public DataResult> GetInfoClientList(PageRequest request) { //序列化查询条件 var whereList = db.ConfigQuery.Context.Utilities.JsonToConditionalModels(request.QueryCondition); var data = db.Queryable() .Select() .Where(whereList).ToQueryPage(request.PageCondition); return data; } }