From 3661ac61da733856040840fcd19528e321aa429a Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 6 Nov 2018 22:12:18 +0800 Subject: [PATCH] - IsDuplicateError --- business/model/dao/dao.go | 18 ++++++------------ business/model/dao/dao_bz.go | 24 +++++++++++------------- business/model/dao/dao_err.go | 19 +++++++++++++++++++ 3 files changed, 36 insertions(+), 25 deletions(-) create mode 100644 business/model/dao/dao_err.go diff --git a/business/model/dao/dao.go b/business/model/dao/dao.go index a2dce8fe8..31964af0d 100644 --- a/business/model/dao/dao.go +++ b/business/model/dao/dao.go @@ -7,7 +7,6 @@ import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/globals" "github.com/astaxie/beego/orm" - "github.com/go-sql-driver/mysql" ) const ( @@ -121,10 +120,10 @@ func UpdateEntity(db *DaoDB, item interface{}, cols ...string) (num int64, err e if db == nil { db = GetDB() } - err = utils.CallFuncLogError(func() error { - num, err = db.db.Update(item, cols...) - return err - }, reflect.TypeOf(item).Name()) + num, err = db.db.Update(item, cols...) + if err != nil && !IsDuplicateError(err) { + globals.SugarLogger.Errorf("UpdateEntity %s failed with error:%v", reflect.TypeOf(item).Name(), err) + } return num, err } @@ -132,13 +131,8 @@ func CreateEntity(db *DaoDB, item interface{}) (err error) { if db == nil { db = GetDB() } - if _, err = db.db.Insert(item); err != nil { - if mysqlErr, ok := err.(*mysql.MySQLError); ok { - if mysqlErr.Number == 1062 { - return err - } - } - globals.SugarLogger.Warnf("CreateEntity failed with error:%v", err) + if _, err = db.db.Insert(item); err != nil && !IsDuplicateError(err) { + globals.SugarLogger.Errorf("CreateEntity %s failed with error:%v", reflect.TypeOf(item).Name(), err) } return err } diff --git a/business/model/dao/dao_bz.go b/business/model/dao/dao_bz.go index a8324e469..15fe13c48 100644 --- a/business/model/dao/dao_bz.go +++ b/business/model/dao/dao_bz.go @@ -42,20 +42,18 @@ func UpdateEntityByKV(db *DaoDB, item interface{}, kvs map[string]interface{}, c if db == nil { db = GetDB() } - err = utils.CallFuncLogError(func() error { - qs := db.db.QueryTable(item) - if conditions == nil { - qs = qs.Filter(model.FieldID, jxutils.GetObjFieldByName(item, model.FieldID)) - } else { - for k, v := range conditions { - qs = qs.Filter(k, v) - } + qs := db.db.QueryTable(item) + if conditions == nil { + qs = qs.Filter(model.FieldID, jxutils.GetObjFieldByName(item, model.FieldID)) + } else { + for k, v := range conditions { + qs = qs.Filter(k, v) } - // globals.SugarLogger.Debugf("UpdateEntityByKV befor item:%s, kvs:%s, conditions:%s", utils.Format4Output(item, false), utils.Format4Output(kvs, false), utils.Format4Output(conditions, false)) - num, err = qs.Update(kvs) - // globals.SugarLogger.Debugf("UpdateEntityByKV after update, num:%d", num) - return err - }, reflect.TypeOf(item).Name()) + } + num, err = qs.Update(kvs) + if err != nil && !IsDuplicateError(err) { + globals.SugarLogger.Errorf("UpdateEntityByKV %s failed with error:%v", reflect.TypeOf(item).Name(), err) + } return num, err } diff --git a/business/model/dao/dao_err.go b/business/model/dao/dao_err.go new file mode 100644 index 000000000..0e94190bd --- /dev/null +++ b/business/model/dao/dao_err.go @@ -0,0 +1,19 @@ +package dao + +import ( + "github.com/astaxie/beego/orm" + "github.com/go-sql-driver/mysql" +) + +func IsDuplicateError(err error) bool { + if mysqlErr, ok := err.(*mysql.MySQLError); ok { + if mysqlErr.Number == 1062 { + return true + } + } + return false +} + +func IsNoRowsError(err error) bool { + return err == orm.ErrNoRows +}