IMesService.cs 5.1 KB

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