acceptjob

This commit is contained in:
苏尹岚
2020-10-16 10:38:01 +08:00
parent 25461b7f8f
commit 47c2cd12fe
5 changed files with 63 additions and 9 deletions

View File

@@ -127,8 +127,8 @@ func PublishJob(ctx *jxcontext.Context, job *model.Job) (err error) {
return err
}
func GetJobs(ctx *jxcontext.Context, userIDs []string, categoryIDs, statuss []int, includeStep bool, fromTime, toTime string, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) {
return dao.GetJobs(dao.GetDB(), userIDs, categoryIDs, statuss, includeStep, utils.Str2Time(fromTime), utils.Str2Time(toTime), pageSize, offset)
func GetJobs(ctx *jxcontext.Context, userIDs []string, categoryIDs, statuss, vendorIDs []int, includeStep bool, fromTime, toTime string, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) {
return dao.GetJobs(dao.GetDB(), userIDs, categoryIDs, statuss, vendorIDs, includeStep, utils.Str2Time(fromTime), utils.Str2Time(toTime), pageSize, offset)
}
func AcceptJob(ctx *jxcontext.Context, jobID int) (err error) {
@@ -171,7 +171,41 @@ func AcceptJob(ctx *jxcontext.Context, jobID int) (err error) {
default:
return fmt.Errorf("不支持的任务限次类型!%v", job.LimitCountType)
}
jobOrder := &model.JobOrder{
JobID: jobID,
JobOrderID: jxutils.GenJobOrderNo(),
UserID: job.UserID,
Status: model.JobOrderStatusAccept,
}
dao.Begin(db)
defer func() {
if r := recover(); r != nil {
dao.Rollback(db)
panic(r)
}
}()
if err = dao.CreateEntity(db, jobOrder); err != nil {
dao.Rollback(db)
}
//用户接受任务,任务剩余次数-1
job.SurplusCount -= 1
if _, err = dao.UpdateEntity(db, job, "SurplusCount"); err != nil {
dao.Rollback(db)
}
dao.Commit(db)
//任务限时完成
utils.AfterFuncWithRecover(time.Hour*time.Duration(job.JobLimitAt), func() {
jobOrders, _ := dao.GetJobOrdersNoPage(db, jobID, jobOrder.JobOrderID, userID, "", utils.ZeroTimeValue, utils.ZeroTimeValue, nil)
if len(jobOrders) == 0 {
return
}
jobOrder := jobOrders[0]
if jobOrder.Status == model.JobOrderStatusCancel {
return
}
jobOrder.Status = model.JobOrderStatusCancel
dao.UpdateEntity(db, jobOrder, "Status")
})
return err
}

View File

@@ -186,6 +186,21 @@ func GenOrderNo() (orderNo int64) {
return orderNo
}
func GenJobOrderNo() (orderNo int64) {
const prefix = 88
const randPartNum = 1000
orderNo = time.Now().Unix() - orderNoBeginTimestamp
orderNo = orderNo * randPartNum
md5Bytes := md5.Sum([]byte(utils.GetUUID()))
randPart := 0
for k, v := range md5Bytes {
randPart += int(v) << ((k % 3) * 8)
}
orderNo += int64(randPart % randPartNum)
orderNo += int64(math.Pow10(int(math.Log10(float64(orderNo)))+1)) * prefix
return orderNo
}
func GenBillID() (billID int64) {
const prefix = 66
const randPartNum = 100

View File

@@ -26,7 +26,7 @@ type GetJobsResult struct {
CategoryName string `json:"CategoryName"` //分类名
}
func GetJobs(db *DaoDB, userIDs []string, categoryIDs, statuss []int, includeStep bool, fromTime, toTime time.Time, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) {
func GetJobs(db *DaoDB, userIDs []string, categoryIDs, statuss, vendorIDs []int, includeStep bool, fromTime, toTime time.Time, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) {
var jobs []*GetJobsResult
sql := `
SELECT SQL_CALC_FOUND_ROWS a.*, b.name
@@ -47,6 +47,10 @@ func GetJobs(db *DaoDB, userIDs []string, categoryIDs, statuss []int, includeSte
sql += ` AND a.status IN (` + GenQuestionMarks(len(statuss)) + `)`
sqlParams = append(sqlParams, statuss)
}
if len(vendorIDs) > 0 {
sql += ` AND a.vendor_id IN (` + GenQuestionMarks(len(vendorIDs)) + `)`
sqlParams = append(sqlParams, vendorIDs)
}
if fromTime != utils.ZeroTimeValue {
sql += ` AND a.created_at >= ?`
sqlParams = append(sqlParams, fromTime)

View File

@@ -87,7 +87,7 @@ type JobOrder struct {
ModelIDCUL
JobID int `orm:"column(job_id)" json:"jobID"` //任务ID
JobOrderID int `orm:"column(job_order_id)" json:"jobOrderID"` //任务订单号
JobOrderID int64 `orm:"column(job_order_id)" json:"jobOrderID"` //任务订单号
UserID string `orm:"column(user_id)" json:"userID"` //接任务人ID
Status int `json:"status"` //任务订单状态,接单,待审核,已审核,已结算等
SubmitAuditAt time.Time `json:"submitAuditTime"` //提交审核日期

View File

@@ -50,6 +50,7 @@ func (c *JobController) GetJobCategories() {
// @Param userIDs query string false "用户IDs"
// @Param categoryIDs query string false "分类IDs"
// @Param statuss query string false "状态s"
// @Param vendorIDs query string false "平台IDs"
// @Param includeStep query bool false "是否查询步骤,默认否"
// @Param fromTime query string false "开始时间"
// @Param toTime query string false "结束时间"
@@ -61,11 +62,11 @@ func (c *JobController) GetJobCategories() {
func (c *JobController) GetJobs() {
c.callGetJobs(func(params *tJobGetJobsParams) (retVal interface{}, errCode string, err error) {
var (
userIDs []string
categoryIDs, statuss []int
userIDs []string
categoryIDs, statuss, vendorIDs []int
)
if err = jxutils.Strings2Objs(params.UserIDs, &userIDs, params.CategoryIDs, &categoryIDs, params.Statuss, &statuss); err == nil {
retVal, err = cms.GetJobs(params.Ctx, userIDs, categoryIDs, statuss, params.IncludeStep, params.FromTime, params.ToTime, params.PageSize, params.Offset)
if err = jxutils.Strings2Objs(params.UserIDs, &userIDs, params.CategoryIDs, &categoryIDs, params.Statuss, &statuss, params.VendorIDs, vendorIDs); err == nil {
retVal, err = cms.GetJobs(params.Ctx, userIDs, categoryIDs, statuss, vendorIDs, params.IncludeStep, params.FromTime, params.ToTime, params.PageSize, params.Offset)
}
return retVal, "", err
})