renjiaojiao 1 месяц назад
Родитель
Сommit
9067583a87

+ 9 - 9
api/internal/svc/servicecontext.go

@@ -24,23 +24,23 @@ func NewServiceContext(c config.Config) *ServiceContext {
 		BiServiceRpc: biservice.NewBiService(zrpc.MustNewClient(c.BiServiceRpc)),
 		ResourceCenterRpc: resource.NewResource(zrpc.MustNewClient(zrpc.RpcClientConf{
 			Etcd: discov.EtcdConf{
-				//Hosts: c.BiServiceRpc.Etcd.Hosts,
-				Hosts: []string{"172.31.31.205:2379"},
-				Key:   c.ResourceCenterKey,
+				Hosts: c.BiServiceRpc.Etcd.Hosts,
+				//Hosts: []string{"172.31.31.205:2379"},
+				Key: c.ResourceCenterKey,
 			},
 		})),
 		UserCenterRpc: usercenter.NewUserCenter(zrpc.MustNewClient(zrpc.RpcClientConf{
 			Etcd: discov.EtcdConf{
-				//Hosts: c.BiServiceRpc.Etcd.Hosts,
-				Hosts: []string{"172.31.31.205:2379"},
-				Key:   c.UserCenterKey,
+				Hosts: c.BiServiceRpc.Etcd.Hosts,
+				//Hosts: []string{"172.31.31.205:2379"},
+				Key: c.UserCenterKey,
 			},
 		})),
 		MessageCenterRpc: messageclient.NewMessage(zrpc.MustNewClient(zrpc.RpcClientConf{
 			Etcd: discov.EtcdConf{
-				//Hosts: c.BiServiceRpc.Etcd.Hosts,
-				Hosts: []string{"172.31.31.205:2379"},
-				Key:   c.MessageCenterKey,
+				Hosts: c.BiServiceRpc.Etcd.Hosts,
+				//Hosts: []string{"172.31.31.205:2379"},
+				Key: c.MessageCenterKey,
 			},
 		})),
 	}

+ 4 - 2
rpc/biservice.go

@@ -9,8 +9,10 @@ import (
 	"bp.jydev.jianyu360.cn/BaseService/biService/rpc/internal/server"
 	"bp.jydev.jianyu360.cn/BaseService/biService/rpc/internal/svc"
 	"bp.jydev.jianyu360.cn/BaseService/biService/rpc/pb"
+	"bp.jydev.jianyu360.cn/BaseService/fileCenter/rpc/filecenter"
 	"flag"
 	"fmt"
+	"github.com/nsqio/go-nsq"
 	"github.com/zeromicro/go-zero/core/conf"
 	"github.com/zeromicro/go-zero/core/logx"
 	"github.com/zeromicro/go-zero/zrpc"
@@ -41,7 +43,7 @@ func main() {
 	entity.GetHlyj(IC.IC.Hlyj.Appid, IC.IC.Hlyj.Account, IC.IC.Hlyj.Secret, IC.IC.Hlyj.TokenUrl, IC.IC.Hlyj.CallUrl, IC.IC.Hlyj.Integratedid, IC.IC.Hlyj.CallFlag)
 	entity.InitMiddleground(IC.IC.RpcServerConf.Etcd.Hosts, IC.IC.ResourceCenterKey)
 
-	/*entity.FileCenterRpc = filecenter.NewFileCenter(zrpc.MustNewClient(IC.IC.FileCenterRpc))
+	entity.FileCenterRpc = filecenter.NewFileCenter(zrpc.MustNewClient(IC.IC.FileCenterRpc))
 	entity.OssBucketName = IC.IC.OssBucketName
 	entity.OssUrl = IC.IC.OssUrl
 	//nsq
@@ -54,7 +56,7 @@ func main() {
 	err = consumer.ConnectToNSQLookupd(IC.IC.NsqUrl)
 	if err != nil {
 		fmt.Println(err)
-	}*/
+	}
 	s := zrpc.MustNewServer(IC.IC.RpcServerConf, func(grpcServer *grpc.Server) {
 		pb.RegisterBiServiceServer(grpcServer, srv)
 	})

+ 43 - 35
rpc/internal/logic/materialsavelogic.go

@@ -38,46 +38,54 @@ func (l *MaterialSaveLogic) MaterialSave(in *pb.MaterialSaveReq) (*pb.MaterialSa
 		return &pb.MaterialSaveResp{
 			ErrorCode: -1,
 			ErrorMsg:  err.Error(),
-			MsgId:     msgId,
 		}, nil
 	}
 
 	//获取分发人的userid
 	userIdArr := service.GetSendUserId(in.ReceiveUserId, in.EntId)
-	log.Println("分发给:", userIdArr)
-
-	if len(strings.Split(in.FileUrl, ",")) > 0 {
-		positionArr := strings.Split(in.ReceiveUserId, ",")
-		for k, v := range strings.Split(in.ReceiveUserName, ",") {
-			for _, val := range strings.Split(in.FileUrl, ",") {
-				imgByte, err := service.PersonImgSaveComposite(val, in.QrcodeUrl, v)
-				if err != nil {
-					return &pb.MaterialSaveResp{
-						ErrorCode: -1,
-						ErrorMsg:  "",
-					}, nil
-				}
-				up, err := entity.FileCenterRpc.Upload(l.ctx, &fpb.UploadReq{
-					File:           imgByte,
-					OssBucketName:  entity.OssBucketName,
-					OssUrl:         entity.OssUrl,
-					Name:           path.Base(in.FileUrl),
-					NeedEncryption: false,
-				})
-				if up == nil || up.Url == "" {
-					return &pb.MaterialSaveResp{
-						ErrorCode: -1,
-						ErrorMsg:  "",
-					}, nil
-				}
-				//key := up.Key
-				ok := service.PersonImageSave(fmt.Sprintf("%s/%s", entity.OssUrl, up.Url), msgId, gconv.Int64(positionArr[k]), mid)
-				if !ok {
-					return &pb.MaterialSaveResp{
-						ErrorCode: -1,
-						ErrorMsg:  "",
-					}, nil
-				}
+	log.Println("物料分发给:", userIdArr)
+	if in.QrcodeUrl == "" {
+		return &pb.MaterialSaveResp{
+			ErrorCode:  1,
+			ErrorMsg:   "",
+			MsgId:      msgId,
+			MaterialId: mid,
+			UserIdArr:  userIdArr,
+		}, nil
+	}
+	positionArr := strings.Split(in.ReceiveUserId, ",")
+	for k, v := range strings.Split(in.ReceiveUserName, ",") {
+		if len(strings.Split(in.FileUrl, ",")) == 0 {
+			break
+		}
+		for _, val := range strings.Split(in.FileUrl, ",") {
+			imgByte, err := service.PersonImgSaveComposite(val, in.QrcodeUrl, v)
+			if err != nil {
+				return &pb.MaterialSaveResp{
+					ErrorCode: -1,
+					ErrorMsg:  "",
+				}, nil
+			}
+			up, err := entity.FileCenterRpc.Upload(l.ctx, &fpb.UploadReq{
+				File:           imgByte,
+				OssBucketName:  entity.OssBucketName,
+				OssUrl:         entity.OssUrl,
+				Name:           path.Base(in.FileUrl),
+				NeedEncryption: false,
+			})
+			if up == nil || up.Url == "" {
+				return &pb.MaterialSaveResp{
+					ErrorCode: -1,
+					ErrorMsg:  "",
+				}, nil
+			}
+			//key := up.Key
+			ok := service.PersonImageSave(up.Url, msgId, gconv.Int64(positionArr[k]), mid)
+			if !ok {
+				return &pb.MaterialSaveResp{
+					ErrorCode: -1,
+					ErrorMsg:  "",
+				}, nil
 			}
 		}
 	}

+ 40 - 30
service/compositeImages.go

@@ -13,6 +13,7 @@ import (
 	"image/draw"
 	"image/jpeg"
 	"image/png"
+	"math"
 	"net/http"
 )
 
@@ -21,15 +22,18 @@ func compositeImage(backgroundURL, qrContent string) (err error, imgByte []byte)
 	//backgroundURL := "https://images.unsplash.com/photo-1501854140801-50d01698950b" // 示例背景图片
 	//qrContent := "https://github.com/zeromicro/go-zero"                           // 二维码内容
 	//outputPath := "output.jpg" // 输出文件路径
-	margin := 20         // 二维码距边缘的边距
-	qrSize := 200        // 二维码原始大小(像素)
-	cornerRadius := 15.0 // 二维码圆角半径
-	borderSize := 5      // 二维码白色边框大小
-	shadowBlur := 8.0    // 阴影模糊度
-	shadowOpacity := 0.3 // 阴影透明度
+	//margin := 20         // 二维码距边缘的边距
+	rightMargin := 60
+	bottomMargin := 100
+	qrSize := 160       // 二维码原始大小(像素)
+	cornerRadius := 5.0 // 二维码圆角半径
+	borderCornerRadius := 10.0
+	borderSize := 10     // 二维码白色边框大小
+	shadowBlur := 0.0    // 阴影模糊度
+	shadowOpacity := 0.0 // 阴影透明度
 
 	// 创建带效果的二维码并合成到背景右下角
-	imgByte, err = createQRComposite(backgroundURL, qrContent, margin, qrSize, cornerRadius, gconv.Float64(borderSize), shadowBlur, shadowOpacity)
+	imgByte, err = createQRComposite(backgroundURL, qrContent, rightMargin, bottomMargin, qrSize, cornerRadius, borderCornerRadius, gconv.Float64(borderSize), shadowBlur, shadowOpacity)
 	if err != nil {
 		return err, nil
 	}
@@ -37,7 +41,7 @@ func compositeImage(backgroundURL, qrContent string) (err error, imgByte []byte)
 }
 
 // 创建二维码合成图片
-func createQRComposite(backgroundURL, qrContent string, margin, qrSize int, cornerRadius, borderSize, shadowBlur, shadowOpacity float64) ([]byte, error) {
+func createQRComposite(backgroundURL, qrContent string, rightMargin, bottomMargin, qrSize int, cornerRadius, borderCornerRadius, borderSize, shadowBlur, shadowOpacity float64) ([]byte, error) {
 	// 1. 下载背景图片
 	bgImg, imgType, err := downloadImage(backgroundURL)
 	if err != nil {
@@ -45,7 +49,7 @@ func createQRComposite(backgroundURL, qrContent string, margin, qrSize int, corn
 	}
 
 	// 2. 生成带效果的二维码
-	qrImg, err := generateStyledQRCode(qrContent, qrSize, color.Black, color.White, cornerRadius, borderSize, shadowBlur, shadowOpacity)
+	qrImg, err := generateStyledQRCode(qrContent, qrSize, color.Black, color.White, cornerRadius, borderCornerRadius, borderSize, shadowBlur, shadowOpacity)
 	if err != nil {
 		return nil, err
 	}
@@ -54,8 +58,8 @@ func createQRComposite(backgroundURL, qrContent string, margin, qrSize int, corn
 	bgBounds := bgImg.Bounds()
 	qrBounds := qrImg.Bounds()
 	pos := image.Point{
-		X: bgBounds.Dx() - qrBounds.Dx() - margin,
-		Y: bgBounds.Dy() - qrBounds.Dy() - margin,
+		X: bgBounds.Dx() - qrBounds.Dx() - rightMargin,
+		Y: bgBounds.Dy() - qrBounds.Dy() - bottomMargin,
 	}
 
 	// 4. 调整二维码大小(如果需要)
@@ -66,8 +70,8 @@ func createQRComposite(backgroundURL, qrContent string, margin, qrSize int, corn
 		finalQR = resize.Resize(uint(targetWidth), 0, qrImg, resize.Lanczos3)
 		// 重新计算位置
 		pos = image.Point{
-			X: bgBounds.Dx() - finalQR.Bounds().Dx() - margin,
-			Y: bgBounds.Dy() - finalQR.Bounds().Dy() - margin,
+			X: bgBounds.Dx() - finalQR.Bounds().Dx() - rightMargin,
+			Y: bgBounds.Dy() - finalQR.Bounds().Dy() - bottomMargin,
 		}
 	}
 
@@ -101,8 +105,7 @@ func downloadImage(url string) (image.Image, string, error) {
 	return img, imgType, nil
 }
 
-// 生成带样式的二维码
-func generateStyledQRCode(content string, size int, fgColor, bgColor color.Color, cornerRadius, borderSize, shadowBlur, shadowOpacity float64) (image.Image, error) {
+func generateStyledQRCode(content string, size int, fgColor, bgColor color.Color, cornerRadius, borderCornerRadius, borderSize, shadowBlur, shadowOpacity float64) (image.Image, error) {
 	// 生成基本二维码
 	qr, err := qrcode.New(content, qrcode.Highest)
 	if err != nil {
@@ -115,28 +118,35 @@ func generateStyledQRCode(content string, size int, fgColor, bgColor color.Color
 	// 创建基本二维码图片
 	baseImg := qr.Image(size)
 
-	// 创建带透明背景的画布
-	dc := gg.NewContext(size, size)
+	// 计算带边框的总大小
+	borderWidth := int(math.Ceil(borderSize))
+	totalSize := size + 2*borderWidth
+
+	// 创建带透明背景的总画布
+	dc := gg.NewContext(totalSize, totalSize)
 	dc.SetColor(color.Transparent)
 	dc.Clear()
 
-	// 绘制圆角矩形作为蒙版
+	// 1. 绘制圆角白色边框
+	dc.SetColor(color.White)
+	dc.DrawRoundedRectangle(0, 0, float64(totalSize), float64(totalSize), borderCornerRadius+borderSize)
+	dc.Fill()
+
+	// 2. 创建二维码的圆角蒙版
+	qrDC := gg.NewContext(size, size)
+	qrDC.SetColor(color.Transparent)
+	qrDC.Clear()
+
 	if cornerRadius > 0 {
-		dc.DrawRoundedRectangle(0, 0, float64(size), float64(size), cornerRadius)
-		dc.Clip()
+		qrDC.DrawRoundedRectangle(0, 0, float64(size), float64(size), cornerRadius)
+		qrDC.Clip()
 	}
 
-	// 绘制二维码
-	dc.DrawImage(baseImg, 0, 0)
+	// 3. 绘制二维码到蒙版
+	qrDC.DrawImage(baseImg, 0, 0)
 
-	// 添加白色边框
-	if borderSize > 0 {
-		dc.ResetClip()
-		dc.SetColor(color.White)
-		dc.SetLineWidth(borderSize)
-		dc.DrawRoundedRectangle(0, 0, float64(size), float64(size), cornerRadius)
-		dc.Stroke()
-	}
+	// 4. 将带蒙版的二维码绘制到总画布(居中)
+	dc.DrawImage(qrDC.Image(), borderWidth, borderWidth)
 
 	// 添加阴影效果
 	if shadowBlur > 0 && shadowOpacity > 0 {

+ 2 - 0
service/material.go

@@ -9,6 +9,7 @@ import (
 	"errors"
 	"fmt"
 	"github.com/gogf/gf/v2/util/gconv"
+	"log"
 	"net/url"
 	"strings"
 	"time"
@@ -112,6 +113,7 @@ func PersonImgSaveComposite(fileUrl, qrcodeUrl, name string) ([]byte, error) {
 	} else {
 		qrcodeUrl = fmt.Sprintf("%s?personnelChannel=%s", qrcodeUrl, code)
 	}
+	log.Println("*********二维码图片链接:", qrcodeUrl)
 	err, imgByte := compositeImage(fileUrl, qrcodeUrl)
 	return imgByte, err
 }