上一篇《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 }