aa
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -8,6 +8,7 @@ const (
|
||||
BillTypeSpJob = 14 //特殊任务扣除
|
||||
BillTypeDivide = 15 //群员做任务分成
|
||||
BillTypeJobDivide = 16 //做任务实得(被扣除分成后)
|
||||
BillTypeDropShipping = 17 //一件代发订单扣除
|
||||
|
||||
BillTypeMember = 20 //开通会员
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user