using System; using System.Collections.Generic; using System.Linq; 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 _readWLXSignalso = 0; /// /// 正极和负极物流线入小极卷库逻辑 /// /// public static void ZF_WLX_DownTask() { if (Interlocked.Exchange(ref _readWLXSignalso, 1) == 0) { try { VOLContext Context = new VOLContext(); 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); Ibase_routing_tableRepository routingRepository = new base_routing_tableRepository(Context); Ibase_ware_locationRepository locRepository = new base_ware_locationRepository(Context); Idt_agvtask_htyRepository agvtask_HtyRepository = new dt_agvtask_htyRepository(Context); List WLXs = new List { "ZJXL-WLX001", "FJXL-WLX001" }; foreach (var item in WLXs) { PLCClient plc = WCSService.Clients.Find(v => v.PLCName == "正极提升机"); if (plc == null) continue; //获取正极物流线下料请求 string isZWork = plc.ReadValue(ConveyorLineInfoDBName.R_ZWLX_Downrequest.ToString(), plc.PLCDescroption).ToString(); //string isZWork = "true"; //获取负极物流线下料请求 string isFWork = plc.ReadValue(ConveyorLineInfoDBName.R_FWLX_Downrequest.ToString(), plc.PLCDescroption).ToString(); GetEquipmentInfo("WLX001", "正极物流线下料请求:" + isZWork, "负极物流线下料请求:" + isFWork, "", ""); var tasks = agvRepository.FindFirst(v => v.agv_fromaddress == item || v.agv_toaddress == item); if (tasks != null) continue; if (bool.Parse(isZWork) && item.Contains("Z")) { lock (requestZX) { string address = ""; bool choose = false; var location = new base_ware_location(); string toaddressnum = ""; var ztask = agvRepository.Find(f => f.agv_toaddress.Contains("ZX")); if (ztask.Count() == 0) { var taskthy = agvtask_HtyRepository.Find(f => f.agv_toaddress.Contains("ZX") && f.agv_toaddress.Contains("0101") && (f.agv_taskstate == "Finished" || f.agv_taskstate == "ManualCompletion")).OrderByDescending(o => o.agv_createtime).First(); toaddressnum = taskthy.agv_toaddress.Substring(2, 1); } else { var task = ztask.OrderByDescending(o => o.agv_createtime).First(); toaddressnum = task.agv_toaddress.Substring(2, 1); } List nums = new List() { "ZXD0101", "ZXB0101", "ZXC0101", "ZXA0101" }; int count = 0; for (int i = 0; i < nums.Count(); i++) { var loc = locRepository.FindFirst(f => f.upper_code == nums[i]); if (loc.location_state == LocationStateEnum.LocationState_Empty.ToString()) { count = 1; } } if (count == 0) { continue; } for (int i = 1; i < 5; i++) { if (choose) { location = locRepository.FindFirst(v => v.upper_code == nums[i - 1]); if (location.location_state == LocationStateEnum.LocationState_Empty.ToString()) { address = location.upper_code; choose = false; break; } else { if (nums[i - 1].Contains("A")) { i = 0; } continue; } } else if (nums[i - 1].Contains(toaddressnum)) { choose = true; if (toaddressnum == "A") { i = 0; } continue; } else { continue; } } if (!string.IsNullOrEmpty(address)) { dt_agvtask agvtask = new dt_agvtask { agv_materbarcode = "", agv_barcode = "", agv_code = "正极1号AGV", agv_createtime = DateTime.Now, agv_fromaddress = item, agv_grade = 1, agv_materielid = "", agv_qty = 1, agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep), agv_taskstate = "Create", agv_tasktype = "TaskType_Outbound", agv_toaddress = address, agv_userid = "WCS", agv_worktype = 2 }; location.location_state = LocationStateEnum.LocationState_Lock.ToString(); locRepository.Update(location, true); agvRepository.Add(agvtask, true); WriteLog.Info("ZF_WLX_DownTask").Write("ZF_WLX_DownTask" + agvtask.agv_tasknum + DateTime.Now, "ZF_WLX_DownTask"); continue; } } } else if (bool.Parse(isFWork) && item.Contains("F")) { lock (requestFX) { string address = ""; bool choose = false; var location = new base_ware_location(); string toaddressnum = ""; var ftask = agvRepository.Find(f => f.agv_toaddress.Contains("FX")); if (ftask.Count() == 0) { var taskthy = agvtask_HtyRepository.Find(f => f.agv_toaddress.Contains("FX") && f.agv_toaddress.Contains("0101") && (f.agv_taskstate == "Finished" || f.agv_taskstate == "ManualCompletion")).OrderByDescending(o => o.agv_createtime).First(); toaddressnum = taskthy.agv_toaddress.Substring(2, 1); } else { var task = ftask.OrderByDescending(o => o.agv_createtime).First(); toaddressnum = task.agv_toaddress.Substring(2, 1); } List nums = new List() { "FXD0101", "FXB0101", "FXC0101", "FXA0101" }; int count = 0; for (int i = 0; i < nums.Count(); i++) { var loc = locRepository.FindFirst(f => f.upper_code == nums[i]); if (loc.location_state == LocationStateEnum.LocationState_Empty.ToString()) { count = 1; } } if (count == 0) { continue; } for (int i = 1; i < 5; i++) { if (choose) { location = locRepository.FindFirst(v => v.upper_code == nums[i - 1]); if (location.location_state == LocationStateEnum.LocationState_Empty.ToString()) { address = location.upper_code; choose = false; break; } else { if (nums[i - 1].Contains("A")) { i = 0; } continue; } } else if (nums[i - 1].Contains(toaddressnum)) { choose = true; if (toaddressnum == "A") { i = 0; } continue; } else { continue; } } if (!string.IsNullOrEmpty(address)) { dt_agvtask agvtask = new dt_agvtask { agv_materbarcode = "", agv_barcode = "", agv_code = "负极1号AGV", agv_createtime = DateTime.Now, agv_fromaddress = item, agv_grade = 1, agv_materielid = "", agv_qty = 1, agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep), agv_taskstate = "Create", agv_tasktype = "TaskType_Outbound", agv_toaddress = address, agv_userid = "WCS", agv_worktype = 2 }; location.location_state = LocationStateEnum.LocationState_Lock.ToString(); locRepository.Update(location, true); agvRepository.Add(agvtask, true); WriteLog.Info("F_WLX_DownTask").Write("F_WLX_DownTask" + agvtask.agv_tasknum + DateTime.Now, "F_WLX_DownTask"); continue; } } } } } catch (Exception ex) { WriteLog.Info("ZF_WLX_DownTask").Write("ZF_WLX_DownTask" + ex.Message + DateTime.Now, "ZF_WLX_DownTask"); } finally { Interlocked.Exchange(ref _readWLXSignalso, 0); } } } } }