fonchain-artistinfo/cmd/internal/dao/contract.go
2023-03-18 10:36:31 +08:00

450 lines
14 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package dao
import (
"errors"
"fmt"
"strings"
"github.com/fonchain/fonchain-artistinfo/cmd/model"
contract "github.com/fonchain/fonchain-artistinfo/pb/contract"
db "github.com/fonchain/fonchain-artistinfo/pkg/db"
"github.com/fonchain/fonchain-artistinfo/pkg/m"
uuid "github.com/satori/go.uuid"
"go.uber.org/zap"
"gorm.io/gorm"
)
func GetArtistInfoByArtistUid(artistUid string) (user model.User, err error) {
if err = db.DB.Where("mgmt_artist_uid = ?", artistUid).Preload("RealNameInfo").Find(&user).Error; err != nil {
zap.L().Error("get user info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
return
}
func GetMgmtContractByArtistUid(artistUid string, contractType int32) (err error) {
var contract model.Contract
if err = db.DB.Where("artist_uid = ? AND type = ?", artistUid, contractType).First(&contract).Error; err != nil && err != gorm.ErrRecordNotFound {
zap.L().Error("get contract info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
//err 为空则查询到,返回画作合同已存在的错误
if err == nil {
err = errors.New(m.ARTWORK_CONTRACT_EXISTS)
}
return
}
func CreateArtistContract(tx *gorm.DB, contract *model.Contract) (err error) {
fmt.Println("第一处1111222")
if err = tx.Create(contract).Error; err != nil {
zap.L().Error("create contract err", zap.Error(err))
err = errors.New(m.CREATE_ERROR)
return
}
return
}
func GetMgmtContractByArtworkUid(artworkUid string, artworkType int32) (err error) {
//画作有合同类型是26的都是 点击过"著作权代理转让服务合同"的
var contract model.Contract
if err = db.DB.Where("artwork_uid LiKE ? AND type = ?", "%"+artworkUid+"%", artworkType).First(&contract).Error; err != nil && err != gorm.ErrRecordNotFound {
zap.L().Error("get contract info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
//err 为空则查询到,返回画作合同已存在的错误
if err == nil {
err = errors.New(m.ARTWORK_CONTRACT_EXISTS)
}
return
}
func CreateArtworkContract(tx *gorm.DB, artworkUid []string, artistUid string, contractType int32, latestLockTime string) (err error) {
var uid uuid.UUID
if uid, err = uuid.NewV4(); err != nil {
err = errors.New(m.ERROR_UID)
return
}
//将画作切片转换成字符串格式便于保存
ArtworkUid := strings.Join(artworkUid, ",")
contract := &model.Contract{
Uid: uid.String(),
ArtistUid: artistUid,
ArtworkUid: ArtworkUid,
Type: contractType,
State: 1,
Status: 2,
LockTime: latestLockTime,
}
if err = tx.Create(contract).Error; err != nil {
zap.L().Error("create contract err", zap.Error(err))
err = errors.New(m.CREATE_ERROR)
return
}
return
}
func GetArtistNoByUid(artistUid string) (err error) {
var user model.User
if err = db.DB.Where("mgmt_artist_uid = ?", artistUid).First(&user).Error; err != nil {
zap.L().Error("get user info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
return
}
func GetContractList(artistUid string, pageSize, offset int32) (contracts []*contract.Contracts, err error) {
var contractSlice []model.Contract
if err = db.DB.Where("artist_uid = ?", artistUid).Order("ID asc").Limit(int(pageSize)).Offset(int(offset)).Find(&contractSlice).Error; err != nil {
zap.L().Error("get contracts info err", zap.Error(err))
err = errors.New(m.CREATE_ERROR)
return
}
fmt.Println("第二处")
for _, v := range contractSlice {
contcontract := &contract.Contracts{
ContractUid: v.Uid,
ArtistUid: v.ArtistUid,
ArtworkUid: v.ArtworkUid,
ContractId: v.ContractId,
TransactionId: v.TransactionId,
Type: v.Type,
ViewUrl: v.ViewUrl,
DownloadUrl: v.DownloadUrl,
State: v.State,
Status: int32(v.Status),
LockTime: v.LockTime,
}
contracts = append(contracts, contcontract)
}
return
}
func GetArtistInfoById(artistUid string) (user model.User, err error) {
if err = db.DB.Where("mgmt_artist_uid = ?", artistUid).First(&user).Error; err != nil {
zap.L().Error("get user info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
return
}
func ContractList(artist_uid string, state int32) (ContractData []*contract.Contracts, err error) {
// if state != 0 {
// if state == 2 {
// state = 3
// }
// }
var contracts []model.Contract
if err = db.DB.Where("artist_uid = ? AND type != 4 AND state = ?", artist_uid, state).Find(&contracts).Error; err != nil {
zap.L().Error("get contracts info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
for _, v := range contracts {
Contract := &contract.Contracts{
ContractUid: v.Uid,
ArtistUid: v.ArtistUid,
ArtworkUid: v.ArtworkUid,
ContractId: v.ContractId,
TransactionId: v.TransactionId,
Type: v.Type,
ViewUrl: v.ViewUrl,
DownloadUrl: v.DownloadUrl,
State: v.State,
Status: int32(v.Status),
LockTime: v.LockTime,
SignTime: v.SignTime,
}
ContractData = append(ContractData, Contract)
}
return
}
func GetContractInfo(contractUid string) (contractInfo model.Contract, err error) {
if err = db.DB.Where("uid = ?", contractUid).First(&contractInfo).Error; err != nil {
zap.L().Error("get contract info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
return
}
func UpdateContract(tx *gorm.DB, req *contract.SignContractRequest) (err error) {
fmt.Println("第一处1111")
if err = tx.Model(&model.Contract{}).Where("uid = ?", req.ContractUid).Updates(model.Contract{ViewUrl: req.ViewPdfUrl, DownloadUrl: req.DownloadUrl, ContractId: req.ContractNo, TransactionId: req.TransactionId, State: 1}).Error; err != nil {
zap.L().Error("update contract info err", zap.Error(err))
err = errors.New(m.UPDATE_FAILED)
return
}
return
}
func UpdateContractTx(tx *gorm.DB, contractUid, transactionId string) (err error) {
if err = tx.Model(&model.Contract{}).Where("artist_uid = ?", contractUid).Updates(model.Contract{TransactionId: transactionId, State: 1}).Error; err != nil {
zap.L().Error("update contract info err", zap.Error(err))
err = errors.New(m.UPDATE_FAILED)
return
}
return
}
func FinishContract(tx *gorm.DB, transactionId string) (contracts *contract.Contracts, err error) {
var modelContract model.Contract
if err = tx.Where("transaction_id = ?", transactionId).First(&modelContract).Error; err != nil {
zap.L().Error("get contract info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
if err = db.DB.Model(&modelContract).Update("state", 2).Error; err != nil {
zap.L().Error("update user contract failed", zap.Error(err))
err = errors.New(m.UPDATE_FAILED)
return
}
contracts = &contract.Contracts{
ArtistUid: modelContract.ArtistUid,
ArtworkUid: modelContract.ArtworkUid,
ContractUid: modelContract.ContractId,
TransactionId: modelContract.TransactionId,
Type: modelContract.Type,
ViewUrl: modelContract.ViewUrl,
DownloadUrl: modelContract.DownloadUrl,
State: modelContract.State,
Status: modelContract.Status,
LockTime: modelContract.LockTime,
SignTime: modelContract.SignTime,
}
return
}
func ContractTxList(uid string, state int32) (contracts []model.Contract, err error) {
if err = db.DB.Where("artist_uid = ? AND (type = 4 or type = 7) ADN state = ?", uid, state).Find(&contracts).Error; err != nil {
zap.L().Error("get contracts info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
return
}
// func UpdateArtworkState(tx *gorm.DB, id int32) (err error) { //无用
// var artworkState model.ArtworkState
// if err = tx.Where("artwork_id = ? and state = ? ", id, 7).First(&artworkState).Error; err != nil {
// if err == gorm.ErrRecordNotFound {
// artworkState.ArtworkId = id
// artworkState.State = 7
// if err = tx.Create(&artworkState).Error; err != nil {
// zap.L().Error("create artworkState err", zap.Error(err))
// err = errors.New(m.CREATE_ERROR)
// return
// }
// } else {
// zap.L().Error("find artworkState info err", zap.Error(err))
// err = errors.New(m.ERROR_DATA_NOT_EXISTS)
// return
// }
// }
// }
// if err = tx.Model(&model.Artwork{}).Where("id = ? ", id).Update("flow_state", 7).Error; err != nil {
// zap.L().Error("Artwork Update Err", zap.Error(err))
// err = errors.New(m.ERROR_DATA_NOT_EXISTS)
// return
// }
// return
// }
// func ContractList(req *contract.ContractListRequest) (rep *contract.ContractListRespond, err error) {
// rep = &contract.ContractListRespond{}
// var Data []*contract.ContractData
// var user model.User
// if err = db.DB.Where("id = ? ", req.ID).First(&user).Error; err != nil {
// zap.L().Error("get user info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return
// }
// var realName model.RealName
// if err = db.DB.Where("id = ? ", user.RealNameId).First(&realName).Error; err != nil {
// zap.L().Error("get realName info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return
// }
// var args []interface{}
// var sqlWhere = "user_id = ? and type !=4 "
// args = append(args, req.ID)
// if req.State != 0 {
// sqlWhere += " and state = ? "
// if req.State == 2 {
// req.State = 3
// }
// args = append(args, req.State)
// }
// var contractModel []model.Contract
// if err = db.DB.Where(sqlWhere, args...).Find(&contractModel).Error; err != nil {
// zap.L().Error("get contractModels info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return
// }
// for _, v := range contractModel {
// contract := &contract.ContractData{}
// contract.ID = uint64(v.ID)
// contract.ContractId = v.ContractId
// contract.DownloadUrl = v.DownloadUrl
// contract.MgmtUserId = v.MgmtUserId
// contract.State = int64(v.State)
// contract.TransactionId = v.TransactionId
// contract.Type = int64(v.Type)
// contract.UserId = int64(v.UserId)
// contract.ViewUrl = v.ViewUrl
// contract.ExpirationTime = v.CreatedAt.Add(86400 * time.Second).Format("2006-01-02 15:04:05")
// contract.SignTime = v.UpdatedAt.Format("2006-01-02")
// Data = append(Data, contract)
// }
// rep.Data = Data
// return
// }
// func ContractTxList(req *contract.ContractTxListRequest) (rep *contract.ContractTxListRespond, err error) {
// rep = &contract.ContractTxListRespond{}
// var Data []*contract.ContractData
// var user model.User
// if err = db.DB.Where("id = ? ", int32(req.ID)).First(&user).Error; err != nil {
// zap.L().Error("get user info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return
// }
// // todo
// //var realName model.RealName
// //if err = db.DB.Where("id = ? ", user.RealNameID).First(&realName).Error; err != nil {
// // zap.L().Error("get realName info err", zap.Error(err))
// // err = errors.New(m.ERROR_SELECT)
// // return
// //}
// //
// //var args []interface{}
// //var sqlWhere = " card_id = ? and (type = 4 or type = 7) "
// //args = append(args, realName.IDNum)
// //if req.State != 0 {
// // sqlWhere += " and state = ? "
// // args = append(args, req.State)
// //}
// //
// //var contractModel []model.Contract
// //if err = db.DB.Where(sqlWhere, args...).Find(&contractModel).Error; err != nil {
// // zap.L().Error("get contractModels info err", zap.Error(err))
// // err = errors.New(m.ERROR_SELECT)
// // return
// //}
// //
// //for _, v := range contractModel {
// // contractTmp := &contract.ContractData{}
// // contractTmp.ID = uint64(v.ID)
// // contractTmp.ContractId = v.ContractId
// // contractTmp.DownloadUrl = v.DownloadUrl
// // contractTmp.MgmtUserId = v.MgmtUserId
// // contractTmp.State = int64(v.State)
// // contractTmp.TransactionId = v.TransactionId
// // contractTmp.Type = int64(v.Type)
// // var b string
// // if v.Type == 4 {
// // b = "物权"
// // }
// // if v.Type == 7 {
// // b = "版权"
// // }
// // contractTmp.BatchName = b + v.BatchName[0:4] + "年" + v.BatchName[4:6] + "月" + v.BatchName[6:11] + "年" + v.BatchName[11:13] + "月"
// // contractTmp.UserId = int64(v.UserId)
// // contractTmp.ViewUrl = v.ViewUrl
// // contractTmp.ExpirationTime = v.CreatedAt.Add(86400 * time.Second).Format("2006-01-02 15:04:05")
// // contractTmp.SignTime = v.UpdatedAt.Format("2006-01-02")
// // Data = append(Data, contractTmp)
// //}
// rep.Data = Data
// return
// }
// func GetContract(id int32) (rep *contract.ContractData, err error) {
// var con model.Contract
// if err = db.DB.Where("id = ? ", id).First(&con).Error; err != nil {
// zap.L().Error("get contract info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return
// }
// rep.ID = uint64(con.ID)
// rep.UserId = int64(con.UserId)
// rep.CardId = con.CardId
// rep.MgmtUserId = con.MgmtUserId
// rep.ArtworkId = con.ArtworkId
// rep.ContractId = con.ContractId
// rep.TransactionId = con.TransactionId
// rep.Type = int64(con.Type)
// rep.BatchName = con.BatchName
// rep.ViewUrl = con.ViewUrl
// rep.DownloadUrl = con.DownloadUrl
// rep.State = int64(con.State)
// return
// }
// // 更新交易id
// func UpdateContract(req *contract.UpdateContractRequest) error {
// //数据库操作异常
// var con model.Contract
// if err := db.DB.Model(&con).Updates(&model.Contract{ContractId: req.ContractId, ViewUrl: req.ViewUrl, DownloadUrl: req.DownloadUrl}).Error; err != nil {
// //在线和下载的链接
// return err
// }
// return nil
// }
// // 更新交易id
// func UpdateContractTx(txId string, contractId int32) (err error) {
// var con model.Contract
// con.ID = contractId
// if err = db.DB.Model(&con).Update("transaction_id", txId).Error; err != nil { //改变交易id
// return
// }
// if err = db.DB.Model(&con).Update("state", 1).Error; err != nil { //更新合约状态 // 1待生成 2 待签署 3 签署完成
// return
// }
// return
// }