上一篇《C#开发BIMFACE系列13 服务端API之获取转换状态》中介绍了根据文件ID查询单个文件的转换状态。
本文介绍批量获取转换状态详情。
请求地址:POST https://api.bimface.com/translateDetails
说明:应用发起转换以后,可以根据筛选条件,通过该接口批量查询转换状态详情
参数:
请求 path(示例):https://api.bimface.com/translateDetails
请求 header(示例):"Authorization: Bearer dc671840-bacc-4dc5-a134-97c1918d664b"
请求 body(示例):
{ "appKey" : "appKey", //必填 "endDate" : "string", "fileId" : 0, "fileName" : "fileName", "pageNo" : 0, "pageSize" : 0, "sortType" : "sortType", "sourceId" : "d4649ee227e345c8b7f0022342247dec", "startDate" : "string", "status" : 0, "suffix" : "suffix" }
HTTP响应示例(200):application/octet-stream
{ "code" : "success", "data" : { "list" : [ { "appKey" : "appKey", "cost" : 0, "createTime" : "createTime", "databagId" : "498bc694854244abab728b20620cbaf9", "fileId" : 0, "length" : 0, "name" : "name", "offlineDatabagStatus" : "offlineDatabagStatus", "priority" : 0, "reason" : "reason", "retry" : true, "shareToken" : "shareToken", "shareUrl" : "shareUrl", "sourceId" : "d69620720c63480c9f4808bf442ed96a", "status" : "status", "supportOfflineDatabag" : true, "thumbnail" : [ "string" ], "type" : "type" } ], "page" : { "htmlDisplay" : "string", "nextPage" : 0, "pageNo" : 0, "pageSize" : 0, "prePage" : 0, "startIndex" : 0, "totalCount" : 0, "totalPages" : 0 } }, "message" : "" }
请求体参数说明:
经过测试验证,其中 appKey 是必填项,其余参数非必填。
对应封装的请求实体类为:
1 /// <summary> 2 /// 批量获取转换状态详情的请求数据 3 /// </summary> 4 [Serializable] 5 public class TranslateQueryRequest 6 { 7 public TranslateQueryRequest() 8 { 9 FileId = null; 10 Suffix = null; 11 FileName = null; 12 SourceId = null; 13 PageNo = null; 14 PageSize = null; 15 Status = null; 16 SortType = null; 17 StartDate = null; 18 EndDate = null; 19 } 20 21 /// <summary> 22 /// 【必填项】应用的 appKey 23 /// </summary> 24 [JsonProperty("appKey")] 25 public string AppKey { get; set; } 26 27 /// <summary> 28 /// 【非必填项】单模型对应的id,例如:1216871503527744 29 /// </summary> 30 [JsonProperty("fileId", NullValueHandling = NullValueHandling.Ignore)] 31 public string FileId { get; set; } 32 33 /// <summary> 34 /// 【非必填项】单模型的文件类型。例如:rvt(或者igms,dwg…) 35 /// </summary> 36 [JsonProperty("suffix", NullValueHandling = NullValueHandling.Ignore)] 37 public string Suffix { get; set; } 38 39 /// <summary> 40 /// 【非必填项】单模型的名称。例如:translate-test 41 /// </summary> 42 [JsonProperty("fileName", NullValueHandling = NullValueHandling.Ignore)] 43 public string FileName { get; set; } 44 45 /// <summary> 46 /// 【非必填项】模型对应的sourceId。例如:389c28de59ee62e66a7d87ec12692a76 47 /// </summary> 48 [JsonProperty("sourceId", NullValueHandling = NullValueHandling.Ignore)] 49 public string SourceId { get; set; } 50 51 /// <summary> 52 /// 【非必填项】页码 53 /// </summary> 54 [JsonProperty("pageNo",NullValueHandling = NullValueHandling.Ignore)] 55 public int? PageNo { get; set; } 56 57 /// <summary> 58 /// 【非必填项】每页返回数目 59 /// </summary> 60 [JsonProperty("pageSize", NullValueHandling = NullValueHandling.Ignore)] 61 public int? PageSize { get; set; } 62 63 /// <summary> 64 /// 【非必填项】模型状态码。1(处理中) 99(成功) -1(失败) 65 /// </summary> 66 [JsonProperty("status", NullValueHandling = NullValueHandling.Ignore)] 67 public short? Status { get; set; } 68 69 /// <summary> 70 /// 【非必填项】筛选类型 71 /// </summary> 72 [JsonProperty("sortType", NullValueHandling = NullValueHandling.Ignore)] 73 public string SortType { get; set; } 74 75 /// <summary> 76 /// 【非必填项】开始日期。例如:2019-05-01 77 /// </summary> 78 [JsonProperty("startDate", NullValueHandling = NullValueHandling.Ignore)] 79 public string StartDate { get; set; } 80 81 /// <summary> 82 /// 【非必填项】截止日期。例如:2019-05-03 83 /// </summary> 84 [JsonProperty("endDate", NullValueHandling = NullValueHandling.Ignore)] 85 public string EndDate { get; set; } 86 }
C#实现方法:
1 /// <summary> 2 /// 批量获取转换状态详情 3 /// </summary> 4 /// <param name="accessToken">令牌</param> 5 /// <param name="request">请求体参数对象</param> 6 /// <returns></returns> 7 public virtual FileTranslateDetailsResponse GetFileTranslateDetails(string accessToken, TranslateQueryRequest request) 8 { 9 // POST https://api.bimface.com/translateDetails 10 string url = string.Format(BimfaceConstants.API_HOST + "/translateDetails"); 11 12 BimFaceHttpHeaders headers = new BimFaceHttpHeaders(); 13 headers.AddOAuth2Header(accessToken); 14 15 string data = request.SerializeToJson(); 16 17 try 18 { 19 FileTranslateDetailsResponse response; 20 21 HttpManager httpManager = new HttpManager(headers); 22 HttpResult httpResult = httpManager.Post(url,data); 23 if (httpResult.Status == HttpResult.STATUS_SUCCESS) 24 { 25 response = httpResult.Text.DeserializeJsonToObject<FileTranslateDetailsResponse>(); 26 } 27 else 28 { 29 response = new FileTranslateDetailsResponse 30 { 31 Message = httpResult.RefText 32 }; 33 } 34 35 return response; 36 } 37 catch (Exception ex) 38 { 39 throw new Exception("[批量获取转换状态详情]发生异常!", ex); 40 } 41 }
其中调用到的 httpManager.Post() 方法,请参考《C# HTTP系列》
在BIMFACE的控制台中可以看到我们上传的文件列表,共计2个文件。模型状态均为转换成功。
调用上面的GetFileTranslateDetails()方法测试批量查询转换状态:
测试代码如下:
1 // 批量获取转换状态详情 2 protected void btnGetFileTranslateDetails_Click(object sender, EventArgs e) 3 { 4 TranslateQueryRequest request = new TranslateQueryRequest 5 { 6 AppKey = _appKey //必填项 7 }; 8 9 FileConvertApi api = new FileConvertApi(); 10 FileTranslateDetailsResponse response = api.GetFileTranslateDetails(txtAccessToken.Text, request); 11 12 txtResult.Text = response.Code.ToString2() 13 + Environment.NewLine 14 + response.Message.ToString2() 15 + Environment.NewLine 16 + response.Data.ToString2(); 17 }
返回的结果实体类如下:
1 /// <summary> 2 /// 批量获取转换状态详情返回的结果类 3 /// </summary> 4 [Serializable] 5 public class FileTranslateDetailsResponse : GeneralResponse<FileTranslateDetailsEntity> 6 { 7 8 }
1 [Serializable] 2 public class FileTranslateDetailsEntity 3 { 4 [JsonProperty("list")] 5 public Detail[] Details { get; set; } 6 7 [JsonProperty("page")] 8 public Page Page { get; set; } 9 10 /// <summary>返回表示当前对象的字符串。</summary> 11 /// <returns>表示当前对象的字符串。</returns> 12 public override string ToString() 13 { 14 StringBuilder sb = new StringBuilder(); 15 if (Details != null && Details.Length > 0) 16 { 17 for (var i = 0; i < Details.Length; i++) 18 { 19 Detail detail = Details[i]; 20 21 StringBuilder sbThumbnails = new StringBuilder(); 22 string[] thumbnails = detail.Thumbnails; 23 if (thumbnails != null && thumbnails.Length > 0) 24 { 25 foreach (var thumbnail in thumbnails) 26 { 27 sbThumbnails.Append(thumbnail + ";"); 28 } 29 } 30 31 sb.AppendLine(String.Format("\r\nDetail{0}\r\nappKey={1}, cost={2}, createTime={3}, databagId={4}, fileId={5}, length={6}, name={7}, " 32 + "offlineDatabagStatus={8}, priority={9}, reason={10}, retry={11}, shareToken={12}, shareUrl={13}, sourceId={14}, status={15}, supportOfflineDatabag={16}, " 33 + "type={17}, thumbnails={18}", 34 (i + 1), detail.AppKey, detail.Cost, detail.CreateTime, detail.DatabagId, detail.FileId, detail.Length, detail.Name, 35 detail.OfflineDatabagStatus, detail.Priority, detail.Reason, detail.Retry, detail.ShareToken, detail.ShareUrl, detail.SourceId, detail.Status, detail.SupportOfflineDatabag, 36 detail.Type, sbThumbnails)); 37 } 38 } 39 40 sb.AppendLine("\r\npage"); 41 sb.AppendLine(string.Format("prePage={0}, nextPage={1}, pageNo={2}, pageSize={3}, startIndex={4}, totalCount={5}, totalPages={6}", 42 Page.PrePage, Page.NextPage, Page.PageNo, Page.PageSize, Page.StartIndex, Page.TotalCount, Page.TotalPages)); 43 44 return string.Format("FileTranslateDetailsEntity [\r\n{0}\r\n]", sb); 45 } 46 }
1 /// <summary> 2 /// 转换状态详情 3 /// </summary> 4 [Serializable] 5 public class Detail 6 { 7 /// <summary> 8 /// 应用的 appkey 9 /// </summary> 10 [JsonProperty("appKey")] 11 public string AppKey { get; set; } 12 13 /// <summary> 14 /// 任务耗时(单位:秒) 15 /// </summary> 16 [JsonProperty("cost")] 17 public int Cost { get; set; } 18 19 /// <summary> 20 /// 创建时间 21 /// </summary> 22 [JsonProperty("createTime")] 23 public string CreateTime { get; set; } 24 25 /// <summary> 26 /// 数据包id。例如:70b8c10b686061525420fc240bf48aca 27 /// </summary> 28 [JsonProperty("databagId")] 29 public string DatabagId { get; set; } 30 31 /// <summary> 32 /// 模型的fileId。例如:1609858191716512 33 /// </summary> 34 [JsonProperty("fileId")] 35 public long? FileId { get; set; } 36 37 /// <summary> 38 /// 文件长度(单位:字节) 39 /// </summary> 40 [JsonProperty("length")] 41 public long? Length { get; set; } 42 43 /// <summary> 44 /// 集成模型的名称,例如:integrate-test 45 /// </summary> 46 [JsonProperty("name")] 47 public string Name { get; set; } 48 49 /// <summary> 50 /// 离线数据包生成状态:prepare(未生成) processing(生成中) success(生成成功) failed(生成失败) 51 /// </summary> 52 [JsonProperty("offlineDatabagStatus")] 53 public string OfflineDatabagStatus { get; set; } 54 55 /// <summary> 56 /// 任务优先级。 数字越大,优先级越低。1, 2, 3。 57 /// </summary> 58 [JsonProperty("priority")] 59 public short? Priority { get; set; } 60 61 /// <summary> 62 /// 若转换失败,返回失败原因。转换成功时,返回空字符串 63 /// </summary> 64 [JsonProperty("reason")] 65 public string Reason { get; set; } 66 67 /// <summary> 68 /// 重试,true(或者false) 69 /// </summary> 70 [JsonProperty("retry")] 71 public bool? Retry { get; set; } 72 73 /// <summary> 74 /// 分享码。例如:3c476c55 75 /// </summary> 76 [JsonProperty("shareToken")] 77 public string ShareToken { get; set; } 78 79 /// <summary> 80 /// 分享链接。例如:https://api.bimface.com/preview/3c476c55 81 /// </summary> 82 [JsonProperty("shareUrl")] 83 public string ShareUrl { get; set; } 84 85 /// <summary> 86 /// 模型对应的sourceId。该字段暂时空置 87 /// </summary> 88 [JsonProperty("sourceId")] 89 public string SourceId { get; set; } 90 91 /// <summary> 92 /// 模型状态,processing(处理中) success(成功) failed(失败) 93 /// </summary> 94 [JsonProperty("status")] 95 public string Status { get; set; } 96 97 /// <summary> 98 /// 是否支持离线数据包,true(或者false) 99 /// </summary> 100 [JsonProperty("supportOfflineDatabag")] 101 public bool? SupportOfflineDatabag { get; set; } 102 103 /// <summary> 104 /// 模型的缩略图,该字段暂时空置 105 /// </summary> 106 [JsonProperty("thumbnail")] 107 public string[] Thumbnails { get; set; } 108 109 /// <summary> 110 /// 转换类型。例如:rvt-translate(或者igms-translate…) 111 /// </summary> 112 [JsonProperty("type")] 113 public string Type { get; set; } 114 }
1 /// <summary> 2 /// 返回总记录的分页信息 3 /// </summary> 4 [Serializable] 5 public class Page 6 { 7 /// <summary> 8 /// 下一页码 9 /// </summary> 10 [JsonProperty("nextPage")] 11 public int NextPage { get; set; } 12 13 /// <summary> 14 /// 当前页码 15 /// </summary> 16 [JsonProperty("pageNo")] 17 public int PageNo { get; set; } 18 19 /// <summary> 20 /// 每页条目数 21 /// </summary> 22 [JsonProperty("pageSize")] 23 public int PageSize { get; set; } 24 25 /// <summary> 26 /// 上一页码 27 /// </summary> 28 [JsonProperty("prePage")] 29 public int PrePage { get; set; } 30 31 /// <summary> 32 /// 起始索引数 33 /// </summary> 34 [JsonProperty("startIndex")] 35 public int StartIndex { get; set; } 36 37 /// <summary> 38 /// 条目总数 39 /// </summary> 40 [JsonProperty("totalCount")] 41 public int TotalCount { get; set; } 42 43 /// <summary> 44 /// 页码总数 45 /// </summary> 46 [JsonProperty("totalPages")] 47 public int TotalPages { get; set; } 48 }