From 4ca1f56cb62b197adb256eebf9e682ca90533c93 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 28 Nov 2019 10:32:54 +0800 Subject: [PATCH 01/31] =?UTF-8?q?=E4=B8=8D=E9=9C=80=E8=A6=81token=E7=9A=84?= =?UTF-8?q?API=E6=B7=BB=E5=8A=A0=E5=8F=AF=E9=80=89=E5=8F=82=E6=95=B0token(?= =?UTF-8?q?=E4=BB=A5=E4=BE=BF=E8=BD=AC=E5=85=A5=E6=97=B6=E8=83=BD=E8=BE=93?= =?UTF-8?q?=E5=87=BAtoken=E4=BF=A1=E6=81=AF=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controllers/cms.go | 1 + controllers/cms_food_recipe.go | 3 +++ controllers/cms_sku.go | 1 + controllers/cms_store.go | 1 + controllers/cms_store_sku.go | 1 + 5 files changed, 7 insertions(+) diff --git a/controllers/cms.go b/controllers/cms.go index e0c5d79ed..3d73e6e06 100644 --- a/controllers/cms.go +++ b/controllers/cms.go @@ -18,6 +18,7 @@ type CmsController struct { // @Title 得到地点(省,城市,区)信息 // @Description 得到地点(省,城市,区)信息。 +// @Param token header string false "认证token" // @Param keyword query string false "查询关键字(可以为空,为空表示不限制)" // @Param parentCode query int false "上级地点code,这个指的是国家标准CODE(中国为:100000,北京为:110000,北京市为:110100),不是数据库中的ID" // @Param level query int false "地点级别:省为1,市为2,区为3,注意直辖市也要分省与市级" diff --git a/controllers/cms_food_recipe.go b/controllers/cms_food_recipe.go index c5017f30c..95be21b8a 100644 --- a/controllers/cms_food_recipe.go +++ b/controllers/cms_food_recipe.go @@ -72,6 +72,7 @@ func (c *FoodRecipeController) UpdateFoodRecipe() { // @Title 查询菜谱列表 // @Description 查询菜谱列表 +// @Param token header string false "认证token" // @Param keyword query string false "关键字" // @Param authorID query string false "创建者ID" // @Param skuIDs query string false "skuID列表" @@ -92,6 +93,7 @@ func (c *FoodRecipeController) QueryFoodRecipes() { // @Title 得到我的推荐菜谱列表 // @Description 得到我的推荐菜谱列表 +// @Param token header string false "认证token" // @Param keyword query string false "关键字" // @Param offset query int false "菜谱列表起始序号(以0开始,缺省为0)" // @Param pageSize query int false "菜谱列表页大小(缺省为50,-1表示全部)" @@ -107,6 +109,7 @@ func (c *FoodRecipeController) GetRecommendFoodRecipes() { // @Title 得到菜谱详情 // @Description 得到菜谱详情 +// @Param token header string false "认证token" // @Param recipeID query int true "菜谱ID" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go index e94bf11ec..164d6df80 100644 --- a/controllers/cms_sku.go +++ b/controllers/cms_sku.go @@ -31,6 +31,7 @@ func (c *SkuController) GetVendorCategories() { // @Title 得到商品类别 // @Description 得到商品类别(区别于厂商家SKU类别) +// @Param token header string false "认证token" // @Param parentID query int false "父ID,-1表示所有,缺省为-1" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult diff --git a/controllers/cms_store.go b/controllers/cms_store.go index 22d1b4420..6d43d09c3 100644 --- a/controllers/cms_store.go +++ b/controllers/cms_store.go @@ -534,6 +534,7 @@ func (c *StoreController) SyncStoresCourierInfo() { // @Title 根据位置得到推荐门店列表 // @Description 根据位置得到推荐门店列表 +// @Param token header string false "认证token" // @Param lng query float64 true "经度" // @Param lat query float64 true "纬度" // @Param needWalkDistance query bool false "是否需要返回步行距离(且以步行距离排序)" diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index 3aa15fb22..61bfeaa45 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -59,6 +59,7 @@ func (c *StoreSkuController) GetStoreSkus() { // @Title 得到商家商品信息 // @Description 得到商家商品信息,如下条件之间是与的关系。对于没有认领的商品,按城市限制。但对于已经认领的商品就不限制了,因为已经在平台上可售,可以操作(改价等等) +// @Param token header string false "认证token" // @Param storeIDs query string false "门店ID" // @Param isFocus query bool true "是否已关注(认领)" // @Param keyword query string false "查询关键字(可以为空,为空表示不限制)" From fb758e12115db9aec941811deb6f2a6c7b0cf86c Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 28 Nov 2019 13:35:20 +0800 Subject: [PATCH 02/31] up --- controllers/act.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controllers/act.go b/controllers/act.go index 8f94495af..9163a28fb 100644 --- a/controllers/act.go +++ b/controllers/act.go @@ -315,7 +315,7 @@ func (c *ActController) ForceUpdateVendorPrice() { c.callForceUpdateVendorPrice(func(params *tActForceUpdateVendorPriceParams) (retVal interface{}, errCode string, err error) { var actStoreSkuList []*act.ActStoreSkuParam if err = jxutils.Strings2Objs(params.ActStoreSkuList, &actStoreSkuList); err == nil { - act.ForceUpdateVendorPrice(params.Ctx, params.VendorID, params.Type, actStoreSkuList, params.IsAsync) + retVal, err = act.ForceUpdateVendorPrice(params.Ctx, params.VendorID, params.Type, actStoreSkuList, params.IsAsync) } return retVal, "", err }) From 1a64005d81157eeb4c793d0521292ac701355977 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 28 Nov 2019 13:43:05 +0800 Subject: [PATCH 03/31] up --- business/jxstore/act/act.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index a370b7c00..0631a04e4 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -952,28 +952,31 @@ func ForceUpdateVendorPrice(ctx *jxcontext.Context, vendorID int, actType int, s } storeSkuBind.DeletedAt = utils.DefaultTimeValue if err = dao.GetEntity(db, storeSkuBind, model.FieldStoreID, model.FieldSkuID, model.FieldDeletedAt); err == nil { - if v.VendorPrice != 0 { + vendorPrice := int(v.VendorPrice) + if vendorPrice != 0 { if err2 := checkDiscountValidation(actType, float64(v.ActualActPrice)*100/float64(v.VendorPrice)); err2 != nil { v.ErrMsg = err2.Error() wrongSkuList = append(wrongSkuList, v) storeSkuBind = nil } } else { - vendorPrice := dao.GetStoreSkuBindVendorPrice(storeSkuBind, vendorID) + vendorPrice = dao.GetStoreSkuBindVendorPrice(storeSkuBind, vendorID) if checkDiscountValidation(actType, float64(v.ActualActPrice)*100/float64(vendorPrice)) != nil { if actType == model.ActSkuSecKill { vendorPrice = int(v.ActualActPrice)*100/maxDiscount4SkuSecKill + 10 } else if actType == model.ActSkuDirectDown { vendorPrice = int(v.ActualActPrice) + 10 } - dao.SetStoreSkuBindVendorPrice(storeSkuBind, vendorID, vendorPrice) - if vendorID != model.VendorIDJX { - dao.SetStoreSkuBindSyncStatus(storeSkuBind, vendorID, dao.GetStoreSkuBindSyncStatus(storeSkuBind, vendorID)|model.SyncFlagPriceMask) - } - storeSkuBind.LastOperator = ctx.GetUserName() + } else { + storeSkuBind = nil } } if storeSkuBind != nil { + dao.SetStoreSkuBindVendorPrice(storeSkuBind, vendorID, vendorPrice) + if vendorID != model.VendorIDJX { + dao.SetStoreSkuBindSyncStatus(storeSkuBind, vendorID, dao.GetStoreSkuBindSyncStatus(storeSkuBind, vendorID)|model.SyncFlagPriceMask) + } + storeSkuBind.LastOperator = ctx.GetUserName() storeSkuBindList = append(storeSkuBindList, storeSkuBind) } } else { From 57cc23f36b8e9ecfefc74248358880de6bbc23ee Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 28 Nov 2019 13:51:17 +0800 Subject: [PATCH 04/31] =?UTF-8?q?ForceUpdateVendorPrice=E4=B8=AD=E7=94=B1A?= =?UTF-8?q?ctPrice=E6=9B=BF=E6=8D=A2ActualActPrice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/act/act.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index 0631a04e4..542a4c190 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -954,18 +954,18 @@ func ForceUpdateVendorPrice(ctx *jxcontext.Context, vendorID int, actType int, s if err = dao.GetEntity(db, storeSkuBind, model.FieldStoreID, model.FieldSkuID, model.FieldDeletedAt); err == nil { vendorPrice := int(v.VendorPrice) if vendorPrice != 0 { - if err2 := checkDiscountValidation(actType, float64(v.ActualActPrice)*100/float64(v.VendorPrice)); err2 != nil { + if err2 := checkDiscountValidation(actType, float64(v.ActPrice)*100/float64(v.VendorPrice)); err2 != nil { v.ErrMsg = err2.Error() wrongSkuList = append(wrongSkuList, v) storeSkuBind = nil } } else { vendorPrice = dao.GetStoreSkuBindVendorPrice(storeSkuBind, vendorID) - if checkDiscountValidation(actType, float64(v.ActualActPrice)*100/float64(vendorPrice)) != nil { + if checkDiscountValidation(actType, float64(v.ActPrice)*100/float64(vendorPrice)) != nil { if actType == model.ActSkuSecKill { - vendorPrice = int(v.ActualActPrice)*100/maxDiscount4SkuSecKill + 10 + vendorPrice = int(v.ActPrice)*100/maxDiscount4SkuSecKill + 10 } else if actType == model.ActSkuDirectDown { - vendorPrice = int(v.ActualActPrice) + 10 + vendorPrice = int(v.ActPrice) + 10 } } else { storeSkuBind = nil From 2c21ea438579efc6769392cb503cafb914c4fe7c Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 28 Nov 2019 14:08:18 +0800 Subject: [PATCH 05/31] up --- business/jxstore/act/act.go | 1 + 1 file changed, 1 insertion(+) diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index 542a4c190..89dfe7fe3 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -956,6 +956,7 @@ func ForceUpdateVendorPrice(ctx *jxcontext.Context, vendorID int, actType int, s if vendorPrice != 0 { if err2 := checkDiscountValidation(actType, float64(v.ActPrice)*100/float64(v.VendorPrice)); err2 != nil { v.ErrMsg = err2.Error() + v.ActualActPrice = v.ActPrice wrongSkuList = append(wrongSkuList, v) storeSkuBind = nil } From 45827aceb5462b3a00dc139d98dd364a68dbb2aa Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 28 Nov 2019 14:18:52 +0800 Subject: [PATCH 06/31] =?UTF-8?q?+CanSwitch2SelfDeliver=EF=BC=8C=E7=BE=8E?= =?UTF-8?q?=E5=9B=A2=E9=A2=84=E5=AE=9A=E5=8D=95=E6=98=AF=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E8=BD=AC=E8=87=AA=E9=80=81=E7=9A=84=20=E5=87=8F=E5=B0=8F?= =?UTF-8?q?=E8=BD=AC=E8=87=AA=E9=80=81=E5=A4=B1=E8=B4=A5=E5=B0=9D=E8=AF=95?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E9=97=B4=E9=9A=99=E8=87=B33=E7=A7=92?= =?UTF-8?q?=EF=BC=88=E4=BB=A5=E5=85=8D=E5=87=BA=E7=8E=B0=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E4=B8=89=E6=96=B9=E8=BF=90=E5=8D=95=E7=9A=84?= =?UTF-8?q?=E6=83=85=E5=86=B5=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jxcallback/scheduler/defsch/defsch.go | 30 ++++++++++++++----- business/jxstore/act/act_test.go | 10 ++++--- business/partner/delivery/mtps/waybill.go | 6 ++-- business/partner/partner.go | 4 +++ business/partner/partner_order.go | 2 ++ business/partner/purchase/mtwm/order.go | 5 ++++ 6 files changed, 43 insertions(+), 14 deletions(-) diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 7f06ad3fe..d4ffa17a8 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -35,6 +35,9 @@ const ( second2AutoPickupGap = 60 //随机60秒 time2AutoPickupAhead = 20 * time.Second // 有最后拣货时间的提前值 + switch2SelfDeliverRetryGap = 3 * time.Second // 转自送失败尝试的时间间隙 + switch2SelfDeliverRetryCount = 2 // 转自送失败尝试次数 + // (把pending order timerout 在-pendingOrderTimerMinMinSecond至pendingOrderTimerMaxSecond映射到pendingOrderTimerMinSecond至pendingOrderTimerMaxSecond) pendingOrderTimerMinMinSecond = 5 * 60 // 5分钟 pendingOrderTimerMinSecond = 2 @@ -296,11 +299,13 @@ func init() { ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool { // 饿百转自送的时机不太清楚,暂时禁用超时转自送,在饿百运单取消时还是会自动创建 // 非自配送商家使用 + order := savedOrderInfo.order return savedOrderInfo.isDeliveryCompetition && - model.IsOrderDeliveryByPlatform(savedOrderInfo.order) && - savedOrderInfo.order.VendorID == bill.WaybillVendorID && - savedOrderInfo.order.VendorID != model.VendorIDEBAI && - savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake + model.IsOrderDeliveryByPlatform(order) && + order.VendorID == bill.WaybillVendorID && + order.VendorID != model.VendorIDEBAI && + order.DeliveryType != model.OrderDeliveryTypeSelfTake && + isOrderCanSwitch2SelfDeliver(order) }, }, //* @@ -317,10 +322,11 @@ func init() { // 非自配送商家使用 return (order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin) && savedOrderInfo.isDeliveryCompetition && - savedOrderInfo.order.VendorID == bill.WaybillVendorID && - model.IsOrderDeliveryByPlatform(savedOrderInfo.order) && + order.VendorID == bill.WaybillVendorID && + model.IsOrderDeliveryByPlatform(order) && order.VendorID == model.VendorIDEBAI && - savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake + order.DeliveryType != model.OrderDeliveryTypeSelfTake && + isOrderCanSwitch2SelfDeliver(order) }, }, //*/ @@ -511,7 +517,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo } s.notify3rdPartyWaybill(order, bill, isBillAlreadyCandidate) } else { - s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, 2, 10*time.Second) + s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, switch2SelfDeliverRetryCount, switch2SelfDeliverRetryGap) } } } else if !s.isBillCandidate(order, bill) && bill.WaybillVendorID != order.VendorID { @@ -1276,3 +1282,11 @@ func (s *DefScheduler) notify3rdPartyWaybill(order *model.GoodsOrder, bill *mode }) } } + +func isOrderCanSwitch2SelfDeliver(order *model.GoodsOrder) (isCan bool) { + isCan = true + if handler := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID); handler != nil { + isCan, _ = handler.CanSwitch2SelfDeliver(order) + } + return isCan +} diff --git a/business/jxstore/act/act_test.go b/business/jxstore/act/act_test.go index 47c393cf9..dd76e8cf3 100644 --- a/business/jxstore/act/act_test.go +++ b/business/jxstore/act/act_test.go @@ -192,16 +192,18 @@ func TestSyncAct(t *testing.T) { } func TestForceUpdateVendorPrice(t *testing.T) { - _, err := ForceUpdateVendorPrice(jxcontext.AdminCtx, model.VendorIDJD, model.ActSkuDirectDown, []*ActStoreSkuParam{ + hint, err := ForceUpdateVendorPrice(jxcontext.AdminCtx, model.VendorIDJD, model.ActSkuDirectDown, []*ActStoreSkuParam{ &ActStoreSkuParam{ ActStoreSku: model.ActStoreSku{ - StoreID: 100118, - SkuID: 22509, + StoreID: 100118, + SkuID: 22509, + ActPrice: 9900, }, - ActualActPrice: 9900, + VendorPrice: 19900, }, }, false) if err != nil { t.Fatal(err) } + t.Log(hint) } diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go index 105381db3..25fca1ea7 100644 --- a/business/partner/delivery/mtps/waybill.go +++ b/business/partner/delivery/mtps/waybill.go @@ -36,8 +36,10 @@ type DeliveryHandler struct { } func init() { - curDeliveryHandler = new(DeliveryHandler) - partner.RegisterDeliveryPlatform(curDeliveryHandler, true) + if api.MtpsAPI != nil { + curDeliveryHandler = new(DeliveryHandler) + partner.RegisterDeliveryPlatform(curDeliveryHandler, true) + } } func (c *DeliveryHandler) GetVendorID() int { diff --git a/business/partner/partner.go b/business/partner/partner.go index 102304630..b78cb21e8 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -190,6 +190,10 @@ func (p *BasePurchasePlatform) GetStatusActionTimeout(order *model.GoodsOrder, s return params } +func (c *BasePurchasePlatform) CanSwitch2SelfDeliver(order *model.GoodsOrder) (isCan bool, err error) { + return true, nil +} + func init() { PurchasePlatformHandlers = make(map[int]IPurchasePlatformHandler) PurchaseOrderHandlers = make(map[int]IPurchasePlatformOrderHandler) diff --git a/business/partner/partner_order.go b/business/partner/partner_order.go index 99d290b67..442a87ce3 100644 --- a/business/partner/partner_order.go +++ b/business/partner/partner_order.go @@ -22,6 +22,8 @@ type IPurchasePlatformOrderHandler interface { CallCourier(ctx *jxcontext.Context, order *model.GoodsOrder) (err error) // 取货失败后再次招唤平台配送 ConfirmReceiveGoods(ctx *jxcontext.Context, order *model.GoodsOrder) (err error) // 投递失败后确认收到退货 + // 是否可能转商家自送 + CanSwitch2SelfDeliver(order *model.GoodsOrder) (isCan bool, err error) // 将订单从购物平台配送转为自送 Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) diff --git a/business/partner/purchase/mtwm/order.go b/business/partner/purchase/mtwm/order.go index 732e44146..29ca7481b 100644 --- a/business/partner/purchase/mtwm/order.go +++ b/business/partner/purchase/mtwm/order.go @@ -468,6 +468,11 @@ func (p *PurchaseHandler) ConfirmReceiveGoods(ctx *jxcontext.Context, order *mod return err } +// 美团预定单不能转商家自送 +func (c *PurchaseHandler) CanSwitch2SelfDeliver(order *model.GoodsOrder) (isCan bool, err error) { + return order.BusinessType != model.BusinessTypeDingshida, nil +} + func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) { globals.SugarLogger.Debugf("mtwm Swtich2SelfDeliver orderID:%s", order.VendorOrderID) if globals.EnableMtwmStoreWrite { From ae0fb698661e3ad2c358b0eb55f1a0cebf970db6 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 28 Nov 2019 14:29:42 +0800 Subject: [PATCH 07/31] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=9F=8E=E5=B8=82=E4=B8=8E=E5=8C=BA=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/orderman_ext.go | 7 +++++-- business/model/api.go | 3 +++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index aa004da4d..89a7d3d31 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -247,7 +247,8 @@ func (c *OrderManager) getOrders(ctx *jxcontext.Context, isIncludeSku, isInclude SELECT SQL_CALC_FOUND_ROWS t1.*, CAST(IF(t1.earning_price <> 0, t1.earning_price, IF(t1.shop_price <> 0 && t1.shop_price < t1.sale_price, t1.shop_price, t1.sale_price) * IF(t5.pay_percentage > 0, t5.pay_percentage, %d) / 100) AS SIGNED) earning_price, t2.status waybill_status, t2.courier_name, t2.courier_mobile, - t2.actual_fee, t2.desired_fee, t2.waybill_created_at, t2.waybill_finished_at`, model.DefaultEarningPricePercentage) + t2.actual_fee, t2.desired_fee, t2.waybill_created_at, t2.waybill_finished_at, + city.name city_name, district.name district_name`, model.DefaultEarningPricePercentage) if isIncludeSku { sql += `, IF(t3.jx_sku_id > 0, t3.jx_sku_id, t3.sku_id) sku_id, @@ -259,7 +260,9 @@ func (c *OrderManager) getOrders(ctx *jxcontext.Context, isIncludeSku, isInclude sql += ` FROM goods_order t1 LEFT JOIN waybill t2 ON t1.vendor_waybill_id = t2.vendor_waybill_id AND t1.waybill_vendor_id = t2.waybill_vendor_id - LEFT JOIN store t5 ON t5.id = IF(t1.jx_store_id <> 0, t1.jx_store_id, t1.store_id)` + LEFT JOIN store t5 ON t5.id = IF(t1.jx_store_id <> 0, t1.jx_store_id, t1.store_id) + LEFT JOIN place city ON city.code = t5.city_code + LEFT JOIN place district ON district.code = t5.district_code` if isIncludeSku { sql += ` JOIN order_sku t3 ON t3.vendor_order_id = t1.vendor_order_id AND t3.vendor_id = t1.vendor_id` diff --git a/business/model/api.go b/business/model/api.go index e6c6a6796..8f803127c 100644 --- a/business/model/api.go +++ b/business/model/api.go @@ -26,6 +26,9 @@ type GoodsOrderExt struct { WaybillCreatedAt time.Time `orm:"type(datetime);index" json:"waybillCreatedAt"` WaybillFinishedAt time.Time `orm:"type(datetime)" json:"waybillFinishedAt"` + DistrictName string `json:"districtName"` + CityName string `json:"cityName"` + SkuID int `orm:"column(sku_id)" json:"skuID,omitempty"` SkuShopPrice int `json:"skuShopPrice,omitempty"` SkuSalePrice int `json:"skuSalePrice,omitempty"` From 4c61474de7706fbf6de8bc2739ec96d1d110ea86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 28 Nov 2019 14:53:14 +0800 Subject: [PATCH 08/31] =?UTF-8?q?=E8=AF=BB=E5=8F=96=E6=B0=B8=E8=BE=89excel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/yonghui/yonghui.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/business/jxstore/yonghui/yonghui.go b/business/jxstore/yonghui/yonghui.go index 817eda93a..d8290dccc 100644 --- a/business/jxstore/yonghui/yonghui.go +++ b/business/jxstore/yonghui/yonghui.go @@ -335,7 +335,9 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is } else { costPrice = skuMap[spuCode].Price } - _, _, _ = updateWeiMobGoods(costPrice, skuMap[spuCode].Price, skuList[0].Unit, isCompare, goodsDetail) + if errMsg == "" { + _, _, _ = updateWeiMobGoods(costPrice, skuMap[spuCode].Price, skuList[0].Unit, isCompare, goodsDetail) + } } } else { //下架微盟商品 @@ -358,7 +360,9 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is for _, v := range batchItemList { int64Slice = append(int64Slice, v.(int64)) } - PutAwayWeiMobSku(int64Slice) + if errMsg == "" { + PutAwayWeiMobSku(int64Slice) + } return retVal, err } taskParallel4 := tasksch.NewParallelTask("下架微盟商品", tasksch.NewParallelConfig().SetParallelCount(parallelCount).SetBatchSize(UpdateGoodsShelfStatusCount), ctx, taskFunc4, goodsIDListForPutAway) From 6fb1142e673169ee1667c8787f39edec6b5df079 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 28 Nov 2019 14:54:23 +0800 Subject: [PATCH 09/31] =?UTF-8?q?=E8=AF=BB=E5=8F=96=E6=B0=B8=E8=BE=89excel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/yonghui/yonghui.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/business/jxstore/yonghui/yonghui.go b/business/jxstore/yonghui/yonghui.go index d8290dccc..83a736092 100644 --- a/business/jxstore/yonghui/yonghui.go +++ b/business/jxstore/yonghui/yonghui.go @@ -133,12 +133,12 @@ var ( SkuRow: 1, }, "净配": &SheetParam{ SkuIDCol: 0, - SkuPriceCol: 12, + SkuPriceCol: 13, SkuNameCol: 1, OrgSkuIdCol: 4, OrgSkuPriceCol: 7, OrgSkuNameCol: 5, - SkuRow: 1, + SkuRow: 2, }, "水产": &SheetParam{ SkuIDCol: 1, SkuPriceCol: 15, From 9c37dd84fc7620dfc1cbe3516d23c5369f823dd9 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 28 Nov 2019 15:01:44 +0800 Subject: [PATCH 10/31] remove SkuCategory.ElmCategoryID and WscCategoryID --- business/model/sku.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/business/model/sku.go b/business/model/sku.go index cc8036ce2..70a727723 100644 --- a/business/model/sku.go +++ b/business/model/sku.go @@ -138,10 +138,10 @@ type SkuCategory struct { EbaiCategoryID int64 `orm:"column(ebai_category_id)" json:"ebaiCategoryID"` // 这个是指对应的饿百商品类别 MtwmCategoryID int64 `orm:"column(mtwm_category_id)" json:"mtwmCategoryID"` // 这个是指对应的美团外卖商品类别 - ElmCategoryID int64 `orm:"column(elm_category_id)" json:"elmCategoryID"` // 这个是指对应的饿了么商品类别 - WscCategoryID int64 `orm:"column(wsc_category_id)" json:"wscCategoryID"` // 这个是指对应的美团外卖商品类别 + // ElmCategoryID int64 `orm:"column(elm_category_id)" json:"elmCategoryID"` // 这个是指对应的饿了么商品类别 + // WscCategoryID int64 `orm:"column(wsc_category_id)" json:"wscCategoryID"` // 这个是指对应的美团外卖商品类别 - JdID int64 `orm:"column(jd_id);null" json:"jdID"` // 这个是指商家自己的商品类别在京东平台上的ID + JdID int64 `orm:"column(jd_id)" json:"jdID"` // 这个是指商家自己的商品类别在京东平台上的ID JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"` } From ef8acccb3bc8dca8a7cd450671cc94452c10f354 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 28 Nov 2019 15:07:11 +0800 Subject: [PATCH 11/31] =?UTF-8?q?=E8=AF=BB=E5=8F=96=E6=B0=B8=E8=BE=89excel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/yonghui/yonghui.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/business/jxstore/yonghui/yonghui.go b/business/jxstore/yonghui/yonghui.go index 83a736092..9037d406b 100644 --- a/business/jxstore/yonghui/yonghui.go +++ b/business/jxstore/yonghui/yonghui.go @@ -114,7 +114,7 @@ var ( OrgSkuIdCol: 5, OrgSkuPriceCol: 8, OrgSkuNameCol: 6, - SkuRow: 2, + SkuRow: 1, }, "水果": &SheetParam{ SkuIDCol: 0, SkuPriceCol: 14, @@ -335,9 +335,9 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is } else { costPrice = skuMap[spuCode].Price } - if errMsg == "" { - _, _, _ = updateWeiMobGoods(costPrice, skuMap[spuCode].Price, skuList[0].Unit, isCompare, goodsDetail) - } + // if errMsg == "" { + // _, _, _ = updateWeiMobGoods(costPrice, skuMap[spuCode].Price, skuList[0].Unit, isCompare, goodsDetail) + // } } } else { //下架微盟商品 @@ -360,9 +360,9 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is for _, v := range batchItemList { int64Slice = append(int64Slice, v.(int64)) } - if errMsg == "" { - PutAwayWeiMobSku(int64Slice) - } + // if errMsg == "" { + // PutAwayWeiMobSku(int64Slice) + // } return retVal, err } taskParallel4 := tasksch.NewParallelTask("下架微盟商品", tasksch.NewParallelConfig().SetParallelCount(parallelCount).SetBatchSize(UpdateGoodsShelfStatusCount), ctx, taskFunc4, goodsIDListForPutAway) @@ -755,7 +755,7 @@ func WriteToExcel(task *tasksch.SeqTask, dataSuccess []DataSuccess, dataFailed [ if err != nil { baseapi.SugarLogger.Errorf("WriteToExcel:upload %s , %s failed error:%v", fileName1, fileName2, err) } else { - noticeMsg := fmt.Sprintf("[详情点我]path1=%s, path2=%s \n", globals.BackstageHost, downloadURL1, downloadURL2) + noticeMsg := fmt.Sprintf("[详情点我]path1=%s, path2=%s \n", downloadURL1, downloadURL2) task.SetNoticeMsg(noticeMsg) baseapi.SugarLogger.Debugf("WriteToExcel:upload %s ,%s success, downloadURL1:%s ,downloadURL2:%s", fileName1, fileName2, downloadURL1, downloadURL2) } @@ -911,7 +911,7 @@ func WriteToExcel3(task *tasksch.SeqTask, dataSuccess []DataStoreSkusSuccess, da if err != nil { baseapi.SugarLogger.Errorf("WriteToExcel:upload %s , %s failed error:%v", fileName1, fileName2, err) } else { - noticeMsg := fmt.Sprintf("[详情点我]path1=%s, path2=%s \n", globals.BackstageHost, downloadURL1, downloadURL2) + noticeMsg := fmt.Sprintf("[详情点我]path1=%s, path2=%s \n", downloadURL1, downloadURL2) task.SetNoticeMsg(noticeMsg) baseapi.SugarLogger.Debugf("WriteToExcel:upload %s ,%s success, downloadURL1:%s ,downloadURL2:%s", fileName1, fileName2, downloadURL1, downloadURL2) } From c0d9b2e6b8751048069334d2b05c7ebe47b303f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 28 Nov 2019 15:25:57 +0800 Subject: [PATCH 12/31] =?UTF-8?q?=E8=AF=BB=E5=8F=96=E6=B0=B8=E8=BE=89excel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/yonghui/yonghui.go | 77 ++++++++++++++--------------- 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/business/jxstore/yonghui/yonghui.go b/business/jxstore/yonghui/yonghui.go index 9037d406b..72ba900b6 100644 --- a/business/jxstore/yonghui/yonghui.go +++ b/business/jxstore/yonghui/yonghui.go @@ -114,7 +114,7 @@ var ( OrgSkuIdCol: 5, OrgSkuPriceCol: 8, OrgSkuNameCol: 6, - SkuRow: 1, + SkuRow: 2, }, "水果": &SheetParam{ SkuIDCol: 0, SkuPriceCol: 14, @@ -133,12 +133,12 @@ var ( SkuRow: 1, }, "净配": &SheetParam{ SkuIDCol: 0, - SkuPriceCol: 13, + SkuPriceCol: 12, SkuNameCol: 1, OrgSkuIdCol: 4, OrgSkuPriceCol: 7, OrgSkuNameCol: 5, - SkuRow: 2, + SkuRow: 1, }, "水产": &SheetParam{ SkuIDCol: 1, SkuPriceCol: 15, @@ -239,44 +239,43 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is costPrice float64 //成本价 goodsList []*weimobapi.GoodsInfo goodsIDListForPutAway []interface{} - isCompare bool + // isCompare bool ) db := dao.GetDB() + //读取excel文件 + xlsx, err := excelize.OpenReader(reader) + if err != nil { + return "", err + } + for k := range sheetMap { + sheetParam := sheetMap[k] + rows, _ := xlsx.GetRows(k) + for rowNum, row := range rows { + if rowNum < sheetParam.SkuRow { + continue + } + GetCellIntoMap(sheetParam, skuMap, row, k, rowNum) + if len(skuMap) < 1 { + errMsg += fmt.Sprintf("读取Excel数据失败,Excel格式排版可能发生了变化!sheetName: [%v]\n", k) + } + } + if errMsg != "" { + return "", errors.New(errMsg) + } + } + //修改分组名 + // 分类名格式为:可定XX日 + // XX为上传永辉 提供的 价格表时间 +2天 + // isCompare, err = UpdateClassifyAndGetLastClassify() taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { switch step { case 0: - //读取excel文件 - xlsx, err := excelize.OpenReader(reader) - if err != nil { - return "", err - } - for k := range sheetMap { - sheetParam := sheetMap[k] - rows, _ := xlsx.GetRows(k) - for rowNum, row := range rows { - if rowNum < sheetParam.SkuRow { - continue - } - GetCellIntoMap(sheetParam, skuMap, row, k, rowNum) - if len(skuMap) < 1 { - errMsg += fmt.Sprintf("读取Excel数据失败,Excel格式排版可能发生了变化!sheetName: [%v]\n", k) - } - } - if errMsg != "" { - return "", errors.New(errMsg) - } - } - //修改分组名 - // 分类名格式为:可定XX日 - // XX为上传永辉 提供的 价格表时间 +2天 - isCompare, err = UpdateClassifyAndGetLastClassify() - case 1: //获取微盟所有商品 - param := &weimobapi.QueryGoodsListParam{ - PageNum: 1, - PageSize: jdapi.MaxSkuIDsCount4QueryListBySkuIds, - } - goodsList, err = GetWeiMobGoodsList(param) + // param := &weimobapi.QueryGoodsListParam{ + // PageNum: 1, + // PageSize: jdapi.MaxSkuIDsCount4QueryListBySkuIds, + // } + // goodsList, err = GetWeiMobGoodsList(param) if err != nil { baseapi.SugarLogger.Errorf("GetWeiMobGoodsList error:%v", err) } @@ -306,7 +305,7 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is // errMsg += fmt.Sprintf("在微盟上未找到该商品xxx", xxx) } } - case 2: + case 1: //找出微盟上有,excel上没有的,有就更新,没有就下架 taskFunc3 := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { goods := batchItemList[0].(*weimobapi.GoodsInfo) @@ -353,7 +352,7 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is return "", err } goodsIDListForPutAway = goodsIDListForPutAwayInterface - case 3: + case 2: // 批量下架微盟商品 taskFunc4 := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { int64Slice := []int64{} @@ -368,7 +367,7 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is taskParallel4 := tasksch.NewParallelTask("下架微盟商品", tasksch.NewParallelConfig().SetParallelCount(parallelCount).SetBatchSize(UpdateGoodsShelfStatusCount), ctx, taskFunc4, goodsIDListForPutAway) tasksch.HandleTask(taskParallel4, task, true).Run() _, err = taskParallel4.GetResult(0) - case 4: + case 3: WriteToExcel(task, dataSuccess.dataSuccessList, dataFailed.dataFailedList) } // if errMsg != "" { @@ -376,7 +375,7 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is // } return result, err } - taskSeq := tasksch.NewSeqTask2("读取永辉Excel文件修改微盟商品价格可售状态-序列任务", ctx, isContinueWhenError, taskSeqFunc, 5) + taskSeq := tasksch.NewSeqTask2("读取永辉Excel文件修改微盟商品价格可售状态-序列任务", ctx, isContinueWhenError, taskSeqFunc, 4) tasksch.HandleTask(taskSeq, nil, true).Run() if !isAsync { _, err = taskSeq.GetResult(0) From 406b522d05f6b1f306e796d5e5c325c4f72e12c8 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 28 Nov 2019 15:52:36 +0800 Subject: [PATCH 13/31] =?UTF-8?q?ForceUpdateVendorPrice=E6=89=BE=E4=B8=8D?= =?UTF-8?q?=E5=88=B0=E9=97=A8=E5=BA=97=E5=95=86=E5=93=81=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E7=BB=99=E5=87=BA=E5=85=B7=E4=BD=93=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/act/act.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index 89dfe7fe3..0b1d54a1e 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -981,7 +981,7 @@ func ForceUpdateVendorPrice(ctx *jxcontext.Context, vendorID int, actType int, s storeSkuBindList = append(storeSkuBindList, storeSkuBind) } } else { - errList.AddErr(err) + errList.AddErr(fmt.Errorf("获取门店:%d商品:%d出错:%s", v.StoreID, v.SkuID, err)) } } if err = errList.GetErrListAsOne(); err != nil { From b998b2b91c0f7f89119fe7f2e16ab538938f1515 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 28 Nov 2019 17:26:35 +0800 Subject: [PATCH 14/31] conf 4 jd --- conf/app.conf | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/conf/app.conf b/conf/app.conf index 3dbee43ff..d72c21a23 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -229,6 +229,66 @@ getYLYTokenURL = "http://www.jxc4.com/v2/sys/GetYLYToken" storeName = "京西果园" +[jd] +httpport = 8089 +EnableDocs = false + +dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jd?charset=utf8mb4&loc=Local&parseTime=true" + +jdToken = "84541069-fbe2-424b-b625-9b2ba1d4c9e6" +jdAppKey = "5d5577a2506f41b8b4ec520ba83490f5" +jdSecret = "0b01b9eeb15b41dab1c3d05d95c17a26" +jdStorePageCookie = "YDYCWYUGKSROMV3MKJQIFINJ5CLPYH6IRVFUMFJD3JI6VQKHX3YPHTWDIDBNMCBUKSY3P7SKAHHKR7PHQDSFRXZEWXA4XOUTALIQDGDYIEUCMDPWSYGDVT42DJ27CD27QKCR3UN7KF7EPIHGPR7GCRTBD6NFNB5MFIV6EPYE6RGXH6K2VN6O67WVPV5PLGYFIAKGHFCQNCPB4GL5IIBN4ARWFQ23OEMGXQRC77UCFGE7JOWTZG2KLEWZL5JBAVSZUYFDYFEFHXZNSJPWMFCADAJTUQ" + +disableEbai = true +# ebaiSource = "35957" +# ebaiSecret = "10013fbb7c2ddad7" +# ebaiStorePageCookieWMUSS = "YBAABKPRplPSpTCX4YSUAvSg8dSjYpIwF3FzBsGEw7agNbNT90GnwfbAYdBU5cjRX%7EjwAAMxhrUGEheAUicBtSXDIeGB0hclFgZ2tcBlhhIlwwfRBHaV8pClctLEhIfSR6HDwXPC5nHBVTeBsrWjwHCjoXUCN1eS1NBKLzB9E9WREwhfALlGMDAJsPmAwAAO" +# ebaiStorePageCookieWMSTOKEN = "gAAA4OkFSZBsOayRIAnRqd24YRRVvWgRFE2w2CGtjKlAIsYg1sNHEIQlwsBKLzB5sulw9nVQAA0tyyFu-F2xVbAQAAi6OrHIFNnBwgJlQdmb8AAHssrx9_zgABBgAABQ" + +disableMtwm = true +# mtwmAppID = "4123" +# mtwmSecret = "df2c88338b85f830cebce2a9eab56628" +# mtwmCallbackURL = "http://callback-jxgy.jxc4.com" + +enableStoreWrite = true +enableJdStoreWrite = true +# enableEbaiStoreWrite = true +# enableMtwmStoreWrite = true + +disableMtps = true +# mtpsAppKey = "3c0a05d464c247c19d7ec13accc78605" +# mtpsSecret = "b1M}9?:sTbsB[OF2gNORnN(|(iy9rB8(`7]|[wGLnbmt`evfM>E:A90DjHAW:UPE" + +dadaIsProd = true +dadaCallbackURL = "http://callback-jd.jxc4.com/dadadelivery/msg" +dadaSourceID = "6660" + +weixinAppID = "wx2bb99eb5d2c9b82c" +weixinSecret = "6bbbed1443cc062c20a015a64c07a531" + +weixinMiniAppID = "wx2d6949f724b2541d" +weixinMiniSecret = "11f3c380551c4683c149990b004d6df9" + +wxpayNotifyURL = "http://callback-jd.jxc4.com/wxpay/msg/" + +backstageHost = "http://www-jd.jxc4.com" +wxBackstageHost = "http://wx-jd.jxc4.com" + +# dingdingAgentID = 258707199 +# dingdingAppKey = "dingtozhutfr98qgwc7d" +# dingdingSecret = "7EJ0HDbkxQri-O2RSaYUu7_ZwvvMKtRVHT8cpyfvIvK6A9n9HRwPNCNRJFuEDeT_" + +# dingdingQRCodeAppKey = "dingoaw990o1jm9jswvwib" +# dingdingQRCodeSecret = "N9dyC9qB84sauQPs4_JYrILMsG5Krqm9-PSSVJ8t9hb87rrHiFUirISxGF5G57RV" + +dingdingCallbackURL = "http://callback-jd.jxc4.com/dingding/msg" + +getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken" +getYLYTokenURL = "http://www.jxc4.com/v2/sys/GetYLYToken" + +storeName = "京西京东" + [test] jdToken = "df97f334-f7d8-4b36-9664-5784d8ae0baf" jdAppKey = "06692746f7224695ad4788ce340bc854" From d85f595fee067fb42e9bd216198789e91c3ad13b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 28 Nov 2019 17:58:08 +0800 Subject: [PATCH 15/31] =?UTF-8?q?=E8=AF=BB=E5=8F=96=E6=B0=B8=E8=BE=89excel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/yonghui/yonghui.go | 179 ++++++++++++++-------------- 1 file changed, 92 insertions(+), 87 deletions(-) diff --git a/business/jxstore/yonghui/yonghui.go b/business/jxstore/yonghui/yonghui.go index 72ba900b6..fd9eccd86 100644 --- a/business/jxstore/yonghui/yonghui.go +++ b/business/jxstore/yonghui/yonghui.go @@ -133,12 +133,12 @@ var ( SkuRow: 1, }, "净配": &SheetParam{ SkuIDCol: 0, - SkuPriceCol: 12, + SkuPriceCol: 14, SkuNameCol: 1, OrgSkuIdCol: 4, OrgSkuPriceCol: 7, OrgSkuNameCol: 5, - SkuRow: 1, + SkuRow: 2, }, "水产": &SheetParam{ SkuIDCol: 1, SkuPriceCol: 15, @@ -239,43 +239,37 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is costPrice float64 //成本价 goodsList []*weimobapi.GoodsInfo goodsIDListForPutAway []interface{} - // isCompare bool + isCompare bool ) db := dao.GetDB() - //读取excel文件 - xlsx, err := excelize.OpenReader(reader) - if err != nil { - return "", err - } - for k := range sheetMap { - sheetParam := sheetMap[k] - rows, _ := xlsx.GetRows(k) - for rowNum, row := range rows { - if rowNum < sheetParam.SkuRow { - continue - } - GetCellIntoMap(sheetParam, skuMap, row, k, rowNum) - if len(skuMap) < 1 { - errMsg += fmt.Sprintf("读取Excel数据失败,Excel格式排版可能发生了变化!sheetName: [%v]\n", k) - } - } - if errMsg != "" { - return "", errors.New(errMsg) - } - } - //修改分组名 - // 分类名格式为:可定XX日 - // XX为上传永辉 提供的 价格表时间 +2天 - // isCompare, err = UpdateClassifyAndGetLastClassify() taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { switch step { case 0: + //读取excel文件 + xlsx, err := excelize.OpenReader(reader) + if err != nil { + return "", err + } + for k := range sheetMap { + sheetParam := sheetMap[k] + rows, _ := xlsx.GetRows(k) + for rowNum, row := range rows { + errMsg += GetCellIntoMap(sheetParam, skuMap, row, k, rowNum) + } + } + //修改分组名 + // 分类名格式为:可定XX日 + // XX为上传永辉 提供的 价格表时间 +2天 + if errMsg == "" { + isCompare, err = UpdateClassifyAndGetLastClassify() + } + case 1: //获取微盟所有商品 - // param := &weimobapi.QueryGoodsListParam{ - // PageNum: 1, - // PageSize: jdapi.MaxSkuIDsCount4QueryListBySkuIds, - // } - // goodsList, err = GetWeiMobGoodsList(param) + param := &weimobapi.QueryGoodsListParam{ + PageNum: 1, + PageSize: jdapi.MaxSkuIDsCount4QueryListBySkuIds, + } + goodsList, err = GetWeiMobGoodsList(param) if err != nil { baseapi.SugarLogger.Errorf("GetWeiMobGoodsList error:%v", err) } @@ -302,10 +296,9 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is Comment: "在微盟上未找到该商品", } dataFailed.AppendData2(outPutData) - // errMsg += fmt.Sprintf("在微盟上未找到该商品xxx", xxx) } } - case 1: + case 2: //找出微盟上有,excel上没有的,有就更新,没有就下架 taskFunc3 := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { goods := batchItemList[0].(*weimobapi.GoodsInfo) @@ -323,7 +316,6 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is Comment: "在京西库中未找到该商品", } dataFailed.AppendData2(outPutData) - // return "", errors.New(fmt.Sprintf("在京西库中未找到该商品!name_id : [%v]\n", goodsDetail.SkuMap.SingleSku.OuterSkuCode)) } else { if skuList[0].Unit == "份" { if goodsDetail.SkuMap.SingleSku.B2CSku.Weight == 0 { @@ -334,9 +326,9 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is } else { costPrice = skuMap[spuCode].Price } - // if errMsg == "" { - // _, _, _ = updateWeiMobGoods(costPrice, skuMap[spuCode].Price, skuList[0].Unit, isCompare, goodsDetail) - // } + if errMsg == "" { + _, _, _ = updateWeiMobGoods(costPrice, skuMap[spuCode].Price, skuList[0].Unit, isCompare, goodsDetail) + } } } else { //下架微盟商品 @@ -352,30 +344,30 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is return "", err } goodsIDListForPutAway = goodsIDListForPutAwayInterface - case 2: + case 3: // 批量下架微盟商品 taskFunc4 := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { int64Slice := []int64{} for _, v := range batchItemList { int64Slice = append(int64Slice, v.(int64)) } - // if errMsg == "" { - // PutAwayWeiMobSku(int64Slice) - // } + if errMsg == "" { + PutAwayWeiMobSku(int64Slice) + } return retVal, err } taskParallel4 := tasksch.NewParallelTask("下架微盟商品", tasksch.NewParallelConfig().SetParallelCount(parallelCount).SetBatchSize(UpdateGoodsShelfStatusCount), ctx, taskFunc4, goodsIDListForPutAway) tasksch.HandleTask(taskParallel4, task, true).Run() _, err = taskParallel4.GetResult(0) - case 3: + case 4: WriteToExcel(task, dataSuccess.dataSuccessList, dataFailed.dataFailedList) } - // if errMsg != "" { - // return result, errors.New(errMsg) - // } + if errMsg != "" { + return result, errors.New(errMsg) + } return result, err } - taskSeq := tasksch.NewSeqTask2("读取永辉Excel文件修改微盟商品价格可售状态-序列任务", ctx, isContinueWhenError, taskSeqFunc, 4) + taskSeq := tasksch.NewSeqTask2("读取永辉Excel文件修改微盟商品价格可售状态-序列任务", ctx, isContinueWhenError, taskSeqFunc, 5) tasksch.HandleTask(taskSeq, nil, true).Run() if !isAsync { _, err = taskSeq.GetResult(0) @@ -404,17 +396,6 @@ func GetGoodsInfoAndDetailMap(goodsList []*weimobapi.GoodsInfo) (goodsMap map[st return goodsMap } -// func getSelectedClassifyLeafList(l []weimobapi.SelectedClassifyList) (list []int64) { -// for _, v := range l { -// if v.ChildrenClassify == nil { -// list = append(list, v.ClassifyID) -// } else { -// subList := getSelectedClassifyLeafList(v.ChildrenClassify) -// } -// } -// return list -// } - func updateWeiMobGoods(costPrice, salePrice float64, unit string, isCompare bool, goodsDetail *weimobapi.GoodsDetailInfo) (goodsID int64, skuMap map[string]int64, err error) { var ( categoryList []*weimobapi.CategoryList @@ -580,7 +561,7 @@ func IsChineseChar(str string) bool { return false } -func GetCellIntoMap(sheetParam *SheetParam, skuMap map[string]*ExcelParam, row []string, sheetName string, rowNum int) { +func GetCellIntoMap(sheetParam *SheetParam, skuMap map[string]*ExcelParam, row []string, sheetName string, rowNum int) (errMsg string) { var ( skuID string orgSkuID string @@ -597,19 +578,27 @@ func GetCellIntoMap(sheetParam *SheetParam, skuMap map[string]*ExcelParam, row [ ) for k, cell := range row { if cell != "" { - if !IsChineseChar(cell) { - if k == skuIDCol && skuIDCol >= 0 { - skuID = cell + if k == skuIDCol && skuIDCol >= 0 { + skuID = cell + } + if k == skuPriceCol && skuPriceCol >= 0 { + if rowNum == sheetParam.SkuRow-1 { + if !strings.Contains(cell, "今日供价") && !strings.Contains(cell, "单价") { + errMsg += fmt.Sprintf("sheet页:[%v],Excel排版发生变化!第[%v]列今日供价附近可能增加或减少了一列,请确认!", sheetName, k+1) + } } - if k == skuPriceCol && skuPriceCol >= 0 { - skuPrice = Float64Round(utils.Str2Float64WithDefault(cell, 0)) - } - if k == orgSkuIDCol && orgSkuIDCol >= 0 { - orgSkuID = "0" + cell - } - if k == orgSkuPriceCol && orgSkuPriceCol >= 0 { - orgSkuPrice = Float64Round(utils.Str2Float64WithDefault(cell, 0)) + skuPrice = Float64Round(utils.Str2Float64WithDefault(cell, 0)) + } + if k == orgSkuIDCol && orgSkuIDCol >= 0 { + orgSkuID = "0" + cell + } + if k == orgSkuPriceCol && orgSkuPriceCol >= 0 { + if rowNum == sheetParam.SkuRow-1 { + if !strings.Contains(cell, "进价") { + errMsg += fmt.Sprintf("sheet页:[%v],Excel排版发生变化!第[%v]列进价附近可能增加或减少了一列,请确认!", sheetName, k+1) + } } + orgSkuPrice = Float64Round(utils.Str2Float64WithDefault(cell, 0)) } if k == skuNameCol && skuNameCol >= 0 { skuName = cell @@ -619,34 +608,50 @@ func GetCellIntoMap(sheetParam *SheetParam, skuMap map[string]*ExcelParam, row [ } } } - if len(skuMap) > 0 { - if skuMap[skuID] != nil { - if skuMap[skuID].Price != 0 && skuMap[skuID].Price != skuPrice && skuPrice != 0 { - if skuPrice > skuMap[skuID].Price { + if rowNum >= sheetParam.SkuRow { + if rowNum == sheetParam.SkuRow { + if IsChineseChar(skuID) { + if IsChineseChar(skuID) { + errMsg += fmt.Sprintf("sheet页:[%v],Excel排版发生变化!第[%v]行附近可能增加了一行,请确认!", sheetName, rowNum) + } + } + } + if len(skuMap) > 0 { + if skuMap[skuID] != nil { + if skuMap[skuID].Price != 0 && skuMap[skuID].Price != skuPrice && skuPrice != 0 { + if skuPrice > skuMap[skuID].Price { + BuildSkuMap(skuID, skuName, skuPrice, skuMap) + } + } else { BuildSkuMap(skuID, skuName, skuPrice, skuMap) } - } else { + } else if skuPrice != 0 { BuildSkuMap(skuID, skuName, skuPrice, skuMap) } - } else if skuPrice != 0 { - BuildSkuMap(skuID, skuName, skuPrice, skuMap) - } - if skuMap[orgSkuID] != nil { - if skuMap[orgSkuID].Price != 0 && skuMap[orgSkuID].Price != orgSkuPrice && orgSkuPrice != 0 { - if orgSkuPrice > skuMap[orgSkuID].Price { + if skuMap[orgSkuID] != nil { + if skuMap[orgSkuID].Price != 0 && skuMap[orgSkuID].Price != orgSkuPrice && orgSkuPrice != 0 { + if orgSkuPrice > skuMap[orgSkuID].Price { + BuildSkuMap(orgSkuID, orgSkuName, orgSkuPrice, skuMap) + } + } else if orgSkuPriceCol >= 0 && orgSkuIDCol >= 0 && orgSkuNameCol >= 0 { BuildSkuMap(orgSkuID, orgSkuName, orgSkuPrice, skuMap) } - } else if orgSkuPriceCol >= 0 && orgSkuIDCol >= 0 && orgSkuNameCol >= 0 { + } else if orgSkuPrice != 0 { BuildSkuMap(orgSkuID, orgSkuName, orgSkuPrice, skuMap) } - } else if orgSkuPrice != 0 { + } else { + BuildSkuMap(skuID, skuName, skuPrice, skuMap) BuildSkuMap(orgSkuID, orgSkuName, orgSkuPrice, skuMap) } + delete(skuMap, "") } else { - BuildSkuMap(skuID, skuName, skuPrice, skuMap) - BuildSkuMap(orgSkuID, orgSkuName, orgSkuPrice, skuMap) + for i := rowNum; i < sheetParam.SkuRow; i++ { + if !IsChineseChar(skuID) { + errMsg += fmt.Sprintf("sheet页:[%v],Excel排版发生变化!第[%v]行附近可能减少了一行,请确认!", sheetName, rowNum) + } + } } - delete(skuMap, "") + return errMsg } func BuildSkuMap(id, name string, price float64, skuMap map[string]*ExcelParam) { excelParam := &ExcelParam{ From 1bda4d6058e62bb779b8bd3e85c0ecc4af7d2d94 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 28 Nov 2019 18:54:52 +0800 Subject: [PATCH 16/31] +OrderManager.CreateAfsOrderFromOrder --- business/jxcallback/orderman/order_afs.go | 45 +++++++++++++++++++- business/partner/partner.go | 1 + business/partner/purchase/ebai/order_afs.go | 17 +++++++- business/partner/purchase/mtwm/order_afs.go | 46 ++++----------------- 4 files changed, 66 insertions(+), 43 deletions(-) diff --git a/business/jxcallback/orderman/order_afs.go b/business/jxcallback/orderman/order_afs.go index 942271fb2..f550d9555 100644 --- a/business/jxcallback/orderman/order_afs.go +++ b/business/jxcallback/orderman/order_afs.go @@ -38,7 +38,7 @@ func (c *OrderManager) OnAfsOrderNew(afsOrder *model.AfsOrder, orderStatus *mode func (c *OrderManager) onAfsOrderNew(afsOrder *model.AfsOrder, orderStatus *model.OrderStatus, isAdjust bool) (err error) { db := dao.GetDB() - // globals.SugarLogger.Debugf("onAfsOrderNew1 afsOrder:%s", utils.Format4Output(afsOrder, true)) + globals.SugarLogger.Debugf("onAfsOrderNew1 orderID:%s", afsOrder.VendorOrderID) c.setAfsOrderID(db, orderStatus) if afsOrder.AfsOrderID == "" { afsOrder.AfsOrderID = orderStatus.VendorOrderID @@ -49,7 +49,7 @@ func (c *OrderManager) onAfsOrderNew(afsOrder *model.AfsOrder, orderStatus *mode if afsOrder.Status == model.OrderStatusUnknown { afsOrder.Status = orderStatus.Status } - // globals.SugarLogger.Debugf("onAfsOrderNew2 afsOrder:%s", utils.Format4Output(afsOrder, true)) + globals.SugarLogger.Debugf("onAfsOrderNew2 orderID:%s", afsOrder.VendorOrderID) dao.Begin(db) defer func() { if r := recover(); r != nil || err != nil { @@ -374,3 +374,44 @@ func composeAfsOrderID(vendorOrderID string, index int) (afsOrderID string) { utils.Int2Str(index), }, "-") } + +func (c *OrderManager) CreateAfsOrderFromOrder(vendorOrderID string, vendorID int) (afsOrder *model.AfsOrder, err error) { + order, err := c.LoadOrder(vendorOrderID, vendorID) + // globals.SugarLogger.Debug(utils.Format4Output(order, false)) + if err == nil { + afsOrder = &model.AfsOrder{ + VendorID: vendorID, + VendorOrderID: vendorOrderID, + JxStoreID: order.JxStoreID, + VendorStoreID: order.VendorStoreID, + StoreID: order.StoreID, + } + } else { + globals.SugarLogger.Warnf("CreateAfsOrderFromOrder, orderID:%s is not found from partner.CurOrderManager.LoadOrder", vendorOrderID) + return nil, err + } + + for _, sku := range order.Skus { + orderSkuFinancial := &model.OrderSkuFinancial{ + VendorID: sku.VendorID, + VendorOrderID: sku.VendorOrderID, + // OrderFinancialID: sku.VendorOrderID, + // ConfirmTime: afsOrder.AfsCreateAt, + VendorStoreID: afsOrder.VendorStoreID, + StoreID: afsOrder.StoreID, + JxStoreID: afsOrder.JxStoreID, + VendorSkuID: sku.VendorSkuID, + SkuID: sku.SkuID, + PromotionType: sku.PromotionType, + Name: sku.SkuName, + ShopPrice: sku.ShopPrice, + SalePrice: sku.SalePrice, + Count: sku.Count, + // UserMoney: sku.UserMoney, + // PmSubsidyMoney: sku.PmSubsidyMoney, + IsAfsOrder: 1, + } + afsOrder.Skus = append(afsOrder.Skus, orderSkuFinancial) + } + return afsOrder, nil +} diff --git a/business/partner/partner.go b/business/partner/partner.go index b78cb21e8..7327885f9 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -93,6 +93,7 @@ type IOrderManager interface { OnWaybillStatusChanged(bill *model.Waybill) (err error) + CreateAfsOrderFromOrder(vendorOrderID string, vendorID int) (afsOrder *model.AfsOrder, err error) LoadOrder(vendorOrderID string, vendorID int) (order *model.GoodsOrder, err error) LoadOrder2(vendorOrderID2 string, vendorID int) (order *model.GoodsOrder, err error) diff --git a/business/partner/purchase/ebai/order_afs.go b/business/partner/purchase/ebai/order_afs.go index 05da43af4..eb499879e 100644 --- a/business/partner/purchase/ebai/order_afs.go +++ b/business/partner/purchase/ebai/order_afs.go @@ -101,8 +101,9 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaia afsOrder.Skus = append(afsOrder.Skus, orderSku) } } else if msg.Cmd == ebaiapi.CmdOrderUserCancel { - if orderFinancial, err2 := partner.CurOrderManager.LoadOrderFinancial(orderStatus.RefVendorOrderID, model.VendorIDEBAI); err2 == nil { - afsOrder = c.OrderFinancialDetail2Refund(orderFinancial, msg) + if afsOrder := c.createAfsOrder(msg); afsOrder != nil { + // if orderFinancial, err2 := partner.CurOrderManager.LoadOrderFinancial(orderStatus.RefVendorOrderID, model.VendorIDEBAI); err2 == nil { + // afsOrder = c.OrderFinancialDetail2Refund(orderFinancial, msg) cancelData := msg.Data.(*ebaiapi.CBUserCancelInfo) afsOrder.AfsOrderID = orderStatus.VendorOrderID afsOrder.RefundType = model.AfsTypeFullRefund @@ -124,6 +125,18 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaia return retVal } +func (p *PurchaseHandler) createAfsOrder(msg *ebaiapi.CallbackMsg) (afsOrder *model.AfsOrder) { + cancelData := msg.Data.(*ebaiapi.CBUserCancelInfo) + afsOrder, err := partner.CurOrderManager.CreateAfsOrderFromOrder(utils.Int64ToStr(cancelData.OrderID), model.VendorIDEBAI) + if err == nil { + afsOrder.AfsOrderID = afsOrder.VendorOrderID + afsOrder.AfsCreatedAt = utils.Timestamp2Time(msg.Timestamp) + } else { + afsOrder = nil + } + return afsOrder +} + func (c *PurchaseHandler) convertAfsReasonType(vendorReasonType string) int8 { return model.AfsReasonNotOthers } diff --git a/business/partner/purchase/mtwm/order_afs.go b/business/partner/purchase/mtwm/order_afs.go index 7928e33bc..70a4a65d9 100644 --- a/business/partner/purchase/mtwm/order_afs.go +++ b/business/partner/purchase/mtwm/order_afs.go @@ -142,47 +142,15 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwma } func (p *PurchaseHandler) createAfsOrder(orderData url.Values) (afsOrder *model.AfsOrder) { - afsOrder = &model.AfsOrder{ - VendorID: model.VendorIDMTWM, - AfsOrderID: orderData.Get("refund_id"), - VendorOrderID: orderData.Get("order_id"), - AfsCreatedAt: utils.Timestamp2Time(utils.Str2Int64(orderData.Get("timestamp"))), - } - if afsOrder.AfsOrderID == "" { - afsOrder.AfsOrderID = afsOrder.VendorOrderID - } - order, err := partner.CurOrderManager.LoadOrder(afsOrder.VendorOrderID, afsOrder.VendorID) - globals.SugarLogger.Debug(utils.Format4Output(order, false)) + afsOrder, err := partner.CurOrderManager.CreateAfsOrderFromOrder(orderData.Get("refund_id"), model.VendorIDMTWM) if err == nil { - afsOrder.JxStoreID = order.JxStoreID - afsOrder.VendorStoreID = order.VendorStoreID - afsOrder.StoreID = order.StoreID - } else { - globals.SugarLogger.Warnf("mtwm AfsOrderDetail2Financial, afsOrderID:%s is not found from partner.CurOrderManager.LoadOrder", afsOrder.VendorOrderID) - return nil - } - - for _, sku := range order.Skus { - orderSkuFinancial := &model.OrderSkuFinancial{ - VendorID: sku.VendorID, - VendorOrderID: sku.VendorOrderID, - // OrderFinancialID: sku.VendorOrderID, - // ConfirmTime: afsOrder.AfsCreateAt, - VendorStoreID: afsOrder.VendorStoreID, - StoreID: afsOrder.StoreID, - JxStoreID: afsOrder.JxStoreID, - VendorSkuID: sku.VendorSkuID, - SkuID: sku.SkuID, - PromotionType: sku.PromotionType, - Name: sku.SkuName, - ShopPrice: sku.ShopPrice, - SalePrice: sku.SalePrice, - Count: sku.Count, - // UserMoney: sku.UserMoney, - // PmSubsidyMoney: sku.PmSubsidyMoney, - IsAfsOrder: 1, + afsOrder.AfsOrderID = orderData.Get("refund_id") + afsOrder.AfsCreatedAt = utils.Timestamp2Time(utils.Str2Int64(orderData.Get("timestamp"))) + if afsOrder.AfsOrderID == "" { + afsOrder.AfsOrderID = afsOrder.VendorOrderID } - afsOrder.Skus = append(afsOrder.Skus, orderSkuFinancial) + } else { + afsOrder = nil } return afsOrder } From 3756ac67b2886fa2f5aae5add38249b657382036 Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 29 Nov 2019 08:43:36 +0800 Subject: [PATCH 17/31] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E7=BB=93=E6=9E=84=EF=BC=8Cjxutils=E4=B8=8D=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E4=BA=8Edao=EF=BC=8Cdao=E4=BE=9D=E8=B5=96=E4=BA=8Ejxutils?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/user2.go | 74 ++++++++++++++++++++++++++++--- business/jxstore/tempop/tempop.go | 2 +- business/jxutils/jxutils.go | 74 ------------------------------- business/jxutils/jxutils_cms.go | 15 +++++-- business/model/dao/act.go | 9 ++-- business/model/dao/dao_user2.go | 9 ++-- business/model/dao/dao_utils.go | 18 +++----- business/model/dao/food_recipe.go | 5 ++- business/model/dao/page_store.go | 5 ++- controllers/net_spider.go | 4 +- 10 files changed, 104 insertions(+), 111 deletions(-) diff --git a/business/jxstore/cms/user2.go b/business/jxstore/cms/user2.go index 4f54b5b91..1eb096103 100644 --- a/business/jxstore/cms/user2.go +++ b/business/jxstore/cms/user2.go @@ -11,6 +11,7 @@ import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/auth2" "git.rosy.net.cn/jx-callback/business/auth2/authprovider/dingding" + "git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin" "git.rosy.net.cn/jx-callback/business/authz" "git.rosy.net.cn/jx-callback/business/authz/autils" "git.rosy.net.cn/jx-callback/business/jxutils" @@ -201,7 +202,7 @@ func HandleOrder4Consignee(order *model.GoodsOrder) (err error) { if mobileNumber == "" && order.VendorUserID == "" { return fmt.Errorf("订单:%s手机号与平台用户标识都是空", order.VendorOrderID) } - authType := jxutils.GetAuthType4Vendor(order.VendorID) + authType := dao.GetAuthType4Vendor(order.VendorID) if authType == "" { msg := fmt.Sprintf("平台ID:%d当前不被支持,请联系开发", order.VendorID) globals.SugarLogger.Warn(msg) @@ -470,7 +471,7 @@ func AddRoles4User(ctx *jxcontext.Context, userID string, rList []*authz.RoleInf if err = api2.RoleMan.AddRole4User(userID, v); err != nil { errList.AddErr(err) } else if v.StoreID > 0 { - jxutils.HandleUserWXRemark(dao.GetDB(), userID, true) + HandleUserWXRemark(dao.GetDB(), userID, true) } } else { errList.AddErr(err) @@ -485,7 +486,7 @@ func DeleteRoles4User(ctx *jxcontext.Context, userID string, rList []*authz.Role if err = api2.RoleMan.DeleteRole4User(userID, v); err != nil { errList.AddErr(err) } else if v.StoreID > 0 { - jxutils.HandleUserWXRemark(dao.GetDB(), userID, true) + HandleUserWXRemark(dao.GetDB(), userID, true) } } return errList.GetErrListAsOne() @@ -504,7 +505,7 @@ func AddUsers4Role(ctx *jxcontext.Context, r *authz.RoleInfo, userIDList []strin if err = api2.RoleMan.AddRole4User(v, r); err != nil { errList.AddErr(err) } else if r.StoreID > 0 { - jxutils.HandleUserWXRemark(dao.GetDB(), v, true) + HandleUserWXRemark(dao.GetDB(), v, true) } } return errList.GetErrListAsOne() @@ -516,7 +517,7 @@ func DeleteUsers4Role(ctx *jxcontext.Context, r *authz.RoleInfo, userIDList []st if err = api2.RoleMan.DeleteRole4User(v, r); err != nil { errList.AddErr(err) } else if r.StoreID > 0 { - jxutils.HandleUserWXRemark(dao.GetDB(), v, true) + HandleUserWXRemark(dao.GetDB(), v, true) } } return errList.GetErrListAsOne() @@ -713,3 +714,66 @@ func GetSelfInfo(ctx *jxcontext.Context) (user *model.User, err error) { } return user, err } + +func HandleUserWXRemark(db *dao.DaoDB, mobile string, mobileIsUerID bool) (err error) { + if db == nil { + db = dao.GetDB() + } + openIDs := []string{} + storeID := 0 + remark := "" + + // if !globals.DisableWXAuth1 { + // wxinfo, err := dao.GetUserStoreInfo(db, "tel", mobile) + // if err == nil { + // openIDs = []string{wxinfo.OpenID} + // storeID = wxinfo.JxStoreID + // } + // } + if globals.EnableWXAuth2 { + userID := "" + if mobileIsUerID { + userID = mobile + } else { + userList, _, err2 := dao.GetUsers(db, model.UserTypeStoreBoss, "", nil, "", mobile, 0, -1) + if err = err2; len(userList) > 0 { + userID = userList[0].GetID() + } + } + if userID != "" { + authBindList, err2 := dao.GetUserBindAuthInfo(db, userID, model.AuthBindTypeAuth, []string{weixin.AuthTypeMP}, "", "") + if err = err2; err == nil { + for _, v := range authBindList { + openIDs = append(openIDs, v.AuthID) + } + } + roleList, err2 := api2.RoleMan.GetUserRoleList(userID) + if err = err2; err == nil && len(roleList) > 0 { + storeID = roleList[0].StoreID + } + } + } + + if len(openIDs) > 0 { + if storeID > 0 { + store := &model.Store{} + store.ID = storeID + if err = dao.GetEntity(db, store); err == nil { + city := &model.Place{ + Code: store.CityCode, + } + if err = dao.GetEntity(db, city, "Code"); err == nil { + remark = city.Name + "-" + store.Name + } + } + } + if err == nil { + if globals.EnableStoreWrite { + for _, openID := range openIDs { + err = api.WeixinAPI.CBUpdateRemark(openID, remark) + } + } + } + } + return err +} diff --git a/business/jxstore/tempop/tempop.go b/business/jxstore/tempop/tempop.go index 8005bb8bb..11e24dc9c 100644 --- a/business/jxstore/tempop/tempop.go +++ b/business/jxstore/tempop/tempop.go @@ -954,7 +954,7 @@ func UpdateAllWeiXinRemark(ctx *jxcontext.Context, isAsync, isContinueWhenError rootTask := tasksch.NewParallelTask("刷新微信备注", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { tel := batchItemList[0].(string) - err = jxutils.HandleUserWXRemark(dao.GetDB(), tel, false) + err = cms.HandleUserWXRemark(dao.GetDB(), tel, false) return nil, err }, mobileList) tasksch.ManageTask(rootTask).Run() diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index 0de80c472..0761ffea0 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -15,12 +15,9 @@ import ( "git.rosy.net.cn/baseapi/platformapi/autonavi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils/routinepool" - "git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin" "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" - "git.rosy.net.cn/jx-callback/globals/api2" "github.com/qiniu/api.v7/storage" ) @@ -457,69 +454,6 @@ func Strings2Objs(strAndObjAddPairs ...interface{}) (err error) { return nil } -func HandleUserWXRemark(db *dao.DaoDB, mobile string, mobileIsUerID bool) (err error) { - if db == nil { - db = dao.GetDB() - } - openIDs := []string{} - storeID := 0 - remark := "" - - // if !globals.DisableWXAuth1 { - // wxinfo, err := dao.GetUserStoreInfo(db, "tel", mobile) - // if err == nil { - // openIDs = []string{wxinfo.OpenID} - // storeID = wxinfo.JxStoreID - // } - // } - if globals.EnableWXAuth2 { - userID := "" - if mobileIsUerID { - userID = mobile - } else { - userList, _, err2 := dao.GetUsers(db, model.UserTypeStoreBoss, "", nil, "", mobile, 0, -1) - if err = err2; len(userList) > 0 { - userID = userList[0].GetID() - } - } - if userID != "" { - authBindList, err2 := dao.GetUserBindAuthInfo(db, userID, model.AuthBindTypeAuth, []string{weixin.AuthTypeMP}, "", "") - if err = err2; err == nil { - for _, v := range authBindList { - openIDs = append(openIDs, v.AuthID) - } - } - roleList, err2 := api2.RoleMan.GetUserRoleList(userID) - if err = err2; err == nil && len(roleList) > 0 { - storeID = roleList[0].StoreID - } - } - } - - if len(openIDs) > 0 { - if storeID > 0 { - store := &model.Store{} - store.ID = storeID - if err = dao.GetEntity(db, store); err == nil { - city := &model.Place{ - Code: store.CityCode, - } - if err = dao.GetEntity(db, city, "Code"); err == nil { - remark = city.Name + "-" + store.Name - } - } - } - if err == nil { - if globals.EnableStoreWrite { - for _, openID := range openIDs { - err = api.WeixinAPI.CBUpdateRemark(openID, remark) - } - } - } - } - return err -} - func RefreshOrderSkuRelated(order *model.GoodsOrder) *model.GoodsOrder { order.SkuCount = 0 order.GoodsCount = 0 @@ -723,14 +657,6 @@ func GetRealMobile4Order(order *model.GoodsOrder) (mobileNumber string) { return mobileNumber } -func GetAuthType4Vendor(vendorID int) (authType string) { - authType = dao.ConvertJsonFieldPrefix(model.VendorNames[vendorID]) - if authType != "" { - authType = "vendor." + authType - } - return authType -} - func GuessDataResourceVendor(resourceURL string) (vendorID int) { vendorID = -1 for tmpVendorID, urlList := range resourceTypeMap { diff --git a/business/jxutils/jxutils_cms.go b/business/jxutils/jxutils_cms.go index 8d6265932..11449a847 100644 --- a/business/jxutils/jxutils_cms.go +++ b/business/jxutils/jxutils_cms.go @@ -20,7 +20,6 @@ import ( "git.rosy.net.cn/baseapi/platformapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/globals" "github.com/boombuler/barcode" "github.com/boombuler/barcode/code128" @@ -370,11 +369,19 @@ func IsEmptyID(id int64) bool { } func FormalizePageSize(pageSize int) int { - return dao.FormalizePageSize(pageSize) + if pageSize == 0 { + return model.DefPageSize + } else if pageSize < 0 { + return model.UnlimitedPageSize + } + return pageSize } -func FormalizePageOffset(pageSize int) int { - return dao.FormalizePageOffset(pageSize) +func FormalizePageOffset(offset int) int { + if offset < 0 { + offset = 0 + } + return offset } func FormalizeName(name string) string { diff --git a/business/model/dao/act.go b/business/model/dao/act.go index a599d8d43..4b524e839 100644 --- a/business/model/dao/act.go +++ b/business/model/dao/act.go @@ -7,6 +7,7 @@ import ( "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" ) @@ -71,8 +72,8 @@ func GetActVendorInfo(db *DaoDB, actID int, vendorIDs []int) (actMap map[int]*mo func GetActStoreSkuVendorList(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs []int, keyword string, offset, pageSize int) (totalCount int, actStoreSkuList []*model.ActStoreSku2, err error) { globals.SugarLogger.Debugf("GetActStoreSkuVendorList actID:%d", actID) - offset = FormalizePageOffset(offset) - pageSize = FormalizePageSize(pageSize) + offset = jxutils.FormalizePageOffset(offset) + pageSize = jxutils.FormalizePageSize(pageSize) leftOrEmpty := "" if len(vendorIDs) == 1 && (vendorIDs[0] == -1 || vendorIDs[0] == model.VendorIDJX) { @@ -178,8 +179,8 @@ func QueryActs(db *DaoDB, actID int, offset, pageSize int, syncStatus int, keywo if actID == 0 && utils.IsTimeZero(createdAtFrom) && utils.IsTimeZero(beginAt) { return nil, fmt.Errorf("actID,createdAtFrom和beginAt中,至少要指定一个条件") } - offset = FormalizePageOffset(offset) - pageSize = FormalizePageSize(pageSize) + offset = jxutils.FormalizePageOffset(offset) + pageSize = jxutils.FormalizePageSize(pageSize) isGetAll := offset == 0 && pageSize == model.UnlimitedPageSize sql := ` diff --git a/business/model/dao/dao_user2.go b/business/model/dao/dao_user2.go index 08e497ec7..51572c40d 100644 --- a/business/model/dao/dao_user2.go +++ b/business/model/dao/dao_user2.go @@ -5,6 +5,7 @@ import ( "time" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" ) @@ -38,8 +39,8 @@ func GetUserByID(db *DaoDB, fieldName, fieldValue string) (user *model.User, err } func GetUsers(db *DaoDB, userType int, keyword string, userIDs []string, userID2, mobile string, offset, pageSize int) (userList []*model.User, totalCount int, err error) { - offset = FormalizePageOffset(offset) - pageSize = FormalizePageSize(pageSize) + offset = jxutils.FormalizePageOffset(offset) + pageSize = jxutils.FormalizePageSize(pageSize) if userType == 0 { userType = 255 } @@ -182,8 +183,8 @@ func QueryUserDeliveryAddress(db *DaoDB, addressID int64, userIDs []string, offs sql += " AND t1.user_id IN (" + GenQuestionMarks(len(userIDs)) + ")" sqlParams = append(sqlParams, userIDs) } - offset = FormalizePageOffset(offset) - pageSize = FormalizePageSize(pageSize) + offset = jxutils.FormalizePageOffset(offset) + pageSize = jxutils.FormalizePageSize(pageSize) sql += ` ORDER BY t1.is_default DESC, t1.consignee_name LIMIT ? OFFSET ?` diff --git a/business/model/dao/dao_utils.go b/business/model/dao/dao_utils.go index 736a463c7..8a36c2adc 100644 --- a/business/model/dao/dao_utils.go +++ b/business/model/dao/dao_utils.go @@ -201,18 +201,10 @@ func IsVendorThingIDEmpty(vendorThingID string) bool { return vendorThingID == "" || vendorThingID == "0" } -func FormalizePageSize(pageSize int) int { - if pageSize == 0 { - return model.DefPageSize - } else if pageSize < 0 { - return model.UnlimitedPageSize +func GetAuthType4Vendor(vendorID int) (authType string) { + authType = ConvertJsonFieldPrefix(model.VendorNames[vendorID]) + if authType != "" { + authType = "vendor." + authType } - return pageSize -} - -func FormalizePageOffset(offset int) int { - if offset < 0 { - offset = 0 - } - return offset + return authType } diff --git a/business/model/dao/food_recipe.go b/business/model/dao/food_recipe.go index 5228c87c3..f2b1854d9 100644 --- a/business/model/dao/food_recipe.go +++ b/business/model/dao/food_recipe.go @@ -2,6 +2,7 @@ package dao import ( "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" ) @@ -72,8 +73,8 @@ func QueryFoodRecipes(db *DaoDB, keyword string, recipeID int, authorID, userID ) > 0` sqlParams = append(sqlParams, skuIDs) } - offset = FormalizePageOffset(offset) - pageSize = FormalizePageSize(pageSize) + offset = jxutils.FormalizePageOffset(offset) + pageSize = jxutils.FormalizePageSize(pageSize) sql += ` ORDER BY t1.created_at DESC LIMIT ? OFFSET ?` diff --git a/business/model/dao/page_store.go b/business/model/dao/page_store.go index 676f6d68b..fe413e2f6 100644 --- a/business/model/dao/page_store.go +++ b/business/model/dao/page_store.go @@ -1,6 +1,7 @@ package dao import ( + "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" ) @@ -76,8 +77,8 @@ func QueryPageStores(db *DaoDB, pageSize, offset int, keyword string, vendorStor ORDER BY t1.recent_order_num DESC LIMIT ? OFFSET ? ` - pageSize = FormalizePageSize(pageSize) - offset = FormalizePageOffset(offset) + pageSize = jxutils.FormalizePageSize(pageSize) + offset = jxutils.FormalizePageOffset(offset) sqlParams = append(sqlParams, pageSize, offset) var shopList []*PageShopWithPlaceName Begin(db) diff --git a/controllers/net_spider.go b/controllers/net_spider.go index d94268a10..8b2979ddb 100644 --- a/controllers/net_spider.go +++ b/controllers/net_spider.go @@ -66,8 +66,8 @@ func (c *NetSpiderController) QueryPageStores() { params.VendorID = -1 } var lng, lat, lng1, lat1, lng2, lat2 float64 - params.Offset = dao.FormalizePageOffset(params.Offset) - params.PageSize = dao.FormalizePageSize(params.PageSize) + params.Offset = jxutils.FormalizePageOffset(params.Offset) + params.PageSize = jxutils.FormalizePageSize(params.PageSize) offset := params.Offset pageSize := params.PageSize if params.Radius > 0 { From ab493a59fb87f116117a80572deaf3c2b946844d Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 29 Nov 2019 10:35:38 +0800 Subject: [PATCH 18/31] +GetMyOrders --- business/jxcallback/orderman/orderman_ext.go | 233 +----------------- business/jxstore/cms/store.go | 4 +- business/model/api.go | 18 +- business/model/dao/dao_order.go | 207 ++++++++++++++++ business/model/dao/food_recipe_test.go | 2 +- business/partner/purchase/jx/localjx/order.go | 33 +++ controllers/jx_order.go | 1 - controllers/jx_order2.go | 20 ++ routers/commentsRouter_controllers.go | 9 + 9 files changed, 288 insertions(+), 239 deletions(-) diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index 89a7d3d31..50018eb38 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -227,226 +227,9 @@ func (c *OrderManager) ExportMTWaybills(ctx *jxcontext.Context, fromDateStr, toD return nil, err } -func (c *OrderManager) getOrders(ctx *jxcontext.Context, isIncludeSku, isIncludeFake bool, fromDateStr, toDateStr string, isDateFinish bool, skuIDs []int, isJxFirst bool, params map[string]interface{}, offset, pageSize int) (orders []*model.GoodsOrderExt, totalCount int, err error) { - globals.SugarLogger.Debugf("getOrders from:%s to:%s", fromDateStr, toDateStr) - isPurchase, _ := params["isPurchase"].(bool) - userID := "" - if !isPurchase { - if user := ctx.GetFullUser(); user != nil { - userID = user.GetID() - if user.Type&model.UserTypeNonConsumer == 0 { - isPurchase = true - } - } - } - pageSize = jxutils.FormalizePageSize(pageSize) - if offset < 0 { - offset = 0 - } - sql := fmt.Sprintf(` - SELECT SQL_CALC_FOUND_ROWS t1.*, - CAST(IF(t1.earning_price <> 0, t1.earning_price, IF(t1.shop_price <> 0 && t1.shop_price < t1.sale_price, t1.shop_price, t1.sale_price) * IF(t5.pay_percentage > 0, t5.pay_percentage, %d) / 100) AS SIGNED) earning_price, - t2.status waybill_status, t2.courier_name, t2.courier_mobile, - t2.actual_fee, t2.desired_fee, t2.waybill_created_at, t2.waybill_finished_at, - city.name city_name, district.name district_name`, model.DefaultEarningPricePercentage) - if isIncludeSku { - sql += `, - IF(t3.jx_sku_id > 0, t3.jx_sku_id, t3.sku_id) sku_id, - t3.count sku_count2, - t3.shop_price sku_shop_price, - t3.earning_price sku_earning_price, - t3.sale_price sku_sale_price` - } - sql += ` - FROM goods_order t1 - LEFT JOIN waybill t2 ON t1.vendor_waybill_id = t2.vendor_waybill_id AND t1.waybill_vendor_id = t2.waybill_vendor_id - LEFT JOIN store t5 ON t5.id = IF(t1.jx_store_id <> 0, t1.jx_store_id, t1.store_id) - LEFT JOIN place city ON city.code = t5.city_code - LEFT JOIN place district ON district.code = t5.district_code` - if isIncludeSku { - sql += ` - JOIN order_sku t3 ON t3.vendor_order_id = t1.vendor_order_id AND t3.vendor_id = t1.vendor_id` - } - var ( - sqlWhere string - sqlParams []interface{} - ) - // 如果搜索关键字可能为订单号,则当成订单号查询 - if params["keyword"] != nil { - if jxutils.GetPossibleVendorIDFromVendorOrderID(params["keyword"].(string)) > model.VendorIDUnknown { - params["vendorOrderID"] = params["keyword"] - } - } - if params["orderID"] != nil || params["vendorOrderID"] != nil { - sqlWhere = " WHERE (t1.vendor_order_id = ? OR t1.vendor_order_id2 = ?)" - vendorOrderID := params["vendorOrderID"] - if vendorOrderID == nil { - vendorOrderID = params["orderID"] - } - sqlParams = []interface{}{ - vendorOrderID, - vendorOrderID, - } - } else { - timeList, err2 := jxutils.BatchStr2Time(fromDateStr, toDateStr) - if err = err2; err != nil { - return nil, 0, err - } - if utils.IsTimeZero(timeList[0]) { - return nil, 0, fmt.Errorf("在没有指定订单号时,必须指定查询日期范围") - } - if utils.IsTimeZero(timeList[1]) { - timeList[1] = timeList[0] - } - timeList[1] = timeList[1].Add(24 * time.Hour) - if isDateFinish { - sqlWhere = ` - WHERE t1.order_finished_at >= ? AND t1.order_finished_at < ?` - } else { - sqlWhere = ` - WHERE t1.order_created_at >= ? AND t1.order_created_at < ?` - } - sqlParams = []interface{}{ - timeList[0], - timeList[1], - } - if params["keyword"] != nil { - keyword := params["keyword"].(string) - keywordLike := "%" + keyword + "%" - sqlWhere += ` - AND (t1.store_name LIKE ? OR t1.vendor_order_id LIKE ? OR t1.vendor_order_id2 LIKE ? OR t1.vendor_store_id LIKE ? - OR t1.consignee_name LIKE ? OR t1.consignee_mobile LIKE ? OR t1.consignee_mobile2 LIKE ? OR t1.consignee_address LIKE ? - OR t2.vendor_waybill_id LIKE ? OR t2.courier_name LIKE ? OR t2.courier_mobile LIKE ? - ` - sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike) - if keywordInt64, err2 := strconv.ParseInt(keyword, 10, 64); err2 == nil { - sqlWhere += " OR t1.store_id = ? OR t1.jx_store_id = ?" - sqlParams = append(sqlParams, keywordInt64, keywordInt64) - } - sqlWhere += ")" - } - if params["waybillVendorIDs"] != nil { - var waybillVendorIDs []int - if err = utils.UnmarshalUseNumber([]byte(params["waybillVendorIDs"].(string)), &waybillVendorIDs); err != nil { - return nil, 0, err - } - if len(waybillVendorIDs) > 0 { - sqlWhere += " AND t1.waybill_vendor_id IN (" + dao.GenQuestionMarks(len(waybillVendorIDs)) + ")" - sqlParams = append(sqlParams, waybillVendorIDs) - } - } - if params["storeIDs"] != nil { - var storeIDs []int - if err = utils.UnmarshalUseNumber([]byte(params["storeIDs"].(string)), &storeIDs); err != nil { - return nil, 0, err - } - if len(storeIDs) > 0 { - if storeIDs[0] == 0 { // 容错 - sqlWhere += " AND 1 = 0" - } else { - sqlWhere += " AND IF(t1.jx_store_id != 0, t1.jx_store_id, t1.store_id) IN (" + dao.GenQuestionMarks(len(storeIDs)) + ")" - sqlParams = append(sqlParams, storeIDs) - } - } - } - if params["statuss"] != nil { - var statuss []int - if err = utils.UnmarshalUseNumber([]byte(params["statuss"].(string)), &statuss); err != nil { - return nil, 0, err - } - if len(statuss) > 0 { - sqlWhere += " AND t1.status IN (" + dao.GenQuestionMarks(len(statuss)) + ")" - sqlParams = append(sqlParams, statuss) - } - } - if params["lockStatuss"] != nil { - var lockStatuss []int - if err = utils.UnmarshalUseNumber([]byte(params["lockStatuss"].(string)), &lockStatuss); err != nil { - return nil, 0, err - } - if len(lockStatuss) > 0 { - sqlWhere += " AND t1.lock_status IN (" + dao.GenQuestionMarks(len(lockStatuss)) + ")" - sqlParams = append(sqlParams, lockStatuss) - } - } - if params["cities"] != nil { - var cities []int - if err = utils.UnmarshalUseNumber([]byte(params["cities"].(string)), &cities); err != nil { - return nil, 0, err - } - if len(cities) > 0 { - sqlWhere += " AND t5.city_code IN (" + dao.GenQuestionMarks(len(cities)) + ") AND t5.id IS NOT NULL" - sqlParams = append(sqlParams, cities) - } - } - if !isIncludeFake { - sqlWhere += " AND (t1.flag & ?) = 0" - sqlParams = append(sqlParams, model.OrderFlagMaskFake) - } - if len(skuIDs) > 0 { - sqlWhere += " AND (SELECT COUNT(*) FROM order_sku t11 WHERE t11.vendor_order_id = t1.vendor_order_id AND t11.vendor_id = t1.vendor_id AND t11.jx_sku_id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")) > 0" - sqlParams = append(sqlParams, skuIDs) - } - if params["adjustCount"] != nil { - sqlWhere += " AND t1.adjust_count >= ?" - sqlParams = append(sqlParams, params["adjustCount"]) - } - if mustInvoice, ok := params["mustInvoice"].(bool); ok && mustInvoice { - sqlWhere += " AND t1.invoice_taxer_id <> ''" - } - } - if params["vendorIDs"] != nil { - var vendorIDs []int - if err = utils.UnmarshalUseNumber([]byte(params["vendorIDs"].(string)), &vendorIDs); err != nil { - return nil, 0, err - } - if len(vendorIDs) > 0 { - sqlWhere += " AND t1.vendor_id IN (" + dao.GenQuestionMarks(len(vendorIDs)) + ")" - sqlParams = append(sqlParams, vendorIDs) - } - } - if isPurchase { - sqlWhere += " AND t1.user_id = ?" - sqlParams = append(sqlParams, userID) - } - db := dao.GetDB() - sql += sqlWhere - if isIncludeSku { - sql += ` - ORDER BY t1.id` - } else { - if isJxFirst { - sql += ` - ORDER BY IF(t1.status < ?, IF(t1.vendor_id = ?, 0, 1), 0), t1.order_created_at DESC` - sqlParams = append(sqlParams, model.OrderStatusEndBegin, model.VendorIDJX) - } else { - sql += ` - ORDER BY t1.order_created_at DESC` - } - sql += ` - LIMIT ? OFFSET ?` - sqlParams = append(sqlParams, pageSize, offset) - - dao.Begin(db) - defer func() { - if r := recover(); r != nil { - dao.Rollback(db) - panic(r) - } - }() - } - if err = dao.GetRows(db, &orders, sql, sqlParams...); err == nil { - totalCount = dao.GetLastTotalRowCount(db) - } - if !isIncludeSku { - dao.Commit(db) - } - return orders, totalCount, err -} - func (c *OrderManager) GetOrders(ctx *jxcontext.Context, isIncludeFake bool, fromDateStr, toDateStr string, isDateFinish bool, skuIDs []int, isJxFirst bool, params map[string]interface{}, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) { globals.SugarLogger.Debugf("GetOrders from:%s to:%s", fromDateStr, toDateStr) - orders, totalCount, err := c.getOrders(ctx, false, isIncludeFake, fromDateStr, toDateStr, isDateFinish, skuIDs, isJxFirst, params, offset, pageSize) + orders, totalCount, err := dao.GetOrders(dao.GetDB(), nil, false, isIncludeFake, fromDateStr, toDateStr, isDateFinish, skuIDs, isJxFirst, "", params, offset, pageSize) if err == nil { pagedInfo = &model.PagedInfo{ TotalCount: totalCount, @@ -468,7 +251,7 @@ func (c *OrderManager) ExportOrders(ctx *jxcontext.Context, fromDateStr, toDateS func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { switch step { case 0: - orders, _, err = c.getOrders(ctx, true, true, fromDateStr, toDateStr, true, nil, false, mapParams, 0, -1) + orders, _, err = dao.GetOrders(dao.GetDB(), nil, true, true, fromDateStr, toDateStr, true, nil, false, "", mapParams, 0, model.UnlimitedPageSize) case 1: afsSkuMap, err = c.getAfsOrderSkuInfo4ExportOrders(ctx, fromDateStr, toDateStr) case 2: @@ -584,9 +367,7 @@ func (c *OrderManager) GetWaybills(ctx *jxcontext.Context, fromDateStr, toDateSt } toDate = toDate.Add(24 * time.Hour) pageSize = jxutils.FormalizePageSize(pageSize) - if offset < 0 { - offset = 0 - } + offset = jxutils.FormalizePageOffset(offset) sql := ` SELECT SQL_CALC_FOUND_ROWS t1.*, t2.store_name, IF(t1.jx_store_id != 0, t1.jx_store_id, t1.store_id) store_id @@ -683,9 +464,7 @@ func (c *OrderManager) GetOrderStatusList(ctx *jxcontext.Context, vendorOrderID func (c *OrderManager) GetOrdersFinancial(ctx *jxcontext.Context, fromDateStr, toDateStr string, params map[string]interface{}, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) { globals.SugarLogger.Debugf("GetOrdersFinancial from:%s to:%s", fromDateStr, toDateStr) pageSize = jxutils.FormalizePageSize(pageSize) - if offset < 0 { - offset = 0 - } + offset = jxutils.FormalizePageOffset(offset) sql := ` SELECT SQL_CALC_FOUND_ROWS t1.*, t2.store_name,t2.vendor_store_id,t2.store_id,t2.jx_store_id,t2.status,t2.order_finished_at @@ -925,9 +704,7 @@ func (c *OrderManager) GetAfsOrders(ctx *jxcontext.Context, keyword, afsOrderID, globals.SugarLogger.Debugf("GetAfsOrders") pageSize = jxutils.FormalizePageSize(pageSize) - if offset < 0 { - offset = 0 - } + offset = jxutils.FormalizePageOffset(offset) sql := ` SELECT SQL_CALC_FOUND_ROWS t1.* diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 9ede205ee..fe5dd272f 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -1207,9 +1207,7 @@ func TmpGetJxBadCommentsByStoreId(ctx *jxcontext.Context, keyword string, storeI } sql += " ORDER BY t1.createtime DESC" pageSize = jxutils.FormalizePageSize(pageSize) - if offset < 0 { - offset = 0 - } + offset = jxutils.FormalizePageOffset(offset) sql += " LIMIT ? OFFSET ?" sqlParams = append(sqlParams, pageSize, offset) var commentList []*JxBadCommentsExt diff --git a/business/model/api.go b/business/model/api.go index 8f803127c..ce2596003 100644 --- a/business/model/api.go +++ b/business/model/api.go @@ -10,6 +10,15 @@ const ( UnlimitedPageSize = math.MaxInt32 ) +type ShortSkuInfo struct { + SkuID int `orm:"column(sku_id)" json:"skuID,omitempty"` + SkuShopPrice int `json:"skuShopPrice,omitempty"` + SkuSalePrice int `json:"skuSalePrice,omitempty"` + SkuEarningPrice int `json:"skuEarningPrice,omitempty"` + SkuCount2 int `json:"skuCount2,omitempty"` + SkuName string `orm:"size(255)" json:"skuName"` +} + type GoodsOrderExt struct { GoodsOrder EarningPrice int64 `json:"earningPrice"` // 预估结算给门店老板的钱 @@ -29,12 +38,9 @@ type GoodsOrderExt struct { DistrictName string `json:"districtName"` CityName string `json:"cityName"` - SkuID int `orm:"column(sku_id)" json:"skuID,omitempty"` - SkuShopPrice int `json:"skuShopPrice,omitempty"` - SkuSalePrice int `json:"skuSalePrice,omitempty"` - SkuEarningPrice int `json:"skuEarningPrice,omitempty"` - SkuCount2 int `json:"skuCount2,omitempty"` - SkuInfo string `json:"skuInfo,omitempty"` + SkuInfo string `json:"skuInfo,omitempty"` + ShortSkuInfo `json:"-"` + SkuList []*ShortSkuInfo `json:"skuList,omitempty"` } type OrderSkuExt struct { diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 673e06405..d6b68989d 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -2,10 +2,13 @@ package dao import ( "fmt" + "strconv" "time" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/globals" ) const ( @@ -712,3 +715,207 @@ func GetOrderPayList(db *DaoDB, vendorOrderID string, vendorID int) (payList []* } return payList, GetRows(db, &payList, sql, sqlParams) } + +func GetOrders(db *DaoDB, ids []int64, isIncludeSku, isIncludeFake bool, fromDateStr, toDateStr string, isDateFinish bool, skuIDs []int, isJxFirst bool, userID string, params map[string]interface{}, offset, pageSize int) (orders []*model.GoodsOrderExt, totalCount int, err error) { + globals.SugarLogger.Debugf("dao GetOrders ids:%v from:%s to:%s", ids, fromDateStr, toDateStr) + pageSize = jxutils.FormalizePageSize(pageSize) + offset = jxutils.FormalizePageOffset(offset) + + sql := fmt.Sprintf(` + SELECT SQL_CALC_FOUND_ROWS + t1.*, + CAST(IF(t1.earning_price <> 0, t1.earning_price, IF(t1.shop_price <> 0 && t1.shop_price < t1.sale_price, t1.shop_price, t1.sale_price) * IF(t5.pay_percentage > 0, t5.pay_percentage, %d) / 100) AS SIGNED) earning_price, + t2.status waybill_status, t2.courier_name, t2.courier_mobile, + t2.actual_fee, t2.desired_fee, t2.waybill_created_at, t2.waybill_finished_at, + city.name city_name, district.name district_name`, model.DefaultEarningPricePercentage) + if isIncludeSku { + sql += `, + IF(t3.jx_sku_id > 0, t3.jx_sku_id, t3.sku_id) sku_id, + t3.count sku_count2, + t3.shop_price sku_shop_price, + t3.earning_price sku_earning_price, + t3.sale_price sku_sale_price, + t3.sku_name` + } + sql += ` + FROM goods_order t1 + LEFT JOIN waybill t2 ON t1.vendor_waybill_id = t2.vendor_waybill_id AND t1.waybill_vendor_id = t2.waybill_vendor_id + LEFT JOIN store t5 ON t5.id = IF(t1.jx_store_id <> 0, t1.jx_store_id, t1.store_id) + LEFT JOIN place city ON city.code = t5.city_code + LEFT JOIN place district ON district.code = t5.district_code` + if isIncludeSku { + sql += ` + JOIN order_sku t3 ON t3.vendor_order_id = t1.vendor_order_id AND t3.vendor_id = t1.vendor_id` + } + sqlWhere := " WHERE 1 = 1" + var ( + sqlParams []interface{} + ) + if len(ids) > 0 { // 如果给定了ids,忽略其它所有条件 + sqlWhere += " AND t1.id IN (" + GenQuestionMarks(len(ids)) + ")" + sqlParams = append(sqlParams, ids) + } else { + // 如果搜索关键字可能为订单号,则当成订单号查询 + if params["keyword"] != nil { + if jxutils.GetPossibleVendorIDFromVendorOrderID(params["keyword"].(string)) > model.VendorIDUnknown { + params["vendorOrderID"] = params["keyword"] + } + } + if params["orderID"] != nil || params["vendorOrderID"] != nil { + sqlWhere += " AND (t1.vendor_order_id = ? OR t1.vendor_order_id2 = ?)" + vendorOrderID := params["vendorOrderID"] + if vendorOrderID == nil { + vendorOrderID = params["orderID"] + } + sqlParams = []interface{}{ + vendorOrderID, + vendorOrderID, + } + } else { + timeList, err2 := jxutils.BatchStr2Time(fromDateStr, toDateStr) + if err = err2; err != nil { + return nil, 0, err + } + if utils.IsTimeZero(timeList[0]) { + return nil, 0, fmt.Errorf("在没有指定订单号时,必须指定查询日期范围") + } + if utils.IsTimeZero(timeList[1]) { + timeList[1] = timeList[0] + } + timeList[1] = timeList[1].Add(24 * time.Hour) + if isDateFinish { + sqlWhere += ` + AND t1.order_finished_at >= ? AND t1.order_finished_at < ?` + } else { + sqlWhere += ` + AND t1.order_created_at >= ? AND t1.order_created_at < ?` + } + sqlParams = []interface{}{ + timeList[0], + timeList[1], + } + if params["keyword"] != nil { + keyword := params["keyword"].(string) + keywordLike := "%" + keyword + "%" + sqlWhere += ` + AND (t1.store_name LIKE ? OR t1.vendor_order_id LIKE ? OR t1.vendor_order_id2 LIKE ? OR t1.vendor_store_id LIKE ? + OR t1.consignee_name LIKE ? OR t1.consignee_mobile LIKE ? OR t1.consignee_mobile2 LIKE ? OR t1.consignee_address LIKE ? + OR t2.vendor_waybill_id LIKE ? OR t2.courier_name LIKE ? OR t2.courier_mobile LIKE ? + ` + sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike) + if keywordInt64, err2 := strconv.ParseInt(keyword, 10, 64); err2 == nil { + sqlWhere += " OR t1.store_id = ? OR t1.jx_store_id = ?" + sqlParams = append(sqlParams, keywordInt64, keywordInt64) + } + sqlWhere += ")" + } + if params["waybillVendorIDs"] != nil { + var waybillVendorIDs []int + if err = utils.UnmarshalUseNumber([]byte(params["waybillVendorIDs"].(string)), &waybillVendorIDs); err != nil { + return nil, 0, err + } + if len(waybillVendorIDs) > 0 { + sqlWhere += " AND t1.waybill_vendor_id IN (" + GenQuestionMarks(len(waybillVendorIDs)) + ")" + sqlParams = append(sqlParams, waybillVendorIDs) + } + } + if params["storeIDs"] != nil { + var storeIDs []int + if err = utils.UnmarshalUseNumber([]byte(params["storeIDs"].(string)), &storeIDs); err != nil { + return nil, 0, err + } + if len(storeIDs) > 0 { + if storeIDs[0] == 0 { // 容错 + sqlWhere += " AND 1 = 0" + } else { + sqlWhere += " AND IF(t1.jx_store_id != 0, t1.jx_store_id, t1.store_id) IN (" + GenQuestionMarks(len(storeIDs)) + ")" + sqlParams = append(sqlParams, storeIDs) + } + } + } + if params["statuss"] != nil { + var statuss []int + if err = utils.UnmarshalUseNumber([]byte(params["statuss"].(string)), &statuss); err != nil { + return nil, 0, err + } + if len(statuss) > 0 { + sqlWhere += " AND t1.status IN (" + GenQuestionMarks(len(statuss)) + ")" + sqlParams = append(sqlParams, statuss) + } + } + if params["lockStatuss"] != nil { + var lockStatuss []int + if err = utils.UnmarshalUseNumber([]byte(params["lockStatuss"].(string)), &lockStatuss); err != nil { + return nil, 0, err + } + if len(lockStatuss) > 0 { + sqlWhere += " AND t1.lock_status IN (" + GenQuestionMarks(len(lockStatuss)) + ")" + sqlParams = append(sqlParams, lockStatuss) + } + } + if params["cities"] != nil { + var cities []int + if err = utils.UnmarshalUseNumber([]byte(params["cities"].(string)), &cities); err != nil { + return nil, 0, err + } + if len(cities) > 0 { + sqlWhere += " AND t5.city_code IN (" + GenQuestionMarks(len(cities)) + ") AND t5.id IS NOT NULL" + sqlParams = append(sqlParams, cities) + } + } + if !isIncludeFake { + sqlWhere += " AND (t1.flag & ?) = 0" + sqlParams = append(sqlParams, model.OrderFlagMaskFake) + } + if len(skuIDs) > 0 { + sqlWhere += " AND (SELECT COUNT(*) FROM order_sku t11 WHERE t11.vendor_order_id = t1.vendor_order_id AND t11.vendor_id = t1.vendor_id AND t11.jx_sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")) > 0" + sqlParams = append(sqlParams, skuIDs) + } + if params["adjustCount"] != nil { + sqlWhere += " AND t1.adjust_count >= ?" + sqlParams = append(sqlParams, params["adjustCount"]) + } + if mustInvoice, ok := params["mustInvoice"].(bool); ok && mustInvoice { + sqlWhere += " AND t1.invoice_taxer_id <> ''" + } + } + if params["vendorIDs"] != nil { + var vendorIDs []int + if err = utils.UnmarshalUseNumber([]byte(params["vendorIDs"].(string)), &vendorIDs); err != nil { + return nil, 0, err + } + if len(vendorIDs) > 0 { + sqlWhere += " AND t1.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")" + sqlParams = append(sqlParams, vendorIDs) + } + } + if userID != "" { + sqlWhere += " AND t1.user_id = ?" + sqlParams = append(sqlParams, userID) + } + } + sql += sqlWhere + if isJxFirst { + sql += ` + ORDER BY IF(t1.status < ?, IF(t1.vendor_id = ?, 0, 1), 0), t1.order_created_at DESC` + sqlParams = append(sqlParams, model.OrderStatusEndBegin, model.VendorIDJX) + } else { + if isIncludeSku { + sql += ` + ORDER BY t1.id` + } else { + sql += ` + ORDER BY t1.order_created_at DESC` + } + } + sql += ` + LIMIT ? OFFSET ?` + sqlParams = append(sqlParams, pageSize, offset) + + Begin(db) + defer Commit(db) + if err = GetRows(db, &orders, sql, sqlParams...); err == nil { + totalCount = GetLastTotalRowCount(db) + } + return orders, totalCount, err +} diff --git a/business/model/dao/food_recipe_test.go b/business/model/dao/food_recipe_test.go index 471c44e8a..b3b064046 100644 --- a/business/model/dao/food_recipe_test.go +++ b/business/model/dao/food_recipe_test.go @@ -6,7 +6,7 @@ import ( func TestQueryRecipes(t *testing.T) { db := GetDB() - recipeList, _, err := QueryFoodRecipes(db, "", 0, "", "", 0, 0) + recipeList, _, err := QueryFoodRecipes(db, "", 0, "", "", nil, 0, 0) if err != nil { t.Fatal(err) } diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index dd31afc09..3bd71af27 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -100,6 +100,39 @@ func init() { orderNoBeginTimestamp = utils.Str2Time("2010-01-01 00:00:00").Unix() } +func GetMyOrders(ctx *jxcontext.Context, fromDateStr, toDateStr string, params map[string]interface{}, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) { + db := dao.GetDB() + tmpOrderList, totalCount, err := dao.GetOrders(db, nil, false, false, fromDateStr, toDateStr, false, nil, false, ctx.GetUserID(), params, offset, pageSize) + if err == nil { + pagedInfo = &model.PagedInfo{ + TotalCount: totalCount, + } + if totalCount > 0 { + var ids []int64 + for _, v := range tmpOrderList { + ids = append(ids, v.ID) + } + orderSkuList, _, err2 := dao.GetOrders(db, ids, true, false, "", "", false, nil, false, "", nil, 0, model.UnlimitedPageSize) + if err = err2; err == nil { + orderMap := make(map[string]*model.GoodsOrderExt) + var orderList []*model.GoodsOrderExt + for _, v := range orderSkuList { + universalOrderID := jxutils.ComposeUniversalOrderID(v.VendorOrderID, v.VendorID) + if orderMap[universalOrderID] == nil { + orderMap[universalOrderID] = v + orderList = append(orderList, v) + } + orderMap[universalOrderID].SkuList = append(orderMap[universalOrderID].SkuList, &v.ShortSkuInfo) + } + pagedInfo.Data = orderList + } else { + pagedInfo = nil + } + } + } + return pagedInfo, err +} + func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64, createType int) (outJxOrder *JxOrderInfo, err error) { outJxOrder, deliveryAddress, err := generateOrder(ctx, jxOrder, addressID) if err != nil { diff --git a/controllers/jx_order.go b/controllers/jx_order.go index 80a424c8c..4fe21002f 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -279,7 +279,6 @@ func (c *OrderController) ExportMTWaybills() { // @Param isJxFirst query bool false "排序是否京西订单优先(缺省为否)" // @Param adjustCount query int false "最小调整次数" // @Param mustInvoice query bool false "是否必须要求开发票" -// @Param isPurchase query bool false "是否是用户自已的订单,如果角色只有consumer,会被强制设为true" // @Param offset query int false "结果起始序号(以0开始,缺省为0)" // @Param pageSize query int false "结果页大小(缺省为50,-1表示全部)" // @Success 200 {object} controllers.CallResult diff --git a/controllers/jx_order2.go b/controllers/jx_order2.go index f59c01de5..8135d1a02 100644 --- a/controllers/jx_order2.go +++ b/controllers/jx_order2.go @@ -72,3 +72,23 @@ func (c *JxOrderController) GetOrderPay() { return retVal, "", err }) } + +// @Title 查询自己的订单 +// @Description 查询自己的订单 +// @Param token header string true "认证token" +// @Param vendorOrderID query string false "订单号,如果此项不为空,忽略其它所有查询条件" +// @Param keyword query string false "查询关键字" +// @Param fromDate query string false "开始日期(包含),格式(2006-01-02),如果订单号为空此项必须要求" +// @Param toDate query string false "结束日期(包含),格式(2006-01-02),如果订单号为空此项必须要求" +// @Param statuss query string false "订单状态列表[1,2,3],缺省不限制" +// @Param offset query int false "结果起始序号(以0开始,缺省为0)" +// @Param pageSize query int false "结果页大小(缺省为50,-1表示全部)" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /GetMyOrders [get] +func (c *JxOrderController) GetMyOrders() { + c.callGetMyOrders(func(params *tJxorderGetMyOrdersParams) (retVal interface{}, errCode string, err error) { + retVal, err = localjx.GetMyOrders(params.Ctx, params.FromDate, params.ToDate, params.MapData, params.Offset, params.PageSize) + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 85fd512be..ed1770ced 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -610,6 +610,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"], + beego.ControllerComments{ + Method: "GetMyOrders", + Router: `/GetMyOrders`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"], beego.ControllerComments{ Method: "GetOrderPay", From 34ee046ce2c44ec8273807b4567611bed0a580c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 29 Nov 2019 11:09:07 +0800 Subject: [PATCH 19/31] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E4=BA=AC=E4=B8=9C?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=BF=AE=E6=94=B9=EF=BC=8C=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=BB=93=E7=AE=97=E4=BB=B7=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/tempop/tempop.go | 25 ++++++++++++++++++++----- business/model/dao/dao_order.go | 3 +-- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/business/jxstore/tempop/tempop.go b/business/jxstore/tempop/tempop.go index 8005bb8bb..90d0776cb 100644 --- a/business/jxstore/tempop/tempop.go +++ b/business/jxstore/tempop/tempop.go @@ -1470,6 +1470,8 @@ func ExecuteFileName(filename string) (name string) { func GetJdUsers(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) { var ( jxVendorIDsMap = make(map[string]string) + pageNoList []int + storeUserList []interface{} ) //获取京东有效的店 db := dao.GetDB() @@ -1477,11 +1479,24 @@ func GetJdUsers(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint for _, v := range storeMapList { jxVendorIDsMap[v.VendorStoreID] = v.VendorStoreID } - //获取京东商城所有用户 - storeUserList, err := api.JdAPI.PrivilegeSearchUserAll() taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { switch step { case 0: + //获取京东商城所有用户 + _, _, toatlPage, _ := api.JdAPI.PrivilegeSearchUser(1) + for i := 1; i <= toatlPage; i++ { + pageNoList = append(pageNoList, i) + } + taskFunc1 := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + pageNo := batchItemList[0].(int) + storeUserLists, _, _, err := api.JdAPI.PrivilegeSearchUser(pageNo) + retVal = storeUserLists + return retVal, err + } + taskParallel1 := tasksch.NewParallelTask("获取京东商城所有用户列表", tasksch.NewParallelConfig(), ctx, taskFunc1, pageNoList) + tasksch.HandleTask(taskParallel1, task, true).Run() + storeUserList, err = taskParallel1.GetResult(0) + case 1: taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { vv := batchItemList[0].(*jdapi.StoreUserInfo) vendorStoreIDs, err := api.JdAPI.GetJdUserBindStoreIDs(vv.ID) @@ -1505,16 +1520,16 @@ func GetJdUsers(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint } return retVal, err } - taskParallel := tasksch.NewParallelTask("获取京东商城用户列表", tasksch.NewParallelConfig(), ctx, taskFunc, storeUserList) + taskParallel := tasksch.NewParallelTask("获取京东商城用户关联门店列表", tasksch.NewParallelConfig(), ctx, taskFunc, storeUserList) tasksch.HandleTask(taskParallel, task, true).Run() _, err = taskParallel.GetResult(0) - case 1: + case 2: //写excel WriteToExcel(task, jdUsersStruct.userMap) } return result, err } - taskSeq := tasksch.NewSeqTask2("获取京东商城用户列表-序列任务", ctx, isContinueWhenError, taskSeqFunc, 2) + taskSeq := tasksch.NewSeqTask2("获取京东商城用户关联门店列表-序列任务", ctx, isContinueWhenError, taskSeqFunc, 3) tasksch.HandleTask(taskSeq, nil, true).Run() if !isAsync { _, err = taskSeq.GetResult(0) diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 673e06405..0e798884e 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -80,12 +80,11 @@ func QueryOrders(db *DaoDB, vendorOrderID string, actID int, vendorIDs []int, st AND t2.store_id = IF(t4.jx_store_id <> 0, t4.jx_store_id, t4.store_id) AND t4.order_created_at BETWEEN t1.begin_at AND t1.end_at WHERE t1.status = 1 - AND t1.type = ? AND t1.id = ? GROUP BY 1,2 )s ON s.vendor_order_id = a.vendor_order_id AND s.vendor_id = a.vendor_id ` - sqlParams = append(sqlParams, model.ActSkuFake, actID) + sqlParams = append(sqlParams, actID) } sql += ` WHERE 1=1 From 4c948798f130987540aa753488bc401079cb224f Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 29 Nov 2019 11:13:46 +0800 Subject: [PATCH 20/31] up --- business/model/api.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/business/model/api.go b/business/model/api.go index ce2596003..4e2d1c2c8 100644 --- a/business/model/api.go +++ b/business/model/api.go @@ -12,10 +12,10 @@ const ( type ShortSkuInfo struct { SkuID int `orm:"column(sku_id)" json:"skuID,omitempty"` - SkuShopPrice int `json:"skuShopPrice,omitempty"` - SkuSalePrice int `json:"skuSalePrice,omitempty"` + SkuShopPrice int `json:"skuShopPrice"` + SkuSalePrice int `json:"skuSalePrice"` SkuEarningPrice int `json:"skuEarningPrice,omitempty"` - SkuCount2 int `json:"skuCount2,omitempty"` + SkuCount2 int `json:"skuCount2"` SkuName string `orm:"size(255)" json:"skuName"` } From 2e4c408170404d242da6de2c43e532ef17e8896e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 29 Nov 2019 11:56:47 +0800 Subject: [PATCH 21/31] =?UTF-8?q?=E8=AF=BB=E5=8F=96=E6=B0=B8=E8=BE=89excel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/yonghui/yonghui.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/business/jxstore/yonghui/yonghui.go b/business/jxstore/yonghui/yonghui.go index fd9eccd86..2b1942188 100644 --- a/business/jxstore/yonghui/yonghui.go +++ b/business/jxstore/yonghui/yonghui.go @@ -235,14 +235,15 @@ func LoadExcelByYongHui(ctx *jxcontext.Context, files []*multipart.FileHeader, i func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, isContinueWhenError bool) (hint string, err error) { var ( skuMap = make(map[string]*ExcelParam) - errMsg string costPrice float64 //成本价 goodsList []*weimobapi.GoodsInfo goodsIDListForPutAway []interface{} isCompare bool + isExecute = false ) db := dao.GetDB() taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + var errMsg string switch step { case 0: //读取excel文件 @@ -261,6 +262,11 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is // 分类名格式为:可定XX日 // XX为上传永辉 提供的 价格表时间 +2天 if errMsg == "" { + isExecute = true + } else { + err = fmt.Errorf(errMsg) + } + if isExecute { isCompare, err = UpdateClassifyAndGetLastClassify() } case 1: @@ -326,7 +332,7 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is } else { costPrice = skuMap[spuCode].Price } - if errMsg == "" { + if isExecute { _, _, _ = updateWeiMobGoods(costPrice, skuMap[spuCode].Price, skuList[0].Unit, isCompare, goodsDetail) } } @@ -351,7 +357,7 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is for _, v := range batchItemList { int64Slice = append(int64Slice, v.(int64)) } - if errMsg == "" { + if isExecute { PutAwayWeiMobSku(int64Slice) } return retVal, err @@ -362,9 +368,7 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is case 4: WriteToExcel(task, dataSuccess.dataSuccessList, dataFailed.dataFailedList) } - if errMsg != "" { - return result, errors.New(errMsg) - } + return result, err } taskSeq := tasksch.NewSeqTask2("读取永辉Excel文件修改微盟商品价格可售状态-序列任务", ctx, isContinueWhenError, taskSeqFunc, 5) From a4cdd45487acc378b4fe944a1a02cd140a280a9a Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 29 Nov 2019 12:07:33 +0800 Subject: [PATCH 22/31] up --- business/jxcallback/orderman/orderman_ext.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index 50018eb38..f4ea247b6 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -242,19 +242,21 @@ func (c *OrderManager) GetOrders(ctx *jxcontext.Context, isIncludeFake bool, fro func (c *OrderManager) ExportOrders(ctx *jxcontext.Context, fromDateStr, toDateStr string, mapParams map[string]interface{}) (hint string, err error) { globals.SugarLogger.Debugf("ExportOrders from:%s to:%s", fromDateStr, toDateStr) var ( - orders, orders2 []*model.GoodsOrderExt - order *model.GoodsOrderExt - afsSkuMap map[string]map[int]*model.OrderSkuFinancial - excelBin []byte + orders []*model.GoodsOrderExt + afsSkuMap map[string]map[int]*model.OrderSkuFinancial + excelBin []byte ) task := tasksch.NewSeqTask("导出订单SKU信息", ctx, func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { switch step { case 0: orders, _, err = dao.GetOrders(dao.GetDB(), nil, true, true, fromDateStr, toDateStr, true, nil, false, "", mapParams, 0, model.UnlimitedPageSize) + globals.SugarLogger.Debugf("orders:%d, er:%v", len(orders), err) case 1: afsSkuMap, err = c.getAfsOrderSkuInfo4ExportOrders(ctx, fromDateStr, toDateStr) case 2: + var order *model.GoodsOrderExt + var orders2 []*model.GoodsOrderExt for _, v := range orders { if afsInfo := afsSkuMap[jxutils.ComposeUniversalOrderID(v.VendorOrderID, v.VendorID)]; afsInfo != nil { if afsInfo[v.SkuID] != nil && afsInfo[v.SkuID].Count > 0 { @@ -285,10 +287,11 @@ func (c *OrderManager) ExportOrders(ctx *jxcontext.Context, fromDateStr, toDateS } } } + orders = orders2 case 3: excelConf := &excel.Obj2ExcelSheetConfig{ Title: "订单导出", - Data: orders2, + Data: orders, CaptionList: []string{ "vendorOrderID", "vendorOrderID2", From 595572ef145caeca37ec88e9def331546a95a975 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 29 Nov 2019 14:33:38 +0800 Subject: [PATCH 23/31] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E4=BA=AC=E4=B8=9C?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/tempop/tempop.go | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/business/jxstore/tempop/tempop.go b/business/jxstore/tempop/tempop.go index 6a3fd16b5..8f8dd250c 100644 --- a/business/jxstore/tempop/tempop.go +++ b/business/jxstore/tempop/tempop.go @@ -11,6 +11,7 @@ import ( "mime/multipart" "net/http" "regexp" + "sort" "strings" "sync" "time" @@ -49,6 +50,7 @@ var ( titleList = []string{ "用户名", "关联门店", + "状态", } ) @@ -60,6 +62,7 @@ type GetJdUsersStruct struct { type JdUserStruct struct { UserName string `json:"用户名"` StoreIDs string `json:"关联门店"` + Status string `json:"状态"` } func init() { @@ -1473,20 +1476,19 @@ func GetJdUsers(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint pageNoList []int storeUserList []interface{} ) - //获取京东有效的店 db := dao.GetDB() + //获取京东商城所有用户 + _, _, toatlPage, _ := api.JdAPI.PrivilegeSearchUser(1) + for i := 1; i <= toatlPage; i++ { + pageNoList = append(pageNoList, i) + } storeMapList, err := dao.GetStoreMapsListWithoutDisabled(db, []int{model.VendorIDJD}, model.StoreStatusDisabled) for _, v := range storeMapList { - jxVendorIDsMap[v.VendorStoreID] = v.VendorStoreID + jxVendorIDsMap[v.VendorStoreID] = utils.Int64ToStr(int64(v.StoreID)) } taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { switch step { case 0: - //获取京东商城所有用户 - _, _, toatlPage, _ := api.JdAPI.PrivilegeSearchUser(1) - for i := 1; i <= toatlPage; i++ { - pageNoList = append(pageNoList, i) - } taskFunc1 := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { pageNo := batchItemList[0].(int) storeUserLists, _, _, err := api.JdAPI.PrivilegeSearchUser(pageNo) @@ -1506,16 +1508,17 @@ func GetJdUsers(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint if jxVendorIDsMap[v] == "" { continue } - vendorStoreIDsMap[v] = v + vendorStoreIDsMap[v] = jxVendorIDsMap[v] } if len(vendorStoreIDsMap) == 0 { - jdStruct := JdUserStruct{vv.LoginName, ""} + jdStruct := JdUserStruct{vv.LoginName, "", vv.LockStatus} jdUsersStruct.AppendData(jdStruct) } else { for _, m := range vendorStoreIDsMap { vendorStoreIDsResult = append(vendorStoreIDsResult, m) } - jdStruct := JdUserStruct{vv.LoginName, strings.Join(vendorStoreIDsResult, ",")} + sort.Strings(vendorStoreIDsResult[:]) + jdStruct := JdUserStruct{vv.LoginName, strings.Join(vendorStoreIDsResult, ","), vv.LockStatus} jdUsersStruct.AppendData(jdStruct) } return retVal, err From 6887fbc18ac5832fb9ab558a6d596d429910edde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 29 Nov 2019 15:03:59 +0800 Subject: [PATCH 24/31] =?UTF-8?q?=E8=AF=BB=E5=8F=96=E6=B0=B8=E8=BE=89excel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/yonghui/yonghui.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/business/jxstore/yonghui/yonghui.go b/business/jxstore/yonghui/yonghui.go index 2b1942188..ea82f5d38 100644 --- a/business/jxstore/yonghui/yonghui.go +++ b/business/jxstore/yonghui/yonghui.go @@ -138,7 +138,7 @@ var ( OrgSkuIdCol: 4, OrgSkuPriceCol: 7, OrgSkuNameCol: 5, - SkuRow: 2, + SkuRow: 1, }, "水产": &SheetParam{ SkuIDCol: 1, SkuPriceCol: 15, @@ -264,7 +264,7 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is if errMsg == "" { isExecute = true } else { - err = fmt.Errorf(errMsg) + return "", fmt.Errorf(errMsg) } if isExecute { isCompare, err = UpdateClassifyAndGetLastClassify() From ebb846dca851f6c70884702fd68f1024c642f2ab Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 29 Nov 2019 15:06:14 +0800 Subject: [PATCH 25/31] =?UTF-8?q?GetStoresSkusNew=E4=B8=AD=E6=AD=A3?= =?UTF-8?q?=E7=A1=AE=E5=A4=84=E7=90=86actVendorID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index de46a02a4..32202afb3 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -193,7 +193,7 @@ func GetStoreSkus(ctx *jxcontext.Context, storeID int, skuIDs []int, isFocus boo return GetStoresSkus(ctx, []int{storeID}, skuIDs, isFocus, keyword, isBySku, isAct, params, offset, pageSize) } -func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, isFocus bool, keyword string, isBySku, isAct bool, params map[string]interface{}) (sql string, sqlParams []interface{}, err error) { +func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, isFocus bool, keyword string, isBySku, isAct bool, actVendorID int, params map[string]interface{}) (sql string, sqlParams []interface{}, err error) { sql = ` FROM sku_name t1 JOIN sku t2 FORCE INDEX(PRIMARY) ON t1.id = t2.name_id AND t2.deleted_at = ?/* AND t2.status = ?*/ @@ -227,6 +227,10 @@ func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, isFocus bool time.Now(), time.Now(), }) + if actVendorID >= 0 { + sql += " AND t1.vendor_mask & ? <> 0" + sqlParams = append(sqlParams, model.GetVendorMask(actVendorID)) + } if len(storeIDs) > 0 { sql += " AND t2.store_id IN (" + dao.GenQuestionMarks(len(storeIDs)) + ")" sqlParams = append(sqlParams, storeIDs) @@ -380,8 +384,12 @@ func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bo if len(storeIDs) == 0 && len(skuIDs) == 0 && pageSize == -1 { return nil, fmt.Errorf("GetStoresSkus必须指定storeIDs或skuIDs或分页") } + actVendorID := -1 + if params["actVendorID"] != nil { + actVendorID = int(utils.Interface2Int64WithDefault(params["actVendorID"], -1)) + } db := dao.GetDB() - sql, sqlParams, err := getGetStoresSkusBaseSQL(db, storeIDs, skuIDs, isFocus, keyword, isBySku, isAct, params) + sql, sqlParams, err := getGetStoresSkusBaseSQL(db, storeIDs, skuIDs, isFocus, keyword, isBySku, isAct, actVendorID, params) if err != nil { return nil, err } @@ -499,10 +507,6 @@ func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bo if true { //!(offset == 0 && pageSize == model.UnlimitedPageSize) { storeIDs, skuIDs = GetStoreAndSkuIDsFromInfo(skuNamesInfo) } - actVendorID := -1 - if params["actVendorID"] != nil { - actVendorID = int(utils.Interface2Int64WithDefault(params["actVendorID"], -1)) - } beginTime := time.Now() err = updateActPrice4StoreSkuNameNew(db, storeIDs, skuIDs, skuNamesInfo, actVendorID) globals.SugarLogger.Debugf("GetStoresSkusNew updateActPrice4StoreSkuName:%v", time.Now().Sub(beginTime)) From 5f4aa686d97332bc7ffc51821f50bb62d6a7753d Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 29 Nov 2019 15:43:50 +0800 Subject: [PATCH 26/31] =?UTF-8?q?=E4=BA=AC=E4=B8=9Ctoken?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/app.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/app.conf b/conf/app.conf index d72c21a23..c347eea59 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -58,7 +58,7 @@ wxpayNotifyURL = "http://callback.test.jxc4.com/wxpay/msg/" backstageHost = "http://www.jxc4.com" wxBackstageHost = "http://wx.jxc4.com" -jdStorePageCookie = "YYJV3NHVBPHLD36FWP6F3EM5PTXJ2XZQS7U4HWRIDPP4IWGUKUIB4XG5N26CZRDLDF7PKOXBPD6BNTUAJLETLZOIWMCVFI3K6MYZIY4QBIXIMXYDJNUKFGJVQTN5356SAD6WPCIHWNQAG7DDMF7L7S3SHCT3RM3CQG7IJIPUQ3THS5UIUYWMKINM7ETUOQB7OBPOPZVCT3ZJY55243TDVXLO25PP4UYSPTTPMNQ7HPMWOJKJ3BJWGVHD243MXH7NZWW264TKN5UOCJBSSSOKD2QQII" +jdStorePageCookie = "OPJQMA7B3FTKCAUGO7FHCH5NMBGAWGGXYRNLEHYYZNGNPNIBCAM4IOEPG3NT3RIA44G5C3535Q5LGG4F4SR4AZVLGYKYTKFJJKEAOXENVBL5VXNILRP3GLNVVWA26XZ3VGSYOHA72RICMVZS3G53DTEH3LYUCSS54VI6WPOAGGDK532VYPEWWVCXUFRWENWDI4PEKM7SXBZ5BJO6DBLLERUA74YR2CVCGP4WUROCAHAMXKJ2VBGHTZYRL2DHR3BMXAHCTBAHYQLL24K5YI2PULRJL2UGAVD7VFRMEYTOXYHWCYVDXJ6HYFIPWIN3ULLXDDLN2ICON4GRK" ebaiStorePageCookieWMUSS = "B0AAFQCAAAGbhkuMCsvcyYBDkkyAxBGIBlgXAQYVwc7VwYZFkx2HDoPSmo5eV1femopWgJRawhgAALG04cg1RUmhUakBbJRdgPS0tNEhnQhNRewwuWwYYBDEFPCQSDXV5YWA6PAVRHUJ9SnVGMThYAjNjLw9pRxIbS04-XFo05AQgBl%7ERLA33vWcR73gEAKZ" ebaiStorePageCookieWMSTOKEN = "gAALgNAAAGfBI5YEBHSQdZY1InIS8CVQU9aBU1f3VLWVQqKHAAAc5LnRLZ1QLLx0S5IuzCSX8ZQ7oUwAAUr-GEm9JpRc9AQAAsLkLHHXzuhh2lZkbyrcAAAWBESKg3ZA" mtpsStoreToken = "M0p9VatZSeSHfrosD5IViAVl73IcA8mlcuHIV5sG6Zpv83a7JE0wY3t26aEhrrs_MR5gtLSFF1UIkt8HAjaXow" @@ -181,7 +181,7 @@ dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxgy?charset=utf8mb4&loc=Lo jdToken = "84541069-fbe2-424b-b625-9b2ba1d4c9e6" jdAppKey = "5d5577a2506f41b8b4ec520ba83490f5" jdSecret = "0b01b9eeb15b41dab1c3d05d95c17a26" -jdStorePageCookie = "YDYCWYUGKSROMV3MKJQIFINJ5CLPYH6IRVFUMFJD3JI6VQKHX3YPHTWDIDBNMCBUKSY3P7SKAHHKR7PHQDSFRXZEWXA4XOUTALIQDGDYIEUCMDPWSYGDVT42DJ27CD27QKCR3UN7KF7EPIHGPR7GCRTBD6NFNB5MFIV6EPYE6RGXH6K2VN6O67WVPV5PLGYFIAKGHFCQNCPB4GL5IIBN4ARWFQ23OEMGXQRC77UCFGE7JOWTZG2KLEWZL5JBAVSZUYFDYFEFHXZNSJPWMFCADAJTUQ" +jdStorePageCookie = "YDYCWYUGKSROMV3MKJQIFINJ5CLPYH6IRVFUMFJD3JI6VQKHX3YPHTWDIDBNMCBUKSY3P7SKAHHKR7PHQDSFRXZEWXA4XOUTALIQDGDYIEUCMDPWSYGDVT42DJ27CD27QKCR3UN7KF7EPIHGPR7GCRTBD5DAHYMIODMDYESTI4PQWPK4CSWXGB2U4Y7R57ZUWN2T5LH4LE5SSAFFJCY53F5ZPCFR2RAUWYMCKHC4Y4QRFKYYLPHHZ2B3SCDWNLTVJOU24WJL4PVF3PPYDNTOLLXDABUFAZSE6C6CNOMI6L2TAK43JJIJQRQAQUQSU537ZFLVPGBYFDJYY" ebaiSource = "35957" ebaiSecret = "10013fbb7c2ddad7" From 648357c4234af139316b41f682c5b755b91050f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 29 Nov 2019 16:15:06 +0800 Subject: [PATCH 27/31] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E4=BA=AC=E4=B8=9C?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/tempop/tempop.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/business/jxstore/tempop/tempop.go b/business/jxstore/tempop/tempop.go index 8f8dd250c..7282cd430 100644 --- a/business/jxstore/tempop/tempop.go +++ b/business/jxstore/tempop/tempop.go @@ -1511,6 +1511,10 @@ func GetJdUsers(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint vendorStoreIDsMap[v] = jxVendorIDsMap[v] } if len(vendorStoreIDsMap) == 0 { + if vv.LoginName == "jd_jxcs1223" || vv.LoginName == "jd_jxgy" { + jdStruct := JdUserStruct{vv.LoginName, "管理员", vv.LockStatus} + jdUsersStruct.AppendData(jdStruct) + } jdStruct := JdUserStruct{vv.LoginName, "", vv.LockStatus} jdUsersStruct.AppendData(jdStruct) } else { From d93356ad019d191c5df81af2983ac5ed7465b221 Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 29 Nov 2019 16:28:21 +0800 Subject: [PATCH 28/31] =?UTF-8?q?=E9=A5=BF=E7=99=BE=E5=9C=A8=E5=8F=91?= =?UTF-8?q?=E9=80=81=E8=BF=90=E5=8D=95=E5=8F=96=E6=B6=88=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E5=A6=82=E6=9E=9C=E8=AE=A2=E5=8D=95=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E5=8F=8A=E6=97=B6=EF=BC=88=E5=85=B7=E4=BD=93=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E6=9C=AA=E7=9F=A5=EF=BC=89=E8=BD=AC=E5=87=BA=E8=87=AA?= =?UTF-8?q?=E9=80=81=EF=BC=8C=E5=88=99=E8=AE=A2=E5=8D=95=E4=BC=9A=E8=A2=AB?= =?UTF-8?q?=E5=8F=96=E6=B6=88=EF=BC=8C=E4=B8=94=E4=B8=8D=E4=BC=9A=E5=8F=91?= =?UTF-8?q?=E9=80=81=E8=AE=A2=E5=8D=95=E5=8F=96=E6=B6=88=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jxcallback/scheduler/defsch/defsch.go | 19 ++++++++++--------- business/partner/purchase/ebai/order.go | 17 ++++++++++++++++- business/partner/purchase/ebai/waybill.go | 14 ++++++++++++++ 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index d4ffa17a8..45487d5c2 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -300,19 +300,20 @@ func init() { // 饿百转自送的时机不太清楚,暂时禁用超时转自送,在饿百运单取消时还是会自动创建 // 非自配送商家使用 order := savedOrderInfo.order - return savedOrderInfo.isDeliveryCompetition && - model.IsOrderDeliveryByPlatform(order) && + return order.VendorID != model.VendorIDEBAI && order.VendorID == bill.WaybillVendorID && - order.VendorID != model.VendorIDEBAI && + savedOrderInfo.isDeliveryCompetition && + model.IsOrderDeliveryByPlatform(order) && order.DeliveryType != model.OrderDeliveryTypeSelfTake && - isOrderCanSwitch2SelfDeliver(order) + isOrderCanSwitch2SelfDeliver(order) && + (order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin) }, }, //* model.WaybillStatusCanceled: &StatusActionConfig{ StatusActionParams: partner.StatusActionParams{ TimerType: partner.TimerTypeBaseNow, - Timeout: 5 * time.Second, + Timeout: 1 * time.Second, }, TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) { return sch.createWaybillOn3rdProviders(savedOrderInfo, ebaiCancelWaybillMaxFee, nil) @@ -320,13 +321,13 @@ func init() { ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool { order := savedOrderInfo.order // 非自配送商家使用 - return (order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin) && - savedOrderInfo.isDeliveryCompetition && + return order.VendorID == model.VendorIDEBAI && order.VendorID == bill.WaybillVendorID && + savedOrderInfo.isDeliveryCompetition && model.IsOrderDeliveryByPlatform(order) && - order.VendorID == model.VendorIDEBAI && order.DeliveryType != model.OrderDeliveryTypeSelfTake && - isOrderCanSwitch2SelfDeliver(order) + isOrderCanSwitch2SelfDeliver(order) && + (order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin) }, }, //*/ diff --git a/business/partner/purchase/ebai/order.go b/business/partner/purchase/ebai/order.go index 2658dc3f1..e891e83fa 100644 --- a/business/partner/purchase/ebai/order.go +++ b/business/partner/purchase/ebai/order.go @@ -32,6 +32,7 @@ const ( fakeUserUndoApplyCancel = "fake_user_undo_apply_cancel" fakeAcceptOrder = "fake_accept_order" fakeOrderAdjustFinished = "fake_order_adjust_finished" + fakeOrderCanceled = "fake_order_canceled" ) // 饿百的接单会直接召唤配送,为了统一将饿百的接单影射成拣货完成,然后模拟一个接单消息 @@ -50,6 +51,7 @@ var ( fakeOrderAdjustFinished: model.OrderStatusAdjust, fakeUserApplyCancel: model.OrderStatusApplyCancel, fakeUserUndoApplyCancel: model.OrderStatusUndoApplyCancel, + fakeOrderCanceled: model.OrderStatusCanceled, } skuActTypeMap = map[string]int{ @@ -341,8 +343,11 @@ func (p *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName s if err = api.EbaiAPI.OrderSwitchselfdelivery(order.VendorOrderID); err != nil { if utils.IsErrMatch(err, "301251", nil) { if deliveryStatus, err2 := api.EbaiAPI.OrderDeliveryGet(order.VendorOrderID); err2 == nil { - if utils.Int64ToStr(utils.MustInterface2Int64(deliveryStatus["status"])) == ebaiapi.WaybillStatusSelfDelivery { + deliveryStatus := utils.Int64ToStr(utils.MustInterface2Int64(deliveryStatus["status"])) + if deliveryStatus == ebaiapi.WaybillStatusSelfDelivery { err = nil + } else if deliveryStatus == ebaiapi.WaybillStatusDeliveryCancled { + p.trySyncCancelStatus(order.VendorOrderID) } } } @@ -355,6 +360,16 @@ func (p *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName s return err } +func (p *PurchaseHandler) trySyncCancelStatus(vendorOrderID string) (err error) { + orderInfo, err := api.EbaiAPI.OrderGet2(vendorOrderID) + if err == nil { + if utils.Int2Str(orderInfo.Order.Status) == ebaiapi.OrderStatusCanceled { + p.postFakeMsg(vendorOrderID, fakeOrderCanceled) + } + } + return err +} + // 将订单从购物平台配送转为自送后又送达 func (p *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder, userName string) (err error) { globals.SugarLogger.Debugf("ebai Swtich2SelfDelivered orderID:%s", order.VendorOrderID) diff --git a/business/partner/purchase/ebai/waybill.go b/business/partner/purchase/ebai/waybill.go index 12a9f4a27..0d7564fdd 100644 --- a/business/partner/purchase/ebai/waybill.go +++ b/business/partner/purchase/ebai/waybill.go @@ -1,6 +1,8 @@ package ebai import ( + "time" + "git.rosy.net.cn/baseapi/platformapi/ebaiapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/model" @@ -9,6 +11,10 @@ import ( "git.rosy.net.cn/jx-callback/globals/api" ) +const ( + timeout4WaybillCancel = 10 * time.Minute // 饿百发送运单取消消息10分钟后,如果没有转自送,就要取消订单,且不再发送订单取消消息 +) + var ( VendorWaybillStatus2StatusMap = map[string]int{ ebaiapi.WaybillStatusNew: model.WaybillStatusUnknown, @@ -44,6 +50,14 @@ func (c *PurchaseHandler) onWaybillMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaiap order.CourierName = utils.Interface2String(result["name"]) order.CourierMobile = utils.Interface2String(result["phone"]) } + } else if order.Status == model.WaybillStatusCanceled { + utils.AfterFuncWithRecover(timeout4WaybillCancel, func() { + if localOrder, err2 := partner.CurOrderManager.LoadOrder(order.VendorOrderID, model.VendorIDEBAI); err2 == nil { + if localOrder.Status < model.OrderStatusEndBegin { + c.trySyncCancelStatus(order.VendorOrderID) + } + } + }) } return api.EbaiAPI.Err2CallbackResponse(msg.Cmd, partner.CurOrderManager.OnWaybillStatusChanged(order), order.VendorStatus) } From 9f3eb98db0fe5fe204e1ecb1c3f388260d717134 Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 29 Nov 2019 16:49:09 +0800 Subject: [PATCH 29/31] =?UTF-8?q?=E5=90=AF=E7=94=A8ChangeStoreSkuSaleStatu?= =?UTF-8?q?s=E6=97=A5=E5=B8=B8=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/misc/misc.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index d5ecebe95..5541807eb 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -122,6 +122,9 @@ func Init() { }, updateActStatusTimeList) ScheduleScoreStore() ScheduleCheckStoreAlert() + ScheduleTimerFunc("ChangeStoreSkuSaleStatus", func() { + cms.CurVendorSync.ChangeStoreSkuSaleStatus(jxcontext.AdminCtx, 0, true, true) + }, ChangeStoreSkuSaleStatusList) } ScheduleTimerFunc("AutoSaleStoreSku", func() { cms.AutoSaleStoreSku(jxcontext.AdminCtx, nil, false) @@ -134,11 +137,6 @@ func Init() { "04:05:06", }) } - if beego.BConfig.RunMode == "alpha" { - ScheduleTimerFunc("ChangeStoreSkuSaleStatus", func() { - cms.CurVendorSync.ChangeStoreSkuSaleStatus(jxcontext.AdminCtx, 0, true, true) - }, ChangeStoreSkuSaleStatusList) - } } func doDailyWork() { From 09944d68cde27f392e6f977eff30ac5a08f28bcf Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 29 Nov 2019 17:15:01 +0800 Subject: [PATCH 30/31] =?UTF-8?q?=E6=AF=8F=E6=99=9A=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E8=A1=A5=E5=85=A8=E5=89=8D=E4=B8=80=E5=A4=A9=E4=B8=8E=E5=BD=93?= =?UTF-8?q?=E5=A4=A9=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/misc/misc.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index 5541807eb..db7f4a550 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -7,6 +7,7 @@ import ( "time" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxcallback/orderman" "git.rosy.net.cn/jx-callback/business/jxstore/act" "git.rosy.net.cn/jx-callback/business/jxstore/cms" "git.rosy.net.cn/jx-callback/business/jxutils" @@ -155,6 +156,10 @@ func doDailyWork() { SaveImportantTaskID(TaskNameSyncStoreSku, taskID) InitEx() + + // 每天补全前一天与当天的订单 + curDate := utils.Time2Date(time.Now()) + orderman.FixedOrderManager.AmendMissingOrders(jxcontext.AdminCtx, nil, 0, curDate.Add(-24*time.Hour), curDate, true, true) } func RefreshRealMobile(ctx *jxcontext.Context, vendorID int, fromTime, toTime time.Time, isAsync, isContinueWhenError bool) (hint string, err error) { From 6d1129a61cbd07f67a5ea91abfd370b85fac545a Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 29 Nov 2019 17:19:24 +0800 Subject: [PATCH 31/31] up --- business/jxcallback/orderman/orderman_ext.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index f4ea247b6..e3ceefd1c 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -904,6 +904,10 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in toDate = fromDate } toDate = utils.Time2Date(toDate) + curDate := utils.Time2Date(time.Now()) + if toDate.Sub(curDate) > 0 { + toDate = curDate + } if toDate.Sub(fromDate) > 7*24*time.Hour { return "", fmt.Errorf("最多一次一周,请调整时间") }