作者 tangxvhui

暂存

@@ -655,7 +655,7 @@ func (rs *EvaluationProjectService) Activate(in *command.ActivateProjectCommand) @@ -655,7 +655,7 @@ func (rs *EvaluationProjectService) Activate(in *command.ActivateProjectCommand)
655 if principalId == 0 { 655 if principalId == 0 {
656 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "请选择任务负责人") 656 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "请选择任务负责人")
657 } 657 }
658 - err := projectTaskService.CreateTask(transactionContext, &taskCommand.CreateTaskCommand{ 658 + err := projectTaskService.CreateTaskByProject(transactionContext, &taskCommand.CreateTaskByProjectCommand{
659 Name: content.Name, 659 Name: content.Name,
660 LeaderId: principalId, 660 LeaderId: principalId,
661 }) 661 })
1 package command 1 package command
2 2
3 -type CreateTaskCommand struct { 3 +type CreateTaskByProjectCommand struct {
4 Name string `json:"name"` //任务名称 4 Name string `json:"name"` //任务名称
5 LeaderId int `json:"leaderId,string"` //赋值人id 5 LeaderId int `json:"leaderId,string"` //赋值人id
6 } 6 }
  7 +
  8 +type CreateTaskCommand struct {
  9 + CompanyId int `json:"-"`
  10 + LeaderId int `json:"leaderId,string"`
  11 + Alias string `json:"alias"` //任务名称
  12 + LevelName string `json:"levelName"` //优先级
  13 + RelatedUserId []string `json:"relatedUserId"` //相关人员id
  14 + SortBy int `json:"sortBy"` // 优先级排序;值越小优先级越高
  15 + EndTime int64 `json:"endTime"` // 任务截止的时间戳,单位:秒;等于0时表示未设置时间
  16 +}
1 package service 1 package service
2 2
3 import ( 3 import (
4 - "encoding/json"  
5 "fmt" 4 "fmt"
6 "strconv" 5 "strconv"
7 "strings" 6 "strings"
@@ -36,28 +35,29 @@ func dayEndTime(t time.Time) time.Time { @@ -36,28 +35,29 @@ func dayEndTime(t time.Time) time.Time {
36 // return t2 35 // return t2
37 // } 36 // }
38 37
39 -func (srv TaskService) CreateTaskTest(param *command.CreateTaskCommand) error {  
40 - transactionContext, err := factory.CreateTransactionContext(nil)  
41 - if err != nil {  
42 - return application.ThrowError(application.TRANSACTION_ERROR, err.Error())  
43 - }  
44 - if err := transactionContext.StartTransaction(); err != nil {  
45 - return application.ThrowError(application.TRANSACTION_ERROR, err.Error())  
46 - }  
47 - defer func() {  
48 - _ = transactionContext.RollbackTransaction()  
49 - }()  
50 - err = srv.CreateTask(transactionContext, param)  
51 - if err != nil {  
52 - return application.ThrowError(application.INTERNAL_SERVER_ERROR, "创建任务失败:"+err.Error())  
53 - }  
54 - if err := transactionContext.CommitTransaction(); err != nil {  
55 - return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
56 - }  
57 - return nil  
58 -} 38 +// func (srv TaskService) CreateTaskTest(param *command.CreateTaskCommand) error {
  39 +// transactionContext, err := factory.CreateTransactionContext(nil)
  40 +// if err != nil {
  41 +// return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  42 +// }
  43 +// if err := transactionContext.StartTransaction(); err != nil {
  44 +// return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  45 +// }
  46 +// defer func() {
  47 +// _ = transactionContext.RollbackTransaction()
  48 +// }()
  49 +// err = srv.CreateTask(transactionContext, param)
  50 +// if err != nil {
  51 +// return application.ThrowError(application.INTERNAL_SERVER_ERROR, "创建任务失败:"+err.Error())
  52 +// }
  53 +// if err := transactionContext.CommitTransaction(); err != nil {
  54 +// return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  55 +// }
  56 +// return nil
  57 +// }
59 58
60 -func (srv TaskService) CreateTask(transactionContext application.TransactionContext, param *command.CreateTaskCommand) error { 59 +// CreateTask 重评估模板中创建
  60 +func (srv TaskService) CreateTaskByProject(transactionContext application.TransactionContext, param *command.CreateTaskByProjectCommand) error {
61 taskRepo := factory.CreateTaskRepository(map[string]interface{}{ 61 taskRepo := factory.CreateTaskRepository(map[string]interface{}{
62 "transactionContext": transactionContext, 62 "transactionContext": transactionContext,
63 }) 63 })
@@ -67,6 +67,7 @@ func (srv TaskService) CreateTask(transactionContext application.TransactionCont @@ -67,6 +67,7 @@ func (srv TaskService) CreateTask(transactionContext application.TransactionCont
67 cnt, _, err := taskRepo.Find(map[string]interface{}{ 67 cnt, _, err := taskRepo.Find(map[string]interface{}{
68 "name": param.Name, 68 "name": param.Name,
69 "leaderId": strconv.Itoa(param.LeaderId), 69 "leaderId": strconv.Itoa(param.LeaderId),
  70 + "createdBy": 0,
70 "limit": 1, 71 "limit": 1,
71 }) 72 })
72 if err != nil { 73 if err != nil {
@@ -112,6 +113,7 @@ func (srv TaskService) CreateTask(transactionContext application.TransactionCont @@ -112,6 +113,7 @@ func (srv TaskService) CreateTask(transactionContext application.TransactionCont
112 RunAt: nowTime.Unix(), 113 RunAt: nowTime.Unix(),
113 StopAt: 0, 114 StopAt: 0,
114 SortBy: domain.TaskSortNull, 115 SortBy: domain.TaskSortNull,
  116 + CreatedBy: 0,
115 } 117 }
116 if int(leaderData.ParentId) != 0 { 118 if int(leaderData.ParentId) != 0 {
117 newTask.RelatedUser = append(newTask.RelatedUser, int(leaderData.ParentId)) 119 newTask.RelatedUser = append(newTask.RelatedUser, int(leaderData.ParentId))
@@ -160,6 +162,109 @@ func (srv TaskService) CreateTask(transactionContext application.TransactionCont @@ -160,6 +162,109 @@ func (srv TaskService) CreateTask(transactionContext application.TransactionCont
160 return nil 162 return nil
161 } 163 }
162 164
  165 +// 创建任务
  166 +func (srv TaskService) CreateTask(param *command.CreateTaskCommand) (map[string]interface{}, error) {
  167 + transactionContext, err := factory.CreateTransactionContext(nil)
  168 + if err != nil {
  169 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  170 + }
  171 + if err := transactionContext.StartTransaction(); err != nil {
  172 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  173 + }
  174 + defer func() {
  175 + _ = transactionContext.RollbackTransaction()
  176 + }()
  177 + taskRepo := factory.CreateTaskRepository(map[string]interface{}{
  178 + "transactionContext": transactionContext,
  179 + })
  180 + cnt, _, err := taskRepo.Find(map[string]interface{}{
  181 + "name": param.Alias,
  182 + "leaderId": strconv.Itoa(param.LeaderId),
  183 + "createdBy": 1,
  184 + "limit": 1,
  185 + })
  186 + if err != nil {
  187 + return map[string]interface{}{}, application.ThrowError(application.INTERNAL_SERVER_ERROR, "创建任务失败:"+err.Error())
  188 + }
  189 + if cnt > 0 {
  190 + return map[string]interface{}{}, application.ThrowError(application.BUSINESS_ERROR, "已经存在相同的任务")
  191 + }
  192 + userRepo := factory.CreateUserRepository(map[string]interface{}{
  193 + "transactionContext": transactionContext,
  194 + })
  195 +
  196 + _, leaderList, err := userRepo.Find(map[string]interface{}{
  197 + "id": param.LeaderId,
  198 + "companyId": param.CompanyId,
  199 + })
  200 + if err != nil {
  201 + return map[string]interface{}{}, application.ThrowError(application.INTERNAL_SERVER_ERROR, "查询人员失败:"+err.Error())
  202 + }
  203 + if len(leaderList) == 0 {
  204 + return map[string]interface{}{}, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有查询到人员")
  205 + }
  206 + relatedUserIds := []int{}
  207 + for _, val := range param.RelatedUserId {
  208 + id, _ := strconv.Atoi(val)
  209 + relatedUserIds = append(relatedUserIds, id)
  210 + }
  211 + var relatedUser []*domain.User
  212 + if len(relatedUserIds) > 0 {
  213 + _, relatedUser, err = userRepo.Find(map[string]interface{}{
  214 + "ids": relatedUserIds,
  215 + "companyId": param.CompanyId,
  216 + })
  217 + if err != nil {
  218 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取任务的相关人员"+err.Error())
  219 + }
  220 + }
  221 + leaderData := leaderList[0]
  222 + nowTime := time.Now()
  223 + newTask := domain.Task{
  224 + Id: 0,
  225 + CreatedAt: time.Time{},
  226 + UpdatedAt: time.Time{},
  227 + DeletedAt: nil,
  228 + CompanyId: int(leaderData.CompanyId),
  229 + Name: param.Alias,
  230 + Alias: param.Alias,
  231 + Leader: domain.TaskLeader{
  232 + Id: leaderData.Id,
  233 + Account: leaderData.Account,
  234 + Name: leaderData.Name,
  235 + },
  236 + Status: domain.TaskRunning,
  237 + Level: 0,
  238 + LevelName: "",
  239 + RelatedUser: []int{int(leaderData.Id)},
  240 + RunAt: nowTime.Unix(),
  241 + StopAt: 0,
  242 + SortBy: domain.TaskSortBy(param.SortBy),
  243 + CreatedBy: 1,
  244 + AssistFlagMax: 0,
  245 + }
  246 + //处理endTime
  247 + if param.EndTime == 0 {
  248 + newTask.EndTime = 0
  249 + } else {
  250 + newTask.EndTime = dayEndTime(time.Unix(param.EndTime, 10)).Unix()
  251 + }
  252 + newTask.ApplyLevelName(param.LevelName)
  253 + newTask.RelatedUser = []int{}
  254 + for _, val := range relatedUser {
  255 + newTask.RelatedUser = append(newTask.RelatedUser, int(val.Id))
  256 + }
  257 +
  258 + err = taskRepo.Save(&newTask)
  259 + if err != nil {
  260 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  261 + }
  262 + if err := transactionContext.CommitTransaction(); err != nil {
  263 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  264 + }
  265 + return map[string]interface{}{"id": newTask.Id}, nil
  266 +}
  267 +
163 // 更新任务 268 // 更新任务
164 func (srv TaskService) UpdateTask(param *command.UpdateTaskCommand) (map[string]interface{}, error) { 269 func (srv TaskService) UpdateTask(param *command.UpdateTaskCommand) (map[string]interface{}, error) {
165 transactionContext, err := factory.CreateTransactionContext(nil) 270 transactionContext, err := factory.CreateTransactionContext(nil)
@@ -232,7 +337,7 @@ func (srv TaskService) UpdateTask(param *command.UpdateTaskCommand) (map[string] @@ -232,7 +337,7 @@ func (srv TaskService) UpdateTask(param *command.UpdateTaskCommand) (map[string]
232 lastPlanCompletedAt := time.Time{} 337 lastPlanCompletedAt := time.Time{}
233 newStageList := []*domain.TaskStage{} 338 newStageList := []*domain.TaskStage{}
234 //标记 变更完成时间的 里程碑 339 //标记 变更完成时间的 里程碑
235 - markStage := []domain.TaskStage{} 340 + //markStage := []domain.TaskStage{}
236 for i, val2 := range param.StageList { 341 for i, val2 := range param.StageList {
237 t, err := time.ParseInLocation("2006-01-02", val2.PlanCompletedAt, time.Local) 342 t, err := time.ParseInLocation("2006-01-02", val2.PlanCompletedAt, time.Local)
238 if err != nil { 343 if err != nil {
@@ -264,9 +369,10 @@ func (srv TaskService) UpdateTask(param *command.UpdateTaskCommand) (map[string] @@ -264,9 +369,10 @@ func (srv TaskService) UpdateTask(param *command.UpdateTaskCommand) (map[string]
264 oldStage.DeletedAt = nil 369 oldStage.DeletedAt = nil
265 oldStage.SortBy = i + 1 370 oldStage.SortBy = i + 1
266 oldStage.Name = val2.Name 371 oldStage.Name = val2.Name
267 - if ok := oldStage.SetPlanCompleted(t); ok {  
268 - markStage = append(markStage, *oldStage)  
269 - } 372 + oldStage.SetPlanCompleted(t)
  373 + //if ok := oldStage.SetPlanCompleted(t); ok {
  374 + //markStage = append(markStage, *oldStage)
  375 + // }
270 } 376 }
271 377
272 stageList = append(stageList, newStageList...) 378 stageList = append(stageList, newStageList...)
@@ -310,35 +416,35 @@ func (srv TaskService) UpdateTask(param *command.UpdateTaskCommand) (map[string] @@ -310,35 +416,35 @@ func (srv TaskService) UpdateTask(param *command.UpdateTaskCommand) (map[string]
310 if err != nil { 416 if err != nil {
311 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 417 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
312 } 418 }
313 - messageRepo := factory.CreateMessagePersonalRepository(map[string]interface{}{  
314 - "transactionContext": transactionContext,  
315 - }) 419 + // messageRepo := factory.CreateMessagePersonalRepository(map[string]interface{}{
  420 + // "transactionContext": transactionContext,
  421 + // })
316 //根据markStage 记录的里程碑数据生成通知 422 //根据markStage 记录的里程碑数据生成通知
317 - for _, val := range markStage {  
318 - for _, val2 := range taskData.RelatedUser {  
319 - t1 := time.Unix(val.PlanCompletedAt, 0).Format("2006-01-02")  
320 - s := fmt.Sprintf(`%s 负责的任务 %s 的里程碑 %s 计划完成时间变更为 %s,请知晓!`, taskData.Leader.Name, taskData.Alias, val.Name, t1)  
321 - payload := map[string]string{  
322 - "id": strconv.Itoa(val.Id),  
323 - "taskName": taskData.Name,  
324 - "taskStageName": val.Name,  
325 - }  
326 - payloadStr, _ := json.Marshal(payload)  
327 - newMessage := domain.MessagePersonal{  
328 - Id: 0,  
329 - Types: domain.MessageTypesTaskModify,  
330 - TargetUserId: val2,  
331 - ReadFlag: domain.MessageUnread,  
332 - Title: s,  
333 - Content: s,  
334 - Payload: string(payloadStr),  
335 - }  
336 - err = messageRepo.Save(&newMessage)  
337 - if err != nil {  
338 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
339 - }  
340 - }  
341 - } 423 + // for _, val := range markStage {
  424 + // for _, val2 := range taskData.RelatedUser {
  425 + // t1 := time.Unix(val.PlanCompletedAt, 0).Format("2006-01-02")
  426 + // s := fmt.Sprintf(`%s 负责的任务 %s 的里程碑 %s 计划完成时间变更为 %s,请知晓!`, taskData.Leader.Name, taskData.Alias, val.Name, t1)
  427 + // payload := map[string]string{
  428 + // "id": strconv.Itoa(val.Id),
  429 + // "taskName": taskData.Name,
  430 + // "taskStageName": val.Name,
  431 + // }
  432 + // payloadStr, _ := json.Marshal(payload)
  433 + // newMessage := domain.MessagePersonal{
  434 + // Id: 0,
  435 + // Types: domain.MessageTypesTaskModify,
  436 + // TargetUserId: val2,
  437 + // ReadFlag: domain.MessageUnread,
  438 + // Title: s,
  439 + // Content: s,
  440 + // Payload: string(payloadStr),
  441 + // }
  442 + // err = messageRepo.Save(&newMessage)
  443 + // if err != nil {
  444 + // return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  445 + // }
  446 + // }
  447 + // }
342 if err := transactionContext.CommitTransaction(); err != nil { 448 if err := transactionContext.CommitTransaction(); err != nil {
343 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 449 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
344 } 450 }
@@ -30,6 +30,7 @@ type Task struct { @@ -30,6 +30,7 @@ type Task struct {
30 SortBy int `pg:"sort_by,use_zero"` // 优先级排序;值越小优先级越高 30 SortBy int `pg:"sort_by,use_zero"` // 优先级排序;值越小优先级越高
31 EndTime int64 `pg:"end_time,use_zero"` // 任务截止的时间戳,单位:秒;等于0时表示未设置时间 31 EndTime int64 `pg:"end_time,use_zero"` // 任务截止的时间戳,单位:秒;等于0时表示未设置时间
32 UseEndTime int `pg:"use_end_time,use_zero"` // 是否应用任务截止的时间;默认值0:不应用,1:应用 32 UseEndTime int `pg:"use_end_time,use_zero"` // 是否应用任务截止的时间;默认值0:不应用,1:应用
33 - AssistFlag int `pg:"assist_flag"` // 辅导异常标记  
34 - AssistFlagMax int `pg:"assist_flag_max"` // 辅导异常标记最大值 33 + AssistFlag int `pg:"assist_flag,use_zero"` // 辅导异常标记
  34 + AssistFlagMax int `pg:"assist_flag_max,use_zero"` // 辅导异常标记最大值
  35 + CreatedBy int `pg:"created_by,use_zero"`
35 } 36 }
@@ -49,6 +49,7 @@ func (repo *TaskRepository) TransformToDomain(d *models.Task) *domain.Task { @@ -49,6 +49,7 @@ func (repo *TaskRepository) TransformToDomain(d *models.Task) *domain.Task {
49 AssistFlagMax: d.AssistFlagMax, 49 AssistFlagMax: d.AssistFlagMax,
50 CurrentStage: d.CurrentStage, 50 CurrentStage: d.CurrentStage,
51 LastStage: d.LastStage, 51 LastStage: d.LastStage,
  52 + CreatedBy: d.CreatedBy,
52 } 53 }
53 } 54 }
54 55
@@ -81,6 +82,7 @@ func (repo *TaskRepository) Save(param *domain.Task) error { @@ -81,6 +82,7 @@ func (repo *TaskRepository) Save(param *domain.Task) error {
81 UseEndTime: param.UseEndTime, 82 UseEndTime: param.UseEndTime,
82 AssistFlag: param.AssistFlag, 83 AssistFlag: param.AssistFlag,
83 AssistFlagMax: param.AssistFlagMax, 84 AssistFlagMax: param.AssistFlagMax,
  85 + CreatedBy: param.CreatedBy,
84 } 86 }
85 db := repo.transactionContext.PgTx 87 db := repo.transactionContext.PgTx
86 if m.Id == 0 { 88 if m.Id == 0 {
@@ -152,6 +154,9 @@ func (repo *TaskRepository) Find(queryOptions map[string]interface{}) (int, []*d @@ -152,6 +154,9 @@ func (repo *TaskRepository) Find(queryOptions map[string]interface{}) (int, []*d
152 if val, ok := queryOptions["status"]; ok { 154 if val, ok := queryOptions["status"]; ok {
153 query.Where("task.status=?", val) 155 query.Where("task.status=?", val)
154 } 156 }
  157 + if val, ok := queryOptions["createdBy"]; ok {
  158 + query.Where("created_by = ?", val)
  159 + }
155 if val, ok := queryOptions["limit"]; ok { 160 if val, ok := queryOptions["limit"]; ok {
156 if limit, err := strconv.Atoi(fmt.Sprintf("%v", val)); err == nil { 161 if limit, err := strconv.Atoi(fmt.Sprintf("%v", val)); err == nil {
157 query.Limit(limit) 162 query.Limit(limit)
@@ -56,8 +56,8 @@ func (c *TaskController) CreateTask() { @@ -56,8 +56,8 @@ func (c *TaskController) CreateTask() {
56 return 56 return
57 } 57 }
58 58
59 - err = srv.CreateTaskTest(paramReq)  
60 - c.Response(nil, err) 59 + resp, err := srv.CreateTask(paramReq)
  60 + c.Response(resp, err)
61 } 61 }
62 62
63 // 启动任务 63 // 启动任务
@@ -12,6 +12,7 @@ func init() { @@ -12,6 +12,7 @@ func init() {
12 taskAdminNS := web.NewNamespace("/v1/admin/task", 12 taskAdminNS := web.NewNamespace("/v1/admin/task",
13 web.NSBefore(filters.AllowCors(), middlewares.CheckAdminToken()), 13 web.NSBefore(filters.AllowCors(), middlewares.CheckAdminToken()),
14 web.NSCtrlPost("/info", (*controllers.TaskController).GetTaskInfo), 14 web.NSCtrlPost("/info", (*controllers.TaskController).GetTaskInfo),
  15 + web.NSCtrlPost("/", (*controllers.TaskController).CreateTask),
15 web.NSCtrlPut("/", (*controllers.TaskController).UpdateTask), 16 web.NSCtrlPut("/", (*controllers.TaskController).UpdateTask),
16 web.NSCtrlPut("/delete", (*controllers.TaskController).DeleteTask), 17 web.NSCtrlPut("/delete", (*controllers.TaskController).DeleteTask),
17 web.NSCtrlPost("/run", (*controllers.TaskController).RunTask), 18 web.NSCtrlPost("/run", (*controllers.TaskController).RunTask),