WebService.cs 13.1 KB
using System;
using System.Linq;
using System.Net;
using System.Text;
using Newtonsoft.Json;
using System.Collections.Generic;

namespace MES
{
    public class WebService
    {
        private Dictionary<string, string> printKey;
        private string vender;

        public WebService()
        {
            printKey = new Dictionary<string, string>();
        }

        public string IP { set; get; }

        public string Log { private set; get; }

        public string ErrInfo { private set; get; }


        /// <summary>
        /// Ping服务器
        /// </summary>
        /// <returns></returns>
        public bool Ping()
        {
            using (System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping())
            {
                System.Net.NetworkInformation.PingReply result = ping.Send(IP, 2000);
                bool rtn = result.Status == System.Net.NetworkInformation.IPStatus.Success;
                if (rtn)
                {
                    ErrInfo = "Ping OK";
                    Log = "MES Ping OK";
                }
                else
                {
                    ErrInfo = "Ping NG";
                    Log = "MES Request Timeout IP = " + IP;
                }
                return rtn;
            }
        }

        /// <summary>
        /// 上传供应商编号
        /// </summary>
        /// <param name="s"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public bool UploadVender(string s, out string[][] value)
        {
            value = null;
            vender = s;
            string json = "{\"VENDER\":\"" + s + "\"}";
            string port = "ReturnPurchaseOrderAndMaterial";
            
            try
            {
                bool rtn = Post(port, json, out string jsonStr);
                Log += "\r\n" + port + "\r\nSend: " + json + "\r\nReturn: " + jsonStr;
                if (!rtn) return false;
                if (jsonStr == "" || jsonStr == "[]" || jsonStr.Contains("Error") || !jsonStr.StartsWith("[{"))
                {
                    ErrInfo = jsonStr;
                    return false;
                }

                Newtonsoft.Json.Linq.JArray jArray = (Newtonsoft.Json.Linq.JArray)JsonConvert.DeserializeObject(jsonStr);
                value = new string[jArray.Count][];
                for (int i = 0; i < value.Length; i++)
                {
                    value[i] = new string[jArray[i].Count()];
                    value[i][0] = jArray[i]["PURCHASEORDERNO"].ToString();
                    value[i][1] = jArray[i]["PURCHASEORDERNUMBER"].ToString();
                    value[i][2] = jArray[i]["Mcode"].ToString();
                }
                ErrInfo = "ReturnPurchaseOrderAndMaterial OK";
                return true;
            }
            catch (Exception ex)
            {
                ErrInfo = ex.Message;
                Log = ex.Message;
                return false;
            }
        }

        /// <summary>
        /// 绑定供应商编号和物料编号
        /// </summary>
        /// <param name="vender"></param>
        /// <param name="material"></param>
        /// <returns></returns>
        public bool UploadMaterial(string vender, string material)
        {
            string json = "{\"VENDER\":\"" + vender + "\",\"ITEMCODE\":\"" + material + "\"}";
            string port = "ReturnPurchaseOrder";
            this.vender = vender;

            try
            {
                bool rtn = Post(port, json, out string jsonStr);
                Log += "\r\n" + port + "\r\nSend: " + json + "\r\nReturn: " + jsonStr;
                if (!rtn) return false;
                if (jsonStr == "" || jsonStr == "[]" || jsonStr.Contains("Error") || !jsonStr.StartsWith("[{"))
                    return false;
                ErrInfo = "绑定不成功";
                return true;
            }
            catch (Exception ex)
            {
                ErrInfo = ex.Message;
                Log = ex.Message;
                return false;
            }

        }

        public bool UnbindVender(string vender)
        {
            string json = "{\"VENDER\":\"" + vender + "\"}";
            string port = "UnbindMaterialOrVender";

            try
            {
                bool rtn = Post(port, json, out string jsonStr);
                Log += "\r\n" + port + "\r\nSend: " + json + "\r\nReturn: " + jsonStr;
                if (!rtn) return false;
                if (jsonStr == "" || jsonStr == "[]" || jsonStr.Contains("Error") || !jsonStr.StartsWith("[{"))
                    return false;
                ErrInfo = "供应商编码解绑成功";
                return true;
            }
            catch (Exception ex)
            {
                ErrInfo = ex.Message;
                Log = ex.Message;
                return false;
            }
        }

        public bool UnbindItemCode(string vender)
        {
            string json = "{\"ITEMCODE\":\"" + vender + "\"}";
            string port = "UnbindMaterialOrVender";

            try
            {
                bool rtn = Post(port, json, out string jsonStr);
                Log += "\r\n" + port + "\r\nSend: " + json + "\r\nReturn: " + jsonStr;
                if (!rtn) return false;
                if (jsonStr == "" || jsonStr == "[]" || jsonStr.Contains("Error") || !jsonStr.StartsWith("[{"))
                    return false;
                ErrInfo = "物料编码解绑成功";
                return true;
            }
            catch (Exception ex)
            {
                ErrInfo = ex.Message;
                Log = ex.Message;
                return false;
            }
        }

        /// <summary>
        /// 上传订单号,行号
        /// </summary>
        /// <param name="order"></param>
        /// <param name="num"></param>
        /// <param name="qty"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public bool UploadOrder(string order, string num, string qty, out Dictionary<string, string> value)
        {
            value = new Dictionary<string, string>();
            string json = "{\"PURCHASEORDERNO\":\"" + order + "\",\"PURCHASEORDERNUMBER\":\"" + num + "\"}";
            string port = "ReturnPurchaseOrderByOrderCodeAndNumber";

            try
            {
                bool rtn = Post(port, json, out string jsonStr);
                Log += "\r\n" + port + "\r\nSend: " + json + "\r\nReturn: " + jsonStr;
                if (!rtn) return false;
                if (jsonStr == "" || jsonStr == "[]" || jsonStr.Contains("Error") || !jsonStr.StartsWith("[{"))
                {
                    ErrInfo = "MES返回数据错误";
                    return false;
                }

                Newtonsoft.Json.Linq.JArray jArray = (Newtonsoft.Json.Linq.JArray)JsonConvert.DeserializeObject(jsonStr);
                //text = new Dictionary<string, string>();
                value.Add("MATERIALDEC", jArray[0]["MATERIALDEC"].ToString());
                value.Add("STORAGE", jArray[0]["STORAGE"].ToString());
                value.Add("MATERIALNO", jArray[0]["MATERIALNO"].ToString());
                value.Add("PURCHASEORDERNO", jArray[0]["PURCHASEORDERNO"].ToString());
                value.Add("PURCHASEORDERNUMBER", jArray[0]["PURCHASEORDERNUMBER"].ToString());
                value.Add("QTY", qty);
                //int n = ++number;
                //value.Add("BATCHNO", string.Format("{0:yyMMddHHmm}{1:000}", DateTime.Now, n));
                value.Add("BATCHNO", string.Format("{0:yyMMddHHmm}", DateTime.Now));
                ErrInfo = "ReturnPurchaseOrderByOrderCodeAndNumber OK";
                return true;
            }
            catch (Exception ex)
            {
                ErrInfo = ex.Message;
                Log = ex.Message;
                return false;
            }
        }

        /// <summary>
        /// 上传最终数据
        /// </summary>
        /// <param name="spliceString">二维码字符串</param>
        /// <param name="value"></param>
        /// <returns></returns>
        public bool UploadMessage(string spliceString, out string[] value)
        {
            value = null;

            List<string> arr = new List<string>();
            if (printKey.ContainsKey("PURCHASEORDERNO"))
                arr.Add("\"PURCHASEORDERNO\":\"" + printKey["PURCHASEORDERNO"] + "\"");
            else
                arr.Add("\"PURCHASEORDERNO\":\"\"");
            if (printKey.ContainsKey("PURCHASEORDERNUMBER"))
                arr.Add("\"PURCHASEORDERNUMBER\":\"" + printKey["PURCHASEORDERNUMBER"] + "\"");
            else
                arr.Add("\"PURCHASEORDERNUMBER\":\"\"");
            if (printKey.ContainsKey("MATERIALNO"))
                arr.Add("\"MATERIALNO\":\"" + printKey["MATERIALNO"] + "\"");
            else
                arr.Add("\"MATERIALNO\":\"\"");
            arr.Add("\"MATERIALLOTNO\":\"" + spliceString + "\"");
            arr.Add("\"VENDERMCODE\":\"" + vender + "\"");

            string json = "{" + string.Join(",", arr) + "}";
            string port = "InsertPurchaseOrderstringMessage";

            try
            {
                bool rtn = Post(port, json, out string jsonStr);
                Log += "\r\n" + port + "\r\nSend: " + json + "\r\nReturn: " + jsonStr;
                if (!rtn) return false;
                if (jsonStr == "" || jsonStr == "[]" || jsonStr.Contains("Error"))
                    return false;

                Newtonsoft.Json.Linq.JObject jObj = (Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(jsonStr);
                value = new string[2];
                value[0] = jObj["Result"].ToString();
                value[1] = jObj["Msg"].ToString();
                ErrInfo = "InsertPurchaseOrderstringMessage OK";
                return true;
            }
            catch (Exception ex)
            {
                ErrInfo = ex.Message;
                Log = ex.Message;
                return false;
            }
        }











        private bool Post(string fun, string json, out string text)
        {
            text = "";
            try
            {
                string param = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
                param += "<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">";
                param += "<soap12:Body>";
                param += "<" + fun + " xmlns=\"http://tempuri.org/\">";
                param += "<json>" + json + "</json>";
                param += "</" + fun + ">";
                param += "</soap12:Body>";
                param += "</soap12:Envelope>";
                //string param = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
                //param += "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">";
                //param += "<soap:Body>";
                //param += "<" + fun + " xmlns=\"http://tempuri.org/\">";
                //param += "<json>" + json + "</json>";
                //param += "</" + fun + ">";
                //param += "</soap:Body>";
                //param += "</soap:Envelope>";


                string url = "http://" + IP + "/NariWebService/MESReturnInfo.asmx?op=" + fun;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.ContentType = "application/soap+xml;charset=utf-8";
                //request.ContentType = "text/xml;charset=utf-8";

                request.Method = "POST";
                request.Timeout = 5000;
                byte[] buff = Encoding.UTF8.GetBytes(param);
                request.ContentLength = buff.Length;

                System.IO.Stream writer = request.GetRequestStream();
                writer.Write(buff, 0, buff.Length);
                writer.Close();
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                System.IO.Stream stream = response.GetResponseStream();

                System.IO.StreamReader read = new System.IO.StreamReader(stream, Encoding.UTF8);
                text = read.ReadToEnd();
                read.Close();


                //string[] sss = new string[3];
                //sss[0] = param;
                //sss[1] = url;
                //sss[2] = text;
                //System.IO.File.WriteAllLines("D:\\111.txt", sss);



                string s1 = "<" + fun + "Result>";
                string s2 = "</" + fun + "Result>";
                int n1 = text.IndexOf(s1);
                int n2 = text.IndexOf(s2);
                if (n1 == -1 || n2 == -1)
                {
                    Log = "返回的json格式不正确";
                    ErrInfo = "JSON: " + text;
                    return false;
                }
                text = text.Substring(n1 + s1.Length, n2 - n1 - s1.Length);
                Log = "Post OK";
                ErrInfo = "Post OK";
                return true;
            }
            catch (Exception ex)
            {
                ErrInfo = ex.Message;
                Log = ex.Message;
                return false;
            }
        }
    
    }
}