public ActionResult GetOrder(List <string> orderIDs) { SyncResult result = new SyncResult(); if (!orderIDs.Any()) { return(Content(JsonConvert.SerializeObject(result.set_error("沒有取得訂單號碼!")), "appllication/json")); } try { TaskFactory factory = System.Web.HttpContext.Current.Application.Get("TaskFactory") as TaskFactory; foreach (string orderID in orderIDs) { ThreadTask threadTask = new ThreadTask(string.Format("訂單管理區 - 訂單【{0}】資料同步", orderID)); lock (factory) { threadTask.AddWork(factory.StartNew(Session => { threadTask.Start(); string message = ""; HttpSessionStateBase session = (HttpSessionStateBase)Session; try { SyncProcess Sync = new SyncProcess(session); message = Sync.Sync_Order(int.Parse(orderID)); } catch (DbEntityValidationException ex) { var errorMessages = ex.EntityValidationErrors.SelectMany(x => x.ValidationErrors).Select(x => x.ErrorMessage); message = string.Join("; ", errorMessages); } catch (Exception e) { message = e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message; } return(message); }, HttpContext.Session)); } } } catch (Exception e) { return(Content(JsonConvert.SerializeObject(result.set_error(e.Message)), "appllication/json")); } return(Content(JsonConvert.SerializeObject(result), "appllication/json")); }
public void Receive() { try { using (LinkReceive receive = new LinkReceive(HttpContext.Request.Url.Query)) { CaseEvent eventData = db.CaseEvent.AsNoTracking().FirstOrDefault(c => c.ID.Equals(receive.CaseID)); if (eventData == null) { throw new Exception("找不到Case Event!"); } if (!eventData.Status.Equals((byte)EnumData.CaseEventStatus.Open)) { throw new Exception("執行動作無效!"); } Packages package = db.Packages.AsNoTracking().FirstOrDefault(p => p.IsEnable.Value && p.ID.Equals(eventData.PackageID)); if (package == null) { throw new Exception("找不到訂單!"); } using (CaseLog CaseLog = new CaseLog(package, Session)) { Label = new GenericRepository <DirectLineLabel>(db); TaskFactory factory = System.Web.HttpContext.Current.Application.Get("TaskFactory") as TaskFactory; switch (receive.Type) { case (byte)EnumData.CaseEventType.CancelShipment: if (!receive.Request.Equals((byte)EnumData.CaseEventRequest.Failed) && !receive.ReturnWarehouseID.HasValue) { throw new Exception("沒有選擇退貨倉!"); } CaseLog.CancelShipmentResponse(receive.Request, receive.ReturnWarehouseID); eventData = CaseLog.GetCaseEvent(EnumData.CaseEventType.CancelShipment); if (eventData.Request.Equals((byte)EnumData.CaseEventRequest.Successful) && eventData.Status.Equals((byte)EnumData.CaseEventStatus.Locked)) { ThreadTask threadTask = new ThreadTask(string.Format("Direct Line 訂單【{0}】同步資料", package.OrderID)); threadTask.AddWork(factory.StartNew(() => { threadTask.Start(); SyncProcess sync = new SyncProcess(Session); return(sync.Sync_Order(package.OrderID.Value)); })); DirectLineLabel label = db.DirectLineLabel.AsNoTracking().First(l => l.IsEnable && l.LabelID.Equals(eventData.LabelID)); label.Status = (byte)EnumData.LabelStatus.作廢; Label.Update(label, label.LabelID); Label.SaveChanges(); } break; case (byte)EnumData.CaseEventType.UpdateShipment: CaseLog.UpdateShipmentResponse(receive.Request); break; case (byte)EnumData.CaseEventType.ChangeShippingMethod: eventData = CaseLog.ChangeShippingMethodResponse(receive.Request); if (eventData.Request.Equals((byte)EnumData.CaseEventRequest.Successful) && eventData.Status.Equals((byte)EnumData.CaseEventStatus.Close)) { package = db.Packages.Find(eventData.PackageID); if (!string.IsNullOrEmpty(package.TrackingNumber)) { ThreadTask threadTask = new ThreadTask(string.Format("Direct Line 訂單【{0}】SC更新", package.OrderID)); threadTask.AddWork(factory.StartNew(() => { threadTask.Start(); SyncProcess sync = new SyncProcess(Session); return(sync.Update_Tracking(package)); })); } } break; case (byte)EnumData.CaseEventType.ResendShipment: eventData = CaseLog.ResendShipmentResponse(receive.Request); if (eventData.Request.Equals((byte)EnumData.CaseEventRequest.Successful) && eventData.Status.Equals((byte)EnumData.CaseEventStatus.Close)) { DirectLineLabel label = db.DirectLineLabel.AsNoTracking().First(l => l.IsEnable && l.LabelID.Equals(eventData.NewLabelID)); package = db.Packages.AsNoTracking().First(p => p.ID.Equals(label.PackageID)); if (!string.IsNullOrEmpty(package.TrackingNumber)) { label.Status = (byte)EnumData.LabelStatus.完成; ThreadTask threadTask = new ThreadTask(string.Format("Direct Line 訂單【{0}】SC更新", package.OrderID)); threadTask.AddWork(factory.StartNew(() => { threadTask.Start(); SyncProcess sync = new SyncProcess(Session); return(sync.Update_Tracking(package)); })); } Label.Update(label, label.LabelID); Label.SaveChanges(); } break; case (byte)EnumData.CaseEventType.ReturnPackage: CaseLog.ReturnPackageResponse(receive.Request); break; } } } Response.Write("Success!"); } catch (Exception e) { Response.Write(e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message); } }