diff --git a/business/jxstore/cms/job.go b/business/jxstore/cms/job.go index 0cd1af7e2..908d43689 100644 --- a/business/jxstore/cms/job.go +++ b/business/jxstore/cms/job.go @@ -22,6 +22,29 @@ const ( CancelMaxCount = 5 ) +var ( + DayTimeBegin time.Time + DayTimeEnd time.Time + WeekTimeBegin time.Time + WeekTimeEnd time.Time +) + +func init() { + DayTimeBegin = utils.Str2Time(utils.Time2Str(utils.Time2Date(time.Now())) + " 00:00:00") + DayTimeEnd = utils.Str2Time(utils.Time2Str(utils.Time2Date(time.Now())) + " 23:59:59") + WeekTimeBegin, WeekTimeEnd = getWeekTime() +} + +func getWeekTime() (weekTimeBegin, weekTimeEnd time.Time) { + offset := int(time.Now().Weekday() - 1) + if offset == -1 { + offset = -6 + } + weekTimeBegin = time.Now().AddDate(0, 0, offset) + weekTimeEnd = weekTimeBegin.AddDate(0, 0, 7) + return weekTimeBegin, weekTimeEnd +} + func PublishJob(ctx *jxcontext.Context, job *model.Job) (err error) { var ( db = dao.GetDB() @@ -94,7 +117,7 @@ func PublishJob(ctx *jxcontext.Context, job *model.Job) (err error) { if err = financial.AddBillExpend(db, userBill.BillID, model.OrderTypeDeposit, job.TotalPrice); err != nil { dao.Rollback(db) } - //2、账户表保证金总额增加相应值 + //2、账户表保证金总额减少相应值 userBill.DepositBalance -= job.TotalPrice if _, err = dao.UpdateEntity(db, userBill, "DepositBalance"); err != nil { dao.Rollback(db) @@ -110,15 +133,49 @@ func GetJobs(ctx *jxcontext.Context, userIDs []string, categoryIDs []int, includ func AcceptJob(ctx *jxcontext.Context, jobID int) (err error) { var ( - db = dao.GetDB() - // userID = ctx.GetUserID() + db = dao.GetDB() + userID = ctx.GetUserID() + num int ) job := &model.Job{} job.ID = jobID err = dao.GetEntity(db, &job) - if job.UserID == "" || job.Status == model.JobStatusFailed || job.FinishedAt.Sub(time.Now()) <= 0 { + if job.UserID == "" || job.Status == model.JobStatusFailed || job.FinishedAt.Sub(time.Now()) <= 0 || job.SurplusCount <= 0 || job.LimitCountType <= 0 { return fmt.Errorf("未找到该任务或该任务状态不正常,无法接单!") } + num, err = checkJobOrders(db, "<= "+utils.Int2Str(model.JobOrderStatusWaitAudit), userID, utils.ZeroTimeValue, utils.ZeroTimeValue) + if num > 0 { + return fmt.Errorf("您还有此任务未完成,请完成后再接取!") + } + num, err = checkJobOrders(db, "= "+utils.Int2Str(model.JobOrderStatusAuditUnPass), userID, utils.ZeroTimeValue, utils.ZeroTimeValue) + if num > 0 { + return fmt.Errorf("您还有此任务未审核通过记录,可直接在未审核中重新提交!") + } + switch job.LimitCountType { + case model.JobLimitCountTypePO: + num, err = checkJobOrders(db, "<> "+utils.Int2Str(model.JobOrderStatusCancel), userID, utils.ZeroTimeValue, utils.ZeroTimeValue) + if num > 0 { + return fmt.Errorf("此任务只支持每人做一次!") + } + case model.JobLimitCountTypePDO: + num, err = checkJobOrders(db, "<> "+utils.Int2Str(model.JobOrderStatusCancel), userID, DayTimeBegin, DayTimeEnd) + if num > 0 { + return fmt.Errorf("此任务只支持每人每天做一次!") + } + case model.JobLimitCountTypePWO: + num, err = checkJobOrders(db, "<> "+utils.Int2Str(model.JobOrderStatusCancel), userID, WeekTimeBegin, WeekTimeEnd) + if num > 0 { + return fmt.Errorf("此任务只支持每人每周做一次!") + } + case model.JobLimitCountTypeNoLimit: + default: + return fmt.Errorf("不支持的任务限次类型!%v", job.LimitCountType) + } return err } + +func checkJobOrders(db *dao.DaoDB, statusCompareStr, userID string, fromTime, toTime time.Time) (num int, err error) { + jobOrders, err := dao.GetJobOrdersNoPage(db, 0, 0, userID, statusCompareStr, fromTime, toTime, nil) + return len(jobOrders), err +} diff --git a/business/model/dao/dao_job.go b/business/model/dao/dao_job.go index 98e29e32d..029ee6deb 100644 --- a/business/model/dao/dao_job.go +++ b/business/model/dao/dao_job.go @@ -148,9 +148,89 @@ func GetJobDetail(db *DaoDB, jobID int) (job *GetJobsResult, err error) { return job, err } -func GetJobOrders(db *DaoDB, jobID int, userID string, status int) (jobOrders []*model.JobOrder, err error) { - // sql := ` - // SELECT - // ` +func GetJobOrdersNoPage(db *DaoDB, jobID int, jobOrderID int64, userID string, statusCompareStr string, fromTime, toTime time.Time, statuss []int) (jobOrders []*model.JobOrder, err error) { + sql := ` + SELECT a.* + FROM job_order a + WHERE 1 = 1 + ` + sqlParams := []interface{}{} + if jobID != 0 { + sql += ` AND a.job_id = ?` + sqlParams = append(sqlParams, jobID) + } + if jobOrderID != 0 { + sql += ` AND a.job_order_id = ?` + sqlParams = append(sqlParams, jobOrderID) + } + if userID != "" { + sql += ` AND a.user_id = ?` + sqlParams = append(sqlParams, userID) + } + if statusCompareStr != "" { + sql += ` AND a.status ` + statusCompareStr + } + if fromTime != utils.ZeroTimeValue { + sql += ` AND a.created_at >= ?` + sqlParams = append(sqlParams, fromTime) + } + if toTime != utils.ZeroTimeValue { + sql += ` AND a.created_at <= ?` + sqlParams = append(sqlParams, toTime) + } + if len(statuss) > 0 { + sql += ` AND a.status IN (` + GenQuestionMarks(len(statuss)) + `)` + sqlParams = append(sqlParams, statuss) + } + err = GetRows(db, &jobOrders, sql, sqlParams) return jobOrders, err } + +func GetJobOrders(db *DaoDB, jobID int, jobOrderID int64, userID string, statusCompareStr string, fromTime, toTime time.Time, statuss []int, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) { + var jobOrders []*model.JobOrder + sql := ` + SELECT SQL_CALC_FOUND_ROWS a.* + FROM job_order a + WHERE 1 = 1 + ` + sqlParams := []interface{}{} + if jobID != 0 { + sql += ` AND a.job_id = ?` + sqlParams = append(sqlParams, jobID) + } + if jobOrderID != 0 { + sql += ` AND a.job_order_id = ?` + sqlParams = append(sqlParams, jobOrderID) + } + if userID != "" { + sql += ` AND a.user_id = ?` + sqlParams = append(sqlParams, userID) + } + if statusCompareStr != "" { + sql += ` AND a.status ` + statusCompareStr + } + if fromTime != utils.ZeroTimeValue { + sql += ` AND a.created_at >= ?` + sqlParams = append(sqlParams, fromTime) + } + if toTime != utils.ZeroTimeValue { + sql += ` AND a.created_at <= ?` + sqlParams = append(sqlParams, toTime) + } + if len(statuss) > 0 { + sql += ` AND a.status IN (` + GenQuestionMarks(len(statuss)) + `)` + sqlParams = append(sqlParams, statuss) + } + sql += " AND LIMIT ? OFFSET ?" + pageSize = jxutils.FormalizePageSize(pageSize) + sqlParams = append(sqlParams, pageSize, offset) + Begin(db) + defer Commit(db) + if err = GetRows(db, &jobOrders, sql, sqlParams...); err == nil { + pagedInfo = &model.PagedInfo{ + TotalCount: GetLastTotalRowCount(db), + Data: jobOrders, + } + } + return pagedInfo, err +} diff --git a/business/model/job.go b/business/model/job.go index 4b1fcda45..eccaf6d6e 100644 --- a/business/model/job.go +++ b/business/model/job.go @@ -11,7 +11,7 @@ const ( JobLimitCountTypePO = 1 //每人一次 JobLimitCountTypePDO = 2 //每人每天一次 JobLimitCountTypePWO = 3 //每人每周一次 - JobLimitCountTypeNoLimie = 4 //不限制 + JobLimitCountTypeNoLimit = 4 //不限制 JobOrderStatusAccept = 5 JobOrderStatusWaitAudit = 10 @@ -41,6 +41,7 @@ type Job struct { AuditLimitAt int `json:"auditLimitAt"` //任务审核限时小时数 FinishedAt time.Time `json:"finishedAt"` //接单截止日期 LimitCountType int `json:"limitCountType"` //任务限次类型,1为每人一次,2为每人每天一次,3为每人每周一次,4为不限制 + VendorID int `orm:"column(vendor_id)" json:"vendorID"` //推广平台 StoreURL string `orm:"column(store_url)" json:"storeURL"` //门店链接 SkuURL string `orm:"column(sku_url)" json:"skuURL"` //商品优惠券链接 JobSteps []*JobStep `orm:"-" json:"jobSteps"` @@ -85,18 +86,20 @@ func (v *JobStep) TableIndex() [][]string { type JobOrder struct { ModelIDCUL - JobID int `orm:"column(job_id)" json:"jobID"` //任务ID - UserID string `orm:"column(user_id)" json:"userID"` //接任务人ID - Status int `json:"status"` //任务订单状态,接单,待审核,已审核,已结算等 - SubmitAuditAt time.Time `json:"submitAuditTime"` //提交审核日期 - AuditAt time.Time `json:"auditAt"` //审核日期 - Content string `josn:"content"` //任务审核内容 - Img string `json:"img"` //任务审核图片 + JobID int `orm:"column(job_id)" json:"jobID"` //任务ID + JobOrderID int `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"` //提交审核日期 + AuditAt time.Time `json:"auditAt"` //审核日期 + Content string `josn:"content"` //任务审核内容 + Img string `json:"img"` //任务审核图片 } func (v *JobOrder) TableIndex() [][]string { return [][]string{ []string{"JobID"}, + []string{"JobOrderID"}, []string{"UserID"}, } } diff --git a/controllers/job_controller.go b/controllers/job_controller.go index 134e8006c..13d414b51 100644 --- a/controllers/job_controller.go +++ b/controllers/job_controller.go @@ -1,6 +1,7 @@ package controllers import ( + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxstore/cms" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" @@ -116,7 +117,7 @@ func (c *JobController) GetJobOrders() { statuss []int ) if err = jxutils.Strings2Objs(params.Statuss, statuss); err == nil { - // retVal, err = cms.GetJobs(params.Ctx, userIDs, categoryIDs, params.FromTime, params.ToTime, params.PageSize, params.Offset) + retVal, err = dao.GetJobOrders(dao.GetDB(), 0, 0, params.UserID, "", utils.Str2Time(params.FromTime), utils.Str2Time(params.ToTime), statuss, params.PageSize, params.Offset) } return retVal, "", err }) diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 9926ab12b..4425c7966 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -178,6 +178,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JobController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JobController"], + beego.ControllerComments{ + Method: "GetJobOrders", + Router: `/GetJobOrders`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JobController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JobController"], beego.ControllerComments{ Method: "GetJobs",