- all db orm use beego orm, don't use gorm anymore.
This commit is contained in:
@@ -4,117 +4,116 @@ import (
|
||||
"reflect"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/globals/gormdb"
|
||||
"github.com/jinzhu/gorm"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"github.com/astaxie/beego/orm"
|
||||
)
|
||||
|
||||
func GetRows(db *gorm.DB, inPtr interface{}, sql string, values ...interface{}) (err error) {
|
||||
if db == nil {
|
||||
db = gormdb.GetDB()
|
||||
}
|
||||
topTypeInfo := reflect.TypeOf(inPtr)
|
||||
if topTypeInfo.Kind() != reflect.Ptr {
|
||||
panic("SelectEntities inPtr should be slice ptr (*[]Type)")
|
||||
}
|
||||
typeInfo := topTypeInfo.Elem()
|
||||
if typeInfo.Kind() != reflect.Slice {
|
||||
panic("SelectEntities inPtr should be slice ptr (*[]Type)")
|
||||
}
|
||||
elmType := typeInfo.Elem()
|
||||
type DaoDB struct {
|
||||
db orm.Ormer
|
||||
}
|
||||
|
||||
valueInfo := reflect.ValueOf(inPtr)
|
||||
rows, err := db.Raw(sql, values...).Rows()
|
||||
if err == nil {
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
var value reflect.Value
|
||||
if elmType.Kind() == reflect.Ptr {
|
||||
value = reflect.New(elmType.Elem())
|
||||
} else {
|
||||
value = reflect.New(elmType)
|
||||
// func GetRows(db *gorm.DB, inPtr interface{}, sql string, values ...interface{}) (err error) {
|
||||
// if db == nil {
|
||||
// db = gormdb.GetDB()
|
||||
// }
|
||||
// topTypeInfo := reflect.TypeOf(inPtr)
|
||||
// if topTypeInfo.Kind() != reflect.Ptr {
|
||||
// panic("SelectEntities inPtr should be slice ptr (*[]Type)")
|
||||
// }
|
||||
// typeInfo := topTypeInfo.Elem()
|
||||
// if typeInfo.Kind() != reflect.Slice {
|
||||
// panic("SelectEntities inPtr should be slice ptr (*[]Type)")
|
||||
// }
|
||||
// elmType := typeInfo.Elem()
|
||||
|
||||
// valueInfo := reflect.ValueOf(inPtr)
|
||||
// rows, err := db.Raw(sql, values...).Rows()
|
||||
// if err == nil {
|
||||
// defer rows.Close()
|
||||
// for rows.Next() {
|
||||
// var value reflect.Value
|
||||
// if elmType.Kind() == reflect.Ptr {
|
||||
// value = reflect.New(elmType.Elem())
|
||||
// } else {
|
||||
// value = reflect.New(elmType)
|
||||
// }
|
||||
// db.ScanRows(rows, value.Interface())
|
||||
// if elmType.Kind() != reflect.Ptr {
|
||||
// value = value.Elem()
|
||||
// }
|
||||
// valueInfo.Elem().Set(reflect.Append(valueInfo.Elem(), value))
|
||||
// }
|
||||
// return nil
|
||||
// }
|
||||
// return err
|
||||
// }
|
||||
|
||||
func GetDB() *DaoDB {
|
||||
return &DaoDB{db: orm.NewOrm()}
|
||||
}
|
||||
|
||||
func GetRow(db *DaoDB, inPtr interface{}, sql string, values ...interface{}) (err error) {
|
||||
if db == nil {
|
||||
db = GetDB()
|
||||
}
|
||||
return db.db.Raw(sql, values).QueryRow(inPtr)
|
||||
}
|
||||
|
||||
func GetRows(db *DaoDB, inPtr interface{}, sql string, values ...interface{}) (err error) {
|
||||
if db == nil {
|
||||
db = GetDB()
|
||||
}
|
||||
_, err = db.db.Raw(sql, values).QueryRows(inPtr)
|
||||
return err
|
||||
}
|
||||
|
||||
func GetEntity(db *DaoDB, item interface{}, cols ...string) error {
|
||||
if db == nil {
|
||||
db = GetDB()
|
||||
}
|
||||
err := utils.CallFuncLogError(func() error {
|
||||
return db.db.Read(item, cols...)
|
||||
}, reflect.TypeOf(item).Name())
|
||||
return err
|
||||
}
|
||||
|
||||
func UpdateEntity(db *DaoDB, item interface{}, cols ...string) error {
|
||||
if db == nil {
|
||||
db = GetDB()
|
||||
}
|
||||
err := utils.CallFuncLogError(func() error {
|
||||
_, err2 := db.db.Update(item, cols...)
|
||||
return err2
|
||||
}, reflect.TypeOf(item).Name())
|
||||
return err
|
||||
}
|
||||
|
||||
func UpdateEntityByKV(db *DaoDB, item interface{}, kvs map[string]interface{}, conditions map[string]interface{}) error {
|
||||
if db == nil {
|
||||
db = GetDB()
|
||||
}
|
||||
err := utils.CallFuncLogError(func() error {
|
||||
qs := db.db.QueryTable(item)
|
||||
if conditions == nil {
|
||||
qs = qs.Filter("id", jxutils.GetObjFieldByName(item, "ID"))
|
||||
} else {
|
||||
for k, v := range conditions {
|
||||
qs = qs.Filter(k, v)
|
||||
}
|
||||
db.ScanRows(rows, value.Interface())
|
||||
if elmType.Kind() != reflect.Ptr {
|
||||
value = value.Elem()
|
||||
}
|
||||
valueInfo.Elem().Set(reflect.Append(valueInfo.Elem(), value))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func GetEntity(db *gorm.DB, item interface{}) error {
|
||||
if db == nil {
|
||||
db = gormdb.GetDB()
|
||||
}
|
||||
err := utils.CallFuncLogError(func() error {
|
||||
return db.First(item).Error
|
||||
_, err2 := qs.Update(kvs)
|
||||
return err2
|
||||
}, reflect.TypeOf(item).Name())
|
||||
return err
|
||||
}
|
||||
|
||||
func UpdateEntity(db *gorm.DB, item interface{}, values map[string]interface{}) error {
|
||||
func CreateEntity(db *DaoDB, item interface{}) error {
|
||||
if db == nil {
|
||||
db = gormdb.GetDB()
|
||||
db = GetDB()
|
||||
}
|
||||
err := utils.CallFuncLogError(func() error {
|
||||
return db.Model(item).Updates(values).Error
|
||||
_, err2 := db.db.Insert(item) // todo 这里需要将ID赋值么?
|
||||
return err2
|
||||
}, reflect.TypeOf(item).Name())
|
||||
return err
|
||||
}
|
||||
|
||||
func CreateEntity(db *gorm.DB, item interface{}) error {
|
||||
if db == nil {
|
||||
db = gormdb.GetDB()
|
||||
}
|
||||
err := utils.CallFuncLogError(func() error {
|
||||
return db.Create(item).Error
|
||||
}, reflect.TypeOf(item).Name())
|
||||
return err
|
||||
}
|
||||
|
||||
func GetSellCities(skuNameID int, vendorID int, db *gorm.DB) (cities []*model.Place, err error) {
|
||||
cities = []*model.Place{}
|
||||
sql := `
|
||||
SELECT DISTINCT t3.*
|
||||
FROM sku_name_place_bind t1
|
||||
JOIN place t2 ON t1.place_code = t2.code
|
||||
JOIN place t3 ON (t2.level = 2 AND t2.code = t3.code) OR (t2.level = 1 AND t2.code = t3.parent_code)
|
||||
WHERE t1.sku_name_id = ?
|
||||
`
|
||||
if vendorID == model.VendorIDJD {
|
||||
sql += "AND t3.jd_code <> 0\n"
|
||||
}
|
||||
return cities, GetRows(nil, &cities, sql, skuNameID)
|
||||
}
|
||||
|
||||
func GetPlaceByCode(db *gorm.DB, code int) (place *model.Place, err error) {
|
||||
if db == nil {
|
||||
db = gormdb.GetDB()
|
||||
}
|
||||
place = new(model.Place)
|
||||
err = db.Where("code = ?", code).First(place).Error
|
||||
return place, err
|
||||
}
|
||||
|
||||
func GetPlaceByName(db *gorm.DB, name string, level int, parentCode int) (place *model.Place, err error) {
|
||||
if db == nil {
|
||||
db = gormdb.GetDB()
|
||||
}
|
||||
place = new(model.Place)
|
||||
if err = db.Where("parent_code = ? AND level = ? AND name = ?", parentCode, level, name).First(place).Error; err == gorm.ErrRecordNotFound {
|
||||
err = db.Where("parent_code = ? AND level = ? AND name LIKE ?", parentCode, level, "%"+name+"%").First(place).Error
|
||||
}
|
||||
return place, err
|
||||
}
|
||||
|
||||
func GetPlaceByJdCode(db *gorm.DB, jdCode int) (place *model.Place, err error) {
|
||||
if db == nil {
|
||||
db = gormdb.GetDB()
|
||||
}
|
||||
place = new(model.Place)
|
||||
err = db.Where("jd_code = ?", jdCode).First(place).Error
|
||||
return place, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user