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.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

View File

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

View File

@@ -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 {