using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Threading.Tasks; namespace SocketTransfer.SDK { public class EventsCommodityNew { #region 方法 -> 返回公共方法 public static byte[] DoEvent(byte[] _Receive, int Type = 1) { try { if (Type == 1) { string[] files = (string[])BytesToObject(_Receive); if (files == null || files.Length == 0) { LogHelper.WriteReceiveLog("非法数据包!"); return null; } return ObjectToBytes(DoEvent(files)); } LogHelper.WriteReceiveLog("未定义接受方法或数据包不完整!"); return null; } catch (Exception ex) { LogHelper.WriteReceiveLog("DoEvent(byte):" + ex.Message); return null; } } #endregion #region 方法 -> 设置返回的参数 static string[] DoEvent(string[] files) { string[] backFiles = null; try { switch (int.Parse(files[0])) { case 0: backFiles = new string[3]; backFiles[0] = files[0]; //类型 backFiles[1] = files[21]; //TRANSFER_ID backFiles[2] = files[4]; //SERVERPARTCODE break; case 1: //HIGHWAY_EXCHANGE.T_TRANSFER_SELLDATA backFiles = new string[4]; backFiles[0] = files[0]; //类型 backFiles[1] = files[1]; //内码 backFiles[2] = files[2]; //服务区码 backFiles[3] = files[17]; //传输内码 break; case 2: backFiles = new string[3]; backFiles[0] = files[0]; //类型 backFiles[1] = files[30]; //TRANSFER_ID backFiles[2] = files[2]; //SERVERPARTCODE break; case 3: backFiles = new string[4]; backFiles[0] = files[0]; //类型 backFiles[1] = files[22]; //TRANSFER_ID backFiles[2] = files[2]; //SERVERPARTCODE backFiles[3] = files[3]; //SHOPCODE break; case 4: backFiles = new string[3]; backFiles[0] = files[0]; //类型 backFiles[1] = files[1]; //内码 backFiles[2] = files[41];//省份编码 break; case 5: backFiles = new string[3]; backFiles[0] = files[0]; //类型 backFiles[1] = files[1]; //内码 backFiles[2] = files[15];//省份编码 break; case 6://HIGHWAY_EXCHANGE.T_DATACOLLECTION backFiles = new string[4]; backFiles[0] = files[0]; //类型 backFiles[1] = files[15]; //内码 backFiles[2] = files[2];//服务区码 backFiles[3] = files[5];//MAC地址 break; case 7: //MOBILESERVICE_PLATFORM.T_SERVERPART backFiles = new string[3]; backFiles[0] = files[0]; //类型 backFiles[1] = files[files.Length - 2];//日志表内码 backFiles[2] = files[5]; //服务区名称 break; case 8: //HIGHWAY_STORAGE.T_SERVERPARTSHOP backFiles = new string[3]; backFiles[0] = files[0]; //类型 backFiles[1] = files[files.Length - 3];//日志表内码 backFiles[2] = files[3]; //门店名称 break; case 9: //HIGHWAY_EXCHANGE.T_WINSYSTEMLOG backFiles = new string[3]; backFiles[0] = files[0]; //类型 backFiles[1] = files[1];//日志表内码 backFiles[2] = files[8];//服务区 break; case 10: //MOBILESERVICE_PLATFORM.T_USER backFiles = new string[4]; backFiles[0] = files[0]; //类型 backFiles[1] = files[17];//日志表内码 backFiles[2] = files[files.Length - 2];//服务区CODE backFiles[3] = files[files.Length - 1];//是否删除 break; case 11: //MOBILESERVICE_PLATFORM.T_USERTYPE backFiles = new string[3]; backFiles[0] = files[0]; //类型 backFiles[1] = files[files.Length - 3];//日志表内码 backFiles[2] = files[files.Length - 1];//服务区CODE break; case 12: //HIGHWAY_EXCHANGE.T_MACHINEMANAGE backFiles = new string[4]; backFiles[0] = files[0]; //类型 backFiles[1] = files[files.Length - 4];//日志表内码 backFiles[2] = files[files.Length - 2];//服务区CODE backFiles[3] = files[files.Length - 1];//是否删除 break; case 13: //HIGHWAY_EXCHANGE.T_CUSTOMERINFO backFiles = new string[3]; backFiles[0] = files[0]; //类型 backFiles[1] = files[1]; //TRANSFER_ID backFiles[2] = files[2]; //SELLMASTER_CODE break; case 14: //HIGHWAY_EXCHANGE.T_PASSENGERFLOW backFiles = new string[3]; backFiles[0] = files[0]; //类型 backFiles[1] = files[1]; //PASSENGERFLOW_ID backFiles[2] = files[2]; //SERVERPARTCODE break; case 15: //HIGHWAY_EXCHANGE.T_VEHICLEFLOW backFiles = new string[3]; backFiles[0] = files[0]; //类型 backFiles[1] = files[1]; //VEHICLEFLOW_ID backFiles[2] = files[2]; //SERVERPARTCODE break; case 16: //HIGHWAY_EXCHANGE.T_SATISFACTIONFLOW backFiles = new string[3]; backFiles[0] = files[0]; //类型 backFiles[1] = files[1]; //TRANSFER_ID backFiles[2] = files[2]; //SERVERPARTCODE break; //case 17: //HIGHWAY_EXCHANGE.T_SATISFACTIONFLOW(日数据) //backFiles = new string[3]; //backFiles[0] = files[0]; //类型 //backFiles[1] = files[24]; //TRANSFER_ID //backFiles[2] = files[3]; //SERVERPARTCODE //break; case 18: backFiles = new string[5]; backFiles[0] = files[0]; //类型 backFiles[1] = files[1]; //DATACOLLECTION_ID backFiles[2] = files[2]; //SERVERPARTCODE backFiles[3] = files[3]; //DATACOLLECTION_TYPE backFiles[4] = files[4]; //DATACOLLECTION_DATE break; case 20: backFiles = new string[3]; backFiles[0] = files[0]; //类型 backFiles[1] = files[24]; //TRANSFER_ID backFiles[2] = files[3]; //SERVERPARTCODE break; case 21: backFiles = new string[3]; backFiles[0] = files[0]; //类型 backFiles[1] = files[25]; //TRANSFER_ID backFiles[2] = files[3]; //SERVERPARTCODE break; case 23: backFiles = new string[4]; backFiles[0] = files[0]; //类型 backFiles[1] = files[4]; //COMMODITY_CODE backFiles[2] = files[2]; //SERVERPARTCODE backFiles[3] = files[19]; //SERVERPARTSHOP_ID break; case 24: backFiles = new string[2]; backFiles[0] = files[0]; //类型 backFiles[1] = files[1]; //TRANSFERSTATISTICS_CODE break; case 25: backFiles = new string[8]; backFiles[0] = files[0]; //类型 backFiles[1] = files[1]; backFiles[2] = files[2]; backFiles[3] = files[3]; backFiles[4] = files[4]; backFiles[5] = files[5]; backFiles[6] = files[6]; backFiles[7] = files[8]; break; case 26: case 27: backFiles = new string[8]; backFiles[0] = files[0]; //类型 backFiles[1] = files[1]; backFiles[2] = files[7]; backFiles[3] = files[8]; backFiles[4] = files[2]; backFiles[5] = files[3]; backFiles[6] = files[4]; backFiles[7] = files[6]; break; case 99: //HIGHWAY_EXCHANGE.T_SYSCODE backFiles = files; break; case 100: backFiles = files; backFiles[1] = "Recieve"; backFiles[2] = DateTime.Now.ToString(); break; default: backFiles = files; break; } } catch (Exception ex) { LogHelper.WriteReceiveLog("DoEvent(string):" + ex.Message); } return backFiles; } #endregion #region 方法 -> 对象转Bytes /// /// 将一个object对象序列化,返回一个byte[] /// /// 能序列化的对象 /// public static byte[] ObjectToBytes(object obj) { using (MemoryStream ms = new MemoryStream()) { IFormatter formatter = new BinaryFormatter(); formatter.Serialize(ms, obj); return ms.GetBuffer(); } } #endregion #region 方法 -> Bytes转对象 /// /// 将一个序列化后的byte[]数组还原 /// /// /// public static object BytesToObject(byte[] Bytes) { using (MemoryStream ms = new MemoryStream(Bytes)) { IFormatter formatter = new BinaryFormatter(); return formatter.Deserialize(ms); } } #endregion #region 方法 -> 泛型实体进行数组数据赋值 /// /// 泛型实体进行数组数据赋值 /// /// /// /// public static void Assignment_Test(T t, params string[] fieles) { Type TType = typeof(T); PropertyInfo[] tps = TType.GetProperties(); if (fieles != null && fieles.Length > 0 && (tps.Length + 1) == fieles.Length) { bool FLAG = false; if (fieles[0] != null) { switch (fieles[0]) { case "SERVERPART": FLAG = true; break; } } if (FLAG) { for (int i = 0; i < tps.Length; i++) { if (IsType(tps[i].PropertyType, "System.String")) { tps[i].SetValue(t, fieles[i + 1], null); continue; } if (IsType(tps[i].PropertyType, "System.Boolean")) { tps[i].SetValue(t, Boolean.Parse(fieles[i + 1]), null); continue; } if (IsType(tps[i].PropertyType, "System.Int32")) { if (fieles[i + 1] != "") tps[i].SetValue(t, int.Parse(fieles[i + 1]), null); else tps[i].SetValue(t, 0, null); continue; } if (IsType(tps[i].PropertyType, "System.Double")) { if (fieles[i + 1] != "") tps[i].SetValue(t, double.Parse(fieles[i + 1]), null); else tps[i].SetValue(t, 0, null); continue; } if (IsType(tps[i].PropertyType, "System.Nullable`1[System.DateTime]")) { if (fieles[i + 1] != "") { try { tps[i].SetValue( t, (DateTime?)DateTime.ParseExact(fieles[i + 1], "yyyy-MM-dd HH:mm:ss", null), null); } catch { //tps[i].SetValue(t, (DateTime?)DateTime.ParseExact(fieles[i + 1], "yyyy-MM-dd", null), null); throw new Exception("请检查您的是 时间类型是否为:yyyy-MM-dd HH:mm:ss"); } } else tps[i].SetValue(t, null, null); continue; } throw new Exception("泛型中存在不支持的数据类型"); } } else { throw new Exception("数组索引第0项,请在本方法switch中设置表名"); } } else { throw new Exception("数组索引异常,请检查数组是否包含表名和泛型实体属性索引"); } } #endregion #region 方法 -> 类型匹配 /// /// 类型匹配 /// /// 类型 /// 类型名称 /// public static bool IsType(Type type, string typeName) { if (type.ToString() == typeName) return true; if (type.ToString() == "System.Object") return false; return IsType(type.BaseType, typeName); } #endregion } }