package logic import ( "github.com/fonchain/fonchain-artistinfo/cmd/internal/dao" statement "github.com/fonchain/fonchain-artistinfo/pb/artistinfoStatement" db "github.com/fonchain/fonchain-artistinfo/pkg/db" "github.com/fonchain/fonchain-artistinfo/pkg/util" "gorm.io/gorm" ) type IStatement interface { UploadExcelOneTx(req *statement.UploadExcelOneTxRequest) (rep *statement.UploadExcelOneTxRespond, err error) UploadExcelTwoTx(req *statement.UploadExcelTwoTxRequest) (rep *statement.UploadExcelTwoTxRespond, err error) UploadExcelOneCopy(req *statement.UploadExcelOneCopyRequest) (rep *statement.UploadExcelOneCopyRespond, err error) UploadExcelTwoCopy(req *statement.UploadExcelTwoCopyRequest) (rep *statement.UploadExcelTwoCopyRespond, err error) GetAllBatchTimeTx(req *statement.GetAllBatchTimeTxRequest) (rep *statement.GetAllBatchTimeTxRespond, err error) GetArtworkSoldTxDetailList(req *statement.GetArtworkSoldTxDetailListRequest) (rep *statement.GetArtworkSoldTxDetailListRespond, err error) StatementList(req *statement.StatementListRequest) (rep *statement.StatementListRespond, err error) GetTxInfoByBatchUid(req *statement.GetTxInfoByBatchUidRequest) (rep *statement.GetTxInfoByBatchUidRespond, err error) GetCopyInfoByBatchUid(req *statement.GetCopyInfoByBatchUidRequest) (rep *statement.GetCopyInfoByBatchUidRespond, err error) } func NewStatement() IStatement { return &Statement{} } type Statement struct { } func (a *Statement) UploadExcelOneTx(req *statement.UploadExcelOneTxRequest) (rep *statement.UploadExcelOneTxRespond, err error) { rep = &statement.UploadExcelOneTxRespond{} //开启事务,遇到错误就回滚 tx := db.DB.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() for _, v := range req.ExcelOneInfo { //查看是否已经被生成了批次,没有的就生成物权批次 exist, artworkTx, err := dao.IsExistArtworkTx(v.BatchTime, v.ArtistUid) if err != nil { return rep, err } if exist { //获取批次uid uid1, err := util.GetUid() if err != nil { return rep, err } //生成批次 err = dao.CreateArtworkTx(tx, uid1, v.BatchTime, v.ArtistUid, v.ArtistName) if err != nil { return rep, err } //对账单画作物权委托详情uid uid2, err := util.GetUid() if err != nil { return rep, err } //将数据插入对账单画作物权委托详情 err = dao.CreateArtworkTxDetail(tx, uid1, uid2, v) if err != nil { return rep, err } } else { //获取批次uid uid, err := util.GetUid() if err != nil { return rep, err } err = dao.CreateArtworkTxDetail(tx, artworkTx.Uid, uid, v) if err != nil { return rep, err } } } return } func (a *Statement) UploadExcelTwoTx(req *statement.UploadExcelTwoTxRequest) (rep *statement.UploadExcelTwoTxRespond, err error) { rep = &statement.UploadExcelTwoTxRespond{} //开启事务,遇到错误就回滚 tx := db.DB.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() for _, v := range req.ExcelTwoInfo { //查看是否已经被生成了物权批次 exist, artworkTx, err := dao.IsExistArtworkTx(v.BatchTime, v.ArtistUid) if err != nil { return rep, err } //没有的就生成物权批次 if exist { //获取批次uid uid1, err := util.GetUid() if err != nil { return rep, err } //生成批次 err = dao.CreateArtworkTx(tx, uid1, v.BatchTime, v.ArtistUid, v.ArtistName) if err != nil { return rep, err } //对账单画作物权委托详情uid uid2, err := util.GetUid() if err != nil { return rep, err } //将数据插入对账单画作物权销售委托详情 err = dao.CreateArtworkSoldTxDetail(tx, uid1, uid2, v) if err != nil { return rep, err } } else { //获取批次uid uid, err := util.GetUid() if err != nil { return rep, err } err = dao.CreateArtworkSoldTxDetail(tx, artworkTx.Uid, uid, v) if err != nil { return rep, err } } } return } func (a *Statement) UploadExcelOneCopy(req *statement.UploadExcelOneCopyRequest) (rep *statement.UploadExcelOneCopyRespond, err error) { rep = &statement.UploadExcelOneCopyRespond{} //开启事务,遇到错误就回滚 tx := db.DB.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() for _, v := range req.ExcelOneInfo { //查看是否已经被生成了批次,没有的就生成版权批次 exist, artworkCopy, err := dao.IsExistArtworkCopy(v.BatchTime, v.ArtistUid) if err != nil { return rep, err } if exist { //获取批次uid uid1, err := util.GetUid() if err != nil { return rep, err } //生成批次 err = dao.CreateArtworkCopy(tx, uid1, v.BatchTime, v.ArtistUid, v.ArtistName) if err != nil { tx.Rollback() return rep, err } //对账单画作物权委托详情uid uid2, err := util.GetUid() if err != nil { return rep, err } //将数据插入对账单画作物权委托详情 err = dao.CreateArtworkCopyDetail(tx, uid1, uid2, v) if err != nil { return rep, err } } else { //获取批次uid uid, err := util.GetUid() if err != nil { return rep, err } err = dao.CreateArtworkCopyDetail(tx, artworkCopy.Uid, uid, v) if err != nil { return rep, err } } } return } func (a *Statement) UploadExcelTwoCopy(req *statement.UploadExcelTwoCopyRequest) (rep *statement.UploadExcelTwoCopyRespond, err error) { rep = &statement.UploadExcelTwoCopyRespond{} //开启事务,遇到错误就回滚 tx := db.DB.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() for _, v := range req.ExcelTwoInfo { //查看是否已经被生成了物权批次 exist, artworkCopy, err := dao.IsExistArtworkCopy(v.BatchTime, v.ArtistUid) if err != nil { return rep, err } //没有的就生成物权批次 if exist { //获取批次uid uid1, err := util.GetUid() if err != nil { return rep, err } //生成批次 err = dao.CreateArtworkCopy(tx, uid1, v.BatchTime, v.ArtistUid, v.ArtistName) if err != nil { tx.Rollback() return rep, err } //对账单画作物权委托详情uid uid2, err := util.GetUid() if err != nil { return rep, err } //将数据插入对账单画作物权销售委托详情 err = dao.CreateArtworkSoldCopyDetail(tx, uid1, uid2, v) if err != nil { return rep, err } } else { //获取批次uid uid, err := util.GetUid() if err != nil { return rep, err } err = dao.CreateArtworkSoldCopyDetail(tx, artworkCopy.Uid, uid, v) if err != nil { return rep, err } } } return } func (a *Statement) GetAllBatchTimeTx(req *statement.GetAllBatchTimeTxRequest) (rep *statement.GetAllBatchTimeTxRespond, err error) { rep = &statement.GetAllBatchTimeTxRespond{} //batchTime去重查询,只获取batchTime字段值 batchTime, err := dao.GetAllBatchTimeTx() if err != nil { return } rep.BatchTime = batchTime return } func (a *Statement) GetAllBatchTimeCopy(req *statement.GetAllBatchTimeCopyRequest) (rep *statement.GetAllBatchTimeCopyRespond, err error) { rep = &statement.GetAllBatchTimeCopyRespond{} //batchTime去重查询,只获取batchTime字段值 batchTime, err := dao.GetAllBatchTimeCopy() if err != nil { return } rep.BatchTime = batchTime return } func (a *Statement) GetArtworkSoldTxDetailList(req *statement.GetArtworkSoldTxDetailListRequest) (rep *statement.GetArtworkSoldTxDetailListRespond, err error) { rep = &statement.GetArtworkSoldTxDetailListRespond{} artistList := &statement.ArtistList{} artworkSoldDetailList := &statement.ArtworkSoldDetailList{} var query *gorm.DB = db.DB // 初始化query变量 //画家姓名不为空,模糊查询(根据画家姓名的某个字也可以查询) if req.ArtistName != "" { query = query.Where("artist_name LiKE ?", "%"+req.ArtistName+"%") } //批次不为空 if req.BatchTime != "" { query = query.Where("batch_time = ?", req.BatchTime) } //画家姓名不为空 if req.State != 0 { query = query.Where("state = ?", req.State) } //合同分页查询操作 if req.Page < 1 { req.Page = 1 } if req.Num < 1 { req.Num = 15 } offset := (req.Page - 1) * req.Num artworkTxList, err := dao.GetArtworkTxList(query, req.Num, offset) if err != nil { return } for _, v := range artworkTxList { artistList.BatchUid = v.Uid artistList.ArtistName = v.ArtistName artistList.BatchTime = v.BatchTime artistList.State = v.State //当已经签署了合同时 if v.State == 3 { //获取合同预览和下载链接 contract, err := dao.GetContractUrlTx(v.Uid) if err != nil { return rep, err } artistList.ViewUrl = contract.ViewUrl artistList.DownloadUrl = contract.DownloadUrl } else { artistList.ViewUrl = "" artistList.DownloadUrl = "" } //查询对账单画作物权销售委托详情 artworkSoldTxDetail, err := dao.GetArtworkSoldTxDetailList(v.Uid) if err != nil { return rep, err } //获取该画家该批次所有的已售出的画信息 for _, m := range artworkSoldTxDetail { artworkSoldDetailList.ArtworkName = m.ArtworkName artworkSoldDetailList.TfNum = m.TfNum artworkSoldDetailList.Ruler = m.Ruler artworkSoldDetailList.SaleNo = m.SaleNo artworkSoldDetailList.CompleteDate = m.CompleteDate artworkSoldDetailList.SalePrice = m.SalePrice artistList.ArtworkSoldDetailList = append(artistList.ArtworkSoldDetailList, artworkSoldDetailList) } rep.ArtistList = append(rep.ArtistList, artistList) } return } func (a *Statement) GetArtworkSoldCopyDetailList(req *statement.GetArtworkSoldCopyDetailListRequest) (rep *statement.GetArtworkSoldCopyDetailListRespond, err error) { rep = &statement.GetArtworkSoldCopyDetailListRespond{} artistList := &statement.ArtistList{} artworkSoldDetailList := &statement.ArtworkSoldDetailList{} var query *gorm.DB = db.DB // 初始化query变量 //画家姓名不为空 if req.ArtistName != "" { query = query.Where("artist_name LiKE ?", "%"+req.ArtistName+"%") } //批次不为空 if req.BatchTime != "" { query = query.Where("batch_time = ?", req.BatchTime) } //画家姓名不为空 if req.State != 0 { query = query.Where("state = ?", req.State) } //合同分页查询操作 if req.Page < 1 { req.Page = 1 } if req.Num < 1 { req.Num = 15 } offset := (req.Page - 1) * req.Num artworkCopyList, err := dao.GetArtworkCopyList(query, req.Num, offset) if err != nil { return } for _, v := range artworkCopyList { artistList.BatchUid = v.Uid artistList.ArtistName = v.ArtistName artistList.BatchTime = v.BatchTime artistList.State = v.State //当已经签署了合同时 if v.State == 3 { //获取合同预览和下载链接 contract, err := dao.GetContractUrlTx(v.Uid) if err != nil { return rep, err } artistList.ViewUrl = contract.ViewUrl artistList.DownloadUrl = contract.DownloadUrl } else { artistList.ViewUrl = "" artistList.DownloadUrl = "" } //查询对账单画作物权销售委托详情 artworkSoldTxDetail, err := dao.GetArtworkSoldTxDetailList(v.Uid) if err != nil { return rep, err } //获取该画家该批次所有的已售出的画信息 for _, m := range artworkSoldTxDetail { artworkSoldDetailList.ArtworkName = m.ArtworkName artworkSoldDetailList.TfNum = m.TfNum artworkSoldDetailList.Ruler = m.Ruler artworkSoldDetailList.SaleNo = m.SaleNo artworkSoldDetailList.CompleteDate = m.CompleteDate artworkSoldDetailList.SalePrice = m.SalePrice artistList.ArtworkSoldDetailList = append(artistList.ArtworkSoldDetailList, artworkSoldDetailList) } rep.ArtistList = append(rep.ArtistList, artistList) } return } func (a *Statement) StatementList(req *statement.StatementListRequest) (rep *statement.StatementListRespond, err error) { //查看是否有该画家 user, err := dao.GetArtistInfoById(req.ArtistUid) if err != nil { return } ContractData, err := dao.StatementList(user.MgmtArtistUid, req.State) if err != nil { return } rep = &statement.StatementListRespond{ Data: ContractData, } return } func (a *Statement) GetTxInfoByBatchUid(req *statement.GetTxInfoByBatchUidRequest) (rep *statement.GetTxInfoByBatchUidRespond, err error) { rep = &statement.GetTxInfoByBatchUidRespond{} //获取画家名 artworkTx, err := dao.GetTxArtistNameByBatchUid(req.BatchUid) if err != nil { return } rep.ArtistName = artworkTx.ArtistName //获取物权画作详细信息 artworkTxDetails, err := dao.GetArtworkTxDetailByBatchUid(req.BatchUid) if err != nil { return } rep.ArtistName = artworkTx.ArtistName //获取物权画作被售卖详细信息 artworkSoldTxDetails, err := dao.GetArtworkSoldTxDetailByBatchUid(req.BatchUid) if err != nil { return } artworkTxDetail := new(statement.ArtworkTxDetail) artworkSoldTxDetail := new(statement.ArtworkSoldTxDetail) for _, v := range artworkTxDetails { artworkTxDetail.TfNum = v.TfNum artworkTxDetail.ArtworkName = v.ArtworkName artworkTxDetail.Ruler = v.Ruler artworkTxDetail.MinPrice = v.MinPrice artworkTxDetail.GuaranteePrice = v.GuaranteePrice rep.ArtworkTxDetail = append(rep.ArtworkTxDetail, artworkTxDetail) } for _, v := range artworkSoldTxDetails { artworkSoldTxDetail.TfNum = v.TfNum artworkSoldTxDetail.ArtworkName = v.ArtworkName artworkSoldTxDetail.Ruler = v.Ruler artworkSoldTxDetail.SaleNo = v.SaleNo artworkSoldTxDetail.CompleteDate = v.CompleteDate artworkSoldTxDetail.SalePrice = v.SalePrice rep.ArtworkSoldTxDetail = append(rep.ArtworkSoldTxDetail, artworkSoldTxDetail) } return } func (a *Statement) GetCopyInfoByBatchUid(req *statement.GetCopyInfoByBatchUidRequest) (rep *statement.GetCopyInfoByBatchUidRespond, err error) { rep = &statement.GetCopyInfoByBatchUidRespond{} //获取画家名 artworkTx, err := dao.GetCopyArtistNameByBatchUid(req.BatchUid) if err != nil { return } rep.ArtistName = artworkTx.ArtistName //获取版权画作详细信息 artworkTxDetails, err := dao.GetArtworkCopyDetailByBatchUid(req.BatchUid) if err != nil { return } rep.ArtistName = artworkTx.ArtistName //获取版权画作被售卖详细信息 artworkSoldTxDetails, err := dao.GetArtworkSoldCopyDetailByBatchUid(req.BatchUid) if err != nil { return } artworkCopyDetail := new(statement.ArtworkCopyDetail) artworkSoldCopyDetail := new(statement.ArtworkSoldCopyDetail) for _, v := range artworkTxDetails { artworkCopyDetail.TfNum = v.TfNum artworkCopyDetail.ArtworkName = v.ArtworkName artworkCopyDetail.Ruler = v.Ruler artworkCopyDetail.MinPrice = v.MinPrice artworkCopyDetail.GuaranteePrice = v.GuaranteePrice rep.ArtworkCopyDetail = append(rep.ArtworkCopyDetail, artworkCopyDetail) } for _, v := range artworkSoldTxDetails { artworkSoldCopyDetail.TfNum = v.TfNum artworkSoldCopyDetail.ArtworkName = v.ArtworkName artworkSoldCopyDetail.Ruler = v.Ruler artworkSoldCopyDetail.SaleNo = v.SaleNo artworkSoldCopyDetail.CompleteDate = v.CompleteDate artworkSoldCopyDetail.MinPrice = v.MinPrice artworkSoldCopyDetail.SalePrice = v.SalePrice artworkSoldCopyDetail.GuaranteePrice = v.GuaranteePrice rep.ArtworkSoldCopyDetail = append(rep.ArtworkSoldCopyDetail, artworkSoldCopyDetail) } return }