2022-09-21 06:30:52 +00:00
package dao
import (
"fonchain-artshow/cmd/model"
2022-09-22 06:23:56 +00:00
"fonchain-artshow/pb/artShow"
2022-09-21 06:30:52 +00:00
"fonchain-artshow/pkg/db"
2022-11-11 05:13:19 +00:00
"fonchain-artshow/pkg/m"
uuid "github.com/satori/go.uuid"
2022-09-21 06:30:52 +00:00
"go.uber.org/zap"
"gorm.io/gorm"
2023-02-24 08:03:06 +00:00
"strconv"
2022-11-11 05:13:19 +00:00
"strings"
"time"
2022-09-21 06:30:52 +00:00
)
func SaveArtShow ( tx * gorm . DB , artShow * model . ArtShow ) ( err error ) {
2022-11-11 05:13:19 +00:00
uid , err := uuid . NewV4 ( )
if err != nil {
return nil
2022-09-21 06:30:52 +00:00
}
2022-11-11 05:13:19 +00:00
artShow . ShowUID = uid . String ( )
2023-02-24 08:03:06 +00:00
artShow . ShowSeq = strings . Replace ( artShow . ShowSeq , "T" , m . ARTSHOW_PREFIX , - 1 )
num := countArtistNumInShowCurrentYear ( artShow . ArtistUID )
if num < 10 {
artShow . ShowSeq = strings . Join ( [ ] string { artShow . ShowSeq , time . Now ( ) . Format ( "06" ) , "00" + strconv . FormatInt ( num , 10 ) } , "" )
} else if num >= 10 && num < 100 {
artShow . ShowSeq = strings . Join ( [ ] string { artShow . ShowSeq , time . Now ( ) . Format ( "06" ) , "0" + strconv . FormatInt ( num , 10 ) } , "" )
} else if num >= 100 {
artShow . ShowSeq = strings . Join ( [ ] string { artShow . ShowSeq , time . Now ( ) . Format ( "06" ) , strconv . FormatInt ( num , 10 ) } , "" )
}
2022-11-11 05:13:19 +00:00
err = tx . Model ( & model . ArtShow { } ) . Create ( & artShow ) . Error
2022-09-21 06:30:52 +00:00
if err != nil {
zap . L ( ) . Error ( "ArtShow err" , zap . Error ( err ) )
return
}
return
}
2022-11-11 05:13:19 +00:00
func UpdateArtShow ( tx * gorm . DB , artShow * model . ArtShow ) ( err error ) {
2023-02-10 08:39:54 +00:00
err = tx . Model ( & model . ArtShow { } ) . Omit ( "show_uid,operator" ) . Where ( "show_uid = ?" , artShow . ShowUID ) . Updates ( artShow ) . Error
2022-11-11 05:13:19 +00:00
if err != nil {
zap . L ( ) . Error ( "ArtShow err" , zap . Error ( err ) )
return
}
return
}
2023-01-31 09:14:18 +00:00
func ArtShowListWithRel ( in * artShow . ShowListReq ) ( err error , total int64 , out [ ] * model . ArtShowRes ) {
2023-02-10 08:39:54 +00:00
queryDB := db . DbArtShow . Table ( "art_show as a " ) . Omit ( "a.created_at" ) . Distinct ( "a.id" ) .
2023-03-16 03:47:00 +00:00
Select ( "a.show_uid, a.show_seq, a.show_name, a.artist_name, a.artist_uid, a.artwork_num, a.ruler, a.price, a.reward ,a.create_time, a.operator, a.is_show, case when c.deleted_at is null then c.address else '' end as address, case when c.deleted_at is null then c.show_time else '' end as show_time, a.created_at" ) .
//Joins("left join artwork_price as b on a.show_uid = b.show_uid").
Joins ( "left join ( select * from show_rel where deleted_at is null ) as c on a.show_uid = c.show_uid " )
2023-01-31 09:14:18 +00:00
countDB := db . DbArtShow . Table ( "art_show as a " ) . Distinct ( "a.id" ) .
2023-03-16 03:47:00 +00:00
Select ( "a.show_uid, a.show_seq, a.show_name, a.artist_name, a.artist_uid, a.artwork_num, a.ruler, a.price, a.reward , a.create_time, a.operator, a.is_show, case when c.deleted_at is null then c.address else '' end as address, case when c.deleted_at is null then c.show_time else '' end as show_time, a.created_at" ) .
//Joins("left join artwork_price as b on a.show_uid = b.show_uid").
Joins ( "left join ( select * from show_rel where deleted_at is null ) as c on a.show_uid = c.show_uid " )
2023-01-31 09:14:18 +00:00
if in . ArtistName != "" {
queryDB . Where ( " a.artist_name like ? " , "%" + in . ArtistName + "%" )
countDB . Where ( " a.artist_name like ? " , "%" + in . ArtistName + "%" )
}
if in . ShowName != "" {
queryDB . Where ( " a.show_name like ? " , "%" + in . ShowName + "%" )
countDB . Where ( " a.show_name like ? " , "%" + in . ShowName + "%" )
}
if in . ShowSeq != "" {
queryDB . Where ( " a.show_seq like ? " , "%" + in . ShowSeq + "%" )
countDB . Where ( " a.show_seq like ? " , "%" + in . ShowSeq + "%" )
2022-09-21 06:30:52 +00:00
}
2023-02-24 08:03:06 +00:00
if in . StartShowTime != "" && in . EndShowTime != "" {
queryDB . Where ( "c.show_time between ? and ?" , in . StartShowTime , in . EndShowTime )
countDB . Where ( "c.show_time between ? and ?" , in . StartShowTime , in . EndShowTime )
2023-01-31 09:14:18 +00:00
}
if in . EndPrice != 0 {
queryDB . Where ( " a.price between ? and ?" , in . StartPrice , in . EndPrice )
countDB . Where ( " a.price between ? and ?" , in . StartPrice , in . EndPrice )
}
if in . EndReward != 0 {
queryDB . Where ( " a.reward between ? and ?" , in . StartReward , in . EndReward )
countDB . Where ( " a.reward between ? and ?" , in . StartReward , in . EndReward )
}
2023-02-24 08:03:06 +00:00
if in . Address != "" {
queryDB . Where ( " c.address like ?" , "%" + in . Address + "%" )
countDB . Where ( " c.address like ?" , "%" + in . Address + "%" )
}
if len ( in . IsShow ) > 0 {
queryDB . Where ( " a.is_show in ?" , in . IsShow )
countDB . Where ( " a.is_show in ?" , in . IsShow )
}
2023-01-31 09:14:18 +00:00
//selectDb := queryDB
//countDb := queryDB
out = make ( [ ] * model . ArtShowRes , 0 )
2023-03-16 03:47:00 +00:00
err = queryDB . Where ( "a.deleted_at is null" ) . Offset ( int ( ( in . Page - 1 ) * in . PageSize ) ) .
2023-02-10 08:39:54 +00:00
Limit ( int ( in . PageSize ) ) . Order ( "a.created_at desc " ) . Find ( & out ) . Error
2023-01-31 09:14:18 +00:00
if err != nil {
zap . L ( ) . Error ( "ArtShowList Find err" , zap . Error ( err ) )
return
}
2023-03-16 03:47:00 +00:00
err = countDB . Where ( "a.deleted_at is null" ) . Count ( & total ) . Error
2023-01-31 09:14:18 +00:00
if err != nil {
zap . L ( ) . Error ( "ArtShowList Count err" , zap . Error ( err ) )
return
}
return
}
2023-03-16 03:47:00 +00:00
func _ArtShowList ( in * artShow . ShowListReq ) ( err error , total int64 , out [ ] * model . ArtShowRes ) {
2023-03-08 01:02:18 +00:00
queryDB := db . DbArtShow . Table ( "art_show as a " ) . Omit ( "a.created_at" ) . Distinct ( "a.id" ) .
Select ( "a.show_uid, a.show_seq, a.show_name, a.artist_name, a.artist_uid, a.artwork_num, a.ruler, a.price, a.create_time, a.operator, a.is_show, c.address ,c.show_time, a.created_at" ) .
Joins ( "left join show_rel as c on a.show_uid = c.show_uid " )
countDB := db . DbArtShow . Table ( "art_show as a " ) . Distinct ( "a.id" ) .
Select ( "a.show_uid, a.show_seq, a.show_name, a.artist_name, a.artist_uid, a.artwork_num, a.ruler, a.price, a.create_time, a.operator, a.is_show, c.address ,c.show_time, a.created_at" ) .
Joins ( "left join show_rel as c on a.show_uid = c.show_uid " )
2023-01-31 09:14:18 +00:00
2023-02-24 08:03:06 +00:00
if len ( in . IsShow ) > 0 {
queryDB . Where ( " is_show in ?" , in . IsShow )
2023-03-08 01:02:18 +00:00
countDB . Where ( " is_show in ?" , in . IsShow )
2022-09-28 06:58:19 +00:00
}
2022-09-21 06:30:52 +00:00
2023-03-08 01:02:18 +00:00
err = queryDB . Where ( "a.deleted_at is null and c.deleted_at is null" ) . Offset ( int ( ( in . Page - 1 ) * in . PageSize ) ) .
Limit ( int ( in . PageSize ) ) . Order ( "a.created_at desc " ) . Find ( & out ) . Error
2022-09-21 06:30:52 +00:00
if err != nil {
2022-11-30 03:01:14 +00:00
zap . L ( ) . Error ( "ArtShowList Find err" , zap . Error ( err ) )
2022-09-21 06:30:52 +00:00
return
}
2023-03-08 01:02:18 +00:00
err = countDB . Where ( "a.deleted_at is null" ) . Group ( "a.id" ) . Count ( & total ) . Error
2022-09-21 06:30:52 +00:00
if err != nil {
2022-11-30 03:01:14 +00:00
zap . L ( ) . Error ( "ArtShowList Count err" , zap . Error ( err ) )
2022-09-21 06:30:52 +00:00
return
}
return
}
2023-03-16 03:47:00 +00:00
func ArtShowList ( in * artShow . ShowListReq ) ( err error , total int64 , out [ ] * model . ArtShowRes ) {
queryDB := db . DbArtShow . Table ( "art_show as a" ) .
Select ( "a.show_uid, a.show_seq, a.show_name, a.artist_name, a.artist_uid, a.artwork_num, a.ruler, a.price, a.create_time, a.operator, a.is_show, a.created_at" )
countDB := db . DbArtShow . Table ( "art_show as a " ) .
Select ( "a.show_uid, a.show_seq, a.show_name, a.artist_name, a.artist_uid, a.artwork_num, a.ruler, a.price, a.create_time, a.operator, a.is_show, a.created_at" )
if len ( in . IsShow ) > 0 {
queryDB . Where ( " a.is_show in ?" , in . IsShow )
countDB . Where ( " a.is_show in ?" , in . IsShow )
}
err = queryDB . Offset ( int ( ( in . Page - 1 ) * in . PageSize ) ) .
Limit ( int ( in . PageSize ) ) . Order ( "a.created_at desc " ) . Find ( & out ) . Error
if err != nil {
zap . L ( ) . Error ( "ArtShowList Find err" , zap . Error ( err ) )
return
}
err = countDB . Count ( & total ) . Error
if err != nil {
zap . L ( ) . Error ( "ArtShowList Count err" , zap . Error ( err ) )
return
}
return
}
2022-11-30 03:01:14 +00:00
func ArtShowList_apply ( applyUID string ) ( err error , out [ ] * model . ArtShowRes ) {
out = make ( [ ] * model . ArtShowRes , 0 )
err = db . DbArtShow . Table ( "art_show as a " ) . Distinct ( "a.show_uid" ) . Select ( "a.show_uid, a.show_seq, a.show_name, a.artist_name, a.artist_uid, a.artwork_num, a.ruler, a.price, a.reward, a.create_time, a.is_show, b.address ,b.show_time" ) . Joins ( " right join show_rel as b on a.show_uid = b.show_uid" ) . Where ( "b.apply_uid = ? " , applyUID ) . Find ( & out ) . Error
2022-09-21 06:30:52 +00:00
if err != nil {
zap . L ( ) . Error ( "ArtShowList_apply Find err" , zap . Error ( err ) )
return
}
return
}
2022-11-30 03:01:14 +00:00
func ArtShowListByApplyStatus ( in * artShow . ShowListReq ) ( err error , total int64 , out [ ] * model . ArtShowRes ) {
out = make ( [ ] * model . ArtShowRes , 0 )
2023-02-24 08:03:06 +00:00
queryDB := db . DbArtShow . Table ( "art_show as a" ) . Select ( "a.show_uid, a.show_seq, a.show_name, a.artist_name, a.artist_uid, a.artwork_num, a.ruler, a.price, a.create_time, a.is_show, b.address ,b.show_time" ) . Joins ( " left join show_rel as b on b.show_uid = a.show_uid" ) . Where ( "a.is_show = ?" , in . IsShow [ len ( in . IsShow ) - 1 ] )
2022-11-30 03:01:14 +00:00
err = queryDB . Count ( & total ) . Error
2022-09-21 06:30:52 +00:00
if err != nil {
zap . L ( ) . Error ( "ArtShowListByApplyStatus Count err" , zap . Error ( err ) )
return
}
2022-11-30 03:01:14 +00:00
err = queryDB . Offset ( int ( ( in . Page - 1 ) * in . PageSize ) ) .
2022-09-21 06:30:52 +00:00
Limit ( int ( in . PageSize ) ) . Find ( & out ) . Error
if err != nil {
zap . L ( ) . Error ( "ArtShowListByApplyStatus Find err" , zap . Error ( err ) )
return
}
return
}
2023-02-24 08:03:06 +00:00
func DelArtShow ( tx * gorm . DB , showUid string ) ( err error ) {
err = tx . Where ( "show_uid = ?" , showUid ) . Delete ( & model . ArtShow { } ) . Error
2022-09-21 06:30:52 +00:00
if err != nil {
zap . L ( ) . Error ( "ArtShow delete err" , zap . Error ( err ) )
return
}
2023-02-10 08:39:54 +00:00
return nil
2022-09-21 06:30:52 +00:00
}
2023-02-24 08:03:06 +00:00
func UniqueShowName ( showName string ) ( out * model . ArtShowRes , err error ) {
out = new ( model . ArtShowRes )
2023-03-16 03:47:00 +00:00
//err = db.DbArtShow.Table("art_show as a ").Select("a.show_uid").Joins("left join show_rel as b on a.show_uid = b.show_uid").Where("a.show_name = ?", showName).Find(&out).Error
err = db . DbArtShow . Model ( & model . ArtShow { } ) . Select ( "show_uid" ) . Where ( "show_name = ?" , showName ) . Find ( & out ) . Error
2023-02-24 08:03:06 +00:00
if err != nil {
zap . L ( ) . Error ( "ArtShow Find err" , zap . Error ( err ) )
return
}
return
}
func QueryArtShow ( showUids [ ] string ) ( err error , out [ ] * model . ArtShowRes ) {
2023-02-10 08:39:54 +00:00
out = make ( [ ] * model . ArtShowRes , 0 )
2023-03-30 00:58:03 +00:00
err = db . DbArtShow . Table ( "art_show as a " ) . Select ( "a.show_uid, a.show_seq, a.show_name, a.artist_name, a.artist_uid, a.artwork_num, a.ruler, a.price, a.create_time, a.operator,a.is_show, b.address ,b.show_time" ) . Joins ( "left join show_rel as b on a.show_uid = b.show_uid" ) . Where ( "a.show_uid in ? and b.deleted_at is null " , showUids ) . Find ( & out ) . Error
2022-09-21 06:30:52 +00:00
if err != nil {
zap . L ( ) . Error ( "ArtShow Find err" , zap . Error ( err ) )
return
}
return
}
2023-03-16 03:47:00 +00:00
func ShowRelDetail ( in * artShow . ShowDetailReq ) ( err error , out [ ] * model . ArtShowRes ) {
out = make ( [ ] * model . ArtShowRes , 0 )
query := db . DbArtShow . Table ( "art_show as a " ) . Select ( "a.show_uid, a.show_seq, a.show_name, a.artist_name, a.artist_uid, a.artwork_num, a.ruler, a.price, a.create_time, a.operator,a.is_show, b.address ,b.show_time" ) . Joins ( "left join show_rel as b on a.show_uid = b.show_uid" ) . Where ( "a.show_uid in ? " , in . ShowUID )
if in . ApplyID != "" {
query . Where ( " b.apply_uid = ? " , in . ApplyID )
}
err = query . Find ( & out ) . Error
if err != nil {
zap . L ( ) . Error ( "ShowRelDetail Find err" , zap . Error ( err ) )
return
}
return
}
2022-10-27 08:06:36 +00:00
func ShowStatistical ( isShow int32 ) ( err error , artistNum , packageNum , totalNum , NotShowNum , ShowHisNum int64 ) {
2022-09-21 06:30:52 +00:00
2022-10-27 08:06:36 +00:00
artistNum = 0
2022-09-21 06:30:52 +00:00
err = db . DbArtShow . Model ( & model . ArtShow { } ) . Distinct ( "artist_name" ) . Where ( "is_show = ?" , isShow ) . Count ( & artistNum ) . Error
if err != nil {
zap . L ( ) . Error ( "ShowStatistical artistNum count err" , zap . Error ( err ) )
return
}
2022-10-27 08:06:36 +00:00
packageNum = 0
2022-09-21 06:30:52 +00:00
err = db . DbArtShow . Model ( & model . ArtShow { } ) . Where ( "is_show = ?" , isShow ) . Count ( & packageNum ) . Error
if err != nil {
zap . L ( ) . Error ( "ShowStatistical packageNum count err" , zap . Error ( err ) )
return
}
2022-10-27 08:06:36 +00:00
totalNum = 0
err = db . DbArtShow . Model ( & model . ArtShow { } ) . Count ( & totalNum ) . Error
if err != nil {
zap . L ( ) . Error ( "ShowStatistical totalNum count err" , zap . Error ( err ) )
return
}
NotShowNum = 0
2022-11-30 03:01:14 +00:00
err = db . DbArtShow . Table ( "art_show as a" ) . Distinct ( "a.artist_uid" ) . Joins ( " join artwork_price as b on b.show_uid = a.show_uid" ) . Where ( "a.is_show in (1,2) and a.deleted_at is null" ) . Count ( & NotShowNum ) . Error
2022-10-27 08:06:36 +00:00
if err != nil {
zap . L ( ) . Error ( "ShowStatistical totalNum count err" , zap . Error ( err ) )
return
}
ShowHisNum = 0
2022-11-30 03:01:14 +00:00
err = db . DbArtShow . Table ( "art_show as a" ) . Distinct ( "a.artist_uid" ) . Joins ( " join artwork_price as b on b.show_uid = a.show_uid" ) . Where ( "a.is_show = 3 and a.deleted_at is null" ) . Count ( & ShowHisNum ) . Error
2022-10-27 08:06:36 +00:00
if err != nil {
zap . L ( ) . Error ( "ShowStatistical totalNum count err" , zap . Error ( err ) )
return
}
2022-09-21 06:30:52 +00:00
return
}
2022-11-30 03:01:14 +00:00
func QueryArtShowForArtwork ( in * artShow . ShowListForArtworkReq ) ( err error , total int64 , out [ ] * model . ArtShowRes ) {
// 查询 画家已出展 画展包
queryDB := db . DbArtShow . Table ( "art_show as a " ) . Select ( "a.show_uid, a.show_seq, a.show_name, a.artist_name, a.artist_uid, a.artwork_num, a.ruler, a.price, a.create_time, a.is_show, b.address ,b.show_time" ) . Joins ( "left join show_rel as b on a.show_uid = b.show_uid" ) . Where ( "a.artist_uid = ? and a.is_show = ?" , in . ArtistUID , 3 )
err = queryDB . Count ( & total ) . Error
if err != nil {
zap . L ( ) . Error ( "QueryArtShowForArtwork count err" , zap . Error ( err ) )
return
}
out = make ( [ ] * model . ArtShowRes , 0 )
err = queryDB . Offset ( int ( ( in . Page - 1 ) * in . PageSize ) ) .
Limit ( int ( in . PageSize ) ) . Find ( & out ) . Error
if err != nil {
zap . L ( ) . Error ( "QueryArtShowForArtwork err" , zap . Error ( err ) )
return
}
return
}
2023-02-24 08:03:06 +00:00
func countArtistNumInShowCurrentYear ( artistUid string ) ( num int64 ) {
err := db . DbArtShow . Table ( "art_show" ) . Where ( "artist_uid = ? and date_format(created_at,\"%Y\") = ? " , artistUid , time . Now ( ) . Format ( "2006" ) ) . Count ( & num ) . Error
if err != nil {
return - 1
}
num = num + 1
return
}