TaskWorkflow.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using SqlSugar;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using WCS.Entity.Protocol;
  6. using WCS_Client.Extensions;
  7. using WCS_AGVTask = WCS.Entity.Protocol.WCS_AGVTask;
  8. namespace WCS_Client.Workflow
  9. {
  10. /// <summary>
  11. /// 任务
  12. /// </summary>
  13. public class TaskWorkflow
  14. {
  15. /// <summary>
  16. /// 为任务数据表新增列
  17. /// </summary>
  18. /// <param name="dataTable">数据源</param>
  19. /// <param name="db">数据库链接</param>
  20. public static void DataTableAddColumn(DataTable dataTable, SqlSugarClient db)
  21. {
  22. //新增列
  23. string ADDRCURRENT = "ADDRCURRENT";
  24. string ADDRline = "ADDRline";
  25. dataTable.addDataColumn(new List<string> { ADDRCURRENT, ADDRline });
  26. //获取当前所有任务对应的AGV任务
  27. List<int> agvIDs = (from d in dataTable.AsEnumerable() select d.Field<int>("AgvTask")).Where(p => p > 0).ToList();
  28. string ids = "";
  29. agvIDs.ForEach(p =>
  30. {
  31. ids += p;
  32. if (p != agvIDs[agvIDs.Count - 1]) ids += ",";
  33. });
  34. var _sql = $"select * from WCS_AGVTask where ID in ({(string.IsNullOrEmpty(ids) ? "''" : ids)})";
  35. List<WCS_AGVTask> _AGVTASKs = db.SqlQueryable<WCS_AGVTask>(_sql).ToList();
  36. //向新增列写入数据
  37. for (int i = 0; i < dataTable.Rows.Count; i++)
  38. {
  39. //写入输送线
  40. dataTable.Rows[i][ADDRCURRENT] = eqpData.deviceDataPack.StationDatas.Datas.Where(p => p.D521.Tasknum == (int)dataTable.Rows[i][1]).FirstOrDefault()?.Code;
  41. //不在输送线,尝试写入RGV
  42. if (string.IsNullOrEmpty(dataTable.Rows[i][ADDRCURRENT].ToString()))
  43. {
  44. 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.光电))
  45. || (p.D521.TaskID_2 == (int)dataTable.Rows[i][1] && p.D521.Status_2.HasFlag(RGVStatus.光电))).FirstOrDefault()?.Code;
  46. }
  47. //不在输送线/RGV,尝试写入堆垛机
  48. if (string.IsNullOrEmpty(dataTable.Rows[i][ADDRCURRENT].ToString()))
  49. {
  50. 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;
  51. }
  52. //开始写入产线
  53. dataTable.Rows[i][ADDRline] = _AGVTASKs.Where(p => p.ID == (int)dataTable.Rows[i]["AgvTask"]).FirstOrDefault()?.Position;
  54. dataTable.AcceptChanges();
  55. }
  56. }
  57. }
  58. }