160 lines
3.7 KiB
Go
160 lines
3.7 KiB
Go
package service
|
|
|
|
import (
|
|
"fonchain-artshow/cmd/dao"
|
|
"fonchain-artshow/cmd/model"
|
|
"fonchain-artshow/pb/test"
|
|
"fonchain-artshow/pkg/db"
|
|
"fonchain-artshow/pkg/m"
|
|
"fonchain-artshow/pkg/serializer"
|
|
"fonchain-artshow/pkg/utils"
|
|
)
|
|
|
|
func CreateArtShowWithArtworkPrice(in *test.SaveShowReq) (err error, showID uint) {
|
|
artShowM := serializer.BuildArtShowM(in)
|
|
|
|
tx := db.DbArtShow.Begin()
|
|
|
|
err = dao.SaveArtShow(tx, artShowM)
|
|
if err != nil {
|
|
tx.Rollback()
|
|
return
|
|
}
|
|
|
|
artworks := serializer.BuildShowArtworkM(in.ShowArtwork, artShowM.ID)
|
|
|
|
err, artworks = serializer.CalcPrice(artworks, artShowM.Ruler, artShowM.Price)
|
|
if err != nil {
|
|
return
|
|
}
|
|
err, artworks = serializer.CalcReward(artworks, artShowM.Reward)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err, _ = dao.SaveArtworkPrice(tx, artworks)
|
|
if err != nil {
|
|
tx.Rollback()
|
|
return
|
|
}
|
|
|
|
err = tx.Commit().Error
|
|
|
|
return err, artShowM.ID
|
|
}
|
|
|
|
func UpdateArtShowWithArtworkPrice(in *test.SaveShowReq) (err error, showID uint) {
|
|
err, artShowExist := dao.QueryArtShow(uint(in.ID))
|
|
if err != nil {
|
|
return
|
|
}
|
|
err, artworkPrices := dao.ArtworkPriceList(artShowExist.ID)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
tx := db.DbArtShow.Begin()
|
|
artShowM := serializer.BuildArtShowM(in) // 构建画展包数据
|
|
artworks := make([]*model.ArtworkPrice, 0)
|
|
if len(in.ShowArtwork) < 1 && (in.Price != 0 || in.Reward != 0) {
|
|
artworks = artworkPrices
|
|
} else {
|
|
artworks = serializer.BuildShowArtworkM(in.ShowArtwork, uint(in.ID))
|
|
}
|
|
|
|
if len(artworks) > 0 {
|
|
if in.Price != 0 {
|
|
err, artworks = serializer.CalcPrice(artworks, artShowM.Ruler, artShowM.Price)
|
|
if err != nil {
|
|
return
|
|
}
|
|
}
|
|
if in.Reward != 0 {
|
|
err, artworks = serializer.CalcReward(artworks, artShowM.Reward)
|
|
if err != nil {
|
|
return
|
|
}
|
|
}
|
|
// 更新画作价格
|
|
err, newIDs := dao.SaveArtworkPrice(tx, artworks)
|
|
if err != nil {
|
|
tx.Rollback()
|
|
return err, 0
|
|
}
|
|
// 删除旧画作
|
|
_, del, _ := utils.BeUniqueSlice_uint(serializer.BuildArtworkPriceIDs(artworkPrices), newIDs)
|
|
if len(del) > 0 {
|
|
err = dao.DelArtworkPrice(tx, del)
|
|
if err != nil {
|
|
tx.Rollback()
|
|
return err, 0
|
|
}
|
|
}
|
|
}
|
|
// 更新画展包
|
|
err = dao.SaveArtShow(tx, artShowM)
|
|
if err != nil {
|
|
tx.Rollback()
|
|
return
|
|
}
|
|
|
|
err = tx.Commit().Error
|
|
return err, artShowM.ID
|
|
}
|
|
|
|
func DelArtShow(in *test.DelShowReq) (err error) {
|
|
err = dao.DelArtShow(in)
|
|
if err != nil {
|
|
return
|
|
}
|
|
// 暂不处理 画展包里的 画作
|
|
return
|
|
}
|
|
|
|
func ArtShowList(in *test.ShowListReq) (err error, out *test.ShowListRes) {
|
|
out = new(test.ShowListRes)
|
|
artShows := make([]*model.ArtShow, 0)
|
|
err, out.Total, artShows = dao.ArtShowList(in)
|
|
if err != nil {
|
|
return
|
|
}
|
|
err, out.TotalArtistNum, out.TotalPackageNum = dao.ShowStatistical(m.ARTSHOW_PASS)
|
|
if err != nil {
|
|
return
|
|
}
|
|
out.Data = serializer.BuildArtShowListRes(artShows)
|
|
return
|
|
}
|
|
|
|
func ShowInfo(in *test.ShowDetailReq) (err error, out *test.ShowArtworkDetailRes) {
|
|
out = new(test.ShowArtworkDetailRes)
|
|
artworkPriceS := make([]*model.ArtworkPrice, 0)
|
|
err, artworkPriceS = dao.ArtworkPriceList(uint(in.ShowID))
|
|
if err != nil {
|
|
return
|
|
}
|
|
out.Data = serializer.BuildShowArtworkRpc(artworkPriceS)
|
|
return
|
|
}
|
|
|
|
func ArtShowListWithApply(in *test.ShowListReq) (err error, out *test.ShowListRes) {
|
|
out = new(test.ShowListRes)
|
|
artShows := make([]*model.ArtShow, 0)
|
|
err, out.Total, artShows = dao.ArtShowListByApplyStatus(in)
|
|
err, out.TotalArtistNum, out.TotalPackageNum = dao.ShowStatistical(m.ARTSHOW_PASS)
|
|
if err != nil {
|
|
return
|
|
}
|
|
out.Data = serializer.BuildArtShowListRes(artShows)
|
|
return
|
|
}
|
|
|
|
func ShowStatisticalInfo(in *test.ShowStatisticalInfoReq) (err error, out *test.ShowStatisticalInfoRes_Num) {
|
|
out = new(test.ShowStatisticalInfoRes_Num)
|
|
err, out.ArtistNum, out.PackageNum = dao.ShowStatistical(in.IsShow)
|
|
if err != nil {
|
|
return
|
|
}
|
|
return
|
|
}
|