C#开发BIMFACE系列14 服务端API之批量获取转换状态详情

牧云@^-^@ 提交于 2019-11-29 05:40:06

上一篇《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 }
 
 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!