|
@@ -9,18 +9,15 @@ import (
|
|
|
materialService "eta/eta_api/services/material"
|
|
|
"eta/eta_api/utils"
|
|
|
"fmt"
|
|
|
+ "github.com/h2non/filetype"
|
|
|
"github.com/rdlucklib/rdluck_tools/paging"
|
|
|
- "io"
|
|
|
- "os"
|
|
|
+ "io/ioutil"
|
|
|
"path"
|
|
|
- "path/filepath"
|
|
|
+ "strconv"
|
|
|
"strings"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
-// versionSize 版本列表第一页数据约定是:3条
|
|
|
-var versionSize = 3
|
|
|
-
|
|
|
// MaterialController 逻辑导图
|
|
|
type MaterialController struct {
|
|
|
controllers.BaseAuthController
|
|
@@ -714,12 +711,13 @@ func (this *MaterialController) ClassifyMove() {
|
|
|
br.Msg = "移动成功"
|
|
|
}
|
|
|
|
|
|
-// @Title ETA图表列表接口
|
|
|
-// @Description ETA图表列表接口
|
|
|
+// List
|
|
|
+// @Title 素材列表接口
|
|
|
+// @Description 素材列表接口
|
|
|
// @Param PageSize query int true "每页数据条数"
|
|
|
// @Param CurrentIndex query int true "当前页页码,从1开始"
|
|
|
-// @Param ChartClassifyId query int true "分类id"
|
|
|
-// @Param KeyWord query string true "搜索关键词"
|
|
|
+// @Param ClassifyId query int true "分类id"
|
|
|
+// @Param Keyword query string true "搜索关键词"
|
|
|
// @Param IsShowMe query bool true "是否只看我的,true、false"
|
|
|
// @Success 200 {object} data_manage.ChartListResp
|
|
|
// @router /list [get]
|
|
@@ -737,11 +735,11 @@ func (this *MaterialController) List() {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- MaterialClassifyId, _ := this.GetInt("MaterialClassifyId")
|
|
|
+ classifyId, _ := this.GetInt("ClassifyId")
|
|
|
|
|
|
pageSize, _ := this.GetInt("PageSize")
|
|
|
currentIndex, _ := this.GetInt("CurrentIndex")
|
|
|
- keyWord := this.GetString("KeyWord")
|
|
|
+ keyword := this.GetString("Keyword")
|
|
|
|
|
|
var total int
|
|
|
page := paging.GetPaging(currentIndex, pageSize, total)
|
|
@@ -758,18 +756,51 @@ func (this *MaterialController) List() {
|
|
|
var condition string
|
|
|
var pars []interface{}
|
|
|
|
|
|
- if MaterialClassifyId > 0 {
|
|
|
- MaterialClassifyId, err := material.GetMaterialClassify(MaterialClassifyId)
|
|
|
- if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
- br.Msg = "获取图表信息失败"
|
|
|
- br.ErrMsg = "获取信息失败,GetChartClassify,Err:" + err.Error()
|
|
|
- return
|
|
|
+ if classifyId <= 0 {
|
|
|
+ br.Msg = "请选择分类"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 查询当前的分类
|
|
|
+ classifyInfo, err := material.GetMaterialClassifyById(classifyId)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "分类不存在"
|
|
|
+ br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 获取所有子分类
|
|
|
+ childList, e := material.GetMaterialClassifyByLevelPath(classifyInfo.LevelPath)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("保存分类失败,Err:" + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 把原先的父级levePath,替换成最新的父级序列
|
|
|
+ classifyIdMap := make(map[string]struct{})
|
|
|
+ classifyIds := make([]string, 0)
|
|
|
+ childClassifyMap := make(map[int]*material.MaterialClassify)
|
|
|
+ for _, tmp := range childList {
|
|
|
+ childClassifyMap[tmp.ClassifyId] = tmp
|
|
|
+ //获取字符串前缀的位置
|
|
|
+ after, _ := strings.CutPrefix(tmp.LevelPath, classifyInfo.LevelPath)
|
|
|
+ fmt.Println("after", after)
|
|
|
+ // 拼接字符串
|
|
|
+ if after != "" {
|
|
|
+ ids := strings.Split(after, ",")
|
|
|
+ for _, v := range ids {
|
|
|
+ if _, ok := classifyIdMap[v]; !ok {
|
|
|
+ classifyIds = append(classifyIds, v)
|
|
|
+ classifyIdMap[v] = struct{}{}
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- condition += " AND sandbox_classify_id IN(" + MaterialClassifyId + ") "
|
|
|
- //pars = append(pars, chartClassifyId)
|
|
|
}
|
|
|
- if keyWord != "" {
|
|
|
- condition += ` AND ( name LIKE '%` + keyWord + `%' )`
|
|
|
+ classifyIds = append(classifyIds, strconv.Itoa(classifyId))
|
|
|
+ if len(classifyIds) > 0 {
|
|
|
+ condition += " AND classify_id IN(" + utils.GetOrmInReplace(len(classifyIds)) + ") "
|
|
|
+ pars = append(pars, classifyIds)
|
|
|
+ }
|
|
|
+
|
|
|
+ if keyword != "" {
|
|
|
+ condition += ` AND ( material_name LIKE '%` + keyword + `%' )`
|
|
|
}
|
|
|
|
|
|
//只看我的
|
|
@@ -780,7 +811,6 @@ func (this *MaterialController) List() {
|
|
|
}
|
|
|
|
|
|
//获取图表信息
|
|
|
- condition += ` AND is_delete = 0 `
|
|
|
list, err := material.GetMaterialListByCondition(condition, pars, startSize, pageSize)
|
|
|
if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
br.Success = true
|
|
@@ -790,13 +820,9 @@ func (this *MaterialController) List() {
|
|
|
}
|
|
|
|
|
|
for i, v := range list {
|
|
|
- ids, err := material.GetMaterialAllParentByClassifyId(v.ClassifyId)
|
|
|
- if err != nil {
|
|
|
- br.Msg = "获取父级信息错误!"
|
|
|
- br.ErrMsg = "获取父级信息错误,Err:" + err.Error()
|
|
|
- return
|
|
|
+ if classifyTmp, ok := childClassifyMap[v.ClassifyId]; ok {
|
|
|
+ list[i].ParentIds = classifyTmp.LevelPath
|
|
|
}
|
|
|
- list[i].ParentIds = ids
|
|
|
}
|
|
|
resp := new(material.MaterialListResp)
|
|
|
if list == nil || len(list) <= 0 || (err != nil && err.Error() == utils.ErrNoRow()) {
|
|
@@ -1046,30 +1072,48 @@ func (this *MaterialController) BatchAdd() {
|
|
|
br.Ret = 408
|
|
|
return
|
|
|
}
|
|
|
- classifyId, _ := this.GetInt("ClassifyId", 0)
|
|
|
+ var req material.BatchAddMaterialReq
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ classifyId := req.ClassifyId
|
|
|
if classifyId <= 0 {
|
|
|
br.Msg = "请选择分类"
|
|
|
return
|
|
|
}
|
|
|
- materialNames := this.GetStrings("MaterialNames")
|
|
|
+ materialNames := make([]string, 0)
|
|
|
+ for _, v := range req.MaterialList {
|
|
|
+ if v.MaterialName == "" {
|
|
|
+ br.Msg = "请填写图片名称"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if v.ImgUrl == "" {
|
|
|
+ br.Msg = "请上传图片"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ materialNames = append(materialNames, v.MaterialName)
|
|
|
+ }
|
|
|
if len(materialNames) == 0 {
|
|
|
br.Msg = "请填写图片名称"
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 判断文件名是否已存在
|
|
|
- count, err := material.GetMaterialCountByNames(materialNames)
|
|
|
- if err != nil {
|
|
|
+ exist, e := material.GetMaterialByNames(materialNames)
|
|
|
+ if e != nil && e.Error() != utils.ErrNoRow() {
|
|
|
br.Msg = "获取失败"
|
|
|
br.ErrMsg = "获取数据失败,Err:" + err.Error()
|
|
|
return
|
|
|
}
|
|
|
- if count > 0 {
|
|
|
- br.Msg = "图片名称已存在,请重新填写"
|
|
|
+ if e == nil && exist.MaterialId > 0 {
|
|
|
+ br.Msg = fmt.Sprintf("图片名称:%s 已存在", exist.MaterialName)
|
|
|
return
|
|
|
}
|
|
|
// 获取表单中的所有文件
|
|
|
- files, err := this.GetFiles("Files")
|
|
|
+ /*files, err := this.GetFiles("Files")
|
|
|
if err != nil {
|
|
|
br.Msg = "文件上传失败"
|
|
|
br.ErrMsg = "文件上传失败,Err:" + err.Error()
|
|
@@ -1083,15 +1127,6 @@ func (this *MaterialController) BatchAdd() {
|
|
|
br.Msg = "图片数量与名称数量不一致"
|
|
|
return
|
|
|
}
|
|
|
- // 限制上传文件的大小(可选)
|
|
|
- maxSize := int64(10 << 20) // 10MB
|
|
|
- for _, file := range files {
|
|
|
- if file.Size > maxSize {
|
|
|
- br.Msg = "文件大小超过限制"
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
// 创建目标目录(如果不存在)
|
|
|
uploadDir := utils.STATIC_DIR + "hongze/" + time.Now().Format("20060102")
|
|
|
if err = os.MkdirAll(uploadDir, utils.DIR_MOD); err != nil {
|
|
@@ -1165,16 +1200,81 @@ func (this *MaterialController) BatchAdd() {
|
|
|
|
|
|
// 将文件保存到map中(这里主要是为了演示,实际使用中可能不需要)
|
|
|
fileUrlMap[materialNames[k]] = resourceUrl
|
|
|
- }
|
|
|
+ }*/
|
|
|
|
|
|
- err = materialService.BatchAddMaterial(fileUrlMap, classifyId, sysUser.AdminId, sysUser.AdminName)
|
|
|
+ err = materialService.BatchAddMaterial(req.MaterialList, classifyId, sysUser.AdminId, sysUser.AdminName)
|
|
|
if err != nil {
|
|
|
br.Msg = "文件上传失败"
|
|
|
br.ErrMsg = "文件上传失败,Err:" + err.Error()
|
|
|
return
|
|
|
}
|
|
|
- msg := "上传成功"
|
|
|
+ msg := "添加成功"
|
|
|
br.Ret = 200
|
|
|
br.Success = true
|
|
|
br.Msg = msg
|
|
|
}
|
|
|
+
|
|
|
+// Upload
|
|
|
+// @Title 上传素材
|
|
|
+// @Description 上传素材接口
|
|
|
+// @Param request body material.AddAndEditSandbox true "type json string"
|
|
|
+// @Success 200 {object} material.Material
|
|
|
+// @router /upload [post]
|
|
|
+func (this *MaterialController) Upload() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ f, h, err := this.GetFile("file")
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取资源信息失败"
|
|
|
+ br.ErrMsg = "获取资源信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer f.Close() //关闭上传文件
|
|
|
+
|
|
|
+ // 不依赖于文件扩展名检查文件格式
|
|
|
+ fileData, e := ioutil.ReadAll(f)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "上传失败"
|
|
|
+ br.ErrMsg = "读取文件失败, Err: " + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ pass := filetype.IsImage(fileData)
|
|
|
+ if !pass {
|
|
|
+ br.Msg = "文件格式有误"
|
|
|
+ br.ErrMsg = "文件格式有误"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ ext := path.Ext(h.Filename)
|
|
|
+ randStr := utils.GetRandStringNoSpecialChar(28)
|
|
|
+ fileName := randStr + ext
|
|
|
+
|
|
|
+ // 上传到阿里云
|
|
|
+ ossDir := utils.RESOURCE_DIR + "material_dir/"
|
|
|
+ savePath := ossDir + time.Now().Format("200601/20060102/") + fileName
|
|
|
+ // 上传文件
|
|
|
+ resourceUrl, err := services.CommonUploadToOssAndFileName(f, fileName, savePath)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "文件上传失败"
|
|
|
+ br.ErrMsg = "文件上传失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ resp := new(models.UploadImgResp)
|
|
|
+ resp.ResourceUrl = resourceUrl
|
|
|
+
|
|
|
+ br.Msg = "上传成功"
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Data = resp
|
|
|
+}
|