package service import ( "errors" "fonchain-artshow/cmd/dao" "fonchain-artshow/cmd/model" "fonchain-artshow/pb/artShow" "fonchain-artshow/pkg/db" "fonchain-artshow/pkg/m" "fonchain-artshow/pkg/serializer" ) // 创建 画展包 及 关联画作 func CreateArtShowWithArtworkPrice(in *artShow.SaveShowReq) (err error, showUID string) { artShowM := serializer.BuildArtShowM(in) out, err := dao.UniqueShowName(in.ShowName) if err != nil { return err, "" } if out.ShowUID != "" { return errors.New(m.ERROR_SHOW_EXIST), "" } tx := db.DbArtShow.Begin() err = dao.SaveArtShow(tx, artShowM) if err != nil { tx.Rollback() return } if len(in.Artwork) > 0 { artworks := serializer.BuildShowArtworkM(in.Artwork, artShowM.ShowUID) if in.Price > 0 && in.Ruler > 0 { artworks = serializer.CalcPrice(artShowM.Price, artShowM.Ruler, artworks) } for i := 0; i < len(artworks); i++ { err = dao.SaveArtworkPrice(tx, artworks[i]) if err != nil { tx.Rollback() return errors.New(m.ERROR_ARTWORK_CREATE), "" } } } err = tx.Commit().Error return err, artShowM.ShowUID } // 更新 画展包 及 关联画作 func UpdateArtShowWithArtworkPrice(in *artShow.SaveShowReq) (err error, showUID string) { tx := db.DbArtShow.Begin() artShowM := serializer.BuildArtShowM(in) // 构建画展包数据 artworks := make([]*model.ArtworkPrice, 0) // 查询是否已有画作存在 /*err, artworkPrices := dao.ArtworkPriceList(in.ShowUID) if err != nil { return } fmt.Println("artworkPrices ==== ", artworkPrices) if len(artworkPrices) > 0 { artworks = append(artworks, artworkPrices...) }*/ // 判断是否有新增画作 if len(in.Artwork) > 0 { for i := 0; i < len(in.Artwork); i++ { if in.Artwork[i].ArtworkPriceUID != "" { queryErr, oldArtwork := dao.QueryArtworkPrice_uid(in.Artwork[i].ArtworkPriceUID) if queryErr != nil { return queryErr, "" } artworks = append(artworks, oldArtwork) //fmt.Println("artworkPrices ==== ", oldArtwork) } else { newArtwork := serializer.BuildShowArtwork(in.Artwork[i], in.ShowUID) artworks = append(artworks, newArtwork) //fmt.Println("artworkPrices ==== ", newArtwork) } } } // 更新 画作 if len(artworks) > 0 { if in.Price > 0 && in.Ruler > 0 { artworks = serializer.CalcPrice(artShowM.Price, artShowM.Ruler, artworks) } for i := 0; i < len(artworks); i++ { if artworks[i].ArtworkPriceUID != "" { // 更新画作价格 err := dao.UpdateArtworkPrice(tx, artworks[i]) if err != nil { tx.Rollback() return err, "" } } else { err = dao.SaveArtworkPrice(tx, artworks[i]) if err != nil { tx.Rollback() return err, "" } } } } // 删除旧画作 if len(in.DelArtwork) > 0 { del := make([]string, 0) for i := 0; i < len(in.DelArtwork); i++ { del = append(del, in.DelArtwork[i].ArtworkPriceUID) } err = dao.DelArtworkPrice(tx, del) if err != nil { tx.Rollback() return err, "" } } // 更新画展包 err = dao.UpdateArtShow(tx, artShowM) if err != nil { tx.Rollback() return } err = tx.Commit().Error return err, artShowM.ShowUID } // 删除画展包 func DelArtShow(in *artShow.DelShowReq) (err error) { queryShowErr, shows := dao.QueryArtShow(in.ShowUID) if queryShowErr != nil { return queryShowErr } tx := db.DbArtShow.Begin() for i := 0; i < len(shows); i++ { if shows[i].IsShow < m.ARTSHOW_SALE_ADDRESS_PASS { delArtShowErr := dao.DelArtShow(tx, shows[i].ShowUID) if err != nil { tx.Rollback() return delArtShowErr } delArtworkPriceErr := dao.DelArtworkPrice_showUID(tx, shows[i].ShowUID) if err != nil { tx.Rollback() return delArtworkPriceErr } } else { tx.Rollback() return errors.New("存在画展包被使用,无法删除") } } err = tx.Commit().Error return } // 画展包列表 不携带 画展地址 画展时间 func ArtShowList(in *artShow.ShowListReq) (err error, out *artShow.ShowListRes) { out = new(artShow.ShowListRes) artShows := make([]*model.ArtShowRes, 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 ArtShowListWithRel(in *artShow.ShowListReq) (err error, out *artShow.ShowListRes) { out = new(artShow.ShowListRes) artShows := make([]*model.ArtShowRes, 0) err, out.Total, artShows = dao.ArtShowListWithRel(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 ShowArtworkInfo(in *artShow.ArtworkDetailReq) (err error, out *artShow.ShowArtworkDetailRes) { out = new(artShow.ShowArtworkDetailRes) artworkPriceS := make([]*model.ArtworkPrice, 0) err, artworkPriceS = dao.ArtworkPriceList(in.ShowUID) if err != nil { return } out.Data = serializer.BuildShowArtworkListRpc(artworkPriceS) return } // 画展包详情 func ShowDetail(in *artShow.ShowDetailReq) (err error, out *artShow.ShowDetailRes) { out = new(artShow.ShowDetailRes) shows := make([]*model.ArtShowRes, 0) err, shows = dao.ShowRelDetail(in) if err != nil { return } out.Data = serializer.BuildArtShowListRes(shows) return } func ArtShowListWithApply(in *artShow.ShowListReq) (err error, out *artShow.ShowListRes) { out = new(artShow.ShowListRes) artShows := make([]*model.ArtShowRes, 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, out.TotalNum, out.NotShowNum, out.ShowHisNum = dao.ShowStatistical(in.IsShow) if err != nil { return } return } func QueryArtShowForArtwork(in *artShow.ShowListForArtworkReq) (err error, out *artShow.ShowListForArtworkRes) { out = new(artShow.ShowListForArtworkRes) err, total, shows := dao.QueryArtShowForArtwork(in) if err != nil { return err, out } if len(shows) > 0 { out.Total = total out.Data = serializer.BuildArtShowListRes(shows) } return } /* 1、取消画展包 展出 , 状态 回退 到 2 (画展包可出展状态) TODO 2、未做当前 画展包 状态检查 待确认 何种状态下 可以取消 (在 客户端 调用 画作系统 ,判断 画展包是否已 出库) */ func CancelShow(in *artShow.CancelShowReq) (err error) { // 不删除 画展的画展包数量申请 tx := db.DbArtShow.Begin() for i := 0; i < len(in.ShowUID); i++ { // 删除 关联表 err = dao.DelShowReWithShowUID(tx, in.ShowUID[i]) if err != nil { tx.Rollback() return } // 更新 画展包状态 为 可展 show := serializer.BuildArtShowIsShowM(in.ShowUID[i], m.ARTSHOW_PASS) err = dao.UpdateArtShow(tx, show) if err != nil { tx.Rollback() return err } // 删除相关 数据 (画作润格, 画作销售站点) err = dao.UpdateArtworkInfoWithMap(tx, map[string]interface{}{"reward": "", "sale_address": ""}, in.ShowUID[i], "") if err != nil { tx.Rollback() return err } } err = tx.Commit().Error return } func QueryShowStatus(in *artShow.ShowStatusReq) (err error, out *artShow.ShowStatusRes) { err, shows := dao.QueryArtShow(in.ShowUID) if err != nil { return } out = new(artShow.ShowStatusRes) out.Status = serializer.BuildShowStatusRpc(shows) return }