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()); }
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); }
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)); } } } } }
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)); } } }
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)); }