This is an automated email from the ASF dual-hosted git repository.
lynwee pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git
The following commit(s) were added to refs/heads/main by this push:
new 47bc9a8fd Fix zentao deadline field (#8356)
47bc9a8fd is described below
commit 47bc9a8fd155c25ae4b3f307480ec7017ae485f7
Author: Lynwee <[email protected]>
AuthorDate: Wed Mar 26 09:29:32 2025 +0800
Fix zentao deadline field (#8356)
* fix(zentao): fix deadline field
* fix(zentao): fix a typo
* fix(zentao): fix a typo
* fix(zentao): fix e2e test
* fix(zentao): fix e2e test
* refactor(zentao): add some logs
* fix(zentao): fix panic when inserting record to db
* fix(zentao): fix e2e test
---
backend/helpers/utils/field.go | 7 +--
backend/helpers/utils/field_test.go | 10 ++--
backend/plugins/jira/tasks/issue_extractor.go | 2 +-
backend/plugins/tapd/tasks/bug_extractor.go | 2 +-
backend/plugins/tapd/tasks/story_extractor.go | 2 +-
backend/plugins/tapd/tasks/task_extractor.go | 2 +-
.../e2e/snapshot_tables/_tool_zentao_bugs.csv | 4 +-
.../e2e/snapshot_tables/_tool_zentao_tasks.csv | 6 +--
.../_tool_zentao_tasks_for_due_date.csv | 6 +--
backend/plugins/zentao/models/bug.go | 8 +--
backend/plugins/zentao/models/story.go | 4 +-
backend/plugins/zentao/models/task.go | 58 +++++++++++-----------
backend/plugins/zentao/tasks/bug_extractor.go | 5 +-
backend/plugins/zentao/tasks/story_extractor.go | 2 +-
backend/plugins/zentao/tasks/task_extractor.go | 5 +-
15 files changed, 63 insertions(+), 60 deletions(-)
diff --git a/backend/helpers/utils/field.go b/backend/helpers/utils/field.go
index f75aa7853..9a6278daf 100644
--- a/backend/helpers/utils/field.go
+++ b/backend/helpers/utils/field.go
@@ -25,7 +25,7 @@ import (
"github.com/apache/incubator-devlake/core/models/common"
)
-// GetTimeFeildFromMap retrieves a time field from a map.
+// GetTimeFieldFromMap retrieves a time field from a map.
// allFields: A map containing all fields.
// fieldName: The name of the field to retrieve.
// loc: The timezone location.
@@ -33,7 +33,7 @@ import (
//
// *time.Time: A pointer to the time.Time if the field exists and can be
converted to time.Time.
// error: An error if the field does not exist or an error occurs.
-func GetTimeFeildFromMap(allFields map[string]interface{}, fieldName string,
loc *time.Location) (*time.Time, error) {
+func GetTimeFieldFromMap(allFields map[string]interface{}, fieldName string,
loc *time.Location) (*time.Time, error) {
val, ok := allFields[fieldName]
if !ok {
return nil, fmt.Errorf("Field %s not found", fieldName)
@@ -41,7 +41,8 @@ func GetTimeFeildFromMap(allFields map[string]interface{},
fieldName string, loc
var temp time.Time
switch v := val.(type) {
case string:
- if v == "" || v == "null" {
+ if v == "" || v == "null" || v == "{}" {
+ // In Zentao, the field `deadline`'s value may be "{}".
return nil, nil
}
// If value is a string with the format yyyy-MM-dd, use loc to
parse it
diff --git a/backend/helpers/utils/field_test.go
b/backend/helpers/utils/field_test.go
index c39a08202..f66ae9cde 100644
--- a/backend/helpers/utils/field_test.go
+++ b/backend/helpers/utils/field_test.go
@@ -124,23 +124,23 @@ func TestGetTimeFeildFromMap(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- got, err := GetTimeFeildFromMap(tt.allFields,
tt.fieldName, tt.loc)
+ got, err := GetTimeFieldFromMap(tt.allFields,
tt.fieldName, tt.loc)
if (err != nil) != tt.wantErr {
- t.Errorf("GetTimeFeildFromMap() error = %v,
wantErr %v", err, tt.wantErr)
+ t.Errorf("GetTimeFieldFromMap() error = %v,
wantErr %v", err, tt.wantErr)
return
}
if tt.wantErr && err.Error() != tt.expectedErr {
- t.Errorf("GetTimeFeildFromMap() error = %v,
expectedErr %v", err, tt.expectedErr)
+ t.Errorf("GetTimeFieldFromMap() error = %v,
expectedErr %v", err, tt.expectedErr)
return
}
if got != nil && tt.want != nil {
if !got.UTC().Equal(tt.want.UTC()) {
- t.Errorf("GetTimeFeildFromMap() = %v,
want %v", got, tt.want)
+ t.Errorf("GetTimeFieldFromMap() = %v,
want %v", got, tt.want)
}
} else if got != tt.want {
- t.Errorf("GetTimeFeildFromMap() = %v, want %v",
got, tt.want)
+ t.Errorf("GetTimeFieldFromMap() = %v, want %v",
got, tt.want)
}
})
}
diff --git a/backend/plugins/jira/tasks/issue_extractor.go
b/backend/plugins/jira/tasks/issue_extractor.go
index a38387a2a..1980adc2c 100644
--- a/backend/plugins/jira/tasks/issue_extractor.go
+++ b/backend/plugins/jira/tasks/issue_extractor.go
@@ -151,7 +151,7 @@ func extractIssues(data *JiraTaskData, mappings
*typeMappings, apiIssue *apiv2mo
}
// using location of issues.Created
loc := issue.Created.Location()
- issue.DueDate, _ = utils.GetTimeFeildFromMap(apiIssue.Fields.AllFields,
dueDateField, loc)
+ issue.DueDate, _ = utils.GetTimeFieldFromMap(apiIssue.Fields.AllFields,
dueDateField, loc)
// code in next line will set issue.Type to issueType.Name
issue.Type = mappings.TypeIdMappings[issue.Type]
issue.StdType = mappings.StdTypeMappings[issue.Type]
diff --git a/backend/plugins/tapd/tasks/bug_extractor.go
b/backend/plugins/tapd/tasks/bug_extractor.go
index fa0860b9f..43cab73e2 100644
--- a/backend/plugins/tapd/tasks/bug_extractor.go
+++ b/backend/plugins/tapd/tasks/bug_extractor.go
@@ -89,7 +89,7 @@ func ExtractBugs(taskCtx plugin.SubTaskContext) errors.Error {
toolL.CurrentOwner =
strings.Split(toolL.CurrentOwner, ";")[0]
}
loc, _ := time.LoadLocation("Asia/Shanghai")
- toolL.DueDate, _ =
utils.GetTimeFeildFromMap(toolL.AllFields, dueDateField, loc)
+ toolL.DueDate, _ =
utils.GetTimeFieldFromMap(toolL.AllFields, dueDateField, loc)
workSpaceBug := &models.TapdWorkSpaceBug{
ConnectionId: data.Options.ConnectionId,
WorkspaceId: toolL.WorkspaceId,
diff --git a/backend/plugins/tapd/tasks/story_extractor.go
b/backend/plugins/tapd/tasks/story_extractor.go
index 1ca8242ea..2c384ae06 100644
--- a/backend/plugins/tapd/tasks/story_extractor.go
+++ b/backend/plugins/tapd/tasks/story_extractor.go
@@ -124,7 +124,7 @@ func ExtractStories(taskCtx plugin.SubTaskContext)
errors.Error {
}
}
loc, _ := time.LoadLocation("Asia/Shanghai")
- toolL.DueDate, _ =
utils.GetTimeFeildFromMap(toolL.AllFields, dueDateField, loc)
+ toolL.DueDate, _ =
utils.GetTimeFieldFromMap(toolL.AllFields, dueDateField, loc)
return results, nil
},
})
diff --git a/backend/plugins/tapd/tasks/task_extractor.go
b/backend/plugins/tapd/tasks/task_extractor.go
index 225148c81..11a672751 100644
--- a/backend/plugins/tapd/tasks/task_extractor.go
+++ b/backend/plugins/tapd/tasks/task_extractor.go
@@ -117,7 +117,7 @@ func ExtractTasks(taskCtx plugin.SubTaskContext)
errors.Error {
}
}
loc, _ := time.LoadLocation("Asia/Shanghai")
- toolL.DueDate, _ =
utils.GetTimeFeildFromMap(toolL.AllFields, dueDateField, loc)
+ toolL.DueDate, _ =
utils.GetTimeFieldFromMap(toolL.AllFields, dueDateField, loc)
return results, nil
},
})
diff --git a/backend/plugins/zentao/e2e/snapshot_tables/_tool_zentao_bugs.csv
b/backend/plugins/zentao/e2e/snapshot_tables/_tool_zentao_bugs.csv
index 0fc9a4e9c..c472f5864 100644
--- a/backend/plugins/zentao/e2e/snapshot_tables/_tool_zentao_bugs.csv
+++ b/backend/plugins/zentao/e2e/snapshot_tables/_tool_zentao_bugs.csv
@@ -4,7 +4,7 @@
connection_id,id,project,product,injection,identify,branch,module,execution,plan
<p>[期望]正常显示</p>",active,,,0,0,,,,7,测试甲,2012-06-05T02:56:11.000+00:00,主干,4,开发甲,2012-06-05T02:56:11.000+00:00,,0,,,,0,,0,,0,0,0,0,,,,,,,0,0,2021-04-28T03:09:08.000+00:00,0,1,3,0,激活,normal,http://iwater.red:8000/api.php/v1/products/1/bugs?limit=100&page=1,DONE,BUG,
1,2,1,3,0,0,0,9,1,1,2,1,15,0,0,新闻中心页面问题,hh,3,2,codeerror,",windows",",chrome",,,"<p>[步骤]进入新闻中心</p>
<p>[结果]页面出现乱码</p>
-<p>[期望]正常显示rew</p>",active,,,1,1,2022-10-05T04:16:44.000+00:00,,[email protected],7,测试甲,2012-06-05T02:57:11.000+00:00,主干,0,,2022-10-05T04:19:22.000+00:00,2022-10-05T16:00:00.000+00:00,0,,,,0,,0,,0,0,0,0,,,,,,,1,1,2022-10-05T04:19:22.000+00:00,0,2,3,0,过期Bug,normal,http://iwater.red:8000/api.php/v1/products/1/bugs?limit=100&page=1,DONE,BUG,2022-10-05T16:00:00.000+00:00
+<p>[期望]正常显示rew</p>",active,,,1,1,2022-10-05T04:16:44.000+00:00,,[email protected],7,测试甲,2012-06-05T02:57:11.000+00:00,主干,0,,2022-10-05T04:19:22.000+00:00,2022-10-06,0,,,,0,,0,,0,0,0,0,,,,,,,1,1,2022-10-05T04:19:22.000+00:00,0,2,3,0,过期Bug,normal,http://iwater.red:8000/api.php/v1/products/1/bugs?limit=100&page=1,DONE,BUG,2022-10-05T16:00:00.000+00:00
1,3,1,3,0,0,0,10,1,0,3,2,6,0,0,成果展示页面问题,,3,1,codeerror,,,,,"<p>[步骤]进入成果展示 </p>
<p>[结果]乱码</p>
<p>[期望]正常显示</p>",active,,,0,0,,,,8,测试乙,2012-06-05T02:58:22.000+00:00,主干,4,开发甲,2012-06-05T02:58:22.000+00:00,,0,,,,0,,0,,0,0,0,0,,,,,,,0,0,2021-04-28T03:09:08.000+00:00,0,1,3,0,激活,normal,http://iwater.red:8000/api.php/v1/products/1/bugs?limit=100&page=1,DONE,BUG,
@@ -16,4 +16,4 @@
connection_id,id,project,product,injection,identify,branch,module,execution,plan
<p>[期望]正常显示</p>",active,,,0,0,,,,7,测试甲,2012-06-05T02:56:11.000+00:00,主干,4,开发甲,2012-06-05T02:56:11.000+00:00,,0,,,,0,,0,,0,0,0,0,,,,,,,0,0,2021-04-28T03:09:08.000+00:00,0,1,3,0,激活,normal,http://iwater.red:8000/api.php/v1/products/1/bugs?limit=100&page=1,DONE,BUG,
1,6,1,3,0,0,0,9,1,1,2,1,15,0,0,新闻中心页面问题,hh,3,2,codeerror,",windows",",chrome",,,"<p>[步骤]进入新闻中心</p>
<p>[结果]页面出现乱码</p>
-<p>[期望]正常显示rew</p>",active,,,1,1,2022-10-05T04:16:44.000+00:00,,[email protected],7,测试甲,2012-06-05T02:57:11.000+00:00,主干,0,,2022-10-05T04:19:22.000+00:00,2022-10-05T16:00:00.000+00:00,0,,,,0,,0,,0,0,0,0,,,,,,,1,1,2022-10-05T04:19:22.000+00:00,0,2,3,0,过期Bug,normal,http://iwater.red:8000/api.php/v1/products/1/bugs?limit=100&page=1,DONE,BUG,2022-10-05T16:00:00.000+00:00
+<p>[期望]正常显示rew</p>",active,,,1,1,2022-10-05T04:16:44.000+00:00,,[email protected],7,测试甲,2012-06-05T02:57:11.000+00:00,主干,0,,2022-10-05T04:19:22.000+00:00,2022-10-06,0,,,,0,,0,,0,0,0,0,,,,,,,1,1,2022-10-05T04:19:22.000+00:00,0,2,3,0,过期Bug,normal,http://iwater.red:8000/api.php/v1/products/1/bugs?limit=100&page=1,DONE,BUG,2022-10-05T16:00:00.000+00:00
diff --git a/backend/plugins/zentao/e2e/snapshot_tables/_tool_zentao_tasks.csv
b/backend/plugins/zentao/e2e/snapshot_tables/_tool_zentao_tasks.csv
index de8583f98..270fe00ff 100644
--- a/backend/plugins/zentao/e2e/snapshot_tables/_tool_zentao_tasks.csv
+++ b/backend/plugins/zentao/e2e/snapshot_tables/_tool_zentao_tasks.csv
@@ -1,4 +1,4 @@
connection_id,id,project,parent,execution,module,design,story,story_version,design_version,from_bug,feedback,from_issue,name,type,mode,pri,estimate,consumed,db_left,deadline,status,sub_status,color,description,version,opened_by_id,opened_by_name,opened_date,assigned_to_id,assigned_to_name,assigned_date,est_started,real_started,finished_id,finished_date,finished_list,canceled_id,canceled_date,closed_by_id,closed_date,plan_duration,real_duration,closed_reason,last_edited_id,last_edited_dat
[...]
-1,1,1,0,1,0,0,0,1,0,0,0,0,任务名称,devel,,3,0,0,0,2022-09-30T16:00:00.000+00:00,wait,,,任务描述<span>
</span><br /><div><br
/></div>,1,1,devlake,2022-09-19T01:50:37.000+00:00,5,开发乙,2022-09-19T01:50:37.000+00:00,2022-09-20,,0,,,0,,0,,0,0,,0,,,0,0,0,,,,,0,rnd,0,,0,0,,开发乙,3,0,21.11,http://iwater.red:8000/api.php/v1/executions/9/tasks?limit=100&page=1,IN_PROGRESS,TASK,2022-09-30T16:00:00.000+00:00
-1,2,1,0,9,0,0,0,1,0,0,0,0,任务名称,devel,,3,12.1,2.1,10,2022-09-30T16:00:00.000+00:00,wait,,,任务描述<span>
</span><br /><div><br
/></div>,1,1,devlake,2022-09-19T01:50:37.000+00:00,5,开发乙,2022-09-19T01:50:37.000+00:00,2022-09-20,,0,,,0,,0,,0,0,,0,,,0,0,0,,,,,0,rnd,0,,0,0,,开发乙,3,0,3,http://iwater.red:8000/api.php/v1/executions/4/tasks?limit=100&page=1,IN_PROGRESS,TASK,2022-09-30T16:00:00.000+00:00
-1,3,1,-1,9,0,0,0,1,0,0,0,0,任务名称,devel,,3,11.2,0,0,2022-09-30T16:00:00.000+00:00,wait,,,任务描述<span>
</span><br /><div><br
/></div>,1,1,devlake,2022-09-19T01:50:37.000+00:00,5,开发乙,2022-09-19T01:50:37.000+00:00,2022-09-20,,0,,,0,,0,,0,0,,0,,,0,0,0,,,,,0,rnd,0,,0,0,,开发乙,3,0,43.22121,http://iwater.red:8000/api.php/v1/executions/3/tasks?limit=100&page=1,IN_PROGRESS,TASK,2022-09-30T16:00:00.000+00:00
+1,1,1,0,1,0,0,0,1,0,0,0,0,任务名称,devel,,3,0,0,0,2022-10-01,wait,,,任务描述<span>
</span><br /><div><br
/></div>,1,1,devlake,2022-09-19T01:50:37.000+00:00,5,开发乙,2022-09-19T01:50:37.000+00:00,2022-09-20,,0,,,0,,0,,0,0,,0,,,0,0,0,,,,,0,rnd,0,,0,0,,开发乙,3,0,21.11,http://iwater.red:8000/api.php/v1/executions/9/tasks?limit=100&page=1,IN_PROGRESS,TASK,2022-09-30T16:00:00.000+00:00
+1,2,1,0,9,0,0,0,1,0,0,0,0,任务名称,devel,,3,12.1,2.1,10,2022-10-01,wait,,,任务描述<span>
</span><br /><div><br
/></div>,1,1,devlake,2022-09-19T01:50:37.000+00:00,5,开发乙,2022-09-19T01:50:37.000+00:00,2022-09-20,,0,,,0,,0,,0,0,,0,,,0,0,0,,,,,0,rnd,0,,0,0,,开发乙,3,0,3,http://iwater.red:8000/api.php/v1/executions/4/tasks?limit=100&page=1,IN_PROGRESS,TASK,2022-09-30T16:00:00.000+00:00
+1,3,1,-1,9,0,0,0,1,0,0,0,0,任务名称,devel,,3,11.2,0,0,2022-10-01,wait,,,任务描述<span>
</span><br /><div><br
/></div>,1,1,devlake,2022-09-19T01:50:37.000+00:00,5,开发乙,2022-09-19T01:50:37.000+00:00,2022-09-20,,0,,,0,,0,,0,0,,0,,,0,0,0,,,,,0,rnd,0,,0,0,,开发乙,3,0,43.22121,http://iwater.red:8000/api.php/v1/executions/3/tasks?limit=100&page=1,IN_PROGRESS,TASK,2022-09-30T16:00:00.000+00:00
diff --git
a/backend/plugins/zentao/e2e/snapshot_tables/_tool_zentao_tasks_for_due_date.csv
b/backend/plugins/zentao/e2e/snapshot_tables/_tool_zentao_tasks_for_due_date.csv
index 632ffcc4f..4af001050 100644
---
a/backend/plugins/zentao/e2e/snapshot_tables/_tool_zentao_tasks_for_due_date.csv
+++
b/backend/plugins/zentao/e2e/snapshot_tables/_tool_zentao_tasks_for_due_date.csv
@@ -1,4 +1,4 @@
connection_id,id,project,parent,execution,module,design,story,story_version,design_version,from_bug,feedback,from_issue,name,type,mode,pri,estimate,consumed,db_left,deadline,status,sub_status,color,description,version,opened_by_id,opened_by_name,opened_date,assigned_to_id,assigned_to_name,assigned_date,est_started,real_started,finished_id,finished_date,finished_list,canceled_id,canceled_date,closed_by_id,closed_date,plan_duration,real_duration,closed_reason,last_edited_id,last_edited_dat
[...]
-1,1,1,0,1,0,0,0,1,0,0,0,0,任务名称,devel,,3,0,0,0,2022-09-30T16:00:00.000+00:00,wait,,,任务描述<span>
</span><br /><div><br
/></div>,1,1,devlake,2022-09-19T01:50:37.000+00:00,5,开发乙,2022-09-19T01:50:37.000+00:00,2022-09-20,,0,,,0,,0,,0,0,,0,,,0,0,0,,,,,0,rnd,0,,0,0,,开发乙,3,0,21.11,http://iwater.red:8000/api.php/v1/executions/9/tasks?limit=100&page=1,IN_PROGRESS,TASK,
-1,2,1,0,1,0,0,0,1,0,0,0,0,任务名称,devel,,3,12.1,2.1,10,2022-09-30T16:00:00.000+00:00,wait,,,任务描述<span>
</span><br /><div><br
/></div>,1,1,devlake,2022-09-19T01:50:37.000+00:00,5,开发乙,2022-09-19T01:50:37.000+00:00,2022-09-20,,0,,,0,,0,,0,0,,0,,,0,0,0,,,,,0,rnd,0,,0,0,,开发乙,3,0,3,http://iwater.red:8000/api.php/v1/executions/9/tasks?limit=100&page=1,IN_PROGRESS,TASK,
-1,3,1,-1,1,0,0,0,1,0,0,0,0,任务名称,devel,,3,11.2,0,0,2022-09-30T16:00:00.000+00:00,wait,,,任务描述<span>
</span><br /><div><br
/></div>,1,1,devlake,2022-09-19T01:50:37.000+00:00,5,开发乙,2022-09-19T01:50:37.000+00:00,2022-09-20,,0,,,0,,0,,0,0,,0,,2025-03-05T13:35:00.000+00:00,0,0,0,,,,,0,rnd,0,,0,0,,开发乙,3,0,43.22121,http://iwater.red:8000/api.php/v1/executions/9/tasks?limit=100&page=1,IN_PROGRESS,TASK,2025-03-05T05:35:00.000+00:00
+1,1,1,0,1,0,0,0,1,0,0,0,0,任务名称,devel,,3,0,0,0,2022-10-01,wait,,,任务描述<span>
</span><br /><div><br
/></div>,1,1,devlake,2022-09-19T01:50:37.000+00:00,5,开发乙,2022-09-19T01:50:37.000+00:00,2022-09-20,,0,,,0,,0,,0,0,,0,,,0,0,0,,,,,0,rnd,0,,0,0,,开发乙,3,0,21.11,http://iwater.red:8000/api.php/v1/executions/9/tasks?limit=100&page=1,IN_PROGRESS,TASK,
+1,2,1,0,1,0,0,0,1,0,0,0,0,任务名称,devel,,3,12.1,2.1,10,2022-10-01,wait,,,任务描述<span>
</span><br /><div><br
/></div>,1,1,devlake,2022-09-19T01:50:37.000+00:00,5,开发乙,2022-09-19T01:50:37.000+00:00,2022-09-20,,0,,,0,,0,,0,0,,0,,,0,0,0,,,,,0,rnd,0,,0,0,,开发乙,3,0,3,http://iwater.red:8000/api.php/v1/executions/9/tasks?limit=100&page=1,IN_PROGRESS,TASK,
+1,3,1,-1,1,0,0,0,1,0,0,0,0,任务名称,devel,,3,11.2,0,0,2022-10-01,wait,,,任务描述<span>
</span><br /><div><br
/></div>,1,1,devlake,2022-09-19T01:50:37.000+00:00,5,开发乙,2022-09-19T01:50:37.000+00:00,2022-09-20,,0,,,0,,0,,0,0,,0,,2025-03-05T13:35:00.000+00:00,0,0,0,,,,,0,rnd,0,,0,0,,开发乙,3,0,43.22121,http://iwater.red:8000/api.php/v1/executions/9/tasks?limit=100&page=1,IN_PROGRESS,TASK,2025-03-05T05:35:00.000+00:00
diff --git a/backend/plugins/zentao/models/bug.go
b/backend/plugins/zentao/models/bug.go
index c44cb8f2e..c1db20408 100644
--- a/backend/plugins/zentao/models/bug.go
+++ b/backend/plugins/zentao/models/bug.go
@@ -56,7 +56,7 @@ func (a *ApiAccount) UnmarshalJSON(data []byte) error {
}
type ZentaoBugRes struct {
- AllFeilds map[string]interface{} `json:"-"`
+ AllFields map[string]interface{} `json:"-"`
ID int64 `json:"id"`
Project int64 `json:"project"`
Product int64 `json:"product"`
@@ -94,7 +94,7 @@ type ZentaoBugRes struct {
OpenedBuild string `json:"openedBuild"`
AssignedTo *ApiAccount `json:"assignedTo"`
AssignedDate *common.Iso8601Time `json:"assignedDate"`
- Deadline *common.CSTTime `json:"deadline"`
+ Deadline interface{} `json:"deadline"`
ResolvedBy *ApiAccount `json:"resolvedBy"`
Resolution string `json:"resolution"`
ResolvedBuild string `json:"resolvedBuild"`
@@ -129,7 +129,7 @@ func (i *ZentaoBugRes) SetAllFeilds(raw json.RawMessage)
error {
if err := json.Unmarshal(raw, &allFeilds); err != nil {
return err
}
- i.AllFeilds = allFeilds
+ i.AllFields = allFeilds
return nil
}
@@ -175,7 +175,7 @@ type ZentaoBug struct {
AssignedToId int64
AssignedToName string
AssignedDate *common.Iso8601Time `json:"assignedDate"`
- Deadline *common.CSTTime `json:"deadline"`
+ Deadline string `json:"deadline"`
ResolvedById int64
Resolution string `json:"resolution"`
ResolvedBuild string `json:"resolvedBuild"`
diff --git a/backend/plugins/zentao/models/story.go
b/backend/plugins/zentao/models/story.go
index 4281cd345..192cd2a0f 100644
--- a/backend/plugins/zentao/models/story.go
+++ b/backend/plugins/zentao/models/story.go
@@ -25,7 +25,7 @@ import (
)
type ZentaoStoryRes struct {
- AllFeilds map[string]interface{} `json:"-"`
+ AllFields map[string]interface{} `json:"-"`
ID int64 `json:"id"`
Vision string `json:"vision"`
Parent int64 `json:"parent"`
@@ -87,7 +87,7 @@ func (i *ZentaoStoryRes) SetAllFeilds(raw json.RawMessage)
error {
if err := json.Unmarshal(raw, &allFeilds); err != nil {
return err
}
- i.AllFeilds = allFeilds
+ i.AllFields = allFeilds
return nil
}
diff --git a/backend/plugins/zentao/models/task.go
b/backend/plugins/zentao/models/task.go
index 34b5d8b9f..c2deff987 100644
--- a/backend/plugins/zentao/models/task.go
+++ b/backend/plugins/zentao/models/task.go
@@ -25,7 +25,7 @@ import (
)
type ZentaoTaskRes struct {
- AllFeilds map[string]interface{} `json:"-"`
+ AllFields map[string]interface{} `json:"-"`
Id int64 `json:"id"`
Project int64 `json:"project"`
Parent int64 `json:"parent"`
@@ -45,7 +45,7 @@ type ZentaoTaskRes struct {
Estimate float64 `json:"estimate"`
Consumed float64 `json:"consumed"`
Left float64 `json:"left"`
- Deadline *common.CSTTime `json:"deadline"`
+ Deadline interface{} `json:"deadline"`
Status string `json:"status"`
SubStatus string `json:"subStatus"`
Color string `json:"color"`
@@ -103,38 +103,38 @@ func (zentaoTaskRes *ZentaoTaskRes) SetAllFeilds(raw
json.RawMessage) error {
if err := json.Unmarshal(raw, &allFeilds); err != nil {
return err
}
- zentaoTaskRes.AllFeilds = allFeilds
+ zentaoTaskRes.AllFields = allFeilds
return nil
}
type ZentaoTask struct {
common.NoPKModel
- ConnectionId uint64 `gorm:"primaryKey;type:BIGINT NOT
NULL"`
- ID int64 `json:"id"
gorm:"primaryKey;type:BIGINT NOT NULL;autoIncrement:false"`
- Project int64 `json:"project"`
- Parent int64 `json:"parent"`
- Execution int64 `json:"execution"`
- Module int `json:"module"`
- Design int `json:"design"`
- Story int64 `json:"story"`
- StoryVersion int `json:"storyVersion"`
- DesignVersion int `json:"designVersion"`
- FromBug int `json:"fromBug"`
- Feedback int `json:"feedback"`
- FromIssue int `json:"fromIssue"`
- Name string `json:"name"`
- Type string `json:"type"`
- Mode string `json:"mode"`
- Pri int `json:"pri"`
- Estimate float64 `json:"estimate"`
- Consumed float64 `json:"consumed"`
- Left float64 `json:"left" gorm:"column:db_left"`
- Deadline *common.CSTTime `json:"deadline"`
- Status string `json:"status"`
- SubStatus string `json:"subStatus"`
- Color string `json:"color"`
- Description string `json:"desc"`
- Version int `json:"version"`
+ ConnectionId uint64 `gorm:"primaryKey;type:BIGINT NOT NULL"`
+ ID int64 `json:"id" gorm:"primaryKey;type:BIGINT NOT
NULL;autoIncrement:false"`
+ Project int64 `json:"project"`
+ Parent int64 `json:"parent"`
+ Execution int64 `json:"execution"`
+ Module int `json:"module"`
+ Design int `json:"design"`
+ Story int64 `json:"story"`
+ StoryVersion int `json:"storyVersion"`
+ DesignVersion int `json:"designVersion"`
+ FromBug int `json:"fromBug"`
+ Feedback int `json:"feedback"`
+ FromIssue int `json:"fromIssue"`
+ Name string `json:"name"`
+ Type string `json:"type"`
+ Mode string `json:"mode"`
+ Pri int `json:"pri"`
+ Estimate float64 `json:"estimate"`
+ Consumed float64 `json:"consumed"`
+ Left float64 `json:"left" gorm:"column:db_left"`
+ Deadline string `json:"deadline"`
+ Status string `json:"status"`
+ SubStatus string `json:"subStatus"`
+ Color string `json:"color"`
+ Description string `json:"desc"`
+ Version int `json:"version"`
OpenedById int64
OpenedByName string
OpenedDate *common.Iso8601Time `json:"openedDate"`
diff --git a/backend/plugins/zentao/tasks/bug_extractor.go
b/backend/plugins/zentao/tasks/bug_extractor.go
index b71cf5172..d79a7be49 100644
--- a/backend/plugins/zentao/tasks/bug_extractor.go
+++ b/backend/plugins/zentao/tasks/bug_extractor.go
@@ -19,6 +19,7 @@ package tasks
import (
"encoding/json"
+ "github.com/spf13/cast"
"time"
"github.com/apache/incubator-devlake/core/errors"
@@ -104,7 +105,7 @@ func ExtractBug(taskCtx plugin.SubTaskContext) errors.Error
{
AssignedToId:
data.AccountCache.getAccountIDFromApiAccount(res.AssignedTo),
AssignedToName:
data.AccountCache.getAccountNameFromApiAccount(res.AssignedTo),
AssignedDate: res.AssignedDate,
- Deadline: res.Deadline,
+ Deadline: cast.ToString(res.Deadline),
ResolvedById:
data.AccountCache.getAccountIDFromApiAccount(res.ResolvedBy),
Resolution: res.Resolution,
ResolvedBuild: res.ResolvedBuild,
@@ -135,7 +136,7 @@ func ExtractBug(taskCtx plugin.SubTaskContext) errors.Error
{
Url: row.Url,
}
loc, _ := time.LoadLocation("Asia/Shanghai")
- bug.DueDate, _ =
utils.GetTimeFeildFromMap(res.AllFeilds, dueDateField, loc)
+ bug.DueDate, _ =
utils.GetTimeFieldFromMap(res.AllFields, dueDateField, loc)
switch bug.Status {
case "active", "closed", "resolved":
default:
diff --git a/backend/plugins/zentao/tasks/story_extractor.go
b/backend/plugins/zentao/tasks/story_extractor.go
index 72ee2a863..d09c1935a 100644
--- a/backend/plugins/zentao/tasks/story_extractor.go
+++ b/backend/plugins/zentao/tasks/story_extractor.go
@@ -136,7 +136,7 @@ func ExtractStory(taskCtx plugin.SubTaskContext)
errors.Error {
return nil, errors.Default.WrapRaw(err)
}
loc, _ := time.LoadLocation("Asia/Shanghai")
- story.DueDate, _ =
helpers.GetTimeFeildFromMap(res.AllFeilds, dueDateField, loc)
+ story.DueDate, _ =
helpers.GetTimeFieldFromMap(res.AllFields, dueDateField, loc)
}
if story.StdType == "" {
story.StdType = ticket.REQUIREMENT
diff --git a/backend/plugins/zentao/tasks/task_extractor.go
b/backend/plugins/zentao/tasks/task_extractor.go
index c18ed644b..77d2af56e 100644
--- a/backend/plugins/zentao/tasks/task_extractor.go
+++ b/backend/plugins/zentao/tasks/task_extractor.go
@@ -19,6 +19,7 @@ package tasks
import (
"encoding/json"
+ "github.com/spf13/cast"
"time"
"github.com/apache/incubator-devlake/core/errors"
@@ -116,7 +117,7 @@ func (c *taskExtractor) toZentaoTasks(accountCache
*AccountCache, res *models.Ze
Estimate: res.Estimate,
Consumed: res.Consumed,
Left: res.Left,
- Deadline: res.Deadline,
+ Deadline: cast.ToString(res.Deadline),
Status: res.Status,
SubStatus: res.SubStatus,
Color: res.Color,
@@ -162,7 +163,7 @@ func (c *taskExtractor) toZentaoTasks(accountCache
*AccountCache, res *models.Ze
}
loc, _ := time.LoadLocation("Asia/Shanghai")
- task.DueDate, _ = utils.GetTimeFeildFromMap(res.AllFeilds,
dueDateField, loc)
+ task.DueDate, _ = utils.GetTimeFieldFromMap(res.AllFields,
dueDateField, loc)
if task.StdType == "" {
task.StdType = ticket.TASK
}