diff --git a/business/jxcallback/auto_delivery/auto_delivery.go b/business/jxcallback/auto_delivery/auto_delivery.go index 424a6bccb..a5e1057e8 100644 --- a/business/jxcallback/auto_delivery/auto_delivery.go +++ b/business/jxcallback/auto_delivery/auto_delivery.go @@ -90,6 +90,8 @@ func AutoSettingFakeDelivery() { return } + // todo 修改刷单门店配置 storeId-vendorId 指定刷单门店和平台 0京东/1美团/3饿了么/14抖音/99全部平台 + // 获取刷单门店订单 orderList, err := dao.GetOrderListByStoreList(db, utils.StringSlice2Int64(strings.Split(configList[0].Value, ","))) if err != nil { @@ -101,19 +103,26 @@ func AutoSettingFakeDelivery() { } for _, v := range orderList { - //jxutils.CallMsgHandler(func() { // 1.根据订单客户地址获取骑手列表 riderKey := "" - if strings.Contains(v.ConsigneeAddress, "重庆") || strings.Contains(v.ConsigneeAddress, "上海") || strings.Contains(v.ConsigneeAddress, "北京") { + if strings.Contains(v.ConsigneeAddress, "重庆") || strings.Contains(v.ConsigneeAddress, "上海") || strings.Contains(v.ConsigneeAddress, "北京") || strings.Contains(v.ConsigneeAddress, "天津") { riderKey = strings.Split(v.ConsigneeAddress, "市")[0] } else if strings.Contains(v.ConsigneeAddress, "省") { riderKey = strings.Split(v.ConsigneeAddress, "省")[0] } else { storeDetail, _ := dao.GetStoreDetail(db, v.JxStoreID, 0, "") - if strings.Contains(storeDetail.Address, "重庆") || strings.Contains(storeDetail.Address, "上海") || strings.Contains(storeDetail.Address, "北京") { + if strings.Contains(storeDetail.Address, "重庆") || strings.Contains(storeDetail.Address, "上海") || strings.Contains(storeDetail.Address, "北京") || strings.Contains(storeDetail.Address, "天津") { riderKey = strings.Split(storeDetail.Address, "市")[0] } else { riderKey = strings.Split(storeDetail.Address, "省")[0] + if riderKey == "" { + place, err := dao.GetParentCodeByCode(db, storeDetail.CityCode) + if err != nil { + globals.SugarLogger.Debugf("根据门店的城市code获取省份code错误: %s", err) + return + } + riderKey = place.Name[0 : len(place.Name)-3] + } } } @@ -160,6 +169,5 @@ func AutoSettingFakeDelivery() { break } } - //}, jxutils.ComposeUniversalOrderID(v.VendorOrderID, model.VendorIDDD)) } } diff --git a/business/jxcallback/scheduler/basesch/basesch_ext.go b/business/jxcallback/scheduler/basesch/basesch_ext.go index e8f991524..9bb020e8b 100644 --- a/business/jxcallback/scheduler/basesch/basesch_ext.go +++ b/business/jxcallback/scheduler/basesch/basesch_ext.go @@ -43,6 +43,8 @@ func (c *BaseScheduler) CreateWaybillOnProviders(ctx *jxcontext.Context, order * // 创建运单 bill, err2 := c.CreateWaybill(courierVendorID, order, maxDeliveryFee) if err = err2; err == nil { + bill.DesiredFee += model.WayBillDeliveryMarkUp + bill.ActualFee += model.WayBillDeliveryMarkUp bills = append(bills, bill) if createOnlyOne { break diff --git a/business/jxcallback/scheduler/defsch/defsch_ext.go b/business/jxcallback/scheduler/defsch/defsch_ext.go index f296e6cec..287bc3c4a 100644 --- a/business/jxcallback/scheduler/defsch/defsch_ext.go +++ b/business/jxcallback/scheduler/defsch/defsch_ext.go @@ -81,7 +81,7 @@ func (s *DefScheduler) SelfDeliveringAndUpdateStatus(ctx *jxcontext.Context, ven } // 上面是真的转自送,支持美团,饿百,京东,如果时抖店,抖店暂时全部是自送的!但是有骑手信息时,就是一个白嫖单子! - if (order.VendorID == model.VendorIDDD || order.VendorID == model.VendorIDEBAI) && courierName != "" && courierMobile != "" && err == nil { + if courierName != "" && courierMobile != "" && err == nil { timeNow := time.Now() rand.Seed(timeNow.UnixNano()) randNumber := rand.Int63n(640) @@ -108,7 +108,7 @@ func (s *DefScheduler) SelfDeliveringAndUpdateStatus(ctx *jxcontext.Context, ven WaybillFinishedAt: utils.DefaultTimeValue, StatusTime: timeNow.Add(randTime), // 下一状态时间 OriginalData: "", - Remark: "自定义物流单(抖音/饿了么)", + Remark: "自定义物流单(全平台刷单)", VendorOrgCode: order.VendorOrgCode, } err = dao.CreateEntity(dao.GetDB(), bill) @@ -524,6 +524,7 @@ func (s *DefScheduler) QueryOrderWaybillFeeInfoEx(ctx *jxcontext.Context, vendor ErrStr: err.Error(), } } else { + feeInfo.DeliveryFee += model.WayBillDeliveryMarkUp // 加收两毛 feeInfo.TimeoutSecond = timeoutSecond } } else { diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index 2655ebd7b..e124bf8e2 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -207,7 +207,7 @@ func Init() { delivery.UpdateFakeWayBillToTiktok() }, 10*time.Second, 5*time.Second) - // 抖音自动刷单 + // 抖音自动刷单(自动发单拣货,设置骑手) ScheduleTimerFuncByInterval(func() { if beego.BConfig.RunMode != "jxgy" { auto_delivery.AutoSettingFakeDelivery() diff --git a/business/jxutils/smsmsg/smsmsg.go b/business/jxutils/smsmsg/smsmsg.go index 8b8f2f231..970accba3 100644 --- a/business/jxutils/smsmsg/smsmsg.go +++ b/business/jxutils/smsmsg/smsmsg.go @@ -126,9 +126,20 @@ func NotifyPickOrder(order *model.GoodsOrder) (err error) { } updateSth := func(order *model.GoodsOrder, store *dao.StoreDetail, feeType int) (err error) { order.NotifyType = int(store.SMSNotify) - err = partner.CurOrderManager.UpdateOrderFields(order, []string{"NotifyType"}) + partner.CurOrderManager.UpdateOrderFields(order, []string{"NotifyType"}) //品牌余额, 一条5分 - err = partner.CurStoreAcctManager.InsertBrandBill(jxcontext.AdminCtx, store.BrandID, 5, model.BrandBillTypeExpend, feeType, order.VendorOrderID, "") + if order.CreateDeliveryType == model.YES { // 门店发单 + noticeType := 0 + switch feeType { + case model.BrandBillFeeTypeSms: + noticeType = partner.StoreAcctTypeExpendTextMessageNotify + case model.BrandBillFeeTypeVoice: + noticeType = partner.StoreAcctTypeExpendVoiceMessageNotify + } + err = partner.CurStoreAcctManager.InsertStoreAcctExpendAndUpdateStoreAcctBalance(jxcontext.AdminCtx, store.ID, 5, noticeType, order.VendorOrderID, "", 0) + } else if order.CreateDeliveryType == model.NO { // 品牌发单 + err = partner.CurStoreAcctManager.InsertBrandBill(jxcontext.AdminCtx, store.BrandID, 5, model.BrandBillTypeExpend, feeType, order.VendorOrderID, "") + } return err } balance, _ := partner.CurStoreAcctManager.GetBrandBalance(store.BrandID) diff --git a/business/model/api_config.go b/business/model/api_config.go index 298283ac0..65a202e27 100644 --- a/business/model/api_config.go +++ b/business/model/api_config.go @@ -57,9 +57,10 @@ const ( VendorIDDDH5MicroApp = 311 // 钉钉H5微应用 VendorIDDDMobileQRCode = 312 // 钉钉移动接入应用(登录) - VendorIDAutonavi = 321 // 高德导航 - VendorIDQiNiuCloud = 323 // 七牛云 - VendorIDShowAPI = 325 // 万维易源 + VendorIDAutonavi = 321 // 高德导航 + VendorIDQiNiuCloud = 323 // 七牛云 + VendorIDShowAPI = 325 // 万维易源 + WayBillDeliveryMarkUp = 20 // 运单加价两毛钱 // 美团配送门店配送方式 MTWMStorePSWay1 = "1003" //美团跑腿(众包) diff --git a/business/model/dao/place.go b/business/model/dao/place.go index c98dbf68e..9b862a4b2 100644 --- a/business/model/dao/place.go +++ b/business/model/dao/place.go @@ -41,6 +41,20 @@ func GetPlacesByCond(db *DaoDB, enableCond int) (placeList []*model.Place, err e return placeList, err } +// GetParentCodeByCode 根据城市code获取省份code +func GetParentCodeByCode(db *DaoDB, code int) (*model.Place, error) { + sql := ` + SELECT p1.* FROM place p1 + INNER JOIN place p2 On p1.code = p2.parent_code + WHERE p2.code = ? ` + + place := &model.Place{} + if err := GetRow(db, place, sql, []interface{}{code}...); err != nil { + return nil, err + } + return place, nil +} + func GetPlaceByName(db *DaoDB, name string, level int, parentCode int) (place *model.Place, err error) { if db == nil { db = GetDB() diff --git a/business/partner/delivery/fn/waybill.go b/business/partner/delivery/fn/waybill.go index 7a632e46a..53b6df5d9 100644 --- a/business/partner/delivery/fn/waybill.go +++ b/business/partner/delivery/fn/waybill.go @@ -146,13 +146,15 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee } // 查询订单获取配送费 + desireFee, actualFee := GetDesiredFee(order.VendorOrderID) bill = &model.Waybill{ VendorOrderID: order.VendorOrderID, OrderVendorID: order.VendorID, VendorWaybillID: fnOrderId, VendorWaybillID2: order.VendorOrderID, WaybillVendorID: model.VendorIDFengNiao, - DesiredFee: GetDesiredFee(order.VendorOrderID), + DesiredFee: desireFee, + ActualFee: actualFee, } delivery.OnWaybillCreated(bill) return bill, err @@ -193,7 +195,7 @@ func (c *DeliveryHandler) GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInf preCreateOrder.GoodsItemList = goodsList deliveryFeeInfo = &partner.WaybillFeeInfo{} - deliveryFeeInfo.RefDeliveryFee, deliveryFeeInfo.RefAddFee, err = api.FnAPI.PreCreateByShopFn(preCreateOrder) + deliveryFeeInfo.RefDeliveryFee, deliveryFeeInfo.RefAddFee, err = api.FnAPI.PreCreateByShopFn(preCreateOrder) // deliveryFeeInfo.DeliveryFee = deliveryFeeInfo.RefDeliveryFee return deliveryFeeInfo, err } @@ -229,14 +231,14 @@ func OnWaybillMsg(msg *fnpsapi.OrderStatusNottify) (resp *fnpsapi.CallbackRespon orderStatus := utils.Str2Int64(order.VendorStatus) switch orderStatus { case fnpsapi.OrderStatusAcceptCreate, fnpsapi.OrderStatusAccept: // 0 创建订单 - order.DesiredFee = GetDesiredFee(order.VendorOrderID) + order.DesiredFee, order.ActualFee = GetDesiredFee(order.VendorOrderID) order.Status = model.WaybillStatusNew //5 带调度 case fnpsapi.OrderStatusAssigned: //20分配骑手 - order.DesiredFee = GetDesiredFee(order.VendorOrderID) + order.DesiredFee, order.ActualFee = GetDesiredFee(order.VendorOrderID) order.Status = model.WaybillStatusCourierAssigned //12 order.Remark = order.CourierName + "," + order.CourierMobile case fnpsapi.OrderStatusArrived: // 80 到店 - order.DesiredFee = GetDesiredFee(order.VendorOrderID) + order.DesiredFee, order.ActualFee = GetDesiredFee(order.VendorOrderID) order.Status = model.WaybillStatusCourierArrived case fnpsapi.OrderStatusDelivering: // 2 配送中 order.Status = model.WaybillStatusDelivering @@ -320,11 +322,11 @@ func (c *DeliveryHandler) OnWaybillExcept(msg *fnpsapi.AbnormalReportNotify) (re } // 查询订单配送费 -func GetDesiredFee(vendorOrderID string) (desiredFee int64) { +func GetDesiredFee(vendorOrderID string) (desiredFee, acuteFee int64) { if result, err := api.FnAPI.QueryOrder(vendorOrderID); err == nil { - return result.OrderActualAmountCent + return result.OrderActualAmountCent, result.OrderTotalAmountCent } - return desiredFee + return desiredFee, acuteFee } // 获取骑手信息 diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go index ddc0f2073..9e00782ed 100644 --- a/business/partner/delivery/mtps/waybill.go +++ b/business/partner/delivery/mtps/waybill.go @@ -92,6 +92,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m return mtpsapi.Err2CallbackResponse(err, fmt.Sprintf("%s", "获取订单状态错误")) } order.DesiredFee = utils.Float64TwoInt64(utils.MustInterface2Float64(data["delivery_fee"]) * 100) + order.ActualFee = utils.Float64TwoInt64(utils.MustInterface2Float64(data["pay_amount"]) * 100) order.Status = model.WaybillStatusNew case mtpsapi.OrderStatusAccepted: // 已接单 data, err := api.MtpsAPI.QueryOrderStatus(msg.DeliveryID, msg.MtPeisongID) @@ -99,6 +100,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m return mtpsapi.Err2CallbackResponse(err, fmt.Sprintf("%s", "获取订单状态错误")) } order.DesiredFee = utils.Float64TwoInt64(utils.MustInterface2Float64(data["delivery_fee"]) * 100) + order.ActualFee = utils.Float64TwoInt64(utils.MustInterface2Float64(data["pay_amount"]) * 100) order.Status = model.WaybillStatusCourierAssigned order.Remark = order.CourierName + "," + order.CourierMobile case mtpsapi.OrderStatusPickedUp: // 已取货 diff --git a/business/partner/delivery/rider.go b/business/partner/delivery/rider.go index 59706748c..b720c4285 100644 --- a/business/partner/delivery/rider.go +++ b/business/partner/delivery/rider.go @@ -354,6 +354,7 @@ func UpdateFakeWayBillToTiktok() { LogisticsStatus: fakeWayBill[i].Status, } + // 设置骑手和下一状态时间 makeRiderInfo(fakeWayBill[i], riderInfo) if riderInfo.LogisticsContext != model.RiderGetOrderDeliverFailed && riderInfo.LogisticsContext != model.RiderGetOrderDeliverOther && riderInfo.LogisticsContext != model.RiderWaitRider { diff --git a/business/partner/delivery/uupt/waybill.go b/business/partner/delivery/uupt/waybill.go index 635801492..9154c31f5 100644 --- a/business/partner/delivery/uupt/waybill.go +++ b/business/partner/delivery/uupt/waybill.go @@ -317,22 +317,28 @@ func OnWaybillMsg(req *uuptapi.WaybillCallbackParam) (resp *uuptapi.CallbackResp case uuptapi.StateConfirmSuccess: param.Status = model.WaybillStatusNew //5 待调度 param.DesiredFee = reallyPrice + param.ActualFee = reallyPrice case uuptapi.StateRMGrabsOrder: param.Status = model.WaybillStatusCourierAssigned param.Remark = req.DriverName + "," + req.DriverMobile param.DesiredFee = reallyPrice + param.ActualFee = reallyPrice case uuptapi.StateArrivedStore: param.Status = model.WaybillStatusCourierArrived param.DesiredFee = reallyPrice + param.ActualFee = reallyPrice case uuptapi.StatePickUp: param.Status = model.WaybillStatusUuPickUp param.DesiredFee = reallyPrice + param.ActualFee = reallyPrice case uuptapi.StateArrivedDestination: param.Status = model.WaybillStatusUuArrivedDestination param.DesiredFee = reallyPrice + param.ActualFee = reallyPrice case uuptapi.StateReceiverGetGoods: param.Status = model.WaybillStatusDelivered param.DesiredFee = reallyPrice + param.ActualFee = reallyPrice case uuptapi.StateOrderCancel: param.Status = model.WaybillStatusCanceled default: diff --git a/business/partner/partner_delivery.go b/business/partner/partner_delivery.go index 378fcfe82..59ed20cc3 100644 --- a/business/partner/partner_delivery.go +++ b/business/partner/partner_delivery.go @@ -18,10 +18,10 @@ const ( type WaybillFeeInfo struct { ErrCode int `json:"errCode"` ErrStr string `json:"errStr"` - RefDeliveryFee int64 `json:"refDeliveryFee"` // 无用,待删除 - RefAddFee int64 `json:"refAddFee"` // 无用,待删除 - DeliveryFee int64 `json:"deliveryFee"` - TimeoutSecond int `json:"timeoutSecond"` // 系统会自动发运单的倒计时 + RefDeliveryFee int64 `json:"refDeliveryFee"` // 优惠后 + RefAddFee int64 `json:"refAddFee"` // 原始配送费 + DeliveryFee int64 `json:"deliveryFee"` // 优惠后 + TimeoutSecond int `json:"timeoutSecond"` // 系统会自动发运单的倒计时 Waybill *model.Waybill `json:"waybill"` } diff --git a/business/partner/partner_store_acct.go b/business/partner/partner_store_acct.go index cd6bcad4b..e186236df 100644 --- a/business/partner/partner_store_acct.go +++ b/business/partner/partner_store_acct.go @@ -17,6 +17,8 @@ const ( StoreAcctTypeExpendCreateWaybillTip = 21 //手动加小费扣除 StoreAcctTypeExpendCreateWaybill2ndMore = 22 //第二次发运单,并且比上次需要更多钱扣的差价 StoreAcctTypeExpendCreateWaybillDeductFee = 23 //运单取消的违约金 + StoreAcctTypeExpendTextMessageNotify = 24 //短信通知扣费 + StoreAcctTypeExpendVoiceMessageNotify = 26 //电话通知扣费 StoreAcctTypeRealFeeExpend = 25 //真实运费 > 临时运费, 真实运费的值 - 临时运费的值 )