using Newtonsoft.Json; using System.Runtime.InteropServices; namespace MainForm.ClassFile.XiaomiAPI { /// /// 小米 MqttClient类 - API拓展方法 /// ⾮结构化(图⽚/⾳频/视频/⽂本/压缩包) /// public partial class XiaomiMqttClient_Extend : XiaomiMqttClient { /// /// ⾮结构化- 事件Id /// private static string UploadFileId { get; set; } = "x5/file/upload/mqtt"; /// /// ⾮结构化- 事件方法 /// /// 事件数据;Json /// 自定义事件Id;如:guid /// public static UploadFileResponse Write_UploadFile(UploadFileRequest request, string dataId = "") { UploadFileResponse response = new UploadFileResponse(); int result = 0; string msg = JsonConvert.SerializeObject(request); byte[] bytes = ToUTF8(msg); // 发送 if (string.IsNullOrEmpty(dataId)) result = Write(UploadFileId, bytes); else result = WriteWithDataId(UploadFileId, bytes, dataId); response.code = result; // ZS 未完 return response; } #region 入参 /// /// ⾮结构化- 参数2 /// 注意事项: /// • 图⽚命名需要遵循⼩⽶标准,按照固定栏位排布,不同栏位存放的信息类别不同,不同栏位间使⽤ /// 下划线‘_’进⾏分隔。若某个栏位没有值则使⽤占位符‘-’代替。同⼀个栏位内的多个字段间使⽤‘-’间隔。如下: /// [项⽬]_[⼯站]_[SN]_[物料 - 功能]_[测试时间]_[定位/检测/测量结果]_[是否原图-当前第⼏张-共⼏张] /// public class UploadFileRequest { /// /// ⽂件所属包 /// ${file_category}/${file_type}/${项⽬号}/${⽣产阶段}/${运⾏模式}/${过站结果}/${装备编码}/${ sn}/${ pass_station_id} /// • 其中file_category的枚举值为: /// ◦ IMAGE /// ◦ TEXT /// • 若对应字段的值为空,则使⽤默认值UNKNOWN /// 注意:⾸位不能出现/,否则会出现路径错误问题。如: /// 正确⽰例IMAGE/IMAGE/N3/debug/online/PASS/MPA-0001/P320N000006B/382f55e9-c2bb /// 错误⽰例:/IMAGE/IMAGE/N3/debug/online/PASS/MPA-0001/P320N000006B/382f55e9-c2bb /// 对⽐之前的要求,改动点如下: /// • 在原有路径的基础上增加前缀: /// ◦ 图⽚对应的是:IMAGE/IMAGE/${项⽬}/${⽣产阶段}/${ 运⾏模式} /// ◦ ⽂本对应的是:TEXT/${file_type}/${ 项⽬}/${⽣产阶段}/${ 运⾏模式} /// • 在最后⼀个路径层级前,插⼊过站ID:pass_station_id /// public string bucket { get; set; } = string.Empty; /// /// ⽂件名 /// 故障事件名称,同数据字典中的事件名称。 /// public string name { get; set; } = string.Empty; /// /// ⽂件内容 /// MultipartFile /// public string file { get; set; } = string.Empty; /// /// ⽂件唯⼀标识 /// 随机⼀串uuid发给我们 /// public string uuid { get; set; } = string.Empty; /// /// md5;传空 /// public string md5 { get; set; } = string.Empty; /// /// 是否上云 /// 是否上传云端,默认传true /// public bool uploadCloud { get; set; } /// /// 是否通知mqtt /// 默认传true /// public bool informMqtt { get; set; } /// /// 发送通知时的负载 /// 必填 /// public MqttPayload mqttPayload { get; set; } = new MqttPayload(); } /// /// ⾮结构化- 参数 - mqttPayload透传的元数据 /// 注意事项: /// • 图⽚命名需要遵循⼩⽶标准,按照固定栏位排布,不同栏位存放的信息类别不同,不同栏位间使⽤ /// 下划线‘_’进⾏分隔。若某个栏位没有值则使⽤占位符‘-’代替。同⼀个栏位内的多个字段间使⽤‘-’间隔。如下: /// [项⽬]_[⼯站]_[SN]_[物料 - 功能]_[测试时间]_[定位/检测/测量结果]_[是否原图-当前第⼏张-共⼏张] /// public class MqttPayload { /// /// ⼯⼚Id /// 对应⼯⼚Id,同过站结果中⼯⼚Id /// public string factory { get; set; } = string.Empty; /// /// 项⽬号 /// 对应当前⽣产的项⽬号,从加载的⼯程名称中获得(需确认加载⼯程项⽬是否第⼀栏为项⽬号信息)。 /// 如M3-MB,取-前⾯ 第⼀个栏⽬的值,即M3。如获取不到或者为空,取默认值UNKNOWN /// public string project_name { get; set; } = string.Empty; /// /// ⽣产阶段 /// 对应⽣产阶段,同配置参数中productMode /// public string product_mode { get; set; } = string.Empty; /// /// 线体 /// 对应线体编码,同过站结果中线体编码 /// public string line_no { get; set; } = string.Empty; /// /// ⼯站 /// 传空,同过站结果⼯站字段。 /// public string work_station_no { get; set; } = string.Empty; /// /// 装备 /// 同device_code,即装备编码(同过站结果) /// public string equipment_no { get; set; } = string.Empty; /// /// ⼯位 /// 对应⼯位Id,同MES中的stationId /// public string station_no { get; set; } = string.Empty; /// /// ⽂件ID /// 同上⾯uuid /// public string file_id { get; set; } = string.Empty; /// /// ⽂件名 /// ⽂件名称 /// public string file_name { get; set; } = string.Empty; /// /// 产品SN /// 产品码 /// public string sn { get; set; } = string.Empty; /// /// ⽂件的⽣成时间 /// public string opt_time { get; set; } = string.Empty; /// /// ⽂件类型 /// 根据⽂件的不同⽽存在差异,需要沟通获取; /// • 图⽚:IMAGE /// • SPI过站明细:SPI_pass_station_item_data_txt /// • AOI过站明细:AOI_pass_station_item_data_txt /// • 贴⽚机过站明细:PCBM_pass_station_item_data_DAT /// • 钢⽹检查机过站明细:SMTM_pass_station_item_data_xlsx /// public string file_type { get; set; } = string.Empty; /// /// ⽂件类别 /// • 图⽚:IMAGE /// • ⽂本:TEXT /// public string file_category { get; set; } = string.Empty; /// /// ⾃定义标签信息 /// 业务⽅⾃定义的标签信息,没有可以不传。多个标签,可以⽤下划线间隔:xx_xx_xxx。AOI装备需要上传此字段,⽤于区分整版图和元器件的图⽚。 /// 枚举值: /// • whole /// • part /// public string tag { get; set; } = string.Empty; /// /// 关联业务信息 - 过站结果id /// 该⾮结构化数据所关联的结构化数据的信息。需要做好转义处理。这⾥传递过站结果id(同MES那边的uuidInspection字段的值), /// 格式为:[{\"pass_station_id\":\"XXXXX\"}]。 /// 如:"reference_info":"[{\"pass_station_id\":\"d092c4db-0d93-49c3-96b9-40caf8d7c812\"}]" /// public string reference_info { get; set; } = string.Empty; } #endregion 入参 #region 出参 /// /// ⾮结构化 - 返回值 /// public class UploadFileResponse { /// /// 响应状态码 /// 200:成功 /// 400:参数错误 /// 500:服务器内部错误 /// public int code { get; set; } /// /// 响应信息 /// 对当前响应结果做具体描述 /// public string msg { get; set; } = string.Empty; /// /// 响应数据 /// 上传结果,包含⽂件链接 /// public UploadResult data { get; set; } = new UploadResult(); } /// /// ⾮结构化 - 返回值 - 上传结果 /// public class UploadResult { /// /// 获取⽂件的唯⼀标识符 /// public string uuid { get; set; } = string.Empty; } #endregion 出参 } }