private void UpdatePurchaseOrder(Packages package, int reTry = 0) { try { TaskFactory factory = System.Web.HttpContext.Current.Application.Get("TaskFactory") as TaskFactory; ThreadTask threadTask = new ThreadTask(string.Format("直發商待出貨區 - 更新訂單【{0}】以及PO【{1}】資料至SC", package.OrderID, package.POId)); lock (factory) { threadTask.AddWork(factory.StartNew(session => { threadTask.Start(); string error = ""; try { HttpSessionStateBase Session = (HttpSessionStateBase)session; SyncProcess Sync = new SyncProcess(Session); error = Sync.Update_PurchaseOrder(package.ID); } catch (Exception e) { error = e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message; } return(error); }, HttpContext.Session)); } } catch (Exception e) { throw e; } }
public void UpdatePurchaseOrder(int PackageID) { SyncProcess Sync = new SyncProcess(Session); Sync.Update_PurchaseOrder(PackageID); }
public ActionResult Dispatch(int[] packageIDs, int?method, string tracking) { AjaxResult result = new AjaxResult(); try { if (!packageIDs.Any()) { throw new Exception("沒有給訂單!"); } int warehouseID = 0; if (!int.TryParse(Session["warehouseId"].ToString(), out warehouseID)) { throw new Exception("找不到出貨倉!"); } SC_WebService SCWS = new SC_WebService(Session["ApiUserName"].ToString(), Session["ApiPassword"].ToString()); if (!SCWS.Is_login) { throw new Exception("SC is not login"); } Packages = new GenericRepository <Packages>(db); IRepository <Box> Box = new GenericRepository <Box>(db); IRepository <DirectLineLabel> Label = new GenericRepository <DirectLineLabel>(db); TaskFactory factory = System.Web.HttpContext.Current.Application.Get("TaskFactory") as TaskFactory; ThreadTask threadTask = new ThreadTask("Dropship DL 訂單 Dispatch"); lock (factory) { threadTask.AddWork(factory.StartNew(Session => { threadTask.Start(); string message = ""; HttpSessionStateBase session = (HttpSessionStateBase)Session; try { TimeZoneConvert timeZoneConvert = new TimeZoneConvert(); List <Packages> dispatchList = new List <Packages>(); List <string> errorList = new List <string>(); List <Packages> packageList = db.Packages.AsNoTracking().Where(p => p.IsEnable.Value && packageIDs.Contains(p.ID)).ToList(); DirectLine directLine = db.DirectLine.Find(packageList[0].Method.DirectLine); string boxID = string.Format("{0}-{1}", directLine.Abbreviation, timeZoneConvert.Utc.ToString("yyyyMMdd")); int count = db.Box.Where(b => b.IsEnable && b.DirectLine.Equals(directLine.ID) && b.BoxID.Contains(boxID)).Select(b => b.MainBox).Distinct().Count() + 1; byte[] Byte = BitConverter.GetBytes(count); Byte[0] += 64; boxID = string.Format("{0}-{1}", boxID, System.Text.Encoding.ASCII.GetString(Byte.Take(1).ToArray())); foreach (Packages package in packageList) { DirectLineLabel label = package.Label; OrderData order = SCWS.Get_OrderData(package.OrderID.Value); if (CheckOrderStatus(package, order.Order)) { ThreadTask uploadPOTask = new ThreadTask(string.Format("直發商待出貨區 - 更新訂單【{0}】以及PO【{1}】資料至SC", package.OrderID, package.POId), session); lock (factory) { uploadPOTask.AddWork(factory.StartNew(() => { uploadPOTask.Start(); string error = ""; try { SyncProcess Sync = new SyncProcess(session, factory); error = Sync.Update_PurchaseOrder(package.ID, false); if (string.IsNullOrEmpty(error)) { //if (directLine.Abbreviation.Equals("ECOF")) //{ // ThreadTask SyncTask = new ThreadTask(string.Format("Direct Line 訂單【{0}】SC更新", package.OrderID)); // SyncTask.AddWork(factory.StartNew(() => // { // SyncTask.Start(); // SyncProcess sync = new SyncProcess(session); // return sync.Update_Tracking(package); // })); //} //else //{ // foreach (Items item in package.Items.Where(i => i.IsEnable.Value).ToList()) // { // if (item.SerialNumbers.Any()) SCWS.Update_ItemSerialNumber(item.ID, item.SerialNumbers.Select(s => s.SerialNumber).ToArray()); // } //} foreach (Items item in package.Items.Where(i => i.IsEnable.Value).ToList()) { if (item.SerialNumbers.Any()) { SCWS.Update_ItemSerialNumber(item.ID, item.SerialNumbers.Select(s => s.SerialNumber).ToArray()); } } } } catch (Exception e) { error = e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message; } return(error); })); } package.ProcessStatus = (int)EnumData.ProcessStatus.已出貨; package.BoxID = label.BoxID = boxID; label.Status = (byte)EnumData.LabelStatus.正常; dispatchList.Add(package); } else { MyHelp.Log("DirectLineLabel", label.LabelID, string.Format("標籤【{0}】狀態異常", label.LabelID), session); package.Orders.StatusCode = (int)order.Order.StatusCode; package.Orders.PaymentStatus = (int)order.Order.PaymentStatus; label.Status = (byte)EnumData.LabelStatus.鎖定中; if (order.Order.StatusCode.Equals((int)OrderStatusCode.Canceled)) { label.Status = (byte)EnumData.LabelStatus.作廢; SerialNumbers = new GenericRepository <SerialNumbers>(db); foreach (var ss in SerialNumbers.GetAll().Where(s => s.OrderID.Equals(package.OrderID))) { SerialNumbers.Delete(ss); } ; } errorList.Add(string.Format("標籤【{0}】狀態異常,請重新取出!", package.OrderID.Value)); } Packages.Update(package, package.ID); Label.Update(label, label.LabelID); } if (dispatchList.Any()) { Box box = new Box() { IsEnable = true, BoxID = boxID, MainBox = boxID, DirectLine = directLine.ID, FirstMileMethod = method ?? 0, WarehouseFrom = warehouseID, ShippingStatus = method.HasValue ? (byte)EnumData.DirectLineStatus.運輸中 : (byte)EnumData.DirectLineStatus.已到貨, BoxType = (byte)EnumData.DirectLineBoxType.DirectLine, TrackingNumber = tracking, Create_at = timeZoneConvert.Utc }; db.Entry(box).State = System.Data.Entity.EntityState.Added; db.SaveChanges(); MyHelp.Log("Box", boxID, string.Format("Box【{0}】建立成功", boxID), session); MyHelp.Log("Box", box.BoxID, string.Format("寄送 Box【{0}】DL資料", box.BoxID), session); SendMailToCarrier(box, db.DirectLine.AsNoTracking().First(d => d.ID.Equals(box.DirectLine))); MyHelp.Log("Box", box.BoxID, string.Format("Box【{0}】完成出貨", box.BoxID), session); } Packages.SaveChanges(); if (errorList.Any()) { message = string.Join("\n", errorList.ToArray()); } } catch (Exception e) { message = e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message; } return(message); }, HttpContext.Session)); } } 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)); }