价格统计

This commit is contained in:
苏尹岚
2020-01-02 15:32:24 +08:00
9 changed files with 115 additions and 57 deletions

View File

@@ -1895,7 +1895,7 @@ func RefreshStoresSkuByVendor(ctx *jxcontext.Context, storeIDs []int, vendorID i
return "", fmt.Errorf("此功能当前只支持京东到家平台") return "", fmt.Errorf("此功能当前只支持京东到家平台")
} }
db := dao.GetDB() 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 { if err != nil {
return "", err return "", err
} }
@@ -1912,13 +1912,13 @@ func RefreshStoresSkuByVendor(ctx *jxcontext.Context, storeIDs []int, vendorID i
return "", err 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 { if err != nil {
return "", err return "", err
} }
skuNameMap := make(map[int]*model.SkuName) skuNameMap := make(map[int]*model.SkuName)
skuMap := make(map[int]*model.SkuAndName) skuMap := make(map[int]*dao.StoreSkuSyncInfo)
var bareStoreSkuList []*partner.StoreSkuInfo bareStoreSkuMap := make(map[string][]*partner.StoreSkuInfo)
for _, sku := range skuList { for _, sku := range skuList {
if skuNameMap[sku.NameID] == nil { if skuNameMap[sku.NameID] == nil {
skuNameMap[sku.NameID] = &model.SkuName{ skuNameMap[sku.NameID] = &model.SkuName{
@@ -1927,9 +1927,9 @@ func RefreshStoresSkuByVendor(ctx *jxcontext.Context, storeIDs []int, vendorID i
} }
skuMap[sku.ID] = sku skuMap[sku.ID] = sku
bareStoreSkuList = append(bareStoreSkuList, &partner.StoreSkuInfo{ bareStoreSkuMap[sku.VendorOrgCode] = append(bareStoreSkuMap[sku.VendorOrgCode], &partner.StoreSkuInfo{
SkuID: sku.ID, 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) { func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
switch step { switch step {
case 0: 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)) // globals.SugarLogger.Debug(utils.Format4Output(bareStoreSkuList, false))
if err = err2; err == nil || len(bareStoreSkuList) > 0 { if err = err2; err == nil || len(bareStoreSkuList) > 0 {
err = nil // todo 如果部分失败,强制忽略错误 err = nil // todo 如果部分失败,强制忽略错误
@@ -2629,15 +2629,15 @@ func GetVendorStoreSkuPrice(ctx *jxcontext.Context, vendorIDs []int, skuID int,
outStoreSkuList []*partner.StoreSkuInfo outStoreSkuList []*partner.StoreSkuInfo
) )
db := dao.GetDB() 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 { if err != nil {
return retVal, err return retVal, err
} }
if partner.IsMultiStore(vendorID) { if partner.IsMultiStore(vendorID) {
multiHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IMultipleStoresHandler) multiHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IMultipleStoresHandler)
storeDetail, err = multiHandler.ReadStore(ctx, v, vendorStoreID) storeDetail, err = multiHandler.ReadStore(ctx, v, vendorStoreID)
if len(skuNameList) > 0 { if len(skuList) > 0 {
inStoreSku.VendorSkuID = utils.Int64ToStr(skuNameList[0].JdID) inStoreSku.VendorSkuID = skuList[0].VendorSkuID
} }
} else { } else {
singleHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreHandler) singleHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreHandler)
@@ -2657,7 +2657,7 @@ func GetVendorStoreSkuPrice(ctx *jxcontext.Context, vendorIDs []int, skuID int,
StoreID: vendorStoreID, StoreID: vendorStoreID,
StoreName: storeDetail.Name, StoreName: storeDetail.Name,
SkuID: skuID, SkuID: skuID,
SkuName: skuNameList[0].Name, SkuName: skuList[0].Name,
VendorPrice: "", VendorPrice: "",
} }
retVal = []DataVendorStoreSkuPrice{data} retVal = []DataVendorStoreSkuPrice{data}
@@ -2666,7 +2666,7 @@ func GetVendorStoreSkuPrice(ctx *jxcontext.Context, vendorIDs []int, skuID int,
StoreID: vendorStoreID, StoreID: vendorStoreID,
StoreName: storeDetail.Name, StoreName: storeDetail.Name,
SkuID: skuID, SkuID: skuID,
SkuName: skuNameList[0].Name, SkuName: skuList[0].Name,
VendorPrice: utils.Float64ToStr(utils.Str2Float64(utils.Int64ToStr(outStoreSkuList[0].VendorPrice)) / 100), VendorPrice: utils.Float64ToStr(utils.Str2Float64(utils.Int64ToStr(outStoreSkuList[0].VendorPrice)) / 100),
} }
retVal = []DataVendorStoreSkuPrice{data} retVal = []DataVendorStoreSkuPrice{data}
@@ -3015,3 +3015,16 @@ func AutoFocusStoreSkusWithoutFocus(ctx *jxcontext.Context, skuIDs []int, isSync
} }
return err 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
}

View File

@@ -42,6 +42,8 @@ var (
OrderStatusLocked: "锁定", OrderStatusLocked: "锁定",
// OrderStatusApplyRefund: "申请退款", // OrderStatusApplyRefund: "申请退款",
OrderStatusUndoApplyCancel: "取消申请取消", OrderStatusUndoApplyCancel: "取消申请取消",
OrderStatusVendorRejectCancel: "拒绝取消",
OrderStatusVendorAgreeCancel: "同意取消",
OrderStatusApplyCancel: "申请取消", OrderStatusApplyCancel: "申请取消",
OrderStatusUnknown: "一般事件", OrderStatusUnknown: "一般事件",

View File

@@ -395,14 +395,8 @@ func GetEffectiveActStoreSkuInfo(db *DaoDB, actID int, vendorIDs []int, actType
model.SyncFlagNewMask, model.SyncFlagNewMask,
model.ActSkuFake, model.ActSkuFake,
utils.DefaultTimeValue, utils.DefaultTimeValue, model.SyncFlagNewMask, model.ActSkuFake,
model.SyncFlagNewMask, utils.DefaultTimeValue, model.ActStatusCreated, endAt, beginAt,
model.ActSkuFake,
utils.DefaultTimeValue,
model.ActStatusCreated,
endAt,
beginAt,
} }
if len(vendorIDs) > 0 { if len(vendorIDs) > 0 {
sql += " AND (t1.vendor_mask & ?) <> 0 AND t3.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")" sql += " AND (t1.vendor_mask & ?) <> 0 AND t3.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"

View File

@@ -93,6 +93,7 @@ var (
"鲜切", "鲜切",
"进口", "进口",
"冰镇", "冰镇",
"预售",
} }
SpecialUnit = "份" SpecialUnit = "份"

View File

@@ -51,6 +51,12 @@ 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) { func getStorePageInfo(ctx *jxcontext.Context, handler partner.IPurchasePlatformNetSpiderHandler, cityCode int, vendorStoreID string) (storePageInfo *model.PageShop, err error) {
storePageInfo, err = handler.GetStorePageInfo(ctx, vendorStoreID) storePageInfo, err = handler.GetStorePageInfo(ctx, vendorStoreID)
if err == nil && storePageInfo != nil { if err == nil && storePageInfo != nil {
updatePageShopCityDistrictInfo(ctx, storePageInfo, cityCode)
}
return storePageInfo, err
}
func updatePageShopCityDistrictInfo(ctx *jxcontext.Context, storePageInfo *model.PageShop, cityCode int) {
if !(storePageInfo.Lng != 0 && storePageInfo.Lat != 0) { if !(storePageInfo.Lng != 0 && storePageInfo.Lat != 0) {
storePageInfo.Lng, storePageInfo.Lat, storePageInfo.DistrictCode = api.AutonaviAPI.GetCoordinateFromAddress(storePageInfo.Address, utils.Int2Str(cityCode)) storePageInfo.Lng, storePageInfo.Lat, storePageInfo.DistrictCode = api.AutonaviAPI.GetCoordinateFromAddress(storePageInfo.Address, utils.Int2Str(cityCode))
if storePageInfo.DistrictCode == 0 && cityCode != 0 { if storePageInfo.DistrictCode == 0 && cityCode != 0 {
@@ -71,8 +77,6 @@ func getStorePageInfo(ctx *jxcontext.Context, handler partner.IPurchasePlatformN
storePageInfo.CityCode = cityCode storePageInfo.CityCode = cityCode
} }
} }
}
return storePageInfo, err
} }
func getStoreListByCoordinates(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID, cityCode int, coordList []*ditu.Coordinate) (storeList []*model.PageShop, err error) { func getStoreListByCoordinates(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID, cityCode int, coordList []*ditu.Coordinate) (storeList []*model.PageShop, err error) {
@@ -230,28 +234,23 @@ func GetAndStoreCitiesShops(ctx *jxcontext.Context, vendorIDs []int, cityCodeLis
return hint, err return hint, err
} }
func RefreshPageStore(ctx *jxcontext.Context) (err error) { func RefreshPageShops(ctx *jxcontext.Context) (err error) {
sql := ` sql := `
SELECT * SELECT *
FROM page_shop t1 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() db := dao.GetDB()
var shopList []*model.PageShop var shopList []*model.PageShop
if err = dao.GetRows(db, &shopList, sql); err != nil { if err = dao.GetRows(db, &shopList, sql); err != nil {
return err return err
} }
for _, v := range shopList { task := tasksch.NewParallelTask(fmt.Sprintf("刷新网页门店信息:%d", len(shopList)), nil, ctx,
if handler, _ := partner.GetPurchasePlatformFromVendorID(v.VendorID).(partner.IPurchasePlatformNetSpiderHandler); handler != nil { func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
storePageInfo, err2 := getStorePageInfo(ctx, handler, v.CityCode, v.VendorStoreID) pageShop := batchItemList[0].(*model.PageShop)
if err2 == nil { updatePageShopCityDistrictInfo(ctx, pageShop, pageShop.CityCode)
v.RecentOrderNum = storePageInfo.RecentOrderNum _, err = dao.UpdateEntity(db, pageShop, "CityCode", "DistrictCode", "Lng", "Lat")
v.SkuCount = storePageInfo.SkuCount return retVal, err
dao.UpdateEntity(db, v, "RecentOrderNum", "SkuCount") }, shopList)
} else { tasksch.HandleTask(task, nil, true).Run()
globals.SugarLogger.Debugf("RefreshPageStore err:%v", err)
}
}
}
return err return err
} }

View File

@@ -152,6 +152,7 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
} else { } else {
storeParams.StationName = jxutils.ComposeStoreName(store.Name, model.VendorIDJD) storeParams.StationName = jxutils.ComposeStoreName(store.Name, model.VendorIDJD)
} }
storeParams.StationName = utils.LimitUTF8StringLen(storeParams.StationName, jdapi.MaxStoreNameLen)
} }
if store.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreAddress) != 0 { if store.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreAddress) != 0 {
storeParams.StationAddress = store.Address storeParams.StationAddress = store.Address

View File

@@ -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信息 // @Title 拷贝门店SKU信息
// @Description 拷贝门店SKU信息此函数当前只是本地数据操作要同步到远端需要调用SyncStoresSkus // @Description 拷贝门店SKU信息此函数当前只是本地数据操作要同步到远端需要调用SyncStoresSkus
// @Param token header string true "认证token" // @Param token header string true "认证token"

View File

@@ -136,3 +136,16 @@ func (l PageShopList) Less(i, j int) bool {
func (l PageShopList) Swap(i, j int) { func (l PageShopList) Swap(i, j int) {
l[i], l[j] = l[j], l[i] 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
})
}

View File

@@ -702,6 +702,15 @@ func init() {
Filters: nil, Filters: nil,
Params: 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.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
beego.ControllerComments{ beego.ControllerComments{
Method: "AcceptOrRefuseFailedGetOrder", Method: "AcceptOrRefuseFailedGetOrder",
@@ -1818,6 +1827,15 @@ func init() {
Filters: nil, Filters: nil,
Params: 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.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
beego.ControllerComments{ beego.ControllerComments{
Method: "UpdateStoreSkus", Method: "UpdateStoreSkus",