- CopyStoreSkus

This commit is contained in:
gazebo
2018-10-11 17:40:24 +08:00
parent 5ec12fbbf1
commit e1dd674d9b
7 changed files with 126 additions and 7 deletions

View File

@@ -10,6 +10,12 @@ import (
"git.rosy.net.cn/jx-callback/globals"
)
const (
CopyStoreSkuModeFresh = "fresh"
CopyStoreSkuModeUpdate = "update"
// CopyStoreSkuModeAdd = "add"
)
// GetStoreSkus用
type StoreSkuNameExt struct {
model.SkuName
@@ -383,6 +389,92 @@ func UpdateStoresSkus(storeIDs []int, skuBindInfos []*StoreSkuBindInfo, userName
return int64(len(skuIDs)), err
}
func CopyStoreSkus(fromStoreID, toStoreID int, copyMode string, params map[string]interface{}, userName string) (num int64, err error) {
db := dao.GetDB()
sqlCatAndSku := ""
sqlCatAndSkuParams := make([]interface{}, 0)
if params["categoryIDs"] != nil {
var cats []int
if err = utils.UnmarshalUseNumber([]byte(params["categoryIDs"].(string)), &cats); err != nil {
return 0, err
}
if len(cats) > 0 {
sqlCatAndSku += " AND t3.category_id IN (" + dao.GenQuestionMarks(len(cats)) + ")"
sqlCatAndSkuParams = append(sqlCatAndSkuParams, cats)
}
}
if params["skuIDs"] != nil {
var skus []int
if err = utils.UnmarshalUseNumber([]byte(params["skuIDs"].(string)), &skus); err != nil {
return 0, err
}
if len(skus) > 0 {
sqlCatAndSku += " AND t1.sku_id IN (" + dao.GenQuestionMarks(len(skus)) + ")"
sqlCatAndSkuParams = append(sqlCatAndSkuParams, skus)
}
}
pricePercentage := 100
if params["pricePercentage"] != nil {
pricePercentage = params["pricePercentage"].(int)
}
dao.Begin(db)
defer func() {
dao.Rollback(db)
if r := recover(); r != nil {
panic(r)
}
}()
if copyMode == CopyStoreSkuModeFresh || copyMode == CopyStoreSkuModeUpdate {
sqlDelete := `
DELETE t1
FROM store_sku_bind t1
JOIN sku t2 ON t1.sku_id = t2.id
JOIN sku_name t3 ON t2.name_id = t3.id
WHERE t1.store_id = ? AND t1.deleted_at = ?
`
sqlDeleteParams := []interface{}{
toStoreID,
utils.DefaultTimeValue,
}
if copyMode == CopyStoreSkuModeUpdate {
sqlDelete += sqlCatAndSku
sqlDeleteParams = append(sqlDeleteParams, sqlCatAndSkuParams)
}
if _, err = dao.ExecuteSQL(db, sqlDelete, sqlDeleteParams); err != nil {
return 0, err
}
}
sql := `
INSERT INTO store_sku_bind(created_at, updated_at, last_operator, deleted_at, store_id, sku_id, sub_store_id, price, unit_price, status, jd_sync_status, elm_sync_status, ebai_sync_status)
SELECT NOW(), NOW(), ?, ?,
?, t1.sku_id, 0, t1.price * ? / 100, t1.unit_price * ? / 100, t1.status, ?, ?, ?
FROM store_sku_bind t1
JOIN sku t2 ON t1.sku_id = t2.id
JOIN sku_name t3 ON t2.name_id = t3.id
WHERE t1.store_id = ? AND t1.deleted_at = ?
`
sqlParams := []interface{}{
userName,
utils.DefaultTimeValue,
toStoreID,
pricePercentage,
pricePercentage,
model.SyncFlagNewMask,
model.SyncFlagNewMask,
model.SyncFlagNewMask,
fromStoreID,
utils.DefaultTimeValue,
}
sql += sqlCatAndSku
sqlParams = append(sqlParams, sqlCatAndSkuParams)
num, err = dao.ExecuteSQL(db, sql, sqlParams)
if err == nil {
dao.Commit(db)
}
return num, err
}
func setStoreSkuBindStatus(skuBind *model.StoreSkuBind, status int8) {
skuBind.JdSyncStatus |= status
skuBind.ElmSyncStatus |= status