IMesService.cs 7.3 KB

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