114 lines
3.7 KiB
Go
114 lines
3.7 KiB
Go
// Package dao -----------------------------
|
|
// @file : artwork.go
|
|
// @author : JJXu
|
|
// @contact : wavingbear@163.com
|
|
// @time : 2023/2/24 18:23
|
|
// -------------------------------------------
|
|
package dao
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"github.com/fonchain/fonchain-artistinfo/cmd/model"
|
|
"github.com/fonchain/fonchain-artistinfo/pb/artistInfoArtwork"
|
|
db "github.com/fonchain/fonchain-artistinfo/pkg/db"
|
|
"github.com/fonchain/fonchain-artistinfo/pkg/util/stime"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func CreateArtworkLockRecord(in *model.ArtworkLockRecord) error {
|
|
var data = model.ArtworkLockRecord{
|
|
ArtistUid: in.ArtistUid,
|
|
ArtworkUid: in.ArtworkUid,
|
|
Status: in.Status,
|
|
LockTime: in.LockTime,
|
|
}
|
|
return db.DB.Create(&data).Error
|
|
}
|
|
|
|
func UpdateArtworkLockRecord(in *model.ArtworkLockRecord) error {
|
|
var data = model.ArtworkLockRecord{
|
|
ArtistUid: in.ArtistUid,
|
|
ArtworkUid: in.ArtworkUid,
|
|
Status: in.Status,
|
|
LockTime: in.LockTime,
|
|
}
|
|
var thisData model.ArtworkLockRecord
|
|
err := db.DB.Where("artist_uid = ?", in.ArtworkUid).First(&thisData).Error
|
|
if err != nil {
|
|
if err != gorm.ErrRecordNotFound {
|
|
return errors.New("画作数据未找到")
|
|
}
|
|
}
|
|
return db.DB.Updates(&data).Error
|
|
}
|
|
|
|
func DeletedArtworkLockRecord(artworkUid ...string) error {
|
|
if len(artworkUid) == 0 {
|
|
return nil
|
|
} else if len(artworkUid) == 1 {
|
|
return db.DB.Where("artwork_uid = ? AND status ! = 2 ", artworkUid[0]).Delete(&model.ArtworkLockRecord{}).Error
|
|
} else {
|
|
return db.DB.Where("artwork_uid in ? AND status ! = 2 ", artworkUid).Delete(&model.ArtworkLockRecord{}).Error
|
|
}
|
|
}
|
|
|
|
func BatchLockArtworks(artistUid string) error {
|
|
var artworkUids []string
|
|
db.DB.Model(model.ArtworkLockRecord{}).
|
|
Where("is_lock = false AND lock_time=''").Where(" artist_uid = ?", artistUid).
|
|
Pluck("artwork_uid", &artworkUids)
|
|
if artworkUids == nil {
|
|
return nil
|
|
}
|
|
var updateMap = map[string]any{
|
|
"is_lock": true,
|
|
"lock_time": stime.StrNowDate(),
|
|
}
|
|
return db.DB.Model(model.ArtworkLockRecord{}).Where("artwork_uid in ?", artworkUids).Updates(&updateMap).Error
|
|
}
|
|
|
|
func BatchUnlockArtworks(artistUid string) error {
|
|
var artworkUids []string
|
|
db.DB.Model(model.ArtworkLockRecord{}).
|
|
Where(fmt.Sprintf("lock_time = (select max(lock_time) form artwork_lock_record WHERE artist_uid = %s)", artistUid)).
|
|
Where("is_lock = true").
|
|
Pluck("artwork_uid", &artworkUids)
|
|
if artworkUids == nil {
|
|
return nil
|
|
}
|
|
return db.DB.Model(model.ArtworkLockRecord{}).Where("artwork_uid in ?", artworkUids).Update("is_lock", false).Error
|
|
}
|
|
|
|
func GetArtworkLockRecords(req *artistInfoArtwork.GetArtworkLockRecordsRequest) (resp *artistInfoArtwork.ArtworkLockList, err error) {
|
|
|
|
var (
|
|
datas = model.ArtworkLockRecord{}
|
|
tx = db.DB.Model(model.ArtworkLockRecord{}).Where("artist_uid = ?", req.ArtistUid)
|
|
)
|
|
|
|
switch req.QueryType {
|
|
case artistInfoArtwork.ArtworkQueryMode_NowPreSaveArtwork: //当前暂存的画作
|
|
tx = tx.Where("status = 1")
|
|
case artistInfoArtwork.ArtworkQueryMode_NowLockedArtwork: //当前已锁定的画作
|
|
tx = tx.Where("status = 2", req.ArtistUid)
|
|
case artistInfoArtwork.ArtworkQueryMode_ArtistCanSee: //画家能看到的画作(暂存和锁定)
|
|
tx = tx.Where("status < 3")
|
|
case artistInfoArtwork.ArtworkQueryMode_AllUnlockArtwork: //所有已解锁的画作(历史画作)
|
|
tx = tx.Where("status = 3")
|
|
//case artistInfoArtwork.ArtworkQueryMode_AllHistoryArtwork: //所有历史画作
|
|
// tx = tx.Where("status > 1")
|
|
}
|
|
err = tx.Find(&datas).Error
|
|
return
|
|
}
|
|
func HasBeenLocked(artistUid string) bool {
|
|
//检查是否已经被锁定
|
|
var hasLocked int64
|
|
db.DB.Model(model.ArtworkLockRecord{}).Where("artist_uid = ? AND status = 2", artistUid).Count(&hasLocked)
|
|
if hasLocked > 0 {
|
|
return true
|
|
}
|
|
return false
|
|
}
|