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 出参
}
}