예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
                }
            }
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
        /// <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);
            }
        }
예제 #6
0
        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);
            }
        }
예제 #7
0
 /// <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);
     }
 }
예제 #8
0
        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);
        }
예제 #9
0
        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);
        }
예제 #10
0
        /// <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);
        }
예제 #11
0
        /// <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);
                        }
                    }
                }
            }
        }
예제 #12
0
 public static LogerTraceListener CreateInstance(SynchroDataType dataType, string billNo)
 {
     if (tracer == null)
     {
         lock (locker)
         {
             if (tracer == null)
             {
                 return(new LogerTraceListener(dataType, billNo));
             }
         }
     }
     return(tracer);
 }
예제 #13
0
 /// <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 + " 失败!");
     }
 }
예제 #14
0
        /// <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);
        }
예제 #15
0
        /// <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);
        }
예제 #16
0
        /// <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);
        }
예제 #17
0
        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);
        }
예제 #18
0
        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);
        }
예제 #19
0
        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));
        }
예제 #20
0
        /// <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);
        }
예제 #21
0
        /// <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);
        }
예제 #22
0
        /// <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);
        }
예제 #23
0
        /// <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);
        }
예제 #24
0
 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 }));
 }
예제 #26
0
        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);
        }
예제 #27
0
        /// <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);
            }
        }
예제 #28
0
        /// <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);
        }
예제 #29
0
        /// <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;
                }
            }
        }
예제 #30
0
 public HttpResponseResult(SynchroDataType dataType)
 {
     this.DataType = dataType;
 }