FinishTaskList.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Security.Policy;
  4. using WCS.Service.Entity;
  5. using WCS.Service.Extensions;
  6. using WCS.Service.Log;
  7. namespace WCS.Service.Helpers
  8. {
  9. /// <summary>
  10. /// 处理完成任务记录集合
  11. /// </summary>
  12. /// <typeparam name="T"></typeparam>
  13. public class FinishTaskList<T>
  14. {
  15. public FinishTaskList(T finishCode, StationDevice station)
  16. {
  17. FinishCode = finishCode;
  18. Station = station;
  19. }
  20. /// <summary>
  21. /// 完成
  22. /// </summary>
  23. public T FinishCode { get; set; }
  24. /// <summary>
  25. /// 对应设备信息
  26. /// </summary>
  27. public StationDevice Station { get; set; }
  28. }
  29. /// <summary>
  30. /// 处理完成任务记录集合
  31. /// </summary>
  32. /// <typeparam name="T"></typeparam>
  33. public class FinishTaskList<T, T1>
  34. {
  35. public FinishTaskList(T finishCode, T1 station)
  36. {
  37. FinishCode = finishCode;
  38. Station = station;
  39. }
  40. /// <summary>
  41. /// 完成
  42. /// </summary>
  43. public T FinishCode { get; set; }
  44. /// <summary>
  45. /// 对应设备信息
  46. /// </summary>
  47. public T1 Station { get; set; }
  48. }
  49. public static class FinishTaskListExtensions
  50. {
  51. /// <summary>
  52. /// 入库可用任务数是否有效
  53. /// </summary>
  54. /// <param name="finishes"></param>
  55. /// <exception cref="WarnException"></exception>
  56. public static bool Valid(this List<FinishTaskList<string>> finishes, string code)
  57. {
  58. var res = true;
  59. var maxGoodsnum = finishes.Select(v => v.Station.Data2.Goodsnum).OrderByDescending(v => v).FirstOrDefault();
  60. if (finishes.Count != maxGoodsnum)
  61. {
  62. InfoLog.INFO_WarnDb($"可用货物数{finishes.Count},实际货物数{maxGoodsnum}", code, WCS.Entity.WCS_EXCEPTIONTYPE.逻辑异常);
  63. res = false;
  64. };
  65. if (!finishes.Any())
  66. {
  67. InfoLog.INFO_WarnDb("没有任务", code, WCS.Entity.WCS_EXCEPTIONTYPE.逻辑异常);
  68. res = false;
  69. }
  70. return res;
  71. }
  72. /// <summary>
  73. /// 入库可用任务数是否有效
  74. /// </summary>
  75. /// <param name="finishes"></param>
  76. /// <exception cref="WarnException"></exception>
  77. public static List<I_WCS_GetInTaskResponseItem> GetWMSInTask(this List<FinishTaskList<string>> finishes)
  78. {
  79. if (!finishes.Any()) throw new DoException("没有任务");
  80. var items = finishes.ToArray();
  81. var infos = items.Length switch
  82. {
  83. 1 => WMS.I_WCS_GetInTask(items[0].FinishCode, items[0].Station.Entity.CODE),
  84. 2 => WMS.I_WCS_GetInTask(items[0].FinishCode, items[0].Station.Entity.CODE, items[1].FinishCode, items[1].Station.Entity.CODE),
  85. _ => throw new WarnException($"一组任务数量最大为2,当前{items.Length}"),
  86. };
  87. return infos;
  88. }
  89. }
  90. }