From 15cfe97f5cf6f1e8591da7cf658fab2452e0d60f Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期日, 21 四月 2024 10:13:20 +0800 Subject: [PATCH] 优化检测上料逻辑,优化出库逻辑 --- 代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/OutboundTask.cs | 275 ++++++++++++++++++++++-------------------------------- 1 files changed, 114 insertions(+), 161 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/OutboundTask.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/OutboundTask.cs" index ff73eea..2b3a160 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/OutboundTask.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/OutboundTask.cs" @@ -5,12 +5,15 @@ using System.Text; using System.Threading.Tasks; using WIDESEA_Comm; +using WIDESEA_Comm.LogInfo; using WIDESEA_Comm.TaskNo; using WIDESEA_Core.EFDbContext; -using WIDESEA_Core.FreeDB; +using WIDESEA_Core.Extensions; using WIDESEA_Entity.DomainModels; using WIDESEA_WCS.IRepositories; using WIDESEA_WCS.Repositories; +using WIDESEA_WMS.IRepositories; +using WIDESEA_WMS.Repositories; using static FreeSql.Internal.GlobalFilter; using static System.Collections.Specialized.BitVector32; @@ -18,7 +21,6 @@ { public class OutboundTask { - static FreeDB freeDB = new FreeDB(); /// <summary> /// 鍒涘缓鍑哄簱浠诲姟 /// </summary> @@ -28,21 +30,51 @@ { VOLContext context = new VOLContext(); Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context); - var mes_heads = freeDB.Select<dt_mes_head>().Where(x => x.processCode == "28").OrderBy(x => x.expectedStartTime).ToList(); - foreach (var mes_head in mes_heads) + Idt_inventoryRepository inventoryRepository = new dt_inventoryRepository(context); + Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(context); + IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(context); + + var Mes_Works = workinfoRepository.Find(x => x.processCode == "28").OrderBy(x => x.CreateTime).ToList(); + foreach (var Mes_Work in Mes_Works) { - #region 鏍规嵁搴撳瓨鍏ュ簱鏃堕棿鏈�鏅氭煡璇� - var inventory = freeDB.Select<dt_inventory>().Where(x => x.FigureNumber == mes_head.drawingNo).OrderByDescending(x => x.OnlineTime).First(); + var inventory = inventoryRepository.Find(x => x.SN == Mes_Work.SN).FirstOrDefault(); if (inventory != null) { - var Station = stationinfoRepository.Find(x => x.stationCode == inventory.stationCode).FirstOrDefault(); + var Station = stationinfoRepository.Find(x => x.stationCode == inventory.stationCode).FirstOrDefault();//鏌ユ壘搴撳瓨璐т綅 if (Station != null) { - var stationinfo = stationinfoRepository.Find(x => x.line == Station.line && x.area == Station.area && x.enable).OrderByDescending(x => x.column).FirstOrDefault(); + + #region + + dt_stationinfo stationinfo = null; + if (Station.area == "1") + { + //鏌ユ壘褰撳墠璐т綅鍚屽垪鏄惁瀛樺湪鍏ュ簱浠诲姟 + if (stationinfoRepository.Find(x => x.column == Station.column && x.area == "1" && x.location_state == LocationStateEnum.InBusy.ToString()).Any()) continue; + + stationinfo = stationinfoRepository.Find(x => x.column == Station.column && x.enable && x.area == "1" && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderBy(x => x.line).FirstOrDefault(); + } + else + { + //鏌ユ壘褰撳墠璐т綅鍚屽垪鏄惁瀛樺湪鍏ュ簱浠诲姟 + if (stationinfoRepository.Find(x => x.line == Station.line && x.area == Station.area && x.location_state == LocationStateEnum.InBusy.ToString()).Any()) continue; + + stationinfo = stationinfoRepository.Find(x => x.line == Station.line && x.area == Station.area && x.enable && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderByDescending(x => x.column).FirstOrDefault(); + } if (stationinfo != null) { - if (stationinfo.bindSN == null) - throw new Exception(stationinfo.stationCode + "杞﹁疆SN鍙蜂俊鎭紓甯�!"); + if (stationinfoRepository.Find(x => x.line == stationinfo.line && x.area == stationinfo.area && x.column > stationinfo.column && !x.enable).Any()) + continue; + if (string.IsNullOrEmpty(stationinfo.bindSN)) + { + stationinfo.remark = "杞﹁疆SN鍙蜂俊鎭紓甯�"; + stationinfo.location_state = "Abnormal"; + stationinfoRepository.Update(stationinfo, true); + continue; + } + + if (agvtaskRepository.Find(x => x.agv_fromaddress == stationinfo.stationCode).Any()) continue; + List<string> lists = new List<string>(); var SNS = stationinfo.bindSN.Split(","); foreach (var SN in SNS) @@ -50,166 +82,87 @@ if (!string.IsNullOrEmpty(SN)) lists.Add(SN); } - foreach (var item in lists) + + #region 璐т綅杞﹁疆鍏ㄩ儴鍖呭惈鍦ㄥ伐鍗曞唴鍒欎笅鍙戜换鍔� + var count = 0; + foreach (var SN in lists) { - if (freeDB.Select<dt_mes_detail>().Where(x => x.jobID == mes_head.jobID && x.SN == item).Any()) - { - dt_agvtask agvtask = new dt_agvtask() - { - agv_fromaddress = stationinfo.stationCode, - agv_id = Guid.NewGuid(), - agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"), - agv_grade = 1, - agv_createtime = DateTime.Now, - agv_taskstate = "Queue", - agv_materielid = stationinfo.stationType, - agv_qty = stationinfo.quantity, - agv_tasktype = "TaskType_Outbound", - agv_toaddress = "", - agv_userid = "绯荤粺", - bindSN = stationinfo.bindSN, - agv_worktype = Convert.ToInt32(mes_head.processCode), - agv_materbarcode = mes_head.materialCode, - agv_Traytype = stationinfo.tray_type, - agv_TrayStatus = stationinfo.tray_status - }; - dt_stationinfo TargetLocation = GetEmptyLocation(stationinfoRepository); - if (TargetLocation != null) - { - agvtask.agv_taskstate = "Create"; - agvtask.agv_toaddress = TargetLocation.stationCode; - TargetLocation.location_state = LocationStateEnum.Busy.ToString(); - freeDB.Update(TargetLocation); - } - freeDB.Add(agvtask); - return; - } + if (workinfoRepository.Find(x => x.processCode == "28" && x.SN == SN).Any()) count++; + //if (workinfoRepository.Find(x => x.processCode == "28" && x.SN.Contains(SN)).Any()) count++; + } + if (count != lists.Count) continue; + dt_agvtask agvtask = new dt_agvtask() + { + agv_fromaddress = stationinfo.stationCode, + agv_id = Guid.NewGuid(), + agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"), + agv_grade = 2, + agv_createtime = DateTime.Now, + agv_taskstate = "Queue", + agv_materielid = stationinfo.stationType, + agv_qty = stationinfo.quantity, + agv_tasktype = "TaskType_Outbound", + agv_toaddress = "", + agv_userid = "绯荤粺", + bindSN = stationinfo.bindSN, + jobID = Mes_Work.workOrder, + agv_worktype = Convert.ToInt32(Mes_Work.processCode), + agv_materbarcode = Mes_Work.materialCode, + agv_Traytype = stationinfo.tray_type, + agv_TrayStatus = stationinfo.tray_status + }; + stationinfo.location_state = LocationStateEnum.OutBusy.ToString(); + stationinfoRepository.Update(stationinfo, true); + agvtaskRepository.Add(agvtask, true); + WriteDBLog.Success("鍒涘缓鍑哄簱浠诲姟", $"浠诲姟缂栧彿锛歿agvtask.agv_tasknum}", "PCS"); + continue; + + #endregion + + #region 璐т綅杞﹁疆鏈変竴涓寘鍚湪宸ュ崟鍐呭垯涓嬪彂浠诲姟 + //foreach (var SN in lists) + //{ + // if (mes_DetailRepository.Find(x => x.jobID == mes_head.jobID && x.SN == SN).Any()) + // { + // dt_agvtask agvtask = new dt_agvtask() + // { + // agv_fromaddress = stationinfo.stationCode, + // agv_id = Guid.NewGuid(), + // agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"), + // agv_grade = 2, + // agv_createtime = DateTime.Now, + // agv_taskstate = "Queue", + // agv_materielid = stationinfo.stationType, + // agv_qty = stationinfo.quantity, + // agv_tasktype = "TaskType_Outbound", + // agv_toaddress = "", + // agv_userid = "绯荤粺", + // bindSN = stationinfo.bindSN, + // jobID = mes_head.jobID, + // agv_worktype = Convert.ToInt32(mes_head.processCode), + // agv_materbarcode = mes_head.materialCode, + // agv_Traytype = stationinfo.tray_type, + // agv_TrayStatus = stationinfo.tray_status + // }; + // stationinfo.location_state = LocationStateEnum.OutBusy.ToString(); + // stationinfoRepository.Update(stationinfo, true); + // agvtaskRepository.Add(agvtask, true); + // WriteDBLog.Success("鍒涘缓鍑哄簱浠诲姟", $"浠诲姟缂栧彿锛歿agvtask.agv_tasknum}", "PCS"); + // continue; + // } + //} + #endregion } - stationinfo = stationinfoRepository.Find(x => x.stationType == mes_head.drawingNo && x.line != Station.line).OrderBy(x => x.line).ThenByDescending(x => x.column).FirstOrDefault(); - if (stationinfo != null && stationinfo.enable) - { - if (stationinfo.bindSN == null) - throw new Exception(stationinfo.stationCode + "杞﹁疆SN鍙蜂俊鎭紓甯�!"); - List<string> lists = new List<string>(); - var SNS = stationinfo.bindSN.Split(","); - foreach (var SN in SNS) - { - if (!string.IsNullOrEmpty(SN)) - lists.Add(SN); - } - foreach (var item in lists) - { - if (freeDB.Select<dt_mes_detail>().Where(x => x.jobID == mes_head.jobID && x.SN == item).Any()) - { - dt_agvtask agvtask = new dt_agvtask() - { - agv_fromaddress = stationinfo.stationCode, - agv_id = Guid.NewGuid(), - agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"), - agv_grade = 1, - agv_createtime = DateTime.Now, - agv_taskstate = "Queue", - agv_materielid = stationinfo.stationType, - agv_qty = stationinfo.quantity, - agv_tasktype = "TaskType_Outbound", - agv_toaddress = "", - agv_userid = "绯荤粺", - bindSN = stationinfo.bindSN, - agv_worktype = Convert.ToInt32(mes_head.processCode), - agv_materbarcode = mes_head.materialCode, - agv_Traytype = stationinfo.tray_type, - agv_TrayStatus = stationinfo.tray_status - }; - dt_stationinfo TargetLocation = GetEmptyLocation(stationinfoRepository); - if (TargetLocation != null) - { - agvtask.agv_taskstate = "Create"; - agvtask.agv_toaddress = TargetLocation.stationCode; - TargetLocation.location_state = LocationStateEnum.Busy.ToString(); - freeDB.Update(TargetLocation); - } - freeDB.Add(agvtask); - return; - } - } - } + #endregion } } - #endregion - - #region MyRegion - //var station = stationinfoRepository.Find(x => x.stationType == mes_head.drawingNo && x.line != x.line).OrderBy(x => x.line).ThenByDescending(x => x.column).FirstOrDefault(); - //bool ok = false; - //List<string> list = new List<string>(); - //if (station != null && station.location_state == LocationStateEnum.Stroge.ToString() && station.enable) - //{ - // var SNS = station.bindSN.Split(","); - // foreach (var SN in SNS) - // { - // if (!string.IsNullOrEmpty(SN)) - // list.Add(SN); - // } - //} - //foreach (var SN in list) - //{ - // if (ok = freeDB.Select<dt_mes_detail>().Where(x => x.jobID == mes_head.jobID && x.SN == SN).Any()) continue; - //} - //if (ok) - //{ - // dt_agvtask agvtask = new dt_agvtask() - // { - // agv_fromaddress = station.stationCode, - // agv_id = Guid.NewGuid(), - // agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"), - // agv_grade = 1, - // agv_createtime = DateTime.Now, - // agv_taskstate = "Queue", - // agv_materielid = station.stationType, - // agv_qty = station.quantity, - // agv_tasktype = "TaskType_Outbound", - // agv_toaddress = "", - // agv_userid = "绯荤粺", - // bindSN = station.bindSN, - // agv_worktype = Convert.ToInt32(mes_head.processCode), - // agv_materbarcode = mes_head.materialCode, - // agv_barcode = station.tray_type - // }; - // dt_stationinfo TargetLocation = GetEmptyLocation(stationinfoRepository); - // if (TargetLocation != null) - // { - // agvtask.agv_taskstate = "Create"; - // agvtask.agv_toaddress = TargetLocation.stationCode; - // TargetLocation.location_state = LocationStateEnum.Busy.ToString(); - // freeDB.Update(TargetLocation); - // } - // freeDB.Add(agvtask); - //} - #endregion - } } - catch (Exception) + catch (Exception ex) { - - throw; + WriteDBLog.Error("鍒涘缓鍑哄簱浠诲姟", $"閿欒淇℃伅锛歿ex.Message}", "PCS"); } - } - private static dt_stationinfo GetEmptyLocation(Idt_stationinfoRepository stationinfoRepository) - { - dt_stationinfo TargetLocation = null; - var stations = stationinfoRepository.Find(x => x.stationCode.Contains("S01001")); - foreach (var station in stations) - { - TargetLocation = stationinfoRepository.FindFirst(x => x.stationCode == station.stationCode && x.location_state == LocationStateEnum.Empty.ToString() && x.enable); - if (TargetLocation != null) continue; - } - - if (TargetLocation == null) - { - throw new Exception("妫�娴嬬嚎涓婃枡浣嶅凡婊�"); - } - return TargetLocation; } } } -- Gitblit v1.9.3