Ejemplo n.º 1
0
        //开始执行操作
        private bool StartRun(object obj)
        {
            int StartIndex = 0;

            MYDZ.Business.Business_Logic.Order.InitTradeInfo iti = new Business_Logic.Order.InitTradeInfo();
            bool                   Result             = false;
            string                 ErrorMsg           = null;
            bool                   HasNext            = false;
            long                   TotalResults       = 0;
            Hashtable              ht                 = null;
            TradesSoldGet          TradesSold         = null;
            tbClientUser           clientuser         = null;
            tbOrdersConfig         ordersConfig       = null;
            List <Trade>           listtrade          = null;
            IList <StoreLogistics> StoreLogisticsList = null;
            tbOrdersInfo           OrdersInfo         = null;

            if (obj != null)
            {
                ht           = new Hashtable();
                TradesSold   = new TradesSoldGet();
                clientuser   = new tbClientUser();
                ordersConfig = new tbOrdersConfig();

                ht                 = obj as Hashtable;
                clientuser         = ht["clientuser"] as tbClientUser;
                TradesSold         = ht["TradesSoldGet"] as TradesSoldGet;
                StoreLogisticsList = ht["LogisticsList"] as List <StoreLogistics>;
                ordersConfig       = ht["Config"] as tbOrdersConfig;

                //获取从上一次同步到现在产生的订单,否则获取店铺一个星期的未完成订单
                DateTime LastModifyTime = ht["LastModifyTime"] == null ? new DateTime() : Convert.ToDateTime(ht["LastModifyTime"].ToString());
                if (LastModifyTime != new DateTime())
                {
                    TradesSold.StartCreated = Convert.ToDateTime(LastModifyTime.ToString("yyyy-MM-dd HH:mm:ss"));
                }
                else
                {
                    TradesSold.StartCreated = Convert.ToDateTime(DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd HH:mm:ss"));
                }
                if (TradesSold.EndCreated == null)
                {
                    TradesSold.EndCreated = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                }

                while (true)
                {
                    string Errormsg = null;
                    List <tbOrdersInfo> listOrdersInfo = new List <tbOrdersInfo>();
                    listtrade = new List <Trade>();

                    //获取未完成订单
                    TradesSold.Status = "WAIT_SELLER_SEND_GOODS";

                    //获取淘宝默认数量的订单
                    listtrade = iti.GetTradesSold(clientuser.UserShops[0].SessionKey, TradesSold, out ErrorMsg, out HasNext, out TotalResults);

                    if (listtrade == null || TotalResults == 0)
                    {
                        break;
                    }
                    try
                    {
                        //这里写得到临时数据
                        //遍历订单
                        foreach (Trade trade in listtrade)
                        {
                            try
                            {
                                OrdersInfo = new tbOrdersInfo();

                                //获取订单的详细信息
                                OrdersInfo = iti.GetTradeFullinfo(clientuser.UserShops[0].SessionKey, trade.Tid.ToString(), clientuser.UserShops[0].Shop.ShopId, out Errormsg);

                                //这里做物流解析
                                string[] LogisticsList = Comm.Distribution(StoreLogisticsList, OrdersInfo.LogisticsStr);
                                if (LogisticsList != null)
                                {
                                    OrdersInfo.IsFree = bool.Parse(LogisticsList[0]);
                                    OrdersInfo.Logistics.LogisticsId = int.Parse(LogisticsList[1]);;
                                    if (OrdersInfo.OrdersFreight == 0)
                                    {
                                        OrdersInfo.IsFree = true;
                                    }
                                }

                                //拆单、并单
                                Comm.MergeOrder(ordersConfig, listOrdersInfo, OrdersInfo);

                                // 检查订单配置关系
                                Comm.StatusAssign(ordersConfig, OrdersInfo);

                                //物流分配
                                bool IsOk = Comm.DeliveryAssign(ordersConfig, StoreLogisticsList, OrdersInfo);
                                if (!IsOk && ordersConfig.LogisticsDis && StoreLogisticsList != null && StoreLogisticsList.Count > 0)
                                {
                                    string target = String.IsNullOrEmpty(OrdersInfo.Consignee.District) ? OrdersInfo.Consignee.City : OrdersInfo.Consignee.District;
                                    if (!String.IsNullOrEmpty(target))
                                    {
                                        List <string> CompayList = GetLogisticsIdList((OrdersInfo.CashOndelivery ? "cod" : "online"), "", target.Trim());

                                        //根据物流配送范围和物流优先级别分配订单物流信息
                                        Comm.RangeDelivery(StoreLogisticsList, OrdersInfo, CompayList);
                                    }
                                }

                                //解析订单是否需要打印发货单
                                Comm.AnalyticalInvoice(ordersConfig, StoreLogisticsList, OrdersInfo);

                                //修改订单备注旗帜
                                UpdateDeital(OrdersInfo, ordersConfig, clientuser.UserShops[0].SessionKey);
                            }
                            catch (Exception ex)
                            {
                                continue;
                            }
                        }

                        StartIndex++;

                        //这里写插入数据库临时表
                        if (CheckAndInsertOrders(listOrdersInfo))
                        {
                            if (StartIndex == 1)
                            {
                                clientuser.StartIndex = StartIndex;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        continue;
                    }
                    if (HasNext)
                    {
                        TradesSold.PageNo++;
                    }
                    else
                    {
                        break;
                    }
                }
            }
            return(Result);
        }