aa
This commit is contained in:
@@ -292,20 +292,20 @@ func QueryActs(db *DaoDB, actID int, offset, pageSize int, syncStatus int, keywo
|
||||
sqlParams = append(sqlParams, pageSize, offset)
|
||||
var idList []int
|
||||
|
||||
Begin(db)
|
||||
txDB, _ := Begin(db)
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
Rollback(db)
|
||||
Rollback(db, txDB)
|
||||
panic(r)
|
||||
}
|
||||
}()
|
||||
// globals.SugarLogger.Debug(sql)
|
||||
if err = GetRows(db, &idList, sql, sqlParams...); err != nil || len(idList) == 0 {
|
||||
Rollback(db)
|
||||
if err = GetRowsTx(txDB, &idList, sql, sqlParams...); err != nil || len(idList) == 0 {
|
||||
Rollback(db, txDB)
|
||||
return pagedInfo, err
|
||||
}
|
||||
pagedInfo.TotalCount = GetLastTotalRowCount(db)
|
||||
Commit(db)
|
||||
pagedInfo.TotalCount = GetLastTotalRowCountTx(txDB)
|
||||
Commit(db, txDB)
|
||||
|
||||
sql = `
|
||||
SELECT
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"github.com/astaxie/beego/adapter/orm"
|
||||
"github.com/astaxie/beego/client/orm"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -65,15 +65,15 @@ func GetDB() *DaoDB {
|
||||
return &DaoDB{Db: orm.NewOrm()}
|
||||
}
|
||||
|
||||
func Begin(db *DaoDB) (err error) {
|
||||
func Begin(db *DaoDB) (txDB orm.TxOrmer, err error) {
|
||||
if db.transactionLevel == 0 {
|
||||
err = db.Db.Begin()
|
||||
txDB, err = db.Db.Begin()
|
||||
if err == nil {
|
||||
db.startWatchTransaction()
|
||||
}
|
||||
}
|
||||
db.transactionLevel++
|
||||
return err
|
||||
return txDB, err
|
||||
}
|
||||
|
||||
func (db *DaoDB) startWatchTransaction() {
|
||||
@@ -93,11 +93,11 @@ func (db *DaoDB) stopWatchTransaction() {
|
||||
}
|
||||
}
|
||||
|
||||
func Commit(db *DaoDB) (err error) {
|
||||
func Commit(db *DaoDB, txDB orm.TxOrmer) (err error) {
|
||||
if db.transactionLevel == 1 {
|
||||
db.stopWatchTransaction()
|
||||
|
||||
err = db.Db.Commit()
|
||||
err = txDB.Commit()
|
||||
//err = db.Db.Commit()
|
||||
db.transactionLevel = 0
|
||||
} else if db.transactionLevel > 1 {
|
||||
db.transactionLevel--
|
||||
@@ -105,11 +105,11 @@ func Commit(db *DaoDB) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func Rollback(db *DaoDB) (err error) {
|
||||
func Rollback(db *DaoDB, txDB orm.TxOrmer) (err error) {
|
||||
if db.transactionLevel > 0 {
|
||||
db.stopWatchTransaction()
|
||||
|
||||
err = db.Db.Rollback()
|
||||
err = txDB.Rollback()
|
||||
//err = db.Db.Rollback()
|
||||
}
|
||||
db.transactionLevel = 0
|
||||
return err
|
||||
@@ -139,6 +139,31 @@ func GetRow(db *DaoDB, inPtr interface{}, sql string, values ...interface{}) (er
|
||||
return err
|
||||
}
|
||||
|
||||
func GetRowTx(txDB orm.TxOrmer, inPtr interface{}, sql string, values ...interface{}) (err error) {
|
||||
if txDB == nil {
|
||||
return
|
||||
}
|
||||
if !useGetRowsWhenGetRow { // beego QueryRow有bug,嵌入的struct不能正常绑定
|
||||
err = txDB.Raw(sql, values).QueryRow(inPtr)
|
||||
//err = db.Db.Raw(sql, values).QueryRow(inPtr)
|
||||
} else {
|
||||
typeInfo := reflect.TypeOf(inPtr)
|
||||
if typeInfo.Kind() != reflect.Ptr {
|
||||
return errors.New("inPtr must be ptr")
|
||||
}
|
||||
slice := reflect.New(reflect.SliceOf(typeInfo.Elem()))
|
||||
if err = GetRowsTx(txDB, slice.Interface(), sql, values...); err == nil {
|
||||
slice = slice.Elem()
|
||||
if slice.Len() > 0 {
|
||||
reflect.ValueOf(inPtr).Elem().Set(slice.Index(0))
|
||||
} else {
|
||||
return orm.ErrNoRows
|
||||
}
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func GetRows(db *DaoDB, inPtr interface{}, sql string, values ...interface{}) (err error) {
|
||||
if db == nil {
|
||||
db = GetDB()
|
||||
@@ -147,6 +172,15 @@ func GetRows(db *DaoDB, inPtr interface{}, sql string, values ...interface{}) (e
|
||||
return err
|
||||
}
|
||||
|
||||
func GetRowsTx(txDB orm.TxOrmer, inPtr interface{}, sql string, values ...interface{}) (err error) {
|
||||
if txDB == nil {
|
||||
return
|
||||
}
|
||||
_, err = txDB.Raw(sql, values).QueryRows(inPtr)
|
||||
//_, err = db.Db.Raw(sql, values).QueryRows(inPtr)
|
||||
return err
|
||||
}
|
||||
|
||||
func GetEntity(db *DaoDB, item interface{}, cols ...string) (err error) {
|
||||
if db == nil {
|
||||
db = GetDB()
|
||||
@@ -178,6 +212,27 @@ func CreateEntity(db *DaoDB, item interface{}) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func UpdateEntityTx(txDB orm.TxOrmer, item interface{}, cols ...string) (num int64, err error) {
|
||||
if txDB == nil {
|
||||
return
|
||||
}
|
||||
num, err = txDB.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
|
||||
}
|
||||
|
||||
func CreateEntityTx(txDB orm.TxOrmer, item interface{}) (err error) {
|
||||
if txDB == nil {
|
||||
return
|
||||
}
|
||||
if _, err = txDB.Insert(item); err != nil && !IsDuplicateError(err) {
|
||||
globals.SugarLogger.Errorf("CreateEntity %s failed with error:%v", reflect.TypeOf(item).Name(), err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// InsertMulti执行成功后ID不会改写成正确的(象Insert一样)
|
||||
func CreateMultiEntities(db *DaoDB, item interface{}) (err error) {
|
||||
if db == nil {
|
||||
@@ -230,3 +285,11 @@ func GetLastTotalRowCount(db *DaoDB) int {
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func GetLastTotalRowCountTx(txDB orm.TxOrmer) int {
|
||||
countInfo := &struct{ Ct int }{}
|
||||
if err := GetRowTx(txDB, countInfo, "SELECT FOUND_ROWS() ct"); err == nil {
|
||||
return countInfo.Ct
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -115,11 +115,11 @@ func GetUserBillDetail(db *DaoDB, userID string, fromTime, toTime time.Time, pag
|
||||
`
|
||||
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||
sqlParams = append(sqlParams, pageSize, offset)
|
||||
Begin(db)
|
||||
defer Commit(db)
|
||||
if err = GetRows(db, &userBillDetails, sql, sqlParams...); err == nil {
|
||||
txDB, _ := Begin(db)
|
||||
defer Commit(db, txDB)
|
||||
if err = GetRowsTx(txDB, &userBillDetails, sql, sqlParams...); err == nil {
|
||||
pagedInfo = &model.PagedInfo{
|
||||
TotalCount: GetLastTotalRowCount(db),
|
||||
TotalCount: GetLastTotalRowCountTx(txDB),
|
||||
Data: userBillDetails,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -137,11 +137,11 @@ func GetJobs(db *DaoDB, userIDs []string, categoryIDs, statuss, vendorIDs, types
|
||||
sql += " LIMIT ? OFFSET ?"
|
||||
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||
sqlParams = append(sqlParams, pageSize, offset)
|
||||
Begin(db)
|
||||
defer Commit(db)
|
||||
if err = GetRows(db, &jobs, sql, sqlParams...); err == nil {
|
||||
txDB, _ := Begin(db)
|
||||
defer Commit(db, txDB)
|
||||
if err = GetRowsTx(txDB, &jobs, sql, sqlParams...); err == nil {
|
||||
pagedInfo = &model.PagedInfo{
|
||||
TotalCount: GetLastTotalRowCount(db),
|
||||
TotalCount: GetLastTotalRowCountTx(txDB),
|
||||
// Data: jobs,
|
||||
}
|
||||
for _, v := range jobs {
|
||||
@@ -358,11 +358,11 @@ func GetJobOrders(db *DaoDB, jobID int, jobOrderID int64, userID, jobUserID stri
|
||||
sql += " LIMIT ? OFFSET ?"
|
||||
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||
sqlParams = append(sqlParams, pageSize, offset)
|
||||
Begin(db)
|
||||
defer Commit(db)
|
||||
if err = GetRows(db, &jobOrders, sql, sqlParams...); err == nil {
|
||||
txDB, _ := Begin(db)
|
||||
defer Commit(db, txDB)
|
||||
if err = GetRowsTx(txDB, &jobOrders, sql, sqlParams...); err == nil {
|
||||
pagedInfo = &model.PagedInfo{
|
||||
TotalCount: GetLastTotalRowCount(db),
|
||||
TotalCount: GetLastTotalRowCountTx(txDB),
|
||||
// Data: jobOrders,
|
||||
}
|
||||
for _, v := range jobOrders {
|
||||
@@ -490,11 +490,11 @@ func GetStationInfoList(db *DaoDB, stationName string, cityCode int, lat, lng fl
|
||||
sql += " LIMIT ? OFFSET ?"
|
||||
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||
sqlParams = append(sqlParams, pageSize, offset)
|
||||
Begin(db)
|
||||
defer Commit(db)
|
||||
if err = GetRows(db, &stations, sql, sqlParams...); err == nil {
|
||||
txDB, _ := Begin(db)
|
||||
defer Commit(db, txDB)
|
||||
if err = GetRowsTx(txDB, &stations, sql, sqlParams...); err == nil {
|
||||
pagedInfo = &model.PagedInfo{
|
||||
TotalCount: GetLastTotalRowCount(db),
|
||||
TotalCount: GetLastTotalRowCountTx(txDB),
|
||||
// Data: stations,
|
||||
}
|
||||
for _, v := range stations {
|
||||
|
||||
@@ -75,13 +75,13 @@ func GetDeliveryOrders(db *DaoDB, userIDs []string, statuss []int, fromTime, toT
|
||||
sql += " LIMIT ? OFFSET ?"
|
||||
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||
sqlParams = append(sqlParams, pageSize, offset)
|
||||
Begin(db)
|
||||
defer Commit(db)
|
||||
txDB, _ := Begin(db)
|
||||
defer Commit(db, txDB)
|
||||
fmt.Println(sql)
|
||||
fmt.Println(sqlParams)
|
||||
if err = GetRows(db, &dOrders, sql, sqlParams...); err == nil {
|
||||
if err = GetRowsTx(txDB, &dOrders, sql, sqlParams...); err == nil {
|
||||
pagedInfo = &model.PagedInfo{
|
||||
TotalCount: GetLastTotalRowCount(db),
|
||||
TotalCount: GetLastTotalRowCountTx(txDB),
|
||||
// Data: dOrders,
|
||||
}
|
||||
for _, v := range dOrders {
|
||||
@@ -170,11 +170,11 @@ func GetOrders(db *DaoDB, orderID, userID string, orderType int, cityCodes []int
|
||||
sql += " LIMIT ? OFFSET ?"
|
||||
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||
sqlParams = append(sqlParams, pageSize, offset)
|
||||
Begin(db)
|
||||
defer Commit(db)
|
||||
if err = GetRows(db, &orders, sql, sqlParams); err == nil {
|
||||
txDB, _ := Begin(db)
|
||||
defer Commit(db, txDB)
|
||||
if err = GetRowsTx(txDB, &orders, sql, sqlParams); err == nil {
|
||||
pagedInfo = &model.PagedInfo{
|
||||
TotalCount: GetLastTotalRowCount(db),
|
||||
TotalCount: GetLastTotalRowCountTx(txDB),
|
||||
Data: orders,
|
||||
}
|
||||
}
|
||||
@@ -506,13 +506,13 @@ func GetManageStatisticsJob(db *DaoDB, cityCodes []int, fromTime, toTime time.Ti
|
||||
sql += " LIMIT ? OFFSET ?"
|
||||
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||
sqlParams = append(sqlParams, pageSize, offset)
|
||||
Begin(db)
|
||||
defer Commit(db)
|
||||
err = GetRows(db, &getManageStatisticsJobResult, sql, sqlParams)
|
||||
txDB, _ := Begin(db)
|
||||
defer Commit(db, txDB)
|
||||
err = GetRowsTx(txDB, &getManageStatisticsJobResult, sql, sqlParams)
|
||||
if err == nil {
|
||||
pageInfo = &model.PagedInfo{
|
||||
Data: getManageStatisticsJobResult,
|
||||
TotalCount: GetLastTotalRowCount(db),
|
||||
TotalCount: GetLastTotalRowCountTx(txDB),
|
||||
}
|
||||
}
|
||||
return pageInfo, err
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"git.rosy.net.cn/jx-callback/globals/testinit"
|
||||
)
|
||||
|
||||
func init() {
|
||||
testinit.Init()
|
||||
}
|
||||
|
||||
func TestSelectEntities(t *testing.T) {
|
||||
places := []*model.Place{}
|
||||
GetRows(nil, &places, `
|
||||
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.name_id = ?
|
||||
`, 40)
|
||||
|
||||
globals.SugarLogger.Debug(utils.Format4Output(places, false))
|
||||
}
|
||||
|
||||
func TestGetPlaceByName(t *testing.T) {
|
||||
result, err := GetPlaceByName(nil, "青羊", 3, 510100)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log(result)
|
||||
}
|
||||
|
||||
func TestUpdateKV(t *testing.T) {
|
||||
dummy := &model.Store{}
|
||||
kvs := map[string]interface{}{
|
||||
"status": 100,
|
||||
"Tel1": "tel1",
|
||||
"tEl2": "tel2",
|
||||
"deliveryRangeType": 15,
|
||||
}
|
||||
cond := map[string]interface{}{
|
||||
"id": 100002,
|
||||
}
|
||||
num, err := UpdateEntityLogically(nil, dummy, kvs, "autotest", cond)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log(num)
|
||||
}
|
||||
|
||||
func TestWrapAddIDCULEntity(t *testing.T) {
|
||||
dummy := &model.Store{}
|
||||
WrapAddIDCULEntity(dummy, "autotest")
|
||||
if dummy.LastOperator != "autotest" {
|
||||
t.Fatal("last operator is not same")
|
||||
}
|
||||
t.Log(dummy)
|
||||
}
|
||||
@@ -106,10 +106,10 @@ func GetUsers(db *DaoDB, userType int, keyword, popUser string, userIDs, userID2
|
||||
}
|
||||
sql += " LIMIT ? OFFSET ?"
|
||||
sqlParams = append(sqlParams, pageSize, offset)
|
||||
Begin(db)
|
||||
defer Commit(db)
|
||||
if err = GetRows(db, &userList, sql, sqlParams...); err == nil {
|
||||
totalCount = GetLastTotalRowCount(db)
|
||||
txDB, _ := Begin(db)
|
||||
defer Commit(db, txDB)
|
||||
if err = GetRowsTx(txDB, &userList, sql, sqlParams...); err == nil {
|
||||
totalCount = GetLastTotalRowCountTx(txDB)
|
||||
}
|
||||
return userList, totalCount, err
|
||||
}
|
||||
@@ -210,11 +210,11 @@ func GetUsers2(db *DaoDB, keyword string, userID string, pop int, mobile string,
|
||||
}
|
||||
sql += " LIMIT ? OFFSET ?"
|
||||
sqlParams = append(sqlParams, pageSize, offset)
|
||||
Begin(db)
|
||||
defer Commit(db)
|
||||
if err = GetRows(db, &userList, sql, sqlParams...); err == nil {
|
||||
txDB, _ := Begin(db)
|
||||
defer Commit(db, txDB)
|
||||
if err = GetRowsTx(txDB, &userList, sql, sqlParams...); err == nil {
|
||||
pageInfo = &model.PagedInfo{
|
||||
TotalCount: GetLastTotalRowCount(db),
|
||||
TotalCount: GetLastTotalRowCountTx(txDB),
|
||||
Data: userList,
|
||||
}
|
||||
}
|
||||
@@ -292,10 +292,10 @@ func QueryUserDeliveryAddress(db *DaoDB, addressID int64, userIDs []string, addT
|
||||
LIMIT ? OFFSET ?`
|
||||
sqlParams = append(sqlParams, pageSize, offset)
|
||||
|
||||
Begin(db)
|
||||
defer Commit(db)
|
||||
if err = GetRows(db, &addressList, sql, sqlParams...); err == nil {
|
||||
totalCount = GetLastTotalRowCount(db)
|
||||
txDB, _ := Begin(db)
|
||||
defer Commit(db, txDB)
|
||||
if err = GetRowsTx(txDB, &addressList, sql, sqlParams...); err == nil {
|
||||
totalCount = GetLastTotalRowCountTx(txDB)
|
||||
}
|
||||
return addressList, totalCount, err
|
||||
}
|
||||
|
||||
@@ -108,10 +108,10 @@ func GetOperateEvents(db *DaoDB, name string, apiFunctions []string, operateType
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
sqlParams = append(sqlParams, pageSize, offset)
|
||||
Begin(db)
|
||||
defer Commit(db)
|
||||
if err = GetRows(db, &operateEventExt, sql, sqlParams...); err == nil {
|
||||
totalCount = GetLastTotalRowCount(db)
|
||||
txDB, _ := Begin(db)
|
||||
defer Commit(db, txDB)
|
||||
if err = GetRowsTx(txDB, &operateEventExt, sql, sqlParams...); err == nil {
|
||||
totalCount = GetLastTotalRowCountTx(txDB)
|
||||
}
|
||||
var (
|
||||
accessUUidList []string
|
||||
@@ -185,11 +185,11 @@ func GetImMessageRecord(db *DaoDB, groupID int, userID, toUserID string, storeID
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
sqlParams = append(sqlParams, pageSize, offset)
|
||||
Begin(db)
|
||||
defer Commit(db)
|
||||
if err = GetRows(db, &msg, sql, sqlParams); err == nil {
|
||||
txDB, _ := Begin(db)
|
||||
defer Commit(db, txDB)
|
||||
if err = GetRowsTx(txDB, &msg, sql, sqlParams); err == nil {
|
||||
pagedInfo = &model.PagedInfo{
|
||||
TotalCount: GetLastTotalRowCount(db),
|
||||
TotalCount: GetLastTotalRowCountTx(txDB),
|
||||
// Data: msg,
|
||||
}
|
||||
for _, v := range msg {
|
||||
|
||||
Reference in New Issue
Block a user