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 { /// /// 处理待处理数据,并生成待成记录 /// /// 待处理模型 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 } }