作者 linmadan

完成部分任务搜索功能

package command
import (
"fmt"
"github.com/astaxie/beego/validation"
)
type SearchTaskCommand struct {
// 公司ID
CompanyId int64 `json:"companyId" valid:"Required"`
// 任务发起者
Sponsor int64 `json:"sponsor,omitempty"`
// 任务内容匹配
TaskContentMatch string `json:"taskContentMatch,omitempty"`
// 任务类型
TaskType int `json:"taskType,omitempty"`
// 任务状态
TaskStatus int `json:"taskStatus,omitempty"`
// 客户价值
CustomerValue string `json:"customerValue,omitempty"`
// 任务性质
TaskNature string `json:"taskNature,omitempty"`
// 是否悬赏任务
IsRewardTake bool `json:"isRewardTake,omitempty"`
// 竞标时间(1全部,2已截止,3未截止)
BidTimeMatch int `json:"bidTimeMatch,omitempty"`
// 任务领取人
Receiver int64 `json:"receiver,omitempty"`
// 任务参与者
Participator int64 `json:"participator,omitempty"`
// 查询偏离量
Offset int `json:"offset,omitempty"`
// 查询限制
Limit int `json:"limit,omitempty"`
}
func (searchTaskCommand *SearchTaskCommand) ValidateCommand() error {
valid := validation.Validation{}
b, err := valid.Valid(searchTaskCommand)
if err != nil {
return err
}
if !b {
for _, validErr := range valid.Errors {
return fmt.Errorf("%s %s", validErr.Key, validErr.Message)
}
}
return nil
}
... ...
... ... @@ -161,6 +161,27 @@ func (taskService *TaskService) AcceptanceTask(acceptanceTaskCommand *command.Ac
return nil, nil
}
// 搜索任务
func (taskService *TaskService) SearchTask(searchTaskCommand *command.SearchTaskCommand) (interface{}, error) {
if err := searchTaskCommand.ValidateCommand(); err != nil {
return nil, application.ThrowError(application.ARG_ERROR, err.Error())
}
transactionContext, err := factory.CreateTransactionContext(nil)
if err != nil {
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
}
if err := transactionContext.StartTransaction(); err != nil {
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
}
defer func() {
transactionContext.RollbackTransaction()
}()
if err := transactionContext.CommitTransaction(); err != nil {
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
}
return nil, nil
}
// 创建新任务
func (taskService *TaskService) CreateTask(createTaskCommand *command.CreateTaskCommand) (interface{}, error) {
if err := createTaskCommand.ValidateCommand(); err != nil {
... ...
... ... @@ -36,7 +36,7 @@ func (repository *TaskRepository) Save(task *domain.Task) (*domain.Task, error)
}
} else {
if _, err := tx.QueryOne(
pg.Scan(&task.TaskId, &task.CompanyId, &task.TaskName, &task.TaskType, &task.Sponsor, &task.TaskStatus, &task.ReferenceResource, pg.Array(&task.CustomerValue), &task.TaskNature, &task.SuMoney, &task.AcceptanceStandard, &task.TaskDescription, pg.Array(&task.TaskPictureUrls), &task.IsRewardTake, &task.CreateTime, &task.ReleaseTime,&task.Participators, &task.TaskPercentage, &task.SolveReport, pg.Array(&task.SolvePictureUrls)),
pg.Scan(&task.TaskId, &task.CompanyId, &task.TaskName, &task.TaskType, &task.Sponsor, &task.TaskStatus, &task.ReferenceResource, pg.Array(&task.CustomerValue), &task.TaskNature, &task.SuMoney, &task.AcceptanceStandard, &task.TaskDescription, pg.Array(&task.TaskPictureUrls), &task.IsRewardTake, &task.CreateTime, &task.ReleaseTime, &task.Participators, &task.TaskPercentage, &task.SolveReport, pg.Array(&task.SolvePictureUrls)),
"UPDATE tasks SET 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=?, create_time=?, release_time=?, participators=?, task_percentage=?, solve_report=?, solve_picture_urls=? WHERE id=? RETURNING 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, create_time, release_time, participators, task_percentage, solve_report, solve_picture_urls",
task.CompanyId, task.TaskName, task.TaskType, task.Sponsor, task.TaskStatus, task.ReferenceResource, pg.Array(task.CustomerValue), task.TaskNature, task.SuMoney, task.AcceptanceStandard, task.TaskDescription, pg.Array(task.TaskPictureUrls), task.IsRewardTake, task.CreateTime, task.ReleaseTime, task.Participators, task.TaskPercentage, task.SolveReport, pg.Array(task.SolvePictureUrls), task.Identify()); err != nil {
return task, err
... ... @@ -59,83 +59,33 @@ func (repository *TaskRepository) FindOne(queryOptions map[string]interface{}) (
query := tx.Model(taskModel).Relation("RobInfo").Relation("BidInfo")
if taskId, ok := queryOptions["taskId"]; ok {
query = query.Where("task.id = ?", taskId)
}
if err := query.Limit(1).Select(); err != nil {
if err := query.First(); err != nil {
return nil, err
}
if taskModel.Id == 0 {
return nil, nil
} else {
//robInfo := &domain.RobInfo{
// Receiver: taskModel.RobInfo.Receiver,
// ReceiveTime: taskModel.RobInfo.ReceiveTime,
//}
//bidderInfos := make([]*domain.BidderInfo, len(taskModel.BidInfo.BidderInfos))
//for _, bidderInfo := range taskModel.BidInfo.BidderInfos {
// bidderInfos = append(bidderInfos, &domain.BidderInfo{
// Bidder: bidderInfo.Bidder,
// BidTime: bidderInfo.BidTime,
// })
//}
//bidInfo := &domain.BidInfo{
// BidderInfos: bidderInfos,
// BidStartTime: taskModel.BidInfo.BidStartTime,
// BidEndTime: taskModel.BidInfo.BidEndTime,
// SuccessfulBidder: taskModel.BidInfo.SuccessfulBidder,
// WinBidTime: taskModel.BidInfo.WinBidTime,
//}
var currentStatus domain.TaskStatus
switch taskModel.TaskStatus {
case domain.TASK_STATUS_UNRELEASED:
currentStatus = &domain.UnReleasedStatus{}
break
case domain.TASK_STATUS_UNCLAIMED:
currentStatus = &domain.UnClaimedStatus{}
break
case domain.TASK_STATUS_UNDERWAY:
currentStatus = &domain.UnderwayStatus{}
break
case domain.TASK_STATUS_UNACCEPTANCE:
currentStatus = &domain.UnAcceptanceStatus{}
break
case domain.TASK_STATUS_COMPLETED:
currentStatus = &domain.CompletedStatus{}
break
case domain.TASK_STATUS_CLOSED:
currentStatus = &domain.ClosedStatus{}
break
if taskModel.BidInfo != nil {
var bidderInfoModels []*models.BidderInfo
bidderInfoQuery := tx.Model(&bidderInfoModels)
if err := bidderInfoQuery.Where("bid_info_id = ?", taskModel.BidInfo.Id).Select(); err != nil {
return nil, err
}
taskModel.BidInfo.BidderInfos = bidderInfoModels
}
return &domain.Task{
TaskId: taskModel.Id,
CompanyId: taskModel.CompanyId,
TaskName: taskModel.TaskName,
TaskType: taskModel.TaskType,
Sponsor: taskModel.Sponsor,
TaskStatus: taskModel.TaskStatus,
ReferenceResource: taskModel.ReferenceResource,
CustomerValue: taskModel.CustomerValue,
TaskNature: taskModel.TaskNature,
SuMoney: taskModel.SuMoney,
AcceptanceStandard: taskModel.AcceptanceStandard,
TaskDescription: taskModel.TaskDescription,
TaskPictureUrls: taskModel.TaskPictureUrls,
IsRewardTake: taskModel.IsRewardTake,
CreateTime: taskModel.CreateTime,
//RobInfo: robInfo,
//BidInfo: bidInfo,
Participators: taskModel.Participators,
TaskPercentage: taskModel.TaskPercentage,
SolveReport: taskModel.SolveReport,
SolvePictureUrls: taskModel.SolvePictureUrls,
CurrentStatus: currentStatus,
}, nil
return repository.transformPgModelToDomainModel(taskModel)
}
}
func (repository *TaskRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.Task, error) {
tx := repository.transactionContext.PgTx
var taskModels []*models.Task
var tasks []*domain.Task
tasks := make([]*domain.Task, 0)
query := tx.Model(&taskModels).Relation("RobInfo").Relation("BidInfo")
if companyId, ok := queryOptions["companyId"]; ok {
query = query.Where("task.company_id = ?", companyId)
}
if offset, ok := queryOptions["offset"]; ok {
offset := offset.(int)
if offset > -1 {
... ... @@ -153,76 +103,103 @@ func (repository *TaskRepository) Find(queryOptions map[string]interface{}) (int
query = query.Limit(20)
}
if count, err := query.Order("id DESC").SelectAndCount(); err != nil {
return 0, nil, err
return 0, tasks, err
} else {
for _, taskModel := range taskModels {
robInfo := &domain.RobInfo{
Receiver: taskModel.RobInfo.Receiver,
ReceiveTime: taskModel.RobInfo.ReceiveTime,
if taskModel.BidInfo != nil {
var bidderInfoModels []*models.BidderInfo
bidderInfoQuery := tx.Model(&bidderInfoModels)
if err := bidderInfoQuery.Where("bid_info_id = ?", taskModel.BidInfo.Id).Select(); err != nil {
return int64(count), tasks, nil
}
taskModel.BidInfo.BidderInfos = bidderInfoModels
}
bidderInfos := make([]*domain.BidderInfo, len(taskModel.BidInfo.BidderInfos))
for _, bidderInfo := range taskModel.BidInfo.BidderInfos {
bidderInfos = append(bidderInfos, &domain.BidderInfo{
Bidder: bidderInfo.Bidder,
BidTime: bidderInfo.BidTime,
})
if take, err := repository.transformPgModelToDomainModel(taskModel); err == nil {
tasks = append(tasks, take)
} else {
return 0, tasks, err
}
bidInfo := &domain.BidInfo{
BidderInfos: bidderInfos,
BidStartTime: taskModel.BidInfo.BidStartTime,
BidEndTime: taskModel.BidInfo.BidEndTime,
SuccessfulBidder: taskModel.BidInfo.SuccessfulBidder,
WinBidTime: taskModel.BidInfo.WinBidTime,
}
var currentStatus domain.TaskStatus
switch taskModel.TaskStatus {
case domain.TASK_STATUS_UNRELEASED:
currentStatus = &domain.UnReleasedStatus{}
break
case domain.TASK_STATUS_UNCLAIMED:
currentStatus = &domain.UnClaimedStatus{}
break
case domain.TASK_STATUS_UNDERWAY:
currentStatus = &domain.UnderwayStatus{}
break
case domain.TASK_STATUS_UNACCEPTANCE:
currentStatus = &domain.UnAcceptanceStatus{}
break
case domain.TASK_STATUS_COMPLETED:
currentStatus = &domain.CompletedStatus{}
break
case domain.TASK_STATUS_CLOSED:
currentStatus = &domain.ClosedStatus{}
break
}
tasks = append(tasks, &domain.Task{
TaskId: taskModel.Id,
CompanyId: taskModel.CompanyId,
TaskName: taskModel.TaskName,
TaskType: taskModel.TaskType,
Sponsor: taskModel.Sponsor,
TaskStatus: taskModel.TaskStatus,
ReferenceResource: taskModel.ReferenceResource,
CustomerValue: taskModel.CustomerValue,
TaskNature: taskModel.TaskNature,
SuMoney: taskModel.SuMoney,
AcceptanceStandard: taskModel.AcceptanceStandard,
TaskDescription: taskModel.TaskDescription,
TaskPictureUrls: taskModel.TaskPictureUrls,
IsRewardTake: taskModel.IsRewardTake,
CreateTime: taskModel.CreateTime,
RobInfo: robInfo,
BidInfo: bidInfo,
Participators: taskModel.Participators,
TaskPercentage: taskModel.TaskPercentage,
SolveReport: taskModel.SolveReport,
SolvePictureUrls: taskModel.SolvePictureUrls,
CurrentStatus: currentStatus,
})
}
return int64(count), tasks, nil
}
}
func (repository *TaskRepository) transformPgModelToDomainModel(taskModel *models.Task) (*domain.Task, error) {
var robInfo *domain.RobInfo
if taskModel.RobInfo == nil {
robInfo = nil
} else {
robInfo = &domain.RobInfo{
Receiver: taskModel.RobInfo.Receiver,
ReceiveTime: taskModel.RobInfo.ReceiveTime,
}
}
var bidInfo *domain.BidInfo
if taskModel.BidInfo == nil {
bidInfo = nil
} else {
bidderInfos := make([]*domain.BidderInfo, len(taskModel.BidInfo.BidderInfos))
for _, bidderInfo := range taskModel.BidInfo.BidderInfos {
bidderInfos = append(bidderInfos, &domain.BidderInfo{
Bidder: bidderInfo.Bidder,
BidTime: bidderInfo.BidTime,
})
}
bidInfo = &domain.BidInfo{
BidderInfos: bidderInfos,
BidStartTime: taskModel.BidInfo.BidStartTime,
BidEndTime: taskModel.BidInfo.BidEndTime,
SuccessfulBidder: taskModel.BidInfo.SuccessfulBidder,
WinBidTime: taskModel.BidInfo.WinBidTime,
}
}
var currentStatus domain.TaskStatus
switch taskModel.TaskStatus {
case domain.TASK_STATUS_UNRELEASED:
currentStatus = &domain.UnReleasedStatus{}
break
case domain.TASK_STATUS_UNCLAIMED:
currentStatus = &domain.UnClaimedStatus{}
break
case domain.TASK_STATUS_UNDERWAY:
currentStatus = &domain.UnderwayStatus{}
break
case domain.TASK_STATUS_UNACCEPTANCE:
currentStatus = &domain.UnAcceptanceStatus{}
break
case domain.TASK_STATUS_COMPLETED:
currentStatus = &domain.CompletedStatus{}
break
case domain.TASK_STATUS_CLOSED:
currentStatus = &domain.ClosedStatus{}
break
}
return &domain.Task{
TaskId: taskModel.Id,
CompanyId: taskModel.CompanyId,
TaskName: taskModel.TaskName,
TaskType: taskModel.TaskType,
Sponsor: taskModel.Sponsor,
TaskStatus: taskModel.TaskStatus,
ReferenceResource: taskModel.ReferenceResource,
CustomerValue: taskModel.CustomerValue,
TaskNature: taskModel.TaskNature,
SuMoney: taskModel.SuMoney,
AcceptanceStandard: taskModel.AcceptanceStandard,
TaskDescription: taskModel.TaskDescription,
TaskPictureUrls: taskModel.TaskPictureUrls,
IsRewardTake: taskModel.IsRewardTake,
CreateTime: taskModel.CreateTime,
RobInfo: robInfo,
BidInfo: bidInfo,
Participators: taskModel.Participators,
TaskPercentage: taskModel.TaskPercentage,
SolveReport: taskModel.SolveReport,
SolvePictureUrls: taskModel.SolvePictureUrls,
CurrentStatus: currentStatus,
}, nil
}
func NewTaskRepository(transactionContext *pgTransaction.TransactionContext) (*TaskRepository, error) {
if transactionContext == nil {
return nil, fmt.Errorf("transactionContext参数不能为nil")
... ...
... ... @@ -133,6 +133,21 @@ func (controller *TaskController) AcceptanceTask() {
controller.ServeJSON()
}
func (controller *TaskController) SearchTask() {
taskService := service.NewTaskService(nil)
searchTaskCommand := &command.SearchTaskCommand{}
json.Unmarshal(controller.Ctx.Input.GetData("requestBody").([]byte), searchTaskCommand)
data, err := taskService.SearchTask(searchTaskCommand)
var response utils.JsonResponse
if err != nil {
response = utils.ResponseError(controller.Ctx, err)
} else {
response = utils.ResponseData(controller.Ctx, data)
}
controller.Data["json"] = response
controller.ServeJSON()
}
func (controller *TaskController) CreateTask() {
taskService := service.NewTaskService(nil)
createTaskCommand := &command.CreateTaskCommand{}
... ...
... ... @@ -13,6 +13,7 @@ func init() {
beego.Router("/tasks/:taskId/choose-successful-bidder", &controllers.TaskController{}, "Post:ChooseSuccessfulBidder")
beego.Router("/tasks/:taskId/dff", &controllers.TaskController{}, "Post:OffTask")
beego.Router("/tasks/:taskId/acceptance", &controllers.TaskController{}, "Post:AcceptanceTask")
beego.Router("/tasks/search", &controllers.TaskController{}, "Post:SearchTask")
beego.Router("/tasks/", &controllers.TaskController{}, "Post:CreateTask")
beego.Router("/tasks/:taskId", &controllers.TaskController{}, "Put:UpdateTask")
beego.Router("/tasks/:taskId", &controllers.TaskController{}, "Get:GetTask")
... ...
... ... @@ -93,7 +93,7 @@ var _ = Describe("创建新任务", func() {
},
"isRewardTake": true,
"bidStartTime": time.Now(),
"bidEndTime": time.Now().Add( dayAfter),
"bidEndTime": time.Now().Add(dayAfter),
}
httpExpect.POST("/tasks/").
WithJSON(body).
... ...
package task
import (
"gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/domain"
"net/http"
"time"
"github.com/gavv/httpexpect"
"github.com/go-pg/pg"
... ... @@ -12,11 +14,24 @@ import (
var _ = Describe("返回任务", func() {
BeforeEach(func() {
dayAfter, _ := time.ParseDuration("72h")
_, err := pG.DB.QueryOne(
pg.Scan(),
"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) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
1, 101, "testTaskName", 1, "{}", 3, "null", pg.Array([]string{"口感"}), "testTaskNature", 100.00, "testAcceptanceStandard", "testTaskDescription", pg.Array([]string{"url"}), false)
"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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
1, 101, "抢单任务1", 1, &domain.EmployeeInfo{
Uid: 2499036607974745088,
}, 1, "null", pg.Array([]string{"口感", "便利", "品牌"}), "面", 1000.00, "验收标准1", "任务描述1", pg.Array([]string{}), true, "null", "null", "", pg.Array([]string{}), time.Now(), time.Now().Add(dayAfter))
Expect(err).NotTo(HaveOccurred())
_, err1 := pG.DB.QueryOne(
pg.Scan(),
"INSERT INTO bid_infos (id, task_id) VALUES (?, ?)",
1, 1)
Expect(err1).NotTo(HaveOccurred())
_, err2 := pG.DB.QueryOne(
pg.Scan(),
"INSERT INTO bidder_infos (id, bid_info_id, task_id) VALUES (?, ?, ?)",
1, 1, 1)
Expect(err2).NotTo(HaveOccurred())
})
Describe("根据taskId参数返回任务", func() {
Context("传入有效的taskId", func() {
... ... @@ -36,5 +51,9 @@ var _ = Describe("返回任务", func() {
AfterEach(func() {
_, err := pG.DB.Exec("DELETE FROM tasks WHERE true")
Expect(err).NotTo(HaveOccurred())
_, err1 := pG.DB.Exec("DELETE FROM bid_infos WHERE true")
Expect(err1).NotTo(HaveOccurred())
_, err2 := pG.DB.Exec("DELETE FROM bidder_infos WHERE true")
Expect(err2).NotTo(HaveOccurred())
})
})
... ...
package task
import (
"gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/domain"
"net/http"
"time"
"github.com/gavv/httpexpect"
"github.com/go-pg/pg"
... ... @@ -11,32 +13,55 @@ import (
)
var _ = Describe("返回任务列表", func() {
var taskId int64
BeforeEach(func() {
dayAfter, _ := time.ParseDuration("72h")
_, err := pG.DB.QueryOne(
pg.Scan(&taskId),
"INSERT INTO tasks (task_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, rob_info, bid_info, participators, task_percentage, solve_report, solve_picture_urls, create_time, release_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING id",
"testTaskId", "testCompanyId", "testTaskName", "testTaskType", "testSponsor", "testTaskStatus", "testReferenceResource", "testCustomerValue", "testTaskNature", "testSuMoney", "testAcceptanceStandard", "testTaskDescription", "testTaskPictureUrls", "testIsRewardTake", "testRobInfo", "testBidInfo", "testParticipators", "testTaskPercentage", "testSolveReport", "testSolvePictureUrls", "testCreateTime", "testReleaseTime")
pg.Scan(),
"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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
1, 101, "抢单任务1", 1, &domain.EmployeeInfo{
Uid: 2499036607974745088,
}, 1, "null", pg.Array([]string{"口感", "便利", "品牌"}), "面", 1000.00, "验收标准1", "任务描述1", pg.Array([]string{}), true, "null", "null", "", pg.Array([]string{}), time.Now(), time.Now().Add(dayAfter))
Expect(err).NotTo(HaveOccurred())
_, err1 := pG.DB.QueryOne(
pg.Scan(),
"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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
2, 101, "抢单任务2", 1, &domain.EmployeeInfo{
Uid: 2499036607974745088,
}, 1, "null", pg.Array([]string{"口感", "便利", "品牌"}), "面", 1000.00, "验收标准1", "任务描述1", pg.Array([]string{}), true, "null", "null", "", pg.Array([]string{}), time.Now(), time.Now().Add(dayAfter))
Expect(err1).NotTo(HaveOccurred())
_, err11 := pG.DB.QueryOne(
pg.Scan(),
"INSERT INTO bid_infos (id, task_id) VALUES (?, ?)",
1, 2)
Expect(err11).NotTo(HaveOccurred())
_, err22 := pG.DB.QueryOne(
pg.Scan(),
"INSERT INTO bidder_infos (id, bid_info_id, task_id) VALUES (?, ?, ?)",
1, 1, 2)
Expect(err22).NotTo(HaveOccurred())
_, err2 := pG.DB.QueryOne(
pg.Scan(),
"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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
3, 102, "抢单任务1", 1, &domain.EmployeeInfo{
Uid: 2499036607974745088,
}, 1, "null", pg.Array([]string{"口感", "便利", "品牌"}), "面", 1000.00, "验收标准1", "任务描述1", pg.Array([]string{}), true, "null", "null", "", pg.Array([]string{}), time.Now(), time.Now().Add(dayAfter))
Expect(err2).NotTo(HaveOccurred())
_, err3 := pG.DB.QueryOne(
pg.Scan(),
"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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
4, 101, "抢单任务1", 1, &domain.EmployeeInfo{
Uid: 2499036607974745088,
}, 1, "null", pg.Array([]string{"口感", "便利", "品牌"}), "面", 1000.00, "验收标准1", "任务描述1", pg.Array([]string{}), true, "null", "null", "", pg.Array([]string{}), time.Now(), time.Now().Add(dayAfter))
Expect(err3).NotTo(HaveOccurred())
})
Describe("根据参数返回任务列表", func() {
Context("传入有效的参数", func() {
It("返回任务数据列表", func() {
It("返回指定companyId公司的任务数据列表", func() {
httpExpect := httpexpect.New(GinkgoT(), server.URL)
httpExpect.GET("/tasks/").
WithQuery("companyId", "int64").
WithQuery("sponsor", "int64").
WithQuery("taskContentMatch", "string").
WithQuery("taskType", "int").
WithQuery("taskStatus", "int").
WithQuery("customerValue", "string").
WithQuery("taskNature", "string").
WithQuery("isRewardTake", "boolean").
WithQuery("bidTimeMatch", "int").
WithQuery("receiver", "int64").
WithQuery("participator", "int64").
WithQuery("offset", "int").
WithQuery("limit", "int").
WithQuery("companyId", 101).
WithQuery("offset", 0).
WithQuery("limit", 20).
Expect().
Status(http.StatusOK).
JSON().
... ... @@ -44,7 +69,33 @@ var _ = Describe("返回任务列表", func() {
ContainsKey("code").ValueEqual("code", 0).
ContainsKey("msg").ValueEqual("msg", "ok").
ContainsKey("data").Value("data").Object().
ContainsKey("count").ValueEqual("count", 1).
ContainsKey("count").ValueEqual("count", 3).
ContainsKey("tasks").Value("tasks").Array()
})
It("返回指定companyId公司的任务数据列表", func() {
httpExpect := httpexpect.New(GinkgoT(), server.URL)
httpExpect.GET("/tasks/").
WithQuery("companyId", 101).
//WithQuery("sponsor", "int64").
//WithQuery("taskContentMatch", "string").
//WithQuery("taskType", "int").
//WithQuery("taskStatus", "int").
//WithQuery("customerValue", "string").
//WithQuery("taskNature", "string").
//WithQuery("isRewardTake", "boolean").
//WithQuery("bidTimeMatch", "int").
//WithQuery("receiver", "int64").
//WithQuery("participator", "int64").
WithQuery("offset", 0).
WithQuery("limit", 20).
Expect().
Status(http.StatusOK).
JSON().
Object().
ContainsKey("code").ValueEqual("code", 0).
ContainsKey("msg").ValueEqual("msg", "ok").
ContainsKey("data").Value("data").Object().
ContainsKey("count").ValueEqual("count", 3).
ContainsKey("tasks").Value("tasks").Array()
})
})
... ... @@ -52,5 +103,9 @@ var _ = Describe("返回任务列表", func() {
AfterEach(func() {
_, err := pG.DB.Exec("DELETE FROM tasks WHERE true")
Expect(err).NotTo(HaveOccurred())
_, err1 := pG.DB.Exec("DELETE FROM bid_infos WHERE true")
Expect(err1).NotTo(HaveOccurred())
_, err2 := pG.DB.Exec("DELETE FROM bidder_infos WHERE true")
Expect(err2).NotTo(HaveOccurred())
})
})
... ...
package task
import (
"net/http"
"github.com/gavv/httpexpect"
"github.com/go-pg/pg"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
pG "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/infrastructure/pg"
)
var _ = Describe("搜索任务", func() {
var taskId int64
BeforeEach(func() {
_, err := pG.DB.QueryOne(
pg.Scan(&taskId),
"INSERT INTO tasks (task_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, rob_info, bid_info, participators, task_percentage, solve_report, solve_picture_urls, create_time, release_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING id",
"testTaskId", "testCompanyId", "testTaskName", "testTaskType", "testSponsor", "testTaskStatus", "testReferenceResource", "testCustomerValue", "testTaskNature", "testSuMoney", "testAcceptanceStandard", "testTaskDescription", "testTaskPictureUrls", "testIsRewardTake", "testRobInfo", "testBidInfo", "testParticipators", "testTaskPercentage", "testSolveReport", "testSolvePictureUrls", "testCreateTime", "testReleaseTime")
Expect(err).NotTo(HaveOccurred())
})
Describe("搜索任务", func() {
Context("", func() {
It("", func() {
httpExpect := httpexpect.New(GinkgoT(), server.URL)
body := map[string]interface{}{
"companyId": "int64",
"sponsor": "int64",
"taskContentMatch": "string",
"taskType": "int",
"taskStatus": "int",
"customerValue": "string",
"taskNature": "string",
"isRewardTake": "boolean",
"bidTimeMatch": "int",
"receiver": "int64",
"participator": "int64",
"offset": "int",
"limit": "int",
}
httpExpect.POST("/tasks/search").
WithJSON(body).
Expect().
Status(http.StatusOK).
JSON().
Object().
ContainsKey("code").ValueEqual("code", 0).
ContainsKey("msg").ValueEqual("msg", "ok").
ContainsKey("data").Value("data").Object()
})
})
})
AfterEach(func() {
_, err := pG.DB.Exec("DELETE FROM tasks WHERE true")
Expect(err).NotTo(HaveOccurred())
})
})
... ...