Merge branch 'dev-tangxvhui' into dev-zhengzhou
正在显示
7 个修改的文件
包含
438 行增加
和
51 行删除
1 | package adapter | 1 | package adapter |
2 | 2 | ||
3 | type TaskInfoAdapter struct { | 3 | type TaskInfoAdapter struct { |
4 | - Id int `json:"id,string"` | ||
5 | - Name string `json:"name"` // 任务名称 | ||
6 | - Alias string `json:"alias"` // 任务别名 | ||
7 | - LeaderId int64 `json:"leaderId,string"` // | ||
8 | - Leader UserData `json:"leader"` // 任务负责人 | ||
9 | - Status int `json:"status"` // 任务的状态 | ||
10 | - StatusDescript string `json:"statusDescript"` // | ||
11 | - Level int `json:"level"` // 优先级,值越小优先级越高 | ||
12 | - LevalName string `json:"levalName"` // 优先级名称 | ||
13 | - RelatedUserId []string `json:"relatedUserId"` // 相关的员工id | ||
14 | - RelatedUser []UserData `json:"relatedUser"` // 相关的员工id | ||
15 | - StageList []TaskStage `json:"stageList"` | 4 | + Id int `json:"id,string"` |
5 | + Name string `json:"name"` // 任务名称 | ||
6 | + Alias string `json:"alias"` // 任务别名 | ||
7 | + LeaderId int64 `json:"leaderId,string"` // | ||
8 | + Leader UserData `json:"leader"` // 任务负责人 | ||
9 | + Status int `json:"status"` // 任务的状态 | ||
10 | + StatusDescription string `json:"statusDescription"` // | ||
11 | + Level int `json:"level"` // 优先级,值越小优先级越高 | ||
12 | + LevalName string `json:"levalName"` // 优先级名称 | ||
13 | + RelatedUserId []string `json:"relatedUserId"` // 相关的员工id | ||
14 | + RelatedUser []UserData `json:"relatedUser"` // 相关的员工id | ||
15 | + StageList []TaskStage `json:"stageList"` | ||
16 | } | 16 | } |
17 | 17 | ||
18 | type UserData struct { | 18 | type UserData struct { |
@@ -22,11 +22,11 @@ type UserData struct { | @@ -22,11 +22,11 @@ type UserData struct { | ||
22 | } | 22 | } |
23 | 23 | ||
24 | type TaskStage struct { | 24 | type TaskStage struct { |
25 | - Id int `json:"id,string"` | ||
26 | - Name string `json:"name"` //里程碑名称 | ||
27 | - StatusDescript string `json:"statusDescript"` //里程碑的完成情况 | ||
28 | - Status int `json:"status"` //里程碑状态 | ||
29 | - SortBy int `json:"sortBy"` | ||
30 | - PlanCompletedAt string `json:"planCompletedAt"` //计划完成时间, 例:2006-01-02 | ||
31 | - RealCompletedAt string `json:"realCompletedAt"` //实际完成时间, 例:2006-01-02 | 25 | + Id int `json:"id,string"` |
26 | + Name string `json:"name"` //里程碑名称 | ||
27 | + StatusDescription string `json:"statusDescription"` //里程碑的完成情况 | ||
28 | + Status int `json:"status"` //里程碑状态 | ||
29 | + SortBy int `json:"sortBy"` | ||
30 | + PlanCompletedAt string `json:"planCompletedAt"` //计划完成时间, 例:2006-01-02 | ||
31 | + RealCompletedAt string `json:"realCompletedAt"` //实际完成时间, 例:2006-01-02 | ||
32 | } | 32 | } |
@@ -13,4 +13,5 @@ type TaskItem struct { | @@ -13,4 +13,5 @@ type TaskItem struct { | ||
13 | StageC TaskStage `json:"stageC"` // 里程碑3 | 13 | StageC TaskStage `json:"stageC"` // 里程碑3 |
14 | StageD TaskStage `json:"stageD"` // 里程碑4 | 14 | StageD TaskStage `json:"stageD"` // 里程碑4 |
15 | StageE TaskStage `json:"stageE"` // 里程碑5 | 15 | StageE TaskStage `json:"stageE"` // 里程碑5 |
16 | + UpdatedAt string `json:"updatedAt"` // | ||
16 | } | 17 | } |
pkg/application/task/command/search_task.go
0 → 100644
1 | +package command | ||
2 | + | ||
3 | +type SearchTaskCommand struct { | ||
4 | + UserId int `json:"-"` //谁要查看任务数据 | ||
5 | + CompanyId int `json:"-"` | ||
6 | + PageNumber int `json:"pageNumber"` //分页 | ||
7 | + PageSize int `json:"pageSize"` //分页 | ||
8 | + TaskName string `json:"taskName"` //任务名称 | ||
9 | + LevelName string `json:"levelName"` //优先级 | ||
10 | + OnlyMy bool `json:"onlyMy"` //只查看我负责的任务 | ||
11 | + LeaderId string `json:"leaderId"` //任务负责人id | ||
12 | +} |
@@ -7,9 +7,11 @@ import ( | @@ -7,9 +7,11 @@ import ( | ||
7 | "github.com/linmadan/egglib-go/core/application" | 7 | "github.com/linmadan/egglib-go/core/application" |
8 | "github.com/linmadan/egglib-go/utils/tool_funs" | 8 | "github.com/linmadan/egglib-go/utils/tool_funs" |
9 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory" | 9 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory" |
10 | + roleService "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/role" | ||
10 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/task/adapter" | 11 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/task/adapter" |
11 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/task/command" | 12 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/task/command" |
12 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | 13 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" |
14 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/dao" | ||
13 | ) | 15 | ) |
14 | 16 | ||
15 | type TaskService struct{} | 17 | type TaskService struct{} |
@@ -336,13 +338,13 @@ func (srv TaskService) GetTaskInfo(param *command.GetTaskCommand) (*adapter.Task | @@ -336,13 +338,13 @@ func (srv TaskService) GetTaskInfo(param *command.GetTaskCommand) (*adapter.Task | ||
336 | Account: taskData.Leader.Account, | 338 | Account: taskData.Leader.Account, |
337 | Name: taskData.Leader.Name, | 339 | Name: taskData.Leader.Name, |
338 | }, | 340 | }, |
339 | - Status: int(taskData.Status), | ||
340 | - StatusDescript: taskData.StatusDescript(), | ||
341 | - Level: taskData.Level, | ||
342 | - LevalName: taskData.LevelName, | ||
343 | - RelatedUserId: []string{}, | ||
344 | - RelatedUser: []adapter.UserData{}, | ||
345 | - StageList: []adapter.TaskStage{}, | 341 | + Status: int(taskData.Status), |
342 | + StatusDescription: taskData.StatusDescription(), | ||
343 | + Level: taskData.Level, | ||
344 | + LevalName: taskData.LevelName, | ||
345 | + RelatedUserId: []string{}, | ||
346 | + RelatedUser: []adapter.UserData{}, | ||
347 | + StageList: []adapter.TaskStage{}, | ||
346 | } | 348 | } |
347 | for _, val := range relatedUserList { | 349 | for _, val := range relatedUserList { |
348 | idStr := strconv.Itoa(int(val.Id)) | 350 | idStr := strconv.Itoa(int(val.Id)) |
@@ -364,13 +366,13 @@ func (srv TaskService) GetTaskInfo(param *command.GetTaskCommand) (*adapter.Task | @@ -364,13 +366,13 @@ func (srv TaskService) GetTaskInfo(param *command.GetTaskCommand) (*adapter.Task | ||
364 | t2 = time.Unix(val.RealCompletedAt, 0).Local().Format("2006-01-02") | 366 | t2 = time.Unix(val.RealCompletedAt, 0).Local().Format("2006-01-02") |
365 | } | 367 | } |
366 | result.StageList = append(result.StageList, adapter.TaskStage{ | 368 | result.StageList = append(result.StageList, adapter.TaskStage{ |
367 | - Id: val.Id, | ||
368 | - Name: val.Name, | ||
369 | - PlanCompletedAt: t1, | ||
370 | - RealCompletedAt: t2, | ||
371 | - SortBy: val.SortBy, | ||
372 | - StatusDescript: val.StatusDescript(), | ||
373 | - Status: int(val.Status), | 369 | + Id: val.Id, |
370 | + Name: val.Name, | ||
371 | + PlanCompletedAt: t1, | ||
372 | + RealCompletedAt: t2, | ||
373 | + SortBy: val.SortBy, | ||
374 | + StatusDescription: val.StatusDescription(), | ||
375 | + Status: int(val.Status), | ||
374 | }) | 376 | }) |
375 | } | 377 | } |
376 | return &result, nil | 378 | return &result, nil |
@@ -529,11 +531,11 @@ func (srv TaskService) ListTask(param *command.ListTaskCommand) (map[string]inte | @@ -529,11 +531,11 @@ func (srv TaskService) ListTask(param *command.ListTaskCommand) (map[string]inte | ||
529 | continue | 531 | continue |
530 | } | 532 | } |
531 | stage := adapter.TaskStage{ | 533 | stage := adapter.TaskStage{ |
532 | - Id: val.Id, | ||
533 | - Name: val.Name, | ||
534 | - StatusDescript: val.StatusDescript(), | ||
535 | - Status: int(val.Status), | ||
536 | - SortBy: val.SortBy, | 534 | + Id: val.Id, |
535 | + Name: val.Name, | ||
536 | + StatusDescription: val.StatusDescription(), | ||
537 | + Status: int(val.Status), | ||
538 | + SortBy: val.SortBy, | ||
537 | } | 539 | } |
538 | switch val.SortBy { | 540 | switch val.SortBy { |
539 | case 1: | 541 | case 1: |
@@ -556,10 +558,6 @@ func (t TaskService) canUpdateTask(taskData *domain.Task, stageList []*domain.Ta | @@ -556,10 +558,6 @@ func (t TaskService) canUpdateTask(taskData *domain.Task, stageList []*domain.Ta | ||
556 | return true, nil | 558 | return true, nil |
557 | } | 559 | } |
558 | 560 | ||
559 | -func (t TaskService) ListTask2() error { | ||
560 | - return nil | ||
561 | -} | ||
562 | - | ||
563 | // CancelAttention 用户取消关注某个任务 | 561 | // CancelAttention 用户取消关注某个任务 |
564 | func (t TaskService) CancelAttention(param *command.CancelAttentionCommand) error { | 562 | func (t TaskService) CancelAttention(param *command.CancelAttentionCommand) error { |
565 | transactionContext, err := factory.CreateTransactionContext(nil) | 563 | transactionContext, err := factory.CreateTransactionContext(nil) |
@@ -590,3 +588,57 @@ func (t TaskService) CancelAttention(param *command.CancelAttentionCommand) erro | @@ -590,3 +588,57 @@ func (t TaskService) CancelAttention(param *command.CancelAttentionCommand) erro | ||
590 | } | 588 | } |
591 | return nil | 589 | return nil |
592 | } | 590 | } |
591 | + | ||
592 | +// 员工绩效-任务管理-列表 | ||
593 | +func (t TaskService) ListTask2(param command.SearchTaskCommand) (map[string]interface{}, error) { | ||
594 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
595 | + if err != nil { | ||
596 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
597 | + } | ||
598 | + if err := transactionContext.StartTransaction(); err != nil { | ||
599 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
600 | + } | ||
601 | + defer func() { | ||
602 | + _ = transactionContext.RollbackTransaction() | ||
603 | + }() | ||
604 | + hrbpFlag, err := roleService.GetHrBp(transactionContext, int(param.CompanyId), int(param.UserId)) | ||
605 | + if err != nil { | ||
606 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取用户的角色信息"+err.Error()) | ||
607 | + } | ||
608 | + var limit = 20 | ||
609 | + var offset = 0 | ||
610 | + if param.PageSize > 0 { | ||
611 | + limit = param.PageSize | ||
612 | + if param.PageNumber > 0 { | ||
613 | + offset = (param.PageNumber - 1) * param.PageSize | ||
614 | + } | ||
615 | + } | ||
616 | + condition := dao.ListTaskCondition{ | ||
617 | + Limit: limit, | ||
618 | + Offset: offset, | ||
619 | + UserId: param.UserId, | ||
620 | + TaskName: param.TaskName, | ||
621 | + LevelName: param.LevelName, | ||
622 | + OnlyMy: param.OnlyMy, | ||
623 | + LeaderId: param.LeaderId, | ||
624 | + } | ||
625 | + | ||
626 | + if hrbpFlag == domain.RoleTypeSystem { | ||
627 | + //已hrbp权限获取 | ||
628 | + // info.IsHrbp = true | ||
629 | + return nil, nil | ||
630 | + } | ||
631 | + taskDato := dao.NewTaskDao(map[string]interface{}{ | ||
632 | + "transactionContext": transactionContext, | ||
633 | + }) | ||
634 | + taskDato.ListTaskStageNotHrbp(condition) | ||
635 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
636 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
637 | + } | ||
638 | + return nil, nil | ||
639 | +} | ||
640 | + | ||
641 | +// 以hrbp角色权限获取任务列表 | ||
642 | +func (t TaskService) ListTask2ForHrbp(param command.SearchTaskCommand) (map[string]interface{}, error) { | ||
643 | + return nil, nil | ||
644 | +} |
@@ -36,6 +36,7 @@ type TaskLeader struct { | @@ -36,6 +36,7 @@ type TaskLeader struct { | ||
36 | } | 36 | } |
37 | 37 | ||
38 | // 设置任务的优先级 | 38 | // 设置任务的优先级 |
39 | +// 值越小优先级越高,不是预定义的任务优先级,排在最后 | ||
39 | func (t *Task) ApplyLevelName(name string) { | 40 | func (t *Task) ApplyLevelName(name string) { |
40 | t.LevelName = name | 41 | t.LevelName = name |
41 | switch name { | 42 | switch name { |
@@ -51,7 +52,7 @@ func (t *Task) ApplyLevelName(name string) { | @@ -51,7 +52,7 @@ func (t *Task) ApplyLevelName(name string) { | ||
51 | } | 52 | } |
52 | 53 | ||
53 | // StatusDescript | 54 | // StatusDescript |
54 | -func (t *Task) StatusDescript() string { | 55 | +func (t *Task) StatusDescription() string { |
55 | switch t.Status { | 56 | switch t.Status { |
56 | case TaskWait: | 57 | case TaskWait: |
57 | return "待启动" | 58 | return "待启动" |
@@ -5,9 +5,9 @@ import "time" | @@ -5,9 +5,9 @@ import "time" | ||
5 | type TaskStageState int | 5 | type TaskStageState int |
6 | 6 | ||
7 | const ( | 7 | const ( |
8 | - TaskStageUncompleted TaskStageState = 1 //里程碑未完成 | ||
9 | - TaskStageCompletedOverdue TaskStageState = 2 //里程碑逾期完成 | ||
10 | - TaskStageCompleted TaskStageState = 3 //里程碑完成 | 8 | + TaskStageUncompleted TaskStageState = 1 //里程碑未完成 |
9 | + // TaskStageCompletedOverdue TaskStageState = 2 //里程碑逾期完成 | ||
10 | + TaskStageCompleted TaskStageState = 2 //里程碑完成 | ||
11 | 11 | ||
12 | ) | 12 | ) |
13 | 13 | ||
@@ -32,7 +32,7 @@ type TaskStageRepository interface { | @@ -32,7 +32,7 @@ type TaskStageRepository interface { | ||
32 | } | 32 | } |
33 | 33 | ||
34 | // 描述里程碑完成情况 | 34 | // 描述里程碑完成情况 |
35 | -func (t TaskStage) StatusDescript() string { | 35 | +func (t TaskStage) StatusDescription() string { |
36 | nowDay := time.Now().Format("2006-01-02") | 36 | nowDay := time.Now().Format("2006-01-02") |
37 | nowTime, _ := time.ParseInLocation("2006-01-02", nowDay, time.Local) | 37 | nowTime, _ := time.ParseInLocation("2006-01-02", nowDay, time.Local) |
38 | 38 | ||
@@ -45,10 +45,11 @@ func (t TaskStage) StatusDescript() string { | @@ -45,10 +45,11 @@ func (t TaskStage) StatusDescript() string { | ||
45 | str = "未完成" | 45 | str = "未完成" |
46 | } | 46 | } |
47 | case TaskStageCompleted: | 47 | case TaskStageCompleted: |
48 | - str = "已完成" | ||
49 | - case TaskStageCompletedOverdue: | ||
50 | - str = "逾期完成" | 48 | + if t.PlanCompletedAt >= t.RealCompletedAt { |
49 | + str = "已完成" | ||
50 | + } else { | ||
51 | + str = "逾期完成" | ||
52 | + } | ||
51 | } | 53 | } |
52 | - | ||
53 | return str | 54 | return str |
54 | } | 55 | } |
pkg/infrastructure/dao/task.go
0 → 100644
1 | +package dao | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "time" | ||
6 | + | ||
7 | + "github.com/go-pg/pg/v10" | ||
8 | + pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | ||
9 | +) | ||
10 | + | ||
11 | +type TaskDao struct { | ||
12 | + transactionContext *pgTransaction.TransactionContext | ||
13 | +} | ||
14 | + | ||
15 | +func NewTaskDao(options map[string]interface{}) *TaskDao { | ||
16 | + var transactionContext *pgTransaction.TransactionContext | ||
17 | + if value, ok := options["transactionContext"]; ok { | ||
18 | + transactionContext = value.(*pgTransaction.TransactionContext) | ||
19 | + } | ||
20 | + return &TaskDao{ | ||
21 | + transactionContext: transactionContext, | ||
22 | + } | ||
23 | +} | ||
24 | + | ||
25 | +func (d *TaskDao) catchTaskIdByPermission(userId int) string { | ||
26 | + sqlStr := `with | ||
27 | + -- 人员自身以及全下级 | ||
28 | + recursive t_user as ( | ||
29 | + ( | ||
30 | + select "user".id,"user".parent_id | ||
31 | + from "user" | ||
32 | + where "user".id=%d | ||
33 | + ) | ||
34 | + union | ||
35 | + ( | ||
36 | + select "child_user".id,"child_user".parent_id | ||
37 | + from "user" as "child_user" | ||
38 | + join t_user as "parent_user" on "parent_user".id="child_user".parent_id | ||
39 | + ) | ||
40 | + ), | ||
41 | + -- 根据任务负责人和相关人员查询 | ||
42 | + t_task_0 as ( | ||
43 | + (select task.id from task | ||
44 | + join t_user on task.leader ->>'id'=t_user.id::text | ||
45 | + ) | ||
46 | + union | ||
47 | + (select task.id from task where task.related_user@>'[%d]') | ||
48 | + ), | ||
49 | + t_task_ignore as ( | ||
50 | + select * from task_ignore where task_ignore.user_id =%d | ||
51 | + ), | ||
52 | + -- 过滤取消关注的 | ||
53 | + t_task_1 as ( | ||
54 | + select t_task_0.id | ||
55 | + from t_task_0 | ||
56 | + left join t_task_ignore on t_task_0.id=t_task_ignore.task_id | ||
57 | + where t_task_ignore.id isnull | ||
58 | + )` | ||
59 | + return fmt.Sprintf(sqlStr, userId, userId, userId) | ||
60 | +} | ||
61 | + | ||
62 | +type ListTaskCondition struct { | ||
63 | + Limit int //分页 | ||
64 | + Offset int //分页 | ||
65 | + UserId int //谁要查看任务数据 | ||
66 | + TaskName string //任务名称 | ||
67 | + LevelName string //优先级 | ||
68 | + OnlyMy bool //只查看我负责的任务 | ||
69 | + LeaderId string //任务负责人id | ||
70 | +} | ||
71 | + | ||
72 | +// 任务和里程碑列表 | ||
73 | +type ListTaskStage struct { | ||
74 | + TaskId string `pg:"task_id"` | ||
75 | + TaskName string `pg:"task_name"` | ||
76 | + LeaderName string `pg:"leader_name"` | ||
77 | + LeaderId string `pg:"leader_id"` | ||
78 | + LevelName string `pg:"level_name"` | ||
79 | + Level int `pg:"level"` | ||
80 | + Anomaly int `pg:"anomaly"` | ||
81 | + UpdatedAt time.Time `pg:"updated_at"` | ||
82 | + CreatedAt time.Time `pg:"created_at"` | ||
83 | + StageName string `pg:"stage_name"` | ||
84 | + StageSortBy int `pg:"stage_sort_by"` | ||
85 | + StageStatus int `pg:"stage_status"` | ||
86 | + PlanCompletedAt int `pg:"plan_completed_at"` | ||
87 | +} | ||
88 | + | ||
89 | +// 获取任务以及里程碑列表,用于页面展示; 有过滤查看权限 | ||
90 | +// userid 谁要查看任务数据 | ||
91 | +// limit 分页 | ||
92 | +// offset 分页 | ||
93 | +func (d *TaskDao) ListTaskStageNotHrbp(param ListTaskCondition) ([]ListTaskStage, error) { | ||
94 | + task1 := d.catchTaskIdByPermission(param.UserId) | ||
95 | + withSql := task1 + `, | ||
96 | + -- 获取的里程碑数据,以及排序 | ||
97 | + t_task_tage_1 as( | ||
98 | + select | ||
99 | + task.id as task_id, | ||
100 | + task."name" as task_name, | ||
101 | + task.leader ->>'name' as leader_name, | ||
102 | + task.leader ->>'id' as leader_id, | ||
103 | + task.level_name , | ||
104 | + task.anomaly , | ||
105 | + task.updated_at , | ||
106 | + task.created_at , | ||
107 | + task."level" , | ||
108 | + task_stage."name" as stage_name, | ||
109 | + task_stage.sort_by as stage_sort_by, | ||
110 | + task_stage.status as stage_status, | ||
111 | + task_stage.plan_completed_at, | ||
112 | + (case | ||
113 | + when task_stage.real_completed_at =0 | ||
114 | + then task_stage.plan_completed_at - floor( extract(epoch from now())) | ||
115 | + else task_stage.plan_completed_at - task_stage.real_completed_at | ||
116 | + end) as diff_time | ||
117 | + from task | ||
118 | + join t_task_1 on task.id=t_task_1.id | ||
119 | + join task_stage on task.id =task_stage.task_id | ||
120 | + where 1=1 | ||
121 | + order by diff_time,task."level",task.created_at | ||
122 | + ), | ||
123 | + -- 按任务数据分页获取 | ||
124 | + t_task_page as ( | ||
125 | + select distinct t_task_tage_1.task_id | ||
126 | + from t_task_tage_1 | ||
127 | + where 1=1 | ||
128 | + %s | ||
129 | + limit ? offset ? | ||
130 | + ) | ||
131 | + select | ||
132 | + t_task_tage_1.task_id, | ||
133 | + t_task_tage_1.task_name, | ||
134 | + t_task_tage_1.leader_name, | ||
135 | + t_task_tage_1.level_name , | ||
136 | + t_task_tage_1.anomaly , | ||
137 | + t_task_tage_1.updated_at , | ||
138 | + t_task_tage_1.created_at , | ||
139 | + t_task_tage_1."level" , | ||
140 | + t_task_tage_1.plan_completed_at, | ||
141 | + t_task_tage_1.stage_name, | ||
142 | + t_task_tage_1.stage_sort_by, | ||
143 | + t_task_tage_1.stage_status, | ||
144 | + from t_task_tage_1 | ||
145 | + where t_task_tage_1.task_id in( | ||
146 | + select t_task_page.task_id from t_task_page | ||
147 | + )` | ||
148 | + condition := []interface{}{} | ||
149 | + whereSql := `` | ||
150 | + if param.OnlyMy { | ||
151 | + condition = append(condition, param.UserId) | ||
152 | + whereSql += ` and t_task_tage_1.leader_id = '?' ` | ||
153 | + } else if param.LeaderId != "" { | ||
154 | + condition = append(condition, param.LeaderId) | ||
155 | + whereSql += ` and t_task_tage_1.leader_id = ? ` | ||
156 | + } | ||
157 | + if len(param.TaskName) > 0 { | ||
158 | + condition = append(condition, param.TaskName) | ||
159 | + whereSql += ` and t_task_tage_1.task_name like ? ` | ||
160 | + } | ||
161 | + if len(param.LevelName) > 0 { | ||
162 | + condition = append(condition, param.LevelName) | ||
163 | + whereSql += ` and t_task_tage_1.level_name like ? ` | ||
164 | + } | ||
165 | + condition = append(condition, param.Limit, param.Offset) | ||
166 | + sqlStr := fmt.Sprintf(withSql, whereSql) | ||
167 | + result := []ListTaskStage{} | ||
168 | + tx := d.transactionContext.PgTx | ||
169 | + _, err := tx.Query(&result, sqlStr, condition...) | ||
170 | + return result, err | ||
171 | +} | ||
172 | + | ||
173 | +// 获取任务总数,用于页面展示; 有过滤查看权限 | ||
174 | +func (d *TaskDao) CountTaskStageNotHrbp(param ListTaskCondition) (int, error) { | ||
175 | + task1 := d.catchTaskIdByPermission(param.UserId) | ||
176 | + withSql := task1 + `select count(*) from task | ||
177 | + join t_task_1 on task.id =t_task_1.id | ||
178 | + where 1=1 ` | ||
179 | + condition := []interface{}{} | ||
180 | + whereSql := `` | ||
181 | + if param.OnlyMy { | ||
182 | + condition = append(condition, param.UserId) | ||
183 | + whereSql += ` and task.leader ->>'id' = '?' ` | ||
184 | + } else if param.LeaderId != "" { | ||
185 | + condition = append(condition, param.LeaderId) | ||
186 | + whereSql += ` and task.leader ->>'id' = ? ` | ||
187 | + } | ||
188 | + if len(param.TaskName) > 0 { | ||
189 | + condition = append(condition, param.TaskName) | ||
190 | + whereSql += ` and task.name like ? ` | ||
191 | + } | ||
192 | + if len(param.LevelName) > 0 { | ||
193 | + condition = append(condition, param.LevelName) | ||
194 | + whereSql += ` and task.level_name like ? ` | ||
195 | + } | ||
196 | + sqlStr := withSql + whereSql | ||
197 | + tx := d.transactionContext.PgTx | ||
198 | + var cnt int | ||
199 | + _, err := tx.QueryOne(pg.Scan(&cnt), sqlStr, condition...) | ||
200 | + return cnt, err | ||
201 | +} | ||
202 | + | ||
203 | +// 获取任务以及里程碑列表,用于页面展示; 无过滤查看权限 | ||
204 | +// userid 谁要查看任务数据 | ||
205 | +// limit 分页 | ||
206 | +// offset 分页 | ||
207 | +func (d *TaskDao) ListTaskStageByHrbp(param ListTaskCondition) ([]ListTaskStage, error) { | ||
208 | + withSql := `with | ||
209 | + t_task_ignore as ( | ||
210 | + select task_ignore.task_id,task_ignore.id from task_ignore where task_ignore.user_id =? | ||
211 | + ), | ||
212 | + -- 获取的里程碑数据,以及排序 | ||
213 | + t_task_tage_1 as( | ||
214 | + select | ||
215 | + task.id as task_id, | ||
216 | + task."name" as task_name, | ||
217 | + task.leader ->>'name' as leader_name, | ||
218 | + task.leader ->>'id' as leader_id, | ||
219 | + task.level_name , | ||
220 | + task.anomaly , | ||
221 | + task.updated_at , | ||
222 | + task.created_at , | ||
223 | + task."level" , | ||
224 | + task_stage."name" as stage_name, | ||
225 | + task_stage.sort_by as stage_sort_by, | ||
226 | + task_stage.status as stage_status, | ||
227 | + task_stage.plan_completed_at, | ||
228 | + (case | ||
229 | + when task_stage.real_completed_at =0 | ||
230 | + then task_stage.plan_completed_at - floor( extract(epoch from now())) | ||
231 | + else task_stage.plan_completed_at - task_stage.real_completed_at | ||
232 | + end) as diff_time | ||
233 | + from task | ||
234 | + join task_stage on task.id =task_stage.task_id | ||
235 | + where 1=1 | ||
236 | + order by diff_time,task."level",task.created_at | ||
237 | + ), | ||
238 | + -- 按任务数据分页获取 | ||
239 | + t_task_page as ( | ||
240 | + select distinct t_task_tage_1.task_id | ||
241 | + from t_task_tage_1 | ||
242 | + left join t_task_ignore on t_task_ignore.task_id=t_task_tage_1.task_id | ||
243 | + where t_task_ignore.id isnull | ||
244 | + %s | ||
245 | + limit ? offset ? | ||
246 | + ) | ||
247 | + select | ||
248 | + t_task_tage_1.task_id, | ||
249 | + t_task_tage_1.task_name, | ||
250 | + t_task_tage_1.leader_name, | ||
251 | + t_task_tage_1.level_name , | ||
252 | + t_task_tage_1.anomaly , | ||
253 | + t_task_tage_1.updated_at , | ||
254 | + t_task_tage_1.created_at , | ||
255 | + t_task_tage_1."level" , | ||
256 | + t_task_tage_1.plan_completed_at, | ||
257 | + t_task_tage_1.stage_name, | ||
258 | + t_task_tage_1.stage_sort_by, | ||
259 | + t_task_tage_1.stage_status, | ||
260 | + from t_task_tage_1 | ||
261 | + where t_task_tage_1.task_id in( | ||
262 | + select t_task_page.task_id from t_task_page | ||
263 | + )` | ||
264 | + condition := []interface{}{} | ||
265 | + whereSql := `` | ||
266 | + if param.OnlyMy { | ||
267 | + condition = append(condition, param.UserId) | ||
268 | + whereSql += ` and task.leader ->>'id' = '?' ` | ||
269 | + } else if param.LeaderId != "" { | ||
270 | + condition = append(condition, param.LeaderId) | ||
271 | + whereSql += ` and task.leader ->>'id' = ? ` | ||
272 | + } | ||
273 | + if len(param.TaskName) > 0 { | ||
274 | + condition = append(condition, param.TaskName) | ||
275 | + whereSql += ` and task.name like ? ` | ||
276 | + } | ||
277 | + if len(param.LevelName) > 0 { | ||
278 | + condition = append(condition, param.LevelName) | ||
279 | + whereSql += ` and task.level_name like ? ` | ||
280 | + } | ||
281 | + condition = append(condition, param.Limit, param.Offset) | ||
282 | + sqlStr := fmt.Sprintf(withSql, whereSql) | ||
283 | + result := []ListTaskStage{} | ||
284 | + tx := d.transactionContext.PgTx | ||
285 | + _, err := tx.Query(&result, sqlStr, condition...) | ||
286 | + return result, err | ||
287 | +} | ||
288 | + | ||
289 | +// 获取任务总数,用于页面展示; 无过滤查看权限 | ||
290 | +func (d *TaskDao) CountTaskStageByHrbp(param ListTaskCondition) (int, error) { | ||
291 | + | ||
292 | + withSql := `with | ||
293 | + t_task_ignore as ( | ||
294 | + select task_ignore.task_id,task_ignore.id from task_ignore where task_ignore.user_id =? | ||
295 | + )select count(*) from task | ||
296 | + left join t_task_ignore on t_task_ignore.task_id=task.id | ||
297 | + where 1=1 ` | ||
298 | + condition := []interface{}{} | ||
299 | + whereSql := `` | ||
300 | + if param.OnlyMy { | ||
301 | + condition = append(condition, param.UserId) | ||
302 | + whereSql += ` and task.leader ->>'id' = '?' ` | ||
303 | + } else if param.LeaderId != "" { | ||
304 | + condition = append(condition, param.LeaderId) | ||
305 | + whereSql += ` and task.leader ->>'id' = ? ` | ||
306 | + } | ||
307 | + if len(param.TaskName) > 0 { | ||
308 | + condition = append(condition, param.TaskName) | ||
309 | + whereSql += ` and task.name like ? ` | ||
310 | + } | ||
311 | + if len(param.LevelName) > 0 { | ||
312 | + condition = append(condition, param.LevelName) | ||
313 | + whereSql += ` and task.level_name like ? ` | ||
314 | + } | ||
315 | + sqlStr := withSql + whereSql | ||
316 | + tx := d.transactionContext.PgTx | ||
317 | + var cnt int | ||
318 | + _, err := tx.QueryOne(pg.Scan(&cnt), sqlStr, condition...) | ||
319 | + return cnt, err | ||
320 | +} |
-
请 注册 或 登录 后发表评论