diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index ef57cfdd1..77b672070 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -944,6 +944,7 @@ func (c *OrderManager) addOrderStatus(orderStatus *model.OrderStatus, db *dao.Da if db == nil { db = dao.GetDB() } + isDuplicated, err = addOrderOrWaybillStatus(orderStatus, db) if err == nil && !isDuplicated && (orderStatus.Status != model.OrderStatusUnknown && orderStatus.Status != model.OrderStatusMsg) { // todo 加这个代码的原因是,抖店运单取消会去将本地的订单状态设置为取消,跳过,不修改本地订单状态 @@ -994,6 +995,7 @@ func (c *OrderManager) addOrderStatus(orderStatus *model.OrderStatus, db *dao.Da updateFields = append(updateFields, "LockStatus", "LockStatusTime", "Flag") } } + utils.CallFuncLogError(func() error { _, err = db.Db.Update(order, updateFields...) return err @@ -1010,6 +1012,7 @@ func (c *OrderManager) addOrderStatus(orderStatus *model.OrderStatus, db *dao.Da } } } + return isDuplicated, order, err } @@ -2655,7 +2658,7 @@ func UpdateTiktokShopTotalMoney() { var goodsOrders []*model.GoodsOrder sql := `SELECT g.* FROM goods_order g WHERE g.order_created_at >= ? AND g.status = ? AND g.vendor_id = ? AND total_shop_money = ? ORDER BY g.order_created_at desc` - orderCreateTime := time.Now().AddDate(0, 0, -15) + orderCreateTime := time.Now().AddDate(0, 0, -50) param := []interface{}{orderCreateTime, model.OrderStatusFinished, model.VendorIDDD, model.NO} if err := dao.GetRows(db, &goodsOrders, sql, param...); err != nil { globals.SugarLogger.Debugf("Update GoodsOrder Total shop money err %s", err) @@ -2695,6 +2698,7 @@ func UpdateTiktokShopTotalMoney() { } } } + globals.SugarLogger.Debugf("vendorOrderId =========: %s , TotalShopMoney := %d", v.VendorOrderID, v.TotalShopMoney) if _, err := dao.UpdateEntity(db, v, "TotalShopMoney", "NewEarningPrice"); err != nil { globals.SugarLogger.Errorf("更新本地订单结算信息错误 : %s", err) continue diff --git a/business/jxstore/cms/store_sku_check.go b/business/jxstore/cms/store_sku_check.go index 039bf05a1..b18c06a57 100644 --- a/business/jxstore/cms/store_sku_check.go +++ b/business/jxstore/cms/store_sku_check.go @@ -928,12 +928,41 @@ func StoreOpenAll(ctx *jxcontext.Context) { // globals.SugarLogger.Debug("StoreOpenAll skuID is Complete") //} -// 对比本地商品和平台商品差异(价格和规格),不同的重新同步 -func CheckSkuDiffBetweenJxAndVendor2(ctx *jxcontext.Context, vendorIDList []int, storeIDList []int) { - //db := dao.GetDB() +// CheckSkuDiffBetweenJxAndVendor2 对比本地商品和平台商品差异(价格和规格),不同的重新同步 +func CheckSkuDiffBetweenJxAndVendor2(ctx *jxcontext.Context, vendorIDList []int, storeIDList []int) error { + //var ( + // db = dao.GetDB() + // errList = make([]error, 0, 0) + //) //for _, v := range storeIDList { - // //storeMapList, err := dao.GetStoresMapList(db, vendorIDList, []int{v}, []int{model.StoreStatusOpened, model.StoreStatusHaveRest, model.StoreStatusClosed}, status, model.StoreIsSyncYes, "", "", "") + // // 1.判断本地门店是否开启了同步,未开启的跳过 + // storeMapList, err := dao.GetStoresMapList(db, vendorIDList, []int{v}, []int{model.StoreStatusOpened, model.StoreStatusHaveRest, model.StoreStatusClosed}, model.StoreStatusOpened, model.StoreIsSyncYes, "", "", "") + // if err != nil { + // errList = append(errList, fmt.Errorf("门店id[%d]查询异常:%v", v, err)) + // continue + // } + // if len(storeMapList) == model.NO { + // errList = append(errList, fmt.Errorf("门店id[%d],未绑定平台账号或者同步未打开", v)) + // continue + // } + // // 2.查询本地商品列表,存储sku_id,vendor_price,weight + // skuList, skuErr := dao.GetStoreSkuBindPriceAndWeight(db, v) + // if len(skuList) == model.NO || skuErr != nil { + // errList = append(errList, fmt.Errorf("门店id[%d],商品为空或错误:%v", v, skuErr)) + // continue + // } + // + // // 查询平台门店所有商品 + // for _, storeMap := range storeMapList { + // singleStoreHandler := partner.GetPurchasePlatformFromVendorID(storeMap.VendorID).(partner.ISingleStoreStoreSkuHandler) + // // 淘宝需要storeSkuList有值 + // vendorSkuInfoList, err := singleStoreHandler.GetStoreSkusFullInfo(ctx, nil, v, storeMap.VendorStoreID, nil) + // + // } + // // 3.比对价格和规格重量,不同的以本地为基础开始重新同步 + // //} + return nil } //入口函数,校验本地商品京西和其他平台的差异 diff --git a/business/jxstore/cms/system_store_sku.go b/business/jxstore/cms/system_store_sku.go index 1bec2eaee..8eb9eac84 100644 --- a/business/jxstore/cms/system_store_sku.go +++ b/business/jxstore/cms/system_store_sku.go @@ -45,7 +45,7 @@ func CopyOnStoreSkuToOther(ctx *jxcontext.Context, fromVendorStoreId, toStoreId switch step { case 1: // 1.加载门店商品,删除商品.当分类下没有商品时.删除分类 - //errs := LoadingStoreSkuList(ctx, toApi, toStore.VendorStoreID) + // errs := LoadingStoreSkuList(ctx, toApi, toStore.VendorStoreID) //if errs != nil && len(errs) > 0 { // return nil, errs[0] //} diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index 2e16a79b2..4a71ae913 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -194,8 +194,16 @@ func Init() { ScheduleTimerFunc("UpdateTiktokShopTotalMoney", func() { orderman.UpdateTiktokShopTotalMoney() }, []string{ - "03:35:00", - "11:05:00", + "03:00:00", + "05:00:00", + "07:00:00", + "09:00:00", + "11:00:00", + "14:00:00", + "16:00:00", + "19:00:00", + "21:00:00", + "01:00:00", }) /// 更新淘鲜达结算信息 ScheduleTimerFunc("UpdateTaoTotalMoney", func() { diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 05d37d034..8e03299ab 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -2105,3 +2105,35 @@ func GetStoresSkusForManageState(db *DaoDB, storeID, status int) (storeSkuList [ err = GetRows(db, &storeSkuList, sql, sqlParams...) return storeSkuList, err } + +type SkuPriceAndWeight struct { + SkuId int64 `orm:"column(sku_id)" json:"skuId"` // 商品本地id + MtwmPrice int64 `orm:"column(mtwm_price)" json:"mtwmPrice"` // 美团平台价 + JdPrice int64 `orm:"column(jd_price)" json:"jdPrice"` // 京东平台价 + EbaiPrice int64 `orm:"column(ebai_price)" json:"ebaiPrice"` // 饿百平台价 + TaoPrice int64 `orm:"column(tao_price)" json:"taoPrice"` // 淘宝平台价 + DdPrice int64 `orm:"column(dd_price)" json:"ddPrice"` // 抖店平台价 + Weight int64 `orm:"column(weight)" json:"weight"` // 商品规格重量 +} + +// GetStoreSkuBindPriceAndWeight 获取门店绑定商品平台价格和规格 +func GetStoreSkuBindPriceAndWeight(db *DaoDB, storeId int) (skuList map[string]*SkuPriceAndWeight, err error) { + sql := ` SELECT b.sku_id,b.mtwm_price,b.jd_price,b.ebai_price,b.tao_price,b.dd_price,s.weight FROM store_sku_bind b + INNER JOIN sku s ON s.id = b.sku_id + WHERE b.store_id = ? AND b.deleted_at = ? + ` + result := make([]*SkuPriceAndWeight, 0, 0) + sqlParams := []interface{}{storeId, utils.DefaultTimeValue} + if err = GetRows(db, &result, sql, sqlParams...); err != nil { + return nil, err + } + + if len(result) != model.NO { + skuMap := make(map[string]*SkuPriceAndWeight, 0) + for _, v := range result { + skuMap[utils.Int64ToStr(v.SkuId)] = v + } + return skuMap, nil + } + return nil, errors.New("门店不存在商品数据") +} diff --git a/business/partner/delivery/dada/waybill.go b/business/partner/delivery/dada/waybill.go index e9b22b19a..3667fbea7 100644 --- a/business/partner/delivery/dada/waybill.go +++ b/business/partner/delivery/dada/waybill.go @@ -117,7 +117,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap switch order.OrderVendorID { case model.VendorIDDD: Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2) - tiktokStatusPush(order, msg.OrderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat)) + tiktokStatusPush(order, msg.OrderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), goodsOrder.VendorOrgCode) case model.VendorIDMTWM, model.VendorIDTaoVegetable: delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新 if goodsOrder.VendorID == model.VendorIDTaoVegetable && msg.OrderStatus == dadaapi.OrderStatusAccepted { @@ -129,7 +129,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap } // 抖音订单状态回传 -func tiktokStatusPush(order *model.Waybill, status int, lng, lat string) { +func tiktokStatusPush(order *model.Waybill, status int, lng, lat, vendorOrgCode string) { result := &utils.RiderInfo{ OrderId: order.VendorOrderID, ThirdCarrierOrderId: order.VendorOrderID, @@ -177,7 +177,7 @@ func tiktokStatusPush(order *model.Waybill, status int, lng, lat string) { result.LogisticsStatus = 0 result.LogisticsContext = model.RiderGetOrderDeliverOther } - delivery.PullTiktokRiderInfo(result) + delivery.PullTiktokRiderInfo(result, vendorOrgCode) } func (c *DeliveryHandler) callbackMsg2Waybill(msg *dadaapi.CallbackMsg) (retVal *model.Waybill, goods *model.GoodsOrder) { diff --git a/business/partner/delivery/fn/waybill.go b/business/partner/delivery/fn/waybill.go index eec4deacf..23404757f 100644 --- a/business/partner/delivery/fn/waybill.go +++ b/business/partner/delivery/fn/waybill.go @@ -311,7 +311,7 @@ func OnWaybillMsg(msg *fnpsapi.OrderStatusNottify, resultParam *fnpsapi.ShortSta switch order.OrderVendorID { case model.VendorIDDD: Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2) - tiktokStatusPush(order, orderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat)) + tiktokStatusPush(order, orderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), order.VendorOrgCode) case model.VendorIDMTWM, model.VendorIDTaoVegetable: delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新 if good.VendorID == model.VendorIDTaoVegetable && cc.OrderStatus == fnpsapi.OrderStatusAssigned { @@ -322,7 +322,7 @@ func OnWaybillMsg(msg *fnpsapi.OrderStatusNottify, resultParam *fnpsapi.ShortSta } // 抖音订单状态回传 -func tiktokStatusPush(order *model.Waybill, orderStatus int64, lng, lat string) { +func tiktokStatusPush(order *model.Waybill, orderStatus int64, lng, lat, vendorOrgCode string) { result := &utils.RiderInfo{ OrderId: order.VendorOrderID, ThirdCarrierOrderId: order.VendorOrderID, @@ -361,7 +361,7 @@ func tiktokStatusPush(order *model.Waybill, orderStatus int64, lng, lat string) result.LogisticsStatus = 0 result.LogisticsContext = model.RiderGetOrderDeliverOther } - delivery.PullTiktokRiderInfo(result) + delivery.PullTiktokRiderInfo(result, vendorOrgCode) } // 异常报备 diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go index 2116dc3ef..581cac531 100644 --- a/business/partner/delivery/mtps/waybill.go +++ b/business/partner/delivery/mtps/waybill.go @@ -142,7 +142,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m switch order.OrderVendorID { case model.VendorIDDD: Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2) - pushMTPSToTiktok(msg.Status, order, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat)) + pushMTPSToTiktok(msg.Status, order, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), goodsOrder.VendorOrgCode) case model.VendorIDMTWM, model.VendorIDTaoVegetable: delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新 if goodsOrder.VendorID == model.VendorIDTaoVegetable && msg.Status == mtpsapi.OrderStatusAccepted { @@ -153,7 +153,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m return err } -func pushMTPSToTiktok(msgStatus int, order *model.Waybill, lng, lat string) { +func pushMTPSToTiktok(msgStatus int, order *model.Waybill, lng, lat, vendorOrgCode string) { result := &utils.RiderInfo{ OrderId: order.VendorOrderID, ThirdCarrierOrderId: order.VendorOrderID, @@ -186,11 +186,12 @@ func pushMTPSToTiktok(msgStatus int, order *model.Waybill, lng, lat string) { result.LogisticsStatus = 0 result.LogisticsContext = model.RiderGetOrderDeliverOther } - delivery.PullTiktokRiderInfo(result) if result.LogisticsStatus == model.WaybillStatusCourierArrived { result.LogisticsStatus = model.WaybillStatusDelivering result.LogisticsContext = model.RiderGetOrderDelivering - delivery.PullTiktokRiderInfo(result) + delivery.PullTiktokRiderInfo(result, vendorOrgCode) + } else { + delivery.PullTiktokRiderInfo(result, vendorOrgCode) } } diff --git a/business/partner/delivery/rider.go b/business/partner/delivery/rider.go index 9d4d6a748..108ef69dd 100644 --- a/business/partner/delivery/rider.go +++ b/business/partner/delivery/rider.go @@ -230,7 +230,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) { case model.VendorIDWSC: // 微盟微商城 continue case model.VendorIDDD: // 抖店小时达 - riderInfo.LogisticsProviderCode = utils.JxVendorId2TiktokCode(v.WaybillVendorID) + riderInfo.LogisticsProviderCode = tiktok_api.JxVendorId2TiktokCode(v.WaybillVendorID) riderInfo.ThirdCarrierOrderId = v.VendorOrderID if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil { if err := handler.GetOrderRider(v.VendorOrgCode, v.VendorStoreID, utils.Struct2Map(riderInfo, "", true)); err != nil { @@ -261,7 +261,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) { return } -func PullTiktokRiderInfo(riderInfo *utils.RiderInfo) { +func PullTiktokRiderInfo(riderInfo *utils.RiderInfo, vendorOrgCode string) { switch riderInfo.LogisticsStatus { case 5: // 呼叫骑手 riderInfo.LogisticsStatus = 0 @@ -304,7 +304,7 @@ func PullTiktokRiderInfo(riderInfo *utils.RiderInfo) { // 抖店由于发配送时运单id已经固定了,我们系统在重新发货,或者运单号发生改变时去推送信息时.抖店只识别第一个运单号所以在这儿修改成发单时的第一个运单号! paramsMap := utils.Struct2Map(riderInfo, "", true) if handler := partner.GetPurchaseOrderHandlerFromVendorID(model.VendorIDDD); handler != nil { - if err := handler.GetOrderRider("", "", paramsMap); err != nil { + if err := handler.GetOrderRider(vendorOrgCode, "", paramsMap); err != nil { globals.SugarLogger.Errorf("PullTiktokRiderInfo Err %s", err.Error()) } } @@ -439,7 +439,7 @@ func UpdateFakeWayBillToTiktok() { if riderInfo.LogisticsContext != model.RiderGetOrderDeliverFailed && riderInfo.LogisticsContext != model.RiderGetOrderDeliverOther && riderInfo.LogisticsContext != model.RiderWaitRider { riderInfo.LogisticsContext = fmt.Sprintf(riderInfo.LogisticsContext, riderInfo.CourierName, riderInfo.CourierPhone) } - riderInfo.LogisticsProviderCode = utils.JxVendorId2TiktokCode(fakeWayBill[i].WaybillVendorID) + riderInfo.LogisticsProviderCode = tiktok_api.JxVendorId2TiktokCode(fakeWayBill[i].WaybillVendorID) // 推送骑手信息 paramsMap := utils.Struct2Map(riderInfo, "", true) diff --git a/business/partner/delivery/sfps/waybill.go b/business/partner/delivery/sfps/waybill.go index 7c6c581ff..7db36f0cf 100644 --- a/business/partner/delivery/sfps/waybill.go +++ b/business/partner/delivery/sfps/waybill.go @@ -441,7 +441,7 @@ func OnWaybillMsg(urlIndex string, msg interface{}) (resp *sfps2.CallbackRespons switch order.OrderVendorID { case model.VendorIDDD: Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2) - tiktokStatusPush(order, orderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat)) + tiktokStatusPush(order, orderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), good.VendorOrgCode) case model.VendorIDTaoVegetable, model.VendorIDMTWM: delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新 if good.VendorID == model.VendorIDTaoVegetable && orderStatus == sfps2.OrderStatusTakeOrder { @@ -451,7 +451,7 @@ func OnWaybillMsg(urlIndex string, msg interface{}) (resp *sfps2.CallbackRespons return sfps2.Err2CallbackResponse(nil) } -func tiktokStatusPush(order *model.Waybill, orderStatus int64, lng, lat string) { +func tiktokStatusPush(order *model.Waybill, orderStatus int64, lng, lat, vendorOrgCode string) { result := &utils.RiderInfo{ OrderId: order.VendorOrderID, ThirdCarrierOrderId: order.VendorOrderID, @@ -489,7 +489,7 @@ func tiktokStatusPush(order *model.Waybill, orderStatus int64, lng, lat string) result.LogisticsStatus = 0 result.LogisticsContext = model.RiderGetOrderDeliverOther } - delivery.PullTiktokRiderInfo(result) + delivery.PullTiktokRiderInfo(result, vendorOrgCode) } // OnWaybillExceptSF 异常报备 diff --git a/business/partner/delivery/uupt/waybill.go b/business/partner/delivery/uupt/waybill.go index dffcdafc3..6955425e0 100644 --- a/business/partner/delivery/uupt/waybill.go +++ b/business/partner/delivery/uupt/waybill.go @@ -415,7 +415,7 @@ func OnWaybillMsg(req *uuptapi.WaybillCallbackParam) (resp *uuptapi.CallbackResp switch param.OrderVendorID { case model.VendorIDDD: Lng, Lat, _ := partner.GetRidderPositionGetter(param.WaybillVendorID).GetRidderPosition(nil, param.VendorOrderID, param.VendorOrderID, param.VendorWaybillID, param.VendorWaybillID2) - tiktokStatusPush(param, req.State, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat)) + tiktokStatusPush(param, req.State, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), good.VendorOrgCode) case model.VendorIDMTWM, model.VendorIDTaoVegetable: delivery.GetOrderRiderInfoToPlatform(param.VendorOrderID, param.Status) // 骑手位置更新 if good.VendorID == model.VendorIDTaoVegetable && req.State == uuptapi.StateRMGrabsOrder { @@ -425,7 +425,7 @@ func OnWaybillMsg(req *uuptapi.WaybillCallbackParam) (resp *uuptapi.CallbackResp return uuptapi.Err2CallbackResponse(nil) } -func tiktokStatusPush(param *model.Waybill, orderStatus string, lng, lat string) { +func tiktokStatusPush(param *model.Waybill, orderStatus string, lng, lat, vendorOrgCode string) { result := &utils.RiderInfo{ OrderId: param.VendorOrderID, ThirdCarrierOrderId: param.VendorOrderID, @@ -463,7 +463,7 @@ func tiktokStatusPush(param *model.Waybill, orderStatus string, lng, lat string) result.LogisticsStatus = 0 result.LogisticsContext = model.RiderGetOrderDeliverOther } - delivery.PullTiktokRiderInfo(result) + delivery.PullTiktokRiderInfo(result, vendorOrgCode) } //辅助函数 diff --git a/business/partner/purchase/ebai/order_afs.go b/business/partner/purchase/ebai/order_afs.go index 09f7d72fb..89cdfc9ab 100644 --- a/business/partner/purchase/ebai/order_afs.go +++ b/business/partner/purchase/ebai/order_afs.go @@ -3,6 +3,7 @@ package ebai import ( "errors" "fmt" + "git.rosy.net.cn/jx-callback/business/model/dao" "strings" "time" @@ -163,6 +164,16 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaia err = partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus) } } + + // 只有有售后订单就更新此订单的结算信息 + if utils.Str2Int(orderStatus.VendorStatus) == ebaiapi.OrderPartRefundSuccess { + orderData, err2 := api.EbaiAPI.OrderPartRefundGet(orderStatus.RefVendorOrderID) + if err2 == nil && utils.MustInterface2Int64(orderData["shop_fee"]) != model.NO { + goodsOrder, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, model.VendorIDEBAI) + goodsOrder.TotalShopMoney = utils.MustInterface2Int64(orderData["shop_fee"]) + dao.UpdateEntity(dao.GetDB(), goodsOrder, "TotalShopMoney") + } + } retVal = api.EbaiAPI.Err2CallbackResponse(msg.Cmd, err, nil) } return retVal diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index 13304761c..5e4c19959 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -703,6 +703,10 @@ func SelectStoreSkuListByOpResult(storeSkuList []*partner.StoreSkuInfo, opResult sql := ` UPDATE store_sku_bind SET ebai_id = 0,ebai_sync_status = 2 WHERE store_id = ? AND sku_id = ?` param := []interface{}{storeID, v.SkuID} dao.ExecuteSQL(dao.GetDB(), sql, param...) + } else if strings.Contains(opResultMap[utils.Str2Int64(v.VendorSkuID)], "商品禁止售卖不允许上架") || strings.Contains(opResultMap[utils.Str2Int64(v.VendorSkuID)], "商品已被禁售") { + sql := ` UPDATE store_sku_bind SET ebai_sync_status = 4 WHERE store_id = ? AND sku_id = ?` + param := []interface{}{storeID, v.SkuID} + dao.ExecuteSQL(dao.GetDB(), sql, param...) } selectedStoreSkuList = append(selectedStoreSkuList, opFailed) } diff --git a/business/partner/purchase/jd/store.go b/business/partner/purchase/jd/store.go index d11fa23d2..5c79efc1f 100644 --- a/business/partner/purchase/jd/store.go +++ b/business/partner/purchase/jd/store.go @@ -347,11 +347,15 @@ func (c *PurchaseHandler) OnStoreMsg(vendorOrgCode string, msg *jdapi.CallbackOr err = partner.CurStoreManager.OnStoreStatusChanged(vendorStoreID, model.VendorIDJD, storeStatus) } else { // 可能在门店删除的情况下会出查不到门店的错误 + globals.SugarLogger.Debugf("GetStoreStatus==============%v", err) if errExt, ok := err.(*utils.ErrorWithCode); ok && errExt.IntCode() == 4 { err = nil } } } + if err != nil { + globals.SugarLogger.Debugf("OnStoreMsg==============%v", err) + } return jdapi.Err2CallbackResponse(err, "") } diff --git a/business/partner/purchase/mtwm/order.go b/business/partner/purchase/mtwm/order.go index 1b9e52e04..2d42852b3 100644 --- a/business/partner/purchase/mtwm/order.go +++ b/business/partner/purchase/mtwm/order.go @@ -391,6 +391,7 @@ func (c *PurchaseHandler) onOrderMsg(msg *mtwmapi.CallbackMsg) (response *mtwmap } }) } + err = partner.CurOrderManager.OnOrderStatusChanged(msg.AppID, status) if err == nil && msg.Cmd == mtwmapi.MsgTypeOrderFinished { utils.CallFuncAsync(func() { @@ -509,6 +510,11 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI "订单已经确认过了", }) { err = nil + goodsOrder, _ := partner.CurOrderManager.LoadOrder(order.VendorOrderID, order.VendorID) + if goodsOrder.Status < model.OrderStatusAccepted { + order.Status = model.OrderStatusAccepted + dao.UpdateEntity(dao.GetDB(), order, "Status") + } } else { globals.SugarLogger.Warnf("mtwm AcceptOrRefuseOrder orderID:%s failed with err:%v", order.VendorOrderID, err) } diff --git a/business/partner/purchase/mtwm/order_afs.go b/business/partner/purchase/mtwm/order_afs.go index 622d011d0..2c5839675 100644 --- a/business/partner/purchase/mtwm/order_afs.go +++ b/business/partner/purchase/mtwm/order_afs.go @@ -149,13 +149,30 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwma err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus) } } else { + // msg-status 1-已申请 10-初审已同意 11-初审已驳回 16-初审已申诉 17-初审申诉已同意 18-初审申诉已驳回 20-终审已发起(用户已发货) 21-终审已同意 22-终审已驳回 26-终审已申诉 27-终审申诉已同意 28-终审申诉已驳回 30-已取消 if err := partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus); err == nil { + order, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, model.VendorIDMTWM) // 订单回调全额退款接口时,将订单状态修改为取消 refundData := msg.Data.(*mtwmapi.CallbackRefundInfo) if refundData.NotifyType == mtwmapi.MsgTypeOrderAgree && msg.Cmd == mtwmapi.MsgTypeOrderRefund { - order, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, model.VendorIDMTWM) order.Status = model.OrderStatusCanceled dao.UpdateEntity(dao.GetDB(), order, "Status") + } else if refundData.Status == "21" { + skuList, _ := dao.GetSimpleOrderSkus(dao.GetDB(), orderStatus.RefVendorOrderID, nil) + totalSkuCount := 0 + for _, v := range skuList { + totalSkuCount += v.Count + } + + financialSku, _ := dao.GetOrderRefundSkuList(dao.GetDB(), []string{orderStatus.RefVendorOrderID}) + refundSkuCount := 0 + for _, v := range financialSku { + refundSkuCount += v.Count + } + if totalSkuCount == refundSkuCount { + order.Status = model.OrderStatusCanceled + dao.UpdateEntity(dao.GetDB(), order, "Status") + } } // 新订单平台自动同意退单,某一些情况下产生的运单没退!这个处理一下! @@ -168,7 +185,7 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwma } } } - + } } return mtwmapi.Err2CallbackResponse(err, "") diff --git a/business/partner/purchase/mtwm/store.go b/business/partner/purchase/mtwm/store.go index 5eff49f1e..aa18a5e6b 100644 --- a/business/partner/purchase/mtwm/store.go +++ b/business/partner/purchase/mtwm/store.go @@ -462,13 +462,13 @@ func (c *PurchaseHandler) UpdateStoreBoxFee(ctx *jxcontext.Context, vendorOrgCod func (c *PurchaseHandler) UpdateStoreLineStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, lineStatus int) (err error) { mtwmApi := getAPI(vendorOrgCode, storeID, vendorStoreID) switch lineStatus { - case model.StoreStatusOpened: + case model.StoreStatusOpened: // 先上线在开店 if err = mtwmApi.PoiOnline(vendorStoreID); err == nil { err = mtwmApi.PoiOpen(vendorStoreID) } - default: - if err = mtwmApi.PoiOffline(vendorStoreID); err == nil { - err = mtwmApi.PoiClose(vendorStoreID) + default: // 先关店,在下线 + if err = mtwmApi.PoiClose(vendorStoreID); err == nil { + err = mtwmApi.PoiOffline(vendorStoreID) } } diff --git a/business/partner/purchase/tao_vegetable/order.go b/business/partner/purchase/tao_vegetable/order.go index 180a37211..9b321682a 100644 --- a/business/partner/purchase/tao_vegetable/order.go +++ b/business/partner/purchase/tao_vegetable/order.go @@ -97,14 +97,21 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode string, vendorOrderID int64, ve order.ConsigneeLat = jxutils.StandardCoordinate2Int(utils.Str2Float64(originalList[1])) order.DiscountMoney = *orderDetail.DiscountFee - //var salePrice int64 = 0 - //var weight int = 0 order.PmSubsidyMoney = *orderDetail.SkuDiscountPlatformFee // 平台承担优惠 // 添加需要赠送的东西(暂时没有赠品套餐直接商品) multiSkuMap := make(map[int]int) + var ( + skuSalePrice int64 = 0 // 商品售卖价 + merchantDiscountsPrice int64 = 0 // 商户优惠价 + // 平台优惠价 + platformDiscountsPrice int64 = *orderDetail.PlatformDeduction.BaseLogisticsFee + *orderDetail.PlatformDeduction.TechnicalServiceFee + *orderDetail.PlatformDeduction.PayServiceFee + *orderDetail.PlatformDeduction.ThirdpartnarFee + ) if len(*orderDetail.SubOrderResponseList) > 0 { for _, extra := range *orderDetail.SubOrderResponseList { - // 这个是包装袋的价格,用户退款是包装袋未推送退款,导致本地订单退款状态无法更新,取消包装袋的记录 + skuSalePrice += *extra.OriginalFee + merchantDiscountsPrice += *extra.DiscountMerchantFee + + // 这个是包装袋的价格,用户退款是包装袋未推送退款,导致本地订单退款状态无法更新,取消包装袋的记录(但是结算的时候需要加上去) if *extra.SkuCode == "6108080" { continue } @@ -200,7 +207,7 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode string, vendorOrderID int64, ve v.IsVendorAct = model.YES } } - // 抖音订单手机号和收货地址是否同城(虚拟号,无法获取到正确地址) + //订单手机号和收货地址是否同城(虚拟号,无法获取到正确地址) order.PhoneAscription = model.PhoneAscriptionAddressNo + "-" + "归属信息不匹配:" + "虚拟电话号码" // 本地获取订单记录 @@ -217,6 +224,28 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode string, vendorOrderID int64, ve order.StoreName = "未获取到" // 真实门店名称 } + //结算类型 + if store.PayPercentage < 50 { + order.EarningType = model.EarningTypePoints + } else { + order.EarningType = model.EarningTypeQuote + } + + // 平台结算金额 + order.TotalShopMoney = skuSalePrice + *orderDetail.PostFee - merchantDiscountsPrice - platformDiscountsPrice + if order.EarningType == model.EarningTypePoints { + waybill, _ := partner.CurOrderManager.LoadWaybill(order.VendorWaybillID, order.WaybillVendorID) + if waybill == nil { + if (order.NewEarningPrice == 0 || order.NewEarningPrice != order.TotalShopMoney*int64(100-order.OrderPayPercentage/2)/int64(100)) && order.OrderPayPercentage <= 50 { + order.NewEarningPrice = order.TotalShopMoney * int64(100-order.OrderPayPercentage/2) / int64(100) + } + } else { + if (order.NewEarningPrice == 0 || order.NewEarningPrice != (order.TotalShopMoney-waybill.DesiredFee)*int64(100-order.OrderPayPercentage/2)/int64(100)) && order.OrderPayPercentage <= 50 { + order.NewEarningPrice = order.TotalShopMoney*int64(100-order.OrderPayPercentage/2)/int64(100) - waybill.DesiredFee + } + } + } + return order, orderMap, err } diff --git a/business/partner/purchase/tiktok_store/order.go b/business/partner/purchase/tiktok_store/order.go index 511692df7..d01a15039 100644 --- a/business/partner/purchase/tiktok_store/order.go +++ b/business/partner/purchase/tiktok_store/order.go @@ -3,7 +3,9 @@ package tiktok_store import ( "errors" "fmt" + "git.rosy.net.cn/baseapi/platformapi/autonavi" "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/ascription_place" + "git.rosy.net.cn/jx-callback/globals/api" "regexp" "strings" "time" @@ -133,16 +135,16 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode, vendorOrderID, vendorStoreID s if len(result.SkuOrderList) > 0 { for _, extra := range result.SkuOrderList { sku := &model.OrderSku{ - VendorOrderID: extra.ParentOrderId, - VendorID: model.VendorIDDD, - StoreSubID: 0, - StoreSubName: "", - Count: int(extra.ItemNum), - VendorSkuID: utils.Int64ToStr(extra.SkuId), - SkuID: utils.Str2Int(extra.OutSkuId), - JxSkuID: utils.Str2Int(extra.OutSkuId), - SkuName: extra.ProductName, - ShopPrice: extra.OriginAmount, + VendorOrderID: extra.ParentOrderId, + VendorID: model.VendorIDDD, + StoreSubID: 0, + StoreSubName: "", + Count: int(extra.ItemNum), + VendorSkuID: utils.Int64ToStr(extra.SkuId), + SkuID: utils.Str2Int(extra.OutSkuId), + JxSkuID: utils.Str2Int(extra.OutSkuId), + SkuName: extra.ProductName, + //ShopPrice: extra.OriginAmount, 京西价 VendorPrice: extra.OrderAmount / extra.ItemNum, SalePrice: extra.OriginAmount, EarningPrice: 0, @@ -245,6 +247,15 @@ func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, par //appKey := `7152420904331429407` // 暂时定死 //appSecret := `cc7ba367-2394-4cbb-81c6-26f0e929d1c6` //暂时定死 //return tiktokShop.NewExpress(appKey, appSecret, "").OrderStatusAndPsInfoNew(param) + //api.AutonaviAPI. + if param["latitude"].(string) != "" && param["longitude"].(string) != "" { + if len(param["latitude"].(string)) > len("39.978573") && len(param["longitude"].(string)) > len("116.5031060") { // 是否为百度坐标 + lng, lat, _ := api.AutonaviAPI.CoordinateConvert(param["latitude"].(float64), param["longitude"].(float64), autonavi.CoordSysBaidu) + param["latitude"] = utils.Float64ToStr(lat) + param["longitude"] = utils.Float64ToStr(lng) + } + } + return getAPI(vendorOrgCode, 0, vendorStoreID).OrderStatusAndPsInfoNew(param) } @@ -598,22 +609,7 @@ func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName s AddressId: 0, StoreId: utils.Str2Int64(order.VendorStoreID), } - switch order.WaybillVendorID { - case model.VendorIDDada: - logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeDaDa - case model.VendorIDMTPS: - logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeMeiTuan - case model.VendorIDFengNiao: - logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeFengNiao - case model.VendorIDSFPS: - logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeSF - case model.VendorIDUUPT: - logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeUU - case model.VendorJXFakeWL, -1: - logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeMerchant - default: - logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeMerchant - } + logisticsAdd.CompanyCode = tiktokShop.JxVendorId2TiktokCode(order.WaybillVendorID) //转门店自送通知抖音发货 return api.OrderDelivering(logisticsAdd) } @@ -641,7 +637,7 @@ func (c *PurchaseHandler) SelfDeliverDelivering(order *model.GoodsOrder, userNam AddressId: 0, StoreId: utils.Str2Int64(order.VendorStoreID), } - param.CompanyCode = utils.JxVendorId2TiktokCode(order.WaybillVendorID) + param.CompanyCode = tiktokShop.JxVendorId2TiktokCode(order.WaybillVendorID) err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").OrderDelivering(param) if err != nil { return err @@ -677,7 +673,7 @@ func (c *PurchaseHandler) SelfDeliverDelivered(order *model.GoodsOrder, userName Longitude: utils.Float64ToStr(jxutils.IntCoordinate2Standard(order.ConsigneeLng)), OpCode: tiktokShop.TiktokLogisticsDELIVERED, } - riderInfo.LogisticsProviderCode = utils.JxVendorId2TiktokCode(order.WaybillVendorID) + riderInfo.LogisticsProviderCode = tiktokShop.JxVendorId2TiktokCode(order.WaybillVendorID) bills, _ := dao.GetWaybills(dao.GetDB(), order.VendorOrderID, nil) for _, v := range bills { if v.Status == model.OrderStatusCanceled { @@ -686,7 +682,7 @@ func (c *PurchaseHandler) SelfDeliverDelivered(order *model.GoodsOrder, userName riderInfo.CourierName = v.CourierName riderInfo.CourierPhone = v.CourierMobile } - riderInfo.LogisticsProviderCode = utils.JxVendorId2TiktokCode(order.WaybillVendorID) + riderInfo.LogisticsProviderCode = tiktokShop.JxVendorId2TiktokCode(order.WaybillVendorID) return c.GetOrderRider("", "", utils.Struct2MapByJson(riderInfo)) }