diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 8299d38c9..4b825e288 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -269,6 +269,10 @@ func (c *OrderManager) OnOrderStatusChanged(vendorOrgCode string, orderStatus *m partner.CurOrderManager.OnOrderMsg(order, fmt.Sprintf("订单[%s]被取消了,运单[%s]取消成功", order.VendorOrderID, v.VendorWaybillID), "") } } + // 刷新订单结束时间 + order.OrderFinishedAt = time.Now() + dao.UpdateEntity(db, order, "OrderFinishedAt") + //如果取消订单则要把库存加回去 if err2 == nil { // 判断是否需要打印取消订单 @@ -476,7 +480,7 @@ func FinisOrderWaybillFee(db *dao.DaoDB, order *model.GoodsOrder, bill *model.Wa return nil } // 查询所有运单 - bills, err := dao.GetWaybills(db, order.VendorOrderID, nil) + bills, err := dao.GetWaybills(db, order.VendorOrderID, []int64{model.VendorIDDada, model.VendorIDFengNiao, model.VendorIDMTPS, model.VendorIDUUPT, model.VendorIDSFPS}) if err != nil { return err } @@ -531,8 +535,8 @@ func ResetCreateWaybillFee(db *dao.DaoDB, order *model.GoodsOrder, bill *model.W if err := countWaybillSettleInfo(db, order, bill, store); err != nil { return err } - // 所有运单停止调度之后才开始退还余额 - bills, err := dao.GetWaybills(db, order.VendorOrderID, nil) + // 所有运单停止调度之后才开始退还余额(三方运单) + bills, err := dao.GetWaybills(db, order.VendorOrderID, []int64{model.VendorIDDada, model.VendorIDFengNiao, model.VendorIDMTPS, model.VendorIDUUPT, model.VendorIDSFPS}) if err != nil { return err } diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index eaeea20a9..44a339927 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -2030,27 +2030,27 @@ func RrefreshMtwmVendorAct(ctx *jxcontext.Context) (err error) { if len(actList) > 0 { for _, act := range actList { if act.Status > 0 { - //if checkActStoreSkuExist(db, storeMap.StoreID, utils.Str2Int(act.AppFoodCode), model.VendorIDMTWM, utils.Timestamp2Time(act.StartTime), utils.Timestamp2Time(act.EndTime)) { - actVendor := &model.ActMtwmVendor{ - StoreID: storeMap.StoreID, - SkuID: utils.Str2Int(act.AppFoodCode), - VendorStoreID: storeMap.VendorStoreID, - ActType: v, - BeginAt: utils.Timestamp2Time(act.StartTime), - EndAt: utils.Timestamp2Time(act.EndTime), - SkuName: act.Name, - OriginPrice: act.OriginalPrice, - ActPrice: act.ActPrice, - DiscountCoefficient: act.DiscountCoefficient, - Status: act.Status, - ItemID: utils.Int64ToStr(act.ItemID), - OrderLimit: act.OrderLimit, - Period: act.Period, - WeeksTime: act.WeeksTime, - SettingType: act.SettingType, + if checkActStoreSkuExist(db, storeMap.StoreID, utils.Str2Int(act.AppFoodCode), model.VendorIDMTWM, utils.Timestamp2Time(act.StartTime), utils.Timestamp2Time(act.EndTime)) { + actVendor := &model.ActMtwmVendor{ + StoreID: storeMap.StoreID, + SkuID: utils.Str2Int(act.AppFoodCode), + VendorStoreID: storeMap.VendorStoreID, + ActType: v, + BeginAt: utils.Timestamp2Time(act.StartTime), + EndAt: utils.Timestamp2Time(act.EndTime), + SkuName: act.Name, + OriginPrice: act.OriginalPrice, + ActPrice: act.ActPrice, + DiscountCoefficient: act.DiscountCoefficient, + Status: act.Status, + ItemID: utils.Int64ToStr(act.ItemID), + OrderLimit: act.OrderLimit, + Period: act.Period, + WeeksTime: act.WeeksTime, + SettingType: act.SettingType, + } + dao.CreateEntity(db, actVendor) } - dao.CreateEntity(db, actVendor) - //} } } } @@ -2194,6 +2194,7 @@ func GetActMtwmVendorSku(ctx *jxcontext.Context, storeID int, keyword string, ac } func DeleteActStoreSkuVendor(ctx *jxcontext.Context, db *dao.DaoDB, actStoreSkuParam []*ActStoreSkuParam) (err error) { + return fmt.Errorf("暂不支持直接取消平台活动,开发中……") } diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index f42d24354..3e89a0991 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -1173,8 +1173,6 @@ func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, upcs []str sql += " , t4.unit_price DESC LIMIT 99" } var tmpList []*tGetStoresSkusInfo - globals.SugarLogger.Debugf("GetStoresSkusNew sql=%s,sqlParams=%s", sql, sqlParams) - if err = dao.GetRowsTx(txDB, &tmpList, sql, sqlParams...); err != nil { dao.Rollback(db, txDB) return nil, err @@ -1184,7 +1182,6 @@ func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, upcs []str } dao.Commit(db, txDB) storeNameMap := make(map[int64]*dao.StoreSkuNameExt) - globals.SugarLogger.Debugf("GetStoresSkusNew tmpList=%s", utils.Format4Output(tmpList, false)) for _, v := range tmpList { var storeName *dao.StoreSkuNameExt index := jxutils.Combine2Int(v.StoreID, v.ID) diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index ab787c37c..50b067e09 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -279,11 +279,153 @@ func Init() { // syncStoreSkuTiktok() // }, []string{"13:00:00"}) //} - // 抖音更新门店商品 ,接口收费暂不使用 + // 淘鲜达更新门店商品 ,接口收费暂不使用 if beego.BConfig.RunMode != "jxgy" { ScheduleTimerFunc("RefreshSyncSkuList_tao", func() { - syncStoreSkuTao() - }, []string{"13:00:00"}) + var beijin = []int{ + //102683, + //102542, + //102514, + //102382, + //102182, + //102178, + //102173, + //102098, + //102094, + //102080, + //102072, + //102069, + //101870, + //101869, + //101868, + //101867, + //101866, + //101865, + //100956, + //100930, + //100871, + //100786, + //100746, + //100744, + //100726, + //100705, + //100400, + //100111, + //100108, + //100106, + //100104, + //100103, + //100102, + //100100, + //100097, + //100096, + //100095, + //100093, + //100092, + //100089, + //100087, + //100086, + //100085, + //100082, + //100079, + //100078, + //669158, + //668691, + //668673, + //668282, + //667447, + //667354, + //667321, + //667319, + //667316, + //667269, + //667268, + //667267, + //667260, + //667132, + //667094, + //667030, + //666965, + //666714, + //666708, + //666705, + //103437, + //103349, + //103123, + //103121, + //103106, + //103038, + //103028, + //103019, + //102831, + //102751, + //上海 + 668462, + 668276, + 668180, + 667320, + 667237, + 667231, + 667068, + 667036, + 666678, + 103191, + 103074, + 103065, + 103051, + 103050, + 103037, + 103029, + 103018, + 103002, + 102999, + 102969, + 102966, + 102951, + 102946, + 102939, + 102938, + 102934, + 102933, + 102930, + 102924, + 102920, + 102908, + 102903, + 102561, + 102293, + 100946, + 100945, + 100943, + 100935, + 100905, + 100720, + 100325, + 100324, + 100309, + 100299, + 100296, + 100292, + 100290, + } + syncStoreSkuTao(beijin) + }, []string{ + "00:30:00", + "02:30:00", + "04:30:00", + "07:30:00", + "09:00:00", + "10:40:00", + "12:55:00", + "13:30:00", + "14:30:00", + "15:30:00", + "16:30:00", + "17:30:00", + "18:40:00", + "20:30:00", + "22:30:00", + }) } // 刷新抖音门店token @@ -640,8 +782,10 @@ func syncStoreSkuTiktok() { tasksch.HandleTask(task, nil, true).Run() } +var syncLen = 0 + // syncStoreSkuTao 同步商品到淘鲜达 -func syncStoreSkuTao() { +func syncStoreSkuTao(beijin []int) { syncFlag := 0 task := tasksch.NewParallelTask("同步京西商品到淘鲜达平台,方案二使用", nil, jxcontext.AdminCtx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { @@ -651,18 +795,19 @@ func syncStoreSkuTao() { switch step { case 0: if beego.BConfig.RunMode != "jxgy" { - _, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{model.VendorIDTaoVegetable}, nil, false, nil, nil, syncFlag, true, true) + ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "2452A93EEB9111EC9B06525400E86DC0", "淘鲜达消息:", utils.Format4Output(beijin[syncLen:syncLen+5], false)) + _, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{model.VendorIDTaoVegetable}, beijin[syncLen:syncLen+5], false, nil, nil, syncFlag, true, true) errList.AddErr(err) } case 1: errList.AddErr(err) SaveImportantTaskID(TaskNameSyncStoreSku, SpecialTaskID) } - ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "2452A93EEB9111EC9B06525400E86DC0", "淘宝同步商品", utils.Format4Output(errList, false)) err = errList.GetErrListAsOne() return retVal, err }, []int{0, 1}) tasksch.HandleTask(task, nil, true).Run() + syncLen += 5 } func doDailyWork2() { diff --git a/business/partner/delivery/fn/waybill.go b/business/partner/delivery/fn/waybill.go index ad246b058..bcfed0c4c 100644 --- a/business/partner/delivery/fn/waybill.go +++ b/business/partner/delivery/fn/waybill.go @@ -86,7 +86,7 @@ func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill, cancelReasonID int, } func (c *DeliveryHandler) ComplaintRider(bill *model.Waybill, resonID int, resonContent string) (err error) { - err = api.FnAPI.ComplaintRider(bill.VendorOrderID, complaintReson2FnResonMap[resonID]) + err = api.FnAPI.ComplaintRider(bill.VendorOrderID, bill.VendorWaybillID, complaintReson2FnResonMap[resonID], resonContent) return err } diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go index bbb53774c..bff8a6251 100644 --- a/business/partner/delivery/mtps/waybill.go +++ b/business/partner/delivery/mtps/waybill.go @@ -523,14 +523,14 @@ func (c *DeliveryHandler) GetDeliverLiquidatedDamages(orderId string, deliverId return 0, err } - isMerchantCancel := false - // 获取发起取消的人员 - for _, v := range statusList { - if v.VendorStatus == utils.Int64ToStr(model.WaybillStatusCancel) { - isMerchantCancel = true // 商户取消 - break - } - } + //isMerchantCancel := false + //// 获取发起取消的人员 + //for _, v := range statusList { + // if v.VendorStatus == utils.Int64ToStr(model.WaybillStatusCancel) { + // isMerchantCancel = true // 商户取消 + // break + // } + //} bill, err := partner.CurOrderManager.LoadWaybill(deliverId, model.VendorIDMTPS) if err != nil { @@ -549,17 +549,17 @@ func (c *DeliveryHandler) GetDeliverLiquidatedDamages(orderId string, deliverId } // 到店 if statusList[i].VendorStatus == utils.Int2Str(mtpsapi.OrderStatusPickedUp) { - if isMerchantCancel { - return bill.DesiredFee, nil - } - return 0, nil + //if isMerchantCancel { + return bill.DesiredFee, nil + //} + //return 0, nil } // 接单 if statusList[i].VendorStatus == utils.Int2Str(mtpsapi.OrderStatusAccepted) { - if isMerchantCancel { - return 200, nil - } - return 0, nil + //if isMerchantCancel { + return 200, nil + //} + //return 0, nil } // 待调度 if statusList[i].VendorStatus == utils.Int2Str(mtpsapi.OrderStatusWaitingForSchedule) { diff --git a/business/partner/delivery/rider.go b/business/partner/delivery/rider.go index fa963d83e..060125fb4 100644 --- a/business/partner/delivery/rider.go +++ b/business/partner/delivery/rider.go @@ -96,14 +96,14 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) { continue } - if (v.WaybillVendorID == model.YES || v.WaybillVendorID == -1) && v.VendorID == model.VendorIDMTWM { - continue - } + //if (v.WaybillVendorID == model.YES || v.WaybillVendorID == -1) && v.VendorID == model.VendorIDMTWM { + // continue + //} if orderId == "" { // 订单id为空是,是定时轮询操作,不做此状态 waybillList, _ := dao.GetWaybills(dao.GetDB(), v.VendorOrderID, nil) if len(waybillList) > 0 && waybillList[0].Status > model.WaybillStatusEndBegin { - globals.SugarLogger.Debugf("订单物流状态结束,不在推送订单状态:orderID[%s],wayBillId[%s]", v.VendorOrderID, waybillList[0].VendorWaybillID) + globals.SugarLogger.Debug("订单物流状态结束,不在推送订单状态:orderID[%s],wayBillId[%s]", v.VendorOrderID, waybillList[0].VendorWaybillID) continue } } @@ -409,7 +409,14 @@ func UpdateFakeWayBillToTiktok() { // 设置骑手和下一状态时间 makeRiderInfo(fakeWayBill[i], riderInfo) - + if riderInfo.CourierName == "" && fakeWayBill[i].CourierName != "" { + riderInfo.CourierName = fakeWayBill[i].CourierName + riderInfo.CourierPhone = fakeWayBill[i].CourierMobile + } + if riderInfo.CourierName == "" && fakeWayBill[i].CourierName == "" { + riderInfo.CourierName = "石锋" + riderInfo.CourierPhone = "18048531223" + } if riderInfo.LogisticsContext != model.RiderGetOrderDeliverFailed && riderInfo.LogisticsContext != model.RiderGetOrderDeliverOther && riderInfo.LogisticsContext != model.RiderWaitRider { riderInfo.LogisticsContext = fmt.Sprintf(riderInfo.LogisticsContext, riderInfo.CourierName, riderInfo.CourierPhone) } @@ -452,7 +459,7 @@ func UpdateFakeWayBillToTiktok() { globals.SugarLogger.Debugf("UPDATA goods_order Err :%s", err.Error()) } // 饿百订单推送订单送达 - if fakeWayBill[i].OrderVendorID == model.VendorIDEBAI || fakeWayBill[i].OrderVendorID == model.VendorIDMTWM { + if fakeWayBill[i].OrderVendorID == model.VendorIDEBAI || fakeWayBill[i].OrderVendorID == model.VendorIDTaoVegetable || fakeWayBill[i].OrderVendorID == model.VendorIDMTWM { if err := handler.Swtich2SelfDelivered(order, "JingXiAdmin"); err != nil { globals.SugarLogger.Errorf("Swtich2SelfDelivered err := %v", err) } diff --git a/business/partner/purchase/ebai/order.go b/business/partner/purchase/ebai/order.go index 80ae20fe0..a8856ba4e 100644 --- a/business/partner/purchase/ebai/order.go +++ b/business/partner/purchase/ebai/order.go @@ -399,7 +399,7 @@ func (p *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName s err = nil case ebaiapi.WaybillStatusDeliveryCancled: p.trySyncCancelStatus(order.VendorOrderID) - case ebaiapi.WaybillStatusNew, ebaiapi.WaybillStatusRequestDelivery, ebaiapi.WaybillStatusWait4Courier: + case ebaiapi.WaybillStatusNew, ebaiapi.WaybillStatusEvent, ebaiapi.WaybillStatusRequestDelivery, ebaiapi.WaybillStatusWait4Courier: err = api.EbaiAPI.OrderCancelDelivery(order.VendorOrderID) // 取消呼叫众包骑手 case ebaiapi.WaybillStatusCourierAccepted: err = errors.New("骑手已接单,无法转自送") diff --git a/business/partner/purchase/tao_vegetable/order.go b/business/partner/purchase/tao_vegetable/order.go index 760c35459..afbdabf6f 100644 --- a/business/partner/purchase/tao_vegetable/order.go +++ b/business/partner/purchase/tao_vegetable/order.go @@ -132,17 +132,20 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode string, vendorOrderID int64, ve // 渠道活动 if v.ChannelActivityId != nil { activityId = append(activityId, utils.Str2Int64WithDefault(*v.ChannelActivityId, 999)) - activityName = append(activityName, *v.ChannelActivityId+":"+*v.ActivityName) + //activityName = append(activityName, *v.ChannelActivityId+":"+*v.ActivityName) + activityName = append(activityName, *v.ChannelActivityId) } // 业务活动 if v.BizActivityId != nil { activityId = append(activityId, utils.Str2Int64WithDefault(*v.BizActivityId, 999)) - activityName = append(activityName, *v.BizActivityId+":"+*v.ActivityName) + //activityName = append(activityName, *v.BizActivityId+":"+*v.ActivityName) + activityName = append(activityName, *v.BizActivityId) } // 商家erp活动 if v.MerchantActivityId != nil { activityId = append(activityId, utils.Str2Int64WithDefault(*v.MerchantActivityId, 999)) - activityName = append(activityName, *v.MerchantActivityId+":"+*v.ActivityName) + //activityName = append(activityName, *v.MerchantActivityId+":"+*v.ActivityName) + activityName = append(activityName, *v.MerchantActivityId) } } } @@ -189,17 +192,6 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode string, vendorOrderID int64, ve } // 抖音订单手机号和收货地址是否同城(虚拟号,无法获取到正确地址) order.PhoneAscription = model.PhoneAscriptionAddressNo + "-" + "归属信息不匹配:" + "虚拟电话号码" - //ascription, err := ascription_place.Find(order.ConsigneeMobile) - //if err != nil { - // order.PhoneAscription = model.PhoneAscriptionAddressNo + "-" + err.Error() - // err = nil - //} else { - // if strings.Contains(order.ConsigneeAddress, ascription.Province) && strings.Contains(order.ConsigneeAddress, ascription.City) { - // order.PhoneAscription = model.PhoneAscriptionAddressYes + "-" + ascription.Province + ascription.City - // } else { - // order.PhoneAscription = model.PhoneAscriptionAddressNo + "-" + "归属信息不匹配:" + ascription.Province + ascription.City - // } - //} // 本地获取订单记录 orderSeq, _ := dao.GetVendorOrderNumber(dao.GetDB(), model.VendorIDTaoVegetable, order.VendorStoreID) @@ -215,7 +207,6 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode string, vendorOrderID int64, ve order.StoreName = "未获取到" // 真实门店名称 } - globals.SugarLogger.Debugf("=====order : %s", utils.Format4Output(order, false)) return order, orderMap, err } diff --git a/business/partner/purchase/tao_vegetable/order_afs.go b/business/partner/purchase/tao_vegetable/order_afs.go index c92529ce4..fae22479e 100644 --- a/business/partner/purchase/tao_vegetable/order_afs.go +++ b/business/partner/purchase/tao_vegetable/order_afs.go @@ -71,10 +71,10 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal var err error var db = dao.GetDB() orderStatus, scarceGoods := c.callbackAfsMsg2Status(status, msg) - // 用户取消售后 switch status { case tao_vegetable.OrderStatusApplyAfs: refundData := msg.(*tao_vegetable.UserApplyRefundCallBack) + globals.SugarLogger.Debugf("================OrderStatusApplyAfs : %s", utils.Format4Output(msg, false)) var afsOrder *model.AfsOrder var api = getAPI("", 0, refundData.StoreId) @@ -287,60 +287,96 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal case tao_vegetable.OrderStatusRefundSuccess: // 用户退款成功回调,缺货拣货时,送达回触发.此时并没有售后单 if scarceGoods != nil { - var afsOrder *model.AfsOrder refundSuccess := msg.(*tao_vegetable.RefundOrderFinish) + var afsOrder *model.AfsOrder var api = getAPI("", 0, refundSuccess.StoreId) - - afsOrder = &model.AfsOrder{ - VendorID: model.VendorIDTaoVegetable, - AfsOrderID: refundSuccess.OutMainRefundId, - VendorOrderID: orderStatus.RefVendorOrderID, - VendorStoreID: refundSuccess.StoreId, - StoreID: 0, - AfsCreatedAt: orderStatus.StatusTime, - VendorAppealType: status, // 原始售后方式 - AppealType: model.AfsAppealTypeUserCancel, // 淘宝这个接口下发的只有用户取消 - VendorReasonType: tao_vegetable.OrderStatusOnSaleCancel, - ReasonType: 0, - ReasonDesc: "缺货调整,退款成功通知", - VendorOrgCode: api.GetVendorOrgCode(), + var isCreate = true + var outMainRefundIds = make(map[string]int64, 0) + detail, err := api.QueryAfsOrderDetail(&request591.AlibabaWdkOrderRefundGetRequest{ + OrderFrom: utils.Int64ToPointer(tao_vegetable.ChannelCome), + ShopId: nil, + StoreId: utils.String2Pointer(refundSuccess.StoreId), + RefundIds: &[]int64{utils.Str2Int64(refundSuccess.BizSubRefundId)}, + }) + if err != nil { + return tao_vegetable.CallBackResultInfo(err) + } + finalList, _ := dao.GetOrderRefundSkuList(db, []string{refundSuccess.OutMainRefundId}) + if len(finalList) != model.NO { + for _, f := range finalList { + for _, a := range *detail.Orders { + if f.SkuID == utils.Str2Int(*a.ItemCode) { + isCreate = false // 本地已经存在了记录 + outMainRefundIds[*a.OutMainRefundId] = *a.RefundAmount + } + } + } } - afsOrder.FreightUserMoney = 0 // 订单运费 - afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用 - afsOrder.BoxMoney = 0 // 餐盒费 - afsOrder.TongchengFreightMoney = 0 // 同城配送费 - afsOrder.SkuBoxMoney = 0 // 商品包装费 - afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态 - for _, v := range *scarceGoods { - var refundFee int64 = 0 - skuDetail := tao_vegetable.GoodsScarceRefund{} - if err := json.Unmarshal([]byte(*v.Attributes), &skuDetail); err != nil { - return tao_vegetable.CallBackResultInfo(err) + // 本地已经存在了售后记录,直接修改售后状态,否则创建售后记录 + if !isCreate { + for afsOrderId, afsMoney := range outMainRefundIds { + afs, _ := partner.CurOrderManager.LoadAfsOrder(afsOrderId, model.VendorIDTaoVegetable) + afs.VendorOrderID2 = refundSuccess.BizSubRefundId + afs.AfsFinishedAt = time.Now() + afs.Status = model.AfsOrderStatusFinished + afs.AfsTotalShopMoney = afsMoney + dao.UpdateEntity(db, afs, "VendorOrderID2", "AfsFinishedAt", "Status", "AfsTotalShopMoney") + } + } else { + afsOrder = &model.AfsOrder{ + VendorID: model.VendorIDTaoVegetable, + AfsOrderID: refundSuccess.OutMainRefundId, + VendorOrderID: orderStatus.RefVendorOrderID, + VendorOrderID2: refundSuccess.BizSubRefundId, + VendorStoreID: refundSuccess.StoreId, + StoreID: 0, + AfsCreatedAt: orderStatus.StatusTime, + VendorAppealType: status, // 原始售后方式 + AppealType: model.AfsAppealTypeUserCancel, // 淘宝这个接口下发的只有用户取消 + VendorReasonType: tao_vegetable.OrderStatusOnSaleCancel, + ReasonType: 0, + ReasonDesc: "缺货调整,退款成功通知", + VendorOrgCode: api.GetVendorOrgCode(), + } + afsOrder.FreightUserMoney = 0 // 订单运费 + afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用 + afsOrder.BoxMoney = 0 // 餐盒费 + afsOrder.TongchengFreightMoney = 0 // 同城配送费 + afsOrder.SkuBoxMoney = 0 // 商品包装费 + afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态 + + for _, v := range *scarceGoods { + var refundFee int64 = 0 + skuDetail := tao_vegetable.GoodsScarceRefund{} + if err := json.Unmarshal([]byte(*v.Attributes), &skuDetail); err != nil { + return tao_vegetable.CallBackResultInfo(err) + } + + orderSku := &model.OrderSkuFinancial{ + Count: utils.Float64TwoInt(utils.Str2Float64(*v.RefundQuantity)), + VendorSkuID: *v.SkuCode, + SkuID: utils.Str2Int(*v.SkuCode), + Name: skuDetail.SkuName, + UserMoney: *v.RefundAmount, + PmSkuSubsidyMoney: 0, // 平台补贴商品 + VendorOrderID: orderStatus.VendorOrderID, + VendorSubOrderID: *v.OutOrderId, + } + afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney + afsOrder.Skus = append(afsOrder.Skus, orderSku) + refundFee += *v.RefundAmount + + afsOrder.SkuUserMoney += refundFee + afsOrder.RefundType = model.AfsTypePartRefund + if afsOrder != nil { + //直接就来一个新的售后单,并且还是售后完成的 + afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt + afsOrder.Flag = model.AfsOrderFlagAgreeUserRefund + err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus) + } } - orderSku := &model.OrderSkuFinancial{ - Count: utils.Float64TwoInt(utils.Str2Float64(*v.RefundQuantity)), - VendorSkuID: *v.SkuCode, - SkuID: utils.Str2Int(*v.SkuCode), - Name: skuDetail.SkuName, - UserMoney: *v.RefundAmount, - PmSkuSubsidyMoney: 0, // 平台补贴商品 - VendorOrderID: orderStatus.VendorOrderID, - VendorSubOrderID: *v.OutOrderId, - } - afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney - afsOrder.Skus = append(afsOrder.Skus, orderSku) - refundFee += *v.RefundAmount - - afsOrder.SkuUserMoney += refundFee - afsOrder.RefundType = model.AfsTypePartRefund - if afsOrder != nil { - //直接就来一个新的售后单,并且还是售后完成的 - afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt - afsOrder.Flag = model.AfsOrderFlagAgreeUserRefund - err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus) - } } } diff --git a/business/partner/purchase/tao_vegetable/store_sku2.go b/business/partner/purchase/tao_vegetable/store_sku2.go index b7c03e0f4..2d16b1c0c 100644 --- a/business/partner/purchase/tao_vegetable/store_sku2.go +++ b/business/partner/purchase/tao_vegetable/store_sku2.go @@ -209,7 +209,6 @@ func (p *PurchaseHandler) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, v } func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) { - globals.SugarLogger.Debugf("len CreateStoreSkus := %d", len(storeSkuList)) failedList, err = p.createOrUpdateStoreSkus(ctx, storeID, vendorStoreID, storeSkuList, true) return failedList, err } @@ -236,39 +235,26 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI func UpdateTaoVegetable(api *tao_vegetable.API, storeSkuList []*dao.StoreSkuSyncInfo, vendorStoreID string, storeID int, syncType string) (failedList []*partner.StoreSkuInfoWithErr, err error) { param := &request585.AlibabaWdkSkuUpdateRequest{} updateSkuList := make([]domain585.AlibabaWdkSkuUpdateSkuDo, 0, 0) - //totalCount := len(storeSkuList) for _, v := range storeSkuList { price := utils.String2Pointer(utils.Float64ToStr(float64(v.VendorPrice) / float64(100))) updateSku := domain585.AlibabaWdkSkuUpdateSkuDo{ - OuCode: utils.String2Pointer(vendorStoreID), - SkuCode: utils.String2Pointer(utils.Int2Str(v.SkuID)), - SkuName: utils.String2Pointer(checkNameLength(v.SkuName)), - MemberPrice: price, - SkuPrice: price, // 优先使用skuPrice 靠后SalePrice - SuggestedPrice: price, // 优先使用skuPrice 靠后SalePrice - CategoryCode: utils.String2Pointer(utils.Int2Str(v.CategoryID)), - MerchantCatCode: utils.String2Pointer(v.VendorCatID), // 优先使用 靠后 category_code + OuCode: utils.String2Pointer(vendorStoreID), + SkuCode: utils.String2Pointer(utils.Int2Str(v.SkuID)), + SkuName: utils.String2Pointer(checkNameLength(v.SkuName, v.Weight, v.Unit)), + SkuPrice: price, // 优先使用skuPrice 靠后SalePrice + CategoryCode: utils.String2Pointer(utils.Int2Str(v.CategoryID)), + MerchantCatCode: utils.String2Pointer(v.VendorCatID), // 优先使用 靠后 category_code + CleanSkuMemberPrice: utils.Int64ToPointer(model.YES), + SubTitle: utils.String2Pointer("小时达"), } if v.MinOrderCount <= model.YES { updateSku.PurchaseQuantity = utils.Int64ToPointer(model.YES) // 起购单位 } else { updateSku.PurchaseQuantity = utils.Int64ToPointer(int64(v.MinOrderCount)) // 起购单位 } - updateSku.SkuPicUrls = uploadImg(api, []string{v.Img, v.Img2, v.Img3, v.Img4, v.Img5, v.DescImg}) + // 修改暂时不修改图片,保持效率 + //updateSku.SkuPicUrls = uploadImg(api, []string{v.Img, v.Img2, v.Img3, v.Img4, v.Img5, v.DescImg}) updateSkuList = append(updateSkuList, updateSku) - //if (index+model.YES)%tao_vegetable.MAXHandleCount == model.NO || index+model.YES == totalCount { - // param.ParamList = &updateSkuList - // result, err := api.UpdateStoreSku(param) - // if err != nil { - // globals.SugarLogger.Debugf("UpdateStoreSku Tao Vegetable err : %s", err.Error()) - // } - // // 记录失败的同步数据 - // createFailedList, _ := SelectStoreSkuListByFoodList(storeSkuList, *result, storeID, model.VendorChineseNames[model.VendorIDTaoVegetable], syncType) - // failedList = append(failedList, createFailedList...) - // // 记录同步成功的数据 - // param.ParamList = nil - // updateSkuList = make([]domain585.AlibabaWdkSkuUpdateSkuDo, 0, 0) - //} } param.ParamList = &updateSkuList @@ -286,10 +272,8 @@ func UpdateTaoVegetable(api *tao_vegetable.API, storeSkuList []*dao.StoreSkuSync func createTaoVegetable(ctx *jxcontext.Context, api *tao_vegetable.API, storeSkuList []*dao.StoreSkuSyncInfo, vendorStoreID string, storeID int, syncType string) (failedList []*partner.StoreSkuInfoWithErr, err error) { createPram := &request585.AlibabaWdkSkuAddRequest{} param := make([]domain585.AlibabaWdkSkuAddSkuDo, 0, 0) - //totalCount := len(storeSkuList) vendorSkuIdMap := make(map[string]string, 0) - globals.SugarLogger.Debugf("storeSkuList := %d", len(storeSkuList)) for _, storeSku := range storeSkuList { price := utils.String2Pointer(utils.Float64ToStr(utils.Int64ToFloat64(storeSku.VendorPrice) / utils.Int64ToFloat64(100))) sku := domain585.AlibabaWdkSkuAddSkuDo{ @@ -308,14 +292,13 @@ func createTaoVegetable(ctx *jxcontext.Context, api *tao_vegetable.API, storeSku SaleUnit: utils.String2Pointer("份"), LifeStatus: utils.String2Pointer(tao_vegetable.CreateSkuLeafStatus), SaleSpec: utils.String2Pointer(fmt.Sprintf("%d %s*1%s", storeSku.Weight, "g", storeSku.Unit)), - StepQuantity: utils.Int64ToPointer(model.YES), // 每次购买至少增加一个购买单位 - SubTitle: utils.String2Pointer("同城包邮"), - SubTitle1: utils.String2Pointer("一小时速达"), + StepQuantity: utils.Int64ToPointer(model.YES), // 每次购买至少增加一个购买单位 OnlineSaleFlag: utils.Int64ToPointer(tao_vegetable.CreateOnlineSaleFlag), // 门店控制是否可见 + SubTitle: utils.String2Pointer("小时达"), + SubTitle1: utils.String2Pointer("一小时速达"), //DeliveryUnit: utils.String2Pointer(storeSku.Unit), DeliveryUnit: utils.String2Pointer("份"), DeliverySpec: utils.String2Pointer(utils.Int2Str(model.YES)), - MemberPrice: price, Storage: utils.String2Pointer(tao_vegetable.CreateStorage), PickFloatRate: utils.String2Pointer(utils.Int2Str(model.NO)), // ? 0 ForbidReceiveDays: utils.Int64ToPointer(tao_vegetable.CreateShelfLife), // ? 7 @@ -341,7 +324,7 @@ func createTaoVegetable(ctx *jxcontext.Context, api *tao_vegetable.API, storeSku if sku.SkuPicUrls == nil { continue } - sku.SkuName = utils.String2Pointer(checkNameLength(storeSku.Name)) + sku.SkuName = utils.String2Pointer(checkNameLength(storeSku.Name, storeSku.Weight, storeSku.Unit)) if storeSku.MinOrderCount <= model.YES { sku.PurchaseQuantity = utils.Int64ToPointer(model.YES) // 起购单位 @@ -370,28 +353,14 @@ func createTaoVegetable(ctx *jxcontext.Context, api *tao_vegetable.API, storeSku }, } param = append(param, sku) - //if (index+model.YES)%tao_vegetable.MAXHandleCount == model.NO || index+model.YES == totalCount { - // createPram.ParamList = ¶m - // result, err := api.AddStoreSku(createPram) - // if err != nil { - // globals.SugarLogger.Debugf("创建淘鲜达商品异常:%s", err.Error()) - // } - // // 记录失败的同步数据 - // failedList2, vendorSkuIdMap2 := SelectStoreSkuListByFoodList(storeSkuList, *result, storeID, model.VendorChineseNames[model.VendorIDTaoVegetable], syncType) - // failedList = append(failedList, failedList2...) - // for k, v := range vendorSkuIdMap2 { - // vendorSkuIdMap[k] = v - // } - // - // createPram.ParamList = nil - // param = make([]domain585.AlibabaWdkSkuAddSkuDo, 0, 0) - //} } createPram.ParamList = ¶m result, err := api.AddStoreSku(createPram) if err != nil { globals.SugarLogger.Debugf("创建淘鲜达商品异常:%s", err.Error()) } + //ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "2452A93EEB9111EC9B06525400E86DC0", fmt.Sprintf("定时创建商品[门店id:%d],出入商品个数[%d]", storeID, len(storeSkuList)), utils.Format4Output(result, false)) + // 记录失败的同步数据 failedList2, vendorSkuIdMap2 := SelectStoreSkuListByFoodList(storeSkuList, *result, storeID, model.VendorChineseNames[model.VendorIDTaoVegetable], syncType) failedList = append(failedList, failedList2...) @@ -411,13 +380,14 @@ func createTaoVegetable(ctx *jxcontext.Context, api *tao_vegetable.API, storeSku } failedListStock := updateStoreSkusStockByCreate(ctx, api, storeID, vendorStoreID, successSku) failedList = append(failedList, failedListStock...) - globals.SugarLogger.Debugf("failedList := %s", utils.Format4Output(failedList, false)) - globals.SugarLogger.Debugf("storeSkuList := %s", utils.Format4Output(storeSkuList, false)) return failedList, nil } -func checkNameLength(name string) string { +func checkNameLength(name string, weight int, uint string) string { lastName := "" + if !strings.Contains(name, uint) { + name = fmt.Sprintf("%s %d/%s", name, weight, uint) + } if strings.Contains(name, "其它") { name = strings.ReplaceAll(name, "其它", "") } @@ -465,7 +435,7 @@ func checkNameLength(name string) string { return lastName } } - return name[0:60] + return lastName[0:60] } func uploadImg(api *tao_vegetable.API, imgs []string) *string { @@ -510,19 +480,6 @@ func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, v OnlineSaleFlag: utils.Int64ToPointer(tao_vegetable.CreateOfflineSaleFlag), } updateSkuList = append(updateSkuList, updateSku) - - //if (index+model.YES)%tao_vegetable.MAXHandleCount == model.NO || (index+1) == len(storeSkuList) { - // param.ParamList = &updateSkuList - // result, err := api.UpdateStoreSku(param) - // if err != nil { - // globals.SugarLogger.Debugf("UpdateStoreSku Tao Vegetable err : %s", err.Error()) - // } - // // 记录失败的同步数据 - // createFailedList, _ := SelectStoreSkuListByFoodList(storeSkuList, *result, storeID, model.VendorChineseNames[model.VendorIDTaoVegetable], "删除商品(暂无接口,下架处理)") - // failedList = append(failedList, createFailedList...) - // param.ParamList = nil - // updateSkuList = make([]domain585.AlibabaWdkSkuUpdateSkuDo, 0, 0) - //} } param.ParamList = &updateSkuList @@ -534,28 +491,6 @@ func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, v createFailedList, _ := SelectStoreSkuListByFoodList(storeSkuList, *result, storeID, model.VendorChineseNames[model.VendorIDTaoVegetable], "删除商品(暂无接口,下架处理)") failedList = append(failedList, createFailedList...) return failedList, err - //param := &request.AlibabaAxChannelSkuStatusUpdateRequest{ChannelSkuUpdateStatusReq: &domain.AlibabaAxChannelSkuStatusUpdateChannelSkuUpdateStatusReq{ - // StoreId: utils.String2Pointer(vendorStoreID), - // ChannelCode: utils.String2Pointer(tao_vegetable.TaoVegetableChannelCode), - // OnlineSaleFlag: utils.Int64ToPointer(tao_vegetable.CreateIsOnline), - //}} - //var updateOffShelf = make([]tao_vegetable.VegetableResultList, 0, len(storeSkuList)) - //for _, v := range storeSkuList { - // param.ChannelSkuUpdateStatusReq.SkuCode = utils.String2Pointer(utils.Int2Str(v.SkuID)) - // // StoreSkuUpdateOffShelf 这个接口暂时有问题使用更新接口上下架 - // if err = getAPI(getStoreVendorOrgCode(storeID), storeID, vendorStoreID).StoreSkuUpdateOffShelf(param); err != nil { - // updateOffShelf = append(updateOffShelf, tao_vegetable.VegetableResultList{ - // ProductID: v.VendorSkuID, - // SkuID: utils.Int2Str(v.SkuID), - // ErrMsg: err.Error(), - // }) - // } - //} - //failedList, _ = SelectStoreSkuListByFoodList(storeSkuList, updateOffShelf, storeID, model.VendorChineseNames[model.VendorIDTaoVegetable], "批量删除商品(暂时下架,无删除接口)") - //if len(failedList) > 0 { - // err = nil - //} - //return failedList, err } // UpdateStoreSkusStatus 批量更新商品上下架状态 @@ -569,21 +504,10 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr OuCode: utils.String2Pointer(vendorStoreID), SkuCode: utils.String2Pointer(utils.Int2Str(v.SkuID)), OnlineSaleFlag: utils.Int64ToPointer(onlineStatus), + SubTitle: utils.String2Pointer("小时达"), + //CleanSkuMemberPrice: utils.Int64ToPointer(model.YES), } updateSkuList = append(updateSkuList, updateSku) - - //if (index+model.YES)%tao_vegetable.MAXHandleCount == model.NO || (index+1) == len(storeSkuList) { - // param.ParamList = &updateSkuList - // result, err := api.UpdateStoreSku(param) - // if err != nil { - // globals.SugarLogger.Debugf("UpdateStoreSku Tao Vegetable err : %s", err.Error()) - // } - // // 记录失败的同步数据 - // createFailedList, _ := SelectStoreSkuListByFoodList(storeSkuList, *result, storeID, model.VendorChineseNames[model.VendorIDTaoVegetable], "批量更新商品上下架") - // failedList = append(failedList, createFailedList...) - // param.ParamList = nil - // updateSkuList = make([]domain585.AlibabaWdkSkuUpdateSkuDo, 0, 0) - //} } param.ParamList = &updateSkuList @@ -608,23 +532,9 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg SkuCode: utils.String2Pointer(utils.Int2Str(v.SkuID)), SkuPrice: price, CleanSkuMemberPrice: utils.Int64ToPointer(model.YES), - SuggestedPrice: price, - MemberPrice: price, + SubTitle: utils.String2Pointer("小时达"), } updateSkuList = append(updateSkuList, updateSku) - - //if (index+model.YES)%tao_vegetable.MAXHandleCount == model.NO || (index+1) == len(storeSkuList) { - // param.ParamList = &updateSkuList - // result, err := api.UpdateStoreSku(param) - // if err != nil { - // globals.SugarLogger.Debugf("UpdateStoreSku Tao Vegetable err : %s", err.Error()) - // } - // // 记录失败的同步数据 - // createFailedList, _ := SelectStoreSkuListByFoodList(storeSkuList, *result, storeID, model.VendorChineseNames[model.VendorIDTaoVegetable], "修改商品价格") - // failedList = append(failedList, createFailedList...) - // param.ParamList = nil - // updateSkuList = make([]domain585.AlibabaWdkSkuUpdateSkuDo, 0, 0) - //} } param.ParamList = &updateSkuList result, err := api.UpdateStoreSku(param) @@ -926,21 +836,6 @@ func (p *PurchaseHandler) UpdateStoreSkusSpecTag(ctx *jxcontext.Context, vendorO } updateSkuList = append(updateSkuList, updateSku) - //if (index+model.YES)%tao_vegetable.MAXHandleCount == model.NO || (index+1) == len(storeSkuList) { - // param.ParamList = &updateSkuList - // result, err := api.UpdateStoreSku(param) - // if err != nil { - // globals.SugarLogger.Debugf("UpdateStoreSku Tao Vegetable err : %s", err.Error()) - // } - // // 记录失败的同步数据 - // for _, v := range *result { - // if v.ErrMsg != "" { - // errList = append(errList, v.ErrMsg) - // } - // } - // param.ParamList = nil - // updateSkuList = make([]domain585.AlibabaWdkSkuUpdateSkuDo, 0, 0) - //} } param.ParamList = &updateSkuList result, err := api.UpdateStoreSku(param) diff --git a/controllers/jx_order.go b/controllers/jx_order.go index 652d05250..2c59ab300 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -119,7 +119,7 @@ func (c *OrderController) QueryOrderWaybillFeeInfo() { // @Param token header string true "认证token" // @Param vendorOrderID formData string true "订单ID" // @Param vendorID formData int true "订单所属的厂商ID" -// @Param courierVendorIDs formData string false "运单厂商ID(缺省全部)" +// @Param courierVendorIDs formData string false "运单厂商ID(缺省全部)" // @Param maxDeliveryFee formData int false "最高限价(为0时为缺省最大值)" // @Param forceCreate formData bool false "是否强制创建(忽略订单状态检查及其它参数)" // @Success 200 {object} controllers.CallResult