コード例 #1
0
ファイル: OrderTab.cs プロジェクト: AlexBroecker/WIP_PC
        public static void TransportOrderFailed(TransportOrder ta, string exit_reason)
        {
            try
            {
                if (ta == null)
                {
                    return;
                }

                log.Error($"order failed : {ta}");
                ta.State       = TransportOrder.OrderStates.Error;
                ta.exit_reason = exit_reason;
                ta.exit_time   = DateTime.Now;
                ta.Update();

                // release hooks
                Main.Database.Execute("UPDATE Rack SET Order_ID=0 WHERE Order_ID=@0", ta.ID);
                // release trolleys and loading stations
                Main.Database.Execute("UPDATE Units SET Reserved=0 WHERE Reserved=@0", ta.ID);
                Main.Database.Execute("UPDATE AGVLocations SET start_wanted=0, confirmation_is_on=0, storage_order_id=0 " +
                                      "WHERE storage_order_id=@0", ta.ID);

                if (ta.LoadingStation != 0)
                {
                    Main.Database.Execute("UPDATE Units SET barcode='', barcode_bad=0, barcode_ok=0 "
                                          + " WHERE Unit_ID >= 11 AND Unit_ID <= 13 and Reserved=@0", ta.ID);
                }

                if (ta.IsAgvOrder && ta.MovingInside)
                {
                    int cnt = Main.Database.Execute("UPDATE StorageOrders SET Status='error', OrderState=@2 " +
                                                    " WHERE NOT Status IN ('done', 'error', 'timeout') AND AGV_location_machinename=@1 " +
                                                    " AND ID <> @0 AND rewind_code=@3 AND Target=1 AND Source<>1",
                                                    ta.ID, ta.AGV_location_machinename, TransportOrder.OrderStates.Error,
                                                    ta.rewind_code);

                    if (cnt > 0)
                    {
                        log.Warn($"{cnt} other orders canceled, because of failed order {ta.ID} from {ta.SimpleMachineName} to WIP");
                    }
                }

                var mvs = Main.Database.Fetch <MoveOrderEntry>("WHERE NOT Status IN ('done', 'error', 'timeout') AND Order_ID = @0", ta.ID);
                foreach (var move in mvs)
                {
                    move.MoveStatus = MoveOrderStatus.error;
                    move.Update();
                }

                var tw = Main.Database.FirstOrDefault <TransportOrder>("WHERE WaitForTransport_ID=@0", ta.ID);
                if (tw != null)
                {
                    TransportOrderFailed(tw, "dependent order canceled " + exit_reason);  // den auf uns wartenden auch abbrechen
                }
            }
            catch (Exception ex)
            {
                log.Error($"Error canceling order {ta}", ex);
            }
        }
コード例 #2
0
        public dynamic ProcessExternalOrders(dynamic p)
        {
            try
            {
                var orders = this.Bind <DataList <OrderEntry> >();
                if (orders == null)
                {
                    return(HttpStatusCode.NoContent);
                }

                var dborders = Main.Database.Query <TransportOrder>("WHERE ID >= 0");
                foreach (OrderEntry item in orders.data)
                {
                    TransportOrder found = null;
                    foreach (var dbo in dborders)
                    {
                        if (item.id == dbo.ID)
                        {
                            found = dbo;
                        }
                    }

                    log.Debug($"rest got order state {item.OrderState} direction {item.Direction} label {item.Label} job {item.JobNumber} priority {item.Priority} rewind {item.RewindCode}");

                    if (found == null)
                    {
                        // new order from as400
                        if (item.OrderState == 1)
                        {
                            TransportOrder dbn = new TransportOrder()
                            {
                                ID       = item.id,
                                Priority = item.Priority,
                                // OrderState = item.OrderState,
                                AGV           = 0,
                                AGVdest       = 0,
                                CylinderState = item.CylinderState,
                                Diameter      = item.Diameter,
                                Direction     = item.Direction,
                                Label         = item.Label ?? "",
                                ItemNumber    = item.ItemNumber ?? "",
                                JobNumber     = item.JobNumber ?? "",

                                AGV_location_machinename = item.MachineName ?? "",
                                rewind_code = item.RewindCode,
                                manual_mode = item.ManualMode,

                                Inserted   = DateTime.UtcNow,
                                LastChange = DateTime.UtcNow,

                                AGVrequested = new DateTime(2000, 1, 1),
                                AGVdone      = new DateTime(2000, 1, 1),
                                AGVsource    = 0,
                                LSReached    = new DateTime(2000, 1, 1),
                            };

                            dbn.State = TransportOrder.OrderStates.New;

                            if (dbn.manual_mode != 0)
                            {
                                dbn.State = TransportOrder.OrderStates.ManualMode;
                            }

                            if (item.Direction.In(2, 3, 4))  // outgoing
                            {
                                dbn.TransportSource = TransportOrder.Destinations.Storage;
                                dbn.TransportTarget = TransportOrder.Destinations.Press;
                                if (dbn.AGV_location_machinename.ToLowerInvariant().Contains("lam"))
                                {
                                    dbn.TransportTarget = TransportOrder.Destinations.Laminator;
                                }
                                // todo more targets

                                var cyl = Cylinder.GetCylinder(item.Label);
                                if (cyl == null || cyl.Cylinder_ID == 0)
                                {
                                    dbn.State = TransportOrder.OrderStates.Error;
                                    log.Error($"cylinder {item.Label} not found");
                                }
                                else
                                {
                                    dbn.Cylinder_ID = cyl.Cylinder_ID;
                                }
                            }
                            else
                            {
                                dbn.TransportSource = TransportOrder.Destinations.Press;
                                if (dbn.AGV_location_machinename.ToLowerInvariant().Contains("lam"))
                                {
                                    dbn.TransportSource = TransportOrder.Destinations.Laminator;
                                }
                                dbn.TransportTarget = TransportOrder.Destinations.Storage;

                                // incoming
                                var cyl = Cylinder.GetCylinder(item.Label);
                                if (cyl == null || cyl.Cylinder_ID == 0)
                                {
                                    // unknown diameter
                                    var nc = CreateCylinder(item.Label, -1, item.ItemNumber ?? "", item.JobNumber ?? "");
                                    dbn.Cylinder_ID = nc.Cylinder_ID;
                                }
                                else
                                {
                                    // already created
                                    dbn.Cylinder_ID = cyl.Cylinder_ID;
                                }
                            }
                            dbn.Insert();
                        }
                    }
                    else
                    {
                        if (item.OrderState == 98)   // done -> delete wanted
                        {
                            if (found.Status != "running")
                            {
                                log.Warn($"OrderEntry {found} confirmed (delete).");
                                found.Delete();
                            }
                        }
                        else if (item.OrderState == 3)   // cancel wanted
                        {
                            if (found.State != TransportOrder.OrderStates.RunningOnTrolley)
                            {
                                if ((found.State == TransportOrder.OrderStates.New ||
                                     found.State == TransportOrder.OrderStates.ManualMode) &&
                                    found.AGV == 0)
                                {
                                    log.Warn($"OrderEntry {found} canceled.");
                                    Logic.OrderManagement.TransportOrderDone(found, "canceled by user");

                                    Main.Database.Execute("Update Units SET BlockForManualOrderUntil = @0 " +
                                                          "WHERE Unit_ID >= 11 AND Unit_ID <=13 ",
                                                          DateTime.UtcNow.AddMinutes(BauerLib.Registry.ManuallyBlockMaxMinutes));
                                }
                                else if (found.MovingInside)
                                {
                                    log.Warn($"OrderEntry {found} canceled with error state.");
                                    Logic.OrderManagement.TransportOrderFailed(found, "canceled by user");

                                    Main.Database.Execute("Update Units SET BlockForManualOrderUntil = @0 " +
                                                          "WHERE Unit_ID >= 11 AND Unit_ID <=13 ",
                                                          DateTime.UtcNow.AddMinutes(BauerLib.Registry.ManuallyBlockMaxMinutes));
                                }
                            }
                        }
                        else
                        {
                            if (item.Priority != found.Priority)
                            {
                                log.Info($"Priority changed for {item.id} from {found.Priority} to {item.Priority}");

                                found.Priority = item.Priority;
                                found.Update();
                            }
                        }
                    }
                }
                return(HttpStatusCode.OK);
            }
            catch (Exception ex)
            {
                log.Error($"Exception processing OrderList ({ex.Message})", ex);
                log.Error("original POST was:");
                log.Error(GetDocumentContents(Request));
            }
            return(HttpStatusCode.BadRequest);
        }
コード例 #3
0
ファイル: OrderTab.cs プロジェクト: AlexBroecker/WIP_PC
        private void btnRestartOrder_Click(object sender, EventArgs e)
        {
            try
            {
                if (Program.UserLevel <= UserLevels.USER || restart_job_id == 0)
                {
                    return;
                }

                StopDisplayUpdate();

                TransportOrder ta = Main.Database.FirstOrDefault <TransportOrder>("WHERE ID=@0", restart_job_id);
                if (ta == null)
                {
                    MessageBox.Show("Order not found", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                string msg = string.Format(Translate.TranslateString("Do you really want to restart \r\n the order no. {0} ?"), restart_job_id);
                if (MessageBox.Show(msg,
                                    Application.ProductName,
                                    MessageBoxButtons.YesNo,
                                    MessageBoxIcon.Question)
                    == DialogResult.Yes)
                {
                    TransportOrderFailed(ta, "restart by user");

                    // reload
                    ta = Main.Database.FirstOrDefault <TransportOrder>("WHERE ID = @0", restart_job_id);

                    if (ta.MovingInside)
                    {
                        ta.TargetHook = "";
                    }

                    // ta.LoadingStation = 0;

                    ta.SourceHook          = "";
                    ta.State               = TransportOrder.OrderStates.New;
                    ta.Status              = "new";
                    ta.Trolley             = 0;
                    ta.WaitForTransport_ID = 0;
                    ta.Diameter            = 0;

                    ta.LSReached    = new DateTime(2000, 1, 1);
                    ta.AGV          = 0;
                    ta.AGVsource    = 0;
                    ta.AGVdest      = 0;
                    ta.AGVrequested = new DateTime(2000, 1, 1);
                    ta.AGVdone      = new DateTime(2000, 1, 1);

                    ta.Inserted = DateTime.UtcNow;

                    ta.LastChange  = DateTime.UtcNow;
                    ta.exit_reason = "restarted";
                    ta.exit_time   = new DateTime(2000, 1, 1);

                    ta.agv_started = false;
                    ta.Update();

                    log.Warn($"user restarted {ta}");

                    btnRestartOrder.Tag     = 0;
                    btnRestartOrder.Visible = false;
                }

                AllowDisplayUpdate();
                Program.ResetUserLevel();
            }
            catch (Exception ex)
            {
                log.Error("Exception canceling order", ex);
            }
        }