ComplianceServer/oldcode/WX.CRM.DataSynFactory/CreateFactory.cs

99 lines
4.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Reflection;
using WX.CRM.Common;
using WX.CRM.DataSynFactory.BLL;
using WX.CRM.Model.EntitySync;
namespace WX.CRM.DataSynFactory
{
public class CreateFactory
{
/// <summary>
/// 处理待处理数据,并生成待成记录
/// </summary>
/// <param name="info">待处理模型</param>
public static void DataImport(SYNC_RECEIVE info)
{
string b = string.Empty;
try
{
if (info == null)
return;
b = info.BIDATATYPE;
var ret = DataImportOne(info);
if (ret)
{
new SYNC_RECEIVE_BL().ReceiveSucc(info);
}
else
{
new SYNC_RECEIVE_BL().ReceiveException(info);
}
}
catch (Exception ex)
{
LogHelper.Error("【CreateFactory.DataImport】" + b + ":" + ex.ToString());
try
{
//转移待处理记当前到失败表
new SYNC_RECEIVE_BL().ReceiveError(info, ex.Message);
}
catch (Exception e)
{
LogHelper.Error("【DataSynFactory.BLL.SYNC_RECEIVE_BL().ReceiveError】转移到异常历史表失败" + e.Message + e.StackTrace);
}
throw ex;
}
}
#region
static void DataImportBatch(SYNC_RECEIVE info)
{
try
{
if (info == null)
return;
var asd = System.Reflection.Assembly.Load("WX.CRM.DataSynFactory");
var modelName = string.Format("WX.CRM.DataSynFactory.Templates.{0}", info.BIDATATYPE);
var cmd = string.Format("WX.CRM.DataSynFactory.Cmd.{0}_IMP", info.BIDATATYPE);
var modelInstance = asd.CreateInstance(modelName);
var listtype = typeof(List<>).MakeGenericType(modelInstance.GetType());
var cmdInstance = asd.CreateInstance(cmd);
var method = cmdInstance.GetType().GetMethod("ImportDataBatch");
//method = method.MakeGenericMethod(modelInstance.GetType()); //实例时方法已指定类型
//----------------------------------------------------------------------------------------
Type catalogComposition = Assembly.Load("Common").GetType("WX.CRM.Common.Utility");
MethodInfo composePartsMethod = catalogComposition.GetMethod("JSONToObject", BindingFlags.Static | BindingFlags.Public);
var info22 = composePartsMethod.MakeGenericMethod(new Type[] { listtype }).Invoke(catalogComposition, new object[] { info.JSONTEXT });
//----------------------------------------------------------------------------------------
method.Invoke(cmdInstance, new object[] { info22, info.PICI ?? 0 });
}
catch
{
throw;
}
}
static bool DataImportOne(SYNC_RECEIVE info)
{
var asd = System.Reflection.Assembly.Load("WX.CRM.DataSynFactory");
var modelName = string.Format("WX.CRM.DataSynFactory.Templates.{0}", info.BIDATATYPE);
var cmd = string.Format("WX.CRM.DataSynFactory.Cmd.{0}_IMP", info.BIDATATYPE);
var modelInstance = asd.CreateInstance(modelName);
var cmdInstance = asd.CreateInstance(cmd);
var method = cmdInstance.GetType().GetMethod("GenerateBusinessOne");
//method = method.MakeGenericMethod(modelInstance.GetType()); //实例时方法已指定类型
//----------------------------------------------------------------------------------------
Type catalogComposition = Assembly.Load("Common").GetType("WX.CRM.Common.Utility");
MethodInfo composePartsMethod = catalogComposition.GetMethod("JSONToObject", BindingFlags.Static | BindingFlags.Public);
var info22 = composePartsMethod.MakeGenericMethod(new Type[] { modelInstance.GetType() }).Invoke(catalogComposition, new object[] { info.JSONTEXT });
//----------------------------------------------------------------------------------------
var obj = method.Invoke(cmdInstance, new object[] { info22 });
return (bool)obj;
}
#endregion
}
}