Ejemplo n.º 1
0
        public override OrderDownload GetOrder(Domain.Shop shop, string popOrderId)
        {
            OrderDownload od = new OrderDownload();

            try
            {
                SortedDictionary <string, string> para = new SortedDictionary <string, string>();
                para["order_sn"] = popOrderId;
                var rsp = this.Invoke <PddRspGetOrder>(shop, "pdd.order.information.get", para, 2);

                var      o       = rsp;
                DateTime minTime = new DateTime(1970, 01, 01);
                var      order   = new Domain.Order
                {
                    CloseOperator    = "",
                    CloseTime        = minTime,
                    CreateOperator   = "",
                    CreateTime       = DateTime.Parse(o.created_time),
                    CreateType       = Domain.OrderCreateType.DOWNLOAD,
                    DeliveryCompany  = GetDeliveryCompany(o.logistics_id),
                    DeliveryNumber   = o.tracking_number,
                    DeliveryOperator = "",
                    DeliveryTime     = minTime,
                    DeliveryMoney    = 0,
                    Id = 0,
                    PopDeliveryTime    = DateTime.MinValue,
                    OrderGoodss        = new List <Domain.OrderGoods>(),
                    ParseResult        = false,
                    PopBuyerComment    = "",
                    PopBuyerId         = "",
                    PopBuyerPayMoney   = float.Parse(o.pay_amount),
                    PopCodNumber       = "",
                    PopCodSevFee       = 0,
                    PopFlag            = Domain.ColorFlag.UN_LABEL,
                    PopOrderId         = o.order_sn,
                    PopOrderTotalMoney = float.Parse(o.goods_amount) + float.Parse(o.postage ?? "0"),
                    PopPayTime         = DateTime.Parse(o.confirm_time ?? "1970-01-01 00:00:01"),
                    PopPayType         = Domain.PopPayType.ONLINE,
                    PopSellerComment   = o.remark,
                    PopSellerGetMoney  = float.Parse(o.goods_amount) + float.Parse(o.postage ?? "") - float.Parse(o.seller_discount ?? "0") - float.Parse(o.capital_free_discount ?? "0"),
                    PopState           = "",
                    PopType            = Domain.PopType.PINGDUODUO,
                    PrintOperator      = "",
                    PrintTime          = minTime,
                    ReceiverAddress    = o.address,
                    ReceiverMobile     = o.receiver_phone,
                    ReceiverName       = o.receiver_name,
                    ReceiverPhone      = "",
                    ShopId             = shop.Id,
                    State  = Domain.OrderState.NONE,
                    Type   = Domain.OrderType.NORMAL,
                    Weight = 0,
                };

                //解析商品
                if (o.item_list != null)
                {
                    foreach (var goods in o.item_list)
                    {
                        var orderGoods = new Domain.OrderGoods
                        {
                            CloseOperator = "",
                            CloseTime     = DateTime.MinValue,
                            Color         = "",
                            Comment       = "",
                            Count         = goods.goods_count,
                            Edtion        = "",
                            GetedCount    = 0,
                            Id            = 0,
                            Image         = goods.goods_img,
                            Number        = goods.outer_id,
                            GoodsId       = 0,
                            OrderId       = 0,
                            PopInfo       = goods.outer_id + " " + goods.goods_spec,
                            PopOrderSubId = "",
                            PopPrice      = goods.goods_price,
                            PopUrl        = goods.goods_id,
                            Price         = 0,
                            Size          = "",
                            State         = Domain.OrderState.NONE,
                            StockOperator = "",
                            StockTime     = DateTime.MinValue,
                            Vendor        = "",
                            Weight        = 0,
                            Shipper       = ""
                        };
                        //拼多以 ‘,’号分开,前面为颜色,后面为尺码
                        string[] stocks = goods.goods_spec.Split(new char[] { ',', ',' }, StringSplitOptions.RemoveEmptyEntries);
                        if (stocks.Length == 2)
                        {
                            orderGoods.Color = stocks[0];
                            orderGoods.Size  = stocks[1];
                        }
                        order.OrderGoodss.Add(orderGoods);
                    }
                }
                //获取订单状态
                var os = ConvertToOrderState(popOrderId, new PddRspGetOrderStateOrder {
                    orderSn = popOrderId, order_status = o.order_status, refund_status = o.refund_status
                });
                order.State = os;
                order.OrderGoodss[0].State = os;
                od.Order = order;
            }
            catch (Exception e)
            {
                od.Error = new OrderDownloadError(shop.Id, popOrderId, "", e.Message, e.StackTrace);
            }
            return(od);
        }
        private List <OrderDownload> GetOrders()
        {
            List <OrderDownload> allOrders = new List <OrderDownload>();

            int    totalCount = 0, currentCount = 0;
            int    totalPage = 0, currentPage = 1;
            string htmlRet  = this.wb1.GetTextAsync().Result;
            var    allShops = ServiceContainer.GetService <ShopService>().GetByAll().Datas;
            var    shop     = allShops.FirstOrDefault(obj => htmlRet.Contains(obj.PopSellerId));

            if (shop == null)
            {
                throw new Exception("系统中没有找到相应店铺");
            }

            while (this.isRunning)
            {
                string script = ScriptManager.GetBody(jspath, "//TAOBAO_SEARCH_ORDER").Replace("###prePageNo", (currentPage - 1 >= 0 ? currentPage - 1 : 1).ToString()).Replace("###pageNum", currentPage.ToString());
                var    task   = wb1.GetBrowser().MainFrame.EvaluateScriptAsync(script, "", 1, new TimeSpan(0, 0, 30));
                var    ret    = task.Result;

                if (ret.Success == false || (ret.Result != null && ret.Result.ToString().StartsWith("ERROR")))
                {
                    throw new Exception("执行操作失败:" + ret.Message);
                }
                var or = Newtonsoft.Json.JsonConvert.DeserializeObject <TaobaoQueryOrderListResponse>(ret.Result.ToString());
                if (or.page == null)
                {
                    throw new Exception("执行操作失败:返回数据格式无法识别");
                }
                if (or.mainOrders == null || or.mainOrders.Length < 1)
                {
                    break;
                }
                totalCount = or.page.totalNumber;
                totalPage  = or.page.totalPage;

                List <OrderDownload> orders = new List <OrderDownload>(1);
                foreach (var v in or.mainOrders)
                {
                    OrderDownload od = new OrderDownload();
                    orders.Clear();
                    orders.Add(od);
                    try
                    {
                        this.tbMsg.Text = string.Format("正在下载:{0}/{1} {2} ", currentCount, totalCount, v.id);
                        WPFHelper.DoEvents();
                        var odInDb = ServiceContainer.GetService <OrderService>().GetByPopOrderId(v.id);
                        if (odInDb.Total >= 1)
                        {
                            od.Order = odInDb.First;
                            var state = ConvertState(v.statusInfo.text);

                            //未发货订单,即使有退款商品,整个订单状态也是待发货不是退款中
                            if (state == OrderState.PAYED && v.subOrders.All(obj => obj.operations != null && (obj.operations.FirstOrDefault(op => op.text.Trim() == "退款成功" || op.text.Trim() == "请卖家处理" || op.text.Trim() == "请退款") != null)))
                            {
                                state = OrderState.RETURNING;
                            }

                            if (od.Order.State == state || od.Order.State == OrderState.CLOSED || od.Order.State == OrderState.CANCLED)
                            {
                                continue;
                            }
                            if (state == OrderState.RETURNING || state == OrderState.CLOSED || state == OrderState.CANCLED)
                            {
                                od.Order.State    = state;
                                od.Order.PopState = v.statusInfo.text;
                                var resp = ServiceContainer.GetService <OrderService>().Update(od.Order);
                            }
                        }
                        else
                        {
                            var order = ParseOrder(v, shop);
                            od.Order = order;
                            var resp = ServiceContainer.GetService <OrderService>().SaveOrUpdateOrdersByPopOrderId(shop, orders);
                            od = resp.First;
                        }

                        if (this.isRunning == false)
                        {
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        od.Error = new OrderDownloadError(shop.Id, v.id, "", ex.Message, ex.StackTrace);
                    }
                    finally
                    {
                        currentCount++;
                        allOrders.Add(od);
                    }
                }
                currentPage++;
            }
            return(allOrders);
        }