diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index 56107de17..3cdfc6003 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -27,11 +27,11 @@ func GetPurchaseHandler(vendorID int) partner.IPurchasePlatformHandler { func (v *VendorSync) SyncCategory(categoryID int, isForce bool, userName string) (err error) { db := dao.GetDB() cats := []*model.SkuCategory{} + cond := make(map[string]interface{}) if categoryID != 0 { - err = dao.GetRows(db, &cats, "SELECT * FROM sku_category WHERE id = ?", categoryID) - } else { - err = dao.GetRows(db, &cats, "SELECT * FROM sku_category") + cond["ID"] = categoryID } + err = dao.GetEntities(db, &cats, cond, true) for _, cat := range cats { if (cat.JdSyncStatus & model.SyncFlagNewMask) != 0 { // 新增 err = GetPurchaseHandler(model.VendorIDJD).CreateCategory(cat, userName) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 37f128862..e1f3faf0b 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -3,6 +3,7 @@ package cms import ( "errors" + "git.rosy.net.cn/baseapi/utils" "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" @@ -13,11 +14,14 @@ var ( ) // parentID 为-1表示所有 -func GetVendorCategories(vendorID int, parentID int) (cats []*model.SkuVendorCategory, err error) { - if parentID == -1 { - return cats, dao.GetRows(nil, &cats, "SELECT * FROM sku_vendor_category WHERE vendor_id = ?", vendorID) +func GetVendorCategories(vendorID int, parentID int) (vendorCats []*model.SkuVendorCategory, err error) { + cond := map[string]interface{}{ + "VendorID": vendorID, } - return cats, dao.GetRows(nil, &cats, "SELECT * FROM sku_vendor_category WHERE vendor_id = ? AND parent_id = ?", vendorID, parentID) + if parentID != -1 { + cond["ParentID"] = parentID + } + return vendorCats, dao.GetEntities(nil, &vendorCats, cond, false) } func GetSkuMetaInfo() (*model.SkuMetaInfo, error) { @@ -30,14 +34,15 @@ func GetSkuMetaInfo() (*model.SkuMetaInfo, error) { // parentID 为-1表示所有 func GetCategories(parentID int) (cats []*model.SkuCategory, err error) { if parentID == -1 { - return cats, dao.GetRows(nil, &cats, "SELECT * FROM sku_category") + return cats, dao.GetEntities(nil, &cats, nil, false) } - return cats, dao.GetRows(nil, &cats, "SELECT * FROM sku_category WHERE parent_id = ?", parentID) + return cats, dao.GetEntities(nil, &cats, utils.Params2Map("ParentID", parentID), false) } func AddCategory(cat *model.SkuCategory, userName string) (outCat *model.SkuCategory, err error) { cat.ID = 0 cat.JdSyncStatus = model.SyncFlagNewMask + cat.DeletedAt = utils.DefaultTimeValue if err = dao.CreateEntity(nil, cat); err == nil { outCat = cat err = CurVendorSync.SyncCategory(cat.ID, false, userName) @@ -63,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.GetRows(db, &cats, "SELECT * FROM sku_category WHERE parent_id = ?", parentID); err == nil { + if err = dao.GetEntities(db, &cats, utils.Params2Map("ParentID", parentID), false); err == nil { catsLen := len(cats) if catsLen != len(categoryIDs) { return ErrInputCatsDoesntMatch @@ -86,3 +91,9 @@ func ReorderCategories(parentID int, categoryIDs []int, userName string) (err er } return err } + +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) +} diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 4b7910888..1f1e86319 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -237,10 +237,13 @@ func CreateStore(store *model.Store, userName string) (id int, err error) { } func SyncStore2Vendor(db *dao.DaoDB, vendorID int, store *model.Store, isForce bool, userName string) (err error) { + var ( + storeMaps []*model.StoreMap + ) if db == nil { db = dao.GetDB() } - storeMaps, err := GetStoreVendorMaps(db, store.ID, -1) + err = dao.GetEntities(db, &storeMaps, utils.Params2Map("StoreID", store.ID), true) if err == nil { // globals.SugarLogger.Debug(utils.Format4Output(store, false)) copiedStore := *store @@ -258,12 +261,13 @@ 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) { - if vendorID == -1 { - err = dao.GetRows(db, &storeMaps, "SELECT * FROM store_map WHERE store_id = ?", storeID) - } else { - err = dao.GetRows(db, &storeMaps, "SELECT * FROM store_map WHERE store_id = ? AND vendor_id = ?", storeID, vendorID) + cond := map[string]interface{}{ + "StoreID": storeID, } - return storeMaps, err + if vendorID != -1 { + cond["VendorID"] = vendorID + } + return storeMaps, dao.GetEntities(db, &storeMaps, cond, false) } func AddStoreVendorMap(db *dao.DaoDB, storeMap *model.StoreMap, userName string) (outStoreMap *model.StoreMap, err error) { @@ -281,7 +285,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("StoreID", storeID, "VendorID", vendorID), "") } func UpdateStoreVendorMap(db *dao.DaoDB, storeID, vendorID int, payload map[string]interface{}, userName string) (num int64, err error) { diff --git a/business/model/dao/dao.go b/business/model/dao/dao.go index 3f6fd9f56..4247b1f11 100644 --- a/business/model/dao/dao.go +++ b/business/model/dao/dao.go @@ -2,9 +2,11 @@ package dao import ( "reflect" + "time" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils" + "git.rosy.net.cn/jx-callback/business/model" "github.com/astaxie/beego/orm" ) @@ -79,6 +81,30 @@ func GetEntity(db *DaoDB, item interface{}, cols ...string) (err error) { return err } +func GetEntities(db *DaoDB, item interface{}, conditions map[string]interface{}, isIncludeDeleted bool) (err error) { + if db == nil { + db = GetDB() + } + err = utils.CallFuncLogError(func() error { + typeInfo := reflect.TypeOf(item).Elem().Elem() + if typeInfo.Kind() == reflect.Ptr { + typeInfo = typeInfo.Elem() + } + qs := db.db.QueryTable(reflect.New(typeInfo).Interface()) + for k, v := range conditions { + qs = qs.Filter(k, v) + } + if !isIncludeDeleted { + if _, ok := typeInfo.FieldByName(model.FieldDeletedAt); ok { + qs = qs.Filter(model.FieldDeletedAt, utils.DefaultTimeValue) + } + } + _, err = qs.All(item) + return err + }, reflect.TypeOf(item).Name()) + return err +} + func UpdateEntity(db *DaoDB, item interface{}, cols ...string) (num int64, err error) { if db == nil { db = GetDB() @@ -97,7 +123,7 @@ func UpdateEntityByKV(db *DaoDB, item interface{}, kvs map[string]interface{}, c err = utils.CallFuncLogError(func() error { qs := db.db.QueryTable(item) if conditions == nil { - qs = qs.Filter("id", jxutils.GetObjFieldByName(item, "ID")) + qs = qs.Filter(model.FieldID, jxutils.GetObjFieldByName(item, model.FieldID)) } else { for k, v := range conditions { qs = qs.Filter(k, v) @@ -120,18 +146,23 @@ func CreateEntity(db *DaoDB, item interface{}) (err error) { return err } -func DeleteEntity(db *DaoDB, item interface{}, conditions map[string]interface{}) (num int64, err error) { +// 如果logicDeletedBy不为空,表示逻辑删除,否则物理删除 +func DeleteEntity(db *DaoDB, item interface{}, conditions map[string]interface{}, logicDeletedBy string) (num int64, err error) { if db == nil { db = GetDB() } err = utils.CallFuncLogError(func() error { + qs := db.db.QueryTable(item) if len(conditions) == 0 { - num, err = db.db.Delete(item) + qs = qs.Filter("ID", jxutils.GetObjFieldByName(item, model.FieldID)) } else { - qs := db.db.QueryTable(item) for k, v := range conditions { qs = qs.Filter(k, v) } + } + if logicDeletedBy != "" { + num, err = qs.Update(utils.Params2Map(model.FieldDeletedAt, time.Now(), model.FieldUpdatedAt, time.Now(), model.FieldLastOperator, logicDeletedBy)) + } else { num, err = qs.Delete() } return err diff --git a/business/model/model.go b/business/model/model.go index 7545d5895..95ab0744c 100644 --- a/business/model/model.go +++ b/business/model/model.go @@ -4,6 +4,13 @@ import ( "time" ) +const ( + FieldID = "ID" + FieldDeletedAt = "DeletedAt" + FieldUpdatedAt = "UpdatedAt" + FieldLastOperator = "LastOperator" +) + type ModelIDCUL struct { ID int `orm:"column(id)" json:"id"` CreatedAt time.Time `orm:"auto_now_add;type(datetime)" json:"createdAt"` @@ -11,6 +18,14 @@ type ModelIDCUL struct { LastOperator string `orm:"size(32)" json:"lastOperator"` // 最后操作员 } +type ModelIDCULD struct { + ID int `orm:"column(id)" json:"id"` + CreatedAt time.Time `orm:"auto_now_add;type(datetime)" json:"createdAt"` + UpdatedAt time.Time `orm:"auto_now;type(datetime)" json:"updatedAt"` + LastOperator string `orm:"size(32)" json:"lastOperator"` // 最后操作员 + DeletedAt time.Time `orm:"type(datetime);default('1970-01-01 00:00:00')" json:"deletedAt"` +} + // flag按位表示,第一位表示修改,第二位表示新增,第三位表示删除 const ( SyncFlagModifiedMask = 1