// 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 = ?", artworkUid[0]).Delete(&model.ArtworkLockRecord{}).Error } else { return db.DB.Where("artwork_uid in ?", 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 }