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
}
}