diff --git a/business/jxstore/cms/job.go b/business/jxstore/cms/job.go index 1b504ca53..5b39d752f 100644 --- a/business/jxstore/cms/job.go +++ b/business/jxstore/cms/job.go @@ -217,7 +217,7 @@ func GetJobDetail(ctx *jxcontext.Context, jobID int, lng, lat float64) (job *dao return job, err } -func AcceptJob(ctx *jxcontext.Context, jobID int) (errCode string, err error) { +func AcceptJob(ctx *jxcontext.Context, jobID int) (jobOrderID int64, errCode string, err error) { var ( db = dao.GetDB() userID = ctx.GetUserID() @@ -229,15 +229,15 @@ func AcceptJob(ctx *jxcontext.Context, jobID int) (errCode string, err error) { job.ID = jobID err = dao.GetEntity(db, job) if job.UserID == "" || job.Status == model.JobStatusFailed || job.Status == model.JobStatusOverdue || job.FinishedAt.Sub(time.Now()) <= 0 || job.SurplusCount <= 0 || job.LimitCountType <= 0 { - return errCode, fmt.Errorf("未找到该任务或该任务状态不正常,无法接单!") + return 0, errCode, fmt.Errorf("未找到该任务或该任务状态不正常,无法接单!") } num, err = checkJobOrders(db, 0, "<= "+utils.Int2Str(model.JobOrderStatusAccept), userID, utils.ZeroTimeValue, utils.ZeroTimeValue) if num >= AcceptMaxCount { - return errCode, fmt.Errorf("每人最多接取" + utils.Int2Str(AcceptMaxCount) + "个任务,请核实!") + return 0, errCode, fmt.Errorf("每人最多接取" + utils.Int2Str(AcceptMaxCount) + "个任务,请核实!") } num, err = checkJobOrders(db, jobID, "<= "+utils.Int2Str(model.JobOrderStatusWaitAudit), userID, utils.ZeroTimeValue, utils.ZeroTimeValue) if num > 0 { - return errCode, fmt.Errorf("您还有此任务未完成,请完成后再接取!") + return 0, errCode, fmt.Errorf("您还有此任务未完成,请完成后再接取!") } // num, err = checkJobOrders(db, "= "+utils.Int2Str(model.JobOrderStatusAuditUnPass), userID, utils.ZeroTimeValue, utils.ZeroTimeValue) // if num > 0 { @@ -247,21 +247,21 @@ func AcceptJob(ctx *jxcontext.Context, jobID int) (errCode string, err error) { case model.JobLimitCountTypePO: num, err = checkJobOrders(db, jobID, "<> "+utils.Int2Str(model.JobOrderStatusCancel), userID, utils.ZeroTimeValue, utils.ZeroTimeValue) if num > 0 { - return errCode, fmt.Errorf("此任务只支持每人做一次!") + return 0, errCode, fmt.Errorf("此任务只支持每人做一次!") } case model.JobLimitCountTypePDO: num, err = checkJobOrders(db, jobID, "<> "+utils.Int2Str(model.JobOrderStatusCancel), userID, DayTimeBegin, DayTimeEnd) if num > 0 { - return errCode, fmt.Errorf("此任务只支持每人每天做一次!") + return 0, errCode, fmt.Errorf("此任务只支持每人每天做一次!") } case model.JobLimitCountTypePWO: num, err = checkJobOrders(db, jobID, "<> "+utils.Int2Str(model.JobOrderStatusCancel), userID, WeekTimeBegin, WeekTimeEnd) if num > 0 { - return errCode, fmt.Errorf("此任务只支持每人每周做一次!") + return 0, errCode, fmt.Errorf("此任务只支持每人每周做一次!") } case model.JobLimitCountTypeNoLimit: default: - return errCode, fmt.Errorf("不支持的任务限次类型!%v", job.LimitCountType) + return 0, errCode, fmt.Errorf("不支持的任务限次类型!%v", job.LimitCountType) } jobOrder := &model.JobOrder{ JobID: jobID, @@ -297,7 +297,7 @@ func AcceptJob(ctx *jxcontext.Context, jobID int) (errCode string, err error) { timer := checkLimitJobOrders(db, job, jobOrder, model.JobTimerTypeAccept) JobTimerMap[jobOrder.JobOrderID] = timer dao.Commit(db) - return errCode, err + return jobOrder.JobOrderID, errCode, err } func CancelAcceptJob(ctx *jxcontext.Context, jobID int, jobOrderID int64) (err error) { @@ -656,7 +656,7 @@ func RechargeMtMembers(ctx *jxcontext.Context, phone int) (errCode string, err e dao.UpdateEntity(db, mtMember, "DeletedAt") if err == nil { job, err := dao.GetJob(db, nil, nil, nil, []int{model.JobTypeMtMember}, utils.ZeroTimeValue, utils.ZeroTimeValue, false) - errCode, err = AcceptJob(ctx, job.ID) + _, errCode, err = AcceptJob(ctx, job.ID) if errCode != "" { return errCode, err } @@ -754,10 +754,6 @@ func SendJdDelivery(ctx *jxcontext.Context, dOrder *model.DeliveryOrder) (errCod panic(r) } }() - if err = dao.CreateEntity(db, dOrder); err != nil { - dao.Rollback(db) - return - } //账户支出明细 if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeSpJob, dOrder.PayPrice); err != nil { dao.Rollback(db) @@ -765,7 +761,12 @@ func SendJdDelivery(ctx *jxcontext.Context, dOrder *model.DeliveryOrder) (errCod } dao.Commit(db) job, err := dao.GetJob(db, nil, nil, nil, []int{model.JobTypeJdDelivery}, utils.ZeroTimeValue, utils.ZeroTimeValue, false) - errCode, err = AcceptJob(ctx, job.ID) + jobOrderID, errCode, err := AcceptJob(ctx, job.ID) + dOrder.JobOrderID = utils.Int64ToStr(jobOrderID) + if err = dao.CreateEntity(db, dOrder); err != nil { + dao.Rollback(db) + return + } if errCode != "" { return errCode, err } @@ -820,6 +821,10 @@ func CancelJdDelivery(ctx *jxcontext.Context, vendorWaybillID, reason string) (e } if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeSpJob, dOrder.PayPrice); err != nil { dao.Rollback(db) + return + } + if err = CancelAcceptJob(ctx, 2, utils.Str2Int64(dOrder.JobOrderID)); err != nil { + dao.Rollback(db) } dao.Commit(db) return err diff --git a/business/model/order.go b/business/model/order.go index 93fb0b616..38ba31f82 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -100,6 +100,7 @@ type DeliveryOrder struct { ActualWeight float64 `json:"actualWeight"` //实际重量 IsWeight int `json:"isWeight"` //0代表未验重,1代表验重通过,2代表不通过 Comment string `orm:"size(255)" json:"comment"` //备注 + JobOrderID string `orm:"column(job_order_id)" json:"jobOrderID"` } func (v *DeliveryOrder) TableUnique() [][]string { diff --git a/controllers/job_controller.go b/controllers/job_controller.go index a2d7a9b81..62676287d 100644 --- a/controllers/job_controller.go +++ b/controllers/job_controller.go @@ -118,7 +118,7 @@ func (c *JobController) GetJobDetail() { // @router /AcceptJob [post] func (c *JobController) AcceptJob() { c.callAcceptJob(func(params *tJobAcceptJobParams) (retVal interface{}, errCode string, err error) { - errCode, err = cms.AcceptJob(params.Ctx, params.JobID) + _, errCode, err = cms.AcceptJob(params.Ctx, params.JobID) return retVal, errCode, err }) }