- CopyStoreSkus
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -180,8 +180,8 @@ func (p *PurchaseHandler) syncOneStoreSkus(db *dao.DaoDB, storeID int, skuIDs []
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) SyncStoreCategories(db *dao.DaoDB, storeIDs []int, userName string) (err error) {
|
||||
globals.SugarLogger.Debugf("SyncStoreCategories storeIDs:%d, userName:%s", storeIDs, userName)
|
||||
func (p *PurchaseHandler) SyncStoresCategories(db *dao.DaoDB, storeIDs []int, userName string) (err error) {
|
||||
globals.SugarLogger.Debugf("SyncStoresCategories storeIDs:%d, userName:%s", storeIDs, userName)
|
||||
|
||||
for _, storeID := range storeIDs {
|
||||
if err = p.SyncOneStoreCategories(db, storeID, userName); err != nil {
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
)
|
||||
|
||||
func TestSyncStoreSkus(t *testing.T) {
|
||||
func TestSyncStoresSkus(t *testing.T) {
|
||||
db := dao.GetDB()
|
||||
err := new(PurchaseHandler).SyncStoresSkus(db, []int{100077}, []int{7}, false, "autotest")
|
||||
if err != nil {
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
)
|
||||
|
||||
func (p *PurchaseHandler) SyncStoreCategories(db *dao.DaoDB, storeIDs []int, userName string) (err error) {
|
||||
func (p *PurchaseHandler) SyncStoresCategories(db *dao.DaoDB, storeIDs []int, userName string) (err error) {
|
||||
return nil
|
||||
}
|
||||
func (p *PurchaseHandler) ReadStoreCategories(storeID int) (cats []*model.SkuCategory, err error) {
|
||||
|
||||
@@ -27,7 +27,7 @@ func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs [
|
||||
if len(skuIDs) < MaxSkuBatchSize {
|
||||
parallelCount = 10
|
||||
}
|
||||
task := tasksch.RunManagedTask("SyncStoreSkus", false, nil, parallelCount, 1, userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
task := tasksch.RunManagedTask("SyncStoresSkus", false, nil, parallelCount, 1, userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
storeID := batchItemList[0].(int)
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
|
||||
@@ -122,3 +122,22 @@ func (c *StoreSkuController) UpdateStoresSkus() {
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 拷贝门店SKU信息
|
||||
// @Description 拷贝门店SKU信息
|
||||
// @Param token header string true "认证token"
|
||||
// @Param fromStoreID formData int true "源门店ID"
|
||||
// @Param toStoreID formData int true "目标门店ID"
|
||||
// @Param copyMode formData string true "拷贝模式,fresh:目标门店数据全部清除后拷贝,update:确保指定的源数据全部拷贝,已有的忽略"
|
||||
// @Param pricePercentage formData int false "价格调整百分比,缺省为100%"
|
||||
// @Param categoryIDs formData string false "json数据,skuName所属的类别,[1,2,3]"
|
||||
// @Param skuIDs formData string false "json数据,skuID列表,[1,2,3]"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /CopyStoreSkus [post]
|
||||
func (c *StoreSkuController) CopyStoreSkus() {
|
||||
c.callCopyStoreSkus(func(params *tStoreSkuCopyStoreSkusParams) (retVal interface{}, errCode string, err error) {
|
||||
retVal, err = cms.CopyStoreSkus(params.FromStoreID, params.ToStoreID, params.CopyMode, params.MapData, GetUserNameFromToken(params.Token))
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
@@ -423,6 +423,14 @@ func init() {
|
||||
MethodParams: param.Make(),
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
|
||||
beego.ControllerComments{
|
||||
Method: "CopyStoreSkus",
|
||||
Router: `/CopyStoreSkus`,
|
||||
AllowHTTPMethods: []string{"post"},
|
||||
MethodParams: param.Make(),
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
|
||||
beego.ControllerComments{
|
||||
Method: "GetStoreSkus",
|
||||
@@ -433,8 +441,8 @@ func init() {
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
|
||||
beego.ControllerComments{
|
||||
Method: "SyncStoreSkus",
|
||||
Router: `/SyncStoreSkus`,
|
||||
Method: "SyncStoresSkus",
|
||||
Router: `/SyncStoresSkus`,
|
||||
AllowHTTPMethods: []string{"put"},
|
||||
MethodParams: param.Make(),
|
||||
Params: nil})
|
||||
|
||||
Reference in New Issue
Block a user