You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by wa...@apache.org on 2022/10/18 11:23:55 UTC
[incubator-devlake] 01/03: fix(tapd): add std value for status changelogs
This is an automated email from the ASF dual-hosted git repository.
warren pushed a commit to branch release-v0.14
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git
commit 507d56c803baf1935e9eeab9ef44be0a13841d60
Author: Yingchu Chen <yi...@merico.dev>
AuthorDate: Mon Oct 17 16:28:42 2022 +0800
fix(tapd): add std value for status changelogs
closes #3450 #3451
---
plugins/tapd/e2e/bug_changelog_test.go | 46 ++++++++++++++++++++++
.../raw_tables/_raw_tapd_api_story_changelogs.csv | 4 +-
.../snapshot_tables/_tool_tapd_bug_labels_bug.csv | 42 ++++++++++----------
.../_tool_tapd_story_changelog_items.csv | 2 +-
.../tapd/e2e/snapshot_tables/board_issues_bug.csv | 40 +++++++++----------
.../e2e/snapshot_tables/board_issues_story.csv | 40 +++++++++----------
.../tapd/e2e/snapshot_tables/board_issues_task.csv | 30 +++++++-------
.../e2e/snapshot_tables/issue_changelogs_story.csv | 16 ++++----
plugins/tapd/e2e/story_changelog_test.go | 44 +++++++++++++++++++++
plugins/tapd/models/bug_status.go | 24 ++++++++++-
plugins/tapd/models/story_status.go | 12 ++++++
plugins/tapd/tasks/bug_changelog_converter.go | 16 +++++++-
plugins/tapd/tasks/bug_converter.go | 21 +++++-----
plugins/tapd/tasks/bug_extractor.go | 25 +-----------
plugins/tapd/tasks/shared.go | 36 ++++++++++++++---
plugins/tapd/tasks/story_changelog_converter.go | 15 +++++++
plugins/tapd/tasks/story_converter.go | 2 +-
plugins/tapd/tasks/story_extractor.go | 29 +++-----------
plugins/tapd/tasks/task_changelog_converter.go | 19 +++++++++
plugins/tapd/tasks/task_converter.go | 2 +-
20 files changed, 311 insertions(+), 154 deletions(-)
diff --git a/plugins/tapd/e2e/bug_changelog_test.go b/plugins/tapd/e2e/bug_changelog_test.go
index 69424172..81d66b01 100644
--- a/plugins/tapd/e2e/bug_changelog_test.go
+++ b/plugins/tapd/e2e/bug_changelog_test.go
@@ -38,8 +38,54 @@ func TestTapdBugChangelogDataFlow(t *testing.T) {
ConnectionId: 1,
CompanyId: 99,
WorkspaceId: 991,
+ TransformationRules: tasks.TransformationRules{
+ TypeMappings: map[string]tasks.TypeMapping{
+ "Techstory": {
+ StandardType: "REQUIREMENT",
+ },
+ "技术债": {
+ StandardType: "REQUIREMENT",
+ },
+ "需求": {
+ StandardType: "REQUIREMENT",
+ },
+ },
+ StatusMappings: map[string]tasks.OriginalStatus{
+ "doneStatus": []string{"已关闭"},
+ "inprogressStatus": []string{"开发中", "developing", "test-11test-11test-12"},
+ "todoStatus": []string{"重新打开", "planning", "test-11test-11test-11"},
+ },
+ },
},
}
+
+ // bug status
+ // import raw data table
+ dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_tapd_api_bug_status.csv",
+ "_raw_tapd_api_bug_status")
+ dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_tapd_api_bug_status_last_steps.csv",
+ "_raw_tapd_api_bug_status_last_steps")
+
+ // verify extraction
+ dataflowTester.FlushTabler(&models.TapdBugStatus{})
+ dataflowTester.Subtask(tasks.ExtractBugStatusMeta, taskData)
+ dataflowTester.Subtask(tasks.EnrichBugStatusLastStepMeta, taskData)
+ dataflowTester.VerifyTable(
+ models.TapdBugStatus{},
+ "./snapshot_tables/_tool_tapd_bug_statuses.csv",
+ []string{
+ "connection_id",
+ "workspace_id",
+ "english_name",
+ "chinese_name",
+ "is_last_step",
+ "_raw_data_params",
+ "_raw_data_table",
+ "_raw_data_id",
+ "_raw_data_remark",
+ },
+ )
+
// import raw data table
dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_tapd_api_bug_changelogs.csv",
"_raw_tapd_api_bug_changelogs")
diff --git a/plugins/tapd/e2e/raw_tables/_raw_tapd_api_story_changelogs.csv b/plugins/tapd/e2e/raw_tables/_raw_tapd_api_story_changelogs.csv
index 332af0c1..3efc3ac9 100644
--- a/plugins/tapd/e2e/raw_tables/_raw_tapd_api_story_changelogs.csv
+++ b/plugins/tapd/e2e/raw_tables/_raw_tapd_api_story_changelogs.csv
@@ -1,6 +1,6 @@
id,params,data,url,input,created_at
1,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}","{""WorkitemChange"":{""id"":""11991001000065"",""workspace_id"":""991"",""workitem_type_id"":""0"",""creator"":""test-11test-11"",""created"":""2019-12-12 15:46:25"",""change_summary"":""delete"",""comment"":null,""changes"":""[{\""field\"":\""delete_story\"",\""value_before\"":\""--\"",\""value_after\"":\""--\""}]"",""entity_type"":""Story"",""change_type"":"""",""change_type_text"":"""",""field_changes"":[{""field"":""delete [...]
2,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}","{""WorkitemChange"":{""id"":""11991001000093"",""workspace_id"":""991"",""workitem_type_id"":""11991001000020"",""creator"":""test-11test-11test-11"",""created"":""2019-12-12 18:01:42"",""change_summary"":""planning"",""comment"":null,""changes"":""[{\""field\"":\""owner\"",\""value_before\"":\""\"",\""value_after\"":\""u5d14u6600;\""}]"",""entity_type"":""Story"",""change_type"":"""",""change_type_text"":"""",""field_changes" [...]
-3,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}","{""WorkitemChange"":{""id"":""11991001000095"",""workspace_id"":""991"",""workitem_type_id"":""11991001000020"",""creator"":""test-11test-11test-11"",""created"":""2019-12-12 18:12:07"",""change_summary"":""planning"",""comment"":""test-11test-11test-11test-11<div><\/div>"",""changes"":""[{\""field\"":\""status\"",\""value_before\"":\""planning\"",\""value_after\"":\""developing\""},{\""field\"":\""owner\"",\""value_before\"": [...]
+3,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}","{""WorkitemChange"":{""id"":""11991001000095"",""workspace_id"":""991"",""workitem_type_id"":""11991001000020"",""creator"":""test-11test-11test-11"",""created"":""2019-12-12 18:12:07"",""change_summary"":""planning"",""comment"":""test-11test-11test-11test-11<div><\/div>"",""changes"":""[{\""field\"":\""status\"",\""value_before\"":\""planning\"",\""value_after\"":\""developing\""},{\""field\"":\""owner\"",\""value_before\"": [...]
4,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}","{""WorkitemChange"":{""id"":""11991001000096"",""workspace_id"":""991"",""workitem_type_id"":""11991001000020"",""creator"":""test-11test-11test-11"",""created"":""2019-12-12 18:13:04"",""change_summary"":""developing"",""comment"":null,""changes"":""[{\""field\"":\""due\"",\""value_before\"":\""2019-12-13\"",\""value_after\"":\""2020-01-08\""}]"",""entity_type"":""Story"",""change_type"":"""",""change_type_text"":"""",""field [...]
-5,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}","{""WorkitemChange"":{""id"":""11991001000103"",""workspace_id"":""991"",""workitem_type_id"":""0"",""creator"":""test-11test-11test-11"",""created"":""2019-12-12 18:21:58"",""change_summary"":""planning"",""comment"":null,""changes"":""[{\""field\"":\""name\"",\""value_before\"":\""\test-11\test-11\test-11\test-11\"",\""value_after\"":\""\test-11\test-11\test-11\test-11\""}]"",""entity_type"":""Story"",""change_type"":"""",""c [...]
+5,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}","{""WorkitemChange"":{""id"":""11991001000103"",""workspace_id"":""991"",""workitem_type_id"":""0"",""creator"":""test-11test-11test-11"",""created"":""2019-12-12 18:21:58"",""change_summary"":""planning"",""comment"":null,""changes"":""[{\""field\"":\""name\"",\""value_before\"":\""开发中\"",\""value_after\"":\""\test-11\test-11\test-11\test-11\""}]"",""entity_type"":""Story"",""change_type"":"""",""change_type_text"":"""",""fiel [...]
diff --git a/plugins/tapd/e2e/snapshot_tables/_tool_tapd_bug_labels_bug.csv b/plugins/tapd/e2e/snapshot_tables/_tool_tapd_bug_labels_bug.csv
index 066a9832..4d947861 100644
--- a/plugins/tapd/e2e/snapshot_tables/_tool_tapd_bug_labels_bug.csv
+++ b/plugins/tapd/e2e/snapshot_tables/_tool_tapd_bug_labels_bug.csv
@@ -1,21 +1,21 @@
-id,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark,url,issue_key,title,description,epic_key,type,status,original_status,story_point,resolution_date,created_date,updated_date,lead_time_minutes,parent_issue_id,priority,original_estimate_minutes,time_spent_minutes,time_remaining_minutes,creator_id,assignee_id,assignee_name,severity,component,icon_url,creator_name
-tapd:TapdIssue:1:11991001001025,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1271,,https://www.tapd.cn/991/prong/stories/view/11991001001025,11991001001025,,,,BUG,IN_PROGRESS,,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11.,tapd:TapdAccount:1:,,normal,,,test-11test-11.
-tapd:TapdIssue:1:11991001001030,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1272,,https://www.tapd.cn/991/prong/stories/view/11991001001030,11991001001030,,,,BUG,IN_PROGRESS,开发中,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11.,tapd:TapdAccount:1:,,normal,,,test-11test-11.
-tapd:TapdIssue:1:11991001001031,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1273,,https://www.tapd.cn/991/prong/stories/view/11991001001031,11991001001031,,,,BUG,IN_PROGRESS,开发中,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11.,tapd:TapdAccount:1:,,normal,,,test-11test-11.
-tapd:TapdIssue:1:11991001001032,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1274,,https://www.tapd.cn/991/prong/stories/view/11991001001032,11991001001032,,,,BUG,IN_PROGRESS,,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11.,tapd:TapdAccount:1:,,normal,,,test-11test-11.
-tapd:TapdIssue:1:11991001001417,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1275,,https://www.tapd.cn/991/prong/stories/view/11991001001417,11991001001417,,,,BUG,DONE,已拒绝,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,normal,,,test-11test-11test-11
-tapd:TapdIssue:1:11991001001418,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1276,,https://www.tapd.cn/991/prong/stories/view/11991001001418,11991001001418,,,,BUG,DONE,已拒绝,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,normal,,,test-11test-11test-11
-tapd:TapdIssue:1:11991001001420,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1277,,https://www.tapd.cn/991/prong/stories/view/11991001001420,11991001001420,,,,BUG,IN_PROGRESS,,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:,,normal,,,test-11test-11test-11
-tapd:TapdIssue:1:11991001001422,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1278,,https://www.tapd.cn/991/prong/stories/view/11991001001422,11991001001422,,,,BUG,DONE,已拒绝,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,normal,,,test-11test-11test-11
-tapd:TapdIssue:1:11991001001423,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1279,,https://www.tapd.cn/991/prong/stories/view/11991001001423,11991001001423,,,,BUG,DONE,已拒绝,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,normal,,,test-11test-11test-11
-tapd:TapdIssue:1:11991001001425,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1280,,https://www.tapd.cn/991/prong/stories/view/11991001001425,11991001001425,,,,BUG,IN_PROGRESS,,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:,,normal,,,test-11test-11test-11
-tapd:TapdIssue:1:11991001001426,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1281,,https://www.tapd.cn/991/prong/stories/view/11991001001426,11991001001426,,,,BUG,DONE,已拒绝,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,normal,,,test-11test-11test-11
-tapd:TapdIssue:1:11991001001447,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1282,,https://www.tapd.cn/991/prong/stories/view/11991001001447,11991001001447,,,,BUG,IN_PROGRESS,,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:,,normal,,,test-11test-11test-11
-tapd:TapdIssue:1:11991001001448,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1283,,https://www.tapd.cn/991/prong/stories/view/11991001001448,11991001001448,,,,BUG,DONE,已拒绝,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,normal,,,test-11test-11test-11
-tapd:TapdIssue:1:11991001001450,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1284,,https://www.tapd.cn/991/prong/stories/view/11991001001450,11991001001450,,,,BUG,IN_PROGRESS,,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:,,normal,,,test-11test-11test-11
-tapd:TapdIssue:1:11991001001451,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1285,,https://www.tapd.cn/991/prong/stories/view/11991001001451,11991001001451,,,,BUG,IN_PROGRESS,,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:,,normal,,,test-11test-11test-11
-tapd:TapdIssue:1:11991001001710,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1286,,https://www.tapd.cn/991/prong/stories/view/11991001001710,11991001001710,,,,BUG,DONE,已拒绝,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,normal,,,test-11test-11test-11
-tapd:TapdIssue:1:11991001001711,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1287,,https://www.tapd.cn/991/prong/stories/view/11991001001711,11991001001711,,,,BUG,DONE,已拒绝,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,normal,,,test-11test-11test-11
-tapd:TapdIssue:1:11991001001737,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1288,,https://www.tapd.cn/991/prong/stories/view/11991001001737,11991001001737,,,,BUG,IN_PROGRESS,,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:,,normal,,,test-11test-11test-11
-tapd:TapdIssue:1:11991001001739,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1289,,https://www.tapd.cn/991/prong/stories/view/11991001001739,11991001001739,,,,BUG,IN_PROGRESS,,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:tt90ddtt9a81tt5bb5,tapd:TapdAccount:1:,,normal,,,tt90ddtt9a81tt5bb5
-tapd:TapdIssue:1:11991001001740,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1290,,https://www.tapd.cn/991/prong/stories/view/11991001001740,11991001001740,,,,BUG,DONE,已拒绝,0,,,,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:郝骁宵,tapd:TapdAccount:1:郝骁宵,郝骁宵,normal,,,郝骁宵
+id,url,issue_key,title,description,epic_key,type,status,original_status,story_point,resolution_date,created_date,updated_date,lead_time_minutes,parent_issue_id,priority,original_estimate_minutes,time_spent_minutes,time_remaining_minutes,creator_id,assignee_id,assignee_name,severity,component,icon_url,creator_name,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+tapd:TapdIssue:1:11991001001025,https://www.tapd.cn/991/prong/stories/view/11991001001025,11991001001025,,,,BUG,IN_PROGRESS,,0,2020-02-14T07:14:30.000+00:00,2020-02-13T06:04:29.000+00:00,2020-02-14T08:50:03.000+00:00,1510,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11.,tapd:TapdAccount:1:,,normal,,,test-11test-11.,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1271,
+tapd:TapdIssue:1:11991001001030,https://www.tapd.cn/991/prong/stories/view/11991001001030,11991001001030,,,,BUG,IN_PROGRESS,开发中,0,2020-02-14T07:12:58.000+00:00,2020-02-13T06:33:47.000+00:00,2020-02-17T03:57:42.000+00:00,1479,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11.,tapd:TapdAccount:1:,,normal,,,test-11test-11.,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1272,
+tapd:TapdIssue:1:11991001001031,https://www.tapd.cn/991/prong/stories/view/11991001001031,11991001001031,,,,BUG,IN_PROGRESS,开发中,0,2020-02-14T08:30:23.000+00:00,2020-02-13T06:45:11.000+00:00,2020-02-17T03:56:58.000+00:00,1545,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11.,tapd:TapdAccount:1:,,normal,,,test-11test-11.,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1273,
+tapd:TapdIssue:1:11991001001032,https://www.tapd.cn/991/prong/stories/view/11991001001032,11991001001032,,,,BUG,IN_PROGRESS,,0,2020-02-13T09:33:17.000+00:00,2020-02-13T06:50:33.000+00:00,2020-02-17T03:56:36.000+00:00,162,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11.,tapd:TapdAccount:1:,,normal,,,test-11test-11.,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1274,
+tapd:TapdIssue:1:11991001001417,https://www.tapd.cn/991/prong/stories/view/11991001001417,11991001001417,,,,BUG,DONE,已拒绝,0,,2020-02-25T08:01:11.000+00:00,2020-03-04T08:12:14.000+00:00,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,normal,,,test-11test-11test-11,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1275,
+tapd:TapdIssue:1:11991001001418,https://www.tapd.cn/991/prong/stories/view/11991001001418,11991001001418,,,,BUG,DONE,已拒绝,0,,2020-02-25T08:04:12.000+00:00,2020-03-04T08:27:29.000+00:00,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,normal,,,test-11test-11test-11,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1276,
+tapd:TapdIssue:1:11991001001420,https://www.tapd.cn/991/prong/stories/view/11991001001420,11991001001420,,,,BUG,IN_PROGRESS,,0,2020-03-04T07:41:18.000+00:00,2020-02-25T08:07:04.000+00:00,2020-03-04T08:20:12.000+00:00,11494,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:,,normal,,,test-11test-11test-11,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1277,
+tapd:TapdIssue:1:11991001001422,https://www.tapd.cn/991/prong/stories/view/11991001001422,11991001001422,,,,BUG,DONE,已拒绝,0,,2020-02-25T08:10:51.000+00:00,2020-03-04T08:12:17.000+00:00,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,normal,,,test-11test-11test-11,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1278,
+tapd:TapdIssue:1:11991001001423,https://www.tapd.cn/991/prong/stories/view/11991001001423,11991001001423,,,,BUG,DONE,已拒绝,0,,2020-02-25T08:12:56.000+00:00,2020-03-04T08:25:19.000+00:00,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,normal,,,test-11test-11test-11,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1279,
+tapd:TapdIssue:1:11991001001425,https://www.tapd.cn/991/prong/stories/view/11991001001425,11991001001425,,,,BUG,IN_PROGRESS,,0,2020-03-04T07:41:01.000+00:00,2020-02-25T08:18:40.000+00:00,2020-03-04T08:19:48.000+00:00,11482,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:,,normal,,,test-11test-11test-11,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1280,
+tapd:TapdIssue:1:11991001001426,https://www.tapd.cn/991/prong/stories/view/11991001001426,11991001001426,,,,BUG,DONE,已拒绝,0,,2020-02-25T08:23:39.000+00:00,2020-03-04T08:12:19.000+00:00,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,normal,,,test-11test-11test-11,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1281,
+tapd:TapdIssue:1:11991001001447,https://www.tapd.cn/991/prong/stories/view/11991001001447,11991001001447,,,,BUG,IN_PROGRESS,,0,2020-03-17T08:43:28.000+00:00,2020-02-27T03:06:59.000+00:00,2020-03-18T08:24:37.000+00:00,27696,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:,,normal,,,test-11test-11test-11,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1282,
+tapd:TapdIssue:1:11991001001448,https://www.tapd.cn/991/prong/stories/view/11991001001448,11991001001448,,,,BUG,DONE,已拒绝,0,,2020-02-27T03:14:02.000+00:00,2020-04-27T02:53:11.000+00:00,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,normal,,,test-11test-11test-11,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1283,
+tapd:TapdIssue:1:11991001001450,https://www.tapd.cn/991/prong/stories/view/11991001001450,11991001001450,,,,BUG,IN_PROGRESS,,0,2020-03-17T08:43:04.000+00:00,2020-02-27T03:18:04.000+00:00,2020-03-18T08:24:15.000+00:00,27685,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:,,normal,,,test-11test-11test-11,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1284,
+tapd:TapdIssue:1:11991001001451,https://www.tapd.cn/991/prong/stories/view/11991001001451,11991001001451,,,,BUG,IN_PROGRESS,,0,2020-03-17T08:42:17.000+00:00,2020-02-27T03:36:29.000+00:00,2020-03-18T08:23:08.000+00:00,27665,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:,,normal,,,test-11test-11test-11,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1285,
+tapd:TapdIssue:1:11991001001710,https://www.tapd.cn/991/prong/stories/view/11991001001710,11991001001710,,,,BUG,DONE,已拒绝,0,,2020-03-13T06:14:26.000+00:00,2020-04-01T09:38:36.000+00:00,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,normal,,,test-11test-11test-11,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1286,
+tapd:TapdIssue:1:11991001001711,https://www.tapd.cn/991/prong/stories/view/11991001001711,11991001001711,,,,BUG,DONE,已拒绝,0,,2020-03-13T06:20:04.000+00:00,2020-04-01T09:37:52.000+00:00,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,normal,,,test-11test-11test-11,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1287,
+tapd:TapdIssue:1:11991001001737,https://www.tapd.cn/991/prong/stories/view/11991001001737,11991001001737,,,,BUG,IN_PROGRESS,,0,2020-03-26T08:31:05.000+00:00,2020-03-18T07:27:14.000+00:00,2020-03-26T09:02:54.000+00:00,11583,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:test-11test-11test-11,tapd:TapdAccount:1:,,normal,,,test-11test-11test-11,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1288,
+tapd:TapdIssue:1:11991001001739,https://www.tapd.cn/991/prong/stories/view/11991001001739,11991001001739,,,,BUG,IN_PROGRESS,,0,2020-03-26T08:25:10.000+00:00,2020-03-18T07:32:55.000+00:00,2020-03-26T09:02:37.000+00:00,11572,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:tt90ddtt9a81tt5bb5,tapd:TapdAccount:1:,,normal,,,tt90ddtt9a81tt5bb5,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1289,
+tapd:TapdIssue:1:11991001001740,https://www.tapd.cn/991/prong/stories/view/11991001001740,11991001001740,,,,BUG,DONE,已拒绝,0,,2020-03-18T07:37:43.000+00:00,2020-03-25T02:38:34.000+00:00,0,tapd:TapdIssue:1:0,medium,0,0,0,tapd:TapdAccount:1:郝骁宵,tapd:TapdAccount:1:郝骁宵,郝骁宵,normal,,,郝骁宵,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1290,
diff --git a/plugins/tapd/e2e/snapshot_tables/_tool_tapd_story_changelog_items.csv b/plugins/tapd/e2e/snapshot_tables/_tool_tapd_story_changelog_items.csv
index 933d48ad..23725838 100644
--- a/plugins/tapd/e2e/snapshot_tables/_tool_tapd_story_changelog_items.csv
+++ b/plugins/tapd/e2e/snapshot_tables/_tool_tapd_story_changelog_items.csv
@@ -3,6 +3,6 @@ connection_id,changelog_id,field,value_before_parsed,value_after_parsed,iteratio
1,11991001000093,owner,--,u5d14u6600;,0,0,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,2,
1,11991001000095,comment,--,test-11test-11test-11test-11,0,0,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,3,
1,11991001000095,owner,u5d14u6600;,u5d14u6600;u9648u5fd7u9274;,0,0,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,3,
-1,11991001000095,status,test-11test-11test-11,test-11test-11test-11,0,0,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,3,
+1,11991001000095,status,test-11test-11test-11,test-11test-11test-12,0,0,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,3,
1,11991001000096,due,2019-12-13,2020-01-08,0,0,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,4,
1,11991001000103,name,test-11test-11test-11test-11,test-11test-11test-11test-11,0,0,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,5,
diff --git a/plugins/tapd/e2e/snapshot_tables/board_issues_bug.csv b/plugins/tapd/e2e/snapshot_tables/board_issues_bug.csv
index 9ed5c20f..2f39f9b1 100644
--- a/plugins/tapd/e2e/snapshot_tables/board_issues_bug.csv
+++ b/plugins/tapd/e2e/snapshot_tables/board_issues_bug.csv
@@ -1,21 +1,21 @@
board_id,issue_id,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001025,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1271,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001030,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1272,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001031,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1273,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001032,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1274,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001417,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1275,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001418,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1276,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001420,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1277,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001422,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1278,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001423,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1279,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001425,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1280,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001426,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1281,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001447,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1282,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001448,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1283,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001450,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1284,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001451,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1285,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001710,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1286,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001711,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1287,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001737,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1288,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001739,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1289,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001001740,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1290,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001025,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1271,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001030,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1272,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001031,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1273,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001032,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1274,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001417,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1275,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001418,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1276,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001420,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1277,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001422,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1278,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001423,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1279,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001425,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1280,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001426,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1281,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001447,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1282,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001448,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1283,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001450,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1284,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001451,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1285,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001710,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1286,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001711,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1287,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001737,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1288,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001739,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1289,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001001740,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_bugs,1290,
diff --git a/plugins/tapd/e2e/snapshot_tables/board_issues_story.csv b/plugins/tapd/e2e/snapshot_tables/board_issues_story.csv
index c47e3861..11743bec 100644
--- a/plugins/tapd/e2e/snapshot_tables/board_issues_story.csv
+++ b/plugins/tapd/e2e/snapshot_tables/board_issues_story.csv
@@ -1,21 +1,21 @@
board_id,issue_id,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001037563,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,1,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001037696,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,2,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001037697,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,3,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001038322,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,4,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001038323,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,5,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001038697,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,6,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001038911,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,7,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001038912,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,8,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001039664,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,9,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001039673,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,10,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001040086,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,11,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001040088,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,12,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001041163,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,13,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001041164,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,14,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001041165,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,15,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001041166,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,16,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001041788,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,17,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001041789,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,18,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001041899,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,19,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001041900,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,20,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001037563,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,1,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001037696,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,2,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001037697,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,3,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001038322,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,4,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001038323,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,5,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001038697,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,6,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001038911,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,7,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001038912,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,8,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001039664,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,9,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001039673,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,10,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001040086,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,11,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001040088,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,12,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001041163,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,13,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001041164,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,14,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001041165,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,15,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001041166,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,16,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001041788,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,17,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001041789,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,18,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001041899,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,19,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001041900,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_stories,20,
diff --git a/plugins/tapd/e2e/snapshot_tables/board_issues_task.csv b/plugins/tapd/e2e/snapshot_tables/board_issues_task.csv
index 75cadfb1..df972fc8 100644
--- a/plugins/tapd/e2e/snapshot_tables/board_issues_task.csv
+++ b/plugins/tapd/e2e/snapshot_tables/board_issues_task.csv
@@ -1,16 +1,16 @@
board_id,issue_id,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001015107,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4339,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001015121,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4340,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001015142,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4341,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001015184,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4342,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001015203,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4343,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001015207,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4344,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001015253,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4345,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001015307,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4346,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001015309,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4347,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001015340,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4348,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001015361,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4349,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001015431,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4350,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001015441,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4351,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001015452,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4352,
-tapd:TapdWorkspace:991,tapd:TapdIssue:1:11991001015583,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4353,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001015107,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4339,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001015121,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4340,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001015142,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4341,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001015184,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4342,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001015203,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4343,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001015207,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4344,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001015253,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4345,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001015307,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4346,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001015309,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4347,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001015340,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4348,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001015361,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4349,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001015431,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4350,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001015441,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4351,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001015452,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4352,
+tapd:TapdWorkspace:1:991,tapd:TapdIssue:1:11991001015583,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_tasks,4353,
diff --git a/plugins/tapd/e2e/snapshot_tables/issue_changelogs_story.csv b/plugins/tapd/e2e/snapshot_tables/issue_changelogs_story.csv
index 7af650a7..574a490b 100644
--- a/plugins/tapd/e2e/snapshot_tables/issue_changelogs_story.csv
+++ b/plugins/tapd/e2e/snapshot_tables/issue_changelogs_story.csv
@@ -1,8 +1,8 @@
-id,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark,issue_id,author_id,author_name,field_id,field_name,from_value,to_value,created_date,original_from_value,original_to_value
-tapd:TapdStoryChangelog:1:11991001000065:delete_story,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,1,,tapd:TapdIssue:1:11991001000028,tapd:TapdAccount:1:test-11test-11,test-11test-11,delete_story,delete_story,,,2019-12-12T07:46:25.000+00:00,--,--
-tapd:TapdStoryChangelog:1:11991001000093:owner,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,2,,tapd:TapdIssue:1:11991001000033,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,owner,owner,,,2019-12-12T10:01:42.000+00:00,--,u5d14u6600;
-tapd:TapdStoryChangelog:1:11991001000095:comment,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,3,,tapd:TapdIssue:1:11991001000033,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,comment,comment,,,2019-12-12T10:12:07.000+00:00,--,test-11test-11test-11test-11
-tapd:TapdStoryChangelog:1:11991001000095:owner,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,3,,tapd:TapdIssue:1:11991001000033,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,owner,owner,,,2019-12-12T10:12:07.000+00:00,u5d14u6600;,u5d14u6600;u9648u5fd7u9274;
-tapd:TapdStoryChangelog:1:11991001000095:status,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,3,,tapd:TapdIssue:1:11991001000033,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,status,status,,,2019-12-12T10:12:07.000+00:00,test-11test-11test-11,test-11test-11test-11
-tapd:TapdStoryChangelog:1:11991001000096:due,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,4,,tapd:TapdIssue:1:11991001000033,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,due,due,,,2019-12-12T10:13:04.000+00:00,2019-12-13,2020-01-08
-tapd:TapdStoryChangelog:1:11991001000103:name,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,5,,tapd:TapdIssue:1:11991001000046,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,name,name,,,2019-12-12T10:21:58.000+00:00,test-11test-11test-11test-11,test-11test-11test-11test-11
+id,issue_id,author_id,author_name,field_id,field_name,from_value,to_value,created_date,original_from_value,original_to_value,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+tapd:TapdStoryChangelog:1:11991001000065:delete_story,tapd:TapdIssue:1:11991001000028,tapd:TapdAccount:1:test-11test-11,test-11test-11,delete_story,delete_story,,,2019-12-12T07:46:25.000+00:00,--,--,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,1,
+tapd:TapdStoryChangelog:1:11991001000093:owner,tapd:TapdIssue:1:11991001000033,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,owner,owner,,,2019-12-12T10:01:42.000+00:00,--,u5d14u6600;,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,2,
+tapd:TapdStoryChangelog:1:11991001000095:comment,tapd:TapdIssue:1:11991001000033,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,comment,comment,,,2019-12-12T10:12:07.000+00:00,--,test-11test-11test-11test-11,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,3,
+tapd:TapdStoryChangelog:1:11991001000095:owner,tapd:TapdIssue:1:11991001000033,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,owner,owner,,,2019-12-12T10:12:07.000+00:00,u5d14u6600;,u5d14u6600;u9648u5fd7u9274;,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,3,
+tapd:TapdStoryChangelog:1:11991001000095:status,tapd:TapdIssue:1:11991001000033,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,status,status,todoStatus,inprogressStatus,2019-12-12T10:12:07.000+00:00,test-11test-11test-11,test-11test-11test-12,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,3,
+tapd:TapdStoryChangelog:1:11991001000096:due,tapd:TapdIssue:1:11991001000033,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,due,due,,,2019-12-12T10:13:04.000+00:00,2019-12-13,2020-01-08,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,4,
+tapd:TapdStoryChangelog:1:11991001000103:name,tapd:TapdIssue:1:11991001000046,tapd:TapdAccount:1:test-11test-11test-11,test-11test-11test-11,name,name,,,2019-12-12T10:21:58.000+00:00,test-11test-11test-11test-11,test-11test-11test-11test-11,"{""ConnectionId"":1,""CompanyId"":0,""WorkspaceId"":991}",_raw_tapd_api_story_changelogs,5,
diff --git a/plugins/tapd/e2e/story_changelog_test.go b/plugins/tapd/e2e/story_changelog_test.go
index c89277ce..37ecef4f 100644
--- a/plugins/tapd/e2e/story_changelog_test.go
+++ b/plugins/tapd/e2e/story_changelog_test.go
@@ -38,8 +38,52 @@ func TestTapdStoryChangelogDataFlow(t *testing.T) {
ConnectionId: 1,
CompanyId: 99,
WorkspaceId: 991,
+ TransformationRules: tasks.TransformationRules{
+ TypeMappings: map[string]tasks.TypeMapping{
+ "Techstory": {
+ StandardType: "REQUIREMENT",
+ },
+ "技术债": {
+ StandardType: "REQUIREMENT",
+ },
+ "需求": {
+ StandardType: "REQUIREMENT",
+ },
+ },
+ StatusMappings: map[string]tasks.OriginalStatus{
+ "doneStatus": []string{"已关闭"},
+ "inprogressStatus": []string{"开发中", "developing", "test-11test-11test-12"},
+ "todoStatus": []string{"重新打开", "planning", "test-11test-11test-11"},
+ },
+ },
},
}
+
+ dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_tapd_api_story_status.csv",
+ "_raw_tapd_api_story_status")
+ dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_tapd_api_story_status_last_steps.csv",
+ "_raw_tapd_api_story_status_last_steps")
+ // verify extraction
+ dataflowTester.FlushTabler(&models.TapdWorkitemType{})
+ dataflowTester.FlushTabler(&models.TapdStoryStatus{})
+ dataflowTester.Subtask(tasks.ExtractStoryStatusMeta, taskData)
+ dataflowTester.Subtask(tasks.EnrichStoryStatusLastStepMeta, taskData)
+ dataflowTester.VerifyTable(
+ models.TapdStoryStatus{},
+ "./snapshot_tables/_tool_tapd_story_statuses.csv",
+ []string{
+ "connection_id",
+ "workspace_id",
+ "english_name",
+ "chinese_name",
+ "is_last_step",
+ "_raw_data_params",
+ "_raw_data_table",
+ "_raw_data_id",
+ "_raw_data_remark",
+ },
+ )
+
// import raw data table
dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_tapd_api_story_changelogs.csv",
"_raw_tapd_api_story_changelogs")
diff --git a/plugins/tapd/models/bug_status.go b/plugins/tapd/models/bug_status.go
index 7a83acc9..9b28b3d8 100644
--- a/plugins/tapd/models/bug_status.go
+++ b/plugins/tapd/models/bug_status.go
@@ -17,7 +17,9 @@ limitations under the License.
package models
-import "github.com/apache/incubator-devlake/models/common"
+import (
+ "github.com/apache/incubator-devlake/models/common"
+)
type TapdBugStatus struct {
ConnectionId uint64 `gorm:"primaryKey"`
@@ -31,3 +33,23 @@ type TapdBugStatus struct {
func (TapdBugStatus) TableName() string {
return "_tool_tapd_bug_statuses"
}
+
+type TapdStatus interface {
+ GetChinese() string
+ GetEnglish() string
+ GetIsLastStep() bool
+}
+
+func (s TapdBugStatus) GetChinese() string {
+ return s.ChineseName
+}
+
+func (s TapdBugStatus) GetEnglish() string {
+ return s.EnglishName
+}
+
+func (s TapdBugStatus) GetIsLastStep() bool {
+ return s.IsLastStep
+}
+
+var _ TapdStatus = (*TapdBugStatus)(nil)
diff --git a/plugins/tapd/models/story_status.go b/plugins/tapd/models/story_status.go
index 77e4c1fb..a574d8de 100644
--- a/plugins/tapd/models/story_status.go
+++ b/plugins/tapd/models/story_status.go
@@ -31,3 +31,15 @@ type TapdStoryStatus struct {
func (TapdStoryStatus) TableName() string {
return "_tool_tapd_story_statuses"
}
+
+func (s TapdStoryStatus) GetChinese() string {
+ return s.ChineseName
+}
+
+func (s TapdStoryStatus) GetEnglish() string {
+ return s.EnglishName
+}
+
+func (s TapdStoryStatus) GetIsLastStep() bool {
+ return s.IsLastStep
+}
diff --git a/plugins/tapd/tasks/bug_changelog_converter.go b/plugins/tapd/tasks/bug_changelog_converter.go
index 9c6e5858..7f032177 100644
--- a/plugins/tapd/tasks/bug_changelog_converter.go
+++ b/plugins/tapd/tasks/bug_changelog_converter.go
@@ -56,6 +56,12 @@ func ConvertBugChangelog(taskCtx core.SubTaskContext) errors.Error {
rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, RAW_BUG_CHANGELOG_TABLE, false)
logger := taskCtx.GetLogger()
db := taskCtx.GetDal()
+ statusList := make([]models.TapdBugStatus, 0)
+ _, getStdStatus, err := getDefaltStdStatusMapping(data, db, statusList)
+ if err != nil {
+ return err
+ }
+ customStatusMap := getStatusMapping(data)
logger.Info("convert changelog :%d", data.Options.WorkspaceId)
issueIdGen := didgen.NewDomainIdGenerator(&models.TapdIssue{})
accountIdGen := didgen.NewDomainIdGenerator(&models.TapdAccount{})
@@ -93,7 +99,15 @@ func ConvertBugChangelog(taskCtx core.SubTaskContext) errors.Error {
OriginalToValue: cl.ValueAfterParsed,
CreatedDate: *cl.Created,
}
-
+ if domainCl.FieldName == "status" {
+ if len(customStatusMap) != 0 {
+ domainCl.FromValue = customStatusMap[domainCl.OriginalFromValue]
+ domainCl.ToValue = customStatusMap[domainCl.OriginalToValue]
+ } else {
+ domainCl.FromValue = getStdStatus(domainCl.OriginalFromValue)
+ domainCl.ToValue = getStdStatus(domainCl.OriginalToValue)
+ }
+ }
return []interface{}{
domainCl,
}, nil
diff --git a/plugins/tapd/tasks/bug_converter.go b/plugins/tapd/tasks/bug_converter.go
index 364ad03f..ad603f14 100644
--- a/plugins/tapd/tasks/bug_converter.go
+++ b/plugins/tapd/tasks/bug_converter.go
@@ -21,6 +21,7 @@ import (
"github.com/apache/incubator-devlake/errors"
"reflect"
"strconv"
+ "time"
"github.com/apache/incubator-devlake/models/domainlayer/didgen"
@@ -62,15 +63,15 @@ func ConvertBug(taskCtx core.SubTaskContext) errors.Error {
DomainEntity: domainlayer.DomainEntity{
Id: issueIdGen.Generate(toolL.ConnectionId, toolL.Id),
},
- Url: toolL.Url,
- IssueKey: strconv.FormatUint(toolL.Id, 10),
- Title: toolL.Title,
- EpicKey: toolL.EpicKey,
- Type: "BUG",
- Status: toolL.StdStatus,
- //ResolutionDate: (*time.Time)(toolL.Resolved),
- //CreatedDate: (*time.Time)(toolL.Created),
- //UpdatedDate: (*time.Time)(toolL.Modified),
+ Url: toolL.Url,
+ IssueKey: strconv.FormatUint(toolL.Id, 10),
+ Title: toolL.Title,
+ EpicKey: toolL.EpicKey,
+ Type: "BUG",
+ Status: toolL.StdStatus,
+ ResolutionDate: (*time.Time)(toolL.Resolved),
+ CreatedDate: (*time.Time)(toolL.Created),
+ UpdatedDate: (*time.Time)(toolL.Modified),
ParentIssueId: issueIdGen.Generate(toolL.ConnectionId, toolL.IssueId),
Priority: toolL.Priority,
CreatorId: accountIdGen.Generate(data.Options.ConnectionId, toolL.Reporter),
@@ -86,7 +87,7 @@ func ConvertBug(taskCtx core.SubTaskContext) errors.Error {
}
results := make([]interface{}, 0, 2)
boardIssue := &ticket.BoardIssue{
- BoardId: workspaceIdGen.Generate(toolL.WorkspaceId),
+ BoardId: workspaceIdGen.Generate(toolL.ConnectionId, toolL.WorkspaceId),
IssueId: domainL.Id,
}
sprintIssue := &ticket.SprintIssue{
diff --git a/plugins/tapd/tasks/bug_extractor.go b/plugins/tapd/tasks/bug_extractor.go
index 7b48300d..65b94c46 100644
--- a/plugins/tapd/tasks/bug_extractor.go
+++ b/plugins/tapd/tasks/bug_extractor.go
@@ -23,9 +23,7 @@ import (
"github.com/apache/incubator-devlake/errors"
"strings"
- "github.com/apache/incubator-devlake/models/domainlayer/ticket"
"github.com/apache/incubator-devlake/plugins/core"
- "github.com/apache/incubator-devlake/plugins/core/dal"
"github.com/apache/incubator-devlake/plugins/helper"
"github.com/apache/incubator-devlake/plugins/tapd/models"
)
@@ -43,30 +41,11 @@ var ExtractBugMeta = core.SubTaskMeta{
func ExtractBugs(taskCtx core.SubTaskContext) errors.Error {
rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, RAW_BUG_TABLE, false)
db := taskCtx.GetDal()
- statusList := make([]*models.TapdBugStatus, 0)
- clauses := []dal.Clause{
- dal.Where("connection_id = ? and workspace_id = ?", data.Options.ConnectionId, data.Options.WorkspaceId),
- }
- err := db.All(&statusList, clauses...)
+ statusList := make([]models.TapdBugStatus, 0)
+ statusLanguageMap, getStdStatus, err := getDefaltStdStatusMapping(data, db, statusList)
if err != nil {
return err
}
-
- statusLanguageMap := make(map[string]string, len(statusList))
- statusLastStepMap := make(map[string]bool, len(statusList))
- for _, v := range statusList {
- statusLanguageMap[v.EnglishName] = v.ChineseName
- statusLastStepMap[v.ChineseName] = v.IsLastStep
- }
- getStdStatus := func(statusKey string) string {
- if statusLastStepMap[statusKey] {
- return ticket.DONE
- } else if statusKey == "新建" {
- return ticket.TODO
- } else {
- return ticket.IN_PROGRESS
- }
- }
customStatusMap := getStatusMapping(data)
extractor, err := helper.NewApiExtractor(helper.ApiExtractorArgs{
diff --git a/plugins/tapd/tasks/shared.go b/plugins/tapd/tasks/shared.go
index 199c9d7a..c30906a5 100644
--- a/plugins/tapd/tasks/shared.go
+++ b/plugins/tapd/tasks/shared.go
@@ -22,6 +22,7 @@ import (
goerror "errors"
"fmt"
"github.com/apache/incubator-devlake/errors"
+ "github.com/apache/incubator-devlake/models/domainlayer/ticket"
"gorm.io/gorm"
"io"
"net/http"
@@ -42,8 +43,6 @@ type Data struct {
Count int `json:"count"`
}
-var statusMapping map[string]string
-
var UserIdGen *didgen.DomainIdGenerator
var WorkspaceIdGen *didgen.DomainIdGenerator
var IssueIdGen *didgen.DomainIdGenerator
@@ -169,10 +168,7 @@ func getTypeMappings(data *TapdTaskData, db dal.Dal, system string) (*typeMappin
}
func getStatusMapping(data *TapdTaskData) map[string]string {
- if len(statusMapping) != 0 {
- return statusMapping
- }
- statusMapping = make(map[string]string)
+ statusMapping := make(map[string]string)
mapping := data.Options.TransformationRules.StatusMappings
for std, orig := range mapping {
for _, v := range orig {
@@ -182,3 +178,31 @@ func getStatusMapping(data *TapdTaskData) map[string]string {
return statusMapping
}
+
+func getDefaltStdStatusMapping[S models.TapdStatus](data *TapdTaskData, db dal.Dal, statusList []S) (map[string]string, func(statusKey string) string, errors.Error) {
+ clauses := []dal.Clause{
+ dal.Where("connection_id = ? and workspace_id = ?", data.Options.ConnectionId, data.Options.WorkspaceId),
+ }
+ err := db.All(&statusList, clauses...)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ statusLanguageMap := make(map[string]string, len(statusList))
+ statusLastStepMap := make(map[string]bool, len(statusList))
+
+ for _, v := range statusList {
+ statusLanguageMap[v.GetEnglish()] = v.GetChinese()
+ statusLastStepMap[v.GetChinese()] = v.GetIsLastStep()
+ }
+ getStdStatus := func(statusKey string) string {
+ if statusLastStepMap[statusKey] {
+ return ticket.DONE
+ } else if statusKey == "草稿" {
+ return ticket.TODO
+ } else {
+ return ticket.IN_PROGRESS
+ }
+ }
+ return statusLanguageMap, getStdStatus, nil
+}
diff --git a/plugins/tapd/tasks/story_changelog_converter.go b/plugins/tapd/tasks/story_changelog_converter.go
index 005007ec..46b38c38 100644
--- a/plugins/tapd/tasks/story_changelog_converter.go
+++ b/plugins/tapd/tasks/story_changelog_converter.go
@@ -59,6 +59,12 @@ func ConvertStoryChangelog(taskCtx core.SubTaskContext) errors.Error {
rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, RAW_STORY_CHANGELOG_TABLE, false)
logger := taskCtx.GetLogger()
db := taskCtx.GetDal()
+ statusList := make([]models.TapdStoryStatus, 0)
+ _, getStdStatus, err := getDefaltStdStatusMapping(data, db, statusList)
+ if err != nil {
+ return err
+ }
+ customStatusMap := getStatusMapping(data)
logger.Info("convert changelog :%d", data.Options.WorkspaceId)
clIdGen := didgen.NewDomainIdGenerator(&models.TapdStoryChangelog{})
issueIdGen := didgen.NewDomainIdGenerator(&models.TapdIssue{})
@@ -96,6 +102,15 @@ func ConvertStoryChangelog(taskCtx core.SubTaskContext) errors.Error {
OriginalToValue: cl.ValueAfterParsed,
CreatedDate: *cl.Created,
}
+ if domainCl.FieldName == "status" {
+ if len(customStatusMap) != 0 {
+ domainCl.FromValue = customStatusMap[domainCl.OriginalFromValue]
+ domainCl.ToValue = customStatusMap[domainCl.OriginalToValue]
+ } else {
+ domainCl.FromValue = getStdStatus(domainCl.OriginalFromValue)
+ domainCl.ToValue = getStdStatus(domainCl.OriginalToValue)
+ }
+ }
return []interface{}{
domainCl,
diff --git a/plugins/tapd/tasks/story_converter.go b/plugins/tapd/tasks/story_converter.go
index d458f7f6..a688b2af 100644
--- a/plugins/tapd/tasks/story_converter.go
+++ b/plugins/tapd/tasks/story_converter.go
@@ -89,7 +89,7 @@ func ConvertStory(taskCtx core.SubTaskContext) errors.Error {
}
results := make([]interface{}, 0, 2)
boardIssue := &ticket.BoardIssue{
- BoardId: workspaceIdGen.Generate(toolL.WorkspaceId),
+ BoardId: workspaceIdGen.Generate(toolL.ConnectionId, toolL.WorkspaceId),
IssueId: domainL.Id,
}
sprintIssue := &ticket.SprintIssue{
diff --git a/plugins/tapd/tasks/story_extractor.go b/plugins/tapd/tasks/story_extractor.go
index d3788740..e1183828 100644
--- a/plugins/tapd/tasks/story_extractor.go
+++ b/plugins/tapd/tasks/story_extractor.go
@@ -23,9 +23,7 @@ import (
"github.com/apache/incubator-devlake/errors"
"strings"
- "github.com/apache/incubator-devlake/models/domainlayer/ticket"
"github.com/apache/incubator-devlake/plugins/core"
- "github.com/apache/incubator-devlake/plugins/core/dal"
"github.com/apache/incubator-devlake/plugins/helper"
"github.com/apache/incubator-devlake/plugins/tapd/models"
)
@@ -43,33 +41,16 @@ var ExtractStoryMeta = core.SubTaskMeta{
func ExtractStories(taskCtx core.SubTaskContext) errors.Error {
rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, RAW_STORY_TABLE, false)
db := taskCtx.GetDal()
- statusList := make([]*models.TapdStoryStatus, 0)
- clauses := []dal.Clause{
- dal.Where("connection_id = ? and workspace_id = ?", data.Options.ConnectionId, data.Options.WorkspaceId),
- }
- err := db.All(&statusList, clauses...)
+ statusList := make([]models.TapdStoryStatus, 0)
+ statusLanguageMap, getStdStatus, err := getDefaltStdStatusMapping(data, db, statusList)
if err != nil {
return err
}
-
- statusLanguageMap := make(map[string]string, len(statusList))
- statusLastStepMap := make(map[string]bool, len(statusList))
- for _, v := range statusList {
- statusLanguageMap[v.EnglishName] = v.ChineseName
- statusLastStepMap[v.ChineseName] = v.IsLastStep
- }
- getStdStatus := func(statusKey string) string {
- if statusLastStepMap[statusKey] {
- return ticket.DONE
- } else if statusKey == "草稿" {
- return ticket.TODO
- } else {
- return ticket.IN_PROGRESS
- }
- }
customStatusMap := getStatusMapping(data)
typeMap, err := getTypeMappings(data, db, "story")
-
+ if err != nil {
+ return err
+ }
extractor, err := helper.NewApiExtractor(helper.ApiExtractorArgs{
RawDataSubTaskArgs: *rawDataSubTaskArgs,
BatchSize: 100,
diff --git a/plugins/tapd/tasks/task_changelog_converter.go b/plugins/tapd/tasks/task_changelog_converter.go
index f6a3d9cf..57e65fe2 100644
--- a/plugins/tapd/tasks/task_changelog_converter.go
+++ b/plugins/tapd/tasks/task_changelog_converter.go
@@ -60,6 +60,16 @@ func ConvertTaskChangelog(taskCtx core.SubTaskContext) errors.Error {
rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, RAW_TASK_CHANGELOG_TABLE, false)
logger := taskCtx.GetLogger()
db := taskCtx.GetDal()
+ customStatusMap := getStatusMapping(data)
+ getTaskStdStatus := func(statusKey string) string {
+ if statusKey == "done" {
+ return ticket.DONE
+ } else if statusKey == "progressing" {
+ return ticket.IN_PROGRESS
+ } else {
+ return ticket.TODO
+ }
+ }
logger.Info("convert changelog :%d", data.Options.WorkspaceId)
clIdGen := didgen.NewDomainIdGenerator(&models.TapdTaskChangelog{})
issueIdGen := didgen.NewDomainIdGenerator(&models.TapdIssue{})
@@ -96,6 +106,15 @@ func ConvertTaskChangelog(taskCtx core.SubTaskContext) errors.Error {
OriginalToValue: cl.ValueAfterParsed,
CreatedDate: *cl.Created,
}
+ if domainCl.FieldName == "status" {
+ if len(customStatusMap) != 0 {
+ domainCl.FromValue = customStatusMap[domainCl.OriginalFromValue]
+ domainCl.ToValue = customStatusMap[domainCl.OriginalToValue]
+ } else {
+ domainCl.FromValue = getTaskStdStatus(domainCl.OriginalFromValue)
+ domainCl.ToValue = getTaskStdStatus(domainCl.OriginalToValue)
+ }
+ }
return []interface{}{
domainCl,
diff --git a/plugins/tapd/tasks/task_converter.go b/plugins/tapd/tasks/task_converter.go
index daca606a..30dad0a2 100644
--- a/plugins/tapd/tasks/task_converter.go
+++ b/plugins/tapd/tasks/task_converter.go
@@ -86,7 +86,7 @@ func ConvertTask(taskCtx core.SubTaskContext) errors.Error {
}
results := make([]interface{}, 0, 2)
boardIssue := &ticket.BoardIssue{
- BoardId: workspaceIdGen.Generate(toolL.WorkspaceId),
+ BoardId: workspaceIdGen.Generate(toolL.ConnectionId, toolL.WorkspaceId),
IssueId: domainL.Id,
}
sprintIssue := &ticket.SprintIssue{