订单统计接口修改,对比差异程序修改
This commit is contained in:
@@ -6,6 +6,8 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
|
||||
"git.rosy.net.cn/baseapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
@@ -27,8 +29,12 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
DatAanalyse1 = "京东商品库直接创建,正常数据"
|
||||
DatAanalyse2 = "(可能无经营许可)"
|
||||
DatAanalyse1 = "京东商品库直接创建,正常数据 "
|
||||
DatAanalyse2 = "京东商品库未创建成功(可能无经营许可等) "
|
||||
DatAanalyse3 = "商品名不同 "
|
||||
DatAanalyse4 = "商品可售状态不同 "
|
||||
DatAanalyse5 = "京西商品库没有,平台商品库有 "
|
||||
DatAanalyse6 = "京西商品库有,平台商品库没有"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -55,6 +61,16 @@ var (
|
||||
"平台可售状态",
|
||||
"数据分析",
|
||||
}
|
||||
|
||||
deoptTitleList = []string{
|
||||
"SkuID",
|
||||
"京西商品名",
|
||||
"平台商品名",
|
||||
"京西可售状态",
|
||||
"平台可售状态",
|
||||
"数据分析",
|
||||
}
|
||||
|
||||
statisticTitleList = []string{
|
||||
"京西和平台商品状态",
|
||||
"待创建",
|
||||
@@ -75,7 +91,8 @@ var (
|
||||
{"京西有,平台有", "否", "下架"},
|
||||
{"京西有,平台有", "否", "上架"},
|
||||
}
|
||||
diffData DiffDataLock
|
||||
diffData DiffDataLock
|
||||
depotDiffData DeoptDiffDataLock
|
||||
|
||||
multiStoreAllSkuInfoMap map[int]map[int]*partner.SkuNameInfo
|
||||
multiStoreAllSkuInfoList map[int][]*partner.StoreSkuInfo
|
||||
@@ -88,6 +105,20 @@ type DiffDataLock struct {
|
||||
locker sync.RWMutex
|
||||
}
|
||||
|
||||
type DeoptDiffDataLock struct {
|
||||
diffDataMap map[int][]DepotDiffData
|
||||
locker sync.RWMutex
|
||||
}
|
||||
|
||||
type DepotDiffData struct {
|
||||
SkuID string `json:"SkuID"`
|
||||
JxSkuName string `json:"京西商品名"`
|
||||
VendorSkuName string `json:"平台商品名"`
|
||||
JxStatus string `json:"京西可售状态"`
|
||||
VendorStatus string `json:"平台可售状态"`
|
||||
DatAanalyse string `json:"数据分析"`
|
||||
}
|
||||
|
||||
type DiffData struct {
|
||||
JxStoreID string `json:"京西门店ID"`
|
||||
VendorStoreID string `json:"平台门店ID"`
|
||||
@@ -111,6 +142,16 @@ type StatisticData struct {
|
||||
Percent string `json:"占比"`
|
||||
}
|
||||
|
||||
func (d *DeoptDiffDataLock) AppendData2(vendorID int, depotDiffData DepotDiffData) {
|
||||
d.locker.Lock()
|
||||
defer d.locker.Unlock()
|
||||
d.diffDataMap[vendorID] = append(d.diffDataMap[vendorID], depotDiffData)
|
||||
}
|
||||
|
||||
func (d *DeoptDiffDataLock) InitData2() {
|
||||
d.diffDataMap = make(map[int][]DepotDiffData)
|
||||
}
|
||||
|
||||
func (d *DiffDataLock) AppendData(vendorID int, diffData DiffData) {
|
||||
d.locker.Lock()
|
||||
defer d.locker.Unlock()
|
||||
@@ -146,7 +187,7 @@ func GetMultiStoreAllSkuInfo(ctx *jxcontext.Context, vendorMap map[int]bool) {
|
||||
}
|
||||
if partner.IsMultiStore(vendorID) {
|
||||
multiHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IMultipleStoresHandler)
|
||||
allSkuNameInfoList, err := multiHandler.GetSkusForCheck(ctx, 0, "", "")
|
||||
allSkuNameInfoList, err := multiHandler.GetSkus(ctx, 0, "", "")
|
||||
if err != nil {
|
||||
baseapi.SugarLogger.Errorf("GetMultiStoreAllSkuInfo error:%v", err)
|
||||
} else {
|
||||
@@ -154,7 +195,10 @@ func GetMultiStoreAllSkuInfo(ctx *jxcontext.Context, vendorMap map[int]bool) {
|
||||
tempMap := make(map[int]*partner.SkuNameInfo)
|
||||
for _, value := range allSkuNameInfoList {
|
||||
for _, skuInfo := range value.SkuList {
|
||||
filterCloseSkuIds = append(filterCloseSkuIds, skuInfo.SkuID)
|
||||
//表示平台商品库未下架的
|
||||
if skuInfo.Status != 0 {
|
||||
filterCloseSkuIds = append(filterCloseSkuIds, skuInfo.SkuID)
|
||||
}
|
||||
tempMap[skuInfo.SkuID] = value
|
||||
}
|
||||
}
|
||||
@@ -186,6 +230,14 @@ func GetFilterVendorSkuInfoMap(vendorSkuInfoList []*partner.SkuNameInfo) map[int
|
||||
return filterVendorSkuInfoMap
|
||||
}
|
||||
|
||||
func GetFilterJxSkuInfoMap2(jxSkuInfoList []*model.SkuAndName) map[int]*model.SkuAndName {
|
||||
filterVendorSkuInfoMap := make(map[int]*model.SkuAndName)
|
||||
for _, value := range jxSkuInfoList {
|
||||
filterVendorSkuInfoMap[value.ID] = value
|
||||
}
|
||||
return filterVendorSkuInfoMap
|
||||
}
|
||||
|
||||
func GetFilterMultiStoreSkuInfoMap(vendorID int, skuInfoList []*partner.StoreSkuInfo) map[int]*partner.SkuNameInfo {
|
||||
allSkuInfoMap := GetMultiStoreAllSkuInfoMap(vendorID)
|
||||
filterSkuInfoMap := make(map[int]*partner.SkuNameInfo)
|
||||
@@ -318,6 +370,72 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin
|
||||
}
|
||||
}
|
||||
|
||||
func CompareJxAndMultiVenderDepot(ctx *jxcontext.Context, vendorMap map[int]bool) {
|
||||
db := dao.GetDB()
|
||||
for vendorID, _ := range vendorNameList {
|
||||
//filter for vendorID
|
||||
if len(vendorMap) > 0 {
|
||||
if _, ok := vendorMap[vendorID]; !ok {
|
||||
continue
|
||||
}
|
||||
}
|
||||
if partner.IsMultiStore(vendorID) {
|
||||
multiHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IMultipleStoresHandler)
|
||||
allSkuNameInfoList, _ := multiHandler.GetSkus(ctx, 0, "", "")
|
||||
filterVendorSkuInfoMap := GetFilterVendorSkuInfoMap(allSkuNameInfoList)
|
||||
skuList, _ := dao.GetSkus(db, []int{}, []int{}, []int{}, []int{})
|
||||
filterJxSkuInfoMap2 := GetFilterJxSkuInfoMap2(skuList)
|
||||
for skuid, jxSkuInfo := range filterJxSkuInfoMap2 {
|
||||
reason := ``
|
||||
jxSkuDetailName := jxutils.ComposeSkuName(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, jxSkuInfo.Unit, jxSkuInfo.SpecQuality, jxSkuInfo.SpecUnit, 0)
|
||||
|
||||
vendorSkuInfoMap := filterVendorSkuInfoMap[skuid]
|
||||
jxSkuSaleStatus := jxSkuInfo.Status
|
||||
jxSkuSaleStatusName := GetSkuSaleStatusName(jxSkuSaleStatus)
|
||||
skuIDStr := utils.Int2Str(skuid)
|
||||
if vendorSkuInfoMap != nil {
|
||||
vendorSkuSaleStatusName := GetSkuSaleStatusName(vendorSkuInfoMap.SkuList[0].Status)
|
||||
vendorSkuDetailName := vendorSkuInfoMap.SkuList[0].SkuName
|
||||
isSaleStatusDiff := jxSkuSaleStatusName != vendorSkuSaleStatusName
|
||||
isNameDiff := strings.Compare(jxSkuDetailName, vendorSkuDetailName) != 0
|
||||
if isNameDiff || isSaleStatusDiff {
|
||||
if isNameDiff {
|
||||
reason += DatAanalyse3
|
||||
}
|
||||
if isSaleStatusDiff {
|
||||
reason += DatAanalyse4
|
||||
}
|
||||
outPutData := DepotDiffData{skuIDStr, jxSkuDetailName, vendorSkuDetailName, jxSkuSaleStatusName, vendorSkuSaleStatusName, reason}
|
||||
depotDiffData.AppendData2(vendorID, outPutData)
|
||||
}
|
||||
} else {
|
||||
outPutData := DepotDiffData{skuIDStr, jxSkuDetailName, "", jxSkuSaleStatusName, "", DatAanalyse6}
|
||||
depotDiffData.AppendData2(vendorID, outPutData)
|
||||
}
|
||||
}
|
||||
for skuID, vendorSkuInfo := range filterVendorSkuInfoMap {
|
||||
if vendorSkuInfo != nil {
|
||||
if len(vendorSkuInfo.SkuList) > 0 {
|
||||
skuIDStr := utils.Int2Str(skuID)
|
||||
vendorSkuDetailName := vendorSkuInfo.SkuList[0].SkuName
|
||||
vendorSkuSaleStatusName := GetSkuSaleStatusName(vendorSkuInfo.SkuList[0].Status)
|
||||
|
||||
jxSkuInfo := filterJxSkuInfoMap2[skuID]
|
||||
if jxSkuInfo == nil {
|
||||
outPutData := DepotDiffData{skuIDStr, "", vendorSkuDetailName, "", vendorSkuSaleStatusName, DatAanalyse5}
|
||||
depotDiffData.AppendData2(vendorID, outPutData)
|
||||
}
|
||||
} else {
|
||||
globals.SugarLogger.Warnf("CompareJxAndMultiVenderDepot vendorSkuInfo.SkuList:%d is nil", skuID)
|
||||
}
|
||||
} else {
|
||||
globals.SugarLogger.Warnf("CompareJxAndMultiVenderDepot skuID:%d is nil", skuID)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//入口函数,校验本地商品京西和其他平台的差异
|
||||
func CheckSkuDiffBetweenJxAndVendor(ctx *jxcontext.Context, vendorIDList []int, storeIDList []int) {
|
||||
startProcessTime := time.Now().Unix()
|
||||
@@ -338,6 +456,10 @@ func CheckSkuDiffBetweenJxAndVendor(ctx *jxcontext.Context, vendorIDList []int,
|
||||
//2.为multiStoreAllSkuInfoList 和 multiStoreAllSkuInfoMap 赋值
|
||||
GetMultiStoreAllSkuInfo(ctx, vendorMap)
|
||||
case 1:
|
||||
//对比京西库和多门店平台的库的信息
|
||||
depotDiffData.InitData2()
|
||||
CompareJxAndMultiVenderDepot(ctx, vendorMap)
|
||||
case 2:
|
||||
//1.获取京西本地所有门店信息 store、place、user表联查 jxStoreInfoList
|
||||
//2.过滤所有门店信息,只留下传进来的vendorMap,storeIDMap中对应的平台和门台信息 filterStoreList
|
||||
//3.判断是否多平台门店,两种情况两种处理
|
||||
@@ -398,8 +520,8 @@ func CheckSkuDiffBetweenJxAndVendor(ctx *jxcontext.Context, vendorIDList []int,
|
||||
baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor taskParallel error:%v", err)
|
||||
}
|
||||
}
|
||||
case 2:
|
||||
WriteToExcel(task, diffData.diffDataMap)
|
||||
case 3:
|
||||
WriteToExcel(task, diffData.diffDataMap, depotDiffData.diffDataMap)
|
||||
endProcessTime := time.Now().Unix()
|
||||
diff := endProcessTime - startProcessTime
|
||||
baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor end time: %v", time.Now())
|
||||
@@ -407,7 +529,7 @@ func CheckSkuDiffBetweenJxAndVendor(ctx *jxcontext.Context, vendorIDList []int,
|
||||
}
|
||||
return result, err
|
||||
}
|
||||
taskSeq := tasksch.NewSeqTask("京西和平台商品差异对比-序列任务", ctx, taskSeqFunc, 3)
|
||||
taskSeq := tasksch.NewSeqTask("京西和平台商品差异对比-序列任务", ctx, taskSeqFunc, 4)
|
||||
tasksch.HandleTask(taskSeq, nil, true).Run()
|
||||
}
|
||||
|
||||
@@ -472,10 +594,18 @@ func AddStatisticSheet(sheetName string, data []DiffData) (sheet *excel.Obj2Exce
|
||||
return sheet
|
||||
}
|
||||
|
||||
func WriteToExcel(task *tasksch.SeqTask, data map[int][]DiffData) {
|
||||
func WriteToExcel(task *tasksch.SeqTask, data map[int][]DiffData, depotData map[int][]DepotDiffData) {
|
||||
var sheetList []*excel.Obj2ExcelSheetConfig
|
||||
for key, value := range data {
|
||||
sheetName := vendorNameList[key]
|
||||
if partner.IsMultiStore(key) {
|
||||
excelConfDepot := &excel.Obj2ExcelSheetConfig{
|
||||
Title: sheetName + "商品库与京西商品库对比",
|
||||
Data: depotData[key],
|
||||
CaptionList: deoptTitleList,
|
||||
}
|
||||
sheetList = append(sheetList, excelConfDepot)
|
||||
}
|
||||
excelConf := &excel.Obj2ExcelSheetConfig{
|
||||
Title: sheetName,
|
||||
Data: value,
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
@@ -37,8 +35,6 @@ type StatisticsReportForOrdersList struct {
|
||||
|
||||
//查询统计订单信息
|
||||
func GetStatisticsReportForOrders(db *DaoDB, storeIDs []int, fromDate time.Time, toDate time.Time) (statisticsReportForOrdersList []*StatisticsReportForOrdersList, err error) {
|
||||
//排除已取消的订单
|
||||
status := strconv.Itoa(model.OrderStatusCanceled)
|
||||
sql := `
|
||||
SELECT
|
||||
c.id store_id,
|
||||
@@ -75,24 +71,24 @@ func GetStatisticsReportForOrders(db *DaoDB, storeIDs []int, fromDate time.Time,
|
||||
SUM(discount_money) discount_money,
|
||||
SUM(desired_fee) desired_fee,
|
||||
SUM(distance_freight_money) distance_freight_money,
|
||||
SUM(waybill_tip_money) waybill_tip_money,
|
||||
SUM(IF(a.vendor_id = a.waybill_vendor_id,waybill_tip_money,0)) waybill_tip_money,
|
||||
SUM(total_shop_money) total_shop_money,
|
||||
SUM(pm_subsidy_money) pm_subsidy_money,
|
||||
SUM(earning_price) earning_price,
|
||||
SUM(total_shop_money-earning_price-desired_fee-distance_freight_money-waybill_tip_money-80) total_gross_profit
|
||||
FROM goods_order a
|
||||
LEFT JOIN waybill b ON IF(a.waybill_vendor_id = -1,a.vendor_order_id,a.vendor_waybill_id) = b.vendor_waybill_id
|
||||
WHERE a.status != ` + status + `
|
||||
WHERE a.status != ?
|
||||
`
|
||||
sqlParams := []interface{}{}
|
||||
sqlParams := []interface{}{
|
||||
model.OrderStatusCanceled, //排除已取消的订单
|
||||
}
|
||||
if !utils.IsTimeZero(fromDate) && !utils.IsTimeZero(toDate) {
|
||||
sql += `AND a.order_created_at BETWEEN ? AND ?
|
||||
`
|
||||
sql += ` AND a.order_created_at BETWEEN ? AND ?`
|
||||
sqlParams = append(sqlParams, fromDate, toDate)
|
||||
}
|
||||
if len(storeIDs) > 0 {
|
||||
sql += `AND a.store_id IN(` + GenQuestionMarks(len(storeIDs)) + `)
|
||||
`
|
||||
sql += ` AND a.store_id IN(` + GenQuestionMarks(len(storeIDs)) + `)`
|
||||
sqlParams = append(sqlParams, storeIDs)
|
||||
}
|
||||
sql += `
|
||||
@@ -101,8 +97,7 @@ func GetStatisticsReportForOrders(db *DaoDB, storeIDs []int, fromDate time.Time,
|
||||
ON s.store_id = c.id
|
||||
`
|
||||
if len(storeIDs) > 0 {
|
||||
sql += `WHERE c.id IN (` + GenQuestionMarks(len(storeIDs)) + `)
|
||||
`
|
||||
sql += ` WHERE c.id IN (` + GenQuestionMarks(len(storeIDs)) + `)`
|
||||
sqlParams = append(sqlParams, storeIDs)
|
||||
}
|
||||
if err = GetRows(db, &statisticsReportForOrdersList, sql, sqlParams...); err == nil {
|
||||
@@ -113,8 +108,6 @@ func GetStatisticsReportForOrders(db *DaoDB, storeIDs []int, fromDate time.Time,
|
||||
|
||||
//查询统计售后单信息
|
||||
func GetGetStatisticsReportForAfsOrders(db *DaoDB, storeIDs []int, fromDate time.Time, toDate time.Time) (statisticsReportForOrdersList []*StatisticsReportForOrdersList, err error) {
|
||||
//排除已取消的订单
|
||||
status := strconv.Itoa(model.OrderStatusCanceled)
|
||||
sql := `
|
||||
SELECT
|
||||
c.id store_id,
|
||||
@@ -151,24 +144,23 @@ func GetGetStatisticsReportForAfsOrders(db *DaoDB, storeIDs []int, fromDate time
|
||||
SUM(discount_money) discount_money,
|
||||
SUM(afs_freight_money) desired_fee,
|
||||
SUM(distance_freight_money) distance_freight_money,
|
||||
SUM(waybill_tip_money) waybill_tip_money,
|
||||
SUM(IF(a.vendor_id = a.waybill_vendor_id,waybill_tip_money,0)) waybill_tip_money,
|
||||
SUM(total_shop_money) total_shop_money,
|
||||
SUM(b.pm_subsidy_money) pm_subsidy_money,
|
||||
SUM(earning_price) earning_price,
|
||||
SUM(total_shop_money-earning_price-afs_freight_money-distance_freight_money-waybill_tip_money-80) total_gross_profit
|
||||
FROM goods_order a,afs_order b
|
||||
WHERE a.vendor_order_id = b.vendor_order_id
|
||||
AND a.status != ` + status + `
|
||||
FROM goods_order a JOIN afs_order b ON a.vendor_order_id = b.vendor_order_id
|
||||
WHERE a.status != ?
|
||||
`
|
||||
sqlParams := []interface{}{}
|
||||
sqlParams := []interface{}{
|
||||
model.OrderStatusCanceled, //排除已取消的订单
|
||||
}
|
||||
if !utils.IsTimeZero(fromDate) && !utils.IsTimeZero(toDate) {
|
||||
sql += `AND a.order_created_at BETWEEN ? AND ?
|
||||
`
|
||||
sql += ` AND a.order_created_at BETWEEN ? AND ?`
|
||||
sqlParams = append(sqlParams, fromDate, toDate)
|
||||
}
|
||||
if len(storeIDs) > 0 {
|
||||
sql += `AND a.store_id IN(` + GenQuestionMarks(len(storeIDs)) + `)
|
||||
`
|
||||
sql += ` AND a.store_id IN(` + GenQuestionMarks(len(storeIDs)) + `)`
|
||||
sqlParams = append(sqlParams, storeIDs)
|
||||
}
|
||||
sql += `
|
||||
@@ -177,11 +169,9 @@ func GetGetStatisticsReportForAfsOrders(db *DaoDB, storeIDs []int, fromDate time
|
||||
ON s.store_id = c.id
|
||||
`
|
||||
if len(storeIDs) > 0 {
|
||||
sql += `WHERE c.id IN (` + GenQuestionMarks(len(storeIDs)) + `)
|
||||
`
|
||||
sql += ` WHERE c.id IN (` + GenQuestionMarks(len(storeIDs)) + `)`
|
||||
sqlParams = append(sqlParams, storeIDs)
|
||||
}
|
||||
fmt.Println(sql)
|
||||
if err = GetRows(db, &statisticsReportForOrdersList, sql, sqlParams...); err == nil {
|
||||
return statisticsReportForOrdersList, nil
|
||||
}
|
||||
|
||||
@@ -51,7 +51,8 @@ func DeleteSkuNamePlace(db *DaoDB, nameID int, placeCodes []int) (num int64, err
|
||||
|
||||
func GetSkus(db *DaoDB, skuIDs, nameIDs, statuss, catIDs []int) (skuList []*model.SkuAndName, err error) {
|
||||
sql := `
|
||||
SELECT t1.*, t2.name, t2.unit
|
||||
SELECT t1.*,
|
||||
t2.name, t2.unit,t2.spec_quality,t2.spec_unit,t2.prefix
|
||||
FROM sku t1
|
||||
JOIN sku_name t2 ON t2.id = t1.name_id AND t2.deleted_at = ?
|
||||
`
|
||||
|
||||
@@ -236,8 +236,11 @@ type Sku struct {
|
||||
|
||||
type SkuAndName struct {
|
||||
Sku
|
||||
Name string
|
||||
Unit string
|
||||
Name string
|
||||
Unit string
|
||||
SpecQuality float32
|
||||
SpecUnit string
|
||||
Prefix string
|
||||
}
|
||||
|
||||
// func (*Sku) TableUnique() [][]string {
|
||||
|
||||
@@ -173,7 +173,6 @@ type IMultipleStoresHandler interface {
|
||||
// RefreshAllSkusID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error)
|
||||
|
||||
GetSkus(ctx *jxcontext.Context, skuID int, vendorSkuID, skuName string) (skuNameList []*SkuNameInfo, err error)
|
||||
GetSkusForCheck(ctx *jxcontext.Context, skuID int, vendorSkuID, skuName string) (skuNameList []*SkuNameInfo, err error)
|
||||
}
|
||||
|
||||
type ISingleStoreHandler interface {
|
||||
|
||||
@@ -604,35 +604,6 @@ func (p *PurchaseHandler) GetVendorCategories(ctx *jxcontext.Context) (vendorCat
|
||||
return vendorCats, err
|
||||
}
|
||||
|
||||
//为对比差异另创建了一个查询京东库的的方法,此方法不用查询图片路径,并且过滤掉了京东库上已下架的商品
|
||||
func (p *PurchaseHandler) GetSkusForCheck(ctx *jxcontext.Context, skuID int, vendorSkuID, skuName string) (skuNameList []*partner.SkuNameInfo, err error) {
|
||||
param := &jdapi.QuerySkuParam{
|
||||
SkuID: utils.Str2Int64WithDefault(vendorSkuID, 0),
|
||||
SkuName: skuName,
|
||||
IsFilterDel: jdapi.IsFilterDelTrue,
|
||||
PageNo: 1,
|
||||
PageSize: jdapi.MaxSkuIDsCount4QueryListBySkuIds,
|
||||
}
|
||||
for {
|
||||
skuList, _, err2 := getAPI("").QuerySkuInfos(param)
|
||||
if err = err2; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(skuList) > 0 {
|
||||
for _, v := range skuList {
|
||||
if v.FixedStatus != jdapi.SkuFixedStatusOffline {
|
||||
skuNameList = append(skuNameList, vendorSku2Jx(v))
|
||||
}
|
||||
}
|
||||
}
|
||||
if len(skuList) < param.PageSize {
|
||||
break
|
||||
}
|
||||
param.PageNo++
|
||||
}
|
||||
return skuNameList, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetSkus(ctx *jxcontext.Context, skuID int, vendorSkuID, skuName string) (skuNameList []*partner.SkuNameInfo, err error) {
|
||||
param := &jdapi.QuerySkuParam{
|
||||
SkuID: utils.Str2Int64WithDefault(vendorSkuID, 0),
|
||||
|
||||
Reference in New Issue
Block a user