+SyncSpecialAct
Act添加字段IsSpecail
This commit is contained in:
@@ -870,13 +870,17 @@ func SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITask, actID int, vendor
|
|||||||
if handler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IPurchasePlatformActHandler); handler != nil {
|
if handler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IPurchasePlatformActHandler); handler != nil {
|
||||||
tmpActMap := &model.ActMap{}
|
tmpActMap := &model.ActMap{}
|
||||||
tmpActMap.ID = actMap[vendorID].MapID
|
tmpActMap.ID = actMap[vendorID].MapID
|
||||||
if err = handler.SyncAct(ctx, nil, actMap[vendorID], nil, actStoreSkuMap[vendorID]); err == nil {
|
if !globals.IsStoreSkuAct || actMap[vendorID].IsSpecial == 0 {
|
||||||
retVal = []int{1}
|
if err = handler.SyncAct(ctx, task, actMap[vendorID], nil, actStoreSkuMap[vendorID]); err == nil {
|
||||||
|
retVal = []int{1}
|
||||||
|
} else {
|
||||||
|
tmpActMap.Remark = utils.LimitUTF8StringLen(err.Error(), 1024)
|
||||||
|
}
|
||||||
|
// 保存最后一次同步错误信息
|
||||||
|
dao.UpdateEntity(db, tmpActMap, "Remark")
|
||||||
} else {
|
} else {
|
||||||
tmpActMap.Remark = utils.LimitUTF8StringLen(err.Error(), 1024)
|
SyncSpecialAct(ctx, task, actMap[vendorID], nil, actStoreSkuMap[vendorID])
|
||||||
}
|
}
|
||||||
// 保存最后一次同步错误信息
|
|
||||||
dao.UpdateEntity(db, tmpActMap, "Remark")
|
|
||||||
} else {
|
} else {
|
||||||
globals.SugarLogger.Warnf("SyncAct strange actID:%d, vendorID:%d", actID, vendorID)
|
globals.SugarLogger.Warnf("SyncAct strange actID:%d, vendorID:%d", actID, vendorID)
|
||||||
}
|
}
|
||||||
@@ -1150,3 +1154,95 @@ func ForceUpdateVendorPrice(ctx *jxcontext.Context, vendorID int, actType int, s
|
|||||||
}
|
}
|
||||||
return hint, err
|
return hint, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SyncActStoreSku2StoreSkuAct(ctx *jxcontext.Context, db *dao.DaoDB, parentTask tasksch.ITask, act *model.Act2) (err error) {
|
||||||
|
dao.Begin(db)
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil || err != nil {
|
||||||
|
dao.Rollback(db)
|
||||||
|
if r != nil {
|
||||||
|
panic(r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
sql := `
|
||||||
|
UPDATE store_sku_act t1
|
||||||
|
JOIN act_store_sku_map t2 ON t2.store_id = t1.store_id AND t2.sku_id = t1.sku_id AND t2.vendor_id = t1.vendor_id AND t2.act_id = ? AND t2.sync_status <> 0
|
||||||
|
JOIN act_store_sku t3 ON t3.store_id = t1.store_id AND t3.sku_id = t1.sku_id AND t3.act_id = t2.act_id
|
||||||
|
SET
|
||||||
|
t1.act_percentage = IF(t2.sync_status & ? = 0 AND t3.deleted_at = ?, t3.price_percentage, 0),
|
||||||
|
t1.sync_status = ?,
|
||||||
|
t1.updated_at = NOW(),
|
||||||
|
t1.last_operator = ?,
|
||||||
|
t1.hint_act_id = t2.act_id
|
||||||
|
WHERE t1.vendor_id = ?
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
act.ID,
|
||||||
|
model.SyncFlagDeletedMask, utils.DefaultTimeValue,
|
||||||
|
model.SyncFlagModifiedMask,
|
||||||
|
ctx.GetUserName(),
|
||||||
|
act.VendorID,
|
||||||
|
}
|
||||||
|
_, err = dao.ExecuteSQL(dao.GetDB(), sql, sqlParams...)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
sql = `
|
||||||
|
INSERT INTO store_sku_act(id, created_at, updated_at, last_operator, store_id, sku_id, vendor_id, act_percentage, sync_status, hint_act_id)
|
||||||
|
SELECT 0, NOW(), NOW(), ?, t2.store_id, t2.sku_id, t2.vendor_id, t3.price_percentage, ?, t2.act_id
|
||||||
|
FROM act_store_sku_map t2
|
||||||
|
JOIN act_store_sku t3 ON t3.store_id = t2.store_id AND t3.sku_id = t2.sku_id AND t3.act_id = t2.act_id
|
||||||
|
LEFT JOIN store_sku_act t1 ON t2.store_id = t1.store_id AND t2.sku_id = t1.sku_id AND t2.vendor_id = t1.vendor_id
|
||||||
|
WHERE t2.vendor_id = ? AND t2.act_id = ? AND t2.sync_status <> 0 AND t1.id IS NULL
|
||||||
|
`
|
||||||
|
sqlParams = []interface{}{
|
||||||
|
ctx.GetUserName(), model.SyncFlagModifiedMask,
|
||||||
|
act.VendorID, act.ID,
|
||||||
|
}
|
||||||
|
_, err = dao.ExecuteSQL(dao.GetDB(), sql, sqlParams...)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
sql = `
|
||||||
|
UPDATE act_store_sku_map t2
|
||||||
|
SET
|
||||||
|
t2.deleted_at = IF(t2.sync_status & ? = 0, t2.deleted_at, NOW()),
|
||||||
|
t2.sync_status = 0
|
||||||
|
WHERE t2.vendor_id = ? AND t2.act_id = ?
|
||||||
|
`
|
||||||
|
sqlParams = []interface{}{
|
||||||
|
model.SyncFlagDeletedMask,
|
||||||
|
act.VendorID, act.ID,
|
||||||
|
}
|
||||||
|
_, err = dao.ExecuteSQL(dao.GetDB(), sql, sqlParams...)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
sql = `
|
||||||
|
UPDATE act_map t4
|
||||||
|
SET
|
||||||
|
t4.sync_status = 0
|
||||||
|
WHERE t4.vendor_id = ? AND t4.act_id = ?
|
||||||
|
`
|
||||||
|
sqlParams = []interface{}{
|
||||||
|
act.VendorID, act.ID,
|
||||||
|
}
|
||||||
|
_, err = dao.ExecuteSQL(dao.GetDB(), sql, sqlParams...)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
dao.Commit(db)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func SyncSpecialAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreSkuList []*model.ActStoreSku2) (err error) {
|
||||||
|
db := dao.GetDB()
|
||||||
|
err = SyncActStoreSku2StoreSkuAct(ctx, db, parentTask, act)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|||||||
@@ -1010,7 +1010,7 @@ func createStoreSkuActs(ctx *jxcontext.Context, parentTask tasksch.ITask, vendor
|
|||||||
globals.SugarLogger.Debugf("createStoreSkuActs vendorID:%d, storeID:%d, storeSkuList:%s", vendorID, storeID, utils.Format4Output(storeSkuList, true))
|
globals.SugarLogger.Debugf("createStoreSkuActs vendorID:%d, storeID:%d, storeSkuList:%s", vendorID, storeID, utils.Format4Output(storeSkuList, true))
|
||||||
skuIDs := putils.StoreSkuList2IDs(storeSkuList)
|
skuIDs := putils.StoreSkuList2IDs(storeSkuList)
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
storeSkuActList, err := dao.GetStoresSkusAct(db, []int{storeID}, skuIDs, []int{vendorID}, 1, 0)
|
storeSkuActList, err := dao.GetStoresSkusAct(db, 0, []int{storeID}, skuIDs, []int{vendorID}, 1, 0)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
storeSkuList2, storeSkuActMap := parseStoreSkuActList(true, storeSkuList, storeSkuActList)
|
storeSkuList2, storeSkuActMap := parseStoreSkuActList(true, storeSkuList, storeSkuActList)
|
||||||
if len(storeSkuList2) > 0 {
|
if len(storeSkuList2) > 0 {
|
||||||
@@ -1039,7 +1039,7 @@ func cancelStoreSkuActs(ctx *jxcontext.Context, parentTask tasksch.ITask, vendor
|
|||||||
globals.SugarLogger.Debugf("cancelStoreSkuActs vendorID:%d, storeID:%d, storeSkuList:%s", vendorID, storeID, utils.Format4Output(storeSkuList, true))
|
globals.SugarLogger.Debugf("cancelStoreSkuActs vendorID:%d, storeID:%d, storeSkuList:%s", vendorID, storeID, utils.Format4Output(storeSkuList, true))
|
||||||
skuIDs := putils.StoreSkuList2IDs(storeSkuList)
|
skuIDs := putils.StoreSkuList2IDs(storeSkuList)
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
storeSkuActList, err := dao.GetStoresSkusAct(db, []int{storeID}, skuIDs, []int{vendorID}, 0, 0)
|
storeSkuActList, err := dao.GetStoresSkusAct(db, 0, []int{storeID}, skuIDs, []int{vendorID}, 0, 0)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
storeSkuList2, storeSkuActMap := parseStoreSkuActList(false, storeSkuList, storeSkuActList)
|
storeSkuList2, storeSkuActMap := parseStoreSkuActList(false, storeSkuList, storeSkuActList)
|
||||||
if len(storeSkuList2) > 0 {
|
if len(storeSkuList2) > 0 {
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ type Act struct {
|
|||||||
LimitCount int `json:"limitCount"` // 每单限购数量
|
LimitCount int `json:"limitCount"` // 每单限购数量
|
||||||
Source string `orm:"size(255)" json:"source"`
|
Source string `orm:"size(255)" json:"source"`
|
||||||
CreateType int `json:"createType"`
|
CreateType int `json:"createType"`
|
||||||
|
IsSpecial int8 `json:"isSpecial"` // 是否是特殊绑定活动
|
||||||
OverlapRule int `json:"overlapRule"`
|
OverlapRule int `json:"overlapRule"`
|
||||||
PricePercentage int `json:"pricePercentage"` // 单品级活动才有效
|
PricePercentage int `json:"pricePercentage"` // 单品级活动才有效
|
||||||
BeginAt time.Time `orm:"type(datetime);index" json:"beginAt"`
|
BeginAt time.Time `orm:"type(datetime);index" json:"beginAt"`
|
||||||
@@ -225,6 +226,7 @@ type StoreSkuAct struct {
|
|||||||
SyncStatus int8 `orm:"default(2)" json:"syncStatus"`
|
SyncStatus int8 `orm:"default(2)" json:"syncStatus"`
|
||||||
// ActID int `orm:"column(act_id);index" json:"actID"`
|
// ActID int `orm:"column(act_id);index" json:"actID"`
|
||||||
VendorActID string `orm:"column(vendor_act_id);size(48);index" json:"vendorActID"`
|
VendorActID string `orm:"column(vendor_act_id);size(48);index" json:"vendorActID"`
|
||||||
|
HintActID int `orm:"column(hint_act_id);size(48);index" json:"hintActID"`
|
||||||
VendorActPrice int64 `json:"vendorActPrice"` // 保存数据用,实际的活动价
|
VendorActPrice int64 `json:"vendorActPrice"` // 保存数据用,实际的活动价
|
||||||
Remark string `orm:"column(remark);size(1024)" json:"remark"`
|
Remark string `orm:"column(remark);size(1024)" json:"remark"`
|
||||||
|
|
||||||
|
|||||||
@@ -511,13 +511,17 @@ func CreateOrUpdateActStoreSku(db *DaoDB, storeSkuAct *model.StoreSkuAct) (err e
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetStoresSkusAct(db *DaoDB, storeIDs, skuIDs, vendorIDs []int, minActPercentage, maxActPercentage int) (storeSkuActList []*model.StoreSkuAct, err error) {
|
func GetStoresSkusAct(db *DaoDB, hintActID int, storeIDs, skuIDs, vendorIDs []int, minActPercentage, maxActPercentage int) (storeSkuActList []*model.StoreSkuAct, err error) {
|
||||||
sql := `
|
sql := `
|
||||||
SELECT *
|
SELECT *
|
||||||
FROM store_sku_act t1
|
FROM store_sku_act t1
|
||||||
WHERE 1 = 1
|
WHERE 1 = 1
|
||||||
`
|
`
|
||||||
sqlParams := []interface{}{}
|
sqlParams := []interface{}{}
|
||||||
|
if hintActID > 0 {
|
||||||
|
sql += " AND t1.hint_act_id = ?"
|
||||||
|
sqlParams = append(sqlParams, hintActID)
|
||||||
|
}
|
||||||
if len(storeIDs) > 0 {
|
if len(storeIDs) > 0 {
|
||||||
sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||||||
sqlParams = append(sqlParams, storeIDs)
|
sqlParams = append(sqlParams, storeIDs)
|
||||||
@@ -545,7 +549,7 @@ func GetStoresSkusAct(db *DaoDB, storeIDs, skuIDs, vendorIDs []int, minActPercen
|
|||||||
func GetStoresSkusAndActInfo(db *DaoDB, storeIDs, skuIDs, vendorIDs []int, minActPercentage, maxActPercentage int) (storeSkuAndActList []*StoreSkuAndAct, err error) {
|
func GetStoresSkusAndActInfo(db *DaoDB, storeIDs, skuIDs, vendorIDs []int, minActPercentage, maxActPercentage int) (storeSkuAndActList []*StoreSkuAndAct, err error) {
|
||||||
storeSkuList, err := GetStoresSkusInfo(db, storeIDs, skuIDs)
|
storeSkuList, err := GetStoresSkusInfo(db, storeIDs, skuIDs)
|
||||||
if err == nil && len(storeSkuList) > 0 {
|
if err == nil && len(storeSkuList) > 0 {
|
||||||
storeSkuActList, err2 := GetStoresSkusAct(db, storeIDs, skuIDs, vendorIDs, minActPercentage, maxActPercentage)
|
storeSkuActList, err2 := GetStoresSkusAct(db, 0, storeIDs, skuIDs, vendorIDs, minActPercentage, maxActPercentage)
|
||||||
if err = err2; err == nil {
|
if err = err2; err == nil {
|
||||||
actMap := make(map[int64][]*model.StoreSkuAct)
|
actMap := make(map[int64][]*model.StoreSkuAct)
|
||||||
for _, v := range storeSkuActList {
|
for _, v := range storeSkuActList {
|
||||||
|
|||||||
@@ -100,6 +100,11 @@ type StoreSkuSyncInfo struct {
|
|||||||
SkuName string
|
SkuName string
|
||||||
StatusSaleBegin int16 `json:"statusSaleBegin"` //商品可售时间范围
|
StatusSaleBegin int16 `json:"statusSaleBegin"` //商品可售时间范围
|
||||||
StatusSaleEnd int16 `json:"statusSaleEnd"`
|
StatusSaleEnd int16 `json:"statusSaleEnd"`
|
||||||
|
|
||||||
|
VendorActID string `orm:"column(vendor_act_id);size(48)" json:"vendorActID"`
|
||||||
|
ActPercentage int `json:"actPercentage"` // 直降活动百分比
|
||||||
|
ActSyncStatus int8 `orm:"default(2)" json:"actSyncStatus"`
|
||||||
|
VendorActPrice int64 `json:"vendorActPrice"` // 保存数据用,实际的活动价
|
||||||
}
|
}
|
||||||
|
|
||||||
type MissingStoreSkuInfo struct {
|
type MissingStoreSkuInfo struct {
|
||||||
@@ -165,6 +170,7 @@ type StoreSkuVendorInfo struct {
|
|||||||
|
|
||||||
// 新活动信息
|
// 新活动信息
|
||||||
VendorActID string `orm:"column(vendor_act_id);size(48)" json:"vendorActID"`
|
VendorActID string `orm:"column(vendor_act_id);size(48)" json:"vendorActID"`
|
||||||
|
HintActID int `orm:"column(hint_act_id);size(48);index" json:"hintActID"`
|
||||||
ActPercentage int `json:"actPercentage"` // 直降活动百分比
|
ActPercentage int `json:"actPercentage"` // 直降活动百分比
|
||||||
ActSyncStatus int8 `orm:"default(2)" json:"actSyncStatus"`
|
ActSyncStatus int8 `orm:"default(2)" json:"actSyncStatus"`
|
||||||
VendorActPrice int64 `json:"vendorActPrice"` // 保存数据用,实际的活动价
|
VendorActPrice int64 `json:"vendorActPrice"` // 保存数据用,实际的活动价
|
||||||
@@ -397,6 +403,10 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
|
|||||||
t4m.vendor_thing_id vendor_cat_id,
|
t4m.vendor_thing_id vendor_cat_id,
|
||||||
t5skum.vendor_thing_id sku_vendor_cat_id`
|
t5skum.vendor_thing_id sku_vendor_cat_id`
|
||||||
}
|
}
|
||||||
|
if globals.IsStoreSkuAct {
|
||||||
|
sql += `,
|
||||||
|
act.vendor_act_id, act.act_percentage, act.sync_status act_sync_status, act.vendor_act_price`
|
||||||
|
}
|
||||||
sql += `
|
sql += `
|
||||||
FROM store_sku_bind t1
|
FROM store_sku_bind t1
|
||||||
JOIN store_map t14 ON t14.store_id = t1.store_id AND t14.vendor_id = ? AND t14.deleted_at = ?
|
JOIN store_map t14 ON t14.store_id = t1.store_id AND t14.vendor_id = ? AND t14.deleted_at = ?
|
||||||
@@ -413,6 +423,11 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
|
|||||||
utils.DefaultTimeValue, // model.SkuStatusNormal,
|
utils.DefaultTimeValue, // model.SkuStatusNormal,
|
||||||
utils.DefaultTimeValue,
|
utils.DefaultTimeValue,
|
||||||
}
|
}
|
||||||
|
if globals.IsStoreSkuAct {
|
||||||
|
sql += `
|
||||||
|
LEFT JOIN store_sku_act act ON act.store_id = t1.store_id AND act.sku_id = t1.sku_id AND act.vendor_id = ?`
|
||||||
|
sqlParams = append(sqlParams, vendorID)
|
||||||
|
}
|
||||||
if isSingleStorePF {
|
if isSingleStorePF {
|
||||||
sql += `
|
sql += `
|
||||||
LEFT JOIN store_sku_category_map t5 ON t4.id = t5.category_id AND t5.store_id = t1.store_id AND t5.deleted_at = ?
|
LEFT JOIN store_sku_category_map t5 ON t4.id = t5.category_id AND t5.store_id = t1.store_id AND t5.deleted_at = ?
|
||||||
@@ -436,13 +451,17 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
|
|||||||
sqlParams = append(sqlParams, storeID)
|
sqlParams = append(sqlParams, storeID)
|
||||||
}
|
}
|
||||||
if mustDirty {
|
if mustDirty {
|
||||||
sql += " AND (t1.%s_sync_status <> 0 OR (%s <> %s AND t3.id IS NULL))"
|
sql += " AND (t1.%s_sync_status <> 0 OR (%s <> %s AND t3.id IS NULL)"
|
||||||
fmtParams = append(fmtParams, fieldPrefix, skuVendorIDField)
|
fmtParams = append(fmtParams, fieldPrefix, skuVendorIDField)
|
||||||
if isSingleStorePF {
|
if isSingleStorePF {
|
||||||
fmtParams = append(fmtParams, "0")
|
fmtParams = append(fmtParams, "0")
|
||||||
} else {
|
} else {
|
||||||
fmtParams = append(fmtParams, "''")
|
fmtParams = append(fmtParams, "''")
|
||||||
}
|
}
|
||||||
|
// if globals.IsStoreSkuAct {
|
||||||
|
// sql += " OR act.sync_status <> 0"
|
||||||
|
// }
|
||||||
|
sql += ")"
|
||||||
} else {
|
} else {
|
||||||
sql += " AND t1.deleted_at = ?"
|
sql += " AND t1.deleted_at = ?"
|
||||||
sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
||||||
@@ -1240,7 +1259,7 @@ func UpdateActPrice4StoreSkuNameNew(db *DaoDB, storeIDs, skuIDs []int, skuNamesI
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
storeMapMap = StoreMapList2Map(storeMapList)
|
storeMapMap = StoreMapList2Map(storeMapList)
|
||||||
storeSkuActList, err2 := GetStoresSkusAct(db, storeIDs, skuIDs, nil, 0, 0)
|
storeSkuActList, err2 := GetStoresSkusAct(db, 0, storeIDs, skuIDs, nil, 0, 0)
|
||||||
if err = err2; err != nil {
|
if err = err2; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1296,12 +1315,12 @@ func UpdateActPrice4StoreSkuNameNew(db *DaoDB, storeIDs, skuIDs []int, skuNamesI
|
|||||||
vendorInfo.ActPercentage = storeSkuAct.ActPercentage
|
vendorInfo.ActPercentage = storeSkuAct.ActPercentage
|
||||||
vendorInfo.ActSyncStatus = storeSkuAct.SyncStatus
|
vendorInfo.ActSyncStatus = storeSkuAct.SyncStatus
|
||||||
vendorInfo.VendorActPrice = storeSkuAct.VendorActPrice
|
vendorInfo.VendorActPrice = storeSkuAct.VendorActPrice
|
||||||
|
vendorInfo.HintActID = storeSkuAct.HintActID
|
||||||
}
|
}
|
||||||
|
|
||||||
if actStoreSku := actStoreSkuMap4Act.GetActStoreSku(skuName.StoreID, v.SkuID, vendorID); actStoreSku != nil {
|
if actStoreSku := actStoreSkuMap4Act.GetActStoreSku(skuName.StoreID, v.SkuID, vendorID); actStoreSku != nil {
|
||||||
vendorInfo.ActPrice = int(actStoreSku.ActualActPrice)
|
vendorInfo.ActPrice = int(actStoreSku.ActualActPrice)
|
||||||
vendorInfo.ActID = actStoreSku.ActID
|
vendorInfo.ActID = actStoreSku.ActID
|
||||||
vendorInfo.VendorActID = actStoreSku.VendorActID
|
|
||||||
vendorInfo.ActType = actStoreSku.Type
|
vendorInfo.ActType = actStoreSku.Type
|
||||||
vendorInfo.EarningPrice = int(jxutils.CaculateSkuEarningPrice(int64(v.BindPrice), int64(v.ActPrice), skuName.PayPercentage))
|
vendorInfo.EarningPrice = int(jxutils.CaculateSkuEarningPrice(int64(v.BindPrice), int64(v.ActPrice), skuName.PayPercentage))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user