This commit is contained in:
苏尹岚
2020-12-30 11:18:59 +08:00
parent 8c5f5cf858
commit 5efd085da5
4 changed files with 83 additions and 37 deletions

View File

@@ -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()

View File

@@ -303,6 +303,7 @@ func AddMessageGroup(ctx *jxcontext.Context, groupID int, userID string) (err er
db = dao.GetDB()
)
messageGroupMembers, err := dao.GetMessageGroupMembers(db, groupID, 0, userID)
messageGroupMembers3, err := dao.GetMessageGroupMembers(db, 0, 0, userID)
messageGroupsResult, err := dao.GetMessageGroups(db, userID, groupID, model.GroupTypeMulit, false, "")
messageGroupsResult2, err := dao.GetMessageGroups(db, "", groupID, model.GroupTypeMulit, false, "")
messageGroupsResult3, err := dao.GetMessageGroups(db, userID, 0, model.GroupTypeMulit, false, "")
@@ -313,6 +314,9 @@ func AddMessageGroup(ctx *jxcontext.Context, groupID int, userID string) (err er
if len(messageGroupMembers) > 0 {
return fmt.Errorf("此用户已经在该群组中了!")
}
if len(messageGroupMembers3) > 0 {
return fmt.Errorf("您已经有群组[%v]了,不能申请加入其它群!", messageGroupMembers3[0].GroupID)
}
if len(messageGroupsResult) > 0 {
return fmt.Errorf("请不要加入自己创建的群!")
}

View File

@@ -46,6 +46,8 @@ func doDailyWork() {
event.DeleteMessageRecord(jxcontext.AdminCtx)
//自动确认收货(刷新状态)
cms.RefreshDropShippingJob(jxcontext.AdminCtx)
//刷新京东快递
cms.RefreshJdDelivery(jxcontext.AdminCtx)
}
// 按时间序列循环

View File

@@ -117,6 +117,7 @@ type DeliveryOrder struct {
PackageCount int `json:"packageCount"` //包裹数
ActualWeight float64 `json:"actualWeight"` //实际重量
IsWeight int `json:"isWeight"` //0代表未验重1代表验重通过2代表不通过
DiffPrice int `json:"diffPrice"` //如果超重了,扣除的差额
Comment string `orm:"size(255)" json:"comment"` //备注
JobOrderID string `orm:"column(job_order_id)" json:"jobOrderID"`
}