using Microsoft.EntityFrameworkCore; using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical; using System; using System.Linq; using System.Threading; using System.Threading.Tasks; using WIDESEA_Common; using WIDESEA_Common.DBHelper; using WIDESEA_Common.LoctionEnum; using WIDESEA_Common.Tools; using WIDESEA_Core.EFDbContext; using WIDESEA_Entity.DomainModels; using WIDESEA_Services.IRepositories; using WIDESEA_Services.Repositories; namespace WIDESEA_WCS { public partial class StackerExecutor { public static object requestZJBCK = new object();//requestZJJK private static int _readZBCKSignalsoZ = 0;//_readZTBUPSignalso /// /// 正极箔材库搬运工作逻辑 /// /// public static void Z_BCK_Task() { if (Interlocked.Exchange(ref _readZBCKSignalsoZ, 1) == 0) { Task.Run(() => { try { FreeDB freeDB = new FreeDB(); VOLContext Context = new VOLContext(); Ibase_ware_locationRepository locRepository = new base_ware_locationRepository(Context); Ibase_routing_tableRepository routingRepository = new base_routing_tableRepository(Context); Idt_agvtaskRepository agvRepository = new dt_agvtaskRepository(Context); //34出口,供给辊分上料口 var location_34 = freeDB.Select().Where(t => t.upper_code == "ZJ-BCHCJ32" && t.task == 2 && t.status == 1).First(); //34空架立即补料 dt_agvtask dt_Agvtask34 = agvRepository.FindFirst(x => x.agv_toaddress == "ZJ-BCHCJ32"); if (dt_Agvtask34 != null && location_34.task == 2) { location_34.update_time = DateTime.Now; location_34.task = 1; location_34.logic_col = 1; var entrys = locRepository.DbContext.ChangeTracker.Entries().FirstOrDefault(); if (entrys != null) { entrys.State = EntityState.Detached; } int end = locRepository.Update(location_34, true); } if (location_34 != null && dt_Agvtask34 == null) { if (location_34.location_state == LoctionStateEnum.LocationState_Empty.ToString() && location_34.tpgd == 0) { var location_34_cp = freeDB.Select().Where(t => t.location_state == "LocationState_Stored" && t.logic_row.ToString() == "TBXL-BCK" && t.logic_col == 1/*正常料*/ && t.status == 1 && t.upper_code.Contains("ZJ-BCHCJ") && t.status == 1 && t.light_color != "SB" && t.task == 2).OrderBy(t => t.update_time).First(); //dt_agvtask task_34 = agvRepository.Find(t => t.agv_fromaddress == "FJ-BCHCJ34" || t.agv_toaddress == "FJ-BCHCJ34").FirstOrDefault(); if (location_34_cp != null)//找到合适货位,生成补料搬运任务 { //34货位补料任务 dt_agvtask agvtask = new dt_agvtask(); agvtask.agv_id = Guid.NewGuid(); agvtask.agv_tasknum = "KH-" + IdenxManager.GetTaskNo(); agvtask.agv_fromaddress = location_34_cp.upper_code; agvtask.agv_toaddress = location_34.upper_code; agvtask.agv_code = "正极AGV调度"; agvtask.agv_remark = "正极箔材库搬运(34补料)"; agvtask.agv_taskstate = AGVTaskStateEnum.Create.ToString(); agvtask.agv_tasktype = AGVTaskTypeEnum.TaskType_Outbound.ToString(); agvtask.agv_worktype = 1;//工作类型 agvtask.agv_materielid = ""; agvtask.agv_qty = 1; agvtask.agv_createtime = DateTime.Now; agvtask.agv_grade = 0;//任务优先级 agvtask.agv_userid = "WCS"; agvtask.agv_barcode = ""; //锁定首尾货位 location_34_cp.task = 1; location_34_cp.update_time = DateTime.Now; var entry = locRepository.DbContext.ChangeTracker.Entries().FirstOrDefault(); if (entry != null) { entry.State = EntityState.Detached; } int begin = locRepository.Update(location_34_cp, d => new { d.update_time, d.task }, true); location_34.task = 1; location_34.logic_col = 1; location_34.update_time = DateTime.Now; var entrys = locRepository.DbContext.ChangeTracker.Entries().FirstOrDefault(); if (entrys != null) { entrys.State = EntityState.Detached; } int end = locRepository.Update(location_34, d => new { d.update_time, d.task, d.logic_col }, true); if (begin == 1 && end == 1) { agvRepository.Add(agvtask, true); //WriteDBLog.Info($"箔材库任务生成").Write($"生成任务:{agvtask.agv_tasknum}", $"箔材库任务生成"); //WriteDBLog.Info($"箔材库任务生成").Write($"起点货位【{location_34_cp.upper_code}】状态:托盘光电检测:{location_34_cp.tpgd},状态:{location_34_cp.location_state},更新时间:{location_34_cp.wireless_time}", $"箔材库任务生成"); //WriteDBLog.Info($"箔材库任务生成").Write($"终点货位【{location_34.upper_code}】状态:托盘光电检测:{location_34.tpgd},状态:{location_34.location_state},更新时间:{location_34.wireless_time}", $"箔材库任务生成"); //WriteDBLog.Info($"箔材库任务生成").Write($"----------------任务生成成功 {DateTime.Now} -------------- {Environment.NewLine}", $"箔材库任务生成"); } } } } //36出口,供给涂布上料口 var location_36 = freeDB.Select().Where(t => t.upper_code == "ZJ-BCHCJ34" && t.task == 2 && t.status == 1).First(); //36空架立即补料 dt_agvtask dt_Agvtask36 = agvRepository.FindFirst(x => x.agv_toaddress == "ZJ-BCHCJ34"); if (dt_Agvtask36 != null && location_36.task == 2) { location_36.update_time = DateTime.Now; location_36.task = 1; location_36.logic_col = 1; var entrys = locRepository.DbContext.ChangeTracker.Entries().FirstOrDefault(); if (entrys != null) { entrys.State = EntityState.Detached; } int end = locRepository.Update(location_36, true); } if (location_36 != null && dt_Agvtask36==null) { if (location_36.location_state == LoctionStateEnum.LocationState_Empty.ToString() && location_36.tpgd == 0) { var location_36_cp = freeDB.Select().Where(t => t.location_state == "LocationState_Stored" && t.logic_row.ToString() == "TSJXL-BCK" && t.logic_col == 1 && t.status == 1 && t.upper_code.Contains("ZJ-BCHCJ") && t.light_color != "SB" && t.task == 2).OrderBy(t => t.update_time).First(); //dt_agvtask task_36 = agvRepository.Find(t => t.agv_fromaddress == "FJ-BCHCJ36" || t.agv_toaddress == "FJ-BCHCJ36").FirstOrDefault(); if (location_36_cp != null)//找到合适货位,生成补料搬运任务 { //36货位补料任务 dt_agvtask agvtask = new dt_agvtask(); agvtask.agv_id = Guid.NewGuid(); agvtask.agv_tasknum = "KH-" + IdenxManager.GetTaskNo(); agvtask.agv_fromaddress = location_36_cp.upper_code; agvtask.agv_toaddress = location_36.upper_code; agvtask.agv_code = "正极AGV调度"; agvtask.agv_remark = "正极箔材库搬运(36补料)"; agvtask.agv_taskstate = AGVTaskStateEnum.Create.ToString(); agvtask.agv_tasktype = AGVTaskTypeEnum.TaskType_Outbound.ToString(); agvtask.agv_worktype = 1;//工作类型 agvtask.agv_materielid = ""; agvtask.agv_qty = 1; agvtask.agv_createtime = DateTime.Now; agvtask.agv_grade = 0;//任务优先级 agvtask.agv_userid = "WCS"; agvtask.agv_barcode = ""; //锁定首尾货位 location_36_cp.update_time = DateTime.Now; location_36_cp.task = 1; var entrys = locRepository.DbContext.ChangeTracker.Entries().FirstOrDefault(); if (entrys != null) { entrys.State = EntityState.Detached; } int begin = locRepository.Update(location_36_cp, d => new { d.update_time, d.task }, true); location_36.update_time = DateTime.Now; location_36.task = 1; location_36.logic_col = 1; var entry = locRepository.DbContext.ChangeTracker.Entries().FirstOrDefault(); if (entry != null) { entry.State = EntityState.Detached; } int end = locRepository.Update(location_36, d => new { d.update_time, d.task, d.logic_col }, true); if (begin == 1 && end == 1) { agvRepository.Add(agvtask, true); //WriteDBLog.Info($"箔材库任务生成").Write($"生成任务:{agvtask.agv_tasknum}", $"箔材库任务生成"); //WriteDBLog.Info($"箔材库任务生成").Write($"起点货位【{location_36_cp.upper_code}】状态:托盘光电检测:{location_36_cp.tpgd},状态:{location_36_cp.location_state},更新时间:{location_36_cp.wireless_time}", $"箔材库任务生成"); //WriteDBLog.Info($"箔材库任务生成").Write($"终点货位【{location_36.upper_code}】状态:托盘光电检测:{location_36.tpgd},状态:{location_36.location_state},更新时间:{location_36.wireless_time}", $"箔材库任务生成"); //WriteDBLog.Info($"箔材库任务生成").Write($"----------------任务生成成功 {DateTime.Now} -------------- {Environment.NewLine}", $"箔材库任务生成"); } } } } //35入口,供涂布下料 var location_35 = freeDB.Select().Where(t => t.upper_code == "ZJ-BCHCJ33" && t.location_state == "LocationState_Stored" && t.status == 1 && t.task == 2).First(); //35有料立即搬走 if (location_35 != null) { if (location_35.location_state == LocationStateEnum.LocationState_Stored.ToString() && location_35.tpgd == 1 && (location_35.logic_row == "TBXL-BCK" || location_35.logic_col == 1)) { int index = 0; int b = 7; DateTime time = DateTime.Now; Double STAMP = 0; do { DateTime time2 = DateTime.Now; STAMP = (time2 - time).TotalSeconds; base_ware_location ware_Location = locRepository.FindFirst(d => d.upper_code == location_35.upper_code && d.location_state == LocationStateEnum.LocationState_Stored.ToString() && d.status == 1 && location_35.tpgd == 1 && (location_35.logic_row == "TBXL-BCK" || location_35.logic_col == 1) && d.task == 2); if (ware_Location == null) { index = 3; break; } } while (STAMP < b); if (index != 3) { var location_35_cp = freeDB.Select().Where(t => t.location_state == "LocationState_Empty" && t.upper_code.Contains("ZJ-BCHCJ") && t.status == 1 && t.light_color != "SB" && t.task == 2).OrderBy(d => Int32.Parse(d.light_color)).First(); //dt_agvtask task_35 = agvRepository.Find(t => t.agv_fromaddress == "FJ-BCHCJ35" || t.agv_toaddress == "FJ-BCHCJ35").FirstOrDefault(); if (location_35_cp != null)//找到合适货位,生成搬运任务 { //35货位补料任务 dt_agvtask agvtask = new dt_agvtask(); agvtask.agv_id = Guid.NewGuid(); agvtask.agv_tasknum = "KH-" + IdenxManager.GetTaskNo(); agvtask.agv_fromaddress = location_35.upper_code; agvtask.agv_toaddress = location_35_cp.upper_code; agvtask.agv_code = "正极AGV调度"; agvtask.agv_remark = "正极箔材库搬运(35)"; agvtask.agv_taskstate = AGVTaskStateEnum.Create.ToString(); agvtask.agv_tasktype = AGVTaskTypeEnum.TaskType_Outbound.ToString(); agvtask.agv_worktype = 1;//工作类型 agvtask.agv_materielid = ""; agvtask.agv_qty = 1; agvtask.agv_createtime = DateTime.Now; agvtask.agv_grade = 0;//任务优先级 agvtask.agv_userid = "WCS"; agvtask.agv_barcode = ""; //锁定首尾货位 location_35_cp.task = 1; location_35_cp.update_time = DateTime.Now; //location_35_cp.logic_row = "TBXL-BCK"; var entry = locRepository.DbContext.ChangeTracker.Entries().FirstOrDefault(); if (entry != null) { entry.State = EntityState.Detached; } int end = locRepository.Update(location_35_cp, d => new { d.update_time, d.task }, true); location_35.update_time = DateTime.Now; location_35.task = 1; var entrys = locRepository.DbContext.ChangeTracker.Entries().FirstOrDefault(); if (entrys != null) { entrys.State = EntityState.Detached; } int begin = locRepository.Update(location_35, d => new { d.update_time, d.task }, true); if (begin == 1 && end == 1) { agvRepository.Add(agvtask, true); //WriteDBLog.Info($"箔材库任务生成").Write($"生成任务:{agvtask.agv_tasknum}", $"箔材库任务生成"); //WriteDBLog.Info($"箔材库任务生成").Write($"起点货位【{location_35.upper_code}】状态:托盘光电检测:{location_35.tpgd},状态:{location_35.location_state},更新时间:{location_35.wireless_time}", $"箔材库任务生成"); //WriteDBLog.Info($"箔材库任务生成").Write($"终点货位【{location_35_cp.upper_code}】状态:托盘光电检测:{location_35_cp.tpgd},状态:{location_35_cp.location_state},更新时间:{location_35_cp.wireless_time}", $"箔材库任务生成"); //WriteDBLog.Info($"箔材库任务生成").Write($"----------------任务生成成功 {DateTime.Now} -------------- {Environment.NewLine}", $"箔材库任务生成"); } } } } } //37入口,供提升机下料 var location_37 = freeDB.Select().Where(t => t.upper_code == "ZJ-BCHCJ35" && t.location_state == "LocationState_Stored" && t.status == 1 && t.task == 2).First(); //37有料立即搬走 if (location_37 != null) { if (location_37.location_state == LocationStateEnum.LocationState_Stored.ToString() && location_37.tpgd == 1 && (location_37.logic_row == "TSJXL-BCK" || location_37.logic_col == 1)) { int index = 0; int b = 7; DateTime time = DateTime.Now; Double STAMP = 0; do { DateTime time2 = DateTime.Now; STAMP = (time2 - time).TotalSeconds; base_ware_location ware_Location = locRepository.FindFirst(d => d.upper_code == location_37.upper_code && d.location_state == LocationStateEnum.LocationState_Stored.ToString() && location_37.tpgd == 1 && d.status == 1 && (location_37.logic_row == "TSJXL-BCK" || location_37.logic_col == 1) && d.task == 2); if (ware_Location == null) { index = 3; break; } } while (STAMP < b); if (index != 3) { var location_37_cp = freeDB.Select().Where(t => t.location_state == "LocationState_Empty" && t.upper_code.Contains("ZJ-BCHCJ") && t.status == 1 && t.light_color != "SB" && t.task == 2).OrderBy(d => Int32.Parse(d.light_color)).First(); //dt_agvtask task_37 = agvRepository.Find(t => t.agv_fromaddress == "FJ-BCHCJ37" || t.agv_toaddress == "FJ-BCHCJ37").FirstOrDefault(); if (location_37_cp != null)//找到合适货位,生成搬运任务 { //36货位补料任务 dt_agvtask agvtask = new dt_agvtask(); agvtask.agv_id = Guid.NewGuid(); agvtask.agv_tasknum = "KH-" + IdenxManager.GetTaskNo(); agvtask.agv_fromaddress = location_37.upper_code; agvtask.agv_toaddress = location_37_cp.upper_code; agvtask.agv_code = "正极AGV调度"; agvtask.agv_remark = "正极箔材库搬运(37)"; agvtask.agv_taskstate = AGVTaskStateEnum.Create.ToString(); agvtask.agv_tasktype = AGVTaskTypeEnum.TaskType_Outbound.ToString(); agvtask.agv_worktype = 1;//工作类型 agvtask.agv_materielid = ""; agvtask.agv_qty = 1; agvtask.agv_createtime = DateTime.Now; agvtask.agv_grade = 0;//任务优先级 agvtask.agv_userid = "WCS"; agvtask.agv_barcode = ""; //锁定首尾货位 location_37_cp.task = 1; location_37_cp.update_time = DateTime.Now; //location_37_cp.logic_row = "TSJXL-BCK"; var entry = locRepository.DbContext.ChangeTracker.Entries().FirstOrDefault(); if (entry != null) { entry.State = EntityState.Detached; } int end = locRepository.Update(location_37_cp, d => new { d.task, d.update_time }, true); location_37.task = 1; location_37.update_time = DateTime.Now; var entrys = locRepository.DbContext.ChangeTracker.Entries().FirstOrDefault(); if (entrys != null) { entrys.State = EntityState.Detached; } int begin = locRepository.Update(location_37, d => new { d.task, d.update_time }, true); if (begin == 1 && end == 1) { agvRepository.Add(agvtask, true); //WriteDBLog.Info($"箔材库任务生成").Write($"生成任务:{agvtask.agv_tasknum}", $"箔材库任务生成"); //WriteDBLog.Info($"箔材库任务生成").Write($"起点货位【{location_37.upper_code}】状态:托盘光电检测:{location_37.tpgd},状态:{location_37.location_state},更新时间:{location_37.wireless_time}", $"箔材库任务生成"); //WriteDBLog.Info($"箔材库任务生成").Write($"终点货位【{location_37_cp.upper_code}】状态:托盘光电检测:{location_37_cp.tpgd},状态:{location_37_cp.location_state},更新时间:{location_37_cp.wireless_time}", $"箔材库任务生成"); //WriteDBLog.Info($"箔材库任务生成").Write($"----------------任务生成成功 {DateTime.Now} -------------- {Environment.NewLine}", $"箔材库任务生成"); } } } } } } catch (Exception ex) { WriteLog.GetLog().Write($"箔材库任务生成:{DateTime.Now} --------------{ex}", $"箔材库任务生成"); } finally { Interlocked.Exchange(ref _readZBCKSignalsoZ, 0); } }); } } } }