Ejemplo n.º 1
0
 public void Check_Winit(int OrderID)
 {
     var       package  = db.Packages.First(p => p.IsEnable.Value && p.OrderID.Value.Equals(OrderID));
     Winit_API winitAPI = new Winit_API();
     var       data2    = winitAPI.CancelOutboundOrder("WO2145568602");
     //TrackOrder track = new TrackOrder(package);
     //var result = track.Track(package.TrackingNumber);
     //var result2 = stock.WinitRecordShippedOrder(package.ID, data2.packageList.SelectMany(p => p.merchandiseList).ToList());
 }
Ejemplo n.º 2
0
        public TrackResult Winit_Track(CarrierAPI api, string trackingNum)
        {
            TrackResult result = new TrackResult();

            if (string.IsNullOrEmpty(trackingNum))
            {
                return(result);
            }

            Winit_API  winit = new Winit_API();
            OrderTrack track = winit.GetOrderTrack(trackingNum);

            if (winit.ResultError != null)
            {
                throw new Exception(winit.ResultError.msg);
            }

            if (track != null)
            {
                var Winit_EventList = track.trace.ToList();

                if (Winit_EventList.Any(e => e.eventCode == "DIC"))
                {
                    result.PickupDate     = Winit_EventList.FirstOrDefault(e => e.eventCode == "DIC")?.date;
                    result.DeliveryStatus = (int)DeliveryStatusType.Intransit;
                }

                result.DeliveryNote = Winit_EventList.OrderBy(e => e.date).Select(e => e.date + " " + e.eventDescription).Last();

                if (Winit_EventList.Any(e => e.eventCode == "DLC"))
                {
                    result.DeliveryDate   = Winit_EventList.FirstOrDefault(e => e.eventCode == "DLC")?.date;
                    result.DeliveryStatus = (int)DeliveryStatusType.Delivered;
                }
            }

            return(result);
        }
Ejemplo n.º 3
0
        public void ResendShippedOrder(int day)
        {
            string UserName = MyHelp.get_session("ApiUserName", Session, "*****@*****.**").ToString();
            string Password = MyHelp.get_session("ApiPassword", Session, "timfromweypro").ToString();

            var dateAgo = DateTime.Now.AddDays((0 - day));

            dateAgo = MyHelp.DateTimeWithZone(dateAgo, false);

            var SCWS              = new SC_WebService(UserName, Password);
            var stock             = new StockKeepingUnit();
            var winit             = new Winit_API();
            var winitWarehouseIDs = db.Warehouses.AsNoTracking().Where(w => w.IsEnable.Value & w.IsSellable.Value && !w.WinitWarehouseID.Equals("0")).ToDictionary(w => w.ID, w => w.WinitWarehouseID);

            var WinitShippingMethod = db.CarrierAPI.AsNoTracking().Where(api => api.IsEnable && api.Type.Value.Equals((byte)EnumData.CarrierType.Winit))
                                      .SelectMany(api => api.Carriers.Where(c => c.IsEnable)).SelectMany(c => c.ShippingMethod.Where(s => s.IsEnable)).Select(s => s.ID).Distinct().ToArray();
            var OrderFilter   = db.Orders.Where(o => o.TimeOfOrder.Value >= dateAgo);
            var PackageFilter = db.Packages.Where(p => p.ID.Equals(828842) && p.IsEnable.Value && !p.ProcessStatus.Equals((byte)EnumData.ProcessStatus.訂單管理) && !string.IsNullOrEmpty(p.WinitNo) && WinitShippingMethod.Contains(p.ShippingMethod.Value));
            var dataList      = OrderFilter.Join(PackageFilter, o => o.OrderID, p => p.OrderID.Value, (order, package) => new { order, package }).ToList();

            foreach (var data in dataList)
            {
                if (!data.package.Items.Where(i => i.IsEnable.Value).Any(i => i.SerialNumbers.Any()))
                {
                    var winitData       = winit.GetOutboundOrderData(data.package.WinitNo);
                    var merchandiseList = winitData.packageList.SelectMany(p => p.merchandiseList).ToList();
                    if (merchandiseList != null && merchandiseList.All(m => m.itemList != null))
                    {
                        try
                        {
                            var recordResult = stock.WinitRecordShippedOrder(data.package.ID, merchandiseList);
                            if (recordResult.Any())
                            {
                                foreach (var item in data.package.Items.Where(i => i.IsEnable.Value))
                                {
                                    var sku = item.ProductID.Split(new char[] { '-' })[0];
                                    if (recordResult.ContainsKey(sku))
                                    {
                                        foreach (var serial in recordResult[sku])
                                        {
                                            item.SerialNumbers.Add(new SerialNumbers()
                                            {
                                                OrderID      = item.OrderID,
                                                OrderItemID  = item.ID,
                                                ProductID    = item.ProductID,
                                                SerialNumber = serial
                                            });
                                        }

                                        Response.Write(string.Format("訂單【{0}】記錄成功:{1}<br />", data.order.OrderID, string.Join("、", recordResult[sku].ToArray())));
                                    }
                                }

                                db.SaveChanges();
                            }
                        }
                        catch (Exception ex)
                        {
                            Response.Write(string.Format("訂單【{0}】記錄失敗:{1}<br />", data.order.OrderID, ex.InnerException?.Message ?? ex.Message));
                        }
                    }
                }
            }
        }
Ejemplo n.º 4
0
        private void Dispatch(Packages package)
        {
            if (Order.StatusCode.Value.Equals((int)OrderStatusCode.InProcess) && Order.PaymentStatus.Equals((int)OrderPaymentStatus.Charged))
            {
                ThreadTask threadTask = new ThreadTask(string.Format("訂單下載 - 自動提交訂單【{0}】至待出貨區", Order.OrderID), Session);
                MyHelp.Log("Orders", Order.OrderID, string.Format("訂單下載 - 自動提交訂單【{0}】至待出貨區", Order.OrderID), Session);

                package.ProcessStatus = (int)EnumData.ProcessStatus.鎖定中;
                Packages.Update(package, package.ID);

                lock (Factory)
                {
                    threadTask.AddWork(Factory.StartNew(Session =>
                    {
                        threadTask.Start();

                        string message = "";
                        using (QDLogisticsEntities db = new QDLogisticsEntities())
                        {
                            IRepository <Packages> Packages       = new GenericRepository <Packages>(db);
                            IRepository <PickProduct> PickProduct = new GenericRepository <PickProduct>(db);

                            Packages packageData = Packages.Get(package.ID);

                            try
                            {
                                HttpSessionStateBase session = (HttpSessionStateBase)Session;
                                SC_WebService SCWS           = new SC_WebService("*****@*****.**", "timfromweypro");

                                if (!SCWS.Is_login)
                                {
                                    throw new Exception("SC is not login");
                                }

                                OrderStateInfo order = SCWS.Get_OrderStatus(packageData.OrderID.Value);

                                if ((int)order.PaymentStatus == package.Orders.PaymentStatus)
                                {
                                    ShipProcess shipProcess = new ShipProcess(SCWS);

                                    MyHelp.Log("Orders", packageData.OrderID, "提交至待出貨區", session);

                                    /***** 上傳Item出貨倉 *****/
                                    var SC_order = SCWS.Get_OrderData(packageData.OrderID.Value).Order;
                                    var SC_items = SC_order.Items.Where(i => i.PackageID.Equals(packageData.ID)).ToArray();
                                    foreach (var item in SC_items)
                                    {
                                        if (!db.Skus.AsNoTracking().Any(s => s.Sku.Equals(item.ProductID)))
                                        {
                                            throw new Exception(string.Format("系統尚未有品號 {0} 資料!", item.ProductID));
                                        }

                                        item.ShipFromWareHouseID = packageData.Items.First(i => i.IsEnable == true && i.ID == item.ID).ShipFromWarehouseID.Value;
                                        SCWS.Update_OrderItem(SC_items.First(i => i.ID.Equals(item.ID)));
                                    }
                                    MyHelp.Log("Orders", packageData.OrderID, "更新訂單包裹的出貨倉", session);

                                    /***** 更新客戶地址 *****/
                                    var address = SC_order.ShippingAddress;
                                    DataProcess.SetAddressData(packageData.Orders.Addresses, address, SC_order.BillingAddress);

                                    /***** 檢查運送國家 *****/
                                    if (!string.IsNullOrEmpty(packageData.Method.CountryData))
                                    {
                                        var countryData = JsonConvert.DeserializeObject <Dictionary <string, bool> >(packageData.Method.CountryData);
                                        if (!countryData.ContainsKey(packageData.Orders.Addresses.CountryCode.ToUpper()))
                                        {
                                            throw new Exception(string.Format("訂單【{0}】國家名稱不合,請重新確認", packageData.OrderID));
                                        }

                                        if (!countryData[packageData.Orders.Addresses.CountryCode.ToUpper()])
                                        {
                                            throw new Exception(string.Format("訂單【{0}】不可寄送至國家{1}", packageData.OrderID, packageData.Orders.Addresses.CountryName));
                                        }
                                    }

                                    shipProcess.Init(packageData);
                                    var result = shipProcess.Dispatch();

                                    if (result.Status)
                                    {
                                        MyHelp.Log("Orders", packageData.OrderID, "訂單提交完成", session);

                                        if (packageData.Items.First(i => i.IsEnable.Value).ShipWarehouses.Name.Equals("TWN"))
                                        {
                                            int[] itemIDs = packageData.Items.Where(i => i.IsEnable.Value).Select(i => i.ID).ToArray();
                                            List <PickProduct> pickList = PickProduct.GetAll(true).Where(p => itemIDs.Contains(p.ItemID.Value)).ToList();
                                            foreach (Items item in packageData.Items.Where(i => i.IsEnable == true))
                                            {
                                                PickProduct pick = pickList.FirstOrDefault(pk => pk.ItemID == item.ID);

                                                if (pick != null)
                                                {
                                                    pick.IsEnable  = true;
                                                    pick.IsPicked  = false;
                                                    pick.IsMail    = false;
                                                    pick.QtyPicked = 0;
                                                    DataProcess.setPickProductData(pick, item);
                                                    PickProduct.Update(pick, pick.ID);
                                                }
                                                else
                                                {
                                                    pick = new PickProduct()
                                                    {
                                                        IsEnable = true
                                                    };
                                                    DataProcess.setPickProductData(pick, item);
                                                    PickProduct.Create(pick);
                                                }
                                            }
                                            PickProduct.SaveChanges();
                                        }

                                        packageData.ProcessStatus = (int)EnumData.ProcessStatus.待出貨;
                                    }
                                    else
                                    {
                                        message = result.Message;
                                        packageData.ProcessStatus = (int)EnumData.ProcessStatus.訂單管理;
                                    }
                                }
                                else
                                {
                                    message = "Payment status is different";
                                    packageData.Orders.StatusCode = (int)OrderStatusCode.OnHold;
                                    packageData.ProcessStatus     = (int)EnumData.ProcessStatus.訂單管理;
                                }

                                Packages.Update(packageData, packageData.ID);
                                Packages.SaveChanges();
                            }
                            catch (Exception e)
                            {
                                message = e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message;
                                packageData.ProcessStatus = (int)EnumData.ProcessStatus.訂單管理;

                                if (!string.IsNullOrEmpty(package.WinitNo))
                                {
                                    Winit_API winit = new Winit_API();
                                    winit.CancelOutboundOrder(package.WinitNo);
                                    package.WinitNo = null;
                                }

                                Packages.Update(packageData, packageData.ID);
                                Packages.SaveChanges();
                            }
                        }

                        return(message);
                    }, Session));
                }
            }
        }
Ejemplo n.º 5
0
        public ActionResult GetSelectOption(List <string> optionType)
        {
            AjaxResult result = new AjaxResult();

            if (optionType.Any())
            {
                var optionList = new Dictionary <string, object>();

                try
                {
                    foreach (string type in optionType)
                    {
                        switch (type)
                        {
                        case "shippingMethod":
                            Method = new GenericRepository <ShippingMethod>(db);
                            optionList.Add(type, Method.GetAll(true).Where(m => m.IsEnable).Select(m => new { text = m.Name, value = m.ID }));
                            break;

                        case "carrier":
                            Carriers = new GenericRepository <Carriers>(db);
                            optionList.Add(type, Carriers.GetAll(true).Where(c => c.IsEnable).Select(c => new
                            {
                                text  = string.Format("{0}【{1}】", c.Name, (c.CarrierAPI != null ? c.CarrierAPI.Name : "無")),
                                value = c.ID,
                                type  = c.CarrierAPI != null ? Enum.GetName(typeof(EnumData.CarrierType), c.CarrierAPI.Type) : ""
                            }).ToList());
                            break;

                        case "methodType":
                            var FedEx_shippingMethod = Enum.GetValues(typeof(FedExShipService.ServiceType)).Cast <FedExShipService.ServiceType>().Select(b => new { text = b.ToString(), value = (int)b }).ToList();

                            Winit_API winit = new Winit_API();
                            List <deliveryWayData> deliveryWay = new List <deliveryWayData>();
                            foreach (var warehouse in winit.warehouseIDs)
                            {
                                deliveryWay.AddRange(winit.GetDeliveryWay(warehouse.Value).data.ToObject <deliveryWayData[]>());
                            }

                            var Winit_shippingMethod = deliveryWay.OrderBy(w => w.deliveryID).Select(w => new { text = w.deliveryWay, value = int.Parse(w.deliveryID) }).Distinct().ToList();

                            IDS_API IDS   = new IDS_API();
                            int     index = 0;
                            var     IDS_shippingMethod = IDS.GetServiceTypeList().Select(s => new { text = s, value = index++ }).ToList();

                            optionList.Add(type, new Dictionary <string, object>()
                            {
                                { "FedEx", FedEx_shippingMethod }, { "DHL", null }, { "Winit", Winit_shippingMethod }, { "IDS", IDS_shippingMethod }
                            });
                            break;

                        case "boxType":
                            var FedEx_boxType = Enum.GetValues(typeof(FedExShipService.PackagingType)).Cast <FedExShipService.PackagingType>().Select(b => new { text = b.ToString(), value = (int)b }).ToList();

                            optionList.Add(type, new Dictionary <string, object>()
                            {
                                { "FedEx", FedEx_boxType }
                            });
                            break;

                        case "carrierApi":
                            CarrierAPI = new GenericRepository <CarrierAPI>(db);
                            List <object> apiList = new List <object>()
                            {
                                new { text = "無", value = 0 }
                            };
                            apiList.AddRange(CarrierAPI.GetAll(true).Where(a => a.IsEnable).Select(a => new { text = a.Name, value = a.Id }));
                            optionList.Add(type, apiList);
                            break;
                        }
                    }

                    result.data = optionList;
                }
                catch (Exception e)
                {
                    result.status  = false;
                    result.message = e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message;
                }
            }

            return(Json(result, JsonRequestBehavior.AllowGet));
        }