Browse Source

图库存储为素材

xyxie 4 months ago
parent
commit
0d2d15f5ab

+ 35 - 47
controllers/material/material.go

@@ -870,13 +870,13 @@ func (this *MaterialController) List() {
 	br.Data = resp
 }
 
-// Save
-// @Title 新增/编辑保存素材库
-// @Description 新增/编辑保存素材库接口
+// SaveAsMaterial
+// @Title 将图表等封面上传至素材库
+// @Description 将图表等封面上传至素材库
 // @Param	request	body material.AddAndEditSandbox true "type json string"
 // @Success 200 {object} material.Material
-// @router /save [post]
-func (this *MaterialController) Save() {
+// @router /saveAs [post]
+func (this *MaterialController) SaveAsMaterial() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		this.Data["json"] = br
@@ -889,60 +889,48 @@ func (this *MaterialController) Save() {
 		br.Ret = 408
 		return
 	}
-	var req material.AddAndEditMaterial
+	var req material.SaveAsMaterialReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
-
-	var materialResp *material.MaterialSaveResp
-
-	var errMsg string
-
-	if req.MaterialId <= 0 {
-		//新增素材库
-		materialResp, err = materialService.AddMaterial(req, sysUser.AdminId, sysUser.RealName)
-		if err != nil {
-			br.Msg = "保存失败!"
-			if errMsg != `` {
-				br.Msg = errMsg
-			}
-			br.ErrMsg = "保存失败,Err:" + err.Error()
-			return
-		}
-	} else {
-		//编辑素材库
-		materialInfo := &material.Material{
-			MaterialId:   req.MaterialId,
-			MaterialName: utils.TrimStr(req.MaterialName),
-			ImgUrl:       utils.TrimStr(req.ImgUrl),
-			ModifyTime:   time.Now(),
-			ClassifyId:   req.ClassifyId,
-		}
-		//缩略图为空时不更新
-		var updateSandboxColumn = []string{}
-		if req.ImgUrl == "" {
-			updateSandboxColumn = []string{"Name", "Content", "MindmapData", "ModifyTime", "MaterialClassifyId", "Style"}
-		} else {
-			updateSandboxColumn = []string{"Name", "Content", "MindmapData", "ImgUrl", "ModifyTime", "MaterialClassifyId", "Style"}
-		}
-		err = materialInfo.Update(updateSandboxColumn)
-		if err != nil {
-			br.Msg = "保存失败!"
-			if errMsg != `` {
-				br.Msg = errMsg
-			}
-			br.ErrMsg = "保存失败,Err:" + err.Error()
-			return
+	if req.MaterialName == "" {
+		br.Msg = "缺少素材库名称"
+		return
+	}
+	var exist *material.Material
+	switch this.Lang {
+	case utils.LANG_EN:
+		exist, err = material.GetMaterialByNameEn(req.MaterialName)
+	default:
+		// 判断名称是否重复
+		exist, err = material.GetMaterialByName(req.MaterialName)
+	}
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	if err == nil && exist.MaterialId > 0 {
+		br.Msg = "图片名称已存在"
+		return
+	}
+	err, errMsg := materialService.AddToMaterial(req, sysUser.AdminId, sysUser.RealName)
+	if err != nil {
+		br.Msg = "保存失败!"
+		if errMsg != `` {
+			br.Msg = errMsg
 		}
+		br.ErrMsg = "保存失败,Err:" + err.Error()
+		return
 	}
+
 	msg := "保存成功"
 	br.Ret = 200
 	br.Success = true
 	br.Msg = msg
-	br.Data = materialResp
 }
 
 // Delete

+ 4 - 4
models/material/material.go

@@ -253,12 +253,12 @@ type DetailParams struct {
 	ClassifyId int    `json:"classifyId"`
 }
 
-// AddAndEditMaterial 添加/编辑素材的请求数据
-type AddAndEditMaterial struct {
-	MaterialId   int    `description:"素材id"`
+// SaveAsMaterialReq 添加素材的请求数据
+type SaveAsMaterialReq struct {
 	MaterialName string `description:"素材名称"`
-	ImgUrl       string `description:"素材图片地址"`
 	ClassifyId   int    `description:"分类id"`
+	ObjectId     int    `description:"对象id"`
+	ObjectType   string `description:"对象类型:chart,excel,sandbox"`
 }
 
 // BatchAddMaterialReq 批量添加素材的请求数据

+ 2 - 2
routers/commentsRouter.go

@@ -7515,8 +7515,8 @@ func init() {
 
     beego.GlobalControllerRouter["eta/eta_api/controllers/material:MaterialController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/material:MaterialController"],
         beego.ControllerComments{
-            Method: "Save",
-            Router: `/save`,
+            Method: "SaveAsMaterial",
+            Router: `/saveAs`,
             AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,

+ 130 - 6
services/material/material.go

@@ -2,11 +2,18 @@ package materialService
 
 import (
 	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/excel"
 	"eta/eta_api/models/material"
+	"eta/eta_api/models/sandbox"
 	"eta/eta_api/models/system"
+	"eta/eta_api/services"
 	_interface "eta/eta_api/services/interface"
 	"eta/eta_api/utils"
 	"fmt"
+	"github.com/rdlucklib/rdluck_tools/http"
+	"os"
+	"path"
 	"strconv"
 	"strings"
 	"time"
@@ -89,20 +96,138 @@ func BatchAddMaterial(materialList []material.BatchAddMaterialItem, classifyId,
 	return
 }
 
-// AddMaterial 新增素材
-func AddMaterial(req material.AddAndEditMaterial, opUserId int, opUserName string) (resp *material.MaterialSaveResp, err error) {
-	resp = new(material.MaterialSaveResp)
+// AddToMaterial 将图库等封面上传至素材库
+func AddToMaterial(req material.SaveAsMaterialReq, opUserId int, opUserName string) (err error, errMsg string) {
+	// 判断出对应的类型,得倒最终的资源地址
+	oldRsourceUrl := ""
+	switch req.ObjectType {
+	case "chart":
+		// 获取图表封面地址
+		chartInfo, e := data_manage.GetChartInfoById(req.ObjectId)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				errMsg = "图表不存在"
+				err = fmt.Errorf("图表不存在")
+				return
+			}
+			errMsg = "获取图表信息失败"
+			err = e
+			return
+		}
+		if chartInfo.ChartImage == "" {
+			errMsg = "图表封面为空"
+			err = fmt.Errorf("图表封面为空")
+			return
+		}
+		oldRsourceUrl = chartInfo.ChartImage
+	case "sandbox":
+		// 获取逻辑图
+		sandboxInfo, e := sandbox.GetSandboxById(req.ObjectId)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				errMsg = "逻辑图不存在"
+				err = fmt.Errorf("逻辑图不存在")
+				return
+			}
+			errMsg = "获取逻辑图信息失败"
+			err = e
+			return
+		}
+		if sandboxInfo.PicUrl == "" { // 获取逻辑图封面地址
+			errMsg = "逻辑图封面为空"
+			err = fmt.Errorf("逻辑图封面为空")
+			return
+		}
+		oldRsourceUrl = sandboxInfo.PicUrl
+	case "excel":
+		// 获取表格封面地址
+		excelInfo, e := excel.GetExcelViewInfoByExcelInfoId(req.ObjectId)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				errMsg = "表格不存在"
+				err = fmt.Errorf("表格不存在")
+				return
+			}
+			errMsg = "获取表格信息失败"
+			err = e
+			return
+		}
+		if excelInfo.ExcelImage == "" {
+			errMsg = "表格封面为空"
+			err = fmt.Errorf("表格封面为空")
+			return
+		}
+		oldRsourceUrl = excelInfo.ExcelImage
+	default:
+		errMsg = "不支持的类型"
+		err = fmt.Errorf("不支持的类型")
+		return
+	}
+	// 下载资源地址内容,并上传至存储空间得倒最终的素材地址
+	urlFileName := path.Base(oldRsourceUrl)
+	uploadDir := utils.STATIC_DIR + "hongze/" + time.Now().Format("20060102")
+	if e := os.MkdirAll(uploadDir, utils.DIR_MOD); e != nil {
+		errMsg = "存储目录创建失败"
+		err = fmt.Errorf("存储目录创建失败, Err:" + e.Error())
+		return
+	}
+	var content []byte
+	content, err = http.Get(oldRsourceUrl)
+	if err != nil {
+		errMsg = "操作失败"
+		err = fmt.Errorf("资源获取失败, Err: " + err.Error())
+		return
+	}
+	filePath := uploadDir + "/" + urlFileName
+	ioWriter, err := os.Create(filePath)
+	if err != nil {
+		errMsg = "操作失败"
+		err = fmt.Errorf("文件创建失败, Err: " + err.Error())
+		return
+	}
+	n, err := ioWriter.Write(content)
+	fmt.Println("n", n)
+	if err != nil {
+		errMsg = "操作失败"
+		err = fmt.Errorf("压缩文件写入失败, Err: " + err.Error())
+		return
+	}
+	ext := path.Ext(urlFileName)
+	randStr := utils.GetRandStringNoSpecialChar(28)
+	newFileName := randStr + ext
+
+	// 上传到阿里云
+	ossDir := utils.RESOURCE_DIR + "material_dir/"
+	savePath := ossDir + time.Now().Format("200601/20060102/") + newFileName
+	// 上传文件
+	ossClient := services.NewOssClient()
+	if ossClient == nil {
+		err = fmt.Errorf("初始化OSS服务失败")
+		return
+	}
+	resourceUrl, err := ossClient.UploadFile(newFileName, filePath, savePath)
+	if err != nil {
+		err = fmt.Errorf("文件上传失败, Err: %s", err.Error())
+		return
+	}
+
+	defer func() {
+		os.Remove(filePath)
+	}()
+	// 新增素材库
+
+	sort, err := material.GetMaterialMaxSort()
 	//素材主表信息
 	materialInfo := &material.Material{
 		MaterialName:    utils.TrimStr(req.MaterialName),
 		MaterialNameEn:  utils.TrimStr(req.MaterialName),
-		ImgUrl:          utils.TrimStr(req.ImgUrl),
+		ImgUrl:          utils.TrimStr(resourceUrl),
 		SysUserId:       opUserId,
 		SysUserRealName: opUserName,
 		ModifyTime:      time.Now(),
 		CreateTime:      time.Now(),
 		ClassifyId:      req.ClassifyId,
-		Sort:            0,
+		Sort:            sort + 1,
 	}
 
 	//新增素材
@@ -111,7 +236,6 @@ func AddMaterial(req material.AddAndEditMaterial, opUserId int, opUserName strin
 		return
 	}
 	materialInfo.MaterialId = int(id)
-	resp.Material = materialInfo
 	return
 }