From 5efd085da565b2c8bb06a37426ccf1051f7346dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Wed, 30 Dec 2020 11:18:59 +0800 Subject: [PATCH] aa --- business/jxstore/cms/job.go | 113 +++++++++++++++++++++----------- business/jxstore/event/event.go | 4 ++ business/jxstore/misc/misc.go | 2 + business/model/order.go | 1 + 4 files changed, 83 insertions(+), 37 deletions(-) diff --git a/business/jxstore/cms/job.go b/business/jxstore/cms/job.go index 4346f0db4..fe8214493 100644 --- a/business/jxstore/cms/job.go +++ b/business/jxstore/cms/job.go @@ -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() diff --git a/business/jxstore/event/event.go b/business/jxstore/event/event.go index 059a64a1f..a452091cf 100644 --- a/business/jxstore/event/event.go +++ b/business/jxstore/event/event.go @@ -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("请不要加入自己创建的群!") } diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index d4e0379cc..caa5701ed 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -46,6 +46,8 @@ func doDailyWork() { event.DeleteMessageRecord(jxcontext.AdminCtx) //自动确认收货(刷新状态) cms.RefreshDropShippingJob(jxcontext.AdminCtx) + //刷新京东快递 + cms.RefreshJdDelivery(jxcontext.AdminCtx) } // 按时间序列循环 diff --git a/business/model/order.go b/business/model/order.go index 1d855fa51..1d61ad950 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -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"` }