1
czw
2025-07-07 31beeb3d23e658e5aa2bbb9f251b006095eef15a
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/RunTime/Code/×Ô¶¨ÒåÀà.cs
@@ -535,64 +535,69 @@
#region    [自定义类][20250325152141671][TaskProcess]
   internal static bool CreateTask(string no, string from, string to, string taskType, int pri, List<string> cntrs, string workMode = "AGV", int cntrCount = 1, int startLayer = 1, int endLayer = 1)
{
            LogHelper.Debug($"输送线RGV空托任务 from:{from}>to {to}开始创建>");
     var cntrInfo = string.Join(",", cntrs);
 ILocRepository locc = new LocRepository();
 var fromLoc = locc.FindEntity(x => x.S_LOC_CODE == from);
 var endLoc = locc.FindEntity(x => x.S_LOC_CODE == to);
            var s = Settings.deviceInfos.Find(x => x.location.Contains(from)) != null;
            var e = Settings.deviceInfos.Find(x => x.location.Contains(to)) != null;
            string t = "F01";
            if (s && !e) t = "A002";
            if (!s && e) t = "A003";
            if (s && e) t = "A004";
 try
 {
     TaskEntity wmsTask = new TaskEntity()
     {
        S_ID = Guid.NewGuid().ToString(),
      S_STATE = "编辑",
      T_CREATE = DateTime.Now,
      T_MODIFY = DateTime.Now,
    LogHelper.Info($"创建任务 from:{from}>to {to}开始创建>");
    var cntrInfo = string.Join(",", cntrs);
    ILocRepository locc = new LocRepository();
    var fromLoc = locc.FindEntity(x => x.S_LOC_CODE == from);
    var endLoc = locc.FindEntity(x => x.S_LOC_CODE == to);
         S_TASK_NO = GenerateTaskNo(),
         S_START_LAREA = fromLoc.S_AREA_CODE,
         S_END_LAREA = endLoc.S_AREA_CODE,
         S_DEPART_NAME = "",
         S_START_LOC = from,
         S_END_LOC = to,
         S_TYPE = taskType,
         S_SRC_NO = no,//
         N_PRIORITY = pri,
         S_WORK_MODE = workMode,
         S_B_STATE = "未执行",
         S_CNTRS = cntrInfo,
         N_START_LAYER = startLayer,
         N_END_LAYER = endLayer,
         N_CNTR_COUNT = cntrCount,
                    S_INDEX=t,
     };
     ITaskRepository taskserice = new TaskRepository();
     taskserice.Insert(wmsTask);
                if (workMode == "AGV")
                {
                    fromLoc.S_LOCK_STATE = "出库锁";
                    endLoc.S_LOCK_STATE = "入库锁";
                    locc.Update(fromLoc);
                    locc.Update(endLoc);
                }
                LogHelper.Debug($"输送线RGV空托任务 from:{from}>to {to} åˆ›å»º{wmsTask.S_TASK_NO}成功");
 }
 catch (Exception ex)
 {
     LogHelper.Error("CreateTask" + ex.Message, ex);
     return false;
 }
    var s = Settings.deviceInfos.Find(x => x.location.Contains(from)) != null;
    var e = Settings.deviceInfos.Find(x => x.location.Contains(to)) != null;
    string t = "";
    if (workMode == "AGV")
    {
        t = "F01";
        if (s && !e) t = "A002";
        if (!s && e) t = "A003";
        if (s && e) t = "A004";
    }
    try
    {
        TaskEntity wmsTask = new TaskEntity()
        {
            S_ID = Guid.NewGuid().ToString(),
            S_STATE = "编辑",
            T_CREATE = DateTime.Now,
            T_MODIFY = DateTime.Now,
            S_TASK_NO = GenerateTaskNo(),
            S_START_LAREA = fromLoc.S_AREA_CODE,
            S_END_LAREA = endLoc.S_AREA_CODE,
            S_DEPART_NAME = "",
            S_START_LOC = from,
            S_END_LOC = to,
            S_TYPE = taskType,
            S_SRC_NO = no,//
            N_PRIORITY = pri,
            S_WORK_MODE = workMode,
            S_B_STATE = "未执行",
            S_CNTRS = cntrInfo,
            N_START_LAYER = startLayer,
            N_END_LAYER = endLayer,
            N_CNTR_COUNT = cntrCount,
            S_INDEX = t,
        };
        ITaskRepository taskserice = new TaskRepository();
        taskserice.Insert(wmsTask);
        if (workMode == "AGV")
        {
            fromLoc.S_LOCK_STATE = "出库锁";
            endLoc.S_LOCK_STATE = "入库锁";
            locc.Update(fromLoc);
            locc.Update(endLoc);
        }
        LogHelper.Info($"创建任务 from:{from}>to {to} åˆ›å»º{wmsTask.S_TASK_NO}成功");
        return true;
    }
    catch (Exception ex)
    {
        LogHelper.Error("CreateTask" + ex.Message, ex);
        return false;
    }
}
@@ -665,7 +670,7 @@
                        S_DEPART_NAME = "",
                        S_START_LOC = model.startBit,
                        S_END_LOC = model.endBit,
                        S_TYPE = model.reqCode,
                        S_TYPE = model.taskType,
                        S_SRC_NO = "",//
                        N_PRIORITY = -88,
                        S_WORK_MODE = "agv",
@@ -731,139 +736,40 @@
                }
            }
        }
        public static void ResMesTask()
        {
            ///1.
            TaskRepository taskservice = new TaskRepository();
            var tasks = taskservice.FindList(x =>( x.S_B_STATE == "MES"|| x.S_B_STATE == "People") && x.N_PRIORITY == -88);
            var VERXs = Settings.deviceInfos?.FindAll(x => x.deviceType==2);
            //if (VERXs.Any())
                foreach (var task in tasks)
                {
                    var sx = VERXs?.Find(x => x.location.Contains(task.S_END_LOC));
                    if (sx == null)
                    {
                        //直接生成对应任务。
                        var res = TaskProcess.CreateTask(task.S_TASK_NO, task.S_START_LOC, task.S_END_LOC, task.S_TYPE, 6, task.S_CNTRS.Split(',').ToList());
                        if (res)
                        {
                            //task.N_PRIORITY = 0;
                            taskservice.dbcontext.Set<TaskEntity>().Attach(task);
                            taskservice.dbcontext.Entry(task).Property(x => x.N_PRIORITY).CurrentValue = 0;
                            taskservice.dbcontext.Entry(task).Property(x => x.N_PRIORITY).IsModified = true;
                            taskservice.dbcontext.SaveChanges();
                        }
                    }
                    else
                    {
                       var sindex = sx.location.ToList().IndexOf(task.S_END_LOC);
                        LocRepository locRepository = new LocRepository();
                        //生成跳跃任务。  -- æ‰˜ç›˜è´§ä½è¡¨ã€‚
                        var t1s = taskservice.FindList(x => x.S_SRC_NO == task.S_TASK_NO);
                        if (t1s.Any())
                        {
                            var t1 = t1s.OrderBy(x => x.T_CREATE).LastOrDefault();
                            if (t1.S_END_LOC == task.S_END_LOC)
                            {
                                task.N_PRIORITY = 0;
                                task.S_B_STATE = "MES_完成";
                                taskservice.Update(task);
                                continue;
                            }
                            if (t1.S_B_STATE == "完成")
                            {
                                //1.终点是否有托盘。 ä¾æ®æ˜¯ç»ˆç‚¹çš„任务是 ä½œä¸ºç»ˆç‚¹ï¼Œè¿˜æ˜¯èµ·ç‚¹ã€‚
                                //var ec = taskservice.FindList(x => (x.S_START_LOC == task.S_START_LOC || x.S_END_LOC == task.S_END_LOC) /*&& DateTime.Now.Subtract(x.T_CREATE).TotalHours < 5*/).OrderByDescending(x => x.T_CREATE).FirstOrDefault();//($"select top 1 * from TN_TASK WHERE S_START_LOC='{task.S_END_LOC}' OR S_END_LOC='{task.S_END_LOC}' ORDER BY T_CREATE DESC");
                        //var ec = taskservice.FindList(x => x.S_START_LOC == task.S_START_LOC && x.S_END_LOC == task.S_START_LOC, new Common.Data.Pagination
        //                        {
        //                            page = 1,
        //                            sidx = "T_CREATE",
        //                            sord = "desc",
        //                            rows = 1
        //                        }).FirstOrDefault();
                          TaskEntity ec = null;
                        var dev = Conn.默认Redis.GetValue(sx.deviceName + "." + (sindex == 0 ? "D1224" : "D1225"));
                        if (dev?.Trim() == "1")
                            ec = taskservice.FindList(x =>x.S_END_LOC == task.S_END_LOC&&x.S_B_STATE=="完成", new Common.Data.Pagination
                            {
                                page = 1,
                                sidx = "T_CREATE",
                                sord = "desc",
                                rows = 1
                            }).FirstOrDefault();
                        if (t1.S_START_LOC == task.S_START_LOC && ec != null)//!= task.S_END_LOC)
                                {
                                    //第二段。
                                    LocEntity endLoc = null;
                                    var di = sx;
                                    if (di != null)
                                    {
                                        foreach (var ssloc in di.deviceNo)
                                        {
                                            var endloc = locRepository.FindEntity(x => x.S_LOC_CODE == ssloc);
                                            if (endloc != null && endloc.N_CURRENT_NUM == 0 && endloc.S_LOCK_STATE == "无")
                                            {
                                                endLoc = endloc;
                                                break;
                                            }
                                        }
                                        if (endLoc != null)
                                        {
                                            var res = TaskProcess.CreateTask(task.S_TASK_NO, task.S_END_LOC, endLoc.S_LOC_CODE, task.S_TYPE + "下空", 7, ec.S_CNTRS.Split(',').ToList());
                                            if (res)
                                            {
                                                task.N_PRIORITY = 0; taskservice.Update(task);
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    var res = TaskProcess.CreateTask(task.S_TASK_NO, t1.S_END_LOC, task.S_END_LOC, task.S_TYPE + "补满", 6, task.S_CNTRS.Split(',').ToList());
                                    if (res)
                                    {
                                        task.N_PRIORITY = 0; taskservice.Update(task);
                                    }
                                }
                            }
                        }
                        else
                        {
                            //生成第一段。
                            LocEntity endLoc = null;
                            var di = sx;
                            if (di != null)
                            {
                                foreach (var ssloc in di.deviceNo)
                                {
                                    var endloc = locRepository.FindEntity(x => x.S_LOC_CODE == ssloc);
                                    if (endloc != null && endloc.N_CURRENT_NUM == 0 && endloc.S_LOCK_STATE == "无")
                                    {
                                        endLoc = endloc;
                                        break;
                                    }
                                }
                                if (endLoc != null)
                                {
                                    var res = TaskProcess.CreateTask("", task.S_START_LOC, endLoc.S_LOC_CODE, task.S_TYPE + "满转", 8, task.S_CNTRS.Split(',').ToList());
                                    if (res)
                                    {
                                        task.N_PRIORITY = 0; taskservice.Update(task);
                                    }
                                }
                            }
                        }
                    }
                }
            //var VERX = Settings.deviceInfos?.FindAll(x => x.deviceName.Contains("捷瞬抓臂"));
            //if ()
            ///2  çœ‹ç¼“存区。 æ²¡æ»¡çš„。
        }
      public static void ResMesTask(Tag tag)
      {
          ///1.
          AutoThread.InvokeMethod(AutoThread.Instance, "ResolveMesTask", new object[] { tag });
          //var VERX = Settings.deviceInfos?.FindAll(x => x.deviceName.Contains("捷瞬抓臂"));
          //if ()
          ///2  çœ‹ç¼“存区。 æ²¡æ»¡çš„。
      }
        
        
#endregion [自定义类][20250531152402452][ToWMSMES]
}
public class ConsoleInterceptor:TextWriter
{
#region    [自定义类][20250702112833751][ConsoleInterceptor]
   private readonly TextWriter _originalOut;
public ConsoleInterceptor()
{
    _originalOut = Console.Out;
}
public override Encoding Encoding => Encoding.UTF8;
public override void WriteLine(string value = "")
{
    string values = (string)AutoThread.InvokeMethod(AutoThread.Instance, "WriteLine", new object[] { value });
    //// å¯ä»¥é€‰æ‹©ç»§ç»­è¾“出到原控制台
    if (!string.IsNullOrEmpty(values))
        _originalOut.WriteLine(values);
}
#endregion [自定义类][20250702112833751][ConsoleInterceptor]
}
}