using System; using System.Linq; using HH.WCS.Mobox3.RiDong.apiMethod; using HH.WCS.Mobox3.RiDong.dto; using HH.WCS.Mobox3.RiDong.models; using HH.WCS.Mobox3.RiDong.models.other; using HH.WCS.Mobox3.RiDong.util; namespace HH.WCS.Mobox3.RiDong.generalMethod; /// /// 线体帮助类 /// public class PipeLineHelper { /// /// 读取各个线体信息 /// /// 根据不同的线体数据执行不同的逻辑 /// public static void ReadConveyorlinesMessage(ConveyorLinesInfo conveyorLinesInfo) { if (conveyorLinesInfo != null) { if (conveyorLinesInfo.PURPOSE == "入库口") { // 查找对应的未推送的输送线任务 var task = AdoSqlMethod.QueryFirst(p => p.S_CNTR_CODE == conveyorLinesInfo.BARCODE && p.N_B_STATE < 3 && p.N_SCHEDULE_TYPE == 1); // 判断是否需要创建作业 if (conveyorLinesInfo.TASKCREATE == 1) { // 更新容器货品表数据 var cntrItemDetails = AdoSqlMethod.QueryList(p => p.S_CNTR_CODE == conveyorLinesInfo.BARCODE); if (cntrItemDetails.Count > 0) { foreach (var cntrItemDetail in cntrItemDetails) { cntrItemDetail.F_WEIGHT = conveyorLinesInfo.WEIGHT; } AdoSqlMethod.UpdateList(cntrItemDetails, p => new { p.F_WEIGHT }); } // 任务存在 if (task != null) { if (task.N_B_STATE == 0) { // 推送目的地,目的地是当前线体的 var infoDto = Settings.ConveyorlinesInfos.First(p => p.enable == 1 && p.location == task.S_END_LOC); conveyorLinesInfo.DEVICESIGN = infoDto.devicesign; conveyorLinesInfo.TASKCREATE = 2; AdoSqlMethod.UpdateFirst(conveyorLinesInfo, p => new { p.DEVICESIGN, p.TASKCREATE }); } } // 任务不存在 else { var container = AdoSqlMethod.QueryFirst(p => p.S_CODE == conveyorLinesInfo.BARCODE); if (container != null) { if (container.S_TYPE != "7a" && container.S_TYPE != "8") { container.S_TYPE = conveyorLinesInfo.CONTAINERTYPE; AdoSqlMethod.UpdateFirst(container, p => new { p.S_TYPE }); } var input = new OperationDto(); input.cntrCode = container.S_CODE; input.taskType = 1; input.odd = ""; // 创建对应的任务数据 SynthesizeService.AddOperation(input); } else { Console.WriteLine("托盘不存在"); } } } else if (conveyorLinesInfo.TASKCREATE == 3) { // 任务存在 if (task != null) { // 任务变更为推送状态 task.N_B_STATE = 1; task.S_B_STATE = "已推送"; task.T_START_TIME = DateTime.Now; AdoSqlMethod.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE, p.T_START_TIME }); conveyorLinesInfo.TASKCREATE = 4; conveyorLinesInfo.DEVICESIGN = 0; conveyorLinesInfo.BARCODE = ""; conveyorLinesInfo.CONTAINERTYPE = ""; conveyorLinesInfo.WEIGHT = 0; AdoSqlMethod.UpdateFirst(conveyorLinesInfo, p => new { p.DEVICESIGN, p.BARCODE, p.TASKCREATE, p.CONTAINERTYPE, p.WEIGHT }); } } } else if (conveyorLinesInfo.PURPOSE == "入库接驳") { // 判断当前线体编号是否为1 if (conveyorLinesInfo.LOADSTATE == 1) { // 读取条形码,找到对应的输送线任务 var pipeTask = AdoSqlMethod.QueryFirst(p => p.S_CNTR_CODE == conveyorLinesInfo.BARCODE && p.N_B_STATE == 1 && p.N_SCHEDULE_TYPE == 1); if (pipeTask != null) { // 修改状态为完成 pipeTask.N_B_STATE = 3; pipeTask.S_B_STATE = "完成"; pipeTask.T_END_TIME = DateTime.Now; // 推送agv任务 var agvTask = AdoSqlMethod.QueryFirst(p => p.S_CNTR_CODE == conveyorLinesInfo.BARCODE && p.N_B_STATE == 0 && p.N_SCHEDULE_TYPE == 2 && p.S_OP_CODE == pipeTask.S_OP_CODE); // 查询中间表数据 var dirFirst = AdoSqlMethod.QueryFirst(p=>p.PURPOSE == "门禁"); if (agvTask != null && dirFirst.ACCESS == 0) { // 推送小车的任务 if (TaskHelper.SendTaskFromAGV(agvTask)) { agvTask.N_B_STATE = 1; agvTask.S_B_STATE = "已推送"; // 修改中间表数据信号为2 conveyorLinesInfo.LOADSTATE = 2; AdoSqlMethod.UpdateFirst(agvTask, p => new { p.N_B_STATE, p.S_B_STATE }); AdoSqlMethod.UpdateFirst(pipeTask, p => new { p.N_B_STATE, p.S_B_STATE, p.T_END_TIME }); AdoSqlMethod.UpdateFirst(conveyorLinesInfo, p => new { p.LOADSTATE }); } } } } } else if (conveyorLinesInfo.PURPOSE == "出库口") { if (conveyorLinesInfo.TASKFINISH == 1) { var task = AdoSqlMethod.QueryFirst(p => p.S_CNTR_CODE == conveyorLinesInfo.BARCODE && p.N_B_STATE == 1 && p.N_SCHEDULE_TYPE == 1); if (task != null) { // 修改任务为完成 task.N_B_STATE = 3; task.S_B_STATE = "完成"; task.T_END_TIME = DateTime.Now; AdoSqlMethod.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE, p.T_END_TIME }); Operation queryFirst = AdoSqlMethod.QueryFirst(p => p.S_CODE == task.S_OP_CODE); conveyorLinesInfo.TASKFINISH = 3; // 出库方向 conveyorLinesInfo.DIRECTION = ConveyorLinesInfo.GetDirection(queryFirst.S_OUT_TARGET, queryFirst.S_OP_DEF_NAME); AdoSqlMethod.UpdateFirst(conveyorLinesInfo, p => new { p.TASKFINISH, p.DIRECTION }); // 中间表数据添加 // 将数据托盘号插入到中间表2中 var ledDemo = AdoSqlMethod.QueryFirst(p => p.LCOATIONCODE == "CKK-1"); // 该任务的类型 ledDemo.OUTBOUNDTYPE = task.S_OP_NAME.Trim(); // 根据配盘单号查下配盘单主表和明细 var disc = AdoSqlMethod.QueryFirst(p => p.S_DC_NO == task.S_DC_NO); if (disc != null) { var outbound = AdoSqlMethod.QueryFirst(p => p.S_NO == disc.S_BS_NO); if (outbound != null) { ledDemo.DIRECTION = outbound.S_OUT_TARGET.Trim(); } } var discd = AdoSqlMethod.QueryFirst(p => p.S_DC_NO == task.S_DC_NO); if (discd != null) { ledDemo.FREIGHTTYPE = discd.S_EXT_ATTR1; } AdoSqlMethod.UpdateFirst(ledDemo, p => new { p.OUTBOUNDTYPE, p.DIRECTION, p.FREIGHTTYPE }); } } else if (conveyorLinesInfo.TASKFINISH == 2) { // 目前暂定人工确定 } } else if (conveyorLinesInfo.PURPOSE == "门禁") { var dirFirst = AdoSqlMethod.QueryFirst(p=>p.PURPOSE == "门禁"); if (dirFirst != null && dirFirst.ACCESS == 2) { dirFirst.ACCESS = 3; AdoSqlMethod.UpdateFirst(dirFirst, p => new { p.ACCESS }); } } } } }