using DS.Module.Core; using DS.Module.Core.Extensions; using DS.Module.Core.Helpers; using DS.Module.SqlSugar; using DS.Module.UserModule; using DS.WMS.Core.Code.Entity; using DS.WMS.Core.Map.Entity; using DS.WMS.Core.Sys.Entity; using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using NLog; using SqlSugar; namespace DS.Module.CrawlerData { internal class CrawlerDataService : ICrawlerDataService { private readonly IServiceProvider _serviceProvider; private readonly ISqlSugarClient db; private readonly IUser user; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private readonly ISaasDbService saasService; /// /// 构造函数 /// /// public CrawlerDataService(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; db = _serviceProvider.GetRequiredService(); user = _serviceProvider.GetRequiredService(); saasService = _serviceProvider.GetRequiredService(); } /// /// 异步调取出口运踪场站详情(按箱明细显示) /// /// /// public async Task> GetYardData(YardDataReq req) { var tenantDb = saasService.GetBizDbScopeById(user.TenantId); var account = tenantDb.Queryable().Where(x => x.CustomerId == req.YardId && x.AccountType == "BillTrace").First(); var userKey = db.Queryable().Where(x => x.Code == "spiderUserKeyBilltrace").First().Value; var userSecret = db.Queryable().Where(x => x.Code == "spiderUserSecretBilltrace").First().Value; var spiderServerUrl = db.Queryable().Where(x => x.Code == "spiderServerUrlBillTraceNew").First().Value; var tenantName = db.Queryable().Filter(null, true).Where(x => x.Id == long.Parse(user.TenantId)).First().Name; if (account.IsNull()) { return await Task.FromResult(DataResult.Failed("未配置出口运踪场站第三方账号信息!")); } var yardMap = tenantDb.Queryable().Where(x => x.LinkId == req.YardId && x.Module == "BillTrace").First(); if (yardMap.IsNull()) { return await Task.FromResult(DataResult.Failed($"场站代号配置未找到:{req.YardId}")); } var objSend = new { user_key = userKey, user_secret = userSecret, customer_id = user.TenantId, customer_name = tenantName, web_code = yardMap.MapCode, bno = req.MBLNO, req_type = req.IsWeb ? "1" : "0", web_user = account.AppKey, web_psw = account.AppSecret, }; var urlYard = spiderServerUrl; if (!urlYard.EndsWith("/")) { urlYard += "/"; } urlYard += "real/query"; var res = RequestHelper.Post(JsonConvert.SerializeObject(objSend), urlYard); var rtnObj = JObject.Parse(res); if (rtnObj.GetIntValue("code") != 200) { return await Task.FromResult(DataResult.Failed("$\"获取场站数失败:{rtnObj.GetStringValue(\"msg\")}\"!")); } else { var rtnData = rtnObj.GetStringValue("data"); if (req.IsWeb) { var viewstatehtml = GetDataHtmlList(rtnData, "__VIEWSTATE", "/>"); if (viewstatehtml != "") { rtnData = rtnData.Replace(viewstatehtml, ""); } } return await Task.FromResult(DataResult.Success(rtnData)); } } private static string GetDataHtmlList(string html, string startstr, string endstr) { var subhtml = html; var htmllength = subhtml.Length; var startindex = subhtml.IndexOf(startstr); //if (startindex == -1 || startindex == 0) return ""; if (startindex == -1) return ""; subhtml = subhtml.Substring(startindex + startstr.Length, htmllength - startindex - startstr.Length); var endindex = subhtml.IndexOf(endstr); if (endindex != -1 && endindex != 0) subhtml = subhtml.Substring(0, endindex); return subhtml; } } }