/// <summary> /// 批量下推 /// </summary> /// <param name="ctx"></param> /// <param name="dataType"></param> /// <param name="formId"></param> /// <param name="numbers"></param> /// <param name="pkIds"></param> /// <returns></returns> public static HttpResponseResult InvokeBatchPush(Context ctx, SynchroDataType dataType, string formId, IEnumerable <string> numbers = null, IEnumerable <int> pkIds = null) { HttpResponseResult response = default(HttpResponseResult); string ret = default(string); K3CloudApiClient client = null; DataBaseConst.K3CloudContext = ctx; client = new K3CloudApiClient(DataBaseConst.CurrentK3CloudURL); // 登陆成功 if (Login(ctx, client)) { if (numbers != null && numbers.Count() > 0) { ret = client.Push("SAL_BATCHADJUSTPRICE", "{\"Ids\":\"\",\"Numbers\":[],\"EntryIds\":\"\",\"RuleId\":\"\",\"TargetBillTypeId\":\"\",\"TargetOrgId\":0,\"TargetFormId\":\"\",\"IsEnableDefaultRule\":\"false\",\"IsDraftWhenSaveFail\":\"false\",\"CustomParams\":{}}"); } if (pkIds != null && pkIds.Count() > 0) { ret = client.ExcuteOperation(formId, "Cancel", "{\"CreateOrgId\":\"0\",\"Numbers\":[],\"Ids\":\"" + FormatFNumber(pkIds) + "\"}"); } if (!string.IsNullOrEmpty(ret)) { response = Response(ctx, dataType, SynOperationType.DELETE, ret); } } return(response); }
/// <summary> /// 记录同步至HC网站redis数据 /// </summary> /// <param name="ctx"></param> /// <param name="dataType"></param> /// <param name="redis"></param> /// <param name="dict"></param> /// <param name="isSuccess"></param> public static void WriteSynchroDataLog(Context ctx, SynchroDataType dataType, IRedisClient redis, Dictionary <string, string> dict, bool isSuccess) { string sql = string.Empty; lock (objLock) { string insertSql = @"/*dialect*/insert into HS_T_synchroDataLog(SynchroDataType,redisKey,json,redisServerIP,redisDBID,K3CloudDbId ,createTime,success) values "; if (dict != null && dict.Count > 0) { for (int i = 0; i < dict.Count; i++) { if (i < dict.Count - 1) { sql += insertSql + string.Format(@"('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}')", dataType, dict.ElementAt(i).Key, SQLUtils.DealQuotes(dict.ElementAt(i).Value), redis.Host, redis.Db, ctx.DBId, DateTime.Now, isSuccess ? 1 : 0) + Environment.NewLine; } else { sql += insertSql + string.Format(@"('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}')", dataType, dict.ElementAt(i).Key, SQLUtils.DealQuotes(dict.ElementAt(i).Value), redis.Host, redis.Db, ctx.DBId, DateTime.Now, isSuccess ? 1 : 0); } } Kingdee.BOS.App.ServiceHelper.GetService <IDBService>().Execute(ctx, sql); } } }
/// <summary> /// 单据批量作废 /// </summary> /// <param name="ctx"></param> /// <param name="dataType"></param> /// <param name="formId"></param> /// <param name="numbers"></param> /// <param name="pkIds"></param> /// <returns></returns> public static HttpResponseResult InvokeBatchCancel(Context ctx, SynchroDataType dataType, string formId, IEnumerable <string> numbers = null, IEnumerable <int> pkIds = null) { HttpResponseResult response = default(HttpResponseResult); string ret = default(string); K3CloudApiClient client = null; DataBaseConst.K3CloudContext = ctx; client = new K3CloudApiClient(DataBaseConst.CurrentK3CloudURL); // 登陆成功 if (Login(ctx, client)) { if (numbers != null && numbers.Count() > 0) { ret = client.ExcuteOperation(formId, "Cancel", "{\"CreateOrgId\":\"0\",\"Numbers\":[" + FormatFNumber(numbers) + "],\"Ids\":\"\"}"); } if (pkIds != null && pkIds.Count() > 0) { ret = client.ExcuteOperation(formId, "Cancel", "{\"CreateOrgId\":\"0\",\"Numbers\":[],\"Ids\":\"" + FormatFNumber(pkIds) + "\"}"); } if (!string.IsNullOrEmpty(ret)) { response = Response(ctx, dataType, SynOperationType.DELETE, ret); } } return(response); }
/// <summary> /// 单据批量保存 /// </summary> /// <param name="ctx"></param> /// <param name="dataType"></param> /// <param name="formId"></param> /// <param name="json"></param> /// <returns></returns> public static HttpResponseResult InvokeBatchSave(Context ctx, SynchroDataType dataType, string formId, string json) { HttpResponseResult response = default(HttpResponseResult); string ret = default(string); K3CloudApiClient client = null; DataBaseConst.K3CloudContext = ctx; lock (SaveLock) { client = new K3CloudApiClient(DataBaseConst.CurrentK3CloudURL); if (Login(ctx, client)) { ret = client.BatchSave(formId, json); } else { response = new HttpResponseResult(); response.Success = false; response.Message = "登陆账号或密码错误!"; } if (!string.IsNullOrEmpty(ret)) { response = Response(ctx, dataType, SynOperationType.SAVE, ret, json); } } return(response); }
/// <summary> /// 同步成功日志 /// </summary> /// <param name="ctx"></param> /// <param name="dataType"></param> /// <param name="errMessage"></param> /// <param name="isOk"></param> /// <param name="srcPKId"></param> /// <param name="billNo"></param> public static void WriteSynchroLog_Succ(Context ctx, SynchroDataType dataType, string errMessage, bool isOk = true, string srcPKId = "", string billNo = "") { lock (objLock) { if (errMessage.Length > 4000) { errMessage = errMessage.Substring(0, 3999); } string insertSql = @" Insert Into HS_T_SynchroLog_Succ(FDataSourceType,FDataSourceId,FBILLNO, FSynchroTime,FIsSuccess,FErrInfor,FDataSourceTypeDesc,FHSOperateId) Select @FDataSourceType as FDataSourceType,@FDataSourceId as FDataSourceId,@FBILLNO as FBILLNO, @FSynchroTime as FSynchroTime,@FIsSuccess as FIsSuccess,@FErrInfor as FErrInfor, @FDataSourceTypeDesc as FDataSourceTypeDesc,@FHSOperateId as FHSOperateId "; var para = new List <SqlParam>(); para.Add(new SqlParam("@FDataSourceType", KDDbType.String, dataType.ToString())); para.Add(new SqlParam("@FDataSourceId", KDDbType.String, srcPKId)); para.Add(new SqlParam("@FBILLNO", KDDbType.String, billNo)); para.Add(new SqlParam("@FSynchroTime", KDDbType.DateTime, DateTime.Now)); para.Add(new SqlParam("@FIsSuccess", KDDbType.String, isOk == true ? 1 : 0)); para.Add(new SqlParam("@FErrInfor", KDDbType.String, errMessage)); para.Add(new SqlParam("@FDataSourceTypeDesc", KDDbType.String, GetDataSourceTypeDesc(dataType))); para.Add(new SqlParam("@FHSOperateId", KDDbType.Int64, ctx.UserId)); Kingdee.BOS.App.ServiceHelper.GetService <IDBService>().Execute(ctx, insertSql, para); } }
public void SynchroDataTo(Context ctx, SynchroDataType dataType, SynchroDirection direction) { HttpResponseResult result = null; try { if (direction == SynchroDirection.ToK3) { result = SynchroDataHelper.SynchroDataToK3(ctx, dataType); } if (direction == SynchroDirection.ToHC) { result = SynchroDataHelper.SynchroDataToHC(ctx, dataType); } if (result != null) { if (result.Success) { this.View.ShowErrMessage("", string.Format("同步{0}至{1}成功!", LogUtils.GetDataSourceTypeDesc(dataType), direction.ToString()) + result.Message, Kingdee.BOS.Core.DynamicForm.MessageBoxType.Error); } else { this.View.ShowErrMessage("", string.Format("同步{0}至{1}失败!", LogUtils.GetDataSourceTypeDesc(dataType), direction.ToString()) + result.Message, Kingdee.BOS.Core.DynamicForm.MessageBoxType.Error); } } else { this.View.ShowErrMessage("", string.Format("同步{0}至{1}失败!", LogUtils.GetDataSourceTypeDesc(dataType), direction.ToString()), Kingdee.BOS.Core.DynamicForm.MessageBoxType.Error); } } catch (Exception ex) { this.View.ShowErrMessage(ex.ToString(), string.Format("同步{0}至{1}失败!", LogUtils.GetDataSourceTypeDesc(dataType), direction.ToString()), Kingdee.BOS.Core.DynamicForm.MessageBoxType.Error); } }
/// <summary> /// 同步所有待同步数据 /// </summary> /// <param name="ctx"></param> public static void SynchroAllDataToK3(Context ctx) { foreach (string name in Enum.GetNames(typeof(SynchroDataType))) { SynchroDataType dataType = (SynchroDataType)Enum.Parse(typeof(SynchroDataType), name); SynchroDataToK3(ctx, dataType); } }
private const int ORGID = 100035;//使用组织 /// <summary> /// 从Redis获取同步数据 /// </summary> /// <param name="ctx"></param> /// <param name="dataType"></param> /// <param name="dbId"></param> /// <param name="numbers"></param> /// <returns></returns> public static List <AbsSynchroDataInfo> GetSynchroDatas(Context ctx, SynchroDataType dataType, long dbId, IEnumerable <string> numbers = null, SynchroDirection direction = SynchroDirection.ToK3) { List <AbsSynchroDataInfo> datas = null; RedisManager manager = new RedisManager(ctx); IRedisClient redis = manager.GetClientEx(ctx, dbId); IEnumerable <string> keys = null; HashSet <string> infos = null; Dictionary <string, string> dict = null; if (redis != null) { dict = RedisKeyUtils.GetRedisSetKey(dataType, SynchroDirection.ToK3); if (numbers != null && numbers.Count() > 0) { keys = numbers; } else { if (dict != null && dict.Count > 0) { if (!string.IsNullOrEmpty(dict["unreadKey"])) { keys = manager.GetAllItemsFromSet(dict["unreadKey"], ctx, dbId); } } } if (keys != default(HashSet <string>) && keys.Count() > 0) { infos = new HashSet <string>(); if (!string.IsNullOrEmpty(dict["infoKey"])) { foreach (var item in keys) { if (!string.IsNullOrWhiteSpace(item)) { string info = dict["infoKey"] + item; if (!string.IsNullOrEmpty(info)) { infos.Add(info.Trim()); } } } } } datas = GetSynchroObjects(ctx, dataType, redis, infos, direction); redis.Dispose(); redis = null; } return(datas); }
public static void WriteJsonToLocal(Context ctx, SynchroDataType dataType, string json) { Trace.Listeners.Clear(); if (!string.IsNullOrWhiteSpace(GetBillNo(ctx, dataType, json))) { Trace.Listeners.Add(LogerTraceListener.CreateInstance(dataType, GetBillNo(ctx, dataType, json))); } Trace.WriteLine(json); }
/// <summary> /// Constructor /// </summary> private LogerTraceListener(SynchroDataType dataType, string billNo) { string basePath = AppDomain.CurrentDomain.BaseDirectory + "\\SynData\\" + GetBasePath(dataType); if (!Directory.Exists(basePath)) { Directory.CreateDirectory(basePath); } this.m_fileName = basePath + string.Format("{0}.txt", billNo); }
/// <summary> /// 写客户余额支付日志 /// </summary> /// <param name="ctx"></param> /// <param name="dataType"></param> /// <param name="adatas"></param> public static void WriteCustBalanceLog(Context ctx, SynchroDataType dataType, IEnumerable <AbsSynchroDataInfo> adatas) { lock (objLock) { List <SqlParam> para = null; string insertSql = @"Insert Into HS_T_customerBalance(F_HS_B2CCUSTID,changedAmount,changedType,changedCause,balanceAmount,F_HS_RateToUSA ,FSETTLECURRID,changedAmountUSA,balanceAmountUSA,updateTime,updateUser,FBillNo,fentryID,needfreezed,remark) Select @F_HS_B2CCUSTID as F_HS_B2CCUSTID,@changedAmount as changedAmount,@changedType as changedType,@changedCause as changedCause, @balanceAmount as balanceAmount, @F_HS_RateToUSA as F_HS_RateToUSA, @FSETTLECURRID as FSETTLECURRID,@changedAmountUSA as changedAmountUSA, @balanceAmountUSA as balanceAmountUSA,@updateTime as updateTime,@updateUser as updateUser,@FBillNo as FBillNo,@fentryID as fentryID ,@needfreezed as needfreezed,@remark as remark "; if (adatas != null && adatas.Count() > 0) { List <AbsDataInfo> datas = adatas.Select(d => (AbsDataInfo)d).ToList(); foreach (var data in datas) { if (data != null) { para = new List <SqlParam>(); para.Add(new SqlParam("@F_HS_B2CCUSTID", KDDbType.Int32, SQLUtils.GetCustomerId(ctx, data.F_HS_B2CCustId, 1))); para.Add(new SqlParam("@changedAmount", KDDbType.Decimal, data.FRealAmountFor)); para.Add(new SqlParam("@changedType", KDDbType.String, data.ChangedType)); para.Add(new SqlParam("@changedCause", KDDbType.String, data.ChangedCause)); para.Add(new SqlParam("@balanceAmount", KDDbType.Decimal, GetCustBalance(ctx, data.F_HS_B2CCustId, data.FSaleOrgId) * data.F_HS_RateToUSA)); para.Add(new SqlParam("@F_HS_RateToUSA", KDDbType.Decimal, data.F_HS_RateToUSA)); para.Add(new SqlParam("@FSETTLECURRID", KDDbType.Int32, SQLUtils.GetSettleCurrId(ctx, data.FSettleCurrId))); if (data.F_HS_RateToUSA > 0) { para.Add(new SqlParam("@changedAmountUSA", KDDbType.Decimal, data.FRealAmountFor / data.F_HS_RateToUSA)); para.Add(new SqlParam("@balanceAmountUSA", KDDbType.Decimal, GetCustBalance(ctx, data.F_HS_B2CCustId, data.FSaleOrgId))); } para.Add(new SqlParam("@updateTime", KDDbType.DateTime, DateTime.Now)); para.Add(new SqlParam("@updateUser", KDDbType.Int64, ctx.UserId)); para.Add(new SqlParam("@FBillNo", KDDbType.String, data.FBillNo.Contains("_") ? data.FBillNo.Split('_')[0] : data.FBillNo)); para.Add(new SqlParam("@fentryID", KDDbType.Int64, data.FEntryId)); para.Add(new SqlParam("@needfreezed", KDDbType.Int16, data.NeedFreezed ? 1 : 0)); para.Add(new SqlParam("@remark", KDDbType.String, data.Remark)); Kingdee.BOS.App.ServiceHelper.GetService <IDBService>().Execute(ctx, insertSql, para); } } } } }
public static LogerTraceListener CreateInstance(SynchroDataType dataType, string billNo) { if (tracer == null) { lock (locker) { if (tracer == null) { return(new LogerTraceListener(dataType, billNo)); } } } return(tracer); }
/// <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> /// 动态创建同步至K3的实现类 /// </summary> private static List <AbstractSynchroToK3> GetSynchroToK3ClsInstance(SynchroDataType dataType) { if (clsSynchroToK3Type.Count == 0) { CreateSynchroToK3ClsInstance(); } List <AbstractSynchroToK3> lst = new List <AbstractSynchroToK3>(); foreach (var item in clsSynchroToK3Type) { AbstractSynchroToK3 x = Activator.CreateInstance(item) as AbstractSynchroToK3; if (x.DataType == dataType) { lst.Add(x); } } return(lst); }
/// <summary> /// 创建同步至K3的数据 /// </summary> /// <param name="ctx"></param> /// <param name="dataType"></param> /// <param name="json"></param> /// <returns></returns> public static AbsSynchroDataInfo BuildSynchroData(Context ctx, SynchroDataType dataType, string json) { List <AbstractSynchroToK3> svc = new List <AbstractSynchroToK3>(); lock (K3Lock) { svc = GetSynchroToK3ClsInstance(dataType); } if (svc != null && svc.Count > 0) { foreach (var item in svc) { return(item.BuildSynchroData(ctx, json)); } } 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); }
private string GetBasePath(SynchroDataType dataType) { switch (dataType) { case SynchroDataType.SaleOrder: return("SalOrder\\"); case SynchroDataType.SaleOrderStatus: return("SaleOrderStatus\\"); case SynchroDataType.Customer: return("Customer\\"); case SynchroDataType.CustomerAddress: return("CustomerAddress\\"); case SynchroDataType.DelCustomerAddress: return("DelCustomerAddress\\"); } return(null); }
public static string GetBillNo(Context ctx, SynchroDataType dataType, string json) { switch (dataType) { case SynchroDataType.SaleOrder: return(JsonUtils.GetFieldValue(JsonUtils.ParseJson2JObj(ctx, SynchroDataType.SaleOrder, json), "orders_id")); case SynchroDataType.SaleOrderStatus: return(JsonUtils.GetFieldValue(JsonUtils.ParseJson2JObj(ctx, SynchroDataType.SaleOrderStatus, json), "orders_id")); case SynchroDataType.Customer: return(JsonUtils.GetFieldValue(JsonUtils.ParseJson2JObj(ctx, SynchroDataType.Customer, json), "customers_id")); case SynchroDataType.CustomerAddress: return(JsonUtils.GetFieldValue(JsonUtils.ParseJson2JObj(ctx, SynchroDataType.CustomerAddress, json), "address_book_id")); case SynchroDataType.DelCustomerAddress: return(JsonUtils.GetFieldValue(JsonUtils.ParseJson2JObj(ctx, SynchroDataType.DelCustomerAddress, json), "address_book_id")); } return(null); }
public static T ParseJson <T>(Context ctx, SynchroDataType dataType, string json) { if (!string.IsNullOrWhiteSpace(json)) { if (json.Substring(0, 1).CompareTo("[") == 0 && json.Substring(json.Length - 1, 1).CompareTo("]") == 0 && json.Length > 2) { JArray jArr = JArray.Parse(json); return((T)(Object)jArr); } if (json.Substring(0, 1).CompareTo("{") == 0 && json.Substring(json.Length - 1, 1).CompareTo("}") == 0 && json.Length > 2) { JObject jObj = JObject.Parse(json); return((T)(Object)jObj); } } else { LogUtils.WriteSynchroLog(ctx, dataType, "JSON为空!"); } return(default(T)); }
/// <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> /// 单据批量分配 /// </summary> /// <param name="ctx"></param> /// <param name="dataType"></param> /// <param name="formId"></param> /// <param name="pkIds"></param> /// <returns></returns> public static HttpResponseResult InvokeBatchAllot(Context ctx, SynchroDataType dataType, string formId, IEnumerable <int> pkIds) { HttpResponseResult response = default(HttpResponseResult); string ret = default(string); K3CloudApiClient client = null; DataBaseConst.K3CloudContext = ctx; client = new K3CloudApiClient(DataBaseConst.CurrentK3CloudURL); if (Login(ctx, client)) { ret = client.Allocate(formId, "{\"PkIds\":\"" + FormatFNumber(pkIds) + "\",\"TOrgIds\":" + ORGID + ",\"IsAutoSubmitAndAudit\":\"true\"}"); } if (!string.IsNullOrEmpty(ret)) { response = Response(ctx, dataType, SynOperationType.ALLOT, ret); } return(response); }
/// <summary> /// 解析json字符串 /// </summary> /// <param name="ctx"></param> /// <param name="json"></param> /// <param name="dataType"></param> /// <returns></returns> public static JObject ParseJson2JObj(Context ctx, SynchroDataType dataType, string json) { JArray jArr = null; JObject jObj = null; try { if (!string.IsNullOrEmpty(json)) { jArr = JArray.Parse(json); if (jArr != null && jArr.Count > 0) { return(JObject.Parse(jArr[0].ToString())); } } } catch (Exception ex) { LogUtils.WriteSynchroLog(ctx, dataType, dataType + json + "json解析出现异常:" + System.Environment.NewLine + ex.Message); return(null); } return(jObj); }
/// <summary> /// 根据返回结果获取不能保存成功的单据编号 /// </summary> /// <param name="ctx"></param> /// <param name="json"></param> /// <param name="dataType"></param> /// <param name="index"></param> /// <returns></returns> public static string GetSynFailBillNo(Context ctx, string json, SynchroDataType dataType, int index) { JArray jArr = GetResponseByJson(json); string number = null; if (jArr != null && jArr.Count() > 0) { if (dataType == SynchroDataType.Customer && index < jArr.Count()) { if (JObject.Parse(JsonUtils.ConvertObjectToString(jArr[index])).Property("FNumber") != null) { number = JsonUtils.ConvertObjectToString(jArr[index]["FNumber"]); } else if (JObject.Parse(JsonUtils.ConvertObjectToString(jArr[index])).Property("FCUSTID") != null) { int custId = Convert.ToInt32(JsonUtils.ConvertObjectToString(jArr[index]["FCUSTID"])); number = SQLUtils.GetCustomerNo(ctx, custId); } } else if (dataType == SynchroDataType.ReceiveBill && index < jArr.Count()) { if (JObject.Parse(JsonUtils.ConvertObjectToString(jArr[index])).Property("FRECEIVEBILLENTRY") != null) { number = JsonUtils.ConvertObjectToString(jArr[index]["FRECEIVEBILLENTRY"][0]["FRECEIVEITEM"]); } } else { if (JObject.Parse(JsonUtils.ConvertObjectToString(jArr[index])).Property("FBillNo") != null) { number = JsonUtils.ConvertObjectToString(jArr[index]["FBillNo"]); } } } return(number); }
public AbsDataInfo(SynchroDataType dataType) { this.DataType = dataType; }
public IList <T_EXT_SyncHistory> GetSynchroHistory(int from, Guid org, SynchroDataType type) { return(GetInfos <T_EXT_SyncHistory>("select top 1 * from T_EXT_SyncHistory where FromSystem=@from and TeachLevelOneOrgID=@org and DataType=@type and SyncStatus=1000 order by id desc", new { from = @from, org = @org, type = @type })); }
public static Dictionary <string, string> GetRedisSetKey(SynchroDataType dataType, SynchroDirection direct = default(SynchroDirection)) { Dictionary <string, string> dict = new Dictionary <string, string>(); switch (dataType) { case SynchroDataType.Customer: switch (direct) { case SynchroDirection.ToK3: dict.Add(UnreadKey, "customers_unread"); dict.Add(InfoKey, "customers_info:"); dict.Add(AllKey, "customers_all"); return(dict); case SynchroDirection.ToHC: dict.Add(UnreadKey, "K3Customers_unread"); dict.Add(InfoKey, "K3Customers_info:"); dict.Add(AllKey, "K3Customers_all"); return(dict); default: return(null); } case SynchroDataType.CustomerAddress: dict.Add(UnreadKey, "b2b_address_unread"); dict.Add(InfoKey, "b2b_address_info:"); dict.Add(AllKey, "b2b_address_all"); return(dict); case SynchroDataType.DelCustomerAddress: dict.Add(UnreadKey, "b2b_address_delete_unread"); dict.Add(InfoKey, "b2b_address_delete_info:"); dict.Add(AllKey, "b2b_address_delete_all"); return(dict); case SynchroDataType.SaleOrder: case SynchroDataType.DropShippingSalOrder: switch (direct) { case SynchroDirection.ToK3: case SynchroDirection.ToB2B: dict.Add(UnreadKey, "unread_orders"); dict.Add(InfoKey, "orders_info:"); dict.Add(AllKey, "all_orders"); return(dict); case SynchroDirection.ToHC: dict.Add(UnreadKey, "Credit_unread"); dict.Add(InfoKey, "Credit_info:"); dict.Add(AllKey, "Credit_all"); return(dict); default: return(null); } case SynchroDataType.SalesOrderPayStatus: dict.Add(UnreadKey, "orders_status_unread"); dict.Add(InfoKey, "orders_status_info:"); dict.Add(AllKey, "orders_status_all"); return(dict); case SynchroDataType.DownLoadListInfo: dict.Add(UnreadKey, "unread_material_listid"); dict.Add(InfoKey, "material_info:"); dict.Add(AllKey, "all_material_listid"); return(dict); case SynchroDataType.SynchroListInfo: dict.Add(UnreadKey, "MaterialListInfo_unread"); dict.Add(InfoKey, "MaterialListInfo_info:"); dict.Add(AllKey, "MaterialListInfo_all"); return(dict); case SynchroDataType.ReceiveBill: dict.Add(UnreadKey, "Credit_unread"); dict.Add(InfoKey, "Credit_info:"); dict.Add(AllKey, "Credit_all"); return(dict); case SynchroDataType.ReFundBill: dict.Add(UnreadKey, "Credit_unread"); dict.Add(InfoKey, "Credit_info:"); dict.Add(AllKey, "Credit_all"); return(dict); case SynchroDataType.ImportLogis: dict.Add(UnreadKey, "CarriageNO_unread"); dict.Add(InfoKey, "CarriageNO_info:"); dict.Add(AllKey, "CarriageNO_all"); return(dict); case SynchroDataType.Material: dict.Add(UnreadKey, "material_unread"); dict.Add(InfoKey, "material_info:"); dict.Add(AllKey, "material_all"); return(dict); case SynchroDataType.Inventroy: dict.Add(UnreadKey, "inventories_Unread"); dict.Add(InfoKey, "inventories_info:"); dict.Add(AllKey, "inventories_All"); return(dict); case SynchroDataType.SaleOrderOffline: switch (direct) { case SynchroDirection.Default: dict.Add(UnreadKey, "Credit_unread"); dict.Add(InfoKey, "Credit_info:"); dict.Add(AllKey, "Credit_all"); return(dict); case SynchroDirection.ToHC: dict.Add(UnreadKey, "offlineOrder_unread"); dict.Add(InfoKey, "offlineOrder_info:"); dict.Add(AllKey, "offlineOrder_all"); return(dict); default: return(null); } case SynchroDataType.SaleOrderStatus: dict.Add(UnreadKey, "orderStatus_unread"); dict.Add(InfoKey, "orderStatus_info:"); dict.Add(AllKey, "orderStatus_all"); return(dict); case SynchroDataType.BatchAdjust: dict.Add(UnreadKey, "BatchAdjust_unread"); dict.Add(InfoKey, "BatchAdjust_info:"); dict.Add(AllKey, "BatchAdjust_all"); return(dict); case SynchroDataType.OnTheWay: switch (direct) { case SynchroDirection.ToHC: case SynchroDirection.ToB2B: dict.Add(UnreadKey, "TransportationInventory_unread"); dict.Add(InfoKey, "TransportationInventory_info:"); dict.Add(AllKey, "TransportationInventory_all"); return(dict); default: return(null); } case SynchroDataType.DeliveryNoticeBill: dict.Add(UnreadKey, "LogisticsTrajectory_unread"); dict.Add(InfoKey, "LogisticsTrajectory_info:"); dict.Add(AllKey, "LogisticsTrajectory_all"); return(dict); case SynchroDataType.InStock: dict.Add(UnreadKey, "HomemarkReached_unread"); dict.Add(InfoKey, "HomemarkReached_info:"); dict.Add(AllKey, "HomemarkReached_all"); return(dict); } return(null); }
/// <summary> /// 复制Redis正式库数据至测试库 /// </summary> /// <param name="ctx"></param> /// <param name="dict"></param> /// <param name="keys"></param> /// <param name="dataType"></param> public static void BackupDataToRedis(Context ctx, Dictionary <string, string> dict, IEnumerable <string> keys, SynchroDataType dataType, SynchroDirection direction) { long backupRedisId = 0; try { Dictionary <string, string> redisKey = RedisKeyUtils.GetRedisSetKey(dataType, SynchroDirection.ToK3); switch (direction) { case SynchroDirection.ToK3: backupRedisId = 1; break; case SynchroDirection.ToB2B: backupRedisId = 2; break; default: break; } if (DataBaseConst.CurrentRedisServerIp.CompareTo(DataBaseConst.HKRedisIP) == 0) { RedisManager manager = new RedisManager(ctx); Thread subTh = new Thread(new ThreadStart(() => { using (IRedisClient redis = manager.GetClientTest(ctx, backupRedisId)) { if (redis != null) { if (dict != null && dict.Count > 0) { redis.SetAll(dict); if (keys != null && keys.Count() > 0) { if (!string.IsNullOrWhiteSpace(redisKey["unreadKey"]) && !string.IsNullOrWhiteSpace(redis["allKey"])) { if (GetItems(keys) != null && GetItems(keys).Count > 0) { redis.AddRangeToSet(redisKey["unreadKey"], GetItems(keys)); redis.AddRangeToSet(redis["allKey"], GetItems(keys)); } } } } redis.Dispose(); } } } )); subTh.IsBackground = true; subTh.Start(); } } catch (Exception ex) { LogUtils.WriteSynchroLog(ctx, SynchroDataType.Redis, ex.Message + System.Environment.NewLine + ex.StackTrace); } }
/// <summary> /// 从Redis获取同步数据 /// </summary> /// <param name="ctx"></param> /// <param name="dataType"></param> /// <param name="redis"></param> /// <param name="redisKeys"></param> /// <returns></returns> private static List <AbsSynchroDataInfo> GetSynchroObjects(Context ctx, SynchroDataType dataType, IRedisClient redis, IEnumerable <string> redisKeys, SynchroDirection direction = SynchroDirection.ToK3) { List <AbsSynchroDataInfo> datas = null; List <string> jsons = null; Dictionary <string, string> dict = null; if (redis != null) { if (redisKeys != null && redisKeys.Count() > 0) { dict = new Dictionary <string, string>(); jsons = new List <string>(); foreach (var item in redisKeys) { if (!string.IsNullOrWhiteSpace(item)) { string json = redis.Get <string>(item.ToString()); if (!string.IsNullOrWhiteSpace(json)) { BackupJson.WriteJsonToLocal(ctx, dataType, json); jsons.Add(json); dict.Add(item.ToString(), JsonUtils.ReplaceDoubleQuotes(json)); } } } BackupDataToRedis(ctx, dict, redisKeys, dataType, direction); } } if (jsons != null && jsons.Count > 0) { datas = new List <AbsSynchroDataInfo>(); foreach (var json in jsons) { if (json.IsNullOrEmptyOrWhiteSpace() || json.EqualsIgnoreCase("None")) { continue; } try { AbsSynchroDataInfo data = SynchroDataHelper.BuildSynchroData(ctx, dataType, json); if (data != null) { datas.Add(data); } } catch (Exception ex) { LogUtils.WriteSynchroLog(ctx, dataType, "下载" + dataType + "出现异常" + ex.Message + System.Environment.NewLine + ex.StackTrace); } } } return(datas); }
/// <summary> /// 删除Redis数据库中的数据 /// </summary> /// <param name="ctx"></param> /// <param name="numbers"></param> /// <param name="dataType"></param> public virtual void RemoveRedisData(Context ctx, IEnumerable <string> numbers, SynchroDataType dataType = SynchroDataType.None) { long dbId = 0; if (this.K3CloudContext == null) { dbId = GetRedisDbId(ctx); } else { dbId = this.RedisDbId; } if (true /*K3LoginInfo.GetRedisServerIp(ctx).CompareTo(DataBaseConst.RedisServerIP) == 0*/) { List <string> infoKeys = null; RedisManager manager = new RedisManager(ctx); if (numbers != null && numbers.Count() > 0) { infoKeys = new List <string>(); foreach (var num in numbers) { if (!string.IsNullOrWhiteSpace(num)) { if (dataType.CompareTo(SynchroDataType.None) == 0) { infoKeys.Add(this.RedisInfoKey + num); manager.RemoveItemFromSet(ctx, this.RedisUnreadkey, num, dbId); } else { infoKeys.Add(RedisKeyUtils.GetRedisSetKey(dataType, this.Direction)["infoKey"] + num); manager.RemoveItemFromSet(ctx, RedisKeyUtils.GetRedisSetKey(dataType, this.Direction)["unreadKey"], num, dbId); } } } if (DataBaseConst.CurrentRedisServerIp.CompareTo(DataBaseConst.HKRedisIP) == 0) { manager.RemoveAll(ctx, infoKeys, this.RedisDbId); } manager = null; } } }
public HttpResponseResult(SynchroDataType dataType) { this.DataType = dataType; }