joborders
This commit is contained in:
@@ -22,6 +22,29 @@ const (
|
|||||||
CancelMaxCount = 5
|
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) {
|
func PublishJob(ctx *jxcontext.Context, job *model.Job) (err error) {
|
||||||
var (
|
var (
|
||||||
db = dao.GetDB()
|
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 {
|
if err = financial.AddBillExpend(db, userBill.BillID, model.OrderTypeDeposit, job.TotalPrice); err != nil {
|
||||||
dao.Rollback(db)
|
dao.Rollback(db)
|
||||||
}
|
}
|
||||||
//2、账户表保证金总额增加相应值
|
//2、账户表保证金总额减少相应值
|
||||||
userBill.DepositBalance -= job.TotalPrice
|
userBill.DepositBalance -= job.TotalPrice
|
||||||
if _, err = dao.UpdateEntity(db, userBill, "DepositBalance"); err != nil {
|
if _, err = dao.UpdateEntity(db, userBill, "DepositBalance"); err != nil {
|
||||||
dao.Rollback(db)
|
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) {
|
func AcceptJob(ctx *jxcontext.Context, jobID int) (err error) {
|
||||||
var (
|
var (
|
||||||
db = dao.GetDB()
|
db = dao.GetDB()
|
||||||
// userID = ctx.GetUserID()
|
userID = ctx.GetUserID()
|
||||||
|
num int
|
||||||
)
|
)
|
||||||
job := &model.Job{}
|
job := &model.Job{}
|
||||||
job.ID = jobID
|
job.ID = jobID
|
||||||
err = dao.GetEntity(db, &job)
|
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("未找到该任务或该任务状态不正常,无法接单!")
|
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
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -148,9 +148,89 @@ func GetJobDetail(db *DaoDB, jobID int) (job *GetJobsResult, err error) {
|
|||||||
return job, err
|
return job, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetJobOrders(db *DaoDB, jobID int, userID string, status int) (jobOrders []*model.JobOrder, err error) {
|
func GetJobOrdersNoPage(db *DaoDB, jobID int, jobOrderID int64, userID string, statusCompareStr string, fromTime, toTime time.Time, statuss []int) (jobOrders []*model.JobOrder, err error) {
|
||||||
// sql := `
|
sql := `
|
||||||
// SELECT
|
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
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const (
|
|||||||
JobLimitCountTypePO = 1 //每人一次
|
JobLimitCountTypePO = 1 //每人一次
|
||||||
JobLimitCountTypePDO = 2 //每人每天一次
|
JobLimitCountTypePDO = 2 //每人每天一次
|
||||||
JobLimitCountTypePWO = 3 //每人每周一次
|
JobLimitCountTypePWO = 3 //每人每周一次
|
||||||
JobLimitCountTypeNoLimie = 4 //不限制
|
JobLimitCountTypeNoLimit = 4 //不限制
|
||||||
|
|
||||||
JobOrderStatusAccept = 5
|
JobOrderStatusAccept = 5
|
||||||
JobOrderStatusWaitAudit = 10
|
JobOrderStatusWaitAudit = 10
|
||||||
@@ -41,6 +41,7 @@ type Job struct {
|
|||||||
AuditLimitAt int `json:"auditLimitAt"` //任务审核限时小时数
|
AuditLimitAt int `json:"auditLimitAt"` //任务审核限时小时数
|
||||||
FinishedAt time.Time `json:"finishedAt"` //接单截止日期
|
FinishedAt time.Time `json:"finishedAt"` //接单截止日期
|
||||||
LimitCountType int `json:"limitCountType"` //任务限次类型,1为每人一次,2为每人每天一次,3为每人每周一次,4为不限制
|
LimitCountType int `json:"limitCountType"` //任务限次类型,1为每人一次,2为每人每天一次,3为每人每周一次,4为不限制
|
||||||
|
VendorID int `orm:"column(vendor_id)" json:"vendorID"` //推广平台
|
||||||
StoreURL string `orm:"column(store_url)" json:"storeURL"` //门店链接
|
StoreURL string `orm:"column(store_url)" json:"storeURL"` //门店链接
|
||||||
SkuURL string `orm:"column(sku_url)" json:"skuURL"` //商品优惠券链接
|
SkuURL string `orm:"column(sku_url)" json:"skuURL"` //商品优惠券链接
|
||||||
JobSteps []*JobStep `orm:"-" json:"jobSteps"`
|
JobSteps []*JobStep `orm:"-" json:"jobSteps"`
|
||||||
@@ -85,18 +86,20 @@ func (v *JobStep) TableIndex() [][]string {
|
|||||||
type JobOrder struct {
|
type JobOrder struct {
|
||||||
ModelIDCUL
|
ModelIDCUL
|
||||||
|
|
||||||
JobID int `orm:"column(job_id)" json:"jobID"` //任务ID
|
JobID int `orm:"column(job_id)" json:"jobID"` //任务ID
|
||||||
UserID string `orm:"column(user_id)" json:"userID"` //接任务人ID
|
JobOrderID int `orm:"column(job_order_id)" json:"jobOrderID"` //任务订单号
|
||||||
Status int `json:"status"` //任务订单状态,接单,待审核,已审核,已结算等
|
UserID string `orm:"column(user_id)" json:"userID"` //接任务人ID
|
||||||
SubmitAuditAt time.Time `json:"submitAuditTime"` //提交审核日期
|
Status int `json:"status"` //任务订单状态,接单,待审核,已审核,已结算等
|
||||||
AuditAt time.Time `json:"auditAt"` //审核日期
|
SubmitAuditAt time.Time `json:"submitAuditTime"` //提交审核日期
|
||||||
Content string `josn:"content"` //任务审核内容
|
AuditAt time.Time `json:"auditAt"` //审核日期
|
||||||
Img string `json:"img"` //任务审核图片
|
Content string `josn:"content"` //任务审核内容
|
||||||
|
Img string `json:"img"` //任务审核图片
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *JobOrder) TableIndex() [][]string {
|
func (v *JobOrder) TableIndex() [][]string {
|
||||||
return [][]string{
|
return [][]string{
|
||||||
[]string{"JobID"},
|
[]string{"JobID"},
|
||||||
|
[]string{"JobOrderID"},
|
||||||
[]string{"UserID"},
|
[]string{"UserID"},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package controllers
|
package controllers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
|
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
@@ -116,7 +117,7 @@ func (c *JobController) GetJobOrders() {
|
|||||||
statuss []int
|
statuss []int
|
||||||
)
|
)
|
||||||
if err = jxutils.Strings2Objs(params.Statuss, statuss); err == nil {
|
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
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -178,6 +178,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: 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.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JobController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JobController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "GetJobs",
|
Method: "GetJobs",
|
||||||
|
|||||||
Reference in New Issue
Block a user