This commit is contained in:
苏尹岚
2020-12-23 16:42:45 +08:00
parent d48952079b
commit d5b94fdbd2
3 changed files with 102 additions and 28 deletions

View File

@@ -79,6 +79,8 @@ func PublishJob(ctx *jxcontext.Context, jobExt *model.JobExt) (errCode string, e
} }
job.CashbackType = model.JobCashbackPrice job.CashbackType = model.JobCashbackPrice
job.LimitCountType = model.JobLimitCountTypeNoLimit job.LimitCountType = model.JobLimitCountTypeNoLimit
job.JobLimitAt = 0
job.AuditLimitAt = 0
default: default:
return errCode, fmt.Errorf("暂不支持的任务类型! %v", job.JobCategoryID) 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 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 ( var (
db = dao.GetDB() db = dao.GetDB()
userID = ctx.GetUserID() userID = ctx.GetUserID()
@@ -319,14 +321,43 @@ func AcceptJob(ctx *jxcontext.Context, jobID int) (jobOrderID int64, errCode str
JobID: jobID, JobID: jobID,
JobOrderID: jxutils.GenJobOrderNo(), JobOrderID: jxutils.GenJobOrderNo(),
UserID: ctx.GetUserID(), UserID: ctx.GetUserID(),
// Status: model.JobOrderStatusAccept,
} }
// //美团会员任务
// if job.Type == model.JobTypeMtMember {
// jobOrder.Status = model.JobOrderStatusSpec
// } else {
jobOrder.Status = model.JobOrderStatusAccept 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) dao.Begin(db)
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
@@ -345,9 +376,22 @@ func AcceptJob(ctx *jxcontext.Context, jobID int) (jobOrderID int64, errCode str
dao.Rollback(db) dao.Rollback(db)
return return
} }
//任务限时完成 if job.JobCategoryID == model.JobCategoryIDDropShipping {
timer := checkLimitJobOrders(db, job, jobOrder, model.JobTimerTypeAccept) if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeDropShipping, jobOrder.UserActualPrice, job.ID); err != nil {
JobTimerMap[jobOrder.JobOrderID] = timer 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) dao.Commit(db)
return jobOrder.JobOrderID, errCode, err return jobOrder.JobOrderID, errCode, err
} }
@@ -417,16 +461,21 @@ func checkLimitJobOrders(db *dao.DaoDB, job *model.Job, jobOrder *model.JobOrder
Type: jobTimerType, Type: jobTimerType,
Status: model.JobTimerStatusWait, Status: model.JobTimerStatusWait,
StartAt: jobOrder.CreatedAt, StartAt: jobOrder.CreatedAt,
LimitAt: job.JobLimitAt, // LimitAt: job.JobLimitAt,
} }
dao.WrapAddIDCULEntity(jobTimer, jxcontext.AdminCtx.GetUserName())
dao.CreateEntity(db, jobTimer)
switch jobTimerType { switch jobTimerType {
case model.JobTimerTypeAccept: case model.JobTimerTypeAccept:
timer = time.NewTimer(time.Hour * time.Duration(job.JobLimitAt)) timer = time.NewTimer(time.Hour * time.Duration(job.JobLimitAt))
jobTimer.LimitAt = job.JobLimitAt
case model.JobTimerTypeSubmit: case model.JobTimerTypeSubmit:
timer = time.NewTimer(time.Hour * time.Duration(job.AuditLimitAt)) 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() { utils.CallFuncAsync(func() {
select { select {
case <-timer.C: 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) UpdateLimitJobOrders(db, timer, job.ID, jobOrder, jobTimer)
case model.JobTimerTypeSubmit: case model.JobTimerTypeSubmit:
UpdateLimitAuditJobOrders(db, timer, job.ID, jobOrder, jobTimer) 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 jobOrder2.Status = model.JobOrderStatusWaitAudit
if _, err = dao.UpdateEntity(db, jobOrder2, "Imgs", "Content", "SubmitAuditAt", "Status", "UserActualPrice"); err == nil { if _, err = dao.UpdateEntity(db, jobOrder2, "Imgs", "Content", "SubmitAuditAt", "Status", "UserActualPrice"); err == nil {
//任务定时器停止 //任务定时器停止
JobTimerMap[jobOrder2.JobOrderID].Stop() if JobTimerMap[jobOrder2.JobOrderID] != nil {
//任务定时表状态完成 JobTimerMap[jobOrder2.JobOrderID].Stop()
jobTimer := &model.JobTimer{ //任务定时表状态完成
JobID: job.ID, jobTimer := &model.JobTimer{
JobOrderID: jobOrder2.JobOrderID, JobID: job.ID,
Type: model.JobTimerTypeAccept, 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 var timerType int
dao.UpdateEntity(db, jobTimer, "Status") 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 JobAuditTimerMap[jobOrder2.JobOrderID] = timer
} }
return err return err
@@ -531,7 +591,7 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment string) (e
job := &model.Job{} job := &model.Job{}
job.ID = jobOrder.JobID job.ID = jobOrder.JobID
err = dao.GetEntity(db, job) err = dao.GetEntity(db, job)
if ctx.GetUserID() != job.UserID { if ctx.GetUserID() != job.UserID && ctx.GetUserName() != "jxadmin" {
return fmt.Errorf("任务发起人才能审核!") return fmt.Errorf("任务发起人才能审核!")
} }
//固定返现 //固定返现
@@ -780,7 +840,7 @@ func RechargeMtMembers(ctx *jxcontext.Context, phone int) (errCode string, err e
dao.Commit(db2) dao.Commit(db2)
if err == nil { if err == nil {
job, err := dao.GetJob(db2, nil, nil, nil, []int{model.JobTypeMtMember}, utils.ZeroTimeValue, utils.ZeroTimeValue, false) 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 != "" { if errCode != "" {
return errCode, err return errCode, err
} }
@@ -892,7 +952,7 @@ func SendJdDelivery(ctx *jxcontext.Context, dOrder *model.DeliveryOrder) (errCod
} }
dao.Commit(db) dao.Commit(db)
job, err := dao.GetJob(db, nil, nil, nil, []int{model.JobTypeJdDelivery}, utils.ZeroTimeValue, utils.ZeroTimeValue, false) 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.JobOrderID = utils.Int64ToStr(jobOrderID)
dOrder.SendName = sendDelivery.ConsigneeName dOrder.SendName = sendDelivery.ConsigneeName
dOrder.SendMobile = sendDelivery.ConsigneeMobile dOrder.SendMobile = sendDelivery.ConsigneeMobile

View File

@@ -8,6 +8,7 @@ const (
BillTypeSpJob = 14 //特殊任务扣除 BillTypeSpJob = 14 //特殊任务扣除
BillTypeDivide = 15 //群员做任务分成 BillTypeDivide = 15 //群员做任务分成
BillTypeJobDivide = 16 //做任务实得(被扣除分成后) BillTypeJobDivide = 16 //做任务实得(被扣除分成后)
BillTypeDropShipping = 17 //一件代发订单扣除
BillTypeMember = 20 //开通会员 BillTypeMember = 20 //开通会员

View File

@@ -21,8 +21,9 @@ const (
JobOrderStatusFinish = 110 JobOrderStatusFinish = 110
JobOrderStatusCancel = 115 JobOrderStatusCancel = 115
JobTimerTypeAccept = 1 //接受任务 JobTimerTypeAccept = 1 //接受任务
JobTimerTypeSubmit = 2 //交任务 JobTimerTypeSubmit = 2 //交任务
JobTimerTypeDropShipping = 3 //一件代发限时发货
JobTimerStatusWait = 0 //正在进行 JobTimerStatusWait = 0 //正在进行
JobTimerStatusFinish = 1 //定时任务已完成 JobTimerStatusFinish = 1 //定时任务已完成
@@ -177,6 +178,18 @@ type JobOrder struct {
Imgs string `json:"imgs"` //任务审核图片 Imgs string `json:"imgs"` //任务审核图片
Comment string `json:"comment"` //审核理由 Comment string `json:"comment"` //审核理由
UserActualPrice int `json:"userActualPrice"` //用户订单实际支付(用户自填) 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 { func (v *JobOrder) TableIndex() [][]string {