fonchain-artistinfo/cmd/internal/dao/contract.go

499 lines
15 KiB
Go
Raw Normal View History

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) {
//画作有合同类型是26的都是 点击过"著作权代理转让服务合同"的
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
}
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
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
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
// }