12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- 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
- {
- /// <summary>
- /// 任务
- /// </summary>
- public class TaskWorkflow
- {
- /// <summary>
- /// 为任务数据表新增列
- /// </summary>
- /// <param name="dataTable">数据源</param>
- /// <param name="db">数据库链接</param>
- public static void DataTableAddColumn(DataTable dataTable, SqlSugarClient db)
- {
- //新增列
- string ADDRCURRENT = "ADDRCURRENT";
- string ADDRline = "ADDRline";
- dataTable.addDataColumn(new List<string> { ADDRCURRENT, ADDRline });
- //获取当前所有任务对应的AGV任务
- List<int> agvIDs = (from d in dataTable.AsEnumerable() select d.Field<int>("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<WCS_AGVTask> _AGVTASKs = db.SqlQueryable<WCS_AGVTask>(_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();
- }
- }
- }
- }
|