/// <summary> /// 将同步的数据转换为JSON格式 /// </summary> /// <param name="sourceData"></param> /// <param name="operationType"></param> /// <returns></returns> private JObject ConvertSynDataToJObj(AbsSynchroDataInfo sourceData, SynOperationType operationType) { DeliveryNotice notice = sourceData as DeliveryNotice; JObject baseData = default(JObject); if (notice != null) { baseData = new JObject(); JObject FBillTypeID = new JObject();//单据类型 FBillTypeID.Add("FNumber", ""); baseData.Add("FBillTypeID", FBillTypeID); baseData.Add("FBillNo", notice.FBillNo);//单据编号 baseData.Add("FDate", notice.FDate); JObject FSaleOrgId = new JObject();//销售组织 baseData.Add("FNumber", notice.FSaleOrgId); FSaleOrgId.Add("FSaleOrgId", FSaleOrgId); JObject FDeliveryOrgID = new JObject();//发货组织 FDeliveryOrgID.Add("FNumber", ""); baseData.Add("FDeliveryOrgID", FDeliveryOrgID); baseData.Add("FEntity", BuildDeliveryNoitceEntryJson(notice)); //明细信息 baseData.Add("SubHeadEntity", BuildDeliveryNoticeFinJson(notice)); //财务信息 baseData.Add("F_HS_LocusEntity", DeliveryNoticeLocusEntryJson(notice)); //轨迹明细信息 baseData.Add("FDeliNoticeTrace", BuildDeliveryNoticeTraceEntryJson(notice)); //物流跟踪明细信息 } return(baseData); }
private int UpdateAfterOperate(Context ctx, HttpResponseResult result, SynOperationType operType) { int count = 0; string sql = string.Empty; if (result != null) { try { if (result.SuccessEntityNos != null && result.SuccessEntityNos.Count > 0) { foreach (var number in result.SuccessEntityNos) { if (number != null) { if (operType == SynOperationType.SAVE) { sql += string.Format(@"/*dialect*/ update T_SAL_BATCHADJUST set FCREATORID = '{0}' where FBILLNO = '{1}' ", ctx.UserId, number) + Environment.NewLine; } else if (operType == SynOperationType.SUBMIT) { sql += string.Format(@"/*dialect*/update T_SAL_BATCHADJUST set FMODIFIERID = '{0}' where FBILLNO = '{1}'", ctx.UserId, number) + Environment.NewLine; } else if (operType == SynOperationType.AUDIT) { sql += string.Format(@"/*dialect*/update T_SAL_BATCHADJUST set FAPPROVERID = '{0}' where FBILLNO = '{1}'", ctx.UserId, number) + Environment.NewLine; } } count = DBUtils.Execute(ctx, sql); } } } catch (Exception ex) { LogUtils.WriteSynchroLog(ctx, SynchroDataType.SaleOrder, "收款单【" + string.Join(",", result.SuccessEntityNos.Select(o => o.ToString())) + "】对应的销售订单更新已同步收款单状态出现异常:" + System.Environment.NewLine + ex.Message + System.Environment.NewLine + ex.Message); } } return(count); }
/// <summary> /// 根据操作类型确定调用动态方法的名称 /// </summary> /// <param name="type"></param> /// <param name="operateType"></param> /// <returns></returns> public static string GetMethodName(Type type, SynOperationType operateType) { MethodInfo[] methods = DynamicInvoke.GetMethods(type); if (methods != null && methods.Length > 0) { foreach (var method in methods) { if (method != null) { if (method.Name.ToUpper().Contains(operateType.ToString().ToUpper())) { return(method.Name); } } } } return(null); }
/// <summary> /// 根据操作类型确定动态调用方法的参数类型和个数 /// </summary> /// <param name="ctx"></param> /// <param name="operateType"></param> /// <param name="dataType"></param> /// <param name="formId"></param> /// <param name="json"></param> /// <param name="numbers"></param> /// <param name="pkIds"></param> /// <returns></returns> public static object[] GetAgrs(Context ctx, SynOperationType operateType, SynchroDataType dataType, string formId, string json, IEnumerable <string> numbers = null, IEnumerable <int> pkIds = null) { if (!string.IsNullOrWhiteSpace(operateType.ToString())) { switch (operateType) { case SynOperationType.SAVE: return(new object[] { ctx, dataType, formId, json }); case SynOperationType.DELETE: case SynOperationType.AUDIT: case SynOperationType.UNAUDIT: case SynOperationType.SUBMIT: return(new object[] { ctx, dataType, formId, numbers, pkIds }); case SynOperationType.ALLOT: return(new object[] { ctx, dataType, formId, pkIds }); } } return(null); }
public virtual HttpResponseResult ExecuteOperate(SynOperationType operateType, List <string> numbers = null, List <int> pkIds = null, string json = null) { HttpResponseResult result = null; if ((numbers != null && numbers.Count > 0) || (pkIds != null && pkIds.Count > 0) || !string.IsNullOrWhiteSpace(json)) { HttpClient httpClient = new HttpClient(); httpClient.Url = "http://localhost/K3Cloud/Services/SynchroServiceBus.asmx/ExecuteOperate"; Dictionary <string, string> dict = new Dictionary <string, string>(); dict.Add("ctx", HttpUtility.UrlEncode(JsonConvert.SerializeObject(this.K3CloudContext), Encoding.UTF8)); dict.Add("dataType", HttpUtility.UrlEncode(this.DataType.ToString(), Encoding.UTF8)); dict.Add("operateType", HttpUtility.UrlEncode(operateType.ToString(), Encoding.UTF8)); dict.Add("formId", HttpUtility.UrlEncode(this.FormKey, Encoding.UTF8)); dict.Add("numbers", numbers == null ? null : HttpUtility.UrlEncode(JsonConvert.SerializeObject(numbers.ToArray()), Encoding.UTF8)); dict.Add("pkIds", pkIds == null ? null : HttpUtility.UrlEncode(JsonConvert.SerializeObject(pkIds.ToArray()), Encoding.UTF8)); dict.Add("json", HttpUtility.UrlEncode(json, Encoding.UTF8)); StringBuilder sb = new StringBuilder(); foreach (var item in dict) { sb.AppendFormat("&{0}={1}", item.Key, item.Value); } httpClient.Content = sb.ToString(); string ret = httpClient.PostData(); result = JsonConvert.DeserializeObject <HttpResponseResult>(ret); if (result != null) { SynchroDataLog(this.K3CloudContext, result, this.DataType, operateType); } } return(result); }
/// <summary> /// 将需要同步的数据转换为JSON格式(集合) /// </summary> /// <param name="sourceDatas"></param> /// <param name="operationType"></param> /// <returns></returns> public abstract JObject BuildSynchroDataJsons(IEnumerable <AbsSynchroDataInfo> sourceDatas, SynOperationType operationType);
public override JObject BuildSynchroDataJsons(IEnumerable <AbsSynchroDataInfo> sourceDatas, SynOperationType operationType) { JObject root = null; JArray model = null; if (sourceDatas != null && sourceDatas.Count() > 0) { root = new JObject(); model = new JArray(); root.Add("NeedUpDateFields", new JArray("")); root.Add("IsDeleteEntry", "false"); root.Add("SubSystemId", ""); root.Add("IsVerifyBaseDataField", "true"); foreach (var data in sourceDatas) { if (data != null) { model.Add(BuildSynchroDataJson(data, null, SynOperationType.SAVE)); } } root.Add("Model", model); } return(root); }
/// <summary> /// 将需要同步的数据转换为JSON格式(单个) /// </summary> /// <param name="sourceData"></param> /// <param name="log"></param> /// <param name="operationType"></param> /// <returns></returns> public abstract JObject BuildSynchroDataJson(AbsSynchroDataInfo sourceData, SynchroLog log, SynOperationType operationType);
public override JObject BuildSynchroDataJsons(IEnumerable <AbsSynchroDataInfo> sourceDatas, SynOperationType operationType) { return(null); }
/// <summary> /// 执行同步客户操作 /// </summary> /// <param name="sourceDatas"></param> /// <param name="logs"></param> /// <param name="operationType"></param> /// <returns></returns> public override HttpResponseResult ExecuteSynchro(IEnumerable <AbsSynchroDataInfo> sourceDatas, List <SynchroLog> logs, SynOperationType operationType) { HttpResponseResult result = null; List <K3CustomerInfo> custs = ConvertAbsSynchroObject(sourceDatas); JObject bizData = BuildSynchroDataJsons(sourceDatas, operationType); try { if (operationType == SynOperationType.UPDATE) { //单据更新 result = ExecuteOperate(SynOperationType.SAVE, null, null, bizData.ToString()); } return(result); } catch (Exception ex) { if (logs != null && logs.Count > 0) { foreach (var log in logs) { log.IsSuccess = 0; log.ErrInfor = ex.Message + System.Environment.NewLine + ex.StackTrace; } } } if (result == null) { return(null); } if (result.Success == false && result.FailedResult == null && result.Result == null) { //同步出现错误之类:如令牌错误,url错误之类的 if (logs != null && logs.Count > 0) { foreach (var log in logs) { log.IsSuccess = 0; log.ErrInfor = "数据同步失败:" + result.Message == null ? "" : result.Message; } } return(result); } return(result); }
/// <summary> /// 更新同步后的操作(提交、审核)日志的提示信息 /// </summary> /// <param name="ctx"></param> /// <param name="result"></param> /// <param name="dataType"></param> /// <param name="operateType"></param> public virtual void SynchroDataLog(Context ctx, HttpResponseResult result, SynchroDataType dataType, SynOperationType operateType) { if (result != null) { if (result.SuccessEntityNos != null && result.SuccessEntityNos.Count > 0) { string msg = string.Format("单据编码【{0}】{1}成功!", string.Join(",", result.SuccessEntityNos.Select(o => o.ToString())), operateType.ToString()); result.Message = msg; LogUtils.WriteSynchroLog(ctx, dataType, msg); } } else { LogUtils.WriteSynchroLog(ctx, dataType, "" + dataType + "" + operateType + " 失败!"); } }
/// <summary> /// 将需要同步的客户转化为JSON格式(客户集合) /// </summary> /// <param name="sourceDatas"></param> /// <param name="operationType"></param> /// <returns></returns> public override JObject BuildSynchroDataJsons(IEnumerable <AbsSynchroDataInfo> sourceDatas, SynOperationType operationType) { JObject root = null; int batchCount = BatchCount(sourceDatas); JArray jArr = ConvertSynObjToJObj(sourceDatas, operationType); //数据更新时的Json格式 if (operationType == SynOperationType.SAVE) { //更新单据时,表体信息必须填写明细表体的主键 root = new JObject(); root.Add("NeedUpDateFields", new JArray("")); root.Add("NeedReturnFields", new JArray("FNumber")); root.Add("IsDeleteEntry", "false"); root.Add("SubSystemId", ""); root.Add("IsVerifyBaseDataField", "true"); root.Add("BatchCount", batchCount); if (sourceDatas != null) { if (sourceDatas.Count() > 0) { JArray model = new JArray(); for (int i = 0; i < sourceDatas.Count(); i++) { K3CustomerInfo custData = sourceDatas.ElementAt(i) as K3CustomerInfo; string sFCustId = string.Format(@"/*dialect*/ select FCUSTID,FUseOrgId from T_BD_CUSTOMER where FNumber = '{0}'", custData.FNumber); DynamicObjectCollection coll = SQLUtils.GetObjects(this.K3CloudContext, sFCustId); if (coll.Count > 0) { foreach (var c in coll) { if (c["FCUSTID"] != null) { JObject baseData = ConvertSynObjToJObj(sourceDatas.ElementAt(i), operationType); //主组织记录 if (Convert.ToInt32(SQLUtils.GetFieldValue(c, "FUseOrgId")) == 1) { baseData.Add("FCUSTID", Convert.ToInt32(SQLUtils.GetFieldValue(c, "FCUSTID"))); model.Add(baseData); } } } } } if (model != null && model.Count > 0) { root.Add("Model", model); return(root); } } } } return(null); }
/// <summary> /// 提交请求后,服务端响应客户端信息 /// </summary> /// <param name="ctx"></param> /// <param name="dataType"></param> /// <param name="operationType"></param> /// <param name="ret"></param> /// <returns></returns> public static HttpResponseResult Response(Context ctx, SynchroDataType dataType, SynOperationType operationType, string ret, string json = null) { HttpResponseResult response = default(HttpResponseResult); Dictionary <string, string> dict = new Dictionary <string, string>(); string msg = string.Empty; string last = string.Empty; if (!string.IsNullOrEmpty(ret)) { response = new HttpResponseResult(dataType); JObject result = JObject.Parse(ret); if (result.Property("Result") != null) { if (JObject.Parse(JsonUtils.ConvertObjectToString(result["Result"])).Property("ResponseStatus") != null) { response.Success = Convert.ToBoolean(JsonUtils.ConvertObjectToString(result["Result"]["ResponseStatus"]["IsSuccess"])); } } if (response.Success == false) { if (result.Property("Result") != null) { if (JObject.Parse(JsonUtils.ConvertObjectToString(result["Result"])).Property("ResponseStatus") != null) { JArray jArr = JArray.Parse(JsonUtils.ConvertObjectToString(result["Result"]["ResponseStatus"]["Errors"])); if (jArr != null && jArr.Count() > 0) { string number = null; for (int i = 0; i < jArr.Count(); i++) { if (jArr[i]["DIndex"] != null) { int index = Convert.ToInt32(JsonUtils.ConvertObjectToString(jArr[i]["DIndex"])); number = GetSynFailBillNo(ctx, json, dataType, index); if (index > 0) { last = GetSynFailBillNo(ctx, json, dataType, index - 1); } } if (jArr[i]["FieldName"] != null) { if (!string.IsNullOrWhiteSpace(number)) { if (i < jArr.Count() - 1) { response.Message += "编码为[" + number + "]:" + JsonUtils.ConvertObjectToString(jArr[i]["FieldName"]) + System.Environment.NewLine; } else if (i == jArr.Count() - 1) { response.Message += "编码为[" + number + "]:" + JsonUtils.ConvertObjectToString(jArr[i]["FieldName"]); } } else { if (i < jArr.Count() - 1) { response.Message += JsonUtils.ConvertObjectToString(jArr[i]["FieldName"]) + System.Environment.NewLine; } else if (i == jArr.Count() - 1) { response.Message += JsonUtils.ConvertObjectToString(jArr[i]["FieldName"]); } } } if (jArr[i]["Message"] != null) { if (!string.IsNullOrWhiteSpace(number)) { if (i < jArr.Count() - 1) { response.Message += "编码为[" + number + "]:" + JsonUtils.ConvertObjectToString(jArr[i]["Message"]) + System.Environment.NewLine; } else if (i == jArr.Count() - 1) { response.Message += "编码为[" + number + "]:" + JsonUtils.ConvertObjectToString(jArr[i]["Message"]); } } else { if (i < jArr.Count() - 1) { response.Message += JsonUtils.ConvertObjectToString(jArr[i]["Message"]) + System.Environment.NewLine; } else if (i == jArr.Count() - 1) { response.Message += JsonUtils.ConvertObjectToString(jArr[i]["Message"]); } } } } if (!string.IsNullOrWhiteSpace(response.Message)) { LogUtils.WriteSynchroLog(ctx, dataType, operationType + "操作, Response返回的Json信息异常,异常信息:" + System.Environment.NewLine + response.Message); } } response.ExceptionCode = JsonUtils.ConvertObjectToString(result["Result"]["ResponseStatus"]["ErrorCode"]); } } } if (result.Property("Result") != null) { if (JObject.Parse(JsonUtils.ConvertObjectToString(result["Result"])).Property("Number") != null) { response.Source = JsonUtils.ConvertObjectToString(result["Result"]["Number"]); } if (JObject.Parse(JsonUtils.ConvertObjectToString(result["Result"])).Property("NeedReturnData") != null) { response.NeedReturnDatas = JArray.Parse(JsonUtils.ConvertObjectToString(result["Result"]["NeedReturnData"])); response.ResultJson = JsonUtils.ConvertObjectToString(result["Result"]["NeedReturnData"]); } if (JObject.Parse(JsonUtils.ConvertObjectToString(result["Result"])).Property("ResponseStatus") != null) { response.SuccessEntitys = JArray.Parse(JsonUtils.ConvertObjectToString(result["Result"]["ResponseStatus"]["SuccessEntitys"])); } } } if (response != null) { if (response.Success == false || ret.StartsWith("Code")) { LogUtils.WriteSynchroLog(ctx, dataType, "" + operationType + "操作, Response返回的Json信息异常,异常信息:" + ret); } } return(response); }
public override HttpResponseResult ExecuteSynchro(IEnumerable <AbsSynchroDataInfo> sourceDatas, List <SynchroLog> logs, SynOperationType operationType) { HttpResponseResult result = null; List <K3CustomerInfo> infos = sourceDatas.Select(c => (K3CustomerInfo)c).ToList(); string sql = string.Empty; List <string> addrNos = null; if (infos != null && infos.Count > 0) { addrNos = infos.Select(a => a.lstCustCtaInfo).SelectMany(a => a.Select(b => b.FNUMBER1)).ToList(); foreach (var info in infos) { if (info != null && info.lstCustCtaInfo != null && info.lstCustCtaInfo.Count > 0) { sql += string.Format(@"/*dialect*/delete from T_BD_CUSTLOCATION where FNUMBER in ('{0}')", string.Join("','", info.lstCustCtaInfo.Select(i => i.FNUMBER1))); try { int count = DBUtils.Execute(this.K3CloudContext, sql); if (count > 0) { result = new HttpResponseResult(); result.Message = string.Format("客户编码【{0}】删除客户地址【{1}】成功!", info.FNumber, string.Join(",", info.lstCustCtaInfo.Select(i => i.FNUMBER1))); result.Success = true; LogUtils.WriteSynchroLog(this.K3CloudContext, this.DataType, result.Message); RemoveRedisData(this.K3CloudContext, addrNos); } else { result = new HttpResponseResult(); result.Message = "无客户地址需要删除"; result.Success = false; LogUtils.WriteSynchroLog(this.K3CloudContext, this.DataType, result.Message); } } catch (Exception ex) { result = new HttpResponseResult(); result.Success = false; result.Message = string.Format("客户编码【{0}】删除客户地址【{1}】失败:", info.FNumber, string.Join(",", info.lstCustCtaInfo.Select(i => i.FNUMBER1))) + System.Environment.NewLine + ex.Message; LogUtils.WriteSynchroLog(this.K3CloudContext, this.DataType, "删除客户地址失败:" + System.Environment.NewLine + ex.Message + System.Environment.NewLine + ex.StackTrace); } } } } return(result); }
/// <summary> /// 执行同步客户操作 /// </summary> /// <param name="sourceDatas"></param> /// <param name="logs"></param> /// <param name="operationType"></param> /// <returns></returns> public override HttpResponseResult ExecuteSynchro(IEnumerable <AbsSynchroDataInfo> sourceDatas, List <SynchroLog> logs, SynOperationType operationType) { HttpResponseResult result = null; KDTransactionScope trans = null; List <K3CustomerInfo> custs = ConvertAbsSynchroObject(sourceDatas); JObject bizData = BuildSynchroDataJsons(sourceDatas, operationType); List <string> numbers = null; List <int> pkIds = null; try { if (operationType == SynOperationType.SAVE) { #region try { #region using (trans = new KDTransactionScope(System.Transactions.TransactionScopeOption.Required)) { //单据保存 result = ExecuteOperate(SynOperationType.SAVE, null, null, bizData.ToString()); if (result != null && result.Success == true) { //保存操作成功后返回单据的编码集合 if (result.GetNeedReturnValues("FNumber").ConvertAll(obj => string.Format("{0}", obj)) != null) { numbers = result.GetNeedReturnValues("FNumber").ConvertAll(obj => string.Format("{0}", obj)); } //保存操作成功后返回的单据内码集合 if (result.GetNeedReturnValues("FCUSTID").Select(obj => Convert.ToInt32(obj)).ToList() != null) { pkIds = result.GetNeedReturnValues("FCUSTID").Select(obj => Convert.ToInt32(obj)).ToList(); } } ////单据提交 //result = InvokeWebApi.InvokeBatchSubmit(this.K3CloudContext, this.DataType, FormKey, numbers); ////单据审核 //result = InvokeWebApi.InvokeBatchAudit(this.K3CloudContext, this.DataType, FormKey, numbers); ////单据分配 //result = InvokeWebApi.InvokeBatchAllot(this.K3CloudContext, this.DataType, FormKey, pkIds); ////分配后更新提交审核 //result = AfterAllot(this.K3CloudContext, custs); ////提交事务 trans.Complete(); } } #endregion #region ////单据保存 //result = InvokeWebApi.InvokeBatchSave(this.K3CloudContext, this.DataType, FormKey, bizData.ToString()); //if (result != null && result.Success == true) //{ // //保存操作成功后返回单据的编码集合 // if (result.ReturnValues("FNumber").ConvertAll(obj => string.Format("{0}", obj)) != null) // { // numbers = result.ReturnValues("FNumber").ConvertAll(obj => string.Format("{0}", obj)); // } // //保存操作成功后返回的单据内码集合 // if (result.ReturnValues("FCUSTID").Select(obj => Convert.ToInt32(obj)).ToList() != null) // { // pkIds = result.ReturnValues("FCUSTID").Select(obj => Convert.ToInt32(obj)).ToList(); // } //} ////单据提交 //result = InvokeWebApi.InvokeBatchSumbit(this.K3CloudContext, this.DataType, FormKey, numbers); ////单据审核 //result = InvokeWebApi.InvokeBatchAudit(this.K3CloudContext, this.DataType, FormKey, numbers); ////单据分配 ////result = InvokeWebApi.InvokeBatchAllot(this.K3CloudContext, this.DataType, FormKey, pkIds); ////分配后更新提交审核 ////result = AfterAllot(this.K3CloudContext, custs); //trans.Complete(); #endregion catch (Exception ex) { LogUtils.WriteSynchroLog(this.K3CloudContext, this.DataType, "提交事务出现异常,异常信息:" + ex.Message + System.Environment.NewLine + ex.StackTrace); } finally { if (trans != null) { trans.Dispose(); } } #endregion } else if (operationType == SynOperationType.ALLOT) { //单据分配 try { if (custs != null && custs.Count > 0) { AfterAllot(this.K3CloudContext, custs); } } catch (Exception ex) { LogUtils.WriteSynchroLog(this.K3CloudContext, this.DataType, "分配操作出现异常,异常信息:" + ex.Message + System.Environment.NewLine + ex.StackTrace); } } else if (operationType == SynOperationType.UPDATE) { //单据更新 //result = InvokeWebApi.InvokeBatchSave(this.K3CloudContext, this.DataType, FormKey, bizData.ToString()); } return(result); } catch (Exception ex) { if (logs != null && logs.Count > 0) { foreach (var log in logs) { log.IsSuccess = 0; log.ErrInfor = ex.Message + System.Environment.NewLine + ex.StackTrace; } } } if (result == null) { return(null); } if (result.Success == false && result.FailedResult == null && result.Result == null) { //同步出现错误之类:如令牌错误,url错误之类的 if (logs != null && logs.Count > 0) { foreach (var log in logs) { log.IsSuccess = 0; log.ErrInfor = "数据同步失败:" + result.Message == null ? "" : result.Message; } } return(result); } return(result); }
/// <summary> /// 客户分配完后所做的操作,更新--提交--审核 /// </summary> /// <param name="ctx"></param> /// <param name="sourceDatas"></param> /// <param name="operationType"></param> /// <returns></returns> public JObject BuildSyschroDataJsonForAfterAllot(Context ctx, List <AbsSynchroDataInfo> sourceDatas, SynOperationType operationType) { JObject root = null; if (operationType == SynOperationType.SAVE) { root = new JObject(); root.Add("NeedUpDateFields", new JArray("")); root.Add("NeedReturnFields", new JArray("FNumber")); root.Add("IsDeleteEntry", "false"); root.Add("SubSystemId", ""); root.Add("IsVerifyBaseDataField", "true"); root.Add("Model", ConvertSynObjToJObj(sourceDatas, operationType)); return(root); } //数据更新时的Json格式 else if (operationType == SynOperationType.UPDATE) { //更新单据时,表体信息必须填写明细表体的主键 root = new JObject(); root.Add("NeedUpDateFields", new JArray("")); root.Add("NeedReturnFields", new JArray("FNumber")); root.Add("IsDeleteEntry", "false"); root.Add("SubSystemId", ""); root.Add("IsVerifyBaseDataField", "true"); if (sourceDatas != null) { if (sourceDatas.Count > 0) { JArray model = new JArray(); for (int i = 0; i < sourceDatas.Count; i++) { K3CustomerInfo custData = sourceDatas[i] as K3CustomerInfo; string sFCustId = string.Format(@"/*dialect*/ select FCUSTID,FUseOrgId from T_BD_CUSTOMER where FNumber = '{0}' and FUseOrgId = {1}", custData.FNumber, ORGID); DynamicObjectCollection coll = SQLUtils.GetObjects(this.K3CloudContext, sFCustId); if (coll.Count > 0) { foreach (var c in coll) { if (c["FCUSTID"] != null) { JObject baseData = ConvertSynObjToJObj(sourceDatas[i], operationType); baseData.Add("FCUSTID", Convert.ToInt32(JsonUtils.ConvertObjectToString(c["FCUSTID"]))); JObject FSELLER = new JObject(); FSELLER.Add("FNumber", string.IsNullOrEmpty(custData.FSELLER) ? "NA" : custData.FSELLER); baseData.Add("FSELLER", FSELLER); JObject FSALDEPTID = new JObject(); FSALDEPTID.Add("FNumber", string.IsNullOrEmpty(custData.FSALDEPTID) ? "BM000001" : custData.FSALDEPTID); baseData.Add("FSALDEPTID", FSALDEPTID); model.Add(baseData); } } } } root.Add("Model", model); return(root); } } } return(null); }
/// <summary> /// 将同步的数据转换为JSON格式 /// </summary> /// <param name="sourceDatas"></param> /// <param name="operationType"></param> /// <returns></returns> public override JObject BuildSynchroDataJsons(IEnumerable <AbsSynchroDataInfo> sourceDatas, SynOperationType operationType) { JObject root = default(JObject); JArray model = default(JArray); JObject baseData = null; List <DeliveryNotice> notices = ConvertAbsSynchroObject(sourceDatas); int batchCount = BatchCount(sourceDatas); root.Add("NeedUpDateFields", new JArray("")); root.Add("NeedReturnFields", new JArray("FBillNo")); root.Add("IsDeleteEntry", "false"); root.Add("SubSystemId", ""); root.Add("IsVerifyBaseDataField", "true"); root.Add("BatchCount", batchCount); if (notices != null && notices.Count > 0) { root = new JObject(); model = new JArray(); foreach (var item in notices) { if (item != null) { baseData = ConvertSynDataToJObj(item, SynOperationType.SAVE); model.Add(baseData); } } root.Add("Model", model); } return(root); }
/// <summary> /// 将需要同步的会员(用户)数据进行打包(单个客户) /// </summary> /// <param name="sourceData"></param> /// <param name="log"></param> /// <param name="operationType"></param> /// <returns></returns> public override JObject BuildSynchroDataJson(AbsSynchroDataInfo sourceData, SynchroLog log, SynOperationType operationType) { JObject root = new JObject(); root.Add("NeedUpDateFields", new JArray("")); root.Add("IsDeleteEntry", "false"); root.Add("SubSystemId", ""); root.Add("IsVerifyBaseDataField", "true"); if (operationType == SynOperationType.SAVE) { root.Add("Model", ConvertSynObjToJObj(sourceData, operationType)); return(root); } //数据更新时的Json格式 else { //更新单据时,表体信息必须填写明细表体的主键 K3CustomerInfo custData = sourceData as K3CustomerInfo; string sFCustId = string.Format(@"/*dialect*/ select FCUSTID from T_BD_CUSTOMER where FNumber = '{0}'", custData.FNumber); string sMainFCustId = string.Format(@"/*dialect*/ select FCUSTID from T_BD_CUSTOMER where FNumber = '{0}' and FUseOrgId != 1", custData.FNumber); int subFCustId = Convert.ToInt32(JsonUtils.ConvertObjectToString(SQLUtils.GetObject(this.K3CloudContext, sMainFCustId, "FCUSTID"))); DynamicObjectCollection coll = SQLUtils.GetObjects(this.K3CloudContext, sFCustId); JArray model = new JArray(); if (coll.Count > 0) { foreach (var item in coll) { if (item["FCUSTID"] != null) { JObject baseData = ConvertSynObjToJObj(sourceData, operationType); baseData.Add("FCUSTID", Convert.ToInt32(JsonUtils.ConvertObjectToString(item["FCUSTID"]))); if (subFCustId != Convert.ToInt32(JsonUtils.ConvertObjectToString(item["FCUSTID"]))) { K3CustomerInfo soData = sourceData as K3CustomerInfo; baseData = ConvertSynObjToJObj(soData, operationType); baseData.Add("FCUSTID", Convert.ToInt32(JsonUtils.ConvertObjectToString(item["FCUSTID"]))); } model.Add(baseData); } } } root.Add("Model", model); return(root); } }
/// <summary> /// 同步数据 /// </summary> /// <param name="sourceDatas"></param> /// <param name="logs"></param> /// <param name="operationType"></param> /// <returns></returns> public override HttpResponseResult ExecuteSynchro(IEnumerable <AbsSynchroDataInfo> sourceDatas, List <SynchroLog> logs, SynOperationType operationType) { HttpResponseResult result = null; JObject bizData = BuildSynchroDataJsons(sourceDatas, operationType); List <DeliveryNotice> notices = ConvertAbsSynchroObject(sourceDatas); KDTransactionScope trans = null; try { if (operationType == SynOperationType.SAVE) { using (trans = new KDTransactionScope(System.Transactions.TransactionScopeOption.Required)) { //单据保存 //result = InvokeWebApi.InvokeBatchSave(this.K3CloudContext, this.DataType, this.FormKey, bizData.ToString()); //提交事务 trans.Complete(); } return(result); } else if (operationType == SynOperationType.UPDATE) { result = new HttpResponseResult(); result.Message = "订单已经存在!"; } } catch (Exception ex) { LogUtils.WriteSynchroLog(this.K3CloudContext, SynchroDataType.DeliveryNoticeBill, "数据批量更新过程中出现异常,异常信息:" + ex.Message + System.Environment.NewLine + ex.StackTrace); result = new HttpResponseResult(); result.Success = false; result.Message = ex.Message; if (logs != null && logs.Count > 0) { foreach (var log in logs) { log.IsSuccess = 0; log.ErrInfor = ex.Message + System.Environment.NewLine + ex.StackTrace; } } } finally { if (trans != null) { trans.Dispose(); } } if (result == null) { return(null); } if (result.Success == false && result.FailedResult == null && result.Result == null) { return(result); } return(result); }
/// <summary> /// 将需要同步的客户转换为JSON格式对象(单个客户) /// </summary> /// <param name="sourceData"></param> /// <param name="opreationType"></param> /// <returns></returns> private JObject ConvertSynObjToJObj(AbsSynchroDataInfo sourceData, SynOperationType opreationType) { K3CustomerInfo cust = sourceData as K3CustomerInfo; JObject baseData = default(JObject); if (cust != null) { baseData = new JObject(); //创建组织为必填项 JObject FCreateOrgId = new JObject(); FCreateOrgId.Add("FNumber", cust.FCreateOrgId); baseData.Add("FCreateOrgId", FCreateOrgId); if (opreationType == SynOperationType.SAVE) { baseData.Add("FNumber", cust.FNumber); //组织内编码不允许变更 JObject FUseOrgId = new JObject(); FUseOrgId.Add("FNumber", cust.FUseOrgId); baseData.Add("FUseOrgId", FUseOrgId); } if (opreationType == SynOperationType.UPDATE) { baseData.Add("FT_BD_CUSTCONTACT", BuildK3CustContactJsons(cust)); //客户地址信息 } baseData.Add("FName", cust.FName); //客户名称 baseData.Add("FShortName", cust.FShortName); JObject FCOUNTRY = new JObject();//国家 FCOUNTRY.Add("FNumber", cust.FFCOUNTRY); baseData.Add("FCOUNTRY", FCOUNTRY); baseData.Add("FADDRESS", cust.FAddress);//通讯地址 baseData.Add("FZIP", cust.FZIP); baseData.Add("FTEL", cust.FTEL); //JObject FGroup = new JObject();//客户分组 //FGroup.Add("FNumber", cust.FGroup); //baseData.Add("FGroup", FGroup); JObject FCustTypeId = new JObject();//客户类别 FCustTypeId.Add("FNumber", cust.FCustTypeId); baseData.Add("FCustTypeId", FCustTypeId); JObject FTRADINGCURRID = new JObject();//结算币别 FTRADINGCURRID.Add("FNumber", cust.FTRADINGCURRID); baseData.Add("FTRADINGCURRID", FTRADINGCURRID); baseData.Add("FInvoiceType", cust.FInvoiceType); //发票类型 JObject FTaxType = new JObject(); //税率类别 FTaxType.Add("FNumber", cust.FTaxType); baseData.Add("FTaxType", FTaxType); JObject FTaxRate = new JObject();//默认税率 FTaxRate.Add("FNumber", cust.FTaxRate); baseData.Add("FTaxRate", FTaxRate); baseData.Add("FPriority", cust.FPriority); //客户优先级 baseData.Add("FIsTrade", cust.FIsTrade); //是否交易客户 baseData.Add("F_HS_CustomerRegisteredMail", cust.F_HS_CustomerRegisteredMail); //客户电子邮箱 } return(baseData); }
/// <summary> /// 执行同步客户操作 /// </summary> /// <param name="sourceDatas"></param> /// <param name="logs"></param> /// <param name="operationType"></param> /// <returns></returns> public override HttpResponseResult ExecuteSynchro(IEnumerable <AbsSynchroDataInfo> sourceDatas, List <SynchroLog> logs, SynOperationType operationType) { HttpResponseResult result = null; List <K3CustomerInfo> custs = null; JObject bizData = null; string msgs = string.Empty; if (sourceDatas != null && sourceDatas.Count() > 0) { custs = sourceDatas.Select(c => (K3CustomerInfo)c).ToList(); bizData = BuildSynchroDataJsons(sourceDatas, operationType); } try { if (operationType == SynOperationType.SAVE) { if (bizData == null) { return(null); } else { if (bizData["Model"] == null) { return(null); } } //客户地址新增 result = ExecuteOperate(SynOperationType.SAVE, null, null, bizData.ToString()); //客户地址新增成功后返回的单据编码集合 if (result != null && result.Success) { RemoveRedisData(this.K3CloudContext, result.SuccessEntityNos); } } else if (operationType == SynOperationType.UPDATE) { List <SqlObject> sqlObjects = null; List <SqlParam> sqlParams = null; List <string> custNos = new List <string>(); int count = 0; try { if (custs != null && custs.Count > 0) { custNos = new List <string>(); foreach (var cust in custs) { if (cust != null && cust.lstCustCtaInfo != null && cust.lstCustCtaInfo.Count > 0) { foreach (var contact in cust.lstCustCtaInfo) { if (contact != null) { string sql = string.Format(@"/*dialect*/ update a set FNAME = @FNAME,FADDRESS = @FADDRESS,FMOBILE = @FMOBILE,F_HS_POSTCODE = @F_HS_POSTCODE, F_HS_DELIVERYCITY = @F_HS_DELIVERYCITY,F_HS_DELIVERYPROVINCES = @F_HS_DELIVERYPROVINCES ,F_HS_RECIPIENTCOUNTRY = @F_HS_RECIPIENTCOUNTRY,F_HS_DELIVERYNAME = @F_HS_DELIVERYNAME from T_BD_CUSTLOCATION a inner join T_BD_CUSTOMER b on a.FCUSTID = b.FCUSTID where b.FNUMBER = @BFNUMBER and a.FNUMBER = @AFNUMBER and FUSEORGID = 1"); sqlObjects = new List <SqlObject>(); sqlParams = new List <SqlParam>(); sqlParams.Add(new SqlParam("@FNAME", KDDbType.String, SQLUtils.DealQuotes(contact.FNAME1))); sqlParams.Add(new SqlParam("@FADDRESS", KDDbType.String, SQLUtils.DealQuotes(contact.FADDRESS1))); sqlParams.Add(new SqlParam("@FMOBILE", KDDbType.String, SQLUtils.DealQuotes(contact.FMOBILE))); sqlParams.Add(new SqlParam("@F_HS_POSTCODE", KDDbType.String, SQLUtils.DealQuotes(contact.F_HS_PostCode))); sqlParams.Add(new SqlParam("@F_HS_DELIVERYCITY", KDDbType.String, SQLUtils.DealQuotes(contact.F_HS_DeliveryCity))); sqlParams.Add(new SqlParam("@F_HS_DELIVERYPROVINCES", KDDbType.String, SQLUtils.DealQuotes(contact.F_HS_DeliveryProvinces))); sqlParams.Add(new SqlParam("@F_HS_RECIPIENTCOUNTRY", KDDbType.String, SQLUtils.DealQuotes(SQLUtils.GetCountryId(this.K3CloudContext, contact.F_HS_RecipientCountry)))); sqlParams.Add(new SqlParam("@F_HS_DELIVERYNAME", KDDbType.String, SQLUtils.DealQuotes(contact.F_HS_DeliveryName))); sqlParams.Add(new SqlParam("@BFNUMBER", KDDbType.String, contact.FCustNo)); sqlParams.Add(new SqlParam("@AFNUMBER", KDDbType.String, contact.FNUMBER1)); sqlObjects.Add(new SqlObject(sql, sqlParams)); count = DBUtils.ExecuteBatch(this.K3CloudContext, sqlObjects); if (count > 0) { custNos.Add(contact.FCustNo); msgs += string.Format("客户[{0}]地址[{1}]更新成功!", contact.FCustNo, contact.FNUMBER1) + Environment.NewLine; LogUtils.WriteSynchroLog(this.K3CloudContext, SynchroDataType.CustomerAddress, string.Format("客户[{0}]地址[{1}]更新成功!", contact.FCustNo, contact.FNUMBER1)); } } } } } if (!string.IsNullOrWhiteSpace(msgs)) { result = new HttpResponseResult(); result.Success = true; result.SuccessEntityNos = custNos; result.Message = msgs; RemoveRedisData(this.K3CloudContext, custNos); } } } catch (Exception ex) { result = new HttpResponseResult(); result.Success = false; result.Message = "客户地址更新出现异常:" + ex.Message + Environment.NewLine + ex.StackTrace; LogUtils.WriteSynchroLog(this.K3CloudContext, SynchroDataType.CustomerAddress, "客户地址更新出现异常:" + result.Message); } } return(result); } catch (Exception ex) { if (logs != null && logs.Count > 0) { foreach (var log in logs) { log.IsSuccess = 0; log.ErrInfor = ex.Message + System.Environment.NewLine + ex.StackTrace; } } LogUtils.WriteSynchroLog(this.K3CloudContext, this.DataType, ex.Message + System.Environment.NewLine + ex.StackTrace); } if (result == null) { return(null); } if (result.Success == false && result.FailedResult == null && result.Result == null) { //同步出现错误之类:如令牌错误,url错误之类的 if (logs != null && logs.Count > 0) { foreach (var log in logs) { log.IsSuccess = 0; log.ErrInfor = "数据同步失败:" + result.Message == null ? "" : result.Message; } } return(result); } return(result); }
/// <summary> /// 执行同步操作 /// </summary> /// <param name="sourceDatas"></param> /// <param name="logs"></param> /// <param name="operationType"></param> /// <returns></returns> public abstract HttpResponseResult ExecuteSynchro(IEnumerable <AbsSynchroDataInfo> sourceDatas, List <SynchroLog> logs, SynOperationType operationType);
/// <summary> /// 将需要同步的客户转化为JSON格式(客户集合) /// </summary> /// <param name="sourceDatas"></param> /// <param name="operationType"></param> /// <returns></returns> public override JObject BuildSynchroDataJsons(IEnumerable <AbsSynchroDataInfo> sourceDatas, SynOperationType operationType) { JObject root = null; int batchCount = BatchCount(sourceDatas); if (operationType == SynOperationType.SAVE) { root = new JObject(); root.Add("NeedUpDateFields", new JArray("")); root.Add("NeedReturnFields", new JArray("FNumber")); root.Add("IsDeleteEntry", "false"); root.Add("SubSystemId", ""); root.Add("IsVerifyBaseDataField", "true"); //root.Add("BatchCount", batchCount); root.Add("Model", ConvertSynObjToJObj(sourceDatas, operationType)); return(root); } //数据更新时的Json格式 else if (operationType == SynOperationType.UPDATE) { //更新单据时,表体信息必须填写明细表体的主键 root = new JObject(); root.Add("NeedUpDateFields", new JArray("")); root.Add("NeedReturnFields", new JArray("FNumber")); root.Add("IsDeleteEntry", "false"); root.Add("SubSystemId", ""); root.Add("IsVerifyBaseDataField", "true"); root.Add("BatchCount", batchCount); if (sourceDatas != null) { if (sourceDatas.Count() > 0) { JArray model = new JArray(); for (int i = 0; i < sourceDatas.Count(); i++) { K3CustomerInfo custData = sourceDatas.ElementAt(i) as K3CustomerInfo; string sFCustId = string.Format(@"/*dialect*/ select FCUSTID,FUseOrgId from T_BD_CUSTOMER where FNumber = '{0}'", custData.FNumber); DynamicObjectCollection coll = SQLUtils.GetObjects(this.K3CloudContext, sFCustId); if (coll.Count > 0) { foreach (var c in coll) { if (c["FCUSTID"] != null) { JObject baseData = ConvertSynObjToJObj(sourceDatas.ElementAt(i), operationType); //主组织记录 if (Convert.ToInt32(JsonUtils.ConvertObjectToString(c["FUseOrgId"])) == 1) { //主组织记录中的销售员和销售部门不能被更新 baseData.Add("FCUSTID", Convert.ToInt32(JsonUtils.ConvertObjectToString(c["FCUSTID"]))); //baseData.Add("FT_BD_CUSTCONTACT", BuildK3CustContactJsons(custData));//客户地址信息 } //else //{ // baseData.Add("FCUSTID", Convert.ToInt32(JsonUtils.ConvertJObjectToString(c["FCUSTID"]))); // JObject FSELLER = new JObject(); // FSELLER.Add("FNumber", custData.FSELLER); // baseData.Add("FSELLER", FSELLER); // JObject FSALDEPTID = new JObject(); // FSALDEPTID.Add("FNumber", custData.FSALDEPTID); // baseData.Add("FSALDEPTID", FSALDEPTID); //} model.Add(baseData); } } } } root.Add("Model", model); return(root); } } } return(null); }
/// <summary> /// K3WebApi接口 /// </summary> /// <param name="ctx"></param> /// <param name="dataType"></param> /// <param name="operateType"></param> /// <param name="formId"></param> /// <param name="numbers"></param> /// <param name="pkIds"></param> /// <param name="json"></param> /// <returns></returns> public static HttpResponseResult InvokeBatchOperate(Context ctx, SynchroDataType dataType, SynOperationType operateType, string formId, IEnumerable <string> numbers = null, IEnumerable <int> pkIds = null, string json = null) { HttpResponseResult response = default(HttpResponseResult); try { type = DynamicInvoke.GetType(DynamicInvoke.GetAssembly(Assembly.GetExecutingAssembly().Location), "Hands.K3.SCM.App.Synchro.Utils.K3WebApi.InvokeWebApi"); if (type != null) { response = DynamicInvoke.InvokeMethod <HttpResponseResult>(ctx, type, GetMethodName(type, operateType), GetAgrs(ctx, operateType, dataType, formId, json, numbers, pkIds)); if (response != null) { if (!string.IsNullOrEmpty(response.Message) && response.Message.Contains("Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。")) { LogUtils.WriteSynchroLog(ctx, dataType, "数据批量" + operateType + "过程中出现异常,异常信息:服务器没有响应!!!"); } } } else { response = new HttpResponseResult(); response.Success = false; response.Message = "反射获取程序集失败!"; LogUtils.WriteSynchroLog(ctx, dataType, "数据批量" + operateType + "过程中出现异常,异常信息:" + response.Message); return(response); } } catch (Exception ex) { LogUtils.WriteSynchroLog(ctx, dataType, "数据批量" + operateType + "过程中出现异常,异常信息:" + ex.Message + System.Environment.NewLine + ex.StackTrace); } return(response); }
/// <summary> /// 将需要同步的客户转换为JSON格式对象(客户集合) /// </summary> /// <param name="sourceDatas"></param> /// <param name="opreationType"></param> /// <returns></returns> private JArray ConvertSynObjToJObj(IEnumerable <AbsSynchroDataInfo> sourceDatas, SynOperationType opreationType) { JArray model = new JArray(); JObject baseData = default(JObject); if (sourceDatas != null) { foreach (var custData in sourceDatas) { baseData = ConvertSynObjToJObj(custData, opreationType); model.Add(baseData); } } return(model); }
public override HttpResponseResult ExecuteSynchro(IEnumerable <AbsSynchroDataInfo> sourceDatas, List <SynchroLog> logs, SynOperationType operationType) { HttpResponseResult result = null; HttpResponseResult saveR = null; HttpResponseResult submitR = null; HttpResponseResult auditR = null; KDTransactionScope trans = null; JObject bizData = null; if (sourceDatas != null && sourceDatas.Count() > 0) { bizData = BuildSynchroDataJsons(sourceDatas, operationType); } else { result = new HttpResponseResult(); result.Success = false; result.Message = "没有需要保存的数据!"; return(result); } try { if (operationType == SynOperationType.SAVE) { #region using (trans = new KDTransactionScope(System.Transactions.TransactionScopeOption.Required)) { #region //单据保存 result = ExecuteOperate(SynOperationType.SAVE, null, null, bizData.ToString()); saveR = result; if (result != null && result.SuccessEntityNos != null && result.SuccessEntityNos.Count > 0) { result.Message = this.DataType + "【" + string.Join(",", result.SuccessEntityNos.Select(o => o.ToString())) + "】" + SynOperationType.SAVE + " 成功!"; //单据提交 result = ExecuteOperate(SynOperationType.SUBMIT, result.SuccessEntityNos, null, null); submitR = result; if (result != null && result.SuccessEntityNos != null && result.SuccessEntityNos.Count > 0) { result.Message = this.DataType + "【" + string.Join(",", result.SuccessEntityNos.Select(o => o.ToString())) + "】" + SynOperationType.SUBMIT + " 成功!"; //单据审核 result = ExecuteOperate(SynOperationType.AUDIT, result.SuccessEntityNos, null, null); result.Message = this.DataType + "【" + string.Join(",", result.SuccessEntityNos.Select(o => o.ToString())) + "】" + SynOperationType.AUDIT + " 成功!"; auditR = result; } } //提交事务 trans.Complete(); #endregion } UpdateAfterOperate(this.K3CloudContext, saveR, SynOperationType.SAVE); UpdateAfterOperate(this.K3CloudContext, submitR, SynOperationType.SUBMIT); UpdateAfterOperate(this.K3CloudContext, auditR, SynOperationType.AUDIT); #endregion } return(result); } catch (Exception ex) { if (logs != null && logs.Count > 0) { foreach (var log in logs) { log.IsSuccess = 0; log.ErrInfor = ex.Message + System.Environment.NewLine + ex.StackTrace; } } LogUtils.WriteSynchroLog(this.K3CloudContext, this.DataType, ex.Message + System.Environment.NewLine + ex.StackTrace); } finally { if (trans != null) { trans.Dispose(); } } if (result == null) { return(null); } if (result.Success == false && result.FailedResult == null && result.Result == null) { //同步出现错误之类:如令牌错误,url错误之类的 if (logs != null && logs.Count > 0) { foreach (var log in logs) { log.IsSuccess = 0; log.ErrInfor = "数据同步失败:" + result.Message == null ? "" : result.Message; } } return(result); } return(result); }
public override JObject BuildSynchroDataJson(AbsSynchroDataInfo sourceData, SynchroLog log, SynOperationType operationType) { return(null); }
public override JObject BuildSynchroDataJson(AbsSynchroDataInfo sourceData, SynchroLog log, SynOperationType operationType) { JObject baseData = null; if (sourceData != null) { K3BatchAdjust just = sourceData as K3BatchAdjust; if (just != null) { baseData = new JObject(); baseData.Add("FName", just.FName); baseData.Add("FDate", DateTime.Now); JObject FSaleOrgId = new JObject(); FSaleOrgId.Add("FNumber", "100.01"); baseData.Add("FSaleOrgId", FSaleOrgId); baseData.Add("FBATCHADJUSTENTRY", BuildBatchAdjustEntry(sourceData)); } } return(baseData); }
public override HttpResponseResult ExecuteSynchro(IEnumerable <AbsSynchroDataInfo> sourceDatas, List <SynchroLog> logs, SynOperationType operationType) { HttpResponseResult result = null; List <Material> materials = null /*sourceDatas.Select(m => (Material)m).ToList()*/; KDTransactionScope trans = null; List <string> numbers = null; try { if (operationType == SynOperationType.SAVE) { } else if (operationType == SynOperationType.UPDATE) { using (trans = new KDTransactionScope(System.Transactions.TransactionScopeOption.Required)) { int count = 0; string messages = ""; if (materials != null && materials.Count > 0) { numbers = new List <string>(); foreach (var data in materials) { //if (data != null) //{ // string sql = string.Format(@"/*dialect*/ update T_BD_MATERIAL // set F_HS_LISTID = '{0}' ,F_HS_LISTNAME= '{1}' // where FNUMBER = '{2}' // and len(F_HS_LISTID) = 0", info.F_HS_ListID, info.F_HS_ListName, info.FNumber); // try // { // count += DBUtils.Execute(this.K3CloudContext, sql); // if (count > 0) // { // numbers.Add(info.FNumber); // } // else // { // string message = "物料【" + info.FNumber + "】LISTID【" + info.F_HS_ListID + "】已更新,不再更新!"; // messages += message; // (this.K3CloudContext, SynchroDataType.DownLoadListInfo, message); // } // } // catch (Exception ex) // { // (this.K3CloudContext, SynchroDataType.DownLoadListInfo, "数据批量更新过程中出现异常,异常信息:" + ex.Message + System.Environment.NewLine + ex.StackTrace); // messages += ex.Message + System.Environment.NewLine + ex.StackTrace; // } //} } if (numbers != null && numbers.Count > 0) { RemoveRedisData(this.K3CloudContext, numbers); } if (!string.IsNullOrWhiteSpace(messages)) { result.Success = false; result.Message = messages; } else { if (count == numbers.Count && count > 0) { result.Success = true; result.Message = "物料ListId下载成功!"; } } } } return(result); } } catch (Exception ex) { if (logs != null && logs.Count > 0) { foreach (var log in logs) { log.IsSuccess = 0; log.ErrInfor = ex.Message + System.Environment.NewLine + ex.StackTrace; } } } if (result == null) { return(null); } if (result.Success == false && result.FailedResult == null && result.Result == null) { //同步出现错误之类:如令牌错误,url错误之类的 if (logs != null && logs.Count > 0) { foreach (var log in logs) { log.IsSuccess = 0; log.ErrInfor = "数据同步失败:" + result.Message == null ? "" : result.Message; } } return(result); } return(result); }
/// <summary> /// 动态创建同步的实现类 /// </summary> private static List <T> GetSynchroClsInstance <T>(Assembly assembly, Type type, SynOperationType operType) { List <T> types = null; if (assembly != null) { CreateSynchroClsInstance <T>(assembly, type); types = new List <T>(); if (clsSynchroType != null && clsSynchroType.Count > 0) { foreach (var item in clsSynchroType) { if (item != null) { if (item.BaseType != null) { if (item.BaseType == type || item.BaseType.BaseType == type) { T x = (T)Activator.CreateInstance(item); if (x != null) { if (x.GetType() != null) { if (x.GetType().GetProperty("OperType") != null) { if (x.GetType().GetProperty("OperType").GetValue(x, null) != null) { if (operType.ToString() == x.GetType().GetProperty("OperType").GetValue(x, null).ToString()) { types.Add(x); } } } } } } } } } } } return(types); }