| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Windows.Forms;
 
- using Newtonsoft.Json;
 
- using System.Net;
 
- using System.Text;
 
- using System.Configuration;
 
- using System.IO;
 
- using EasyModbusClient.businessBody;
 
- using YG.Device;
 
- using YG;
 
- using Newtonsoft.Json.Linq;
 
- using System.Collections;
 
- namespace EasyModbusClient.util
 
- {
 
-     class CommonUtil
 
-     {
 
-         public static char SEPLIT_CHAR = ';';
 
-         private static string CONNECT_DEVICEINFO_LIST = ConfigurationManager.AppSettings["ConncetionDeviceListString"];
 
-         private static string HttpQuestUrlString = ConfigurationManager.AppSettings["HttpQuestUrlString"];
 
-         private static string HttpServerUrlString = ConfigurationManager.AppSettings["HttpServerUrlString"];
 
-         private static string ConncetionRedisString = ConfigurationManager.AppSettings["ConncetionRedisString"];
 
-         private static string LogFilePath = ConfigurationManager.AppSettings["LogFilePath"] + "access_semens_" + string.Format("{0:yyyyMM}", DateTime.Now) + ".log";
 
-         public static int BYTE_UNHSORT_LENGTH = 2;
 
-         public static TreeExXMLCls m_ListExXML = new TreeExXMLCls();
 
-         public static List<Node> nodeList = new List<Node>();
 
-         public static int count = 1;
 
-         private static string LocalRedisString = "";
 
-         public static void InitXml()
 
-         {
 
-             nodeList = m_ListExXML.XMLToList(Application.StartupPath + "\\customer.xml");
 
-             LocalRedisString= ConfigurationManager.AppSettings["LocalRedisString"];
 
-         }
 
-         /// <summary>
 
-         /// 把当前接受到mes下发的内容转换为字符串存到redis里边,
 
-         /// </summary>
 
-         /// <param name="body"></param>
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <param name="pbody"></param>
 
-         /// <param name="serverUrl"></param>
 
-         public static void ResponseTaskList(CcsRequestBody pbody,string serverUrl)
 
-         {
 
-             CcsRequestBody body = (CcsRequestBody)pbody.clone();
 
-             string redisKey = serverUrl + ":callback";
 
-             if (body.IsCallBackFlag == 1)
 
-             {
 
-                 try { if (redisKey.StringIsEmpty()) { YG.Log.Instance.WriteLogAdd($"46-->出现空的{body.Json_SerializeObject()}"); } } catch(Exception ex) { YG.Log.Instance.WriteLogAdd($"46--》出现空是{ex.Message}"); }
 
-                 List<CcsRequestBody> list = GetCallBackRequestList(redisKey);
 
-                 if (list == null || list.Count == 0)
 
-                 {
 
-                     list = new List<CcsRequestBody>();
 
-                 }
 
-                 //if (!list.Exists(o => o.TaskId == body.TaskId && o.TaskNodeId == body.TaskNodeId&&o.Uid==body.Uid))
 
-                 //{
 
-                 //    list.Add(body);
 
-                 //}
 
-                 if (!list.Exists(o => o.Uid.Equals(body.Uid)))
 
-                 {
 
-                     list.Add(body);
 
-                 }
 
-                 string jsonData = JsonConvert.SerializeObject(list);
 
-                // YG.Log.Instance.WriteLogAdd($"2222---->>>>");
 
-                 redis.ServiceStackRedisHelper.SetValue(redisKey, jsonData.ToString(),LocalRedisString);
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 执行回调函数,
 
-         /// </summary>
 
-         /// <param name="device"></param>
 
-         /// <param name="url"></param>
 
-         public static void CallBackRequest(DeviceList device)
 
-         {
 
-             
 
-             string redisCallBackKey = device.ServerUrl + ":callback";
 
-             try { if (redisCallBackKey.StringIsEmpty()) { YG.Log.Instance.WriteLogAdd($"77出现空的{device.ServerUrl}"); } } catch (Exception ex) { YG.Log.Instance.WriteLogAdd($"77--》出现空是{ex.Message}"); }
 
-             List<CcsRequestBody>  list = GetCallBackRequestList(redisCallBackKey);
 
-             lock (list)
 
-             { 
 
-                 foreach (CcsRequestBody body in list)
 
-                 {
 
-                     if (body.IsCallBackFlag == 1)
 
-                     {
 
-                         Node node = GetTargetNode(device.ServerUrl, body.BusinessType);
 
-                         if (string.IsNullOrWhiteSpace(node.Address)) { break; }
 
-                         string targetValue = node.TargetValue;
 
-                         //回调通知
 
-                         CallBackReuqestBody callBackBody = new CallBackReuqestBody();
 
-                         callBackBody.taskId = body.TaskId;
 
-                         callBackBody.taskNodeId = body.TaskNodeId;
 
-                         callBackBody.msg = body.Msg;
 
-                         callBackBody.uid = body.Uid;
 
-                         callBackBody.bizCallBackData = body.bizCallBackData;
 
-                         callBackBody.code = body.Data + "";
 
-                         string jsonData = JsonConvert.SerializeObject(callBackBody);
 
-                         //当设备是opcua 协议
 
-                         if (device.Dtype.Equals(DeviceType.OPCUa))
 
-                         {
 
-                             List<string> addresses = new List<string>();
 
-                             List<string> retList = new List<string>();
 
-                             if (!"uploadProgram".Equals(body.BusinessType) && !"deleteProgram".Equals(body.BusinessType))
 
-                             {
 
-                                 addresses.Add(node.CheckAddress);
 
-                                 DeviceOPCUat opc = (DeviceOPCUat)device;
 
-                                 retList = opc.OpcUa_Read(addresses);
 
-                             }
 
-                             if ((retList != null && retList.Count > 0 && retList[0].Equals(targetValue)) || "uploadProgram".Equals(body.BusinessType) || "deleteProgram".Equals(body.BusinessType))
 
-                             {
 
-                                 System.Threading.Thread.Sleep(3000);
 
-                                 YG.Log.Instance.WriteLogAdd($"115------>>Start Http--------->>>");
 
-                                 string retJson = HttpPost(jsonData, HttpQuestUrlString);
 
-                                 string code = GetJsonValue(retJson, "code");
 
-                                 if ((!string.IsNullOrEmpty(code) && code.Equals("0")) || retJson.Contains("错误的请求"))
 
-                                 {
 
-                                     list.Remove(body);
 
-                                 }
 
-                                 break;
 
-                             }
 
-                         }
 
-                         else if (device.Dtype.Equals(DeviceType.PLC_S7))//s7协议
 
-                         {
 
-                             DeviceS7 s7 = (DeviceS7)device;
 
-                             if (node==null
 
-                                 ||node.CheckAddress.StringIsEmpty())
 
-                             {
 
-                                 Log.Instance.WriteLogAdd($"119-->为空->{s7.DeviceName}");
 
-                             }
 
-                             string retValue = s7.DeviceRead(node.CheckAddress, node.ReadType);
 
-                            // YG.Log.Instance.WriteLogAdd($"135------>>Start Http----{node.Address}---{node.Address}---{node.ReadType}----{s7.ServerUrl}-->>>");
 
-                             if (targetValue.Contains("-"))
 
-                             {
 
-                                 if (retValue.StringToInt() != targetValue.StringToInt())
 
-                                 {
 
-                                     YG.Log.Instance.WriteLogAdd($"139------>>Start Http-------{node.Address}---{node.Address}---{node.ReadType}----{s7.ServerUrl}------>>>");
 
-                                     string retJson = HttpPost(jsonData, HttpQuestUrlString);
 
-                                     string code = GetJsonValue(retJson, "code");
 
-                                     if ((!string.IsNullOrEmpty(code) && code.Equals("0")) || retJson.Contains("错误的请求"))
 
-                                     {
 
-                                         list.Remove(body);
 
-                                     }
 
-                                     break;
 
-                                 }
 
-                             }
 
-                             else if (retValue.Equals(targetValue))
 
-                             {
 
-                                 YG.Log.Instance.WriteLogAdd($"152------>>Start Http----{node.Address}---{node.Address}---{node.ReadType}----{s7.ServerUrl}-->>>");
 
-                                 string retJson = HttpPost(jsonData, HttpQuestUrlString);
 
-                                 string code = GetJsonValue(retJson, "code");
 
-                                 if ((!string.IsNullOrEmpty(code) && code.Equals("0")) || retJson.Contains("错误的请求"))
 
-                                 {
 
-                                     list.Remove(body);
 
-                                 }
 
-                                 break;
 
-                             }
 
-                         }
 
-                         else if (device.Dtype.Equals(DeviceType.Socket))//Socket协议
 
-                         {
 
-                         }
 
-                     }
 
-                  }
 
-             }
 
-             // YG.Log.Instance.WriteLogAdd($"3333---->>>>");
 
-             //重置任务列表缓存
 
-             redis.ServiceStackRedisHelper.SetValue(redisCallBackKey, JsonConvert.SerializeObject(list).ToString(),LocalRedisString);
 
-         }
 
-         /// <summary>
 
-         /// 根据json字符串的键得到键的值
 
-         /// </summary>
 
-         /// <param name="strJson"></param>
 
-         /// <param name="key"></param>
 
-         /// <returns></returns>
 
-         private static string GetJsonValue(string strJson, string key)
 
-         {
 
-             string strResult = "";
 
-             if (!strJson.StartsWith("{") && !strJson.EndsWith("{"))
 
-             {
 
-                 return strResult;
 
-             }
 
-             JObject jsonObj = JObject.Parse(strJson);
 
-             strResult = GetNestJsonValue(jsonObj.Children(), key);
 
-             return strResult;
 
-         }
 
-         /// <summary>
 
-         /// 判断是否是json字符串
 
-         /// </summary>
 
-         /// <param name="value"></param>
 
-         /// <returns></returns>
 
-         private static bool IsJson(string value)
 
-         {
 
-             bool result = false;
 
-             if (!string.IsNullOrWhiteSpace(value) && value.Contains("[") && value.Contains(":"))
 
-             {
 
-                 int leftcount = value.Replace("[", "").Length;
 
-                 int rightcount = value.Replace("]", "").Length;
 
-                 if (leftcount == rightcount)
 
-                 {
 
-                     result = true;
 
-                 }
 
-                 return result;
 
-             }
 
-             return result;
 
-         }
 
-         /// <summary>
 
-         /// 根据key获取到字符串,并把字符串转换为wsm下发下来的指令类
 
-         /// </summary>
 
-         /// <param name="redisKey"></param>
 
-         /// <returns></returns>
 
-         private static List<CcsRequestBody> GetCallBackRequestList(string predisKey)
 
-         {
 
-             string redisKey = predisKey.Clone().ToString();
 
-             //YG.Log.Instance.WriteLogAdd($"4444--->>>{redisKey}");
 
-            
 
-             string json = redis.ServiceStackRedisHelper.GetValue(redisKey, LocalRedisString);
 
-             List<CcsRequestBody> list = new List<CcsRequestBody>();
 
-             try
 
-             {
 
-                 if (IsJson(json))
 
-                 {
 
-                     JsonReader reader = new JsonTextReader(new StringReader(json));
 
-                     while (reader.Read())
 
-                     {
 
-                         JArray array = (JArray)JsonConvert.DeserializeObject(reader.Value.ToString());
 
-                         list = array.ToObject<List<CcsRequestBody>>();
 
-                     }
 
-                 }
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 YG.Log.Instance.WriteLogAdd($"190-->json:{json} errorMessage-->{ex.Message}");
 
-             }
 
-             //YG.Log.Instance.WriteLogAdd($"666--->>{list.Json_SerializeObject()}");
 
-             return list;
 
-         }
 
-         /// <summary>
 
-         /// 把回调内容发送给IMES
 
-         /// </summary>
 
-         /// <param name="pcontent"></param>
 
-         /// <param name="prequestUrl"></param>
 
-         /// <returns></returns>
 
-         private static string HttpPost(string pcontent, string prequestUrl)
 
-         {
 
-             string content = pcontent.Clone().ToString();
 
-             string requestUrl = prequestUrl.Clone().ToString();
 
-             YG.Log.Instance.WriteLogAdd($"httpPost-->{content}-->>{requestUrl}");
 
-             var responseString = "";
 
-             try
 
-             {
 
-                 var request = (HttpWebRequest)WebRequest.Create(requestUrl);
 
-                 request.Method = "POST";
 
-                 request.ContentType = "application/json;charset=UTF-8";
 
-                 byte[] byteData = Encoding.UTF8.GetBytes(content);
 
-                 int length = byteData.Length;
 
-                 request.ContentLength = length;
 
-                 Stream writer = request.GetRequestStream();
 
-                 writer.Write(byteData, 0, length);
 
-                 writer.Close();
 
-                 var response = (HttpWebResponse)request.GetResponse();
 
-                 responseString = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")).ReadToEnd();
 
-                 YG.Log.Instance.WriteLogAdd($"回调--->返回值-->>{responseString}-->>{pcontent}-->>{prequestUrl}");
 
-                 return responseString;
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 YG.Log.Instance.WriteLogAdd($"215-->{ex.Message}");
 
-                 responseString = ex.Message;
 
-                 return responseString;
 
-             }
 
-             return responseString;
 
-         }
 
-         public static List<Node> GetTargetList(string pmachine, string pparentKey)
 
-         {
 
-             string machine = pmachine.ToClone(); string parentKey = pparentKey.ToClone();
 
-             List<Node> machineList = new List<Node>();
 
-             List<Node> list = new List<Node>();
 
-             foreach (Node nd in nodeList)
 
-             {
 
-                 if (nd.Key.ToUpper().Equals(machine.ToUpper()))
 
-                 {
 
-                     machineList = nd.Childs;
 
-                     break;
 
-                 }
 
-             }
 
-             foreach (Node nd in machineList)
 
-             {
 
-                 if (nd.Key.ToUpper().Equals(parentKey.ToUpper()))
 
-                 {
 
-                     list = nd.Childs;
 
-                     break;
 
-                 }
 
-             }
 
-             return list;
 
-         }
 
-         public static Node GetTargetNode(string pmachine, string pparentKey)
 
-         {
 
-             string machine = pmachine.ToClone(); string parentKey = pparentKey.Clone().ToString();
 
-             Node machineNode = new Node();
 
-             Node targetNode = new Node();
 
-             foreach (Node nd in nodeList)
 
-             {
 
-                 if (nd.Key.ToUpper().Equals(machine.ToUpper()))
 
-                 {
 
-                     machineNode = nd;
 
-                     break;
 
-                 }
 
-             }
 
-             foreach (Node nd in machineNode.Childs)
 
-             {
 
-                 if (nd.Key.ToUpper().Equals(parentKey.ToUpper()))
 
-                 {
 
-                     targetNode = nd;
 
-                     break;
 
-                 }
 
-             }
 
-             return targetNode;
 
-         }
 
-         public static string GetBinaryBit(int vDecimal, int startPos, int endPos)
 
-         {
 
-             int retValue = 0;
 
-             for (int i = startPos; i <= endPos; i++)
 
-             {
 
-                 int v = vDecimal >> i & 1;
 
-                 if (v == 1)
 
-                 {
 
-                     retValue = i;
 
-                     break;
 
-                 }
 
-             }
 
-             if (startPos > 0)
 
-             {
 
-                 retValue = retValue - startPos;
 
-             }
 
-             return retValue.ToString();
 
-         }
 
-         private static string GetNestJsonValue(JEnumerable<JToken> jToken, string key)
 
-         {
 
-             IEnumerator enumerator = jToken.GetEnumerator();
 
-             while (enumerator.MoveNext())
 
-             {
 
-                 JToken jc = (JToken)enumerator.Current;
 
-                 if (jc is JObject || ((JProperty)jc).Value is JObject)
 
-                 {
 
-                     return GetNestJsonValue(jc.Children(), key);
 
-                 }
 
-                 else
 
-                 {
 
-                     if (((JProperty)jc).Name == key)
 
-                     {
 
-                         return ((JProperty)jc).Value.ToString();
 
-                     }
 
-                 }
 
-             }
 
-             return null;
 
-         }
 
-         public static void WriteAccessLog(string desc)
 
-         {
 
-             try
 
-             {
 
-                 // 判断文件是否存在,不存在则创建,否则读取值显示到窗体            
 
-                 if (!File.Exists(LogFilePath))
 
-                 {
 
-                     FileStream fs1 = new FileStream(LogFilePath, FileMode.Create, FileAccess.Write);//创建写入文件 
 
-                     StreamWriter sw = new StreamWriter(fs1);
 
-                     sw.WriteLine(desc);//开始写入值
 
-                     sw.WriteLine(desc);//开始写入值
 
-                     sw.Close();
 
-                     fs1.Close();
 
-                 }
 
-                 else
 
-                 {
 
-                     FileStream fs = new FileStream(LogFilePath, FileMode.Append, FileAccess.Write);
 
-                     StreamWriter sr = new StreamWriter(fs);
 
-                     sr.WriteLine(desc);//开始写入值
 
-                     sr.Close();
 
-                     fs.Close();
 
-                 }
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 YG.Log.Instance.WriteLogAdd($"333-->{ex.Message}");
 
-                 Console.WriteLine(ex.Message);
 
-             }
 
-         }
 
-     }
 
- }
 
 
  |