コード例 #1
0
 public void OnOrderCancel(ResturantPlatformType platformType, OrderCancelInfo orderInfo)
 {
     using (Way.Lib.CLog log = new Way.Lib.CLog("取消订单"))
     {
         log.LogJson(orderInfo);
     }
 }
コード例 #2
0
        /// <summary>
        /// Executes Discontinue Order operation.
        /// Checks if order is in progress, then executes if it is.
        /// Otherwise, throws a WorkflowException.
        /// </summary>
        /// <param name="order"></param>
        /// <param name="info"></param>
		public void Execute(Order order, OrderCancelInfo info)
		{
			if (order.Status == OrderStatus.IP)
				order.Discontinue(info);
			else
				throw new WorkflowException(string.Format("Order with status {0} cannot be discontinued.", order.Status));
		}
コード例 #3
0
        public UnmergeOrderResponse UnmergeOrder(UnmergeOrderRequest request)
        {
            Platform.CheckForNullReference(request, "request");
            Platform.CheckMemberIsSet(request.OrderRef, "OrderRef");

            // reason is not required for dry run, but otherwise it is
            if (!request.DryRun && request.UnmergeReason == null)
            {
                throw new ArgumentNullException("UnmergeReason");
            }

            DryRunHelper(request.DryRun,
                         delegate
            {
                var destinationOrder = this.PersistenceContext.Load <Order>(request.OrderRef);
                var sourceOrders     = destinationOrder.MergeSourceOrders;
                if (sourceOrders.Count == 0)
                {
                    throw new RequestValidationException("This order does not have any orders to un-merge.");
                }

                // load the reason; if reason is null (eg dry run), just get the first available reason
                var reason = request.UnmergeReason == null ?
                             CollectionUtils.FirstElement(PersistenceContext.GetBroker <IEnumBroker>().Load <OrderCancelReasonEnum>(false))
                                                : EnumUtils.GetEnumValue <OrderCancelReasonEnum>(request.UnmergeReason, PersistenceContext);

                var cancelInfo = new OrderCancelInfo(reason, this.CurrentUserStaff, "Un-merged");
                var accBroker  = PersistenceContext.GetBroker <IAccessionNumberBroker>();

                // do unmerge
                UnmergeHelper(sourceOrders, cancelInfo, accBroker);
            });

            return(new UnmergeOrderResponse());
        }
コード例 #4
0
        private void UnmergeHelper(IEnumerable <Order> sourceOrders, OrderCancelInfo cancelInfo, IAccessionNumberBroker accBroker)
        {
            foreach (var order in sourceOrders)
            {
                string failureReason;
                if (!order.CanUnmerge(cancelInfo, out failureReason))
                {
                    throw new RequestValidationException(failureReason);
                }

                var result           = order.Unmerge(cancelInfo, accBroker.GetNext());
                var replacementOrder = result.ReplacementOrder;
                PersistenceContext.Lock(replacementOrder, DirtyState.New);

                // sync state so that ghost procedures get OIDs, prior to queuing ghost HL7 events
                PersistenceContext.SynchState();

                // notify HL7 of cancelled procedures (now existing as ghosts on dest order)
                foreach (var procedure in result.GhostProcedures)
                {
                    LogicalHL7Event.ProcedureCancelled.EnqueueEvents(procedure);
                }

                // if the replacement order is not terminated
                if (!replacementOrder.IsTerminated)
                {
                    // notify HL7 of replacement
                    LogicalHL7Event.OrderCreated.EnqueueEvents(replacementOrder);

                    // recur on items that were merged into this order
                    UnmergeHelper(replacementOrder.MergeSourceOrders, cancelInfo, accBroker);
                }
            }
        }
コード例 #5
0
        public void Test_Execute_Scheduling()
        {
            Order order = new Order();
            OrderCancelInfo info = new OrderCancelInfo();
            DiscontinueOrderOperation op = new DiscontinueOrderOperation();

            Assert.AreEqual(OrderStatus.SC, order.Status);

            op.Execute(order, info);
        }
コード例 #6
0
        public void Test_Execute_Scheduling()
        {
            Order                     order = new Order();
            OrderCancelInfo           info  = new OrderCancelInfo();
            DiscontinueOrderOperation op    = new DiscontinueOrderOperation();

            Assert.AreEqual(OrderStatus.SC, order.Status);

            op.Execute(order, info);
        }
コード例 #7
0
 /// <summary>
 /// Executes Cancel Order operation.
 /// Checks if order is in scheduling state, then executes if it is.
 /// Otherwise, throws a WorkflowException.
 /// </summary>
 /// <param name="order"></param>
 /// <param name="info"></param>
 public void Execute(Order order, OrderCancelInfo info)
 {
     if (order.Status == OrderStatus.SC)
     {
         order.Cancel(info);
     }
     else
     {
         throw new WorkflowException(string.Format("Order with status {0} cannot be cancelled.", order.Status));
     }
 }
コード例 #8
0
        public void Test_Execute_Cancel()
        {
            Order                order = new Order();
            OrderCancelInfo      info  = new OrderCancelInfo();
            CancelOrderOperation op    = new CancelOrderOperation();

            order.Cancel(new OrderCancelInfo());
            order.UpdateStatus();
            Assert.AreEqual(OrderStatus.CA, order.Status);

            op.Execute(order, info);
        }
コード例 #9
0
        public void Test_Execute()
        {
            Order order = new Order();
            OrderCancelInfo info = new OrderCancelInfo();
            CancelOrderOperation op = new CancelOrderOperation();

            Assert.AreEqual(OrderStatus.SC, order.Status);

            op.Execute(order, info);
            order.UpdateStatus();

            Assert.AreEqual(OrderStatus.CA, order.Status);
        }
コード例 #10
0
        public void Test_Execute_InProgress()
        {
            Order order = new Order();
            OrderCancelInfo info = new OrderCancelInfo();
            CancelOrderOperation op = new CancelOrderOperation();
            Procedure procedure = new Procedure();
            ModalityProcedureStep step = new ModalityProcedureStep(procedure, "New modality.", new Healthcare.Modality());
            order.AddProcedure(procedure);

            step.Start(new Staff());
            Assert.AreEqual(OrderStatus.IP, order.Status);

            op.Execute(order, info);
        }
コード例 #11
0
        public void Test_Execute_InProgress()
        {
            Order                 order     = new Order();
            OrderCancelInfo       info      = new OrderCancelInfo();
            CancelOrderOperation  op        = new CancelOrderOperation();
            Procedure             procedure = new Procedure();
            ModalityProcedureStep step      = new ModalityProcedureStep(procedure, "New modality.", new Healthcare.Modality());

            order.AddProcedure(procedure);

            step.Start(new Staff());
            Assert.AreEqual(OrderStatus.IP, order.Status);

            op.Execute(order, info);
        }
コード例 #12
0
        public void Test_Execute_Complete()
        {
            Order order = new Order();
            OrderCancelInfo info = new OrderCancelInfo();
            DiscontinueOrderOperation op = new DiscontinueOrderOperation();
            Procedure procedure = new Procedure();
            ModalityProcedureStep step = new ModalityProcedureStep(procedure, "New modality.", new Healthcare.Modality());
            order.AddProcedure(procedure);

            step.Start(new Staff());
            procedure.Complete(DateTime.Now);
            order.UpdateStatus();
            Assert.AreEqual(OrderStatus.CM, order.Status);

            op.Execute(order, info);
        }
コード例 #13
0
        public void Test_Execute_Complete()
        {
            Order                     order     = new Order();
            OrderCancelInfo           info      = new OrderCancelInfo();
            DiscontinueOrderOperation op        = new DiscontinueOrderOperation();
            Procedure                 procedure = new Procedure();
            ModalityProcedureStep     step      = new ModalityProcedureStep(procedure, "New modality.", new Healthcare.Modality());

            order.AddProcedure(procedure);

            step.Start(new Staff());
            procedure.Complete(DateTime.Now);
            order.UpdateStatus();
            Assert.AreEqual(OrderStatus.CM, order.Status);

            op.Execute(order, info);
        }
コード例 #14
0
        public TaskStatus Handle(IHttpProxy httpHandler)
        {
            httpHandler.ResponseContentType = "application/json";

            var forms = httpHandler.Form.ToObject <SortedDictionary <string, string> >();

            try
            {
                if (forms.Count > 0)
                {
                    //验证sign
                    var config = new Config(ResturantFactory.ResturantListener.OnGetPlatformConfigXml(ResturantPlatformType.Meituan));
                    if (forms["sign"] != MeituanHelper.Sign(forms, config.SignKey))
                    {
                        throw new Exception("签名验证失败");
                    }

                    OrderCancelInfo info = new OrderCancelInfo();
                    info.ErpStoreID = int.Parse(forms["ePoiId"]);
                    var orderCancelObj = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(forms["orderCancel"]);
                    info.OrderID = orderCancelObj.Value <string>("orderId");
                    info.Reason  = orderCancelObj.Value <string>("reason");

                    new Thread(() =>
                    {
                        try
                        {
                            ResturantFactory.ResturantListener.OnOrderCancel(ResturantPlatformType.Meituan, info);
                        }
                        catch { }
                    }).Start();
                }
            }
            catch (Exception ex)
            {
                using (Log log = new Log("美团CancelOrderCallback解析错误"))
                {
                    log.Log(ex.ToString());
                }
            }
            httpHandler.ResponseWrite("{\"data\":\"OK\"}");
            return(TaskStatus.Completed);
        }
コード例 #15
0
        private static void CancelOrderHelper(Order order, OrderCancelInfo info)
        {
            var operation = new CancelOrDiscontinueOrderOperation();

            operation.Execute(order, info);
        }
コード例 #16
0
 public void OnOrderCancel(ResturantPlatformType platformType, OrderCancelInfo orderInfo)
 {
 }
コード例 #17
0
        public void Test_Execute_Cancel()
        {
            Order order = new Order();
            OrderCancelInfo info = new OrderCancelInfo();
            DiscontinueOrderOperation op = new DiscontinueOrderOperation();

            order.Cancel(new OrderCancelInfo());
            order.UpdateStatus();
            Assert.AreEqual(OrderStatus.CA, order.Status);

            op.Execute(order, info);
        }
コード例 #18
0
 public void OnOrderCancel(ResturantPlatformType platformType, OrderCancelInfo orderInfo)
 {
     throw new NotImplementedException();
 }