Browse Source

fix: 小套餐报价单图片

hsun 2 năm trước cách đây
mục cha
commit
152b3373d2
3 tập tin đã thay đổi với 61 bổ sung15 xóa
  1. 2 2
      controller/contract/register.go
  2. 53 13
      services/fms/contract_register.go
  3. 6 0
      utils/constants.go

+ 2 - 2
controller/contract/register.go

@@ -223,7 +223,7 @@ func (rg *RegisterController) Add(c *gin.Context) {
 	ob.Set()
 
 	// 套餐信息
-	serviceList, e := fmsService.HandleContractServiceAndDetail(req.ProductId, req.Services)
+	serviceList, e := fmsService.HandleContractServiceAndDetail(req.ProductId, req.Services, true)
 	if e != nil {
 		resp.FailMsg("操作失败", "获取合同套餐详情失败, Err: "+e.Error(), c)
 		return
@@ -344,7 +344,7 @@ func (rg *RegisterController) Edit(c *gin.Context) {
 	}
 
 	// 套餐信息
-	serviceList, e := fmsService.HandleContractServiceAndDetail(req.ProductId, req.Services)
+	serviceList, e := fmsService.HandleContractServiceAndDetail(req.ProductId, req.Services, true)
 	if e != nil {
 		resp.FailMsg("操作失败", "获取合同套餐详情失败, Err: "+e.Error(), c)
 		return

+ 53 - 13
services/fms/contract_register.go

@@ -7,6 +7,11 @@ import (
 	"github.com/shopspring/decimal"
 	"hongze/fms_api/models/fms"
 	"hongze/fms_api/services/alarm_msg"
+	"hongze/fms_api/services/resource"
+	"hongze/fms_api/utils"
+	"os"
+	"regexp"
+	"strings"
 	"time"
 )
 
@@ -70,7 +75,7 @@ func CheckContractRegisterAmount(registerId int) {
 }
 
 // HandleContractServiceAndDetail 根据请求数据获取套餐服务详情信息
-func HandleContractServiceAndDetail(productId int, serviceList []fms.ContractServiceAddReq) (serviceDetailList []*fms.ContractServiceAndDetail, err error) {
+func HandleContractServiceAndDetail(productId int, serviceList []fms.ContractServiceAddReq, base642Image bool) (serviceDetailList []*fms.ContractServiceAndDetail, err error) {
 	serviceDetailList = make([]*fms.ContractServiceAndDetail, 0)
 	if len(serviceList) < 0 {
 		err = errors.New("请至少选择一种套餐")
@@ -161,19 +166,19 @@ func HandleContractServiceAndDetail(productId int, serviceList []fms.ContractSer
 		if len(detailList) > 0 {
 			hasDetail = "是"
 		}
-		// 报价单图片地址(暂无)
+		// 报价单图片地址
 		newValue := item.Value
-		//if base642Image {
-		//	b, _ := regexp.MatchString(`^data:\s*image\/(\w+);base64,`, newValue)
-		//	if b {
-		//		imageUrl, uploadErr := UploadImageBase64(newValue)
-		//		if uploadErr != nil {
-		//			err = errors.New(fmt.Sprint("base64图片上传失败:", uploadErr))
-		//			return
-		//		}
-		//		newValue = imageUrl
-		//	}
-		//}
+		if base642Image {
+			b, _ := regexp.MatchString(`^data:\s*image\/(\w+);base64,`, newValue)
+			if b {
+				imageUrl, e := UploadImageBase64(newValue)
+				if e != nil {
+					err = errors.New(fmt.Sprint("base64图片上传失败:", e))
+					return
+				}
+				newValue = imageUrl
+			}
+		}
 
 		// 合同模板
 		serviceTemp, e := fms.GetContractServiceTemplateById(item.ServiceTemplateId)
@@ -218,3 +223,38 @@ func GetContractServiceAndDetail(contractRegisterId int) (serviceList []*fms.Con
 	}
 	return
 }
+
+// UploadImageBase64 将base64的图片上传至oss
+func UploadImageBase64(base64Str string) (resourceUrl string, err error) {
+	ext := ".png"
+	uploadDir := "./static"
+	randStr := utils.GetRandStringNoSpecialChar(28)
+	fileName := randStr + ext
+	fpath := uploadDir + "/" + fileName
+
+	b, _ := regexp.MatchString(`^data:\s*image\/(\w+);base64,`, base64Str)
+	if !b {
+		err = errors.New("图片格式不正确")
+		return
+	}
+	re, _ := regexp.Compile(`^data:\s*image\/(\w+);base64,`)
+	base64Str = re.ReplaceAllString(base64Str, "")
+	base64Str = strings.Replace(base64Str, " ", "", -1)
+
+	base64Str = strings.Replace(base64Str, " ", "", -1)
+	err = utils.SaveBase64ToFile(base64Str, fpath)
+	if err != nil {
+		return
+	}
+	defer os.Remove(fpath)
+
+	savePath := utils.OssUploadImgDir + time.Now().Format("200601/20060102/")
+	savePath += fileName
+	// 上传到阿里云
+	err = resource.UploadVideoAliyun(fileName, fpath, savePath)
+	if err != nil {
+		return
+	}
+	resourceUrl = utils.OssHost + savePath
+	return
+}

+ 6 - 0
utils/constants.go

@@ -35,3 +35,9 @@ const (
 	SYSTEM_LOGIN_TOKEN_NO_TRUST = "fms:login:no_trust:" //管理后台登录(不可信登录态)
 	SYSTEM_LOGIN_ADMINID_IP     = "fms:login:admin_id:"
 )
+
+// OSS
+const (
+	OssHost         = "https://hzstatic.hzinsights.com/"
+	OssUploadImgDir = "static/images/"
+)