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();
}
}
}
}