diff --git a/business/jxcallback/scheduler/basesch/basesch_ext.go b/business/jxcallback/scheduler/basesch/basesch_ext.go index c7df132cb..610d298c3 100644 --- a/business/jxcallback/scheduler/basesch/basesch_ext.go +++ b/business/jxcallback/scheduler/basesch/basesch_ext.go @@ -230,7 +230,7 @@ func (c *BaseScheduler) AgreeOrRefuseRefund(ctx *jxcontext.Context, afsOrderID s ) waybills, _ := dao.GetWaybills(db, order.VendorOrderID) //美团的订单如果是同意全部退款,要取消所有三方运单并停止调度 - if order.VendorID == model.VendorIDMTWM || order.VendorID == model.VendorIDJX { + if order.VendorID == model.VendorIDMTWM || order.VendorID == model.VendorIDJX || order.VendorID == model.VendorIDEBAI { var ( afsCount, orderCount int ) @@ -255,6 +255,16 @@ func (c *BaseScheduler) AgreeOrRefuseRefund(ctx *jxcontext.Context, afsOrderID s order.VendorStatus = utils.Int2Str(model.OrderStatusCanceled) partner.CurOrderManager.UpdateOrderFields(order, []string{"DeliveryFlag", "Status", "VendorStatus"}) } + if afsCount == orderCount && order.VendorID == model.VendorIDEBAI { + order.DeliveryFlag |= model.OrderDeliveryFlagMaskScheduleDisabled + order.Status = model.OrderStatusCanceled + order.VendorStatus = "10" // 饿百取消订单 + partner.CurOrderManager.UpdateOrderFields(order, []string{"DeliveryFlag", "Status", "VendorStatus"}) + for _, v := range waybills { + c.CancelWaybill(v, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrActive) + } + + } } if order.EarningType == model.EarningTypePoints { var ( diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index 1ce45fbc0..33c0fa3fa 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -222,9 +222,9 @@ func Init() { // 每天更新美团门当的结算信息和配送费等等 ScheduleTimerFunc("LoadingStoreOrderSettleAmount", func() { - // delivery.LoadingStoreOrderSettleAmount(0, 0, nil) + delivery.LoadingStoreOrderSettleAmount(0, 0, nil) }, []string{ - "04:50:00", + "19:50:00", }) // 定时任务更新昨天的都要商品和本地商品id的映射关系 diff --git a/business/partner/delivery/rider.go b/business/partner/delivery/rider.go index fbebed0d2..01a479019 100644 --- a/business/partner/delivery/rider.go +++ b/business/partner/delivery/rider.go @@ -20,6 +20,33 @@ import ( "git.rosy.net.cn/jx-callback/globals" ) +var ( + // 换成京西结算账号 + jxSettleIdMap = map[int64]bool{ + // 菜市 + 7030017: true, + 7974502: true, + 100639968: true, + 100715370: true, + 100822700: true, + 101093797: true, + 102715080: true, + 102114997: true, + 102641826: true, + 102651220: true, + // 果园啊 + 6572945: true, + 6772759: true, + 101968432: true, + 102101411: true, + 102176700: true, + 102369597: true, + 102416681: true, + 102924441: true, + 103376926: true, + } +) + // 订单骑手信息推送:将获取到的三方配送订单,且订单状态为配送中的订单,将配送人员的信息返回给订单方 // 该方法为定时任务,没五分钟推送一次订单消息,订单状态发生变化时 //配送状态code,如下提供配送状态枚举值, @@ -62,6 +89,12 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) { if orderId == "" && v.VendorID == model.VendorIDDD { // 抖音门店订单除了三方配送回调时推送,不在主动推送配送消息 continue } + + // 平台自配送 + if v.WaybillVendorID == model.YES { + continue + } + if orderId == "" { // 订单id为空是,是定时轮询操作,不做此状态 waybillList, _ := dao.GetWaybills(dao.GetDB(), v.VendorOrderID) if len(waybillList) > 0 && waybillList[0].Status > model.WaybillStatusEndBegin { @@ -87,16 +120,11 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) { } } - if riderInfo == nil || wayBillStatus == model.OrderStatusNew || wayBillStatus == model.OrderStatusCanceled || (riderInfo.CourierName == "" && v.WaybillVendorID == -1 && v.DeliveryType == "store") { // 真商家自送 + if wayBillStatus == model.OrderStatusNew || wayBillStatus == model.OrderStatusCanceled || (v.WaybillVendorID == -1 && v.DeliveryType == "store") { // 真商家自送 riderInfo.OrderId = v.VendorOrderID riderInfo.CourierName = "门店老板" - riderInfo.CourierPhone = "18048531223" riderInfo.LogisticsProviderCode = "10017" riderInfo.LogisticsStatus = v.Status - storeDetail, err := dao.GetStoreDetail(dao.GetDB(), v.JxStoreID, 0, "") - if err != nil { - riderInfo.CourierPhone = storeDetail.Tel1 - } } switch riderInfo.LogisticsStatus { @@ -104,7 +132,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) { riderInfo.LogisticsStatus = 0 riderInfo.OpCode = tiktok_api.TiktokLogisticsStatusCALLRIDER case 12: // 骑手接单 - riderInfo.LogisticsStatus = 12 + riderInfo.LogisticsStatus = 10 riderInfo.OpCode = tiktok_api.TiktokLogisticsORDERRECEIVED case 15: // 到店 riderInfo.LogisticsStatus = 15 @@ -136,13 +164,27 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) { if riderInfo.Latitude == "" { riderInfo.Latitude = utils.Float64ToStr(utils.Int2Float64(v.ConsigneeLat) / 1000000) } + + if riderInfo.CourierPhone == "" { + storeDetail, err := dao.GetStoreDetail(dao.GetDB(), v.JxStoreID, 0, "") + if err != nil { + riderInfo.CourierPhone = storeDetail.Tel1 + } + riderInfo.CourierName = "老板" + } + if riderInfo.CourierPhone == "" { + riderInfo.CourierName = "石锋" + riderInfo.CourierPhone = "18048531223" + } + if riderInfo.ThirdCarrierOrderId == "" { + riderInfo.ThirdCarrierOrderId = riderInfo.OrderId + "_fake" + } // 目前只推送美团骑手信息 switch v.VendorID { case model.VendorIDMTWM: // 美团订单 - paramsMap := utils.Struct2Map(riderInfo, "", true) if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil { - if err := handler.GetOrderRider(v.VendorOrgCode, v.VendorStoreID, paramsMap); err != nil { - globals.SugarLogger.Errorf("Error pushing meituan rider information :%s--%s--%v", riderInfo.OrderId, riderInfo.ThirdCarrierOrderId, err) + if err := handler.GetOrderRider(v.VendorOrgCode, v.VendorStoreID, utils.Struct2Map(riderInfo, "", true)); err != nil { + globals.SugarLogger.Errorf("Error pushing meituan rider information :%s--%s--%v", v.VendorOrderID, utils.Format4Output(riderInfo, false), err) } } case model.VendorIDELM: // 饿了么 @@ -162,7 +204,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) { case model.VendorIDDD: // 抖店小时达 continue default: - globals.SugarLogger.Errorf("Order source error, non system order") + globals.SugarLogger.Errorf("Order source error, non system order: %s", v.VendorOrderID) continue } } @@ -368,7 +410,7 @@ func LoadingStoreOrderSettleAmount(startTime, endTime int64, jxStoreId []int) er var ( db = dao.GetDB() now = time.Now() - from = time.Date(now.Year(), now.Month(), now.Day()-2, 0, 0, 0, 0, time.Local).Unix() + from = time.Date(now.Year(), now.Month(), now.Day()-4, 0, 0, 0, 0, time.Local).Unix() to = time.Date(now.Year(), now.Month(), now.Day()-1, 23, 59, 59, 59, time.Local).Unix() ) @@ -376,45 +418,58 @@ func LoadingStoreOrderSettleAmount(startTime, endTime int64, jxStoreId []int) er from = startTime to = endTime } - storeMapList, err := dao.GetStoresMapList(db, []int{model.VendorIDMTWM}, jxStoreId, []int{model.StoreStatusClosed, model.StoreStatusHaveRest, model.StoreStatusOpened}, model.StoreStatusAll, 0, "", "", "") + storeMapList, err := dao.GetStoresMapList(db, []int{model.VendorIDMTWM}, jxStoreId, []int{model.StoreStatusClosed, model.StoreStatusHaveRest, model.StoreStatusOpened}, model.StoreStatusAll, model.StoreIsSyncAll, "", "", "") if err != nil || len(storeMapList) == model.NO { globals.SugarLogger.Errorf("获取美团门店列表异常: %v", err) return err } taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - storeListValue := batchItemList[0].([]*model.StoreMap) - for _, v := range storeListValue { - storeOrder, err := mtwm.GetAPI(v.VendorOrgCode, v.StoreID, v.VendorStoreID).GetStoreBillList(&mtwmapi.Bill{ - AppPoiCode: v.VendorStoreID, - StartDate: from, - EndDate: to, - Offset: 0, - Limit: 200, - }) - if err != nil { - return nil, err + storeListValue := batchItemList[0].(*model.StoreMap) + billListParam := &mtwmapi.Bill{ + AppPoiCode: storeListValue.VendorStoreID, + StartDate: from, + EndDate: to, + Offset: 0, + Limit: 200, + } + storeOrder, settleId, err := mtwm.GetAPI(storeListValue.VendorOrgCode, storeListValue.StoreID, storeListValue.VendorStoreID).GetStoreBillList(billListParam) + if err != nil { + globals.SugarLogger.Debugf("GetStoreBillList err : %v", err) + return nil, err + } + + // 如果收款账户为京西的收款账户,则此门店不是服务商(否则是服务商,使用门店发单[需要自己的账户充值金额才行]!) + if settleId != model.NO && jxSettleIdMap[settleId] { + brandSql := `UPDATE store_map s SET s.create_delivery_type = ?,s.is_service = ? WHERE s.vendor_store_id = ? AND s.deleted_at = ?` + if _, err := dao.ExecuteSQL(db, brandSql, []interface{}{model.NO, model.NO, storeListValue.VendorStoreID, utils.DefaultTimeValue}...); err != nil { + globals.SugarLogger.Debugf("将门店修改为非服务商和系统发单: %v", err) } + } else { + brandSql := `UPDATE store_map s SET s.create_delivery_type = ?,s.is_service = ? WHERE s.vendor_store_id = ? AND s.deleted_at = ?` + if _, err := dao.ExecuteSQL(db, brandSql, []interface{}{model.YES, model.YES, storeListValue.VendorStoreID, utils.DefaultTimeValue}...); err != nil { + globals.SugarLogger.Debugf("将门店修改为服务商和门店发单: %v", err) + } + } - for _, so := range storeOrder { - // 更新订单的结算信息 - if so.PlatformSettlement > 0 { - goodsOrderSql := `UPDATE goods_order g SET g.total_shop_money = ? WHERE g.vendor_order_id = ? ` - if _, err := dao.ExecuteSQL(db, goodsOrderSql, []interface{}{so.PlatformSettlement + so.TimingFee + so.DeliveryFee, so.OrderId}...); err != nil { - globals.SugarLogger.Debugf("更新订单结算信息错误: %v", err) - } + for _, so := range storeOrder { + // 更新订单的结算信息 + if so.PlatformSettlement > 0 { + goodsOrderSql := `UPDATE goods_order g SET g.total_shop_money = ? WHERE g.vendor_order_id = ? ` + if _, err := dao.ExecuteSQL(db, goodsOrderSql, []interface{}{so.PlatformSettlement + so.TimingFee + so.DeliveryFee, so.OrderId}...); err != nil { + globals.SugarLogger.Debugf("更新订单结算信息错误: %v", err) } - // 更新订单的配送信息 - if so.TimingFee != 0 || so.DeliveryFee != 0 { - wayBillSql := `UPDATE waybill w SET w.desired_fee = ?,w.punctual_fee = ? WHERE g.vendor_order_id = ? AND g.vendor_waybill_id = ? ` - if _, err := dao.ExecuteSQL(db, wayBillSql, []interface{}{so.DeliveryFee * -1, so.TimingFee * -1, so.OrderId, so.OrderId}...); err != nil { - globals.SugarLogger.Debugf("更新订单物流结算信息错误: %v", err) - } + } + // 更新订单的配送信息 + if so.TimingFee != 0 || so.DeliveryFee != 0 { + wayBillSql := `UPDATE waybill w SET w.desired_fee = ?,w.punctual_fee = ? WHERE w.vendor_order_id = ? AND w.vendor_waybill_id = ? ` + if _, err := dao.ExecuteSQL(db, wayBillSql, []interface{}{so.DeliveryFee, so.TimingFee, so.OrderId, so.OrderId}...); err != nil { + globals.SugarLogger.Debugf("更新订单物流结算信息错误: %v", err) } - } } + return retVal, err } task := tasksch.NewParallelTask("更新美团订单配送费/保险费/结算信息", tasksch.NewParallelConfig().SetParallelCount(4), jxcontext.AdminCtx, taskFunc, storeMapList)