using Admin.NET.Application; using Admin.NET.Core.EnterWareHouseModule; using Admin.NET.Core.EnterWareHouseModule.Enum; using iWareCC.Common.Helper; using iWareCC.ConveyorService; using iWareCommon.Common.Globle; using iWareCommon.Utils; using iWareModel; using iWareSql.DataAccess; using iWareSql.DbOrm; using iWareSql.Orm; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using XiGang.Core.Model; namespace iWareCC { public class ScanContainerCode { public static LogType currentLogType = LogType.ScanContainerCode; public static string host = ConfigHelper.GetConfigString("WMSHost"); public static string addWarehouseEstablishment = ConfigHelper.GetConfigString("addWarehouseEstablishment"); public static string addEnterEmptyWare = ConfigHelper.GetConfigString("addEnterEmptyWare"); public static string getOrderNo = ConfigHelper.GetConfigString("getOrderNo"); public static string fronttask = ConfigHelper.GetConfigString("fronttask"); /// ///读码线程 /// public static void HandlerMainTaskScanCode1() { Log4NetHelper.WriteInfoLog(currentLogType, "101扫码线程启动"); while (true) { try { string str = ""; if (SystemValue.isStartedModel) { var vs = new ConveyerServiceClient(); //if (FormCC.conveyerView.R_Scan1_Success) if (vs.ReadAddress("2304|800.0") == true) { //string currentCodeScan101 = FormCC.conveyerView.R_Scan1_Value; //short height = FormCC.conveyerView.R_Shape; string currentCodeScan101 = vs.ReadStr("2304|804"); short height = vs.ReadShort("2304|802"); SystemWarningMsg._lbl_ScanHandle101 = "接受到请求,条码:" + currentCodeScan101 + "高度:" + height; Log4NetHelper.WriteInfoLog(currentLogType, "接受到请求,条码:" + currentCodeScan101 + "高度:" + height); if (string.IsNullOrWhiteSpace(currentCodeScan101)) { Thread.Sleep(1000); continue; } short convertH = 0; switch (height) { case 14: convertH = 4; break; case 21: convertH = 3; break; case 23: convertH = 2; break; case 26: convertH = 1; break; } //校验堆垛机任务的状态 using (DbOrm dbOrm = new DbOrm()) { //var task = dbOrm.ware_task_sub.Where(u => u.ContainerCode == currentCodeScan101 && u.DeviceId == (int)EDevice.堆垛机).FirstOrDefault(); //查询当前执行中的升降机任务 var task = dbOrm.ware_task_sub.Where(u => u.TaskState == 1 && u.DeviceId == 3 && u.ContainerCode == "等待识别").FirstOrDefault(); if (task != null) { //查询AGV和堆垛机任务 var tasks = dbOrm.ware_task_sub.Where(u => u.TaskId == task.TaskId && (u.DeviceId == 1099 || u.DeviceId == 1)).ToList(); //获取托盘类型 var container = dbOrm.wms_container.AsNoTracking().Where(u => u.ContainerCode == currentCodeScan101).FirstOrDefault(); if (container == null) { SystemWarningMsg._lbl_ScanHandle101 = $"小车{currentCodeScan101}没有配置基础信息"; Thread.Sleep(1000); continue; } if (string.IsNullOrEmpty(container.RealLocationCode)) { SystemWarningMsg._lbl_ScanHandle101 = $"小车{currentCodeScan101}没有绑定库位"; Thread.Sleep(1000); continue; } var containerType = dbOrm.wms_container_type.AsNoTracking().Where(u => u.WareContainerTypeCode == container.ContainerTypeCode).FirstOrDefault(); if (containerType == null) { SystemWarningMsg._lbl_ScanHandle101 = $"小车{currentCodeScan101}没有配置类型信息"; Thread.Sleep(1000); continue; } if (containerType.PLCTypeId <= convertH && convertH != 0) { task.ContainerCode = currentCodeScan101; task.ContainerType = containerType.PLCTypeId; var sdaResult = vs.WriteReceiveScan((int)EDevice.输送线, "101", true); if (!sdaResult.result) { Log4NetHelper.WriteErrorLog(currentLogType, $"{currentCodeScan101} 号扫码器接受完成写入失败," + sdaResult.resMsg); } else { Log4NetHelper.WriteInfoLog(currentLogType, $"{currentCodeScan101} 号扫码器接受完成写入成功"); foreach (var item in tasks) { item.ContainerCode = currentCodeScan101; item.ContainerType = containerType.PLCTypeId; if (item.DeviceId == 1) { item.ToPlace = container.RealLocationCode; item.TaskState = (int)SubTaskStateEnum.未开始; } } var maintask = dbOrm.ware_task.Where(u => u.Id == task.TaskId).FirstOrDefault(); if (maintask != null) { //查询绑定的零件号 var partCode = dbOrm.wms_part.AsNoTracking().Where(u => u.MaterialCode == currentCodeScan101).FirstOrDefault(); maintask.ToLocationCode = container.RealLocationCode; maintask.ContainerCode = currentCodeScan101; maintask.PartCode = partCode?.PartCode; } } } //if (task.ContainerType <= convertH) //{ // var sdaResult = vs.WriteReceiveScan((int)EDevice.输送线, "101", true); // if (!sdaResult.result) // { // Log4NetHelper.WriteErrorLog(currentLogType, "1号扫码器接受完成写入失败," + sdaResult.resMsg); // } // else // { // Log4NetHelper.WriteInfoLog(currentLogType, "1号扫码器接受完成写入成功"); // if (task.TaskState == (int)SubTaskStateEnum.等待下发) // { // task.TaskState = (int)SubTaskStateEnum.未开始; // } // } //} else { SystemWarningMsg._lbl_ScanHandle101 = "接受到请求,条码" + currentCodeScan101 + "的高度:" + height + "与配置" + GetHeight(containerType.PLCTypeId) + " 不一致"; } } else { var task1 = dbOrm.ware_task_sub.Where(u => u.ContainerCode == currentCodeScan101 && u.DeviceId == (int)EDevice.堆垛机).FirstOrDefault(); if (task1 != null) { if (task1.ContainerType <= convertH && convertH != 0) { var sdaResult = vs.WriteReceiveScan((int)EDevice.输送线, "101", true); if (!sdaResult.result) { Log4NetHelper.WriteErrorLog(currentLogType, $"{currentCodeScan101} 1号扫码器接受完成写入失败," + sdaResult.resMsg); } else { Log4NetHelper.WriteInfoLog(currentLogType, $"{currentCodeScan101} 1号扫码器接受完成写入成功"); if (task1.TaskState == (int)SubTaskStateEnum.等待下发) { task1.TaskState = (int)SubTaskStateEnum.未开始; } } } else { SystemWarningMsg._lbl_ScanHandle101 = "接受到请求,条码: " + currentCodeScan101 + "高度: " + height + " 与配置高度" + GetHeight(task1.ContainerType) + "不一致"; } } else { SystemWarningMsg._lbl_ScanHandle101 = "没有任务应答请求"; } } //else //{ // var sdaResult = new ConveyorService.ConveyerServiceClient().WriteReceiveScan((int)EDevice.输送线, "101", true); // if (!sdaResult.result) // { // Log4NetHelper.WriteErrorLog(currentLogType, "1号扫码器接受完成写入失败," + sdaResult.resMsg); // } // else // { // Log4NetHelper.WriteInfoLog(currentLogType, "1号扫码器接受完成写入成功"); // } //} dbOrm.SaveChanges(); } } else { //if (FormCC.conveyerView.W_Scan1_ReceiveFinish) if (vs.ReadAddress("2304|300.0") == true) { var sdaResult = vs.WriteReceiveScan((int)EDevice.输送线, "101", false); if (!sdaResult.result) { Log4NetHelper.WriteErrorLog(currentLogType, $"1号扫码器取消接受完成写入失败,{sdaResult.resMsg}"); } } SystemWarningMsg._lbl_ScanHandle101 = "当前没有请求"; } vs.Close(); } } catch (Exception ex) { SystemWarningMsg._lbl_ScanHandle101 = $"1分解线程出现异常:{ex.Message}"; Log4NetHelper.WriteErrorLog(currentLogType, $"扫码处理出现异常:{ex.Message}", ex); } Thread.Sleep(1000);//休眠2秒 } } public static CommonResponse ExeCreateFrontTask(string containercode, string sitecode, ref string msg) { FrontTaskInput front = new FrontTaskInput() { sitecode = sitecode, containercode = containercode }; //var wmsResults = new HTTPService(host).postContent(fronttask, front, Guid.NewGuid(), 30); var wmsResult = HttpHelper.GetHttpResponse(host + fronttask, front, 10000); if (wmsResult.code == 200) { Log4NetHelper.WriteInfoLog(currentLogType, $"站台:{sitecode},托盘:{containercode},生成前置输送线任务成功"); msg = $"站台{sitecode},托盘:{containercode},生成前置输送线任务成功"; } else { Log4NetHelper.WriteErrorLog(currentLogType, $"站台:{sitecode},托盘:{containercode},生成前置输送线任务失败,{wmsResult.message}"); msg = $"站台:{sitecode},托盘:{containercode},生成前置输送线任务失败,{wmsResult.message}"; } return wmsResult; } public static string GetHeight(int? heigh) { switch (heigh) { case 1: return "26"; case 2: return "23"; case 3: return "21"; case 4: return "14"; default: return " "; } } } }