Ejemplo n.º 1
0
 /// <summary>
 /// 第三方电商获取订单项物流轨迹信息
 /// </summary>
 /// <param name="orderItemId"></param>
 /// <returns></returns>
 public static ThirdOrderPackageExpress GetExpressInfo(Guid orderItemId)
 {
     if (orderItemId == Guid.Empty)
     {
         return(null);
     }
     try
     {
         var expressSku = ThirdECOrderPackageSku.ObjectSet().Where(p => p.OrderItemId == orderItemId).FirstOrDefault();
         if (expressSku == null)
         {
             return(null);
         }
         var express = new ThirdOrderPackageExpress {
             ExpressCompany = expressSku.ExpressCompany, ExpressNo = expressSku.ExpressNo, ExpressTraceList = new List <ThirdExpressTrace>()
         };
         ThirdECExpressTrace.ObjectSet().Where(p => p.OrderId == expressSku.OrderId && p.PackageId == expressSku.PackageId &&
                                               p.ExpressCompany == expressSku.ExpressCompany && p.ExpressNo == expressSku.ExpressNo).ToList().ForEach(p =>
         {
             express.ExpressTraceList.Add(new ThirdExpressTrace
             {
                 Desc = p.Desc,
                 Time = p.Time.ToString("yyyy-MM-dd HH:mm:ss")
             });
         });
         return(express);
     }
     catch (Exception ex)
     {
         LogHelper.Error(string.Format("ThirdECommerceOrderHelper.GetExpressInfo第三方电商获取订单项物流轨迹信息异常,入参:orderItemId={0}", orderItemId), ex);
     }
     return(null);
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 第三方电商物流追踪信息回调
        /// </summary>
        /// <param name="expressJsonStr"></param>
        /// <returns></returns>
        public static ThirdResponse ExpressTraceCallback(string expressJsonStr)
        {
            LogHelper.Debug("ThirdECommerceOrderHelper.ExpressTraceCallback第三方电商物流追踪信息回调,Input:" + expressJsonStr);
            if (string.IsNullOrEmpty(expressJsonStr))
            {
                return new ThirdResponse {
                           Code = 10400, Msg = "缺少参数expressTrace"
                }
            }
            ;
            try
            {
                var expressResult = JsonConvert.DeserializeObject <ThirdOrderPackageExpress>(expressJsonStr);

                if (expressResult == null)
                {
                    return new ThirdResponse {
                               Code = 10401, Msg = "非法参数expressTrace"
                    }
                }
                ;
                Guid orderId;
                Guid.TryParse(expressResult.OrderId, out orderId);
                if (orderId == Guid.Empty)
                {
                    return new ThirdResponse {
                               Code = 10402, Msg = "非法参数OrderId"
                    }
                }
                ;
                if (string.IsNullOrEmpty(expressResult.ExpressCompany))
                {
                    return new ThirdResponse {
                               Code = 10403, Msg = "非法参数ExpressCompany"
                    }
                }
                ;
                if (string.IsNullOrEmpty(expressResult.ExpressNo))
                {
                    return new ThirdResponse {
                               Code = 10404, Msg = "非法参数ExpressNo"
                    }
                }
                ;
                if (expressResult.ExpressTraceList == null || expressResult.ExpressTraceList.Count == 0)
                {
                    return new ThirdResponse {
                               Code = 10405, Msg = "非法参数ExpressTraceList"
                    }
                }
                ;
                #region 判断是否第三方电商订单及获取订单信息
                var package = ThirdECOrderPackage.ObjectSet().FirstOrDefault(p => p.OrderId == orderId &&
                                                                             p.ExpressCompany == expressResult.ExpressCompany && p.ExpressNo == expressResult.ExpressNo);
                if (package == null)
                {
                    return new ThirdResponse {
                               Code = 10406, Msg = "未找到此包裹"
                    }
                }
                ;
                #endregion
                #region ThirdECExpressTrace
                var descFlag = false;
                var timeFlag = false;
                expressResult.ExpressTraceList.ForEach(trace =>
                {
                    DateTime traceTime;
                    DateTime.TryParse(trace.Time, out traceTime);
                    if (string.IsNullOrEmpty(trace.Desc))
                    {
                        descFlag = false; return;
                    }
                    else if (traceTime == DateTime.MinValue)
                    {
                        timeFlag = false; return;
                    }
                    var express = ThirdECExpressTrace.ObjectSet().FirstOrDefault(p => p.OrderId == orderId &&
                                                                                 p.ExpressCompany == expressResult.ExpressCompany && p.ExpressNo == expressResult.ExpressNo &&
                                                                                 p.Desc == trace.Desc && p.Time == traceTime);
                    if (express == null)
                    {
                        express = new ThirdECExpressTrace
                        {
                            Id             = Guid.NewGuid(),
                            OrderId        = package.OrderId,
                            OrderCode      = package.OrderCode,
                            PackageId      = package.Id,
                            ExpressCompany = package.ExpressCompany,
                            ExpressNo      = package.ExpressNo,
                            Time           = traceTime,
                            Desc           = trace.Desc,
                            EntityState    = EntityState.Added
                        };
                        ContextFactory.CurrentThreadContext.SaveObject(express);
                    }
                });
                if (descFlag)
                {
                    return new ThirdResponse {
                               Code = 10407, Msg = "非法参数ExpressTraceList"
                    }
                }
                ;
                if (timeFlag)
                {
                    return new ThirdResponse {
                               Code = 10408, Msg = "非法参数ExpressTraceList"
                    }
                }
                ;
                #endregion
                int count = ContextFactory.CurrentThreadContext.SaveChanges();
                if (count == 0)
                {
                    LogHelper.Error(string.Format("ThirdECommerceOrderHelper.ExpressTraceCallback第三方电商物流追踪信息回调失败,入参:{0}", expressJsonStr));

                    return(new ThirdResponse {
                        Code = 10409, Msg = "内部异常"
                    });
                }
            }
            catch (JsonReaderException ex)
            {
                LogHelper.Error("ThirdECommerceOrderHelper.ExpressTraceCallback第三方电商物流追踪信息回调反序列化异常,Input:" + expressJsonStr, ex);
                return(new ThirdResponse <ThirdOrderCancelResult> {
                    Msg = "反序列化异常"
                });
            }
            catch (Exception ex)
            {
                LogHelper.Error(string.Format("ThirdECommerceOrderHelper.ExpressTraceCallback第三方电商物流追踪信息回调异常,入参:{0}", expressJsonStr), ex);
                return(new ThirdResponse {
                    Code = 10410, Msg = "内部异常"
                });
            }
            return(new ThirdResponse {
                Code = 200, Msg = "ok"
            });
        }