2025-03-28 09:49:56 +08:00

386 lines
16 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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