TaskBookBehavior_63004.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. using DbCommon.BusinessCore.BaseCore;
  2. using DbCommon.Enties.DbModels;
  3. using Pms.DataLibrary.Order;
  4. using ProjectManagementSystem.Common.Core;
  5. using ProjectManagementSystem.Common.DataCache;
  6. using ProjectManagementSystem.Common.Extenions;
  7. using ProjectManagementSystem.Common.Logger;
  8. using ProjectManagementSystem.Common.WebApi;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. namespace ProjectManagementSystem.TaskBookEvent
  15. {
  16. public class TaskBookBehavior_63004 : BaseTaskBookBehaviorV2
  17. {
  18. LocationPropertyManager locationManager = new LocationPropertyManager();
  19. MaterialBindingManager materialBindingManager = new MaterialBindingManager();
  20. public TaskBookBehavior_63004() : base(63004, "库位AGV扫码(LES标签校验)")
  21. {
  22. }
  23. public TaskBookBehavior_63004(int behavior, string remark) : base(behavior, remark)
  24. {
  25. }
  26. public override bool TaskBookOperator(TaskData taskDetailInfo, StepData stepInfo)
  27. {
  28. try
  29. {
  30. //可调用接口放行
  31. var dict = CacheStringToObject.ReleaseAgvDtoDict;
  32. if (dict.ContainsKey(stepInfo.WareHouseID))
  33. {
  34. var releaseAgvData = dict[stepInfo.WareHouseID];
  35. if (releaseAgvData.DataValid)
  36. {
  37. releaseAgvData.Status = 1;
  38. PmsApi.SetCarrierLogicValues(taskDetailInfo.Carrier, 10, new int[] { 0 });
  39. PmsApi.SetCarrierLogicValues(taskDetailInfo.Carrier, 8, new int[] { 0 });
  40. Log(taskDetailInfo, stepInfo, $"已等待手动强制放行");
  41. return true;
  42. }
  43. }
  44. int id = taskDetailInfo.Carrier;
  45. if (!DeviceControl.Instance.Communication.InfoVcuDictionary.ContainsKey(id))
  46. {
  47. Log(taskDetailInfo, stepInfo, "获取VCU扫码数据失败");
  48. PmsApi.SetCarrierLogicValues(taskDetailInfo.Carrier, 10, new int[] { 1 });
  49. return false;
  50. }
  51. var data = DeviceControl.Instance.Communication.InfoVcuDictionary[id];
  52. if (!data.DataValid)
  53. {
  54. Log(taskDetailInfo, stepInfo, $"获取VCU扫码数据超时,最近更新时间:{data.LastUpdateTime.ToString("yyyy-MM-dd HH:mm:ss")} {data.ScanMessage}");
  55. PmsApi.SetCarrierLogicValues(taskDetailInfo.Carrier, 10, new int[] { 1 });
  56. return false;
  57. }
  58. if (string.IsNullOrEmpty(data.ScanMessage))
  59. {
  60. Log(taskDetailInfo, stepInfo, "获取VCU扫码数据为空");
  61. PmsApi.SetCarrierLogicValues(taskDetailInfo.Carrier, 10, new int[] { 1 });
  62. return false;
  63. }
  64. if (data.ScanMessage.Length > 50)
  65. {
  66. Log(taskDetailInfo, stepInfo, $"获取VCU扫码数据长度超限制 {data.ScanMessage}");
  67. PmsApi.SetCarrierLogicValues(taskDetailInfo.Carrier, 10, new int[] { 1 });
  68. return false;
  69. }
  70. PmsApi.SetCarrierLogicValues(taskDetailInfo.Carrier, 10, new int[] { 0 });
  71. var mData = materialBindingManager.GetById(taskDetailInfo.TaskID);
  72. if (mData != null)
  73. {
  74. string targetBarcode = GetTargetBarcode(mData);
  75. if (targetBarcode != data.ScanMessage)
  76. {
  77. var setResult = PmsApi.SetCarrierLogicValues(taskDetailInfo.Carrier, 8, new int[] { 1 });
  78. Log(taskDetailInfo, stepInfo, $"校验物料扫码失败,设置扫码报警{setResult.ToChineseString()} 期望{targetBarcode} 实际{data.ScanMessage}");
  79. return false;
  80. }
  81. var setResult2 = PmsApi.SetCarrierLogicValues(taskDetailInfo.Carrier, 8, new int[] { 0 });
  82. Log(taskDetailInfo, stepInfo, $"校验物料扫码成功,取消扫码报警{setResult2.ToChineseString()} 期望{targetBarcode} 实际{data.ScanMessage}");
  83. }
  84. var locationData = locationManager.GetById(stepInfo.WareHouseID);
  85. if (locationData == null)
  86. {
  87. Log(taskDetailInfo, stepInfo, $"查询库位数据失败 {stepInfo.WareHouseID}");
  88. return false;
  89. }
  90. locationData.MaterialId = data.ScanMessage;
  91. bool result = locationManager.Update(locationData);
  92. Log(taskDetailInfo, stepInfo, $"更新库位AGV扫码{result.ToChineseString()} {data.ScanMessage}");
  93. return result;
  94. }
  95. catch (Exception ex)
  96. {
  97. LogException(ex);
  98. }
  99. return false;
  100. }
  101. public virtual string GetTargetBarcode(MaterialBinding materialBinding)
  102. {
  103. return materialBinding.MaterialBarcode;
  104. }
  105. }
  106. }