- all db orm use beego orm, don't use gorm anymore.

This commit is contained in:
gazebo
2018-09-08 12:55:39 +08:00
parent 711013fab4
commit 8c130a15a4
28 changed files with 780 additions and 448 deletions

View File

@@ -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
}