You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

167 lines
4.0 KiB
Go

package service
import (
"fonchain-artshow/cmd/dao"
"fonchain-artshow/cmd/model"
"fonchain-artshow/pb/artShow"
"fonchain-artshow/pkg/db"
"fonchain-artshow/pkg/m"
"fonchain-artshow/pkg/serializer"
"fonchain-artshow/pkg/utils"
)
func CreateArtShowWithArtworkPrice(in *artShow.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 *artShow.SaveShowReq) (err error, showID uint) {
err, artworkPrices := dao.ArtworkPriceList(uint(in.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))
for i := 0; i < len(artworks); i++ { // 查找 已存在 artwork_price 获取 ruler 信息
if artworks[i].Ruler == 0 {
err, artwork := dao.QueryArtworkPrice_id(artworks[i].ID)
if err != nil {
return err, 0
}
artworks[i].Ruler = artwork.Ruler
}
}
}
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 *artShow.DelShowReq) (err error) {
err = dao.DelArtShow(in)
if err != nil {
return
}
// 暂不处理 画展包里的 画作
return
}
func ArtShowList(in *artShow.ShowListReq) (err error, out *artShow.ShowListRes) {
out = new(artShow.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 *artShow.ShowDetailReq) (err error, out *artShow.ShowArtworkDetailRes) {
out = new(artShow.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 *artShow.ShowListReq) (err error, out *artShow.ShowListRes) {
out = new(artShow.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 *artShow.ShowStatisticalInfoReq) (err error, out *artShow.ShowStatisticalInfoRes_Num) {
out = new(artShow.ShowStatisticalInfoRes_Num)
err, out.ArtistNum, out.PackageNum = dao.ShowStatistical(in.IsShow)
if err != nil {
return
}
return
}