|
|
@@ -2,13 +2,17 @@ package service
|
|
|
|
|
|
import (
|
|
|
"encoding/hex"
|
|
|
+ "fmt"
|
|
|
"mtp20_assisted/global"
|
|
|
"mtp20_assisted/model"
|
|
|
"mtp20_assisted/res/pb"
|
|
|
"mtp20_assisted/utils"
|
|
|
+ "os"
|
|
|
"strconv"
|
|
|
+ "strings"
|
|
|
"time"
|
|
|
|
|
|
+ "github.com/gofrs/uuid"
|
|
|
"github.com/nguyenthenguyen/docx"
|
|
|
"go.uber.org/zap"
|
|
|
"google.golang.org/protobuf/proto"
|
|
|
@@ -35,7 +39,7 @@ func (t *THJNtf) Process(msg *[]byte) {
|
|
|
// onTHJPurchaseTradeNtf 铁合金成交通知
|
|
|
func onTHJPurchaseTradeNtf(bytes *[]byte) {
|
|
|
// Read from docx file
|
|
|
- r, err := docx.ReadDocxFile("./static/现货预售合同.doc")
|
|
|
+ r, err := docx.ReadDocxFile("./static/产能预售合同.docx")
|
|
|
if err != nil {
|
|
|
global.M2A_LOG.Error("读取合同文件失败", zap.Error(err))
|
|
|
return
|
|
|
@@ -109,6 +113,15 @@ func onTHJPurchaseTradeNtf(bytes *[]byte) {
|
|
|
global.M2A_LOG.Error("[onTHJPurchaseTradeNtf] 获取甲方签约信息失败", zap.Error(err))
|
|
|
return
|
|
|
}
|
|
|
+ // 账号解密
|
|
|
+ if len(bankaccountsign.BANKACCOUNTNO) > 0 {
|
|
|
+ if tt, err := hex.DecodeString(bankaccountsign.BANKACCOUNTNO); err == nil { // hex -> []byte
|
|
|
+ if dd, err := utils.AESDecrypt(tt, key); err == nil {
|
|
|
+ bankaccountsign.BANKACCOUNTNO = string(dd)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// 银行信息
|
|
|
bankinfo := model.Bankbankinfo{BANKID: bankaccountsign.BANKID}
|
|
|
if has, err := bankinfo.Get(); err != nil || !has {
|
|
|
@@ -124,25 +137,63 @@ func onTHJPurchaseTradeNtf(bytes *[]byte) {
|
|
|
}
|
|
|
|
|
|
docx1 := r.Editable()
|
|
|
+ // global.M2A_LOG.Info(docx1.GetContent())
|
|
|
docx1.Replace("${WRTRADEDETAILID}", strconv.Itoa(int(thjpurchasetradedetail.WRTRADEDETAILID)), -1)
|
|
|
docx1.Replace("${TRADETIME}", thjpurchasetradedetail.TRADETIME.Format("2006年01月02日"), -1)
|
|
|
docx1.Replace("${DESADDRESS}", totalAddress, -1)
|
|
|
- docx1.Replace("${CUSTOMERNAME}", userinfo.CUSTOMERNAME, -1)
|
|
|
- docx1.Replace("${CARDNUM}", userinfo.CARDNUM, -1)
|
|
|
+ // 判断是公司还是个人
|
|
|
+ if userinfo.USERINFOTYPE == 1 {
|
|
|
+ // 个人
|
|
|
+ docx1.Replace("COMPANY", "", -1)
|
|
|
+ docx1.Replace("${LEGALPERSONNAME}", userinfo.CUSTOMERNAME, -1)
|
|
|
+ } else {
|
|
|
+ // 公司
|
|
|
+ docx1.Replace("COMPANY", userinfo.CUSTOMERNAME, -1)
|
|
|
+ docx1.Replace("${LEGALPERSONNAME}", userinfo.LEGALPERSONNAME, -1)
|
|
|
+ }
|
|
|
+ docx1.Replace("CARDNUM", userinfo.CARDNUM, -1)
|
|
|
docx1.Replace("${MOBILE}", userinfo.MOBILE, -1)
|
|
|
docx1.Replace("${BANK}", bankinfo.BANKNAME, -1)
|
|
|
docx1.Replace("${BANKACCOUNTNO}", bankaccountsign.BANKACCOUNTNO, -1)
|
|
|
docx1.Replace("${WRSTANDARDNAME}", wrstandard.WRSTANDARDNAME, -1)
|
|
|
docx1.Replace("${SELLUSER}", selluserinfo.CUSTOMERNAME, -1)
|
|
|
docx1.Replace("${LASTAMOUNT}", strconv.FormatFloat(thjpurchasetradedetail.LASTAMOUNT, 'f', -1, 64), -1)
|
|
|
- docx1.Replace("${DEPOSITRATE}", strconv.FormatFloat(thjpurchasetradedetail.DEPOSITRATE, 'f', -1, 64), -1)
|
|
|
+ docx1.Replace("${DEPOSITRATE}", strconv.FormatFloat(thjpurchasetradedetail.DEPOSITRATE*100, 'f', -1, 64)+"%", -1)
|
|
|
docx1.Replace("${TRADEQTY}", strconv.Itoa(int(thjpurchasetradedetail.TRADEQTY)), -1)
|
|
|
docx1.Replace("${TRADEPRICE}", strconv.FormatFloat(thjpurchasetradedetail.TRADEPRICE, 'f', -1, 64), -1)
|
|
|
docx1.Replace("${ENDDATEMONTH}", strconv.Itoa(int(wrpresaleinfo.ENDDATE.Local().Month())), -1)
|
|
|
docx1.Replace("${THJDELIVERYMODE}", thjdeliverymode, -1)
|
|
|
- docx1.Replace("${ENDDATE}", wrpresaleinfo.ENDDATE.Format("2006年01月"), -1)
|
|
|
+ docx1.Replace("${ENDDATE}", wrpresaleinfo.ENDDATE.Format("200601"), -1)
|
|
|
docx1.Replace("${STORAGEFEE}", strconv.FormatFloat(wrstandard.STORAGEFEE, 'f', -1, 64), -1)
|
|
|
|
|
|
- docx1.WriteToFile("./new_result_1.doc")
|
|
|
+ // 暂存docx文件
|
|
|
+ if exist, _ := utils.PathExists("./.tmp"); !exist {
|
|
|
+ os.Mkdir("./.tmp", os.ModePerm)
|
|
|
+ }
|
|
|
+ uid, _ := uuid.NewV4()
|
|
|
+ docFilename := fmt.Sprintf("%v_%v.docx", strconv.Itoa(int(thjpurchasetradedetail.WRTRADEDETAILID)), uid.String())
|
|
|
+ pdfFilename := strings.Replace(docFilename, "docx", "pdf", -1)
|
|
|
+ docx1.WriteToFile("./.tmp/" + docFilename)
|
|
|
r.Close()
|
|
|
+
|
|
|
+ // 导出pdf到目标目录
|
|
|
+ folderPath := "/Purchase_Contract/" + time.Now().Format("20060102")
|
|
|
+ savePath := global.M2A_CONFIG.System.StorePath + folderPath
|
|
|
+ if exist, _ := utils.PathExists(savePath); !exist {
|
|
|
+ os.MkdirAll(savePath, os.ModePerm)
|
|
|
+ }
|
|
|
+ success := utils.ConvertToPDF("./.tmp/"+docFilename, savePath)
|
|
|
+ if !success {
|
|
|
+ // 转换失败
|
|
|
+ global.M2A_LOG.Error("[onTHJPurchaseTradeNtf] docx转换pdf失败", zap.Error(err))
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新数据库
|
|
|
+ thjpurchasetradedetail.CONTRACTADDRBUY = fmt.Sprintf("./uploadFile/%v/%v", folderPath, pdfFilename)
|
|
|
+ if err = thjpurchasetradedetail.UpdateContractAddrBuy(); err != nil {
|
|
|
+ global.M2A_LOG.Error("[onTHJPurchaseTradeNtf] 更新数据库失败", zap.Error(err))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ global.M2A_LOG.Info("[onTHJPurchaseTradeNtf] 合同生成成功", zap.Any("file", savePath+pdfFilename))
|
|
|
}
|