Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 /// <summary>
 /// 将需要同步的数据转换为JSON格式(集合)
 /// </summary>
 /// <param name="sourceDatas"></param>
 /// <param name="operationType"></param>
 /// <returns></returns>
 public abstract JObject BuildSynchroDataJsons(IEnumerable <AbsSynchroDataInfo> sourceDatas, SynOperationType operationType);
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
 /// <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);
        }
Exemplo n.º 11
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 + " 失败!");
     }
 }
Exemplo n.º 12
0
        /// <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);
        }
Exemplo n.º 13
0
        /// <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);
        }
Exemplo n.º 15
0
        /// <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);
        }
Exemplo n.º 16
0
        /// <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);
        }
Exemplo n.º 17
0
        /// <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);
            }
        }
Exemplo n.º 19
0
        /// <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);
        }
Exemplo n.º 21
0
        /// <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);
        }
Exemplo n.º 22
0
 /// <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);
        }
Exemplo n.º 24
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);
        }
        /// <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);
        }
Exemplo n.º 26
0
        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);
        }
Exemplo n.º 27
0
 public override JObject BuildSynchroDataJson(AbsSynchroDataInfo sourceData, SynchroLog log, SynOperationType operationType)
 {
     return(null);
 }
Exemplo n.º 28
0
        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);
        }
Exemplo n.º 29
0
        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);
        }
Exemplo n.º 30
0
        /// <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);
        }