From d5b94fdbd2982eef91762bdc39878802fa09c2ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Wed, 23 Dec 2020 16:42:45 +0800 Subject: [PATCH] aa --- business/jxstore/cms/job.go | 112 +++++++++++++++++++++++++++--------- business/model/bill.go | 1 + business/model/job.go | 17 +++++- 3 files changed, 102 insertions(+), 28 deletions(-) diff --git a/business/jxstore/cms/job.go b/business/jxstore/cms/job.go index dec540d3a..4d23875b3 100644 --- a/business/jxstore/cms/job.go +++ b/business/jxstore/cms/job.go @@ -79,6 +79,8 @@ func PublishJob(ctx *jxcontext.Context, jobExt *model.JobExt) (errCode string, e } job.CashbackType = model.JobCashbackPrice job.LimitCountType = model.JobLimitCountTypeNoLimit + job.JobLimitAt = 0 + job.AuditLimitAt = 0 default: return errCode, fmt.Errorf("暂不支持的任务类型! %v", job.JobCategoryID) } @@ -269,7 +271,7 @@ func GetJobDetail(ctx *jxcontext.Context, jobID int, lng, lat float64) (job *dao return job, err } -func AcceptJob(ctx *jxcontext.Context, jobID int) (jobOrderID int64, errCode string, err error) { +func AcceptJob(ctx *jxcontext.Context, jobID, dropShippingDeliveryID, dropShippingCount int) (jobOrderID int64, errCode string, err error) { var ( db = dao.GetDB() userID = ctx.GetUserID() @@ -319,14 +321,43 @@ func AcceptJob(ctx *jxcontext.Context, jobID int) (jobOrderID int64, errCode str JobID: jobID, JobOrderID: jxutils.GenJobOrderNo(), UserID: ctx.GetUserID(), - // Status: model.JobOrderStatusAccept, } - // //美团会员任务 - // if job.Type == model.JobTypeMtMember { - // jobOrder.Status = model.JobOrderStatusSpec - // } else { jobOrder.Status = model.JobOrderStatusAccept - // } + //如果是一件代发任务,用户需要支付订单金额 + var userBill *model.UserBill + if job.JobCategoryID == model.JobCategoryIDDropShipping { + if dropShippingCount == 0 || dropShippingDeliveryID == 0 { + return 0, errCode, fmt.Errorf("一件代发订单请输入商品数量和收件人地址!") + } + //验证微信绑定 + if err = auth2.CheckWeixinminiAuthBind(ctx.GetUserID()); err != nil { + return 0, "", err + } + //发布任务要扣除任务总额的保证金,不够扣就要进行充值 + userBill, err = dao.GetUserBill(db, ctx.GetUserID(), "") + if userBill == nil { + return 0, errCode, fmt.Errorf("未查询到该用户的账单!") + } + jobOrder.UserActualPrice = job.DropShippingSkuPrice * dropShippingCount + if userBill.AccountBalance < jobOrder.UserActualPrice { + return 0, model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足!") + } + if deliveryList, _, err2 := dao.QueryUserDeliveryAddress(db, int64(dropShippingDeliveryID), nil, 0, 0, 0); err2 == nil { + delivery := deliveryList[0] + jobOrder.DropShippingCount = dropShippingCount + jobOrder.DropShippingDeliveryID = dropShippingDeliveryID + jobOrder.DropShippingName = delivery.ConsigneeName + jobOrder.DropShippingMobile = delivery.ConsigneeMobile + jobOrder.DropShippingAddress = delivery.Address + jobOrder.DropShippingDetailAddress = delivery.DetailAddress + jobOrder.DropShippingLng = delivery.Lng + jobOrder.DropShippingLat = delivery.Lat + jobOrder.DropShippingAutoAddress = delivery.AutoAddress + jobOrder.DropShippingCityCode = delivery.CityCode + jobOrder.DropShippingDistrictCode = delivery.DistrictCode + } + // jobOrder.Status = model.JobOrderStatusWaitAudit + } dao.Begin(db) defer func() { if r := recover(); r != nil { @@ -345,9 +376,22 @@ func AcceptJob(ctx *jxcontext.Context, jobID int) (jobOrderID int64, errCode str dao.Rollback(db) return } - //任务限时完成 - timer := checkLimitJobOrders(db, job, jobOrder, model.JobTimerTypeAccept) - JobTimerMap[jobOrder.JobOrderID] = timer + if job.JobCategoryID == model.JobCategoryIDDropShipping { + if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeDropShipping, jobOrder.UserActualPrice, job.ID); err != nil { + dao.Rollback(db) + return + } + //一件代发 + if err = SubmitJob(ctx, jobOrder); err != nil { + dao.Rollback(db) + return + } + } else { + //任务限时完成 + timer := checkLimitJobOrders(db, job, jobOrder, model.JobTimerTypeAccept) + JobTimerMap[jobOrder.JobOrderID] = timer + + } dao.Commit(db) return jobOrder.JobOrderID, errCode, err } @@ -417,16 +461,21 @@ func checkLimitJobOrders(db *dao.DaoDB, job *model.Job, jobOrder *model.JobOrder Type: jobTimerType, Status: model.JobTimerStatusWait, StartAt: jobOrder.CreatedAt, - LimitAt: job.JobLimitAt, + // LimitAt: job.JobLimitAt, } - dao.WrapAddIDCULEntity(jobTimer, jxcontext.AdminCtx.GetUserName()) - dao.CreateEntity(db, jobTimer) switch jobTimerType { case model.JobTimerTypeAccept: timer = time.NewTimer(time.Hour * time.Duration(job.JobLimitAt)) + jobTimer.LimitAt = job.JobLimitAt case model.JobTimerTypeSubmit: timer = time.NewTimer(time.Hour * time.Duration(job.AuditLimitAt)) + jobTimer.LimitAt = job.AuditLimitAt + case model.JobTimerTypeDropShipping: + timer = time.NewTimer(time.Hour * time.Duration(job.DropShippingAt)) + jobTimer.LimitAt = job.DropShippingAt } + dao.WrapAddIDCULEntity(jobTimer, jxcontext.AdminCtx.GetUserName()) + dao.CreateEntity(db, jobTimer) utils.CallFuncAsync(func() { select { case <-timer.C: @@ -435,6 +484,8 @@ func checkLimitJobOrders(db *dao.DaoDB, job *model.Job, jobOrder *model.JobOrder UpdateLimitJobOrders(db, timer, job.ID, jobOrder, jobTimer) case model.JobTimerTypeSubmit: UpdateLimitAuditJobOrders(db, timer, job.ID, jobOrder, jobTimer) + case model.JobTimerTypeDropShipping: + } } }) @@ -503,19 +554,28 @@ func SubmitJob(ctx *jxcontext.Context, jobOrder *model.JobOrder) (err error) { jobOrder2.Status = model.JobOrderStatusWaitAudit if _, err = dao.UpdateEntity(db, jobOrder2, "Imgs", "Content", "SubmitAuditAt", "Status", "UserActualPrice"); err == nil { //任务定时器停止 - JobTimerMap[jobOrder2.JobOrderID].Stop() - //任务定时表状态完成 - jobTimer := &model.JobTimer{ - JobID: job.ID, - JobOrderID: jobOrder2.JobOrderID, - Type: model.JobTimerTypeAccept, + if JobTimerMap[jobOrder2.JobOrderID] != nil { + JobTimerMap[jobOrder2.JobOrderID].Stop() + //任务定时表状态完成 + jobTimer := &model.JobTimer{ + JobID: job.ID, + JobOrderID: jobOrder2.JobOrderID, + Type: model.JobTimerTypeAccept, + } + if err = dao.GetEntity(db, jobTimer, "JobID", "JobOrderID", "Type"); err == nil { + jobTimer.Status = model.JobTimerStatusFinish + dao.UpdateEntity(db, jobTimer, "Status") + } } - if err = dao.GetEntity(db, jobTimer, "JobID", "JobOrderID", "Type"); err == nil { - jobTimer.Status = model.JobTimerStatusFinish - dao.UpdateEntity(db, jobTimer, "Status") + //一件代发 + var timerType int + if job.JobCategoryID == model.JobCategoryIDDropShipping { + timerType = model.JobTimerTypeDropShipping + } else { + timerType = model.JobTimerTypeSubmit } //审核定时开启 - timer := checkLimitJobOrders(db, job, jobOrder2, model.JobTimerTypeSubmit) + timer := checkLimitJobOrders(db, job, jobOrder2, timerType) JobAuditTimerMap[jobOrder2.JobOrderID] = timer } return err @@ -531,7 +591,7 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment string) (e job := &model.Job{} job.ID = jobOrder.JobID err = dao.GetEntity(db, job) - if ctx.GetUserID() != job.UserID { + if ctx.GetUserID() != job.UserID && ctx.GetUserName() != "jxadmin" { return fmt.Errorf("任务发起人才能审核!") } //固定返现 @@ -780,7 +840,7 @@ func RechargeMtMembers(ctx *jxcontext.Context, phone int) (errCode string, err e dao.Commit(db2) if err == nil { job, err := dao.GetJob(db2, nil, nil, nil, []int{model.JobTypeMtMember}, utils.ZeroTimeValue, utils.ZeroTimeValue, false) - _, errCode, err = AcceptJob(ctx, job.ID) + _, errCode, err = AcceptJob(ctx, job.ID, 0, 0) if errCode != "" { return errCode, err } @@ -892,7 +952,7 @@ 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) - jobOrderID, errCode, err := AcceptJob(ctx, job.ID) + jobOrderID, errCode, err := AcceptJob(ctx, job.ID, 0, 0) dOrder.JobOrderID = utils.Int64ToStr(jobOrderID) dOrder.SendName = sendDelivery.ConsigneeName dOrder.SendMobile = sendDelivery.ConsigneeMobile diff --git a/business/model/bill.go b/business/model/bill.go index 24250ee56..a6c427116 100644 --- a/business/model/bill.go +++ b/business/model/bill.go @@ -8,6 +8,7 @@ const ( BillTypeSpJob = 14 //特殊任务扣除 BillTypeDivide = 15 //群员做任务分成 BillTypeJobDivide = 16 //做任务实得(被扣除分成后) + BillTypeDropShipping = 17 //一件代发订单扣除 BillTypeMember = 20 //开通会员 diff --git a/business/model/job.go b/business/model/job.go index c13513ca6..b58d08cb0 100644 --- a/business/model/job.go +++ b/business/model/job.go @@ -21,8 +21,9 @@ const ( JobOrderStatusFinish = 110 JobOrderStatusCancel = 115 - JobTimerTypeAccept = 1 //接受任务 - JobTimerTypeSubmit = 2 //交任务 + JobTimerTypeAccept = 1 //接受任务 + JobTimerTypeSubmit = 2 //交任务 + JobTimerTypeDropShipping = 3 //一件代发限时发货 JobTimerStatusWait = 0 //正在进行 JobTimerStatusFinish = 1 //定时任务已完成 @@ -177,6 +178,18 @@ type JobOrder struct { Imgs string `json:"imgs"` //任务审核图片 Comment string `json:"comment"` //审核理由 UserActualPrice int `json:"userActualPrice"` //用户订单实际支付(用户自填) + + DropShippingCount int `json:"dropShippingCount"` //一件代发购买商品数量 + DropShippingDeliveryID int `orm:"column(drop_shipping_delivery_id)" json:"dropShippingDeliveryID"` + DropShippingName string `json:"dropShippingName"` + DropShippingMobile string `json:"dropShippingMobile"` + DropShippingAddress string `json:"dropShippingAddress"` + DropShippingDetailAddress string `json:"dropShippingDetailAddress"` + DropShippingLng float64 `json:"dropShippingLng"` + DropShippingLat float64 `json:"dropShippingLat"` + DropShippingAutoAddress string `json:"dropShippingAutoAddress"` + DropShippingCityCode int `json:"dropShippingCityCode"` + DropShippingDistrictCode int `json:"dropShippingDistrictCode"` } func (v *JobOrder) TableIndex() [][]string {