using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading; using WIDESEA_Common; using WIDESEA_Common.Tools; using WIDESEA_Core.EFDbContext; using WIDESEA_Core.Utilities; using WIDESEA_Entity.DomainModels; using WIDESEA_Services; using WIDESEA_Services.IRepositories; using WIDESEA_Services.Repositories; using WIDESEA_Services.Services; using WIDESEA_WCS.WCSClient; namespace WIDESEA_WCS.Jobs { public partial class EquipmentExecutor : SchedulerExecuteBase { private static int _readJRSignalso = 0; public static void JRSB_UpTask() { if (Interlocked.Exchange(ref _readJRSignalso, 1) == 0) { try { VOLContext Context = new VOLContext(); WebResponseContent responseContent = new WebResponseContent(); Idt_task_numberRepository tasknumberRep = new dt_task_numberRepository(Context); dt_task_numberService tasknumber = new dt_task_numberService(tasknumberRep); Idt_agvtaskRepository agvRepository = new dt_agvtaskRepository(Context); IJROutBindRepository jrRepository = new JROutBindRepository(Context); List JRSBS = new List { "格林晟1号卷绕机", "格林晟2号卷绕机", "格林晟3号卷绕机", "格林晟4号卷绕机", "格林晟5号卷绕机", "格林晟6号卷绕机", "格林晟7号卷绕机", "格林晟8号卷绕机", "格林晟9号卷绕机", "格林晟10号卷绕机" }; foreach (var JRSB in JRSBS) { WriteLog.Info($"{JRSB}下料").Write($"{JRSB}开始,时间:" + DateTime.Now + " ----------", $"{JRSB}下料"); PLCClient plc = WCSService.Clients.Find(v => v.PLCName == JRSB); if (plc == null) { continue; } //当前设备有没有上料请求 string isSBWork1 = plc.ReadValue(ConveyorLineInfoDBName.R_GLSJRSB1_UPrequest.ToString(), plc.PLCName).ToString(); string isSBWork2 = plc.ReadValue(ConveyorLineInfoDBName.R_GLSJRSB2_UPrequest.ToString(), plc.PLCName).ToString(); string isSBWork3 = plc.ReadValue(ConveyorLineInfoDBName.R_GLSJRSB3_UPrequest.ToString(), plc.PLCName).ToString(); string isSBWork4 = plc.ReadValue(ConveyorLineInfoDBName.R_GLSJRSB4_UPrequest.ToString(), plc.PLCName).ToString(); //读取设备的工单号 string batchNo = plc.ReadValue(ConveyorLineInfoDBName.R_JRSB_UPbatchNo.ToString(), plc.PLCName).ToString(); if (batchNo == null) { continue; } WriteLog.Info("格林晟卷绕上料").Write(JRSB + "\t" + "上料口1:" + isSBWork1 + "\t" + "上料口2:" + isSBWork2 + "\t" + "上料口3:" + isSBWork3 + "\t" + "上料口4:" + isSBWork4 + "\t" + batchNo + "\t" + DateTime.Now, "格林晟卷绕上料"); dt_agvtask agvtask = new dt_agvtask(); if (bool.Parse(isSBWork1) || bool.Parse(isSBWork2) || bool.Parse(isSBWork3) || bool.Parse(isSBWork4)) { if (bool.Parse(isSBWork1)) { int number = Convert.ToInt32(JRSB.Substring(3, 1)); if (JRSB == "格林晟10号卷绕机") { number = 10; } int num = 1 + (number - 1) * 4; string sum = ""; if (num >= 10) { sum = "0" + num; } else { sum = "00" + num; } agvtask.agv_toaddress = "FJSL-JRSB" + sum + "-B"; agvtask.agv_barcode = ""; agvtask.agv_code = "负极2号AGV"; agvtask.agv_createtime = DateTime.Now; agvtask.agv_fromaddress = "nou"; agvtask.agv_grade = 1; agvtask.agv_materbarcode = "daiding"; agvtask.agv_qty = 1; agvtask.agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep); agvtask.agv_taskstate = "WaitStockOut"; agvtask.agv_tasktype = "TaskType_Outbound"; agvtask.agv_userid = "WCS"; agvtask.agv_worktype = 1; agvtask.agv_materielid = batchNo; var task = agvRepository.FindFirst(f => f.agv_toaddress == agvtask.agv_toaddress); if (task == null) { List StockList = new List { "FJXL-FBT001", "FJXL-FBT002" }; MESback WMSbackresult = MESAPIInvoke.OutNeedStosk(agvtask.agv_tasknum, StockList, 4, batchNo, "", agvtask.agv_toaddress); WriteLog.Info($"{JRSB}下料").Write($"isSBWork1:MES返回数据:{JsonConvert.SerializeObject(WMSbackresult)},时间:" + DateTime.Now + " ----------", $"{JRSB}下料"); if (WMSbackresult.Code > 0) { WriteLog.Info("格林晟卷绕上料").Write(JRSB + "要料失败" + WMSbackresult.Message + "\t" + DateTime.Now, "格林晟卷绕上料"); break; } agvRepository.Add(agvtask, true); } } if (bool.Parse(isSBWork2)) { int number = Convert.ToInt32(JRSB.Substring(3, 1)); if (JRSB == "格林晟10号卷绕机") { number = 10; } int num = 2 + (number - 1) * 4; string sum = ""; if (num >= 10) { sum = "0" + num; } else { sum = "00" + num; } agvtask.agv_toaddress = "FJSL-JRSB" + sum + "-B"; agvtask.agv_barcode = ""; agvtask.agv_code = "负极2号AGV"; agvtask.agv_createtime = DateTime.Now; agvtask.agv_fromaddress = "nou"; agvtask.agv_grade = 1; agvtask.agv_materbarcode = "daiding"; agvtask.agv_qty = 1; agvtask.agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep); agvtask.agv_taskstate = "WaitStockOut"; agvtask.agv_tasktype = "TaskType_Outbound"; agvtask.agv_userid = "WCS"; agvtask.agv_worktype = 1; agvtask.agv_materielid = batchNo; var task = agvRepository.FindFirst(f => f.agv_toaddress == agvtask.agv_toaddress); if (task == null) { List StockList = new List { "FJXL-FBT001", "FJXL-FBT002" }; MESback WMSbackresult = MESAPIInvoke.OutNeedStosk(agvtask.agv_tasknum, StockList, 4, batchNo, "", agvtask.agv_toaddress); WriteLog.Info($"{JRSB}下料").Write($"isSBWork2:MES返回数据:{JsonConvert.SerializeObject(WMSbackresult)},时间:" + DateTime.Now + " ----------", $"{JRSB}下料"); if (WMSbackresult.Code > 0) { WriteLog.Info("格林晟卷绕上料").Write(JRSB + "要料失败" + WMSbackresult.Message + "\t" + DateTime.Now, "格林晟卷绕上料"); break; } agvRepository.Add(agvtask, true); } } if (bool.Parse(isSBWork3)) { int number = Convert.ToInt32(JRSB.Substring(3, 1)); if (JRSB == "格林晟10号卷绕机") { number = 10; } int num = 3 + (number - 1) * 4; string sum = ""; if (num >= 10) { sum = "0" + num; } else { sum = "00" + num; } agvtask.agv_toaddress = "ZJSL-JRSB" + sum + "-B"; agvtask.agv_barcode = ""; agvtask.agv_code = "负极2号AGV"; agvtask.agv_createtime = DateTime.Now; agvtask.agv_fromaddress = "nou"; agvtask.agv_grade = 1; agvtask.agv_materbarcode = "daiding"; agvtask.agv_qty = 1; agvtask.agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep); agvtask.agv_taskstate = "WaitStockOut"; agvtask.agv_tasktype = "TaskType_Outbound"; agvtask.agv_userid = "WCS"; agvtask.agv_worktype = 1; agvtask.agv_materielid = batchNo; var task = agvRepository.FindFirst(f => f.agv_toaddress == agvtask.agv_toaddress); if (task == null) { List StockList = new List { "FJXL-FBT001", "FJXL-FBT002" }; MESback WMSbackresult = MESAPIInvoke.OutNeedStosk(agvtask.agv_tasknum, StockList, 4, batchNo, "", agvtask.agv_toaddress); WriteLog.Info($"{JRSB}下料").Write($"isSBWork3:MES返回数据:{JsonConvert.SerializeObject(WMSbackresult)},时间:" + DateTime.Now + " ----------", $"{JRSB}下料"); if (WMSbackresult.Code > 0) { WriteLog.Info("格林晟卷绕上料").Write(JRSB + "要料失败" + WMSbackresult.Message + "\t" + DateTime.Now, "格林晟卷绕上料"); break; } agvRepository.Add(agvtask, true); } } if (bool.Parse(isSBWork4)) { int number = Convert.ToInt32(JRSB.Substring(3, 1)); if (JRSB == "格林晟10号卷绕机") { number = 10; } int num = 4 + (number - 1) * 4; string sum = ""; if (num >= 10) { sum = "0" + num; } else { sum = "00" + num; } agvtask.agv_toaddress = "ZJSL-JRSB" + sum + "-B"; agvtask.agv_barcode = ""; agvtask.agv_code = "负极2号AGV"; agvtask.agv_createtime = DateTime.Now; agvtask.agv_fromaddress = "nou"; agvtask.agv_grade = 1; agvtask.agv_materbarcode = "daiding"; agvtask.agv_qty = 1; agvtask.agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep); agvtask.agv_taskstate = "WaitStockOut"; agvtask.agv_tasktype = "TaskType_Outbound"; agvtask.agv_userid = "WCS"; agvtask.agv_worktype = 1; agvtask.agv_materielid = batchNo; var task = agvRepository.FindFirst(f => f.agv_toaddress == agvtask.agv_toaddress); if (task == null) { List StockList = new List { "FJXL-FBT001", "FJXL-FBT002" }; MESback WMSbackresult = MESAPIInvoke.OutNeedStosk(agvtask.agv_tasknum, StockList, 4, batchNo, "", agvtask.agv_toaddress); WriteLog.Info($"{JRSB}下料").Write($"isSBWork4:MES返回数据:{JsonConvert.SerializeObject(WMSbackresult)},时间:" + DateTime.Now + " ----------", $"{JRSB}下料"); if (WMSbackresult.Code > 0) { WriteLog.Info("格林晟卷绕上料").Write(JRSB + "要料失败" + WMSbackresult.Message + "\t" + DateTime.Now, "格林晟卷绕上料"); break; } agvRepository.Add(agvtask, true); } } #region //var bind = new JROutBind(); //if (agvtask.agv_toaddress.Contains("ZJ")) //{ // bind = jrRepository.FindFirst(f => f.Devid == "ZJXL-FBT001"); //} //else if (agvtask.agv_toaddress.Contains("FJ")) //{ // bind = jrRepository.FindFirst(f => f.Devid == "ZJXL-FBT002"); //} //if (bind.materialtype != batchNo) //{ // bind = new JROutBind() // { // barcode = "", // materialtype = "", // sum = 0, // taskid = "" // }; // jrRepository.Update(bind, true); //var task = agvRepository.FindFirst(f => f.agv_toaddress ==agvtask.agv_toaddress); //if (task != null) { continue; } //List StockList = new List { "ZJXL-FBT001", "ZJXL-FBT002" }; //MESback WMSbackresult = MESAPIInvoke.OutNeedStosk(agvtask.agv_tasknum, StockList, 4, batchNo, "", agvtask.agv_toaddress); //if (WMSbackresult.Code > 0) //{ // WriteLog.Info("格林晟卷绕上料").Write(JRSB + "要料失败" + WMSbackresult.Message + "\t" + DateTime.Now, "格林晟卷绕上料"); // break; //} //agvRepository.Add(agvtask, true); #endregion WriteLog.Info("格林晟卷绕上料").Write(JRSB + "\t" + agvtask.agv_tasknum + "\t" + "上料口1:" + isSBWork1 + "\t" + "上料口2:" + isSBWork2 + "\t" + "上料口3:" + isSBWork3 + "\t" + "上料口4:" + isSBWork4 + "\t" + batchNo + "\t" + DateTime.Now, "格林晟卷绕上料"); // } break; } else { continue; } } } catch (Exception ex) { WriteLog.Info("JRSB_UpTask").Write("JRSB_UpTask" + ex.Message, "JRSB_UpTask"); } finally { Interlocked.Exchange(ref _readJRSignalso, 0); } } } } }