From 67655f57e0f99e4c8f94e96ebdeb52eb404904e5 Mon Sep 17 00:00:00 2001 From: gazebo Date: Mon, 10 Sep 2018 15:17:58 +0800 Subject: [PATCH] - DeleteCategory added. --- business/jxstore/cms/cms.go | 4 ++- business/jxstore/cms/sku.go | 37 ++++++++++++++++++++++----- business/jxstore/cms/store.go | 19 +++++++------- business/model/dao/dao.go | 12 ++++++--- business/model/model.go | 7 +++++ controllers/cms_sku.go | 14 ++++++++++ routers/commentsRouter_controllers.go | 8 ++++++ 7 files changed, 81 insertions(+), 20 deletions(-) diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index 3cdfc6003..856fd7dcd 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -37,10 +37,12 @@ func (v *VendorSync) SyncCategory(categoryID int, isForce bool, userName string) err = GetPurchaseHandler(model.VendorIDJD).CreateCategory(cat, userName) } else if (cat.JdSyncStatus&model.SyncFlagModifiedMask) != 0 || isForce { // 修改 err = GetPurchaseHandler(model.VendorIDJD).UpdateCategory(cat, userName) + } else if (cat.JdSyncStatus & model.SyncFlagDeletedMask) != 0 { + err = GetPurchaseHandler(model.VendorIDJD).DeleteCategory(cat, userName) } if err == nil { cat.JdSyncStatus = 0 - _, err = dao.UpdateEntity(db, cat, "JdSyncStatus") + _, err = dao.UpdateEntity(db, cat, model.FieldJdSyncStatus) } if err != nil { break diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index e1f3faf0b..eddda17e8 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -16,10 +16,10 @@ var ( // parentID 为-1表示所有 func GetVendorCategories(vendorID int, parentID int) (vendorCats []*model.SkuVendorCategory, err error) { cond := map[string]interface{}{ - "VendorID": vendorID, + model.FieldVendorID: vendorID, } if parentID != -1 { - cond["ParentID"] = parentID + cond[model.FieldParentID] = parentID } return vendorCats, dao.GetEntities(nil, &vendorCats, cond, false) } @@ -36,7 +36,7 @@ func GetCategories(parentID int) (cats []*model.SkuCategory, err error) { if parentID == -1 { return cats, dao.GetEntities(nil, &cats, nil, false) } - return cats, dao.GetEntities(nil, &cats, utils.Params2Map("ParentID", parentID), false) + return cats, dao.GetEntities(nil, &cats, utils.Params2Map(model.FieldParentID, parentID), false) } func AddCategory(cat *model.SkuCategory, userName string) (outCat *model.SkuCategory, err error) { @@ -54,7 +54,7 @@ func UpdateCategory(categoryID int, payload map[string]interface{}, userName str cat := &model.SkuCategory{} cat.ID = categoryID valid := jxutils.NormalMakeMapByStructObject(payload, cat, userName) - valid["JdSyncStatus"] = model.SyncFlagModifiedMask + valid[model.FieldJdSyncStatus] = model.SyncFlagModifiedMask db := dao.GetDB() if num, err = dao.UpdateEntityByKV(db, cat, valid, nil); err == nil { err = CurVendorSync.SyncCategory(categoryID, false, userName) @@ -68,7 +68,7 @@ func ReorderCategories(parentID int, categoryIDs []int, userName string) (err er parentCat.ID = parentID db := dao.GetDB() if err = dao.GetEntity(db, parentCat); err == nil { - if err = dao.GetEntities(db, &cats, utils.Params2Map("ParentID", parentID), false); err == nil { + if err = dao.GetEntities(db, &cats, utils.Params2Map(model.FieldParentID, parentID), false); err == nil { catsLen := len(cats) if catsLen != len(categoryIDs) { return ErrInputCatsDoesntMatch @@ -95,5 +95,30 @@ func ReorderCategories(parentID int, categoryIDs []int, userName string) (err er func DeleteCategory(categoryID int, isForce bool, userName string) (num int64, err error) { cat := &model.SkuCategory{} cat.ID = categoryID - return dao.DeleteEntity(nil, cat, nil, userName) + var countInfos []*struct{ Ct int } + if err = dao.GetRows(nil, &countInfos, ` + SELECT COUNT(*) ct + FROM sku t1 + WHERE t1.category_id = ? + UNION ALL + SELECT COUNT(*) ct + FROM sku_name t1 + WHERE t1.category_id = ? + UNION ALL + SELECT COUNT(*) ct + FROM sku_category t1 + WHERE t1.parent_id = ? + `, categoryID, categoryID, categoryID, &countInfos); err == nil { + if countInfos[0].Ct != 0 { + return 0, errors.New("还有商品使用此类别,不能删除") + } else if countInfos[1].Ct != 0 { + return 0, errors.New("还有商品名使用此类别,不能删除") + } else if countInfos[2].Ct != 0 { + return 0, errors.New("还有商品类别使用此类别,不能删除") + } + if num, err = dao.DeleteEntity(nil, cat, nil, userName, utils.Params2Map(model.FieldJdSyncStatus, model.SyncFlagDeletedMask)); err == nil && num == 1 { + err = CurVendorSync.SyncCategory(cat.ID, false, userName) + } + } + return num, err } diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 1f1e86319..1e16de2b8 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -7,7 +7,6 @@ import ( "time" "git.rosy.net.cn/baseapi/utils" - "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler/basesch" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" @@ -187,7 +186,7 @@ func GetStores(keyword string, params map[string]interface{}, offset, pageSize i } func GetVendorStore(vendorStoreID string, vendorID int) (retVal *StoreExt, err error) { - handler := basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(vendorID) + handler := GetPurchaseHandler(vendorID) if handler != nil { result, err2 := handler.ReadStore(vendorStoreID) if err = err2; err == nil { @@ -215,7 +214,7 @@ func UpdateStore(storeID int, payload map[string]interface{}, userName string) ( db := dao.GetDB() if num, err = dao.UpdateEntityByKV(db, store, valid, nil); err == nil { dummy := &model.StoreMap{} - _, err2 := dao.UpdateEntityByKV(db, dummy, utils.Params2Map("SyncStatus", model.SyncFlagModifiedMask), utils.Params2Map("StoreID", store.ID)) + _, err2 := dao.UpdateEntityByKV(db, dummy, utils.Params2Map(model.FieldSyncStatus, model.SyncFlagModifiedMask), utils.Params2Map(model.FieldStoreID, store.ID)) if err = err2; err == nil { if err = dao.GetEntity(db, store); err == nil { err = SyncStore2Vendor(db, -1, store, false, userName) @@ -243,7 +242,7 @@ func SyncStore2Vendor(db *dao.DaoDB, vendorID int, store *model.Store, isForce b if db == nil { db = dao.GetDB() } - err = dao.GetEntities(db, &storeMaps, utils.Params2Map("StoreID", store.ID), true) + err = dao.GetEntities(db, &storeMaps, utils.Params2Map(model.FieldStoreID, store.ID), true) if err == nil { // globals.SugarLogger.Debug(utils.Format4Output(store, false)) copiedStore := *store @@ -252,7 +251,7 @@ func SyncStore2Vendor(db *dao.DaoDB, vendorID int, store *model.Store, isForce b copiedStore.Status = mergeStoreStatus(store.Status, storeMap.Status) if err = GetPurchaseHandler(storeMap.VendorID).UpdateStore(storeMap.VendorStoreID, &copiedStore, userName); err == nil { storeMap.SyncStatus = 0 - dao.UpdateEntity(db, storeMap, "SyncStatus") + dao.UpdateEntity(db, storeMap, model.FieldSyncStatus) } } } @@ -262,10 +261,10 @@ func SyncStore2Vendor(db *dao.DaoDB, vendorID int, store *model.Store, isForce b func GetStoreVendorMaps(db *dao.DaoDB, storeID int, vendorID int) (storeMaps []*model.StoreMap, err error) { cond := map[string]interface{}{ - "StoreID": storeID, + model.FieldStoreID: storeID, } if vendorID != -1 { - cond["VendorID"] = vendorID + cond[model.FieldVendorID] = vendorID } return storeMaps, dao.GetEntities(db, &storeMaps, cond, false) } @@ -285,7 +284,7 @@ func AddStoreVendorMap(db *dao.DaoDB, storeMap *model.StoreMap, userName string) func DeleteStoreVendorMap(db *dao.DaoDB, storeID, vendorID int, userName string) (num int64, err error) { storeMap := &model.StoreMap{} - return dao.DeleteEntity(db, storeMap, utils.Params2Map("StoreID", storeID, "VendorID", vendorID), "") + return dao.DeleteEntity(db, storeMap, utils.Params2Map(model.FieldStoreID, storeID, model.FieldVendorID, vendorID), "", nil) } func UpdateStoreVendorMap(db *dao.DaoDB, storeID, vendorID int, payload map[string]interface{}, userName string) (num int64, err error) { @@ -302,10 +301,10 @@ func UpdateStoreVendorMap(db *dao.DaoDB, storeID, vendorID int, payload map[stri dummyStoreMap := &model.StoreMap{} valid := jxutils.NormalMakeMapByStructObject(payload, dummyStoreMap, userName) if valid["status"] != nil { - valid["SyncStatus"] = model.SyncFlagModifiedMask + valid[model.FieldSyncStatus] = model.SyncFlagModifiedMask } globals.SugarLogger.Debug(utils.Format4Output(valid, false)) - if num, err = dao.UpdateEntityByKV(db, dummyStoreMap, valid, utils.Params2Map("StoreID", storeID, "VendorID", vendorID)); err == nil { + if num, err = dao.UpdateEntityByKV(db, dummyStoreMap, valid, utils.Params2Map(model.FieldStoreID, storeID, model.FieldVendorID, vendorID)); err == nil { if valid["status"] != nil { store := &model.Store{} store.ID = storeID diff --git a/business/model/dao/dao.go b/business/model/dao/dao.go index 4247b1f11..4a68630b4 100644 --- a/business/model/dao/dao.go +++ b/business/model/dao/dao.go @@ -147,7 +147,7 @@ func CreateEntity(db *DaoDB, item interface{}) (err error) { } // 如果logicDeletedBy不为空,表示逻辑删除,否则物理删除 -func DeleteEntity(db *DaoDB, item interface{}, conditions map[string]interface{}, logicDeletedBy string) (num int64, err error) { +func DeleteEntity(db *DaoDB, item interface{}, conditions map[string]interface{}, logicDeletedBy string, kvs map[string]interface{}) (num int64, err error) { if db == nil { db = GetDB() } @@ -161,11 +161,17 @@ func DeleteEntity(db *DaoDB, item interface{}, conditions map[string]interface{} } } if logicDeletedBy != "" { - num, err = qs.Update(utils.Params2Map(model.FieldDeletedAt, time.Now(), model.FieldUpdatedAt, time.Now(), model.FieldLastOperator, logicDeletedBy)) + qs = qs.Filter(model.FieldDeletedAt, utils.DefaultTimeValue) + updateValues := map[string]interface{}{ + model.FieldDeletedAt: time.Now(), + model.FieldUpdatedAt: time.Now(), + model.FieldLastOperator: logicDeletedBy, + } + num, err = qs.Update(utils.MergeMaps(updateValues, kvs)) } else { num, err = qs.Delete() } return err }, reflect.TypeOf(item).Name()) - return 0, err + return num, err } diff --git a/business/model/model.go b/business/model/model.go index 95ab0744c..16ca8afeb 100644 --- a/business/model/model.go +++ b/business/model/model.go @@ -6,9 +6,16 @@ import ( const ( FieldID = "ID" + FieldParentID = "ParentID" FieldDeletedAt = "DeletedAt" FieldUpdatedAt = "UpdatedAt" FieldLastOperator = "LastOperator" + FieldSyncStatus = "SyncStatuss" + FieldJdSyncStatus = "JdSyncStatus" + + FieldVendorID = "VendorID" + FieldStoreID = "StoreID" + FieldVendorStoreID = "VendorStoreID" ) type ModelIDCUL struct { diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go index 5191b5ca9..476564ffc 100644 --- a/controllers/cms_sku.go +++ b/controllers/cms_sku.go @@ -111,3 +111,17 @@ func (c *SkuController) ReorderCategories() { return retVal, "", err }) } + +// @Title 删除商品类别 +// @Description 删除商品类别,只有无商品且无子类别的才能删除 +// @Param token header string true "认证token" +// @Param categoryID query int true "商品类别ID" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /DeleteCategory [delete] +func (c *SkuController) DeleteCategory() { + c.callDeleteCategory(func(params *tSkuDeleteCategoryParams) (retVal interface{}, errCode string, err error) { + retVal, err = cms.DeleteCategory(params.CategoryID, false, GetUserNameFromToken(params.Token)) + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index cdaec9741..79daae206 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -135,6 +135,14 @@ func init() { MethodParams: param.Make(), Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], + beego.ControllerComments{ + Method: "DeleteCategory", + Router: `/DeleteCategory`, + AllowHTTPMethods: []string{"delete"}, + MethodParams: param.Make(), + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], beego.ControllerComments{ Method: "GetCategories",