diff --git a/business/jxstore/cms/job.go b/business/jxstore/cms/job.go index 2730b4345..363dad0f4 100644 --- a/business/jxstore/cms/job.go +++ b/business/jxstore/cms/job.go @@ -170,7 +170,7 @@ func GetJobs(ctx *jxcontext.Context, userIDs []string, categoryIDs, statuss, ven 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) { +func AcceptJob(ctx *jxcontext.Context, jobID int) (errCode string, err error) { var ( db = dao.GetDB() userID = ctx.GetUserID() @@ -180,15 +180,15 @@ func AcceptJob(ctx *jxcontext.Context, jobID int) (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 fmt.Errorf("未找到该任务或该任务状态不正常,无法接单!") + return errCode, fmt.Errorf("未找到该任务或该任务状态不正常,无法接单!") } num, err = checkJobOrders(db, 0, "<= "+utils.Int2Str(model.JobOrderStatusAccept), userID, utils.ZeroTimeValue, utils.ZeroTimeValue) if num >= AcceptMaxCount { - return fmt.Errorf("每人最多接取" + utils.Int2Str(AcceptMaxCount) + "个任务,请核实!") + return errCode, fmt.Errorf("每人最多接取" + utils.Int2Str(AcceptMaxCount) + "个任务,请核实!") } num, err = checkJobOrders(db, jobID, "<= "+utils.Int2Str(model.JobOrderStatusWaitAudit), userID, utils.ZeroTimeValue, utils.ZeroTimeValue) if num > 0 { - return fmt.Errorf("您还有此任务未完成,请完成后再接取!") + return errCode, fmt.Errorf("您还有此任务未完成,请完成后再接取!") } // num, err = checkJobOrders(db, "= "+utils.Int2Str(model.JobOrderStatusAuditUnPass), userID, utils.ZeroTimeValue, utils.ZeroTimeValue) // if num > 0 { @@ -198,21 +198,21 @@ func AcceptJob(ctx *jxcontext.Context, jobID int) (err error) { case model.JobLimitCountTypePO: num, err = checkJobOrders(db, jobID, "<> "+utils.Int2Str(model.JobOrderStatusCancel), userID, utils.ZeroTimeValue, utils.ZeroTimeValue) if num > 0 { - return fmt.Errorf("此任务只支持每人做一次!") + return errCode, fmt.Errorf("此任务只支持每人做一次!") } case model.JobLimitCountTypePDO: num, err = checkJobOrders(db, jobID, "<> "+utils.Int2Str(model.JobOrderStatusCancel), userID, DayTimeBegin, DayTimeEnd) if num > 0 { - return fmt.Errorf("此任务只支持每人每天做一次!") + return errCode, fmt.Errorf("此任务只支持每人每天做一次!") } case model.JobLimitCountTypePWO: num, err = checkJobOrders(db, jobID, "<> "+utils.Int2Str(model.JobOrderStatusCancel), userID, WeekTimeBegin, WeekTimeEnd) if num > 0 { - return fmt.Errorf("此任务只支持每人每周做一次!") + return errCode, fmt.Errorf("此任务只支持每人每周做一次!") } case model.JobLimitCountTypeNoLimit: default: - return fmt.Errorf("不支持的任务限次类型!%v", job.LimitCountType) + return errCode, fmt.Errorf("不支持的任务限次类型!%v", job.LimitCountType) } jobOrder := &model.JobOrder{ JobID: jobID, @@ -244,10 +244,35 @@ func AcceptJob(ctx *jxcontext.Context, jobID int) (err error) { dao.Commit(db) //任务限时完成 checkLimitJobOrders(db, job, jobOrder) + //特殊任务,如美团会员,是直接要支付 if jobID == model.JobIDMtMembers { - + userBill, err := dao.GetUserBill(db, ctx.GetUserID(), "") + if err != nil { + return errCode, err + } + if userBill.AccountBalance < job.AvgPrice { + return model.ErrCodeAccountBalanceNotEnough, err + } + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } + }() + //账户支出明细 + //1、账户支出增加一条记录 + if err = financial.AddBillExpend(db, userBill.BillID, model.BillTypeSpJob, job.AvgPrice); err != nil { + dao.Rollback(db) + } + //2、账户表余额减少相应值 + userBill.AccountBalance -= job.AvgPrice + if _, err = dao.UpdateEntity(db, userBill, "AccountBalance"); err != nil { + dao.Rollback(db) + } + dao.Commit(db) } - return err + return errCode, err } func CancelAcceptJob(ctx *jxcontext.Context, jobID int, jobOrderID int64) (err error) { @@ -469,20 +494,3 @@ func ImprotMtMembers(ctx *jxcontext.Context, mtMembers []*model.MtMember) (err e } return err } - -func BuySpecialJob(ctx *jxcontext.Context, jobID int) (errCode string, err error) { - var ( - db = dao.GetDB() - job = &model.Job{} - ) - job.ID = jobID - dao.GetEntity(db, job) - if job == nil { - return errCode, fmt.Errorf("未查询到该任务!") - } - userBill, err := dao.GetUserBill(db, ctx.GetUserID(), "") - if userBill.AccountBalance < job.AvgPrice { - - } - return errCode, err -} diff --git a/business/model/bill.go b/business/model/bill.go index 858bda12d..6e8b928d2 100644 --- a/business/model/bill.go +++ b/business/model/bill.go @@ -6,6 +6,7 @@ const ( BillTypeMember = 3 //开通会员 BillTypeJobCancelOverdue = 4 //任务过期或取消 BillTypeJobAuditUnPassWithCancelOverdue = 5 //任务不通过时,任务已取消或过期 + BillTypeSpJob = 6 //特殊任务扣除 BillTypeCash = 9 //提现 BillTypeInvest = 8 //充值 diff --git a/controllers/job_controller.go b/controllers/job_controller.go index 7cffb2db7..d28070f02 100644 --- a/controllers/job_controller.go +++ b/controllers/job_controller.go @@ -109,8 +109,8 @@ func (c *JobController) GetJobDetail() { // @router /AcceptJob [post] func (c *JobController) AcceptJob() { c.callAcceptJob(func(params *tJobAcceptJobParams) (retVal interface{}, errCode string, err error) { - err = cms.AcceptJob(params.Ctx, params.JobID) - return retVal, "", err + errCode, err = cms.AcceptJob(params.Ctx, params.JobID) + return retVal, errCode, err }) } @@ -203,17 +203,3 @@ func (c *JobController) ImprotMtMembers() { return retVal, "", err }) } - -// @Title 特殊任务购买 -// @Description 特殊任务购买 -// @Param token header string true "认证token" -// @Param jobID formData int true "任务ID" -// @Success 200 {object} controllers.CallResult -// @Failure 200 {object} controllers.CallResult -// @router /BuySpecialJob [post] -func (c *JobController) BuySpecialJob() { - c.callBuySpecialJob(func(params *tJobBuySpecialJobParams) (retVal interface{}, errCode string, err error) { - errCode, err = cms.BuySpecialJob(params.Ctx, params.JobID) - return retVal, "", err - }) -} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index fc5a30851..0f048505d 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -178,15 +178,6 @@ 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: "BuySpecialJob", - Router: `/BuySpecialJob`, - AllowHTTPMethods: []string{"post"}, - 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: "CancelAcceptJob",