386 lines
16 KiB
C#
386 lines
16 KiB
C#
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
|
||
/// <summary>
|
||
/// 将一个object对象序列化,返回一个byte[]
|
||
/// </summary>
|
||
/// <param name="obj">能序列化的对象</param>
|
||
/// <returns></returns>
|
||
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转对象
|
||
/// <summary>
|
||
/// 将一个序列化后的byte[]数组还原
|
||
/// </summary>
|
||
/// <param name="Bytes"></param>
|
||
/// <returns></returns>
|
||
public static object BytesToObject(byte[] Bytes)
|
||
{
|
||
using (MemoryStream ms = new MemoryStream(Bytes))
|
||
{
|
||
IFormatter formatter = new BinaryFormatter(); return formatter.Deserialize(ms);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 泛型实体进行数组数据赋值
|
||
/// <summary>
|
||
/// 泛型实体进行数组数据赋值
|
||
/// </summary>
|
||
/// <typeparam name="T"></typeparam>
|
||
/// <param name="t"></param>
|
||
/// <param name="fieles"></param>
|
||
public static void Assignment_Test<T>(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 方法 -> 类型匹配
|
||
/// <summary>
|
||
/// 类型匹配
|
||
/// </summary>
|
||
/// <param name="type">类型</param>
|
||
/// <param name="typeName">类型名称</param>
|
||
/// <returns></returns>
|
||
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
|
||
}
|
||
}
|