|
@@ -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
|
|
|
}
|
|
|
|