IMesService.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5. namespace TeamAAS_VP.Interfaces
  6. {
  7. /// <summary>
  8. /// MES 通信服务接口。
  9. /// 提供通过配置的 URL 发起 GET 请求的抽象,用于执行过站(Station)与提交结果(Submit)操作。
  10. /// 实现者应负责管理内部 HTTP 客户端或通信资源,并在 Dispose 中释放这些资源。
  11. /// </summary>
  12. public interface IMesService : IDisposable
  13. {
  14. /// <summary>
  15. /// 使用配置的过站(Station)URL 发起 GET 请求,携带序列号(sn)作为查询参数进行过站。
  16. /// </summary>
  17. /// <param name="sn">要过站的产品序列号,不能为空或空白。</param>
  18. /// <param name="cancellationToken">用于在外部请求取消时中止异步请求的 <see cref="CancellationToken"/>。默认值为 <see cref="CancellationToken.None"/>。</param>
  19. /// <returns>
  20. /// 一个包含请求结果的元组:
  21. /// IsSuccess 表示请求并解析 MES 响应是否被认为成功(由实现定义,例如 HTTP 200 且业务状态正常)。
  22. /// Response 为 MES 返回的原始响应字符串或描述错误的信息(不为 null,可为空字符串)。
  23. /// </returns>
  24. /// <remarks>
  25. /// - 实现应从配置中读取过站 URL 并将 sn 作为查询参数附加到 URL。
  26. /// - 实现应尊重 <paramref name="cancellationToken"/>,在取消时尽早抛出 <see cref="OperationCanceledException"/> 或返回失败结果。
  27. /// - 若 <paramref name="sn"/> 无效,应抛出 <see cref="ArgumentNullException"/> 或 <see cref="ArgumentException"/>。
  28. /// </remarks>
  29. Task<(bool IsSuccess, string Response)> StationGetAsync(int deviceNo, string sn, string comp, CancellationToken cancellationToken = default);
  30. /// <summary>
  31. /// 使用配置的过站(Station)URL 发起 GET 请求,携带序列号(sn)作为查询参数进行过站,并使用指定的超时时间(秒)。
  32. /// </summary>
  33. /// <param name="sn">要过站的产品序列号,不能为空或空白。</param>
  34. /// <param name="timeoutInSeconds">请求超时时间,单位为秒。应为正数;实现可以将其应用到 HTTP 客户端或请求级别超时。</param>
  35. /// <returns>
  36. /// 一个包含请求结果的元组:
  37. /// IsSuccess 表示请求并解析 MES 响应是否被认为成功。
  38. /// Response 为 MES 返回的原始响应字符串或描述错误的信息。
  39. /// </returns>
  40. /// <remarks>
  41. /// - 此重载方便在不使用 <see cref="CancellationToken"/> 的场景中指定超时时间。
  42. /// - 实现应验证 <paramref name="timeoutInSeconds"/> 为合理值(例如 > 0),否则可抛出 <see cref="ArgumentOutOfRangeException"/>。
  43. /// </remarks>
  44. Task<(bool IsSuccess, string Response)> StationGetAsync(int deviceNo, string sn, string comp, double timeoutInSeconds);
  45. /// <summary>
  46. /// 过站请求的扩展版本,允许同时指定 <see cref="CancellationToken"/> 和超时时间(秒)。实现应优先考虑取消请求,但在未取消的情况下应用超时。
  47. /// </summary>
  48. /// <param name="sn"></param>
  49. /// <param name="comp"></param>
  50. /// <param name="timeoutInSeconds"></param>
  51. /// <returns></returns>
  52. Task<(bool IsSuccess, string Response)> StationGetExAsync(int deviceNo, string sn, string comp, double timeoutInSeconds);
  53. /// <summary>
  54. /// 过站请求的扩展版本,允许同时指定 <see cref="CancellationToken"/> 和超时时间(秒)。实现应优先考虑取消请求,但在未取消的情况下应用超时。
  55. /// </summary>
  56. /// <param name="sn"></param>
  57. /// <param name="comp"></param>
  58. /// <param name="timeoutInSeconds"></param>
  59. /// <returns></returns>
  60. Task<(bool IsSuccess, string Response)> StationGetEx2Async(int deviceNo, string partSN, string comp, double timeoutInSeconds);
  61. /// <summary>
  62. /// 使用配置的提交(Submit)URL 发起 GET 请求,提交过站结果及时间信息。
  63. /// </summary>
  64. /// <param name="sn">待提交的产品序列号,不能为空或空白。</param>
  65. /// <param name="isSuccess">表示该序列号对应的过站是否成功(业务层面的成功标志)。</param>
  66. /// <param name="start_time">过程开始时间(本地时间或 UTC,取决于与 MES 的约定)。实现方应按与 MES 约定的时区/格式发送。</param>
  67. /// <param name="stop_time">过程结束时间,语义同 <paramref name="start_time"/>。</param>
  68. /// <param name="cancellationToken">用于在外部请求取消时中止异步请求的 <see cref="CancellationToken"/>。默认值为 <see cref="CancellationToken.None"/>。</param>
  69. /// <returns>
  70. /// 一个包含请求结果的元组:
  71. /// IsSuccess 表示提交请求及解析 MES 响应是否被认为成功。
  72. /// Response 为 MES 返回的原始响应字符串或描述错误的信息。
  73. /// </returns>
  74. /// <remarks>
  75. /// - 实现应将时间参数按 MES 要求格式化为查询字符串或适当的请求参数。
  76. /// - 若 <paramref name="start_time"/> 晚于 <paramref name="stop_time"/>,实现应记录并视情况返回失败或抛出异常。
  77. /// - 实现应尊重 <paramref name="cancellationToken"/>,并在取消时尽早中止请求。
  78. /// </remarks>
  79. Task<(bool IsSuccess, string Response)> SubmitGetAsync(int deviceNo, string sn, string comp, List<string> results, string cc, string assypress, bool isSuccess, DateTime start_time, DateTime stop_time, CancellationToken cancellationToken = default);
  80. /// <summary>
  81. /// 使用配置的提交(Submit)URL 发起 GET 请求,提交过站结果及时间信息,并使用指定的超时时间(秒)。
  82. /// </summary>
  83. /// <param name="sn">待提交的产品序列号,不能为空或空白。</param>
  84. /// <param name="isSuccess">表示该序列号对应的过站是否成功。</param>
  85. /// <param name="start_time">过程开始时间。</param>
  86. /// <param name="stop_time">过程结束时间。</param>
  87. /// <param name="timeoutInSeconds">请求超时时间,单位为秒。应为正数。</param>
  88. /// <returns>
  89. /// 一个包含请求结果的元组:
  90. /// IsSuccess 指示提交是否被认为成功。
  91. /// Response 包含 MES 的原始响应或错误信息。
  92. /// </returns>
  93. /// <remarks>
  94. /// - 此重载用于在不传入 <see cref="CancellationToken"/> 的场景中指定超时时间。
  95. /// - 实现应确保对时间参数与布尔参数进行适当的 URL 编码或格式化。
  96. /// </remarks>
  97. Task<(bool IsSuccess, string Response)> SubmitGetAsync(int deviceNo, string sn, string comp, List<string> results, string cc, string assypress, bool isSuccess, DateTime start_time, DateTime stop_time, double timeoutInSeconds);
  98. /// <summary>
  99. /// 获取服务器当前时间
  100. /// </summary>
  101. /// <param name="sn"></param>
  102. /// <param name="timeoutInSeconds"></param>
  103. /// <returns></returns>
  104. Task<(bool IsSuccess, DateTime Now)> GetServerTimeAsync(int deviceNo, string sn, double timeoutInSeconds);
  105. /// <summary>
  106. /// 上传log
  107. /// </summary>
  108. /// <param name="sn"></param>
  109. /// <param name="name"></param>
  110. /// <param name="cancellationToken"></param>
  111. /// <returns></returns>
  112. Task<(bool IsSuccess, string Response)> SendFtpFileAsync(string sn, string name, CancellationToken cancellationToken = default);
  113. }
  114. }