czw
2025-06-03 428c09cb12be9c1d9f803681f34d9a33dfa8a8f3
S7/RunTime/Code/×Ô¶¨ÒåÀà.cs
@@ -38,6 +38,8 @@
        
        public static List<deviceInfo> deviceInfos { get; set; } = new List<deviceInfo>();
        public static string HKbaseUrl { get; set; }
        public static string MESbaseUrl { get; set; }
        public static string WMSbaseUrl { get; set; }
        public static readonly HttpHelper apiHelper = new HttpHelper();
        
        public static string GetTimeStamp(DateTime? time = null)
@@ -430,6 +432,9 @@
    if (sessionId != "") {
        request.Headers.Set("ASP.NET_SessionId", sessionId);
    }
            //Authorization: UApGP6WW9FsBUqAlzxRGOw ==
            request.Headers.Set("Authorization", "UApGP6WW9FsBUqAlzxRGOw==");
    StreamReader reader = null;
    Stream stream = null;
    WebResponse rsp = null;
@@ -608,4 +613,182 @@
   
#endregion [自定义类][20250417094750211][Utils]
}
public class ToWMSMES
{
#region    [自定义类][20250531152402452][ToWMSMES]
   //2 wms  mes
        public class CreateTask
        {
            public string taskType { get; set; }
            public string startBit { get; set; }
            public string endBit { get; set; }
            public string reqCode { get; set; }
            public string cntrCode { get; set; }
            internal static ReturnMsg CreatemesTask(CreateTask model)
            {
                ITaskRepository taskservice = new TaskRepository();
                var task = taskservice.FindEntity(x => x.S_TASK_NO == model.reqCode);
                if (task == null)
                {
                    //var i = TaskProcess.CreateTask("", model.startBit, model.endBit, string.IsNullOrEmpty(model.taskType) ? "Mes下发" : model.taskType, 5, new List<string> { model.cntrCode });
                    TaskEntity wmsTask = new TaskEntity()
                    {
                        S_ID = Guid.NewGuid().ToString(),
                        S_STATE = "编辑",
                        T_CREATE = DateTime.Now,
                        T_MODIFY = DateTime.Now,
                        S_TASK_NO = model.reqCode,
                        S_START_LAREA = "",
                        S_END_LAREA = "",
                        S_DEPART_NAME = "",
                        S_START_LOC = model.startBit,
                        S_END_LOC = model.endBit,
                        S_TYPE = model.reqCode,
                        S_SRC_NO = "",//
                        N_PRIORITY = -1,
                        S_WORK_MODE = "agv",
                        S_B_STATE = "MES",
                        S_CNTRS = model.cntrCode,
                        N_START_LAYER = 1,
                        N_END_LAYER = 1,
                        N_CNTR_COUNT = 1
                    };
                    ITaskRepository taskserice = new TaskRepository();
                    var i = taskserice.Insert(wmsTask) > 0;
                    return new ReturnMsg { resultCode = (i ? 0 : -1), resultMsg = i ? "" : "任务生成失败。" };
                }
                else
                {
                    return new ReturnMsg { resultCode = -1, resultMsg = "任务重复下发。" };
                }
            }
        }
        public class ReturnMsg
        {
            public int resultCode { get; set; }
            public string resultMsg { get; set; }
        }
        public static void ResMesTask()
        {
            ///1.
            TaskRepository taskservice = new TaskRepository();
            var tasks = taskservice.FindList(x => x.S_B_STATE == "MES" && x.N_PRIORITY == -88);
            var VERXs = Settings.deviceInfos?.FindAll(x => x.deviceName.Contains("捷瞬抓臂"));
            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
                    {
                        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);
                            }
                            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");
                                if (ec != null && ec.S_END_LOC == 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_END_LOC, endLoc.S_LOC_CODE, task.S_TYPE + "下空", 7, t1.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  çœ‹ç¼“存区。 æ²¡æ»¡çš„。
        }
#endregion [自定义类][20250531152402452][ToWMSMES]
}
}