IMesService.cs 7.4 KB

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