IMesService.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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. /// 使用配置的提交(Submit)URL 发起 GET 请求,提交过站结果及时间信息。
  55. /// </summary>
  56. /// <param name="sn">待提交的产品序列号,不能为空或空白。</param>
  57. /// <param name="isSuccess">表示该序列号对应的过站是否成功(业务层面的成功标志)。</param>
  58. /// <param name="start_time">过程开始时间(本地时间或 UTC,取决于与 MES 的约定)。实现方应按与 MES 约定的时区/格式发送。</param>
  59. /// <param name="stop_time">过程结束时间,语义同 <paramref name="start_time"/>。</param>
  60. /// <param name="cancellationToken">用于在外部请求取消时中止异步请求的 <see cref="CancellationToken"/>。默认值为 <see cref="CancellationToken.None"/>。</param>
  61. /// <returns>
  62. /// 一个包含请求结果的元组:
  63. /// IsSuccess 表示提交请求及解析 MES 响应是否被认为成功。
  64. /// Response 为 MES 返回的原始响应字符串或描述错误的信息。
  65. /// </returns>
  66. /// <remarks>
  67. /// - 实现应将时间参数按 MES 要求格式化为查询字符串或适当的请求参数。
  68. /// - 若 <paramref name="start_time"/> 晚于 <paramref name="stop_time"/>,实现应记录并视情况返回失败或抛出异常。
  69. /// - 实现应尊重 <paramref name="cancellationToken"/>,并在取消时尽早中止请求。
  70. /// </remarks>
  71. Task<(bool IsSuccess, string Response)> SubmitGetAsync(int deviceNo, string sn, string comp, string cc, string assypress, bool isSuccess, DateTime start_time, DateTime stop_time, CancellationToken cancellationToken = default);
  72. /// <summary>
  73. /// 使用配置的提交(Submit)URL 发起 GET 请求,提交过站结果及时间信息,并使用指定的超时时间(秒)。
  74. /// </summary>
  75. /// <param name="sn">待提交的产品序列号,不能为空或空白。</param>
  76. /// <param name="isSuccess">表示该序列号对应的过站是否成功。</param>
  77. /// <param name="start_time">过程开始时间。</param>
  78. /// <param name="stop_time">过程结束时间。</param>
  79. /// <param name="timeoutInSeconds">请求超时时间,单位为秒。应为正数。</param>
  80. /// <returns>
  81. /// 一个包含请求结果的元组:
  82. /// IsSuccess 指示提交是否被认为成功。
  83. /// Response 包含 MES 的原始响应或错误信息。
  84. /// </returns>
  85. /// <remarks>
  86. /// - 此重载用于在不传入 <see cref="CancellationToken"/> 的场景中指定超时时间。
  87. /// - 实现应确保对时间参数与布尔参数进行适当的 URL 编码或格式化。
  88. /// </remarks>
  89. Task<(bool IsSuccess, string Response)> SubmitGetAsync(int deviceNo, string sn, string comp, string cc, string assypress, bool isSuccess, DateTime start_time, DateTime stop_time, double timeoutInSeconds);
  90. /// <summary>
  91. /// 获取服务器当前时间
  92. /// </summary>
  93. /// <param name="sn"></param>
  94. /// <param name="timeoutInSeconds"></param>
  95. /// <returns></returns>
  96. Task<(bool IsSuccess, DateTime Now)> GetServerTimeAsync(int deviceNo, string sn, double timeoutInSeconds);
  97. }
  98. }