Пример #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="order"></param>
        /// <param name="smart"></param>
        private async Task DealOrder(SuccinctOrder order, AsNum.Xmj.Entity.Order eo, bool smart)
        {
            //var eo = biz.GetOrder(order.OrderID, false);

            if (!smart || (eo == null || (
                               (byte)eo.Status != (byte)order.OrderStatus) ||
                           eo.InIssue != order.InIssue
                           ))
            {
                this.LogObserverable.Value.Notify(string.Format("更新订单 {0}", order.OrderID), true);
                var od = await this.GetOrderDetail(order.OrderID);

                //转换为数据库实体
                var o = this.CombineOrderData(od, order);

                var biz = GlobalData.MefContainer.GetExportedValue <IOrder>();
                biz.AddOrEdit(o);
                if (biz.HasError)
                {
                    var str = string.Join(";", biz.Errors.Select(kv => string.Join("{0} : {1}", kv.Key, kv.Value)));
                    this.LogObserverable.Value.Notify(string.Format("订单 {0} : {1}", o.OrderNO, str), false);
                }
            }
            else
            {
                //this.LogObserverable.Value.Notify(string.Format("订单 {0} 未发生变化,跳过", order.OrderID), true);
            }
        }
Пример #2
0
        /// <summary>
        /// 由于API白限制,该方法只更新已存在的订单:
        /// </summary>
        /// <param name="orderID"></param>
        public void Sync(AE.Order order)
        {
            DateTime time = DateTime.Now;

            if (order == null)
            {
                return;
            }
            //太平洋时间,-8区,不直接减8是因为有夏令时
            //订单数据里的时间以经在同步的时候转换为了UTC时间
            time = TimeZoneInfo.ConvertTimeFromUtc(order.CreteOn, TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));

            Task.Factory.StartNew(() => {
                this.SyncByStatus(OrderStatus.UNKNOW, false, time, time);
            }, TaskCreationOptions.AttachedToParent)
            .ContinueWith(t => {
                t.Dispose();
            }, TaskContinuationOptions.AttachedToParent);
        }
Пример #3
0
        /// <summary>
        /// 合并两个接口返回的订单数据
        /// </summary>
        /// <param name="dOrder"></param>
        /// <param name="sOrder"></param>
        /// <returns></returns>
        private AE.Order CombineOrderData(DetailOrder dOrder, SuccinctOrder sOrder)
        {
            var ao = new AE.Order()
            {
                InIssue = sOrder.InIssue,
                //dOrder 的 Amount 不是调整后的价格.
                Amount   = sOrder.Amount.Total,// dOrder.OrderAmount.Total;
                CreteOn  = dOrder.CreateOn,
                Currency = dOrder.OrderAmount.Currency.CurrencyCode,

                OrderNO     = dOrder.OrderNO,
                PaymentOn   = dOrder.PaymentOn,
                PaymentType = sOrder.PaymentType,
                Status      = ((byte)dOrder.Status).ToEnum <AE.OrderStatus>(),
                OffTime     = DateTime.Now.Add(sOrder.OutLeftTime)
            };

            #region details
            ao.Details = dOrder.ChildOrders.Select(d => {
                var sDetail = sOrder.Products.Find(so => so.ChildID.Equals(d.ID));
                return(new AE.OrderDetail()
                {
                    ProductPrice = sDetail.UnitPrice.Total,
                    DeliveryTime = sDetail.DeliveryTime,
                    Image = sDetail.Image,//dOrder 里没有这个数据
                    LotNum = d.LotNum,
                    OrderNO = sOrder.OrderID,
                    PrepareDays = sDetail.PrepareDays,
                    ProductID = d.ProductID,
                    ProductName = d.ProductName,
                    Remark = sDetail.OrderMessage,
                    SKUCode = d.SKUCode,
                    SnapURL = sDetail.SnapURL,
                    SubOrderNO = d.ID,
                    Unit = d.Unit,
                    UnitQty = d.Count,
                    LogisticsType = sDetail.LogisticsType,
                    //老订单返回的没有 LogisticsAmount
                    LogisticAmount = sDetail.LogisticsAmount == null ? 0 : sDetail.LogisticsAmount.Total,
                    Attrs = d.Attributes.SKU.Select(s => new AE.OrderDetailAttribute()
                    {
                        Order = s.Order,
                        OrderNO = dOrder.OrderNO,
                        SubOrderNO = d.ID,
                        AttrStr = string.IsNullOrWhiteSpace(s.CustomValue) ? string.Format("{0}: {1}", s.Name, s.Value) : s.CustomValue,
                        CompatibleStr = s.CompatibleStr
                    }).ToList()
                });
            }
                                                   ).ToList();
            #endregion ;

            #region OrgReceiver
            ao.OrgReceiver = new AE.Receiver()
            {
                OrderNO     = dOrder.OrderNO,
                Address     = string.IsNullOrWhiteSpace(dOrder.Receiver.Address2) ? dOrder.Receiver.Address : string.Format("{0} , {1}", dOrder.Receiver.Address, dOrder.Receiver.Address2),
                City        = dOrder.Receiver.City,
                CountryCode = dOrder.Receiver.CountryCode,
                Mobi        = dOrder.Receiver.Mobi,
                Name        = dOrder.Receiver.ContactPerson,
                Phone       = string.Join("-", new string[] { dOrder.Receiver.PhoneCountry, dOrder.Receiver.PhoneArea, dOrder.Receiver.Phone }.Where(s => !string.IsNullOrWhiteSpace(s))),
                PhoneArea   = dOrder.Receiver.PhoneArea,
                Province    = dOrder.Receiver.Province,
                ZipCode     = dOrder.Receiver.ZipCode,
            };
            #endregion

            #region Logistics
            ao.Logistics = dOrder.LogisticInfos.Where(l => l.SendOn.HasValue).Select(l => new AE.OrdeLogistic()
            {
                SendOn  = l.SendOn,
                TrackNO = l.TrackingNo,
                //LogisticsType = l.TypeCode.ToEnum<AE.LogisticsTypes>(),
                LogisticCode = l.TypeCode,
                OrderNO      = sOrder.OrderID
            }).ToList();
            #endregion

            #region Account
            ao.Account   = sOrder.Account;
            ao.AccountOf = new AE.Owner()
            {
                Account     = sOrder.Account,
                AccountType = AE.AccountTypes.Ali
            };
            #endregion

            #region buyer
            //某些订单,在订单列表里,是没有BuyerID 的,导至保存失败
            ao.BuyerID = dOrder.Customer.LoginID;
            ao.Buyer   = new AE.Buyer()
            {
                BuyerID     = dOrder.Customer.LoginID,
                CountryCode = dOrder.Customer.CountryCode,
                Email       = dOrder.Customer.Email,
                Name        = string.Format("{0} {1}", dOrder.Customer.FirstName, dOrder.Customer.LastName)
            };
            #endregion

            return(ao);
        }