|
|
|
|
@@ -296,10 +296,10 @@ func AcceptJob(ctx *jxcontext.Context, jobID, dropShippingDeliveryID, dropShippi
|
|
|
|
|
if job.UserID == "" || job.Status == model.JobStatusFailed || job.Status == model.JobStatusOverdue || job.FinishedAt.Sub(time.Now()) <= 0 || job.SurplusCount <= 0 || job.LimitCountType <= 0 {
|
|
|
|
|
return 0, errCode, fmt.Errorf("未找到该任务或该任务状态不正常,无法接单!")
|
|
|
|
|
}
|
|
|
|
|
num, err = checkJobOrders(db, 0, "<= "+utils.Int2Str(model.JobOrderStatusAccept), userID, utils.ZeroTimeValue, utils.ZeroTimeValue)
|
|
|
|
|
if num >= AcceptMaxCount {
|
|
|
|
|
return 0, errCode, fmt.Errorf("每人最多接取" + utils.Int2Str(AcceptMaxCount) + "个任务,请核实!")
|
|
|
|
|
}
|
|
|
|
|
// num, err = checkJobOrders(db, 0, "<= "+utils.Int2Str(model.JobOrderStatusAccept), userID, utils.ZeroTimeValue, utils.ZeroTimeValue)
|
|
|
|
|
// if num >= AcceptMaxCount {
|
|
|
|
|
// return 0, errCode, fmt.Errorf("每人最多接取" + utils.Int2Str(AcceptMaxCount) + "个任务,请核实!")
|
|
|
|
|
// }
|
|
|
|
|
num, err = checkJobOrders(db, jobID, "<= "+utils.Int2Str(model.JobOrderStatusWaitAudit), userID, utils.ZeroTimeValue, utils.ZeroTimeValue)
|
|
|
|
|
if num > 0 {
|
|
|
|
|
return 0, errCode, fmt.Errorf("您还有此任务未完成,请完成后再接取!")
|
|
|
|
|
@@ -1038,9 +1038,11 @@ func SendJdDelivery(ctx *jxcontext.Context, dOrder *model.DeliveryOrder) (errCod
|
|
|
|
|
dao.Rollback(db)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
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, 0, 0)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return errCode, fmt.Errorf("发送失败![%v]", err)
|
|
|
|
|
}
|
|
|
|
|
dOrder.JobOrderID = utils.Int64ToStr(jobOrderID)
|
|
|
|
|
dOrder.SendName = sendDelivery.ConsigneeName
|
|
|
|
|
dOrder.SendMobile = sendDelivery.ConsigneeMobile
|
|
|
|
|
@@ -1062,6 +1064,7 @@ func SendJdDelivery(ctx *jxcontext.Context, dOrder *model.DeliveryOrder) (errCod
|
|
|
|
|
dao.Rollback(db)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
dao.Commit(db)
|
|
|
|
|
if errCode != "" {
|
|
|
|
|
return errCode, err
|
|
|
|
|
}
|
|
|
|
|
@@ -1133,40 +1136,75 @@ func GetJdDelivery(ctx *jxcontext.Context, status int, fromTime, toTime string,
|
|
|
|
|
if status != 0 {
|
|
|
|
|
statuss = append(statuss, status)
|
|
|
|
|
}
|
|
|
|
|
pages, _ := dao.GetDeliveryOrders(db, []string{ctx.GetUserID()}, []int{model.OrderStatusNew, model.OrderStatusDelivering}, utils.ZeroTimeValue, utils.ZeroTimeValue, 9999, 0)
|
|
|
|
|
for _, v := range pages.Data.([]*dao.GetDeliveryOrdersResult) {
|
|
|
|
|
if v != nil && v.VendorWaybillID != "" {
|
|
|
|
|
var (
|
|
|
|
|
isDeliverying bool
|
|
|
|
|
isFinished bool
|
|
|
|
|
)
|
|
|
|
|
if results, err := api.JdEclpAPI.QueryDynamicTraceInfo(v.VendorWaybillID); err == nil {
|
|
|
|
|
for _, result := range results {
|
|
|
|
|
if result.State == jdeclpapi.TraceInfoStateM640 {
|
|
|
|
|
isDeliverying = true
|
|
|
|
|
}
|
|
|
|
|
if result.State == jdeclpapi.TraceInfoState150 {
|
|
|
|
|
isFinished = true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
dOrder := &model.DeliveryOrder{}
|
|
|
|
|
dOrder.ID = v.ID
|
|
|
|
|
if err = dao.GetEntity(db, dOrder); err == nil {
|
|
|
|
|
if isFinished {
|
|
|
|
|
dOrder.Status = model.OrderStatusFinished
|
|
|
|
|
} else if isDeliverying {
|
|
|
|
|
dOrder.Status = model.OrderStatusDelivering
|
|
|
|
|
} else {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
dao.UpdateEntity(db, dOrder, "Status")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
RefreshJdDelivery(ctx)
|
|
|
|
|
return dao.GetDeliveryOrders(db, []string{ctx.GetUserID()}, statuss, utils.Str2Time(fromTime), utils.Str2Time(toTime), pageSize, offset)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func RefreshJdDelivery(ctx *jxcontext.Context) (err error) {
|
|
|
|
|
var (
|
|
|
|
|
db = dao.GetDB()
|
|
|
|
|
userID string
|
|
|
|
|
userIDs []string
|
|
|
|
|
)
|
|
|
|
|
if ctx.GetUserName() == "jxadmin" {
|
|
|
|
|
userID = ""
|
|
|
|
|
} else {
|
|
|
|
|
userID = ctx.GetUserID()
|
|
|
|
|
userIDs = append(userIDs, userID)
|
|
|
|
|
}
|
|
|
|
|
pages, _ := dao.GetDeliveryOrders(db, userIDs, []int{model.OrderStatusNew, model.OrderStatusDelivering}, utils.ZeroTimeValue, utils.ZeroTimeValue, 9999, 0)
|
|
|
|
|
list := pages.Data.([]*dao.GetDeliveryOrdersResult)
|
|
|
|
|
task := tasksch.NewParallelTask("RefreshJdDelivery", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), jxcontext.AdminCtx,
|
|
|
|
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
|
|
|
v := batchItemList[0].(*dao.GetDeliveryOrdersResult)
|
|
|
|
|
if v != nil && v.VendorWaybillID != "" {
|
|
|
|
|
var (
|
|
|
|
|
isDeliverying, isFinished, isCancel bool
|
|
|
|
|
)
|
|
|
|
|
if results, err := api.JdEclpAPI.QueryDynamicTraceInfo(v.VendorWaybillID); err == nil {
|
|
|
|
|
for _, result := range results {
|
|
|
|
|
if result.State == jdeclpapi.TraceInfoStateM640 {
|
|
|
|
|
isDeliverying = true
|
|
|
|
|
}
|
|
|
|
|
if result.State == jdeclpapi.TraceInfoStateM650 || result.State == jdeclpapi.TraceInfoStateM790 {
|
|
|
|
|
isCancel = true
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
if result.State == jdeclpapi.TraceInfoState150 {
|
|
|
|
|
isFinished = true
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
dOrder := &model.DeliveryOrder{}
|
|
|
|
|
dOrder.ID = v.ID
|
|
|
|
|
if err = dao.GetEntity(db, dOrder); err == nil {
|
|
|
|
|
if isCancel {
|
|
|
|
|
//退钱给发快递的
|
|
|
|
|
dOrder.Status = model.OrderStatusCanceled
|
|
|
|
|
userBill, _ := dao.GetUserBill(db, v.UserID, "")
|
|
|
|
|
err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeSpJob, v.PayPrice+v.DiffPrice, 2)
|
|
|
|
|
} else if isFinished {
|
|
|
|
|
//快递任务要完成
|
|
|
|
|
dOrder.Status = model.OrderStatusFinished
|
|
|
|
|
err = AuditJob(ctx, utils.Str2Int(dOrder.JobOrderID), model.JobOrderStatusAuditPass, "快递完成,自动审核通过", "")
|
|
|
|
|
} else if isDeliverying {
|
|
|
|
|
dOrder.Status = model.OrderStatusDelivering
|
|
|
|
|
} else {
|
|
|
|
|
return retVal, err
|
|
|
|
|
}
|
|
|
|
|
if err == nil {
|
|
|
|
|
dao.UpdateEntity(db, dOrder, "Status")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return retVal, err
|
|
|
|
|
}, list)
|
|
|
|
|
tasksch.HandleTask(task, nil, true).Run()
|
|
|
|
|
task.GetID()
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetDeliveryDetail(ctx *jxcontext.Context, vendorWaybillID string) (queryDynamicTraceInfo []*jdeclpapi.QueryDynamicTraceInfoResult, err error) {
|
|
|
|
|
return api.JdEclpAPI.QueryDynamicTraceInfo(vendorWaybillID)
|
|
|
|
|
}
|
|
|
|
|
@@ -1239,10 +1277,11 @@ func CheckJdDeliveryWeight(ctx *jxcontext.Context) (err error) {
|
|
|
|
|
return retVal, err
|
|
|
|
|
}
|
|
|
|
|
deliveryOrder.IsWeight = 2 //超重
|
|
|
|
|
deliveryOrder.DiffPrice = utils.Float64TwoInt(diffPrice)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
deliveryOrder.ActualWeight = waybill.Weight
|
|
|
|
|
dao.UpdateEntity(db, deliveryOrder, "IsWeight", "ActualWeight")
|
|
|
|
|
dao.UpdateEntity(db, deliveryOrder, "IsWeight", "ActualWeight", "DiffPrice")
|
|
|
|
|
return retVal, err
|
|
|
|
|
}, deliveryOrders)
|
|
|
|
|
tasksch.HandleTask(task, nil, true).Run()
|
|
|
|
|
|