using HH.AutoBom.Core; using HH.WMS.Common; using HH.WMS.Entitys; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Web; using System.Web.Mvc; namespace HH.WMS.WebUI.Controllers { public class BaseController : Controller { #region 获得WebApi的地址 /// /// 获得webapi的地址 不包括后面的控制器等 /// /// private static string GetWMSAddress() { //获得配置文件中ERP的IP和端口 //string wmsAddress = System.Configuration.ConfigurationManager.AppSettings["wms_ipAddress"].ToString(); string url = "http://" + Constants.SysConfig.WMS_API + "/"; return url; } #endregion /// /// Post请求 /// /// /// /// public static string HttpWMS_Post(string apiPath, string data) { //string url = GetWMSAddress() + apiPath; string url = "http://" + Constants.SysConfig.WMS_API + "/" + apiPath; return Post(url, data); } /// /// Get请求 /// /// /// /// public static string HttpWMS_Get(string apiPath, string paramStr = "") { //string url = GetWMSAddress() + apiPath; string url = "http://" + Constants.SysConfig.WMS_API + "/" + apiPath; return Get(url, paramStr); } /// /// Get请求 /// /// /// /// public static string HttpAutobom_Post(string apiPath, string data) { string url = "http://" + Constants.SysConfig.AUTOBOM + "/" + apiPath; return Post(url, data); } private static string Post(string url, string data) { string returnStr = ""; var loginer = FormsAuth.GetUserData(); try { //对所有代码产生的垃圾资源进行强制回收-慎用 //System.GC.Collect(); //请求地址获取用户授权信息 WebRequest webRequest = System.Net.WebRequest.Create(url); webRequest.Timeout = 1000000;//设置请求超时时间10秒 HttpWebRequest httpRequest = webRequest as System.Net.HttpWebRequest; httpRequest.Method = "post"; httpRequest.Headers.Add("tokenId", loginer.Extend1); httpRequest.ContentType = "application/json"; httpRequest.KeepAlive = false;//设置不是常连接 System.Text.Encoding encoding = System.Text.Encoding.UTF8; byte[] bytesToPost = encoding.GetBytes(data); httpRequest.ContentLength = bytesToPost.Length; System.IO.Stream requestStream = httpRequest.GetRequestStream(); requestStream.Write(bytesToPost, 0, bytesToPost.Length); requestStream.Close(); HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse(); Stream stream = response.GetResponseStream(); StreamReader Reader = new StreamReader(stream, Encoding.UTF8); returnStr = Reader.ReadToEnd(); if (!string.IsNullOrEmpty(returnStr) && returnStr.StartsWith("\"")) { returnStr = returnStr.Replace("\\", ""); returnStr = returnStr.TrimEnd('\"'); returnStr = returnStr.TrimStart('\"'); } if (webRequest != null) { webRequest.Abort(); } if (httpRequest != null) { httpRequest.Abort(); } if (response != null) { response.Dispose(); response.Close(); } if (stream != null) { stream.Dispose(); stream.Close(); } if (Reader != null) { Reader.Dispose(); Reader.Close(); } } catch (WebException ex) { return JsonConvert.SerializeObject(OperateResult.Error("网络异常:" + url + "-------" + ex.Message)); } catch (Exception ex) { return JsonConvert.SerializeObject(OperateResult.Error(ex.Message)); } return returnStr; } private static string Get(string url, string paramStr = "") { var loginer = FormsAuth.GetUserData(); string Data = url + (paramStr == "" ? "" : "?") + paramStr; //if (Data.IndexOf("?") > 0) //{ // //包含参数 // Data += "&tokenId=" + loginer.Extend1; //} //else //{ // Data += "?tokenId=" + loginer.Extend1; //} HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Data); request.Method = "GET"; request.Headers.Add("tokenId", loginer.Extend1); request.ContentType = "application/json"; request.KeepAlive = false;//设置不是常连接 try { HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); string retString = myStreamReader.ReadToEnd(); if (!string.IsNullOrEmpty(retString)) { retString = retString.Replace("\\", ""); retString = retString.TrimEnd('\"'); retString = retString.TrimStart('\"'); } myStreamReader.Close(); myResponseStream.Close(); if (request != null) { request.Abort(); } if (response != null) { response.Dispose(); response.Close(); } if (myResponseStream != null) { myResponseStream.Dispose(); myResponseStream.Close(); } if (myStreamReader != null) { myStreamReader.Dispose(); myStreamReader.Close(); } return retString; } catch (WebException ex) { return JsonConvert.SerializeObject(OperateResult.Error("网络异常:" + url + "-------" + ex.Message)); } catch (Exception ex) { return JsonConvert.SerializeObject(OperateResult.Error(ex.Message)); } } #region wms 同步post /// /// wms 同步post /// /// /// /// public static string HttpWMS_Post(string requestUri, object paramObj) { try { var client = new System.Net.Http.HttpClient { BaseAddress = new Uri(GetWMSAddress()) }; var jsonPara = paramObj != null ? JsonConvert.SerializeObject(paramObj) : string.Empty; System.Net.Http.HttpContent httpContent = new System.Net.Http.StringContent(jsonPara); httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); var result = client.PostAsync(requestUri, httpContent); return result.Result.Content.ReadAsStringAsync().Result; } catch (Exception ex) { return ex.Message; } } #endregion /// /// 货位autobom中的编码 /// /// 编码名称 /// public string GetCode(string ruleName) { var loginer = FormsAuth.GetUserData(); string postData = "{\"appCode\":\"AutoWMS\",\"ruleName\":\"" + ruleName + "\",\"orgId\":\"" + loginer.ParentOrgCode + "\",\"orgFlag\":\"" + loginer.OrgFlag + "\"}"; return HttpAutobom_Post("api/BillRule/GenBillNo", postData); } public string GetTokenId() { var loginer = FormsAuth.GetUserData(); return loginer.Extend1; } public string GetRequestBodyString() { return new StreamReader(Request.InputStream).ReadToEnd(); } } }