From 84ea7d20ba4a7cce0e71b0edcaf6082142e352f3 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 13 Sep 2018 23:11:02 +0800 Subject: [PATCH] - UpdateStoreSku --- business/jxstore/cms/store_sku.go | 90 +++++++++++++++++++++++++++++-- business/jxstore/cms/sync.go | 4 ++ business/model/model.go | 20 +++---- controllers/cms_store_sku.go | 19 +++++++ 4 files changed, 119 insertions(+), 14 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 0550a9417..ecb9432fb 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2,6 +2,7 @@ package cms import ( "strconv" + "strings" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/model" @@ -19,6 +20,14 @@ type StoreSkuNamesInfo struct { SkuNames []*StoreSkuNameExt `json:"skuNames"` } +type StoreSkuBindInfo struct { + SkuID int `json:"skuID"` + SubStoreID int `json:"subStoreID"` + IsFocus int `json:"isFocus"` // -1:不关注,0:忽略,1:关注 + IsSale int `json:"isSale"` // -1:不可售,0:忽略,1:可售 + Price int `json:"price"` +} + func GetStoreSkus(storeID int, keyword string, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *StoreSkuNamesInfo, err error) { db := dao.GetDB() sql := ` @@ -153,10 +162,81 @@ func GetStoreSkus(storeID int, keyword string, params map[string]interface{}, of return skuNamesInfo, err } -func SetStoreSkuStatus(storeID int, isSale bool, userName string) (num int64, err error) { - return num, err -} - -func SetStoreFocusSku(storeID int, skuID int, isFocus, isSale bool, userName string) (num int64, err error) { +func UpdateStoreSku(storeID int, skuBinds []*StoreSkuBindInfo, userName string) (num int64, err error) { + db := dao.GetDB() + var existBinds []*model.StoreSkuBind + skuIDs := make([]int, len(skuBinds)) + placeHolders := make([]string, len(skuBinds)) + for k, v := range skuBinds { + skuIDs[k] = v.SkuID + placeHolders[k] = "?" + } + questions := "(" + strings.Join(placeHolders, ",") + ")" + if err = dao.GetRows(db, &existBinds, ` + SELECT * + FROM store_sku_bind + WHERE store_id = ? + AND sku_id IN `+questions, storeID, skuIDs); err == nil { + existBindsMap := make(map[int]*model.StoreSkuBind, len(existBinds)) + for _, v := range existBinds { + existBindsMap[v.SkuID] = v + } + dao.Begin(db) + for _, v := range skuBinds { + skuBind, ok := existBindsMap[v.SkuID] + if !ok { + if v.IsFocus == 1 { + skuBind = &model.StoreSkuBind{ + StoreID: storeID, + SkuID: v.SkuID, + SubStoreID: v.SubStoreID, // todo 这个应该从用户信息中自动获得 + } + dao.WrapAddIDCULDEntity(skuBind, userName) + } + } else { + if v.IsFocus != -1 { + dao.WrapUpdateULEntity(skuBind, userName) + } + } + if skuBind != nil { + if v.Price != 0 { + skuBind.Price = v.Price + } + if v.IsSale != 0 { + if v.IsSale == 1 { + skuBind.Status = model.StoreSkuBindStatusNormal + } else { + skuBind.Status = model.StoreSkuBindStatusDontSale + } + } + if ok { + if v.IsFocus == -1 { + _, err = dao.DeleteEntityLogically(db, skuBind, nil, userName, map[string]interface{}{ + model.FieldJdSyncStatus: model.SyncFlagDeletedMask, + model.FieldElmSyncStatus: model.SyncFlagDeletedMask, + model.FieldEbaiSyncStatus: model.SyncFlagDeletedMask, + }) + } else { + skuBind.DeletedAt = utils.DefaultTimeValue + skuBind.JdSyncStatus = model.SyncFlagModifiedMask + skuBind.ElmSyncStatus = model.SyncFlagModifiedMask + skuBind.EbaiSyncStatus = model.SyncFlagModifiedMask + _, err = dao.UpdateEntity(db, skuBind) + } + } else { + skuBind.JdSyncStatus = model.SyncFlagNewMask + skuBind.ElmSyncStatus = model.SyncFlagNewMask + skuBind.EbaiSyncStatus = model.SyncFlagNewMask + err = dao.CreateEntity(db, skuBind) + } + } + if err != nil { + dao.Rollback(db) + return num, err + } + } + dao.Commit(db) + err = CurVendorSync.SyncStoreSku(db, storeID, -1, false, userName) + } return num, err } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index bc87fdb72..5b6d4a6b2 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -97,3 +97,7 @@ func (v *VendorSync) SyncSku(db *dao.DaoDB, nameID, skuID int, isForce bool, use } return err } + +func (v *VendorSync) SyncStoreSku(db *dao.DaoDB, storeID, skuID int, isForce bool, userName string) (err error) { + return err +} diff --git a/business/model/model.go b/business/model/model.go index 477fd954c..174b308d5 100644 --- a/business/model/model.go +++ b/business/model/model.go @@ -5,15 +5,17 @@ import ( ) const ( - FieldID = "ID" - FieldParentID = "ParentID" - FieldDeletedAt = "DeletedAt" - FieldCreatedAt = "CreatedAt" - FieldUpdatedAt = "UpdatedAt" - FieldLastOperator = "LastOperator" - FieldStatus = "Status" - FieldSyncStatus = "SyncStatus" - FieldJdSyncStatus = "JdSyncStatus" + FieldID = "ID" + FieldParentID = "ParentID" + FieldDeletedAt = "DeletedAt" + FieldCreatedAt = "CreatedAt" + FieldUpdatedAt = "UpdatedAt" + FieldLastOperator = "LastOperator" + FieldStatus = "Status" + FieldSyncStatus = "SyncStatus" + FieldJdSyncStatus = "JdSyncStatus" + FieldElmSyncStatus = "ElmSyncStatus" + FieldEbaiSyncStatus = "EbaiSyncStatus" FieldVendorID = "VendorID" FieldStoreID = "StoreID" diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index 905c31637..fabe870cc 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -1,6 +1,7 @@ package controllers import ( + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxstore/cms" "github.com/astaxie/beego" ) @@ -34,3 +35,21 @@ func (c *StoreSkuController) GetStoreSkus() { return retVal, "", err }) } + +// @Title 修改商家商品绑定 +// @Description 修改商家商品绑定 +// @Param token header string true "认证token" +// @Param storeID formData int true "需要修改的商品名ID,payload中的相应数据会被忽略" +// @Param payload formData string true "json数据,StoreSkuBindInfo对象数组 +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /UpdateStoreSku [put] +func (c *StoreSkuController) UpdateStoreSku() { + c.callUpdateStoreSku(func(params *tStoreSkuUpdateStoreSkuParams) (retVal interface{}, errCode string, err error) { + var skuBinds []*cms.StoreSkuBindInfo + if err = utils.UnmarshalUseNumber([]byte(params.Payload), &skuBinds); err == nil { + retVal, err = cms.UpdateStoreSku(params.StoreID, skuBinds, GetUserNameFromToken(params.Token)) + } + return retVal, "", err + }) +}