作者 linmadan

重构中标逻辑

@@ -213,9 +213,6 @@ func (status *UnClaimedStatus) ChooseSuccessfulBidder(task *Task, successfulBidd @@ -213,9 +213,6 @@ func (status *UnClaimedStatus) ChooseSuccessfulBidder(task *Task, successfulBidd
213 return fmt.Errorf("无效的竞标信息") 213 return fmt.Errorf("无效的竞标信息")
214 } else { 214 } else {
215 winBidTime := time.Now() 215 winBidTime := time.Now()
216 - if winBidTime.Before(task.BidInfo.BidEndTime) {  
217 - return fmt.Errorf("竞标还没有结束")  
218 - }  
219 task.BidInfo.SuccessfulBidder = successfulBidder 216 task.BidInfo.SuccessfulBidder = successfulBidder
220 task.BidInfo.WinBidTime = winBidTime 217 task.BidInfo.WinBidTime = winBidTime
221 task.TaskStatus = TASK_STATUS_UNDERWAY 218 task.TaskStatus = TASK_STATUS_UNDERWAY
@@ -156,7 +156,7 @@ func (repository *TaskRepository) Find(queryOptions map[string]interface{}) (int @@ -156,7 +156,7 @@ func (repository *TaskRepository) Find(queryOptions map[string]interface{}) (int
156 query = query.Where(`task.participators @> '[{"uid":?}]'`, participator) 156 query = query.Where(`task.participators @> '[{"uid":?}]'`, participator)
157 } 157 }
158 if taskIds, ok := queryOptions["taskIds"]; ok { 158 if taskIds, ok := queryOptions["taskIds"]; ok {
159 - query = query.Where(`task.task_id IN (?)`, pg.In(taskIds.([]int64))) 159 + query = query.Where(`task.id IN (?)`, pg.In(taskIds.([]int64)))
160 } 160 }
161 if offRangTime, ok := queryOptions["offRangTime"]; ok { 161 if offRangTime, ok := queryOptions["offRangTime"]; ok {
162 query = query.Join("JOIN off_task_records ON off_task_record.task_id = task.id") 162 query = query.Join("JOIN off_task_records ON off_task_record.task_id = task.id")
@@ -183,7 +183,12 @@ func (repository *TaskRepository) Find(queryOptions map[string]interface{}) (int @@ -183,7 +183,12 @@ func (repository *TaskRepository) Find(queryOptions map[string]interface{}) (int
183 } else { 183 } else {
184 query = query.Limit(20) 184 query = query.Limit(20)
185 } 185 }
186 - if count, err := query.Order("id DESC").SelectAndCount(); err != nil { 186 + if sortByReleaseTime, ok := queryOptions["sortByReleaseTime"]; ok && (sortByReleaseTime == "ASC" || sortByReleaseTime == "DESC") {
  187 + query = query.Order(fmt.Sprintf("task.release_time %s", sortByReleaseTime.(string)))
  188 + } else {
  189 + query = query.Order("task.id DESC")
  190 + }
  191 + if count, err := query.SelectAndCount(); err != nil {
187 return 0, tasks, err 192 return 0, tasks, err
188 } else { 193 } else {
189 for _, taskModel := range taskModels { 194 for _, taskModel := range taskModels {
  1 +package service_gateway
  2 +
  3 +import (
  4 + "encoding/json"
  5 + "fmt"
  6 + "github.com/astaxie/beego/httplib"
  7 + "strconv"
  8 + "strings"
  9 + "time"
  10 +)
  11 +
  12 +type httplibBaseServiceGateway struct {
  13 + baseURL string
  14 + connectTimeout time.Duration
  15 + readWriteTimeout time.Duration
  16 +}
  17 +
  18 +func (serviceGateway *httplibBaseServiceGateway) createRequest(url string, method string) *httplib.BeegoHTTPRequest {
  19 + var request *httplib.BeegoHTTPRequest
  20 + switch method {
  21 + case "get":
  22 + request = httplib.Get(url)
  23 + break
  24 + case "post":
  25 + request = httplib.Post(url)
  26 + break
  27 + case "put":
  28 + request = httplib.Put(url)
  29 + break
  30 + case "delete":
  31 + request = httplib.Delete(url)
  32 + break
  33 + case "head":
  34 + request = httplib.Head(url)
  35 + break
  36 + default:
  37 + request = httplib.Get(url)
  38 + }
  39 + return request.SetTimeout(serviceGateway.connectTimeout, serviceGateway.readWriteTimeout)
  40 +}
  41 +
  42 +func (serviceGateway *httplibBaseServiceGateway) responseHandle(response map[string]interface{}) (map[string]interface{}, error) {
  43 + data := make(map[string]interface{})
  44 + var err error
  45 + if code, ok := response["code"]; ok {
  46 + code := code.(float64)
  47 + if code == 0 {
  48 + data = response["data"].(map[string]interface{})
  49 + } else {
  50 + msg := response["msg"].(string)
  51 + err = fmt.Errorf(strings.Join([]string{strconv.FormatFloat(code, 'f', -1, 64), msg}, " "))
  52 + }
  53 + } else {
  54 + jsonBytes, marshalErr := json.Marshal(response)
  55 + if marshalErr != nil {
  56 + err = marshalErr
  57 + }
  58 + err = fmt.Errorf("无法解析的网关服务数据返回格式:%s", string(jsonBytes))
  59 + }
  60 + return data, err
  61 +}
@@ -48,7 +48,7 @@ var _ = Describe("获取个人任务统计", func() { @@ -48,7 +48,7 @@ var _ = Describe("获取个人任务统计", func() {
48 "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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", 48 "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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
49 4, 101, "竞标任务1", 2, &domain.EmployeeInfo{ 49 4, 101, "竞标任务1", 2, &domain.EmployeeInfo{
50 Uid: 2499036607974745099, 50 Uid: 2499036607974745099,
51 - }, 2, "null", pg.Array([]string{"口感", "便利", "品牌"}), "面", 1000.00, "验收标准1", "任务描述1", pg.Array([]string{}), false, "null", "null", "", pg.Array([]string{}), time.Now(), time.Now().Add(dayAfter)) 51 + }, 1, "null", pg.Array([]string{"口感", "便利", "品牌"}), "面", 1000.00, "验收标准1", "任务描述1", pg.Array([]string{}), false, "null", "null", "", pg.Array([]string{}), time.Now(), time.Now().Add(dayAfter))
52 Expect(err3).NotTo(HaveOccurred()) 52 Expect(err3).NotTo(HaveOccurred())
53 _, err4 := pG.DB.QueryOne( 53 _, err4 := pG.DB.QueryOne(
54 pg.Scan(), 54 pg.Scan(),