diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 6d18feaa0..cb2ca00b6 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -1895,7 +1895,7 @@ func RefreshStoresSkuByVendor(ctx *jxcontext.Context, storeIDs []int, vendorID i return "", fmt.Errorf("此功能当前只支持京东到家平台") } db := dao.GetDB() - storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, model.StoreStatusAll, model.StoreIsSyncAll, "") + storeMapList, err := dao.GetStoresMapList(db, []int{vendorID}, storeIDs, model.StoreStatusAll, model.StoreIsSyncAll, "") if err != nil { return "", err } @@ -1912,13 +1912,13 @@ func RefreshStoresSkuByVendor(ctx *jxcontext.Context, storeIDs []int, vendorID i return "", err } } - skuList, err := dao.GetSkus(db, nil, nil, nil, nil) + skuList, err := dao.GetSkusWithVendor(db, []int{vendorID}, nil, nil, nil, false) if err != nil { return "", err } skuNameMap := make(map[int]*model.SkuName) - skuMap := make(map[int]*model.SkuAndName) - var bareStoreSkuList []*partner.StoreSkuInfo + skuMap := make(map[int]*dao.StoreSkuSyncInfo) + bareStoreSkuMap := make(map[string][]*partner.StoreSkuInfo) for _, sku := range skuList { if skuNameMap[sku.NameID] == nil { skuNameMap[sku.NameID] = &model.SkuName{ @@ -1927,9 +1927,9 @@ func RefreshStoresSkuByVendor(ctx *jxcontext.Context, storeIDs []int, vendorID i } skuMap[sku.ID] = sku - bareStoreSkuList = append(bareStoreSkuList, &partner.StoreSkuInfo{ + bareStoreSkuMap[sku.VendorOrgCode] = append(bareStoreSkuMap[sku.VendorOrgCode], &partner.StoreSkuInfo{ SkuID: sku.ID, - VendorSkuID: utils.Int64ToStr(sku.JdID), + VendorSkuID: sku.VendorSkuID, }) } @@ -1942,7 +1942,7 @@ func RefreshStoresSkuByVendor(ctx *jxcontext.Context, storeIDs []int, vendorID i func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { switch step { case 0: - bareStoreSkuList, err2 := handler.GetStoreSkusBareInfo(ctx, oneStoreMap.VendorOrgCode, task, oneStoreMap.StoreID, oneStoreMap.VendorStoreID, bareStoreSkuList) + bareStoreSkuList, err2 := handler.GetStoreSkusBareInfo(ctx, oneStoreMap.VendorOrgCode, task, oneStoreMap.StoreID, oneStoreMap.VendorStoreID, bareStoreSkuMap[oneStoreMap.VendorOrgCode]) // globals.SugarLogger.Debug(utils.Format4Output(bareStoreSkuList, false)) if err = err2; err == nil || len(bareStoreSkuList) > 0 { err = nil // todo 如果部分失败,强制忽略错误 @@ -2629,15 +2629,15 @@ func GetVendorStoreSkuPrice(ctx *jxcontext.Context, vendorIDs []int, skuID int, outStoreSkuList []*partner.StoreSkuInfo ) db := dao.GetDB() - skuNameList, err := dao.GetSkus(db, []int{skuID}, nil, nil, nil) + skuList, err := dao.GetSkusWithVendor(db, []int{vendorID}, []string{v}, nil, []int{skuID}, false) if err != nil { return retVal, err } if partner.IsMultiStore(vendorID) { multiHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IMultipleStoresHandler) storeDetail, err = multiHandler.ReadStore(ctx, v, vendorStoreID) - if len(skuNameList) > 0 { - inStoreSku.VendorSkuID = utils.Int64ToStr(skuNameList[0].JdID) + if len(skuList) > 0 { + inStoreSku.VendorSkuID = skuList[0].VendorSkuID } } else { singleHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreHandler) @@ -2657,7 +2657,7 @@ func GetVendorStoreSkuPrice(ctx *jxcontext.Context, vendorIDs []int, skuID int, StoreID: vendorStoreID, StoreName: storeDetail.Name, SkuID: skuID, - SkuName: skuNameList[0].Name, + SkuName: skuList[0].Name, VendorPrice: "", } retVal = []DataVendorStoreSkuPrice{data} @@ -2666,7 +2666,7 @@ func GetVendorStoreSkuPrice(ctx *jxcontext.Context, vendorIDs []int, skuID int, StoreID: vendorStoreID, StoreName: storeDetail.Name, SkuID: skuID, - SkuName: skuNameList[0].Name, + SkuName: skuList[0].Name, VendorPrice: utils.Float64ToStr(utils.Str2Float64(utils.Int64ToStr(outStoreSkuList[0].VendorPrice)) / 100), } retVal = []DataVendorStoreSkuPrice{data} @@ -3015,3 +3015,16 @@ func AutoFocusStoreSkusWithoutFocus(ctx *jxcontext.Context, skuIDs []int, isSync } return err } +func UpdateStoreSkuNamePrice(ctx *jxcontext.Context, storeID, nameID, unitPrice int, isAsync bool) (hint string, err error) { + // db := dao.GetDB() + // skuList, err := dao.GetSkus(db, nil, []int{nameID}, nil, nil) + // if err != nil || len(skuList) == 0 { + // return "", err + // } + // var skuIDs []int + // for _, v := range skuList { + // skuIDs = append(skuIDs, v.ID) + // } + // actStoreSkuList, err :=dao.GetEffectiveActStoreSkuInfo(db, 0, nil, model.ActSkuDirectDown, []int{storeID}, skuIDs, time.Now(),time.Now()) + return hint, err +} diff --git a/business/model/const.go b/business/model/const.go index 9ac01fdbc..1e60f5772 100644 --- a/business/model/const.go +++ b/business/model/const.go @@ -41,8 +41,10 @@ var ( OrderStatusUnlocked: "解锁", OrderStatusLocked: "锁定", // OrderStatusApplyRefund: "申请退款", - OrderStatusUndoApplyCancel: "取消申请取消", - OrderStatusApplyCancel: "申请取消", + OrderStatusUndoApplyCancel: "取消申请取消", + OrderStatusVendorRejectCancel: "拒绝取消", + OrderStatusVendorAgreeCancel: "同意取消", + OrderStatusApplyCancel: "申请取消", OrderStatusUnknown: "一般事件", diff --git a/business/model/dao/act.go b/business/model/dao/act.go index 4d15fcf8e..cacbcdc6e 100644 --- a/business/model/dao/act.go +++ b/business/model/dao/act.go @@ -395,14 +395,8 @@ func GetEffectiveActStoreSkuInfo(db *DaoDB, actID int, vendorIDs []int, actType model.SyncFlagNewMask, model.ActSkuFake, - utils.DefaultTimeValue, - model.SyncFlagNewMask, - model.ActSkuFake, - - utils.DefaultTimeValue, - model.ActStatusCreated, - endAt, - beginAt, + utils.DefaultTimeValue, model.SyncFlagNewMask, model.ActSkuFake, + utils.DefaultTimeValue, model.ActStatusCreated, endAt, beginAt, } if len(vendorIDs) > 0 { sql += " AND (t1.vendor_mask & ?) <> 0 AND t3.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")" diff --git a/business/model/sku.go b/business/model/sku.go index c248691ff..2fcdb1d40 100644 --- a/business/model/sku.go +++ b/business/model/sku.go @@ -93,6 +93,7 @@ var ( "鲜切", "进口", "冰镇", + "预售", } SpecialUnit = "份" diff --git a/business/netspider/netspider.go b/business/netspider/netspider.go index ff791a588..2e345795e 100644 --- a/business/netspider/netspider.go +++ b/business/netspider/netspider.go @@ -51,30 +51,34 @@ func GetCityShops(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs [] func getStorePageInfo(ctx *jxcontext.Context, handler partner.IPurchasePlatformNetSpiderHandler, cityCode int, vendorStoreID string) (storePageInfo *model.PageShop, err error) { storePageInfo, err = handler.GetStorePageInfo(ctx, vendorStoreID) if err == nil && storePageInfo != nil { - if !(storePageInfo.Lng != 0 && storePageInfo.Lat != 0) { - storePageInfo.Lng, storePageInfo.Lat, storePageInfo.DistrictCode = api.AutonaviAPI.GetCoordinateFromAddress(storePageInfo.Address, utils.Int2Str(cityCode)) - if storePageInfo.DistrictCode == 0 && cityCode != 0 { - if place, err := dao.GetPlaceByCode(dao.GetDB(), cityCode); err == nil { - storePageInfo.Lng, storePageInfo.Lat, storePageInfo.DistrictCode = api.AutonaviAPI.GetCoordinateFromAddress(storePageInfo.Address, utils.Int2Str(place.ParentCode)) - } - } - } else if storePageInfo.DistrictCode == 0 { - storePageInfo.DistrictCode = api.AutonaviAPI.GetCoordinateDistrictCode(storePageInfo.Lng, storePageInfo.Lat) - } - if storePageInfo.CityCode == 0 { - if storePageInfo.DistrictCode != 0 { - if place, err := dao.GetPlaceByCode(dao.GetDB(), storePageInfo.DistrictCode); err == nil { - storePageInfo.CityCode = place.ParentCode - } - } - if storePageInfo.CityCode == 0 { - storePageInfo.CityCode = cityCode - } - } + updatePageShopCityDistrictInfo(ctx, storePageInfo, cityCode) } return storePageInfo, err } +func updatePageShopCityDistrictInfo(ctx *jxcontext.Context, storePageInfo *model.PageShop, cityCode int) { + if !(storePageInfo.Lng != 0 && storePageInfo.Lat != 0) { + storePageInfo.Lng, storePageInfo.Lat, storePageInfo.DistrictCode = api.AutonaviAPI.GetCoordinateFromAddress(storePageInfo.Address, utils.Int2Str(cityCode)) + if storePageInfo.DistrictCode == 0 && cityCode != 0 { + if place, err := dao.GetPlaceByCode(dao.GetDB(), cityCode); err == nil { + storePageInfo.Lng, storePageInfo.Lat, storePageInfo.DistrictCode = api.AutonaviAPI.GetCoordinateFromAddress(storePageInfo.Address, utils.Int2Str(place.ParentCode)) + } + } + } else if storePageInfo.DistrictCode == 0 { + storePageInfo.DistrictCode = api.AutonaviAPI.GetCoordinateDistrictCode(storePageInfo.Lng, storePageInfo.Lat) + } + if storePageInfo.CityCode == 0 { + if storePageInfo.DistrictCode != 0 { + if place, err := dao.GetPlaceByCode(dao.GetDB(), storePageInfo.DistrictCode); err == nil { + storePageInfo.CityCode = place.ParentCode + } + } + if storePageInfo.CityCode == 0 { + storePageInfo.CityCode = cityCode + } + } +} + func getStoreListByCoordinates(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID, cityCode int, coordList []*ditu.Coordinate) (storeList []*model.PageShop, err error) { if len(coordList) > 0 { if handler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IPurchasePlatformNetSpiderHandler); handler != nil { @@ -230,28 +234,23 @@ func GetAndStoreCitiesShops(ctx *jxcontext.Context, vendorIDs []int, cityCodeLis return hint, err } -func RefreshPageStore(ctx *jxcontext.Context) (err error) { +func RefreshPageShops(ctx *jxcontext.Context) (err error) { sql := ` SELECT * FROM page_shop t1 - WHERE t1.vendor_id = 0 - ` + WHERE t1.district_code = 0 AND t1.lng != 0 AND t1.lat != 0` db := dao.GetDB() var shopList []*model.PageShop if err = dao.GetRows(db, &shopList, sql); err != nil { return err } - for _, v := range shopList { - if handler, _ := partner.GetPurchasePlatformFromVendorID(v.VendorID).(partner.IPurchasePlatformNetSpiderHandler); handler != nil { - storePageInfo, err2 := getStorePageInfo(ctx, handler, v.CityCode, v.VendorStoreID) - if err2 == nil { - v.RecentOrderNum = storePageInfo.RecentOrderNum - v.SkuCount = storePageInfo.SkuCount - dao.UpdateEntity(db, v, "RecentOrderNum", "SkuCount") - } else { - globals.SugarLogger.Debugf("RefreshPageStore err:%v", err) - } - } - } + task := tasksch.NewParallelTask(fmt.Sprintf("刷新网页门店信息:%d", len(shopList)), nil, ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + pageShop := batchItemList[0].(*model.PageShop) + updatePageShopCityDistrictInfo(ctx, pageShop, pageShop.CityCode) + _, err = dao.UpdateEntity(db, pageShop, "CityCode", "DistrictCode", "Lng", "Lat") + return retVal, err + }, shopList) + tasksch.HandleTask(task, nil, true).Run() return err } diff --git a/business/partner/purchase/jd/store.go b/business/partner/purchase/jd/store.go index 40c97678b..e4c9fdfd1 100644 --- a/business/partner/purchase/jd/store.go +++ b/business/partner/purchase/jd/store.go @@ -152,6 +152,7 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin } else { storeParams.StationName = jxutils.ComposeStoreName(store.Name, model.VendorIDJD) } + storeParams.StationName = utils.LimitUTF8StringLen(storeParams.StationName, jdapi.MaxStoreNameLen) } if store.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreAddress) != 0 { storeParams.StationAddress = store.Address diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index 0a56d880a..9f6adbf28 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -244,6 +244,23 @@ func (c *StoreSkuController) UpdateStoresSkusByBind() { }) } +// @Title 修改门店SkuName价格 +// @Description 修改门店SkuName价格(支持活动中改价) +// @Param token header string true "认证token" +// @Param storeID formData int true "门店ID" +// @Param nameID formData int true "SkuName ID" +// @Param unitPrice formData int true "单价" +// @Param isAsync formData bool false "是否异步操作" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /UpdateStoreSkuNamePrice [put] +func (c *StoreSkuController) UpdateStoreSkuNamePrice() { + c.callUpdateStoreSkuNamePrice(func(params *tStoreSkuUpdateStoreSkuNamePriceParams) (retVal interface{}, errCode string, err error) { + retVal, err = cms.UpdateStoreSkuNamePrice(params.Ctx, params.StoreID, params.NameID, params.UnitPrice, params.IsAsync) + return retVal, "", err + }) +} + // @Title 拷贝门店SKU信息 // @Description 拷贝门店SKU信息(此函数当前只是本地数据操作,要同步到远端需要调用SyncStoresSkus) // @Param token header string true "认证token" diff --git a/controllers/net_spider.go b/controllers/net_spider.go index 8b2979ddb..4c40ae0f1 100644 --- a/controllers/net_spider.go +++ b/controllers/net_spider.go @@ -136,3 +136,16 @@ func (l PageShopList) Less(i, j int) bool { func (l PageShopList) Swap(i, j int) { l[i], l[j] = l[j], l[i] } + +// @Title 刷新网页门店信息 +// @Description 刷新网页门店信息 +// @Param token header string true "认证token" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /RefreshPageShops [post] +func (c *NetSpiderController) RefreshPageShops() { + c.callRefreshPageShops(func(params *tNetspiderRefreshPageShopsParams) (retVal interface{}, errCode string, err error) { + err = netspider.RefreshPageShops(params.Ctx) + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index f4f1a8b6e..d0ccd09bd 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -702,6 +702,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:NetSpiderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:NetSpiderController"], + beego.ControllerComments{ + Method: "RefreshPageShops", + Router: `/RefreshPageShops`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"], beego.ControllerComments{ Method: "AcceptOrRefuseFailedGetOrder", @@ -1818,6 +1827,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"], + beego.ControllerComments{ + Method: "UpdateStoreSkuNamePrice", + Router: `/UpdateStoreSkuNamePrice`, + AllowHTTPMethods: []string{"put"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"], beego.ControllerComments{ Method: "UpdateStoreSkus",