From e1dd674d9bca9c936698839b79a51b4b75c8ddcc Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 11 Oct 2018 17:40:24 +0800 Subject: [PATCH] - CopyStoreSkus --- business/jxstore/cms/store_sku.go | 92 +++++++++++++++++++ business/partner/purchase/ebai/store_sku.go | 4 +- .../partner/purchase/ebai/store_sku_test.go | 2 +- business/partner/purchase/elm/store_sku.go | 2 +- business/partner/purchase/jd/store_sku.go | 2 +- controllers/cms_store_sku.go | 19 ++++ routers/commentsRouter_controllers.go | 12 ++- 7 files changed, 126 insertions(+), 7 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 6fce78896..92059a597 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -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 diff --git a/business/partner/purchase/ebai/store_sku.go b/business/partner/purchase/ebai/store_sku.go index 071d78c8a..620cb32c8 100644 --- a/business/partner/purchase/ebai/store_sku.go +++ b/business/partner/purchase/ebai/store_sku.go @@ -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 { diff --git a/business/partner/purchase/ebai/store_sku_test.go b/business/partner/purchase/ebai/store_sku_test.go index 1bcc70445..d10b43e32 100644 --- a/business/partner/purchase/ebai/store_sku_test.go +++ b/business/partner/purchase/ebai/store_sku_test.go @@ -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 { diff --git a/business/partner/purchase/elm/store_sku.go b/business/partner/purchase/elm/store_sku.go index 4742f29d2..e6fd4e091 100644 --- a/business/partner/purchase/elm/store_sku.go +++ b/business/partner/purchase/elm/store_sku.go @@ -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) { diff --git a/business/partner/purchase/jd/store_sku.go b/business/partner/purchase/jd/store_sku.go index f28866eff..6e6f06cbf 100644 --- a/business/partner/purchase/jd/store_sku.go +++ b/business/partner/purchase/jd/store_sku.go @@ -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, diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index ab98ce97e..e5f765aca 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -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 + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index fd4bfaa93..d4d1048f5 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -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})