TaskWorkflow.cs 2.5 KB

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