Browse Source

新增英文字段

xyxie 4 months ago
parent
commit
7a06842d03

+ 77 - 116
controllers/material/material.go

@@ -133,11 +133,17 @@ func (this *MaterialController) AddMaterialClassify() {
 		level = parentClassify.Level + 1
 		levelPath = parentClassify.LevelPath
 	}
+	var count int
+	switch this.Lang {
+	case utils.LANG_EN:
+		count, err = material.GetMaterialClassifyNameEnCount(req.ClassifyName, req.ParentId)
+	default:
+		count, err = material.GetMaterialClassifyNameCount(req.ClassifyName, req.ParentId)
+	}
 
-	count, e := material.GetMaterialClassifyNameCount(req.ClassifyName, req.ParentId)
-	if e != nil {
+	if err != nil {
 		br.Msg = "判断名称是否已存在失败"
-		br.ErrMsg = "判断名称是否已存在失败,Err:" + e.Error()
+		br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
 		return
 	}
 	if count > 0 {
@@ -151,6 +157,7 @@ func (this *MaterialController) AddMaterialClassify() {
 	maxSort, _ := material.GetMaterialClassifyMaxSort(req.ParentId)
 	classify.ParentId = req.ParentId
 	classify.ClassifyName = req.ClassifyName
+	classify.ClassifyNameEn = req.ClassifyName
 	classify.CreateTime = time.Now()
 	classify.ModifyTime = time.Now()
 	classify.SysUserId = this.SysUser.AdminId
@@ -224,7 +231,19 @@ func (this *MaterialController) EditMaterialClassify() {
 		br.Msg = "获取分类信息失败,Err:" + err.Error()
 		return
 	}
-	count, err := material.GetMaterialClassifyNameNotSelfCount(req.ClassifyId, req.ClassifyName, item.ParentId)
+	var count int
+	updateStr := make([]string, 0)
+	switch this.Lang {
+	case utils.LANG_EN:
+		count, err = material.GetMaterialClassifyNameEnNotSelfCount(req.ClassifyId, req.ClassifyName, item.ParentId)
+		item.ClassifyNameEn = req.ClassifyName
+		updateStr = append(updateStr, "ClassifyNameEn")
+	default:
+		count, err = material.GetMaterialClassifyNameNotSelfCount(req.ClassifyId, req.ClassifyName, item.ParentId)
+		item.ClassifyName = req.ClassifyName
+		updateStr = append(updateStr, "ClassifyName")
+	}
+
 	if err != nil {
 		br.Msg = "判断名称是否已存在失败"
 		br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
@@ -235,13 +254,10 @@ func (this *MaterialController) EditMaterialClassify() {
 		br.IsSendEmail = false
 		return
 	}
-	//levelPath = fmt.Sprintf("%s,%d", levelPath, req.ClassifyId)
-	//item.LevelPath = levelPath
-	//item.ParentId = req.ParentId
-	item.ClassifyName = req.ClassifyName
+
 	item.ModifyTime = time.Now()
-	//e = item.Update([]string{"LevelPath", "ParentId", "ClassifyName", "ModifyTime"})
-	err = item.Update([]string{"ClassifyName", "ModifyTime"})
+	updateStr = append(updateStr, "ModifyTime")
+	err = item.Update(updateStr)
 	if err != nil {
 		br.Msg = "保存分类失败"
 		br.ErrMsg = "保存分类失败,Err:" + err.Error()
@@ -1179,108 +1195,40 @@ func (this *MaterialController) BatchAdd() {
 		br.Msg = "请填写图片名称"
 		return
 	}
-
-	// 判断文件名是否已存在
-	exist, e := material.GetMaterialByNames(materialNames)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取数据失败,Err:" + err.Error()
-		return
-	}
-	if e == nil && exist.MaterialId > 0 {
-		br.Msg = fmt.Sprintf("图片名称:%s 已存在", exist.MaterialName)
-		return
-	}
-	// 获取表单中的所有文件
-	/*files, err := this.GetFiles("Files")
-	if err != nil {
-		br.Msg = "文件上传失败"
-		br.ErrMsg = "文件上传失败,Err:" + err.Error()
-		return
-	}
-	if len(files) == 0 {
-		br.Msg = "请选择文件"
-		return
-	}
-	if len(materialNames) != len(files) {
-		br.Msg = "图片数量与名称数量不一致"
-		return
-	}
-	// 创建目标目录(如果不存在)
-	uploadDir := utils.STATIC_DIR + "hongze/" + time.Now().Format("20060102")
-	if err = os.MkdirAll(uploadDir, utils.DIR_MOD); err != nil {
-		br.Msg = "存储目录创建失败"
-		br.ErrMsg = "存储目录创建失败, Err:" + err.Error()
-		return
-	}
-
-	// 处理单个文件(这里假设files是一个多文件字段)
-	// 实际上,当使用<input type="file" name="files" multiple>时,
-	// 它会作为多个文件字段发送到服务器,名字相同但后缀不同,例如:files, files[1], files[2]等。
-	// 所以我们需要遍历这些字段。
-
-	// 创建一个map来存储所有文件
-	fileUrlMap := make(map[string]string)
-
-	// 获取上传文件的头部信息
-	//fileHeaders := this.Ctx.Request.Header["Content-Disposition"]
-	for k, fileHeader := range files {
-		// 解析Content-Disposition头以获取文件名
-		// 获取文件名(避免路径遍历攻击,只使用文件名部分)
-		fileName := filepath.Base(fileHeader.Filename)
-		fileName = strings.TrimSpace(strings.Replace(fileName, "\\", "/", -1)) // 替换可能存在的反斜杠
-		fileName = strings.Trim(fileName, " \"\n\r\t")                         // 去除文件名两侧的空白字符和引号
-
-		ext := path.Ext(fileName)
-		ossFileName := utils.GetRandStringNoSpecialChar(28) + ext
-		filePath := filepath.Join(uploadDir, ossFileName)
-
-		// 创建目标文件
-		dst, e := os.Create(filePath)
-		if e != nil {
-			br.Msg = "文件创建失败"
-			br.ErrMsg = "文件创建失败, Err:" + e.Error()
-			//http.Error(w, e.Error(), http.StatusInternalServerError)
-			return
-		}
-		defer dst.Close()
-		src, e := fileHeader.Open()
-		if e != nil {
-			br.Msg = "文件打开失败"
-			br.ErrMsg = "文件打开失败, Err:" + e.Error()
+	existList := make([]*material.Material, 0)
+	switch this.Lang {
+	case utils.LANG_EN:
+		existList, err = material.GetMaterialByNameEns(materialNames)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取数据失败,Err:" + err.Error()
 			return
 		}
-		// 将上传的文件内容复制到目标文件
-		if _, err = io.Copy(dst, src); err != nil {
-			br.Msg = "文件保存失败"
-			br.ErrMsg = "文件保存失败, Err:" + err.Error()
+		if len(existList) > 0 {
+			msg := "图片名称:"
+			for _, v := range existList {
+				msg += v.MaterialNameEn + " "
+			}
+			br.Msg = fmt.Sprintf("%s 已存在", msg)
 			return
 		}
-
-		defer func() {
-			_ = os.Remove(filePath)
-		}()
-		// 上传到阿里云
-		ossDir := utils.RESOURCE_DIR + "cloud_disk/"
-
-		savePath := ossDir + time.Now().Format("200601/20060102/") + ossFileName
-		ossClient := services.NewOssClient()
-		if ossClient == nil {
-			br.Msg = "上传失败"
-			br.ErrMsg = "初始化OSS服务失败"
+	default:
+		// 判断文件名是否已存在
+		existList, err = material.GetMaterialByNames(materialNames)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取数据失败,Err:" + err.Error()
 			return
 		}
-		resourceUrl, e := ossClient.UploadFile(ossFileName, filePath, savePath)
-		if e != nil {
-			br.Msg = "文件上传失败"
-			br.ErrMsg = "文件上传失败,Err:" + e.Error()
+		if len(existList) > 0 {
+			msg := "图片名称:"
+			for _, v := range existList {
+				msg += v.MaterialName + " "
+			}
+			br.Msg = fmt.Sprintf("%s 已存在", msg)
 			return
 		}
-
-		// 将文件保存到map中(这里主要是为了演示,实际使用中可能不需要)
-		fileUrlMap[materialNames[k]] = resourceUrl
-	}*/
-
+	}
 	err = materialService.BatchAddMaterial(req.MaterialList, classifyId, sysUser.AdminId, sysUser.AdminName)
 	if err != nil {
 		br.Msg = "文件上传失败"
@@ -1571,28 +1519,41 @@ func (this *MaterialController) Rename() {
 		br.ErrMsg = "获取素材库信息失败,Err:" + err.Error()
 		return
 	}
-	// 判断名称是否重复
-	if info.MaterialName == req.MaterialName {
-		br.Msg = "名称未修改"
-		return
+	var exist *material.Material
+	updateStr := make([]string, 0)
+	switch this.Lang {
+	case utils.LANG_EN:
+		// 判断名称是否重复
+		if info.MaterialNameEn == req.MaterialName {
+			br.Msg = "名称未修改"
+			return
+		}
+		exist, err = material.GetMaterialByNameEn(req.MaterialName)
+		info.MaterialNameEn = req.MaterialName
+		updateStr = append(updateStr, "MaterialNameEn")
+	default:
+		// 判断名称是否重复
+		if info.MaterialName == req.MaterialName {
+			br.Msg = "名称未修改"
+			return
+		}
+		exist, err = material.GetMaterialByName(req.MaterialName)
+		info.MaterialName = req.MaterialName
+		updateStr = append(updateStr, "MaterialName")
 	}
-
-	// 查询名称是否已存在
-	exist, e := material.GetMaterialByNames([]string{req.MaterialName})
-	if e != nil && e.Error() != utils.ErrNoRow() {
+	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
 		return
 	}
-	if e == nil && exist.MaterialId > 0 {
+	if err == nil && exist.MaterialId > 0 {
 		br.Msg = "图片名称已存在"
 		return
 	}
-	info.MaterialName = req.MaterialName
 	info.ModifyTime = time.Now()
-
+	updateStr = append(updateStr, "ModifyTime")
 	//更换分类素材库
-	err = info.Update([]string{"MaterialName", "ModifyTime"})
+	err = info.Update(updateStr)
 	if err != nil {
 		br.Msg = err.Error()
 		return

+ 31 - 6
models/material/material.go

@@ -12,6 +12,7 @@ import (
 type Material struct {
 	MaterialId      int       `orm:"column(material_id);pk" description:"素材id"`
 	MaterialName    string    `description:"素材名称"`
+	MaterialNameEn  string    `description:"英文素材名称"`
 	ImgUrl          string    `description:"素材图片地址"`
 	SysUserId       int       `description:"作者id"`
 	SysUserRealName string    `description:"作者名称"`
@@ -85,6 +86,7 @@ func UpdateMaterial(materialInfo *Material, updateMaterialColumn []string) (err
 type MaterialListItem struct {
 	MaterialId      int    `description:"素材id"`
 	MaterialName    string `description:"素材名称"`
+	MaterialNameEn  string `description:"英文素材名称"`
 	ImgUrl          string `description:"素材图片地址"`
 	ModifyTime      string `description:"修改时间"`
 	CreateTime      string `description:"创建时间"`
@@ -114,10 +116,6 @@ func CheckOpMaterialPermission(sysUser *system.Admin, createUserId int) (ok bool
 	if ok == false && createUserId == sysUser.AdminId {
 		ok = true
 	}
-	// 如果图表权限id 是 1 ,那么允许编辑
-	if ok == false && sysUser.ChartPermission == 1 {
-		ok = true
-	}
 	return
 }
 
@@ -311,10 +309,30 @@ func GetMaterialInfoCountByClassifyIds(classifyIds []string) (count int, err err
 	return
 }
 
-func GetMaterialByNames(materialNames []string) (item *Material, err error) {
+func GetMaterialByNames(materialNames []string) (items []*Material, err error) {
 	o := orm.NewOrmUsingDB("rddp")
 	sql := `SELECT * FROM material WHERE material_name in (` + utils.GetOrmInReplace(len(materialNames)) + `) limit 1`
-	err = o.Raw(sql, materialNames).QueryRow(&item)
+	_, err = o.Raw(sql, materialNames).QueryRows(&items)
+	return
+}
+
+func GetMaterialByNameEns(materialNames []string) (items []*Material, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT * FROM material WHERE material_name_en in (` + utils.GetOrmInReplace(len(materialNames)) + `) limit 1`
+	_, err = o.Raw(sql, materialNames).QueryRows(&items)
+	return
+}
+
+func GetMaterialByName(materialName string) (item *Material, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT * FROM material WHERE material_name = ?`
+	err = o.Raw(sql, materialName).QueryRow(&item)
+	return
+}
+func GetMaterialByNameEn(materialName string) (item *Material, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT * FROM material WHERE material_name_en = ?`
+	err = o.Raw(sql, materialName).QueryRow(&item)
 	return
 }
 
@@ -325,6 +343,13 @@ func GetMaterialCountByName(materialName string) (count int, err error) {
 	return
 }
 
+func GetMaterialCountByNameEn(materialName string) (count int, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT COUNT(1) AS count FROM material WHERE material_name_en=? `
+	err = o.Raw(sql, materialName).QueryRow(&count)
+	return
+}
+
 // GetMaterialMaxSort 获取最大的排序数
 func GetMaterialMaxSort() (sort int, err error) {
 	o := orm.NewOrmUsingDB("rddp")

+ 26 - 33
models/material/material_classify.go

@@ -10,6 +10,7 @@ import (
 type MaterialClassify struct {
 	ClassifyId      int       `orm:"column(classify_id);pk"`
 	ClassifyName    string    `description:"分类名称"`
+	ClassifyNameEn  string    `description:"英文分类名称"`
 	ParentId        int       `description:"父级id"`
 	CreateTime      time.Time `description:"创建时间"`
 	ModifyTime      time.Time `description:"修改时间"`
@@ -43,16 +44,17 @@ func GetMaterialClassifyAll() (items []*MaterialClassifyItems, err error) {
 }
 
 type MaterialClassifyItems struct {
-	ClassifyId   int       `orm:"column(classify_id);pk"`
-	ClassifyName string    `description:"分类名称"`
-	ParentId     int       `description:"父级id"`
-	CreateTime   time.Time `description:"创建时间"`
-	ModifyTime   time.Time `description:"修改时间"`
-	SysUserId    int       `description:"创建人id"`
-	SysUserName  string    `description:"创建人姓名"`
-	Level        int       `description:"层级"`
-	Sort         int       `description:"排序字段,越小越靠前,默认值:10"`
-	Children     []*MaterialClassifyItems
+	ClassifyId     int       `orm:"column(classify_id);pk"`
+	ClassifyName   string    `description:"分类名称"`
+	ClassifyNameEn string    `description:"英文分类名称"`
+	ParentId       int       `description:"父级id"`
+	CreateTime     time.Time `description:"创建时间"`
+	ModifyTime     time.Time `description:"修改时间"`
+	SysUserId      int       `description:"创建人id"`
+	SysUserName    string    `description:"创建人姓名"`
+	Level          int       `description:"层级"`
+	Sort           int       `description:"排序字段,越小越靠前,默认值:10"`
+	Children       []*MaterialClassifyItems
 }
 
 type MaterialClassifyListResp struct {
@@ -72,6 +74,13 @@ func GetMaterialClassifyNameCount(classifyName string, parentId int) (count int,
 	return
 }
 
+func GetMaterialClassifyNameEnCount(classifyName string, parentId int) (count int, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT COUNT(1) AS count FROM material_classify WHERE parent_id=? AND classify_name_en=? `
+	err = o.Raw(sql, parentId, classifyName).QueryRow(&count)
+	return
+}
+
 func GetMaterialClassifyNameNotSelfCount(id int, classifyName string, parentId int) (count int, err error) {
 	o := orm.NewOrmUsingDB("rddp")
 	sql := `SELECT COUNT(1) AS count FROM material_classify WHERE classify_id !=? AND parent_id=? AND classify_name=? `
@@ -79,6 +88,13 @@ func GetMaterialClassifyNameNotSelfCount(id int, classifyName string, parentId i
 	return
 }
 
+func GetMaterialClassifyNameEnNotSelfCount(id int, classifyName string, parentId int) (count int, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT COUNT(1) AS count FROM material_classify WHERE classify_id !=? AND parent_id=? AND classify_name_en=? `
+	err = o.Raw(sql, id, parentId, classifyName).QueryRow(&count)
+	return
+}
+
 // GetMaterialClassifyMaxSort 获取沙盘分类下最大的排序数
 func GetMaterialClassifyMaxSort(parentId int) (sort int, err error) {
 	o := orm.NewOrmUsingDB("rddp")
@@ -99,13 +115,6 @@ func GetMaterialClassifyById(classifyId int) (item *MaterialClassify, err error)
 	return
 }
 
-func EditMaterialClassify(classifyId, ChartPermissionId int, ClassifyName, ChartPermissionName string) (err error) {
-	o := orm.NewOrmUsingDB("rddp")
-	sql := `UPDATE material_classify SET classify_name=?,chart_permission_id = ?, chart_permission_name = ?, modify_time=NOW() WHERE classify_id=? `
-	_, err = o.Raw(sql, ClassifyName, ChartPermissionId, ChartPermissionName, classifyId).Exec()
-	return
-}
-
 type MaterialClassifyDeleteCheckReq struct {
 	ClassifyId int `description:"分类id"`
 }
@@ -198,22 +207,6 @@ type SandboxLinkCheckResp struct {
 	ReportIdList    []*SandboxLinkCheckItem `description:"报告id列表"`
 }
 
-// 获取所有子级分类id
-func GetMaterialClassifySubcategories(classifyId int) (Ids string, err error) {
-	o := orm.NewOrmUsingDB("rddp")
-	sql := `SELECT GROUP_CONCAT(classify_id) AS ids
-FROM (
-SELECT @pv := ? AS classify_id
-UNION ALL
-SELECT sc.classify_id
-FROM material_classify sc
-JOIN (SELECT @pv := ?) initial
-WHERE sc.parent_id = @pv
-) subcategories; `
-	err = o.Raw(sql, classifyId, classifyId).QueryRow(&Ids)
-	return
-}
-
 func GetMaterialClassifyByLevelPath(levelPath string) (items []*MaterialClassify, err error) {
 	o := orm.NewOrmUsingDB("rddp")
 	sql := `SELECT * FROM material_classify where level_path like "` + levelPath + `%"`

+ 2 - 0
services/material/material.go

@@ -73,6 +73,7 @@ func BatchAddMaterial(materialList []material.BatchAddMaterialItem, classifyId,
 		sort = sort + 1
 		addList = append(addList, &material.Material{
 			MaterialName:    v.MaterialName,
+			MaterialNameEn:  v.MaterialName,
 			ImgUrl:          v.ImgUrl,
 			SysUserId:       opUserId,
 			SysUserRealName: opUserName,
@@ -94,6 +95,7 @@ func AddMaterial(req material.AddAndEditMaterial, opUserId int, opUserName strin
 	//素材主表信息
 	materialInfo := &material.Material{
 		MaterialName:    utils.TrimStr(req.MaterialName),
+		MaterialNameEn:  utils.TrimStr(req.MaterialName),
 		ImgUrl:          utils.TrimStr(req.ImgUrl),
 		SysUserId:       opUserId,
 		SysUserRealName: opUserName,