820 lines
22 KiB
Go
820 lines
22 KiB
Go
|
/**
|
|||
|
* @Author: sun
|
|||
|
* @Company: 苏州泰丰文化
|
|||
|
* @Description:
|
|||
|
* @File: print_manage
|
|||
|
* @Version: 1.0.0
|
|||
|
* @Date: 2024/10/12 15:43
|
|||
|
*/
|
|||
|
|
|||
|
package service
|
|||
|
|
|||
|
import (
|
|||
|
"bytes"
|
|||
|
"context"
|
|||
|
"errors"
|
|||
|
"fmt"
|
|||
|
"io"
|
|||
|
"mime/multipart"
|
|||
|
"net/http"
|
|||
|
"os"
|
|||
|
"time"
|
|||
|
|
|||
|
"dubbo.apache.org/dubbo-go/v3/common/logger"
|
|||
|
artShow "github.com/fonchain_enterprise/fonchain-main/api/artShow"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/api/artist"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/api/artwork_third_party"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/config"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/e"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/model"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/model/login"
|
|||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/serializer"
|
|||
|
"github.com/gin-gonic/gin"
|
|||
|
"github.com/lukasjarosch/go-docx"
|
|||
|
"github.com/qifengzhang007/gooxml/document"
|
|||
|
"github.com/qifengzhang007/gooxml/schema/soo/wml"
|
|||
|
)
|
|||
|
|
|||
|
func ArtShowListForPrint(c *gin.Context) {
|
|||
|
var showListReq artShow.ArtShowListForPrintReq
|
|||
|
if err := c.ShouldBindJSON(&showListReq); err != nil {
|
|||
|
logger.Errorf("ShowList ShouldBindJSON err", err)
|
|||
|
ResponseMsg(c, e.InvalidParams, serializer.Response{
|
|||
|
Data: nil,
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Failed,
|
|||
|
})
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
showListRes, err := GrpcArtShowImpl.ArtShowListForPrint(context.Background(), &showListReq)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Failed,
|
|||
|
})
|
|||
|
return
|
|||
|
}
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: showListRes.Msg,
|
|||
|
Data: showListRes,
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
// 我仅仅是加了三个分支逻辑
|
|||
|
func PrintPreviewFile(c *gin.Context) {
|
|||
|
var req artShow.PrintPreviewFileReq
|
|||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|||
|
logger.Errorf("Print Preview File err: %v", err)
|
|||
|
ResponseMsg(c, e.InvalidParams, serializer.Response{
|
|||
|
Data: nil,
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Failed,
|
|||
|
})
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 组装 获取 画作 基础信息参数
|
|||
|
artworkDataReq := artwork_third_party.AwDataByShowIdRequest{}
|
|||
|
artworkDataReq.ArtShowIds = append(artworkDataReq.ArtShowIds, req.ShowUid)
|
|||
|
// 获取 画作 基础信息
|
|||
|
resp, err := GrpcArtworkThirdPartyImpl.AwDataByShowId(context.Background(), &artworkDataReq)
|
|||
|
if err != nil {
|
|||
|
logger.Errorf("Print Preview File query err: %v", err)
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Failed,
|
|||
|
})
|
|||
|
return
|
|||
|
}
|
|||
|
if resp.Data == nil {
|
|||
|
logger.Errorf("Print Preview File query err: %v", err)
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: "画作信息为空",
|
|||
|
Status: e.Failed,
|
|||
|
})
|
|||
|
return
|
|||
|
}
|
|||
|
if len(resp.Data) <= 0 {
|
|||
|
logger.Errorf("Print Preview File query err: %v", "画作信息为空")
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Data: nil,
|
|||
|
Msg: "画作信息为空",
|
|||
|
Status: e.Failed,
|
|||
|
})
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 组装 画作 基础信息
|
|||
|
artworkData := make(map[string]*artwork_third_party.AwDataByShowIdResponse_Info, 0)
|
|||
|
for i := 0; i < len(resp.Data); i++ {
|
|||
|
artworkData[resp.Data[i].ArtworkUuid] = resp.Data[i]
|
|||
|
}
|
|||
|
|
|||
|
// 获取 画作价格信息
|
|||
|
artworkPriceList := new(artShow.ArtworkPriceListRes)
|
|||
|
// 获取 画作价格信息
|
|||
|
artworkPriceReq := artShow.ShowDetailReq{}
|
|||
|
artworkPriceReq.ShowUID = append(artworkPriceReq.ShowUID, req.ShowUid)
|
|||
|
artworkPriceList, err = GrpcArtShowImpl.ArtworkPriceList(context.Background(), &artworkPriceReq)
|
|||
|
if err != nil {
|
|||
|
logger.Errorf("ArtworkPriceList query err", err)
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Failed,
|
|||
|
})
|
|||
|
return
|
|||
|
}
|
|||
|
// 获取 画展包信息
|
|||
|
showDetailReq := new(artShow.ShowDetailReq)
|
|||
|
showDetailReq.ShowUID = append(showDetailReq.ShowUID, req.ShowUid)
|
|||
|
artShowInfo, err := GrpcArtShowImpl.ShowDetail(context.Background(), showDetailReq)
|
|||
|
if err != nil {
|
|||
|
logger.Errorf("Print Preview File query err: %v", err)
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Failed,
|
|||
|
})
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 组装 画作 基础信息
|
|||
|
artShowMap := make(map[string]*artShow.ShowDetail, 0)
|
|||
|
for i := 0; i < len(artShowInfo.Data); i++ {
|
|||
|
if artShowInfo.Data[i].Price == 0 {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: e.ErrorNoPrice,
|
|||
|
Status: e.Failed,
|
|||
|
})
|
|||
|
return
|
|||
|
}
|
|||
|
artShowMap[artShowInfo.Data[i].ShowUID] = artShowInfo.Data[i]
|
|||
|
}
|
|||
|
|
|||
|
// 获取画家 信息
|
|||
|
artistInfoReq := new(artist.ArtistDetailDataReq)
|
|||
|
artistInfoReq.Uids = append(artistInfoReq.Uids, artShowInfo.Data[0].ArtistUID)
|
|||
|
artistInfo, err := GrpcArtistImpl.ArtistDetailData(context.Background(), artistInfoReq)
|
|||
|
if err != nil {
|
|||
|
logger.Errorf("Print Preview File query artiest info err: %v", err)
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Failed,
|
|||
|
})
|
|||
|
return
|
|||
|
}
|
|||
|
artistMap := make(map[string]*artist.ArtistDetailDataResp_Info, 0)
|
|||
|
for i := 0; i < len(artistInfo.Data); i++ {
|
|||
|
if artistMap[artistInfo.Data[i].ProfileInfo.Name] == nil {
|
|||
|
artistMap[artistInfo.Data[i].ProfileInfo.Name] = artistInfo.Data[i]
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if len(artworkPriceList.Data) == 0 || len(artworkData) == 0 {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: e.ErrorNoPrice,
|
|||
|
Status: e.Failed,
|
|||
|
})
|
|||
|
}
|
|||
|
priceInfo := serializer.BuildInvoiceInfo(artworkPriceList.Data, artworkData, artistMap)
|
|||
|
|
|||
|
priceInfo.Address = artShowMap[req.ShowUid].Address
|
|||
|
priceInfo.ShowTime = artShowMap[req.ShowUid].ShowTime
|
|||
|
|
|||
|
if artistMap[artShowInfo.Data[0].ArtistName] != nil {
|
|||
|
priceInfo.BankNo = artistMap[artShowInfo.Data[0].ArtistName].ProfileInfo.BankNum
|
|||
|
priceInfo.Bank = artistMap[artShowInfo.Data[0].ArtistName].ProfileInfo.BankName
|
|||
|
priceInfo.BankCode = artistMap[artShowInfo.Data[0].ArtistName].ProfileInfo.BankCode
|
|||
|
}
|
|||
|
var urlMap = make(map[string]string)
|
|||
|
switch req.PrintType { // 1-代销合同 2-销售清单 3-委托书 4-转让合同
|
|||
|
case 1:
|
|||
|
saleContractPath := "./data/代销合同_模版.docx"
|
|||
|
doc, err := docx.Open(saleContractPath)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
replaceMap := docx.PlaceholderMap{
|
|||
|
"art_name": artShowInfo.Data[0].ArtistName,
|
|||
|
"address": artistMap[artShowInfo.Data[0].ArtistName].ProfileInfo.Address,
|
|||
|
"id_no": artistMap[artShowInfo.Data[0].ArtistName].ProfileInfo.CardId,
|
|||
|
"telephone": artistMap[artShowInfo.Data[0].ArtistName].ProfileInfo.Phone,
|
|||
|
}
|
|||
|
if err = doc.ReplaceAll(replaceMap); err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
now := time.Now().UnixMilli()
|
|||
|
tmpPath := fmt.Sprintf("./data/%d.docx", now)
|
|||
|
err = doc.WriteToFile(tmpPath)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
pdfPath, err := docxToPdf(now)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
url, err := PutBos(pdfPath, "pdf", true)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
_ = os.Remove(tmpPath)
|
|||
|
//if _, err = GrpcArtShowImpl.CreateContractPath(context.Background(), &artShow.CreateContractPathReq{
|
|||
|
// ShowUid: req.ShowUid,
|
|||
|
// ContractType: 1,
|
|||
|
// ContractPath: url,
|
|||
|
//}); err != nil {
|
|||
|
// ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
// Msg: err.Error(),
|
|||
|
// Status: e.Ok,
|
|||
|
// })
|
|||
|
//}
|
|||
|
urlMap["serviceContractPath"] = url
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Data: urlMap,
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
//}
|
|||
|
case 2:
|
|||
|
//priceInfo.AuthList = nil
|
|||
|
res := &model.PriceRightListRes{}
|
|||
|
for _, v := range priceInfo.ArtworkPriceList {
|
|||
|
for _, vv := range priceInfo.CopyrightPriceList {
|
|||
|
if v.Num == vv.Num {
|
|||
|
tmp := &model.PrintRightItem{
|
|||
|
ArtworkName: v.ArtworkName,
|
|||
|
ArtistName: v.ArtistName,
|
|||
|
DoTime: v.DoTime,
|
|||
|
Num: v.Num,
|
|||
|
Ruler: v.Ruler,
|
|||
|
TfNum: v.TfNum,
|
|||
|
FloorPrice: v.ArtworkPrice + vv.CopyrightPrice,
|
|||
|
}
|
|||
|
res.List = append(res.List, tmp)
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
res.RuleTotal = priceInfo.TotalRuler
|
|||
|
res.PriceTotal = priceInfo.Price
|
|||
|
res.Principal = artShowInfo.Data[0].ArtistName
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Data: res,
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
case 3:
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Data: priceInfo.AuthList,
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
case 4:
|
|||
|
//resData, err := GrpcArtShowImpl.GetContractPath(context.Background(), &artShow.GetContractPathReq{
|
|||
|
// ShowUid: req.ShowUid,
|
|||
|
// ContractType: 4,
|
|||
|
//})
|
|||
|
//if err != nil {
|
|||
|
// ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
// Msg: err.Error(),
|
|||
|
// Status: e.Ok,
|
|||
|
// })
|
|||
|
//}
|
|||
|
//if len(resData.ContractPath) > 0 {
|
|||
|
// urlMap["tranContractPath"] = resData.ContractPath
|
|||
|
// ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
// Data: urlMap,
|
|||
|
// Status: e.Ok,
|
|||
|
// })
|
|||
|
//} else {
|
|||
|
tranContractPath := "./data/转让合同_模版.docx"
|
|||
|
doc, err := document.Open(tranContractPath)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
if len(doc.Tables()) != 2 {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: "模版格式不合格",
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
//获取表格中的文本
|
|||
|
for _, table := range doc.Tables()[1:] { // 所有表
|
|||
|
if len(table.Rows()) < len(resp.Data) {
|
|||
|
firstRow := table.Rows()[0]
|
|||
|
lineNumber := len(resp.Data) - len(table.Rows()) + 2
|
|||
|
for i := 0; i < lineNumber; i++ {
|
|||
|
newRow := table.InsertRowAfter(firstRow)
|
|||
|
for l := 0; l < 5; l++ {
|
|||
|
newCell := newRow.AddCell()
|
|||
|
newCell.AddParagraph().AddRun().AddText("")
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
for i, lines := range table.Rows() { // 所有行
|
|||
|
if i < 1 || i == len(table.Rows())-1 || i > len(resp.Data) {
|
|||
|
continue
|
|||
|
}
|
|||
|
for ii, cell := range lines.Cells() {
|
|||
|
switch ii {
|
|||
|
case 0:
|
|||
|
p := cell.AddParagraph()
|
|||
|
p.Properties().SetAlignment(wml.ST_JcCenter)
|
|||
|
r := p.AddRun()
|
|||
|
r.Properties().SetBold(true)
|
|||
|
r.Properties().SetSize(6.5)
|
|||
|
r.AddText(fmt.Sprintf("%d", i))
|
|||
|
case 1:
|
|||
|
p := cell.AddParagraph()
|
|||
|
p.Properties().SetAlignment(wml.ST_JcCenter)
|
|||
|
r := p.AddRun()
|
|||
|
r.Properties().SetBold(true)
|
|||
|
r.Properties().SetSize(6.5)
|
|||
|
r.AddText(fmt.Sprintf("{work_name_%d}", i))
|
|||
|
case 2:
|
|||
|
p := cell.AddParagraph()
|
|||
|
p.Properties().SetAlignment(wml.ST_JcCenter)
|
|||
|
r := p.AddRun()
|
|||
|
r.Properties().SetBold(true)
|
|||
|
r.Properties().SetSize(6.5)
|
|||
|
r.AddText(fmt.Sprintf("{hash_%d}", i))
|
|||
|
case 3:
|
|||
|
p := cell.AddParagraph()
|
|||
|
p.Properties().SetAlignment(wml.ST_JcCenter)
|
|||
|
r := p.AddRun()
|
|||
|
r.Properties().SetBold(true)
|
|||
|
r.Properties().SetSize(6.5)
|
|||
|
r.AddText(fmt.Sprintf("原始"))
|
|||
|
default:
|
|||
|
continue
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
now := time.Now().UnixMilli()
|
|||
|
tmpPath := fmt.Sprintf("./data/%d.docx", now)
|
|||
|
if err = doc.SaveToFile(tmpPath); err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
doc3, err := docx.Open(tmpPath)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
replaceMap := docx.PlaceholderMap{
|
|||
|
"art_name": artShowInfo.Data[0].ArtistName,
|
|||
|
"address": artistMap[artShowInfo.Data[0].ArtistName].ProfileInfo.Address,
|
|||
|
"id_no": artistMap[artShowInfo.Data[0].ArtistName].ProfileInfo.CardId,
|
|||
|
"telephone": artistMap[artShowInfo.Data[0].ArtistName].ProfileInfo.Phone,
|
|||
|
}
|
|||
|
for k, v := range resp.Data {
|
|||
|
replaceMap["work_name_"+fmt.Sprintf("%d", k+1)] = v.ArtworkName
|
|||
|
replaceMap["hash_"+fmt.Sprintf("%d", k+1)] = v.CopyrightHash
|
|||
|
}
|
|||
|
if err = doc3.ReplaceAll(replaceMap); err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
now2 := time.Now().UnixMilli()
|
|||
|
tmpPath1 := fmt.Sprintf("./data/%d.docx", now2)
|
|||
|
err = doc3.WriteToFile(tmpPath1)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
pdfPath, err := docxToPdf(now2)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
url, err := PutBos(pdfPath, "pdf", true)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
_ = os.Remove(tmpPath)
|
|||
|
_ = os.Remove(tmpPath1)
|
|||
|
|
|||
|
urlMap["tranContractPath"] = url
|
|||
|
|
|||
|
//if _, err = GrpcArtShowImpl.CreateContractPath(context.Background(), &artShow.CreateContractPathReq{
|
|||
|
// ShowUid: req.ShowUid,
|
|||
|
// ContractPath: url,
|
|||
|
// ContractType: 4,
|
|||
|
//}); err != nil {
|
|||
|
// ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
// Msg: err.Error(),
|
|||
|
// Status: e.Ok,
|
|||
|
// })
|
|||
|
//}
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Data: urlMap,
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
//}
|
|||
|
case 5:
|
|||
|
saleContractPath := "./data/print_model/版权代理登记委托合同.docx"
|
|||
|
doc, err := docx.Open(saleContractPath)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
defer doc.Close()
|
|||
|
replaceMap := docx.PlaceholderMap{
|
|||
|
"art_name": artShowInfo.Data[0].ArtistName,
|
|||
|
"id_no": artistMap[artShowInfo.Data[0].ArtistName].ProfileInfo.CardId,
|
|||
|
}
|
|||
|
if err = doc.ReplaceAll(replaceMap); err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
now := time.Now().UnixMilli()
|
|||
|
tmpPath := fmt.Sprintf("./data/%d.docx", now)
|
|||
|
err = doc.WriteToFile(tmpPath)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
pdfPath, err := docxToPdf(now)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
url, err := PutBos(pdfPath, "pdf", true)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
_ = os.Remove(tmpPath)
|
|||
|
urlMap["path"] = url
|
|||
|
// urlMap["path"] = config.ApiHost + "/pdfst/print_model/版权代理登记委托合同.pdf"
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Data: urlMap,
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
return
|
|||
|
case 6: //excel
|
|||
|
res := &model.PriceRightListRes{}
|
|||
|
for _, v := range priceInfo.ArtworkPriceList {
|
|||
|
for _, vv := range priceInfo.CopyrightPriceList {
|
|||
|
if v.Num == vv.Num {
|
|||
|
tmp := &model.PrintRightItem{
|
|||
|
ArtworkName: v.ArtworkName,
|
|||
|
ArtistName: v.ArtistName,
|
|||
|
DoTime: v.DoTime,
|
|||
|
Num: v.Num,
|
|||
|
Ruler: v.Ruler,
|
|||
|
TfNum: v.TfNum,
|
|||
|
FloorPrice: v.ArtworkPrice + vv.CopyrightPrice,
|
|||
|
}
|
|||
|
res.List = append(res.List, tmp)
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
res.RuleTotal = priceInfo.TotalRuler
|
|||
|
res.PriceTotal = priceInfo.Price
|
|||
|
res.Principal = artShowInfo.Data[0].ArtistName
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Data: res,
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
return
|
|||
|
case 7: //文档更新内容,然后pdf
|
|||
|
var talentAgency, address string
|
|||
|
|
|||
|
if _, isExist := artShowMap[req.ShowUid]; isExist {
|
|||
|
talentAgency = artShowMap[req.ShowUid].TalentAgency
|
|||
|
var addressMap = map[string]string{
|
|||
|
"上海泰初澹然文化传播有限公司": "上海市黄浦区西藏中路268号2201室",
|
|||
|
"浙江蓝丰文化科技有限公司": "浙江省宁波市鄞州区实怡中心7幢13号17-1-1",
|
|||
|
"常熟虞丰文化艺术交流有限公司": "江苏省苏州市常熟市虞山街道虞景文华31幢F2部分",
|
|||
|
"合肥常丰文化传播有限公司": "安徽省合肥市瑶海区明光路街道芜湖路2号坝上街环球中心7层商协会大厦 716-2062",
|
|||
|
}
|
|||
|
|
|||
|
if _, isOk := addressMap[talentAgency]; isOk == true {
|
|||
|
address = addressMap[talentAgency]
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
saleContractPath := "./data/print_model/居间服务协议-20241210.docx"
|
|||
|
doc, err := docx.Open(saleContractPath)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
replaceMap := docx.PlaceholderMap{
|
|||
|
"company": talentAgency,
|
|||
|
"address": address,
|
|||
|
}
|
|||
|
if err = doc.ReplaceAll(replaceMap); err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
now := time.Now().UnixMilli()
|
|||
|
tmpPath := fmt.Sprintf("./data/%d.docx", now)
|
|||
|
err = doc.WriteToFile(tmpPath)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
pdfPath, err := docxToPdf(now)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
url, err := PutBos(pdfPath, "pdf", true)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
_ = os.Remove(tmpPath)
|
|||
|
|
|||
|
urlMap["path"] = url
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Data: urlMap,
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
return
|
|||
|
default:
|
|||
|
return
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func GetPrintDetail(c *gin.Context) {
|
|||
|
var req artShow.PrintDetailReq
|
|||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|||
|
ResponseMsg(c, e.InvalidParams, serializer.Response{
|
|||
|
Data: nil,
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Failed,
|
|||
|
})
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
res, err := GrpcArtShowImpl.GetPrintDetail(context.Background(), &req)
|
|||
|
if err != nil {
|
|||
|
logger.Errorf("Print Preview File err: %v", err)
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Data: nil,
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Failed,
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Data: res,
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func CreatePrintDetail(c *gin.Context) {
|
|||
|
var req artShow.CreatePrintDetailReq
|
|||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|||
|
ResponseMsg(c, e.InvalidParams, serializer.Response{
|
|||
|
Data: nil,
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Failed,
|
|||
|
})
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
userInfo := login.GetUserInfoFromC(c)
|
|||
|
req.PrintOperator = userInfo.NickName
|
|||
|
_, err := GrpcArtShowImpl.CreatePrintDetail(context.Background(), &req)
|
|||
|
if err != nil {
|
|||
|
ResponseMsg(c, e.InvalidParams, serializer.Response{
|
|||
|
Data: nil,
|
|||
|
Msg: err.Error(),
|
|||
|
Status: e.Failed,
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
ResponseMsg(c, e.SUCCESS, serializer.Response{
|
|||
|
Data: nil,
|
|||
|
Status: e.Ok,
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
func SearchArtistListByKeyword(c *gin.Context) {
|
|||
|
var idNameReq artist.ArtIdNameRequest
|
|||
|
if err := c.ShouldBind(&idNameReq); err != nil {
|
|||
|
logger.Errorf("idNameReq ShouldBind err", err)
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
resp, err := GrpcArtistImpl.ArtistIdName(context.Background(), &idNameReq)
|
|||
|
if err != nil {
|
|||
|
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
|
|||
|
return
|
|||
|
}
|
|||
|
for _, v := range resp.Items {
|
|||
|
if v.BlackListStatus == 2 {
|
|||
|
v.Name = fmt.Sprintf("#%s", v.Name)
|
|||
|
}
|
|||
|
}
|
|||
|
ResponseQuickMsg(c, e.Ok, resp.Msg, resp.Items)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func docxToPdf(fileName int64) (pdfUrl string, err error) {
|
|||
|
// 目标 URL
|
|||
|
url := fmt.Sprintf("%s/forms/libreoffice/convert", config.PdfHost)
|
|||
|
|
|||
|
fmt.Println("url:-----------------", url)
|
|||
|
// 打开文件
|
|||
|
file, err := os.Open(fmt.Sprintf("./data/%d.docx", fileName))
|
|||
|
if err != nil {
|
|||
|
return "", errors.New("打开doc文件失败")
|
|||
|
}
|
|||
|
defer file.Close()
|
|||
|
|
|||
|
// 创建表单
|
|||
|
body := &bytes.Buffer{}
|
|||
|
writer := multipart.NewWriter(body)
|
|||
|
part, err := writer.CreateFormFile("files", "file.docx")
|
|||
|
if err != nil {
|
|||
|
return "", errors.New("创建转换pdf表单文件失败")
|
|||
|
}
|
|||
|
_, err = io.Copy(part, file)
|
|||
|
if err != nil {
|
|||
|
fmt.Println("复制文件到表单失败:", err)
|
|||
|
return "", errors.New("复制docx文件到pdf表单文件失败")
|
|||
|
}
|
|||
|
|
|||
|
// 关闭 writer
|
|||
|
err = writer.Close()
|
|||
|
if err != nil {
|
|||
|
return "", errors.New("关闭pdf表单文件失败")
|
|||
|
}
|
|||
|
|
|||
|
// 创建请求
|
|||
|
req, err := http.NewRequest("POST", url, body)
|
|||
|
if err != nil {
|
|||
|
fmt.Println("创建请求失败:", err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 设置请求头
|
|||
|
req.Header.Set("Content-Type", writer.FormDataContentType())
|
|||
|
|
|||
|
// 发送请求
|
|||
|
client := &http.Client{}
|
|||
|
resp, err := client.Do(req)
|
|||
|
if err != nil {
|
|||
|
fmt.Println("发送请求失败:", err)
|
|||
|
return
|
|||
|
}
|
|||
|
defer resp.Body.Close()
|
|||
|
|
|||
|
// 检查响应状态
|
|||
|
if resp.StatusCode != http.StatusOK {
|
|||
|
fmt.Printf("请求失败,状态码: %d\n", resp.StatusCode)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
pdfUrl = fmt.Sprintf("./data/%d.pdf", fileName)
|
|||
|
// 保存响应内容到文件
|
|||
|
outFile, err := os.Create(pdfUrl)
|
|||
|
if err != nil {
|
|||
|
return "", errors.New("创建输出pdf文件失败")
|
|||
|
}
|
|||
|
defer outFile.Close()
|
|||
|
|
|||
|
_, err = io.Copy(outFile, resp.Body)
|
|||
|
if err != nil {
|
|||
|
fmt.Println("保存响应内容失败:", err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
fmt.Println("pdf文件转换成功,已保存")
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func docxToPdfV2(fileName string) (pdfUrl string, err error) {
|
|||
|
// 目标 URL
|
|||
|
url := fmt.Sprintf("%s/forms/libreoffice/convert", config.PdfHost)
|
|||
|
|
|||
|
fmt.Println("url:-----------------", url)
|
|||
|
// 打开文件
|
|||
|
file, err := os.Open(fileName)
|
|||
|
if err != nil {
|
|||
|
return "", errors.New("打开doc文件失败")
|
|||
|
}
|
|||
|
defer file.Close()
|
|||
|
|
|||
|
// 创建表单
|
|||
|
body := &bytes.Buffer{}
|
|||
|
writer := multipart.NewWriter(body)
|
|||
|
part, err := writer.CreateFormFile("files", "file.docx")
|
|||
|
if err != nil {
|
|||
|
return "", errors.New("创建转换pdf表单文件失败")
|
|||
|
}
|
|||
|
_, err = io.Copy(part, file)
|
|||
|
if err != nil {
|
|||
|
fmt.Println("复制文件到表单失败:", err)
|
|||
|
return "", errors.New("复制docx文件到pdf表单文件失败")
|
|||
|
}
|
|||
|
|
|||
|
// 关闭 writer
|
|||
|
err = writer.Close()
|
|||
|
if err != nil {
|
|||
|
return "", errors.New("关闭pdf表单文件失败")
|
|||
|
}
|
|||
|
|
|||
|
// 创建请求
|
|||
|
req, err := http.NewRequest("POST", url, body)
|
|||
|
if err != nil {
|
|||
|
fmt.Println("创建请求失败:", err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 设置请求头
|
|||
|
req.Header.Set("Content-Type", writer.FormDataContentType())
|
|||
|
|
|||
|
// 发送请求
|
|||
|
client := &http.Client{}
|
|||
|
resp, err := client.Do(req)
|
|||
|
if err != nil {
|
|||
|
fmt.Println("发送请求失败:", err)
|
|||
|
return
|
|||
|
}
|
|||
|
defer resp.Body.Close()
|
|||
|
|
|||
|
// 检查响应状态
|
|||
|
if resp.StatusCode != http.StatusOK {
|
|||
|
fmt.Printf("请求失败,状态码: %d\n", resp.StatusCode)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
pdfUrl = fmt.Sprintf("%d.pdf")
|
|||
|
// 保存响应内容到文件
|
|||
|
outFile, err := os.Create(pdfUrl)
|
|||
|
if err != nil {
|
|||
|
panic(err)
|
|||
|
return "", errors.New("创建输出pdf文件失败")
|
|||
|
}
|
|||
|
defer outFile.Close()
|
|||
|
|
|||
|
_, err = io.Copy(outFile, resp.Body)
|
|||
|
if err != nil {
|
|||
|
fmt.Println("保存响应内容失败:", err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
fmt.Println("pdf文件转换成功,已保存")
|
|||
|
return
|
|||
|
}
|