正在显示
4 个修改的文件
包含
101 行增加
和
5 行删除
@@ -463,6 +463,21 @@ func (taskService *TaskService) CreateTask(createTaskCommand *command.CreateTask | @@ -463,6 +463,21 @@ func (taskService *TaskService) CreateTask(createTaskCommand *command.CreateTask | ||
463 | } else { | 463 | } else { |
464 | taskRepository = value | 464 | taskRepository = value |
465 | } | 465 | } |
466 | + if createTaskCommand.ReferenceResourceItems != nil && len(createTaskCommand.ReferenceResourceItems) > 0 { | ||
467 | + var referenceResourceIds []int64 | ||
468 | + for _, referenceResourceItem := range createTaskCommand.ReferenceResourceItems { | ||
469 | + referenceResourceIds = append(referenceResourceIds, referenceResourceItem.ReferenceResourceId) | ||
470 | + } | ||
471 | + queryOptions := make(map[string]interface{}) | ||
472 | + queryOptions["referenceResourceIds"] = referenceResourceIds | ||
473 | + if count, _, err := taskRepository.Find(queryOptions); err != nil { | ||
474 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
475 | + } else { | ||
476 | + if count > 0 { | ||
477 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "问题资源已经被引用,创建任务失败") | ||
478 | + } | ||
479 | + } | ||
480 | + } | ||
466 | if task, err := taskRepository.Save(newTask); err != nil { | 481 | if task, err := taskRepository.Save(newTask); err != nil { |
467 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 482 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
468 | } else { | 483 | } else { |
@@ -553,6 +568,26 @@ func (taskService *TaskService) UpdateTask(updateTaskCommand *command.UpdateTask | @@ -553,6 +568,26 @@ func (taskService *TaskService) UpdateTask(updateTaskCommand *command.UpdateTask | ||
553 | if task == nil { | 568 | if task == nil { |
554 | return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(updateTaskCommand.TaskId))) | 569 | return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(updateTaskCommand.TaskId))) |
555 | } | 570 | } |
571 | + if updateTaskCommand.ReferenceResourceItems != nil && len(updateTaskCommand.ReferenceResourceItems) > 0 { | ||
572 | + var referenceResourceIds []int64 | ||
573 | + for _, referenceResourceItem := range updateTaskCommand.ReferenceResourceItems { | ||
574 | + referenceResourceIds = append(referenceResourceIds, referenceResourceItem.ReferenceResourceId) | ||
575 | + } | ||
576 | + queryOptions := make(map[string]interface{}) | ||
577 | + queryOptions["referenceResourceIds"] = referenceResourceIds | ||
578 | + if count, tasks, err := taskRepository.Find(queryOptions); err != nil { | ||
579 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
580 | + } else { | ||
581 | + if count > 1 { | ||
582 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "问题资源已经被引用,创建任务失败") | ||
583 | + } | ||
584 | + if count == 1 { | ||
585 | + if tasks[0].TaskId != task.TaskId { | ||
586 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "问题资源已经被引用,创建任务失败") | ||
587 | + } | ||
588 | + } | ||
589 | + } | ||
590 | + } | ||
556 | if err := task.Update(tool_funs.SimpleStructToMap(updateTaskCommand)); err != nil { | 591 | if err := task.Update(tool_funs.SimpleStructToMap(updateTaskCommand)); err != nil { |
557 | return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) | 592 | return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) |
558 | } | 593 | } |
@@ -165,7 +165,7 @@ func (dao *TaskDao) CalculatePersonTask(uid int64) (*domain.PersonTaskStatistics | @@ -165,7 +165,7 @@ func (dao *TaskDao) CalculatePersonTask(uid int64) (*domain.PersonTaskStatistics | ||
165 | personTaskStatistics.CompletedAsSponsor = int64(count) | 165 | personTaskStatistics.CompletedAsSponsor = int64(count) |
166 | } | 166 | } |
167 | if count, err := tx.Model(taskModel).Join("JOIN bidder_infos AS bidder_info ON bidder_info.task_id = task.id"). | 167 | if count, err := tx.Model(taskModel).Join("JOIN bidder_infos AS bidder_info ON bidder_info.task_id = task.id"). |
168 | - Where(`bidder_info.Bidder @> '{"uid":?}'`, uid). | 168 | + Where(`bidder_info.bidder @> '{"uid":?}'`, uid). |
169 | Where("task.task_status = ? ", domain.TASK_STATUS_UNCLAIMED). | 169 | Where("task.task_status = ? ", domain.TASK_STATUS_UNCLAIMED). |
170 | Count(); err != nil { | 170 | Count(); err != nil { |
171 | return nil, err | 171 | return nil, err |
@@ -146,7 +146,7 @@ func (repository *TaskRepository) Find(queryOptions map[string]interface{}) (int | @@ -146,7 +146,7 @@ func (repository *TaskRepository) Find(queryOptions map[string]interface{}) (int | ||
146 | } | 146 | } |
147 | if bidder, ok := queryOptions["bidder"]; ok && (bidder != int64(0)) { | 147 | if bidder, ok := queryOptions["bidder"]; ok && (bidder != int64(0)) { |
148 | query = query.Join("JOIN bidder_infos AS bidder_info ON bidder_info.task_id = task.id") | 148 | query = query.Join("JOIN bidder_infos AS bidder_info ON bidder_info.task_id = task.id") |
149 | - query = query.Where(`bidder_info.Bidder @> '{"uid":?}'`, bidder) | 149 | + query = query.Where(`bidder_info.bidder @> '{"uid":?}'`, bidder) |
150 | } | 150 | } |
151 | if receiver, ok := queryOptions["receiver"]; ok && (receiver != int64(0)) { | 151 | if receiver, ok := queryOptions["receiver"]; ok && (receiver != int64(0)) { |
152 | query = query.Where(`task.receiver_uid = ?`, receiver) | 152 | query = query.Where(`task.receiver_uid = ?`, receiver) |
@@ -166,6 +166,14 @@ func (repository *TaskRepository) Find(queryOptions map[string]interface{}) (int | @@ -166,6 +166,14 @@ func (repository *TaskRepository) Find(queryOptions map[string]interface{}) (int | ||
166 | query = query.Where("off_task_record.create_time < ?", offEndTime) | 166 | query = query.Where("off_task_record.create_time < ?", offEndTime) |
167 | } | 167 | } |
168 | } | 168 | } |
169 | + if referenceResourceIds, ok := queryOptions["referenceResourceIds"]; ok && len(referenceResourceIds.([]int64)) != 0 { | ||
170 | + query = query.WhereGroup(func(q *orm.Query) (*orm.Query, error) { | ||
171 | + for _, value := range referenceResourceIds.([]int64) { | ||
172 | + q = q.WhereOr(`task.reference_resource @> '{"referenceResourceItems":[{"referenceResourceId":?}]}'`, value) | ||
173 | + } | ||
174 | + return q, nil | ||
175 | + }) | ||
176 | + } | ||
169 | if offset, ok := queryOptions["offset"]; ok { | 177 | if offset, ok := queryOptions["offset"]; ok { |
170 | offset := offset.(int) | 178 | offset := offset.(int) |
171 | if offset > -1 { | 179 | if offset > -1 { |
@@ -2,6 +2,7 @@ package task | @@ -2,6 +2,7 @@ package task | ||
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | "github.com/go-pg/pg" | 4 | "github.com/go-pg/pg" |
5 | + "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/domain" | ||
5 | "net/http" | 6 | "net/http" |
6 | "time" | 7 | "time" |
7 | 8 | ||
@@ -18,6 +19,20 @@ var _ = Describe("创建新任务", func() { | @@ -18,6 +19,20 @@ var _ = Describe("创建新任务", func() { | ||
18 | "INSERT INTO employees (id, uid, employee_name, employee_account, su_money) VALUES (?, ?, ?, ?, ?)", | 19 | "INSERT INTO employees (id, uid, employee_name, employee_account, su_money) VALUES (?, ?, ?, ?, ?)", |
19 | 1, 2499036607974745088, "testEmployeeName", "testEmployeeAccount", 0) | 20 | 1, 2499036607974745088, "testEmployeeName", "testEmployeeAccount", 0) |
20 | Expect(err).NotTo(HaveOccurred()) | 21 | Expect(err).NotTo(HaveOccurred()) |
22 | + _, err1 := pG.DB.QueryOne( | ||
23 | + pg.Scan(), | ||
24 | + "INSERT INTO tasks (id, company_id, task_name, task_type, sponsor, task_status, reference_resource, customer_value, task_nature, su_money, acceptance_standard, task_description, task_picture_urls, is_reward_take, participators, task_percentage, solve_report, solve_picture_urls, create_time, release_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", | ||
25 | + 2, 101, "抢单任务2", 1, &domain.EmployeeInfo{ | ||
26 | + Uid: 2499036607974745088, | ||
27 | + }, 1, &domain.ReferenceResource{ | ||
28 | + ReferenceResourceType: 1, | ||
29 | + ReferenceResourceItems: []*domain.ReferenceResourceItem{ | ||
30 | + { | ||
31 | + ReferenceResourceId: 4, | ||
32 | + }, | ||
33 | + }, | ||
34 | + }, pg.Array([]string{"口感", "售后服务"}), "面", 1000.00, "验收标准1", "任务描述1", pg.Array([]string{}), false, "null", "null", "", pg.Array([]string{}), time.Now(), time.Now()) | ||
35 | + Expect(err1).NotTo(HaveOccurred()) | ||
21 | }) | 36 | }) |
22 | Describe("提交数据创建新任务", func() { | 37 | Describe("提交数据创建新任务", func() { |
23 | Context("提交正确的抢单类型任务数据", func() { | 38 | Context("提交正确的抢单类型任务数据", func() { |
@@ -30,9 +45,9 @@ var _ = Describe("创建新任务", func() { | @@ -30,9 +45,9 @@ var _ = Describe("创建新任务", func() { | ||
30 | "sponsor": 2499036607974745088, | 45 | "sponsor": 2499036607974745088, |
31 | "referenceResourceType": 1, | 46 | "referenceResourceType": 1, |
32 | "referenceResourceItems": []map[string]interface{}{ | 47 | "referenceResourceItems": []map[string]interface{}{ |
33 | - {"serialNumber": 1, "title": "问题标题1"}, | ||
34 | - {"serialNumber": 2, "title": "问题标题2"}, | ||
35 | - {"serialNumber": 3, "title": "问题标题3"}, | 48 | + {"referenceResourceId": 1, "serialNumber": 1, "title": "问题标题1"}, |
49 | + {"referenceResourceId": 2, "serialNumber": 2, "title": "问题标题2"}, | ||
50 | + {"referenceResourceId": 3, "serialNumber": 3, "title": "问题标题3"}, | ||
36 | }, | 51 | }, |
37 | "customerValue": []string{ | 52 | "customerValue": []string{ |
38 | "口味", | 53 | "口味", |
@@ -107,6 +122,44 @@ var _ = Describe("创建新任务", func() { | @@ -107,6 +122,44 @@ var _ = Describe("创建新任务", func() { | ||
107 | ContainsKey("taskId").ValueNotEqual("taskId", BeZero()) | 122 | ContainsKey("taskId").ValueNotEqual("taskId", BeZero()) |
108 | }) | 123 | }) |
109 | }) | 124 | }) |
125 | + Context("提交已经被引用的问题ID任务数据", func() { | ||
126 | + It("创建失败", func() { | ||
127 | + httpExpect := httpexpect.New(GinkgoT(), server.URL) | ||
128 | + body := map[string]interface{}{ | ||
129 | + "companyId": 101, | ||
130 | + "taskName": "抢单任务", | ||
131 | + "taskType": 1, | ||
132 | + "sponsor": 2499036607974745088, | ||
133 | + "referenceResourceType": 1, | ||
134 | + "referenceResourceItems": []map[string]interface{}{ | ||
135 | + {"referenceResourceId": 4, "serialNumber": 4, "title": "问题标题4"}, | ||
136 | + }, | ||
137 | + "customerValue": []string{ | ||
138 | + "口味", | ||
139 | + "色泽", | ||
140 | + "商务服务", | ||
141 | + }, | ||
142 | + "taskNature": "线", | ||
143 | + "suMoney": 1000.00, | ||
144 | + "acceptanceStandard": "验收标准", | ||
145 | + "taskDescription": "任务描述", | ||
146 | + "taskPictureUrls": []string{ | ||
147 | + "url-1", | ||
148 | + "url-2", | ||
149 | + "url-3", | ||
150 | + }, | ||
151 | + "isRewardTake": false, | ||
152 | + } | ||
153 | + httpExpect.POST("/tasks/"). | ||
154 | + WithJSON(body). | ||
155 | + Expect(). | ||
156 | + Status(http.StatusOK). | ||
157 | + JSON(). | ||
158 | + Object(). | ||
159 | + ContainsKey("code").ValueEqual("code", 501). | ||
160 | + ContainsKey("msg").ValueEqual("msg", "内部服务出错:问题资源已经被引用,创建任务失败") | ||
161 | + }) | ||
162 | + }) | ||
110 | }) | 163 | }) |
111 | AfterEach(func() { | 164 | AfterEach(func() { |
112 | _, err := pG.DB.Exec("DELETE FROM tasks WHERE true") | 165 | _, err := pG.DB.Exec("DELETE FROM tasks WHERE true") |
-
请 注册 或 登录 后发表评论