2023-01-18 09:03:15 +00:00
package dao
import (
"errors"
2023-03-15 07:25:05 +00:00
"fmt"
2023-03-10 09:58:13 +00:00
"strings"
2023-03-18 02:59:34 +00:00
"time"
2023-01-18 09:03:15 +00:00
2023-02-06 01:33:09 +00:00
"github.com/fonchain/fonchain-artistinfo/cmd/model"
2023-03-14 05:19:20 +00:00
contract "github.com/fonchain/fonchain-artistinfo/pb/contract"
2023-02-06 01:33:09 +00:00
db "github.com/fonchain/fonchain-artistinfo/pkg/db"
"github.com/fonchain/fonchain-artistinfo/pkg/m"
2023-03-03 08:18:00 +00:00
uuid "github.com/satori/go.uuid"
2023-01-18 09:03:15 +00:00
"go.uber.org/zap"
2023-03-03 08:18:00 +00:00
"gorm.io/gorm"
2023-01-18 09:03:15 +00:00
)
2023-03-15 10:06:21 +00:00
func GetArtistInfoByArtistUid ( artistUid string ) ( user model . User , err error ) {
2023-03-17 00:49:29 +00:00
if err = db . DB . Where ( "mgmt_artist_uid = ?" , artistUid ) . Preload ( "RealNameInfo" ) . Find ( & user ) . Error ; err != nil {
2023-03-15 10:06:21 +00:00
zap . L ( ) . Error ( "get user info err" , zap . Error ( err ) )
err = errors . New ( m . ERROR_SELECT )
return
}
return
}
2023-03-03 08:18:00 +00:00
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 {
2023-01-18 09:03:15 +00:00
zap . L ( ) . Error ( "get contract info err" , zap . Error ( err ) )
err = errors . New ( m . ERROR_SELECT )
return
}
2023-03-15 07:25:05 +00:00
//err 为空则查询到,返回画作合同已存在的错误
if err == nil {
err = errors . New ( m . ARTWORK_CONTRACT_EXISTS )
}
2023-03-03 08:18:00 +00:00
return
}
func CreateArtistContract ( tx * gorm . DB , contract * model . Contract ) ( err error ) {
2023-03-17 13:17:15 +00:00
fmt . Println ( "第一处1111222" )
2023-03-03 08:18:00 +00:00
if err = tx . Create ( contract ) . Error ; err != nil {
zap . L ( ) . Error ( "create contract err" , zap . Error ( err ) )
err = errors . New ( m . CREATE_ERROR )
2023-01-18 09:03:15 +00:00
return
}
return
}
2023-03-03 08:18:00 +00:00
func GetMgmtContractByArtworkUid ( artworkUid string , artworkType int32 ) ( err error ) {
//画作有合同类型是2, 6的都是 点击过"著作权代理转让服务合同"的
var contract model . Contract
2023-01-18 09:03:15 +00:00
2023-03-10 09:58:13 +00:00
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 ) )
2023-01-18 09:03:15 +00:00
err = errors . New ( m . ERROR_SELECT )
return
}
2023-03-10 09:58:13 +00:00
//err 为空则查询到,返回画作合同已存在的错误
if err == nil {
err = errors . New ( m . ARTWORK_CONTRACT_EXISTS )
2023-01-18 09:03:15 +00:00
}
return
}
2023-03-10 09:58:13 +00:00
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
}
2023-01-18 09:03:15 +00:00
2023-03-10 09:58:13 +00:00
return
}
func GetArtistNoByUid ( artistUid string ) ( err error ) {
2023-01-18 09:03:15 +00:00
var user model . User
2023-03-10 09:58:13 +00:00
if err = db . DB . Where ( "mgmt_artist_uid = ?" , artistUid ) . First ( & user ) . Error ; err != nil {
2023-01-18 09:03:15 +00:00
zap . L ( ) . Error ( "get user info err" , zap . Error ( err ) )
err = errors . New ( m . ERROR_SELECT )
return
}
2023-03-10 09:58:13 +00:00
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 {
2023-03-15 07:25:05 +00:00
zap . L ( ) . Error ( "get contracts info err" , zap . Error ( err ) )
2023-03-10 09:58:13 +00:00
err = errors . New ( m . CREATE_ERROR )
return
}
2023-03-15 07:25:05 +00:00
fmt . Println ( "第二处" )
2023-03-10 09:58:13 +00:00
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 )
}
2023-01-18 09:03:15 +00:00
return
2023-03-10 09:58:13 +00:00
2023-01-18 09:03:15 +00:00
}
2023-03-28 07:42:30 +00:00
func ContractHistoryByLockMgmt ( artistUid string , pageSize , offset , status int32 ) ( contracts [ ] * contract . Contracts , err error ) {
var contractSlice [ ] model . Contract
if err = db . DB . Where ( "artist_uid = ? AND status = ?" , artistUid , status ) . 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
}
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
}
2023-03-16 07:16:28 +00:00
func GetArtistInfoById ( artistUid string ) ( user model . User , err error ) {
if err = db . DB . Where ( "mgmt_artist_uid = ?" , artistUid ) . First ( & user ) . Error ; err != nil {
2023-03-10 09:58:13 +00:00
zap . L ( ) . Error ( "get user info err" , zap . Error ( err ) )
2023-01-18 09:03:15 +00:00
err = errors . New ( m . ERROR_SELECT )
return
}
2023-03-03 08:18:00 +00:00
return
}
2023-01-18 09:03:15 +00:00
2023-03-22 08:16:16 +00:00
func ContractList ( artist_uid string , state int32 ) ( contractData [ ] * contract . Contracts , err error ) {
2023-03-10 09:58:13 +00:00
2023-03-18 02:36:31 +00:00
// if state != 0 {
// if state == 2 {
// state = 3
// }
// }
2023-03-10 09:58:13 +00:00
var contracts [ ] model . Contract
2023-03-24 03:50:20 +00:00
if err = db . DB . Where ( "artist_uid = ? AND type != 4 AND type != 7 AND state = ?" , artist_uid , state ) . Find ( & contracts ) . Error ; err != nil {
2023-03-10 09:58:13 +00:00
zap . L ( ) . Error ( "get contracts info err" , zap . Error ( err ) )
err = errors . New ( m . ERROR_SELECT )
2023-01-18 09:03:15 +00:00
return
}
2023-03-10 09:58:13 +00:00
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 ,
}
2023-03-22 08:16:16 +00:00
contractData = append ( contractData , Contract )
2023-03-03 08:18:00 +00:00
}
2023-03-10 09:58:13 +00:00
return
}
2023-03-15 02:43:20 +00:00
func GetContractInfo ( contractUid string ) ( contractInfo model . Contract , err error ) {
if err = db . DB . Where ( "uid = ?" , contractUid ) . First ( & contractInfo ) . Error ; err != nil {
2023-03-10 09:58:13 +00:00
zap . L ( ) . Error ( "get contract info err" , zap . Error ( err ) )
err = errors . New ( m . ERROR_SELECT )
2023-03-03 08:18:00 +00:00
return
2023-01-18 09:03:15 +00:00
}
2023-03-10 09:58:13 +00:00
return
}
2023-01-18 09:03:15 +00:00
2023-03-17 09:36:09 +00:00
func UpdateContract ( tx * gorm . DB , req * contract . SignContractRequest ) ( err error ) {
2023-03-22 08:16:16 +00:00
//对账单这边只有TransactionId需要改变
if req . ViewPdfUrl == "" {
if err = tx . Model ( & model . Contract { } ) . Where ( "uid = ?" , req . ContractUid ) . Updates ( model . Contract { 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
}
} else {
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
}
2023-03-10 09:58:13 +00:00
}
2023-03-22 08:16:16 +00:00
2023-01-18 09:03:15 +00:00
return
}
2023-03-14 02:35:56 +00:00
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
}
2023-03-10 09:58:13 +00:00
2023-03-18 08:13:26 +00:00
func FinishContract ( tx * gorm . DB , transactionId , contractUid string ) ( contracts * contract . Contracts , err error ) {
2023-03-14 02:35:56 +00:00
var modelContract model . Contract
2023-03-18 08:13:26 +00:00
if transactionId != "" {
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
}
} else {
if err = tx . Where ( "uid = ?" , contractUid ) . First ( & modelContract ) . Error ; err != nil {
zap . L ( ) . Error ( "get contract info err" , zap . Error ( err ) )
err = errors . New ( m . ERROR_SELECT )
return
}
2023-03-10 09:58:13 +00:00
}
2023-03-18 02:59:34 +00:00
now := time . Now ( )
if err = db . DB . Model ( & modelContract ) . Updates ( model . Contract { State : 2 , SignTime : now . Format ( "2006-01-02" ) } ) . Error ; err != nil {
2023-03-14 02:35:56 +00:00
zap . L ( ) . Error ( "update user contract failed" , zap . Error ( err ) )
err = errors . New ( m . UPDATE_FAILED )
2023-03-10 09:58:13 +00:00
return
}
2023-03-14 02:35:56 +00:00
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
2023-03-10 09:58:13 +00:00
}
2023-03-14 02:35:56 +00:00
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
}
2023-01-18 09:03:15 +00:00
2023-03-14 02:35:56 +00:00
return
2023-01-18 09:03:15 +00:00
2023-03-14 02:35:56 +00:00
}
2023-01-18 09:03:15 +00:00
2023-03-03 08:18:00 +00:00
// 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
// }
// }
2023-03-14 02:35:56 +00:00
// }
2023-01-18 09:03:15 +00:00
2023-03-03 08:18:00 +00:00
// 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
// }
2023-01-18 09:03:15 +00:00
2023-03-03 08:18:00 +00:00
// return
// }
2023-01-18 09:03:15 +00:00
2023-03-03 08:18:00 +00:00
// 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
// }