- 修改sku规格时,相应重新计算门店商品价格并设置合适的同步标志
This commit is contained in:
@@ -813,7 +813,10 @@ func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{}
|
|||||||
// globals.SugarLogger.Debug(utils.Format4Output(valid, false))
|
// globals.SugarLogger.Debug(utils.Format4Output(valid, false))
|
||||||
dao.Begin(db)
|
dao.Begin(db)
|
||||||
defer func() {
|
defer func() {
|
||||||
dao.Rollback(db)
|
if r := recover(); r != nil {
|
||||||
|
dao.Rollback(db)
|
||||||
|
panic(r)
|
||||||
|
}
|
||||||
}()
|
}()
|
||||||
maskValue := model.SyncFlagModifiedMask
|
maskValue := model.SyncFlagModifiedMask
|
||||||
if valid["specQuality"] != nil || valid["specUnit"] != nil {
|
if valid["specQuality"] != nil || valid["specUnit"] != nil {
|
||||||
@@ -827,21 +830,57 @@ func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{}
|
|||||||
SET t1.spec_quality = t2.spec_quality,
|
SET t1.spec_quality = t2.spec_quality,
|
||||||
t1.spec_unit = t2.spec_unit
|
t1.spec_unit = t2.spec_unit
|
||||||
WHERE t1.deleted_at = ? AND t2.id = ? AND t1.unit <> ?
|
WHERE t1.deleted_at = ? AND t2.id = ? AND t1.unit <> ?
|
||||||
`, utils.DefaultTimeValue, skuID, model.SpecialUnit); err != nil {
|
`, utils.DefaultTimeValue, skuID, model.SpecialUnit); err == nil {
|
||||||
return 0, err
|
if _, err = SetStoreSkuSyncStatus2(db, nil, CurVendorSync.SingleStoreVendorIDs, []int{skuID}, model.SyncFlagModifiedMask); err == nil {
|
||||||
}
|
if maskValue&model.SyncFlagSpecMask != 0 {
|
||||||
if _, err = SetStoreSkuSyncStatus2(db, nil, CurVendorSync.SingleStoreVendorIDs, []int{skuID}, model.SyncFlagModifiedMask); err == nil {
|
err = refreshStoreSkuPrice(ctx, db, skuID)
|
||||||
dao.Commit(db)
|
}
|
||||||
_, err = CurVendorSync.SyncSku(ctx, db, -1, sku.ID, false, false, userName)
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
err = ErrEntityNotExist
|
err = ErrEntityNotExist
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if err == nil {
|
||||||
|
dao.Commit(db)
|
||||||
|
_, err = CurVendorSync.SyncSku(ctx, db, -1, sku.ID, false, false, userName)
|
||||||
|
} else {
|
||||||
|
dao.Rollback(db)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return num, err
|
return num, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func refreshStoreSkuPrice(ctx *jxcontext.Context, db *dao.DaoDB, skuID int) (err error) {
|
||||||
|
dao.Begin(db)
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil || err != nil {
|
||||||
|
dao.Rollback(db)
|
||||||
|
if r != nil {
|
||||||
|
panic(r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
for vendorID := range partner.PurchasePlatformHandlers {
|
||||||
|
storeSkuList, err := dao.GetStoreSkus2(db, vendorID, 0, []int{skuID}, false)
|
||||||
|
if err == nil {
|
||||||
|
for _, v := range storeSkuList {
|
||||||
|
v.Price = int64(jxutils.CaculateSkuPrice(int(v.UnitPrice), v.SpecQuality, v.SpecUnit, v.Unit))
|
||||||
|
storeSku := &model.StoreSkuBind{}
|
||||||
|
storeSku.ID = v.BindID
|
||||||
|
if _, err = dao.UpdateEntityLogically(db, storeSku, map[string]interface{}{
|
||||||
|
"Price": v.Price,
|
||||||
|
dao.GetSyncStatusStructField(model.VendorNames[vendorID]): v.StoreSkuSyncStatus | model.SyncFlagPriceMask,
|
||||||
|
}, ctx.GetUserName(), nil); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dao.Commit(db)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func DeleteSku(ctx *jxcontext.Context, skuID int, userName string) (num int64, err error) {
|
func DeleteSku(ctx *jxcontext.Context, skuID int, userName string) (num int64, err error) {
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
dao.Begin(db)
|
dao.Begin(db)
|
||||||
|
|||||||
@@ -171,6 +171,9 @@ func GetStoreCategories(db *DaoDB, vendorID, storeID int, level int) (cats []*Sk
|
|||||||
// 以store_sku_bind为基础来做同步,正常情况下使用
|
// 以store_sku_bind为基础来做同步,正常情况下使用
|
||||||
// 单多门店模式厂商通用
|
// 单多门店模式厂商通用
|
||||||
func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, isDirty bool) (skus []*StoreSkuSyncInfo, err error) {
|
func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, isDirty bool) (skus []*StoreSkuSyncInfo, err error) {
|
||||||
|
if vendorID < 0 {
|
||||||
|
panic("vendorID<0")
|
||||||
|
}
|
||||||
isSingleStorePF := model.MultiStoresVendorMap[vendorID] != 1
|
isSingleStorePF := model.MultiStoresVendorMap[vendorID] != 1
|
||||||
tableName := "t1"
|
tableName := "t1"
|
||||||
if !isSingleStorePF {
|
if !isSingleStorePF {
|
||||||
@@ -226,8 +229,11 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, isDirty bool)
|
|||||||
LEFT JOIN store_sku_category_map t5sku ON t2.category_id = t5sku.category_id AND t5sku.store_id = t1.store_id AND t5sku.deleted_at = ?`
|
LEFT JOIN store_sku_category_map t5sku ON t2.category_id = t5sku.category_id AND t5sku.store_id = t1.store_id AND t5sku.deleted_at = ?`
|
||||||
sqlParams = append(sqlParams, utils.DefaultTimeValue, utils.DefaultTimeValue)
|
sqlParams = append(sqlParams, utils.DefaultTimeValue, utils.DefaultTimeValue)
|
||||||
}
|
}
|
||||||
sql += " WHERE t1.store_id = ?"
|
sql += " WHERE 1 = 1"
|
||||||
sqlParams = append(sqlParams, storeID)
|
if storeID > 0 {
|
||||||
|
sql += " AND t1.store_id = ?"
|
||||||
|
sqlParams = append(sqlParams, storeID)
|
||||||
|
}
|
||||||
if isDirty {
|
if isDirty {
|
||||||
sql += " AND (t1.%s_sync_status <> 0 OR (%s.%s_id <> 0 AND t3.id IS NULL))"
|
sql += " AND (t1.%s_sync_status <> 0 OR (%s.%s_id <> 0 AND t3.id IS NULL))"
|
||||||
fmtParams = append(fmtParams, fieldPrefix, tableName, fieldPrefix)
|
fmtParams = append(fmtParams, fieldPrefix, tableName, fieldPrefix)
|
||||||
|
|||||||
Reference in New Issue
Block a user