- 使用GetPricePercentage

This commit is contained in:
gazebo
2019-07-15 18:26:25 +08:00
parent ff4b6098d7
commit 1650a2d7e8
8 changed files with 46 additions and 46 deletions

View File

@@ -110,6 +110,7 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, db *dao.DaoDB, act *model.Ac
if storeSkuInfo := storeSkuMap[jxutils.Combine2Int(v.StoreID, v.SkuID)]; storeSkuInfo != nil {
validVendorMap[vendorID] = 1
validSkuMap[v.SkuID] = 1
pricePercentage := jxutils.GetPricePercentage(storeDetail.PricePercentagePackObj, storeSkuInfo.Price, int(storeDetail.PricePercentage))
actSkuMap := &model.ActStoreSkuMap{
ActID: act.ID,
StoreID: storeID,
@@ -117,7 +118,7 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, db *dao.DaoDB, act *model.Ac
VendorID: vendorID,
SyncStatus: model.SyncFlagNewMask,
VendorPrice: int64(jxutils.CaculateSkuVendorPrice(storeSkuInfo.Price, jxutils.GetPricePercentage(storeDetail.PricePercentagePackObj, storeSkuInfo.Price, int(storeDetail.PricePercentage)), 0)),
VendorPrice: int64(jxutils.CaculateSkuVendorPrice(storeSkuInfo.Price, pricePercentage, 0)),
}
v.OriginalPrice = actSkuMap.VendorPrice
if v.ActPrice != 0 {

View File

@@ -178,7 +178,7 @@ func GetStores(ctx *jxcontext.Context, keyword string, params map[string]interfa
city.name city_name,
district.name district_name,
CONCAT('[', GROUP_CONCAT(DISTINCT CONCAT('{"vendorStoreID":"', m1.vendor_store_id, '", "vendorID":', m1.vendor_id,
', "status":', m1.status, ', "pricePercentage":', m1.price_percentage, ', "vendorStoreName":"',
', "status":', m1.status, ', "pricePercentage":', m1.price_percentage, ', "pricePercentagePack":"', m1.price_percentage_pack, '", "vendorStoreName":"',
CASE m1.vendor_id
WHEN 0 THEN IF(jd.name IS NULL, '', jd.name)
WHEN 3 THEN IF(eb.col_name IS NULL, '', eb.col_name)

View File

@@ -183,6 +183,7 @@ func GetStoreMapByStoreID(db *DaoDB, storeID, vendorID int) (storeMap *model.Sto
}
return nil, err
}
storeMap.PricePercentagePackObj = PricePercentagePack2Obj(storeMap.PricePercentagePack)
return storeMap, nil
}

View File

@@ -1,6 +1,7 @@
package dao
import (
"sort"
"time"
"git.rosy.net.cn/baseapi/utils"
@@ -72,9 +73,7 @@ func getStoreDetail(db *DaoDB, storeID, vendorID int, vendorStoreID string) (sto
storeDetail = &StoreDetail{}
if err = GetRow(db, storeDetail, sql, sqlParams...); err == nil {
storeDetail.Place.Name = storeDetail.DistrictName
if storeDetail.PricePercentagePack != "" {
utils.UnmarshalUseNumber([]byte(storeDetail.PricePercentagePack), &storeDetail.PricePercentagePackObj)
}
storeDetail.PricePercentagePackObj = PricePercentagePack2Obj(storeDetail.PricePercentagePack)
return storeDetail, nil
}
return nil, err
@@ -227,6 +226,9 @@ func GetStoresMapList(db *DaoDB, vendorIDs, storeIDs []int, status, isSync int)
}
sql += " ORDER BY t1.store_id, t1.vendor_id"
if err = GetRows(db, &storeMapList, sql, sqlParams...); err == nil {
for _, v := range storeMapList {
v.PricePercentagePackObj = PricePercentagePack2Obj(v.PricePercentagePack)
}
return storeMapList, nil
}
return nil, err
@@ -312,3 +314,12 @@ func GetRebindPrinterStoreList(db *DaoDB) (storeList []*model.Store, err error)
`, utils.DefaultTimeValue, model.VendorIDPrinterBegin)
return storeList, err
}
func PricePercentagePack2Obj(packStr string) (obj model.PricePercentagePack) {
if packStr != "" {
if err := utils.UnmarshalUseNumber([]byte(packStr), &obj); err == nil {
sort.Sort(obj)
}
}
return obj
}

View File

@@ -55,10 +55,6 @@ type tStoreSkuFullInfo struct {
EbaiCat2ID int64 `orm:"column(ebai_cat2_id)"`
EbaiCat3ID int64 `orm:"column(ebai_cat3_id)"`
PricePercentage int
PricePercentagePack string `orm:"size(4096)" json:"pricePercentagePack"` //
PricePercentagePackObj model.PricePercentagePack `orm:"-" json:"-"`
CatPricePercentage int
}
@@ -85,7 +81,7 @@ var (
func (p *PurchaseHandler) getDirtyStoreSkus(db *dao.DaoDB, storeID int, skuIDs []int) (storeSkuInfoList []*tStoreSkuFullInfo, err error) {
sql := `
SELECT t8.price_percentage, t8.price_percentage_pack,
SELECT
t1.*, t2.spec_quality, t2.spec_unit, t2.weight, t2.status sku_status,
t3.id name_id, t3.prefix, t3.name, t2.comment, t3.is_global, t3.unit, IF(t3.img_ebai <> '', t3.img_ebai, t3.img) img, t3.upc, t3.desc_img_ebai,
t4.name cat_name, t4.ebai_price_percentage cat_price_percentage,
@@ -101,7 +97,6 @@ func (p *PurchaseHandler) getDirtyStoreSkus(db *dao.DaoDB, storeID int, skuIDs [
LEFT JOIN store_sku_category_map t5p ON t5p.store_id = t1.store_id AND t5p.category_id = t4p.id AND t5p.deleted_at = ?
LEFT JOIN sku_vendor_category cat1 ON t4.ebai_category_id = cat1.vendor_category_id AND cat1.vendor_id = ?
LEFT JOIN sku_vendor_category cat2 ON cat1.parent_id = cat2.vendor_category_id AND cat1.vendor_id = ?
JOIN store_map t8 ON t8.store_id = t1.store_id AND t8.vendor_id = ? AND t8.deleted_at = ?
WHERE t1.store_id = ? AND (t1.ebai_sync_status <> 0 OR (t1.ebai_id <> 0 AND t3.id IS NULL))
`
sqlParams := []interface{}{
@@ -113,8 +108,6 @@ func (p *PurchaseHandler) getDirtyStoreSkus(db *dao.DaoDB, storeID int, skuIDs [
utils.DefaultTimeValue,
model.VendorIDEBAI,
model.VendorIDEBAI,
model.VendorIDEBAI,
utils.DefaultTimeValue,
storeID,
}
if len(skuIDs) > 0 {
@@ -123,13 +116,6 @@ func (p *PurchaseHandler) getDirtyStoreSkus(db *dao.DaoDB, storeID int, skuIDs [
}
sql += " ORDER BY t1.price DESC"
err = dao.GetRows(db, &storeSkuInfoList, sql, sqlParams...)
if err == nil {
for _, v := range storeSkuInfoList {
if v.PricePercentagePack != "" {
utils.UnmarshalUseNumber([]byte(v.PricePercentagePack), &v.PricePercentagePackObj)
}
}
}
return storeSkuInfoList, err
}
@@ -202,6 +188,11 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
var storeSkuInfoList []*tStoreSkuFullInfo
var num int64
strStoreID := utils.Int2Str(storeID)
storeDetail, err := dao.GetStoreDetail(dao.GetDB(), storeID, model.VendorIDEBAI)
if err != nil {
return "", err
}
rootTask := tasksch.NewSeqTask("SyncStoreSkus饿百1", ctx,
func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
if step == 0 {
@@ -225,6 +216,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
task := tasksch.NewParallelTask("SyncStoreSkus饿百2", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
storeSku := batchItemList[0].(*tStoreSkuFullInfo)
pricePercentage := jxutils.GetPricePercentage(storeDetail.PricePercentagePackObj, storeSku.Price, int(storeDetail.PricePercentage))
updateFields := []string{model.FieldEbaiSyncStatus}
if storeSku.NameID == 0 || storeSku.EbaiSyncStatus&model.SyncFlagDeletedMask != 0 {
if storeSku.EbaiSyncStatus&model.SyncFlagNewMask == 0 && !jxutils.IsEmptyID(storeSku.EbaiID) {
@@ -250,7 +242,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
if mergedStoreSkuStatus == model.SkuStatusNormal { // 待创建且不可售的,暂不新建
if storeSku.Img != "" {
if globals.EnableEbaiStoreWrite {
storeSku.EbaiID, err = api.EbaiAPI.SkuCreate(strStoreID, storeSku.SkuID, genSkuParamsFromStoreSkuInfo(storeSku))
storeSku.EbaiID, err = api.EbaiAPI.SkuCreate(strStoreID, storeSku.SkuID, genSkuParamsFromStoreSkuInfo(pricePercentage, storeSku))
} else {
storeSku.EbaiID = jxutils.GenFakeID()
}
@@ -259,7 +251,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
} else if ebaiapi.IsErrSkuExist(err) {
if storeSku.EbaiID = api.EbaiAPI.GetEbaiSkuIDFromCustomID(strStoreID, utils.Int2Str(storeSku.SkuID)); storeSku.EbaiID > 0 {
updateFields = append(updateFields, model.FieldEbaiID)
err = skuUpdate(strStoreID, storeSku)
err = skuUpdate(strStoreID, pricePercentage, storeSku)
}
}
} else {
@@ -273,7 +265,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
err = fmt.Errorf("京西数据异常,修改一个没有创建的饿百商品:%d, store:%s", storeSku.SkuID, strStoreID)
} else {
if storeSku.Img != "" {
err = skuUpdate(strStoreID, storeSku)
err = skuUpdate(strStoreID, pricePercentage, storeSku)
} else {
err = fmt.Errorf("SKUANME%d:%s没有图片同步失败", storeSku.NameID, storeSku.Name)
}
@@ -302,14 +294,14 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
return rootTask.ID, err
}
func skuUpdate(strStoreID string, storeSku *tStoreSkuFullInfo) (err error) {
func skuUpdate(strStoreID string, pricePercentage int, storeSku *tStoreSkuFullInfo) (err error) {
if globals.EnableEbaiStoreWrite {
if _, err = api.EbaiAPI.SkuUpdate(strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(storeSku)); err != nil {
if _, err = api.EbaiAPI.SkuUpdate(strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(pricePercentage, storeSku)); err != nil {
// 如果是改价错误,尝试把价格标志去掉再同步
if isErrModifyPrice(err) {
storeSku.EbaiSyncStatus = storeSku.EbaiSyncStatus & ^model.SyncFlagPriceMask
if storeSku.EbaiSyncStatus != 0 {
if _, err2 := api.EbaiAPI.SkuUpdate(strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(storeSku)); err2 != nil {
if _, err2 := api.EbaiAPI.SkuUpdate(strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(pricePercentage, storeSku)); err2 != nil {
err = err2
}
}
@@ -428,8 +420,8 @@ func (p *PurchaseHandler) RefreshStoresAllSkusID(ctx *jxcontext.Context, parentT
}
///////////
func genSkuParamsFromStoreSkuInfo(storeSku *tStoreSkuFullInfo) (params map[string]interface{}) {
price := jxutils.CaculateSkuVendorPrice(storeSku.Price, storeSku.PricePercentage, storeSku.CatPricePercentage)
func genSkuParamsFromStoreSkuInfo(pricePercentage int, storeSku *tStoreSkuFullInfo) (params map[string]interface{}) {
price := jxutils.CaculateSkuVendorPrice(storeSku.Price, pricePercentage, storeSku.CatPricePercentage)
params = map[string]interface{}{
"name": utils.LimitMixedStringLen(jxutils.ComposeSkuName(storeSku.Prefix, storeSku.Name, storeSku.Comment, storeSku.Unit, storeSku.SpecQuality, storeSku.SpecUnit, 0), ebaiapi.MaxSkuNameByteCount),
"left_num": model.MaxStoreSkuStockQty,

View File

@@ -15,14 +15,6 @@ import (
"git.rosy.net.cn/jx-callback/globals/api"
)
type tStoreSkuBindExt struct {
model.StoreSkuBind
PricePercentage int
CatPricePercentage int
VendorStoreID string `orm:"column(vendor_store_id)"`
JdID int64 `orm:"column(jd_id)"`
}
// 京东到家,以有库存表示关注(认领)
func (p *PurchaseHandler) syncStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, db *dao.DaoDB, storeID int, storeSkus []*dao.StoreSkuSyncInfo, isAsync, isContinueWhenError bool) (hint string, err error) {
globals.SugarLogger.Debugf("jd syncStoreSkus, storeID:%d", storeID)
@@ -73,9 +65,10 @@ func (p *PurchaseHandler) syncStoreSkus(ctx *jxcontext.Context, parentTask tasks
}
if storeSku.StoreSkuSyncStatus&(model.SyncFlagPriceMask|model.SyncFlagNewMask) != 0 {
vendorSkuID4Price = storeSku.VendorSkuID
pricePercentage := jxutils.GetPricePercentage(storeDetail.PricePercentagePackObj, int(storeSku.Price), int(storeDetail.PricePercentage))
skuPriceInfoList = append(skuPriceInfoList, &jdapi.SkuPriceInfo{
OutSkuId: utils.Int2Str(storeSku.SkuID),
Price: constrainPrice(jxutils.CaculateSkuVendorPrice(int(storeSku.Price), int(storeDetail.PricePercentage), storeSku.CatPricePercentage)),
Price: constrainPrice(jxutils.CaculateSkuVendorPrice(int(storeSku.Price), pricePercentage, storeSku.CatPricePercentage)),
})
}
if storeSku.StoreSkuSyncStatus&(model.SyncFlagSaleMask|model.SyncFlagNewMask) != 0 {

View File

@@ -300,9 +300,10 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
if skuItem.Img == "" {
err = fmt.Errorf("SKUNAME%d:%s没有图片同步失败", skuItem.NameID, skuItem.Name)
} else {
pricePercentage := jxutils.GetPricePercentage(storeDetail.PricePercentagePackObj, int(skuItem.Price), int(storeDetail.PricePercentage))
foodData["name"] = jxutils.ComposeSkuName(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, mtwmapi.MaxSkuNameCharCount)
foodData["description"] = skuItem.Comment
foodData["price"] = jxutils.IntPrice2Standard(int64(jxutils.CaculateSkuVendorPrice(int(skuItem.Price), int(storeDetail.PricePercentage), skuItem.CatPricePercentage)))
foodData["price"] = jxutils.IntPrice2Standard(int64(jxutils.CaculateSkuVendorPrice(int(skuItem.Price), pricePercentage, skuItem.CatPricePercentage)))
foodData["min_order_count"] = 1
foodData["unit"] = skuItem.Unit
foodData["box_num"] = 0

View File

@@ -184,6 +184,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
func(rootTask *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
v := batchItemList[0]
skuItem := v.(*dao.StoreSkuSyncInfo)
pricePercentage := jxutils.GetPricePercentage(storeDetail.PricePercentagePackObj, int(skuItem.Price), int(storeDetail.PricePercentage))
updateFields := []string{model.FieldWscSyncStatus}
storeSkuBind := &model.StoreSkuBind{}
storeSkuBind.ID = skuItem.BindID
@@ -202,14 +203,14 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
outerGoodsCode := utils.Int2Str(skuItem.NameID)
title := jxutils.ComposeSkuName(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 30)
isPutAway := jxutils.MergeSkuStatus(skuItem.Status, skuItem.StoreSkuStatus) == model.SkuStatusNormal
categoryId := skuItem.VendorVendorCatID
if categoryId == 0 {
categoryId = DefVendorCategoryId
categoryID := skuItem.VendorVendorCatID
if categoryID == 0 {
categoryID = DefVendorCategoryId
}
classifyIdList := []int64{utils.Str2Int64WithDefault(skuItem.VendorCatID, 0)}
classifyIDList := []int64{utils.Str2Int64WithDefault(skuItem.VendorCatID, 0)}
if skuItem.SkuVendorCatID != "" {
if int64Value := utils.Str2Int64WithDefault(skuItem.SkuVendorCatID, 0); int64Value > 0 {
classifyIdList = append(classifyIdList, int64Value)
classifyIDList = append(classifyIDList, int64Value)
}
}
b2cGoods := &weimobapi.PendingSaveB2CGoodsVo{
@@ -217,7 +218,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
DeliveryTypeIdList: []int64{DefDeliveryTypeId},
B2cGoodsType: weimobapi.GoodsTypeNormal,
}
salePrice := int64(jxutils.CaculateSkuVendorPrice(int(skuItem.Price), int(storeDetail.PricePercentage), skuItem.CatPricePercentage))
salePrice := int64(jxutils.CaculateSkuVendorPrice(int(skuItem.Price), pricePercentage, skuItem.CatPricePercentage))
skuList := []map[string]interface{}{
map[string]interface{}{
weimobapi.KeyOuterSkuCode: utils.Int2Str(skuItem.ID),
@@ -237,7 +238,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
skuMap map[string]int64
)
if globals.EnableWscStoreWrite {
goodsID, skuMap, err = api.WeimobAPI.AddGoods(outerGoodsCode, title, false, []string{skuItem.Img}, skuItem.Comment, isPutAway, 0, categoryId, classifyIdList, b2cGoods, skuList, nil)
goodsID, skuMap, err = api.WeimobAPI.AddGoods(outerGoodsCode, title, false, []string{skuItem.Img}, skuItem.Comment, isPutAway, 0, categoryID, classifyIDList, b2cGoods, skuList, nil)
} else {
goodsID = jxutils.GenFakeID()
skuMap = map[string]int64{
@@ -261,7 +262,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
// skuList[0][weimobapi.KeyEditStockNum] = model.MaxStoreSkuStockQty - int(utils.MustInterface2Int64(remoteSkuList[0].(map[string]interface{})[weimobapi.KeyAvailableStockNum]))
}
if globals.EnableWscStoreWrite {
_, _, err = api.WeimobAPI.UpdateGoods(goodsID, title, false, []string{skuItem.Img}, skuItem.Comment, isPutAway, 0, categoryId, classifyIdList, b2cGoods, skuList, nil)
_, _, err = api.WeimobAPI.UpdateGoods(goodsID, title, false, []string{skuItem.Img}, skuItem.Comment, isPutAway, 0, categoryID, classifyIDList, b2cGoods, skuList, nil)
}
}
}