正在显示
12 个修改的文件
包含
259 行增加
和
55 行删除
@@ -216,3 +216,18 @@ func CreateMessagePersonalRepository(options map[string]interface{}) domain.Mess | @@ -216,3 +216,18 @@ func CreateMessagePersonalRepository(options map[string]interface{}) domain.Mess | ||
216 | } | 216 | } |
217 | return repository.NewMessagePersonalRepository(transactionContext) | 217 | return repository.NewMessagePersonalRepository(transactionContext) |
218 | } | 218 | } |
219 | +func CreateTaskRepository(options map[string]interface{}) domain.TaskRepository { | ||
220 | + var transactionContext *pg.TransactionContext | ||
221 | + if value, ok := options["transactionContext"]; ok { | ||
222 | + transactionContext = value.(*pg.TransactionContext) | ||
223 | + } | ||
224 | + return repository.NewTaskRepository(transactionContext) | ||
225 | +} | ||
226 | + | ||
227 | +func CreateTaskStageRepository(options map[string]interface{}) domain.TaskStageRepository { | ||
228 | + var transactionContext *pg.TransactionContext | ||
229 | + if value, ok := options["transactionContext"]; ok { | ||
230 | + transactionContext = value.(*pg.TransactionContext) | ||
231 | + } | ||
232 | + return repository.NewTaskStageRepository(transactionContext) | ||
233 | +} |
pkg/application/task/command/create_task.go
0 → 100644
pkg/application/task/command/run_task.go
0 → 100644
pkg/application/task/command/stop_task.go
0 → 100644
pkg/application/task/command/update_task.go
0 → 100644
1 | +package command | ||
2 | + | ||
3 | +type UpdateTaskCommand struct { | ||
4 | + Id int `json:"id"` | ||
5 | + Name string `json:"name"` //任务名称 | ||
6 | + LeaderId int `json:"leaderId"` //赋值人id | ||
7 | + LevelName string `json:"levelName"` //优先级 | ||
8 | + StageList []struct { | ||
9 | + Id int `json:"id"` | ||
10 | + Name string `json:"name"` //里程碑名称 | ||
11 | + PlanCompletedAt string `json:"planCompletedAt"` //计划完成时间, 例:2006-01-02 | ||
12 | + } `json:"stageList"` | ||
13 | +} |
pkg/application/task/service/service.go
0 → 100644
1 | +package service | ||
2 | + | ||
3 | +import ( | ||
4 | + "time" | ||
5 | + | ||
6 | + "github.com/linmadan/egglib-go/core/application" | ||
7 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory" | ||
8 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/task/command" | ||
9 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | ||
10 | +) | ||
11 | + | ||
12 | +type TaskService struct{} | ||
13 | + | ||
14 | +func dayEndTime(t time.Time) time.Time { | ||
15 | + y, m, d := t.Local().Date() | ||
16 | + t2 := time.Date(y, m, d, 23, 59, 59, 0, time.Local) | ||
17 | + return t2 | ||
18 | +} | ||
19 | + | ||
20 | +func (srv TaskService) CreateTask(transactionContext application.TransactionContext, param *command.CreateTaskCommand) error { | ||
21 | + taskRepo := factory.CreateTaskRepository(map[string]interface{}{ | ||
22 | + "transactionContext": transactionContext, | ||
23 | + }) | ||
24 | + taskStageRepo := factory.CreateTaskStageRepository(map[string]interface{}{ | ||
25 | + "transactionContext": transactionContext, | ||
26 | + }) | ||
27 | + cnt, _, err := taskRepo.Find(map[string]interface{}{ | ||
28 | + "name": param.Name, | ||
29 | + "leaderId": param.LeaderId, | ||
30 | + }) | ||
31 | + if err != nil { | ||
32 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, "查询任务失败:"+err.Error()) | ||
33 | + } | ||
34 | + if cnt > 0 { | ||
35 | + //任务已存在 | ||
36 | + return nil | ||
37 | + } | ||
38 | + nowTime := time.Now() | ||
39 | + newTask := domain.Task{ | ||
40 | + Id: 0, | ||
41 | + Name: param.Name, | ||
42 | + Alias: param.Name, | ||
43 | + Status: domain.TaskRunning, | ||
44 | + Level: 0, | ||
45 | + LevalName: "", | ||
46 | + RelatedUser: []int{}, | ||
47 | + RunAt: nowTime.Unix(), | ||
48 | + } | ||
49 | + newTask.ApplyLevelName("") | ||
50 | + err = taskRepo.Save(&newTask) | ||
51 | + if err != nil { | ||
52 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, "创建任务失败:"+err.Error()) | ||
53 | + } | ||
54 | + | ||
55 | + nowEndTime := dayEndTime(nowTime) | ||
56 | + | ||
57 | + newTaskStage := []*domain.TaskStage{ | ||
58 | + { | ||
59 | + Id: 0, | ||
60 | + TaskId: newTask.Id, | ||
61 | + Name: "里程碑1", | ||
62 | + SortBy: 1, | ||
63 | + Status: domain.TaskStageUncompleted, | ||
64 | + PlanCompletedAt: nowEndTime.Add(30 * 24 * time.Hour).Unix(), | ||
65 | + RealCompletedAt: 0, | ||
66 | + }, | ||
67 | + { | ||
68 | + Id: 0, | ||
69 | + TaskId: newTask.Id, | ||
70 | + Name: "里程碑2", | ||
71 | + SortBy: 2, | ||
72 | + Status: domain.TaskStageUncompleted, | ||
73 | + PlanCompletedAt: nowEndTime.Add(60 * 24 * time.Hour).Unix(), | ||
74 | + RealCompletedAt: 0, | ||
75 | + }, | ||
76 | + { | ||
77 | + Id: 0, | ||
78 | + TaskId: newTask.Id, | ||
79 | + Name: "里程碑3", | ||
80 | + SortBy: 3, | ||
81 | + Status: domain.TaskStageUncompleted, | ||
82 | + PlanCompletedAt: nowEndTime.Add(90 * 24 * time.Hour).Unix(), | ||
83 | + RealCompletedAt: 0, | ||
84 | + }, | ||
85 | + } | ||
86 | + err = taskStageRepo.Save(newTaskStage) | ||
87 | + if err != nil { | ||
88 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, "创建任务失败:"+err.Error()) | ||
89 | + } | ||
90 | + return nil | ||
91 | +} | ||
92 | + | ||
93 | +func (srv TaskService) UpdateTask(param *command.UpdateTaskCommand) (map[string]interface{}, error) { | ||
94 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
95 | + if err != nil { | ||
96 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
97 | + } | ||
98 | + if err := transactionContext.StartTransaction(); err != nil { | ||
99 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
100 | + } | ||
101 | + defer func() { | ||
102 | + _ = transactionContext.RollbackTransaction() | ||
103 | + }() | ||
104 | + taskRepo := factory.CreateTaskRepository(map[string]interface{}{ | ||
105 | + "transactionContext": transactionContext, | ||
106 | + }) | ||
107 | + taskStageRepo := factory.CreateTaskStageRepository(map[string]interface{}{ | ||
108 | + "transactionContext": transactionContext, | ||
109 | + }) | ||
110 | + taskData, err := taskRepo.FindOne(map[string]interface{}{ | ||
111 | + "id": param.Id, | ||
112 | + }) | ||
113 | + if err != nil { | ||
114 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
115 | + } | ||
116 | + _, stageList, err := taskStageRepo.Find(map[string]interface{}{ | ||
117 | + "taskId": param.Id, | ||
118 | + }) | ||
119 | + _ = taskData | ||
120 | + _ = stageList | ||
121 | + | ||
122 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
123 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
124 | + } | ||
125 | + return nil, nil | ||
126 | +} | ||
127 | + | ||
128 | +func (srv TaskService) RunTask() error { | ||
129 | + return nil | ||
130 | +} | ||
131 | + | ||
132 | +func (srv TaskService) StopTask() error { | ||
133 | + return nil | ||
134 | +} |
@@ -11,15 +11,19 @@ const ( | @@ -11,15 +11,19 @@ const ( | ||
11 | 11 | ||
12 | // 任务 | 12 | // 任务 |
13 | type Task struct { | 13 | type Task struct { |
14 | - Id int `json:"id"` | ||
15 | - CreatedAt time.Time `json:"createdAt"` | ||
16 | - UpdatedAt time.Time `json:"updatedAt"` | ||
17 | - DeletedAt time.Time `json:"deletedAt"` | ||
18 | - Name string `json:"name"` // 任务名称 | ||
19 | - Leader TaskLeader `json:"leader"` // 任务负责人 | ||
20 | - Status TaskState `json:"status"` // 任务的状态 | ||
21 | - Level int `json:"level"` // 优先级,值越小优先级越高 | ||
22 | - LevalName string `json:"levalName"` // 优先级名称 | 14 | + Id int `json:"id"` |
15 | + CreatedAt time.Time `json:"createdAt"` | ||
16 | + UpdatedAt time.Time `json:"updatedAt"` | ||
17 | + DeletedAt *time.Time `json:"deletedAt"` | ||
18 | + Name string `json:"name"` // 任务名称 | ||
19 | + Alias string `json:"alias"` // 任务别名 | ||
20 | + Leader TaskLeader `json:"leader"` // 任务负责人 | ||
21 | + Status TaskState `json:"status"` // 任务的状态 | ||
22 | + Level int `json:"level"` // 优先级,值越小优先级越高 | ||
23 | + LevalName string `json:"levalName"` // 优先级名称 | ||
24 | + RelatedUser []int `json:"relatedUser"` // 相关的员工id | ||
25 | + RunAt int64 `json:"runAt"` // 启动的时间戳,秒 | ||
26 | + StopAt int64 `json:"stopAt"` // 停止的时间戳,秒 | ||
23 | } | 27 | } |
24 | 28 | ||
25 | type TaskLeader struct { | 29 | type TaskLeader struct { |
@@ -15,12 +15,12 @@ type TaskStage struct { | @@ -15,12 +15,12 @@ type TaskStage struct { | ||
15 | TaskId int `json:"taskId"` | 15 | TaskId int `json:"taskId"` |
16 | CreatedAt time.Time `json:"createdAt"` | 16 | CreatedAt time.Time `json:"createdAt"` |
17 | UpdatedAt time.Time `json:"updatedAt"` | 17 | UpdatedAt time.Time `json:"updatedAt"` |
18 | - DeletedAt time.Time `json:"deletedAt"` | 18 | + DeletedAt *time.Time `json:"deletedAt"` |
19 | Name string `json:"name"` //里程碑名称 | 19 | Name string `json:"name"` //里程碑名称 |
20 | SortBy int `json:"sortBy"` //排序 | 20 | SortBy int `json:"sortBy"` //排序 |
21 | Status TaskStageState `json:"status"` //里程碑完成情况 | 21 | Status TaskStageState `json:"status"` //里程碑完成情况 |
22 | - PlanCompletedAt int `json:"planCompletedAt"` //计划完成时间 | ||
23 | - RealCompletedAt int `json:"realCompletedAt"` //时间完成时间 | 22 | + PlanCompletedAt int64 `json:"planCompletedAt"` //计划完成时间戳,秒 |
23 | + RealCompletedAt int64 `json:"realCompletedAt"` //时间完成时间戳,秒 | ||
24 | } | 24 | } |
25 | type TaskStageRepository interface { | 25 | type TaskStageRepository interface { |
26 | Save(param []*TaskStage) error | 26 | Save(param []*TaskStage) error |
@@ -8,15 +8,18 @@ import ( | @@ -8,15 +8,18 @@ import ( | ||
8 | 8 | ||
9 | // 任务 | 9 | // 任务 |
10 | type Task struct { | 10 | type Task struct { |
11 | - tableName struct{} `comment:"任务" pg:"task"` | ||
12 | - Id int `pg:"id,pk"` | ||
13 | - CreatedAt time.Time `pg:"created_at"` | ||
14 | - UpdatedAt time.Time `pg:"updated_at"` | ||
15 | - DeletedAt time.Time `pg:"deleted_at"` | ||
16 | - Name string `pg:"name"` // 任务名称 | ||
17 | - Leader domain.TaskLeader `pg:"leader"` // 任务负责人 | ||
18 | - Status int `pg:"status"` // 任务的状态 | ||
19 | - StageList []domain.TaskStage `pg:"stage_list"` // 里程碑 | ||
20 | - Level int `pg:"level"` // 优先级,值越小优先级越高 | ||
21 | - LevalName string `pg:"leval_name"` // 优先级名称 | 11 | + tableName struct{} `comment:"任务" pg:"task"` |
12 | + Id int `pg:"id,pk"` | ||
13 | + CreatedAt time.Time `pg:"created_at"` | ||
14 | + UpdatedAt time.Time `pg:"updated_at"` | ||
15 | + DeletedAt *time.Time `pg:"deleted_at"` | ||
16 | + Name string `pg:"name"` // 任务名称 | ||
17 | + Alias string `pg:"alias"` | ||
18 | + Leader domain.TaskLeader `pg:"leader"` // 任务负责人 | ||
19 | + Status int `pg:"status"` // 任务的状态 | ||
20 | + Level int `pg:"level"` // 优先级,值越小优先级越高 | ||
21 | + LevalName string `pg:"leval_name"` // 优先级名称 | ||
22 | + RelatedUser []int `pg:"related_user"` // | ||
23 | + RunAt int64 `pg:"run_at"` // 启动的时间 | ||
24 | + StopAt int64 `pg:"stop_at"` // 停止的时间 | ||
22 | } | 25 | } |
@@ -4,15 +4,15 @@ import "time" | @@ -4,15 +4,15 @@ import "time" | ||
4 | 4 | ||
5 | // 任务阶段 | 5 | // 任务阶段 |
6 | type TaskStage struct { | 6 | type TaskStage struct { |
7 | - tableName struct{} `comment:"任务阶段" pg:"task_stage"` | ||
8 | - Id int `pg:"id"` | ||
9 | - TaskId int `pg:"task_id"` | ||
10 | - CreatedAt time.Time `pg:"created_at"` | ||
11 | - UpdatedAt time.Time `pg:"updated_at"` | ||
12 | - DeletedAt time.Time `pg:"deleted_at"` | ||
13 | - Name string `pg:"name"` //里程碑名称 | ||
14 | - SortBy int `pg:"sort_by"` //排序 | ||
15 | - Status int `pg:"status"` //里程碑完成情况 | ||
16 | - PlanCompletedAt int `pg:"plan_completed_at"` //计划完成时间 | ||
17 | - RealCompletedAt int `pg:"real_completed_at"` //时间完成时间 | 7 | + tableName struct{} `comment:"任务阶段" pg:"task_stage"` |
8 | + Id int `pg:"id"` | ||
9 | + TaskId int `pg:"task_id"` | ||
10 | + CreatedAt time.Time `pg:"created_at"` | ||
11 | + UpdatedAt time.Time `pg:"updated_at"` | ||
12 | + DeletedAt *time.Time `pg:"deleted_at"` | ||
13 | + Name string `pg:"name"` //里程碑名称 | ||
14 | + SortBy int `pg:"sort_by"` //排序 | ||
15 | + Status int `pg:"status"` //里程碑完成情况 | ||
16 | + PlanCompletedAt int64 `pg:"plan_completed_at"` //计划完成时间 | ||
17 | + RealCompletedAt int64 `pg:"real_completed_at"` //时间完成时间 | ||
18 | } | 18 | } |
@@ -19,17 +19,25 @@ type TaskRepository struct { | @@ -19,17 +19,25 @@ type TaskRepository struct { | ||
19 | 19 | ||
20 | var _ domain.TaskRepository = (*TaskRepository)(nil) | 20 | var _ domain.TaskRepository = (*TaskRepository)(nil) |
21 | 21 | ||
22 | +func NewTaskRepository(transactionContext *pgTransaction.TransactionContext) *TaskRepository { | ||
23 | + return &TaskRepository{transactionContext: transactionContext} | ||
24 | +} | ||
25 | + | ||
22 | func (repo *TaskRepository) TransformToDomain(d *models.Task) *domain.Task { | 26 | func (repo *TaskRepository) TransformToDomain(d *models.Task) *domain.Task { |
23 | return &domain.Task{ | 27 | return &domain.Task{ |
24 | - Id: d.Id, | ||
25 | - CreatedAt: d.CreatedAt, | ||
26 | - UpdatedAt: d.UpdatedAt, | ||
27 | - DeletedAt: d.DeletedAt, | ||
28 | - Name: d.Name, | ||
29 | - Leader: d.Leader, | ||
30 | - Status: domain.TaskState(d.Status), | ||
31 | - Level: d.Level, | ||
32 | - LevalName: d.LevalName, | 28 | + Id: d.Id, |
29 | + CreatedAt: d.CreatedAt, | ||
30 | + UpdatedAt: d.UpdatedAt, | ||
31 | + DeletedAt: d.DeletedAt, | ||
32 | + Name: d.Name, | ||
33 | + Alias: d.Alias, | ||
34 | + Leader: d.Leader, | ||
35 | + Status: domain.TaskState(d.Status), | ||
36 | + Level: d.Level, | ||
37 | + LevalName: d.LevalName, | ||
38 | + RelatedUser: d.RelatedUser, | ||
39 | + RunAt: d.RunAt, | ||
40 | + StopAt: d.StopAt, | ||
33 | } | 41 | } |
34 | } | 42 | } |
35 | 43 | ||
@@ -40,15 +48,19 @@ func (repo *TaskRepository) Save(param *domain.Task) error { | @@ -40,15 +48,19 @@ func (repo *TaskRepository) Save(param *domain.Task) error { | ||
40 | return nil | 48 | return nil |
41 | } | 49 | } |
42 | m := models.Task{ | 50 | m := models.Task{ |
43 | - Id: param.Id, | ||
44 | - CreatedAt: param.CreatedAt, | ||
45 | - UpdatedAt: param.UpdatedAt, | ||
46 | - DeletedAt: param.DeletedAt, | ||
47 | - Name: param.Name, | ||
48 | - Leader: param.Leader, | ||
49 | - Status: int(param.Status), | ||
50 | - Level: param.Level, | ||
51 | - LevalName: param.LevalName, | 51 | + Id: param.Id, |
52 | + CreatedAt: param.CreatedAt, | ||
53 | + UpdatedAt: param.UpdatedAt, | ||
54 | + DeletedAt: param.DeletedAt, | ||
55 | + Name: param.Name, | ||
56 | + Alias: param.Alias, | ||
57 | + Leader: param.Leader, | ||
58 | + Status: int(param.Status), | ||
59 | + Level: param.Level, | ||
60 | + LevalName: param.LevalName, | ||
61 | + RelatedUser: param.RelatedUser, | ||
62 | + RunAt: param.RunAt, | ||
63 | + StopAt: param.StopAt, | ||
52 | } | 64 | } |
53 | db := repo.transactionContext.PgTx | 65 | db := repo.transactionContext.PgTx |
54 | if m.Id == 0 { | 66 | if m.Id == 0 { |
@@ -102,7 +114,12 @@ func (repo *TaskRepository) Find(queryOptions map[string]interface{}) (int, []*d | @@ -102,7 +114,12 @@ func (repo *TaskRepository) Find(queryOptions map[string]interface{}) (int, []*d | ||
102 | query := tx.Model(&m). | 114 | query := tx.Model(&m). |
103 | Where("deleted_at isnull"). | 115 | Where("deleted_at isnull"). |
104 | Limit(20) | 116 | Limit(20) |
105 | - | 117 | + if val, ok := queryOptions["name"]; ok { |
118 | + query.Where("task.name like ?", val) | ||
119 | + } | ||
120 | + if val, ok := queryOptions["leaderId"]; ok { | ||
121 | + query.Where("task.leader->>'userId'='?'", val) | ||
122 | + } | ||
106 | query.Order("id desc") | 123 | query.Order("id desc") |
107 | count, err := query.SelectAndCount() | 124 | count, err := query.SelectAndCount() |
108 | if err != nil { | 125 | if err != nil { |
@@ -19,6 +19,10 @@ type TaskStageRepository struct { | @@ -19,6 +19,10 @@ type TaskStageRepository struct { | ||
19 | 19 | ||
20 | var _ domain.TaskStageRepository = (*TaskStageRepository)(nil) | 20 | var _ domain.TaskStageRepository = (*TaskStageRepository)(nil) |
21 | 21 | ||
22 | +func NewTaskStageRepository(transactionContext *pgTransaction.TransactionContext) *TaskStageRepository { | ||
23 | + return &TaskStageRepository{transactionContext: transactionContext} | ||
24 | +} | ||
25 | + | ||
22 | func (repo *TaskStageRepository) TransformToDomain(d *models.TaskStage) *domain.TaskStage { | 26 | func (repo *TaskStageRepository) TransformToDomain(d *models.TaskStage) *domain.TaskStage { |
23 | return &domain.TaskStage{ | 27 | return &domain.TaskStage{ |
24 | Id: d.Id, | 28 | Id: d.Id, |
@@ -102,8 +106,10 @@ func (repo *TaskStageRepository) Find(queryOptions map[string]interface{}) (int, | @@ -102,8 +106,10 @@ func (repo *TaskStageRepository) Find(queryOptions map[string]interface{}) (int, | ||
102 | query := tx.Model(&m). | 106 | query := tx.Model(&m). |
103 | Where("deleted_at isnull"). | 107 | Where("deleted_at isnull"). |
104 | Limit(20) | 108 | Limit(20) |
105 | - | ||
106 | - query.Order("id desc") | 109 | + if val, ok := queryOptions["taskId"]; ok { |
110 | + query.Where("task_stage.task_id = ?", val) | ||
111 | + } | ||
112 | + query.Order("sort_by") | ||
107 | count, err := query.SelectAndCount() | 113 | count, err := query.SelectAndCount() |
108 | if err != nil { | 114 | if err != nil { |
109 | return 0, nil, err | 115 | return 0, nil, err |
-
请 注册 或 登录 后发表评论