- DeleteCategory added.
This commit is contained in:
@@ -37,10 +37,12 @@ func (v *VendorSync) SyncCategory(categoryID int, isForce bool, userName string)
|
|||||||
err = GetPurchaseHandler(model.VendorIDJD).CreateCategory(cat, userName)
|
err = GetPurchaseHandler(model.VendorIDJD).CreateCategory(cat, userName)
|
||||||
} else if (cat.JdSyncStatus&model.SyncFlagModifiedMask) != 0 || isForce { // 修改
|
} else if (cat.JdSyncStatus&model.SyncFlagModifiedMask) != 0 || isForce { // 修改
|
||||||
err = GetPurchaseHandler(model.VendorIDJD).UpdateCategory(cat, userName)
|
err = GetPurchaseHandler(model.VendorIDJD).UpdateCategory(cat, userName)
|
||||||
|
} else if (cat.JdSyncStatus & model.SyncFlagDeletedMask) != 0 {
|
||||||
|
err = GetPurchaseHandler(model.VendorIDJD).DeleteCategory(cat, userName)
|
||||||
}
|
}
|
||||||
if err == nil {
|
if err == nil {
|
||||||
cat.JdSyncStatus = 0
|
cat.JdSyncStatus = 0
|
||||||
_, err = dao.UpdateEntity(db, cat, "JdSyncStatus")
|
_, err = dao.UpdateEntity(db, cat, model.FieldJdSyncStatus)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
break
|
break
|
||||||
|
|||||||
@@ -16,10 +16,10 @@ var (
|
|||||||
// parentID 为-1表示所有
|
// parentID 为-1表示所有
|
||||||
func GetVendorCategories(vendorID int, parentID int) (vendorCats []*model.SkuVendorCategory, err error) {
|
func GetVendorCategories(vendorID int, parentID int) (vendorCats []*model.SkuVendorCategory, err error) {
|
||||||
cond := map[string]interface{}{
|
cond := map[string]interface{}{
|
||||||
"VendorID": vendorID,
|
model.FieldVendorID: vendorID,
|
||||||
}
|
}
|
||||||
if parentID != -1 {
|
if parentID != -1 {
|
||||||
cond["ParentID"] = parentID
|
cond[model.FieldParentID] = parentID
|
||||||
}
|
}
|
||||||
return vendorCats, dao.GetEntities(nil, &vendorCats, cond, false)
|
return vendorCats, dao.GetEntities(nil, &vendorCats, cond, false)
|
||||||
}
|
}
|
||||||
@@ -36,7 +36,7 @@ func GetCategories(parentID int) (cats []*model.SkuCategory, err error) {
|
|||||||
if parentID == -1 {
|
if parentID == -1 {
|
||||||
return cats, dao.GetEntities(nil, &cats, nil, false)
|
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) {
|
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 := &model.SkuCategory{}
|
||||||
cat.ID = categoryID
|
cat.ID = categoryID
|
||||||
valid := jxutils.NormalMakeMapByStructObject(payload, cat, userName)
|
valid := jxutils.NormalMakeMapByStructObject(payload, cat, userName)
|
||||||
valid["JdSyncStatus"] = model.SyncFlagModifiedMask
|
valid[model.FieldJdSyncStatus] = model.SyncFlagModifiedMask
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
if num, err = dao.UpdateEntityByKV(db, cat, valid, nil); err == nil {
|
if num, err = dao.UpdateEntityByKV(db, cat, valid, nil); err == nil {
|
||||||
err = CurVendorSync.SyncCategory(categoryID, false, userName)
|
err = CurVendorSync.SyncCategory(categoryID, false, userName)
|
||||||
@@ -68,7 +68,7 @@ func ReorderCategories(parentID int, categoryIDs []int, userName string) (err er
|
|||||||
parentCat.ID = parentID
|
parentCat.ID = parentID
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
if err = dao.GetEntity(db, parentCat); err == nil {
|
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)
|
catsLen := len(cats)
|
||||||
if catsLen != len(categoryIDs) {
|
if catsLen != len(categoryIDs) {
|
||||||
return ErrInputCatsDoesntMatch
|
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) {
|
func DeleteCategory(categoryID int, isForce bool, userName string) (num int64, err error) {
|
||||||
cat := &model.SkuCategory{}
|
cat := &model.SkuCategory{}
|
||||||
cat.ID = categoryID
|
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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"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/jxutils"
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
"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) {
|
func GetVendorStore(vendorStoreID string, vendorID int) (retVal *StoreExt, err error) {
|
||||||
handler := basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(vendorID)
|
handler := GetPurchaseHandler(vendorID)
|
||||||
if handler != nil {
|
if handler != nil {
|
||||||
result, err2 := handler.ReadStore(vendorStoreID)
|
result, err2 := handler.ReadStore(vendorStoreID)
|
||||||
if err = err2; err == nil {
|
if err = err2; err == nil {
|
||||||
@@ -215,7 +214,7 @@ func UpdateStore(storeID int, payload map[string]interface{}, userName string) (
|
|||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
if num, err = dao.UpdateEntityByKV(db, store, valid, nil); err == nil {
|
if num, err = dao.UpdateEntityByKV(db, store, valid, nil); err == nil {
|
||||||
dummy := &model.StoreMap{}
|
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 = err2; err == nil {
|
||||||
if err = dao.GetEntity(db, store); err == nil {
|
if err = dao.GetEntity(db, store); err == nil {
|
||||||
err = SyncStore2Vendor(db, -1, store, false, userName)
|
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 {
|
if db == nil {
|
||||||
db = dao.GetDB()
|
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 {
|
if err == nil {
|
||||||
// globals.SugarLogger.Debug(utils.Format4Output(store, false))
|
// globals.SugarLogger.Debug(utils.Format4Output(store, false))
|
||||||
copiedStore := *store
|
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)
|
copiedStore.Status = mergeStoreStatus(store.Status, storeMap.Status)
|
||||||
if err = GetPurchaseHandler(storeMap.VendorID).UpdateStore(storeMap.VendorStoreID, &copiedStore, userName); err == nil {
|
if err = GetPurchaseHandler(storeMap.VendorID).UpdateStore(storeMap.VendorStoreID, &copiedStore, userName); err == nil {
|
||||||
storeMap.SyncStatus = 0
|
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) {
|
func GetStoreVendorMaps(db *dao.DaoDB, storeID int, vendorID int) (storeMaps []*model.StoreMap, err error) {
|
||||||
cond := map[string]interface{}{
|
cond := map[string]interface{}{
|
||||||
"StoreID": storeID,
|
model.FieldStoreID: storeID,
|
||||||
}
|
}
|
||||||
if vendorID != -1 {
|
if vendorID != -1 {
|
||||||
cond["VendorID"] = vendorID
|
cond[model.FieldVendorID] = vendorID
|
||||||
}
|
}
|
||||||
return storeMaps, dao.GetEntities(db, &storeMaps, cond, false)
|
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) {
|
func DeleteStoreVendorMap(db *dao.DaoDB, storeID, vendorID int, userName string) (num int64, err error) {
|
||||||
storeMap := &model.StoreMap{}
|
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) {
|
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{}
|
dummyStoreMap := &model.StoreMap{}
|
||||||
valid := jxutils.NormalMakeMapByStructObject(payload, dummyStoreMap, userName)
|
valid := jxutils.NormalMakeMapByStructObject(payload, dummyStoreMap, userName)
|
||||||
if valid["status"] != nil {
|
if valid["status"] != nil {
|
||||||
valid["SyncStatus"] = model.SyncFlagModifiedMask
|
valid[model.FieldSyncStatus] = model.SyncFlagModifiedMask
|
||||||
}
|
}
|
||||||
globals.SugarLogger.Debug(utils.Format4Output(valid, false))
|
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 {
|
if valid["status"] != nil {
|
||||||
store := &model.Store{}
|
store := &model.Store{}
|
||||||
store.ID = storeID
|
store.ID = storeID
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ func CreateEntity(db *DaoDB, item interface{}) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 如果logicDeletedBy不为空,表示逻辑删除,否则物理删除
|
// 如果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 {
|
if db == nil {
|
||||||
db = GetDB()
|
db = GetDB()
|
||||||
}
|
}
|
||||||
@@ -161,11 +161,17 @@ func DeleteEntity(db *DaoDB, item interface{}, conditions map[string]interface{}
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if logicDeletedBy != "" {
|
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 {
|
} else {
|
||||||
num, err = qs.Delete()
|
num, err = qs.Delete()
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}, reflect.TypeOf(item).Name())
|
}, reflect.TypeOf(item).Name())
|
||||||
return 0, err
|
return num, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,9 +6,16 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
FieldID = "ID"
|
FieldID = "ID"
|
||||||
|
FieldParentID = "ParentID"
|
||||||
FieldDeletedAt = "DeletedAt"
|
FieldDeletedAt = "DeletedAt"
|
||||||
FieldUpdatedAt = "UpdatedAt"
|
FieldUpdatedAt = "UpdatedAt"
|
||||||
FieldLastOperator = "LastOperator"
|
FieldLastOperator = "LastOperator"
|
||||||
|
FieldSyncStatus = "SyncStatuss"
|
||||||
|
FieldJdSyncStatus = "JdSyncStatus"
|
||||||
|
|
||||||
|
FieldVendorID = "VendorID"
|
||||||
|
FieldStoreID = "StoreID"
|
||||||
|
FieldVendorStoreID = "VendorStoreID"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ModelIDCUL struct {
|
type ModelIDCUL struct {
|
||||||
|
|||||||
@@ -111,3 +111,17 @@ func (c *SkuController) ReorderCategories() {
|
|||||||
return retVal, "", err
|
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
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -135,6 +135,14 @@ func init() {
|
|||||||
MethodParams: param.Make(),
|
MethodParams: param.Make(),
|
||||||
Params: nil})
|
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.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "GetCategories",
|
Method: "GetCategories",
|
||||||
|
|||||||
Reference in New Issue
Block a user