using SqlSugar; using System.Collections.Generic; using System.Data; using System.Linq; using WCS.Entity.Protocol; using WCS_Client.Extensions; using WCS_AGVTask = WCS.Entity.Protocol.WCS_AGVTask; namespace WCS_Client.Workflow { /// /// 任务 /// public class TaskWorkflow { /// /// 为任务数据表新增列 /// /// 数据源 /// 数据库链接 public static void DataTableAddColumn(DataTable dataTable, SqlSugarClient db) { //新增列 string ADDRCURRENT = "ADDRCURRENT"; string ADDRline = "ADDRline"; dataTable.addDataColumn(new List { ADDRCURRENT, ADDRline }); //获取当前所有任务对应的AGV任务 List agvIDs = (from d in dataTable.AsEnumerable() select d.Field("AgvTask")).Where(p => p > 0).ToList(); string ids = ""; agvIDs.ForEach(p => { ids += p; if (p != agvIDs[agvIDs.Count - 1]) ids += ","; }); var _sql = $"select * from WCS_AGVTask where ID in ({(string.IsNullOrEmpty(ids) ? "''" : ids)})"; List _AGVTASKs = db.SqlQueryable(_sql).ToList(); //向新增列写入数据 for (int i = 0; i < dataTable.Rows.Count; i++) { //写入输送线 dataTable.Rows[i][ADDRCURRENT] = eqpData.deviceDataPack.StationDatas.Datas.Where(p => p.D521.Tasknum == (int)dataTable.Rows[i][1]).FirstOrDefault()?.Code; //不在输送线,尝试写入RGV if (string.IsNullOrEmpty(dataTable.Rows[i][ADDRCURRENT].ToString())) { dataTable.Rows[i][ADDRCURRENT] = eqpData.deviceDataPack.RGVDatas.Datas.Where(p => (p.D521.TaskID_1 == (int)dataTable.Rows[i][1] && p.D521.Status_1.HasFlag(RGVStatus.光电)) || (p.D521.TaskID_2 == (int)dataTable.Rows[i][1] && p.D521.Status_2.HasFlag(RGVStatus.光电))).FirstOrDefault()?.Code; } //不在输送线/RGV,尝试写入堆垛机 if (string.IsNullOrEmpty(dataTable.Rows[i][ADDRCURRENT].ToString())) { dataTable.Rows[i][ADDRCURRENT] = eqpData.deviceDataPack.SCDatas.Datas.Where(p => p.D521.TaskID_1 == (int)dataTable.Rows[i][1] || p.D521.TaskID_2 == (int)dataTable.Rows[i][1]).FirstOrDefault()?.Code; } //开始写入产线 dataTable.Rows[i][ADDRline] = _AGVTASKs.Where(p => p.ID == (int)dataTable.Rows[i]["AgvTask"]).FirstOrDefault()?.Position; dataTable.AcceptChanges(); } } } }