repo.go 3.64 KB
Newer Older
hujiebin's avatar
hujiebin committed
1 2 3 4 5
package diamond_m

import (
	"fmt"
	"git.hilo.cn/hilo-common/domain"
hujiebin's avatar
hujiebin committed
6
	"git.hilo.cn/hilo-common/myerr"
hujiebin's avatar
hujiebin committed
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
	"git.hilo.cn/hilo-common/mylogrus"
	"git.hilo.cn/hilo-common/resource/mysql"
	"gorm.io/gorm"
	"strconv"
)

func (diamondAccountDetail *DiamondAccountDetail) Persistent() error {
	txDiamondAccount := diamondAccountDetail.Db.Model(diamondAccountDetail.diamondAccount)
	if diamondAccountDetail.diamondAccount.CheckUpdateCondition() {
		txDiamondAccount = txDiamondAccount.Where(diamondAccountDetail.diamondAccount.GetUpdateCondition())
	}
	if diamondAccountDetail.AddReduce == mysql.ADD {
		//增加
		txDiamondAccount.UpdateColumn("diamond_num", gorm.Expr("diamond_num + ?", diamondAccountDetail.Num))
	} else if diamondAccountDetail.AddReduce == mysql.REDUCE {
		//减少,保证不能扣成负数
		txDiamondAccount.Where("diamond_num >= ?", diamondAccountDetail.Num).UpdateColumn("diamond_num", gorm.Expr("diamond_num - ?", diamondAccountDetail.Num))
	} else {
		mylogrus.MyLog.Errorf("addReduce 枚举错误 value:" + mysql.TypeToString(mysql.Type(diamondAccountDetail.AddReduce)))
	}
	if err := txDiamondAccount.Error; err != nil {
		return err
	}
	if txDiamondAccount.RowsAffected == 0 {
		mylogrus.MyLog.Errorf("gorm condition update.RowsAffected = 0,AddReduce:%v", diamondAccountDetail.AddReduce)
		return fmt.Errorf("gorm condition update.RowsAffected = 0")
	}

	//持久化diamondAccountDetail
	if err := domain.Persistent(diamondAccountDetail.Db, diamondAccountDetail); err != nil {
		return err
	}
	//改变diamondAccount值
	if diamondAccountDetail.diamondAccount == nil {
		return fmt.Errorf("持久化错误, 模型:DiamondAccountDetail 中没有diamondAccount, DiamondAccountDetail.Id =" + strconv.Itoa(int(diamondAccountDetail.ID)))
	}

	var newDiamondAccount DiamondAccount
	if err := diamondAccountDetail.Db.First(&newDiamondAccount, diamondAccountDetail.diamondAccount.ID).Error; err != nil {
		return err
	}

	if newDiamondAccount.DiamondNum < 0 {
		return fmt.Errorf("diamond_account表中,diamond_num 不能小于0, diamondAccount.id = " + strconv.Itoa(int(newDiamondAccount.ID)))
	}
	return nil
}
hujiebin's avatar
hujiebin committed
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94

func (p *DiamondPinkAccountDetail) Persistent() error {
	txDiamondAccount := p.Db.Model(p.diamondAccount)
	if p.diamondAccount.CheckUpdateCondition() {
		txDiamondAccount = txDiamondAccount.Where(p.diamondAccount.GetUpdateCondition())
	}
	if p.AddReduce == mysql.ADD {
		//增加
		txDiamondAccount.UpdateColumn("pink_diamond_num", gorm.Expr("pink_diamond_num + ?", p.Num))
	} else if p.AddReduce == mysql.REDUCE {
		//减少,保证不能扣成负数
		txDiamondAccount.Where("pink_diamond_num >= ?", p.Num).UpdateColumn("pink_diamond_num", gorm.Expr("pink_diamond_num - ?", p.Num))
	} else {
		return myerr.NewSysError("addReduce 枚举错误 value:" + mysql.TypeToString(mysql.Type(p.AddReduce)))
	}
	if err := txDiamondAccount.Error; err != nil {
		return myerr.WrapErr(err)
	}
	if txDiamondAccount.RowsAffected == 0 {
		return myerr.NewWaring("gorm condition update.RowsAffected = 0")
	}

	//持久化diamondPinkAccountDetail
	if err := domain.Persistent(p.Db, p); err != nil {
		return myerr.WrapErr(err)
	}
	//改变diamondAccount值
	if p.diamondAccount == nil {
		return myerr.NewSysError("持久化错误, 模型:DiamondAccountDetail 中没有diamondAccount, DiamondAccountDetail.Id =" + strconv.Itoa(int(p.ID)))
	}

	var newDiamondAccount DiamondAccount
	if err := p.Db.First(&newDiamondAccount, p.diamondAccount.ID).Error; err != nil {
		return myerr.WrapErr(err)
	}

	if newDiamondAccount.DiamondNum < 0 {
		return myerr.NewSysError("diamond_account表中,pink_diamond_num 不能小于0, diamondAccount.id = " + strconv.Itoa(int(newDiamondAccount.ID)))
	}
	return nil
}