xyxie 6 tháng trước cách đây
mục cha
commit
9a163d7cab

+ 164 - 1
controllers/knowledge_resource.go

@@ -4,12 +4,16 @@ import (
 	"encoding/json"
 	"eta_gn/eta_api/models"
 	"eta_gn/eta_api/models/knowledge"
+	"eta_gn/eta_api/services"
 	knowledgeServ "eta_gn/eta_api/services/knowledge"
 	"eta_gn/eta_api/utils"
+	"github.com/h2non/filetype"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/tealeg/xlsx"
 	"html"
+	"io/ioutil"
 	"os"
+	"path"
 	"strconv"
 	"strings"
 	"time"
@@ -756,7 +760,7 @@ func (c *KnowledgeResourceController) ImportData() {
 		br.ErrMsg = "获取文件失败,Err:" + err.Error()
 		return
 	}
-	path := "./static/知识资源导入_" + strconv.Itoa(resourceType) + "_" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
+	path := "./static/knowledge_import_" + strconv.Itoa(resourceType) + "_" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
 	defer file.Close()
 	err = c.SaveToFile("EntryFile", path)
 	if err != nil {
@@ -873,3 +877,162 @@ func (this *KnowledgeResourceController) ImportFailListDownload() {
 	}
 	this.Ctx.Output.Download(savePath, finalFileName)
 }
+
+// ResourceUpload 上传文件
+// @Title 上传文件
+// @Description 上传文件
+// @Param   MenuId  query  int  true  "目录ID"
+// @Param   File	query  file  true  "文件"
+// @Success 200 Ret=200 操作成功
+// @router /resource/upload [post]
+func (this *KnowledgeResourceController) ResourceUpload() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		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, e := this.GetFile("File")
+	if e != nil {
+		br.Msg = "获取资源信息失败"
+		br.ErrMsg = "获取资源信息失败, Err:" + e.Error()
+		return
+	}
+	defer func() {
+		_ = f.Close()
+	}()
+
+	// 不依赖于文件扩展名检查文件格式
+	fileData, e := ioutil.ReadAll(f)
+	if e != nil {
+		br.Msg = "上传失败"
+		br.ErrMsg = "读取文件失败, Err: " + e.Error()
+		return
+	}
+	kind, _ := filetype.Match(fileData)
+	if kind.Extension != "pdf" && kind.Extension != "ppt" && kind.Extension != "docx" && kind.Extension != "doc" {
+		br.Msg = "文件格式有误"
+		return
+	}
+
+	uploadDir := utils.STATIC_DIR + "hongze/" + time.Now().Format("20060102")
+	if e = os.MkdirAll(uploadDir, utils.DIR_MOD); e != nil {
+		br.Msg = "存储目录创建失败"
+		br.ErrMsg = "存储目录创建失败, Err:" + e.Error()
+		return
+	}
+	ext := path.Ext(h.Filename)
+	ossFileName := utils.GetRandStringNoSpecialChar(28) + ext
+	filePath := uploadDir + "/" + ossFileName
+	if e = this.SaveToFile("file", filePath); e != nil {
+		br.Msg = "文件保存失败"
+		br.ErrMsg = "文件保存失败, Err:" + e.Error()
+		return
+	}
+	defer func() {
+		_ = os.Remove(filePath)
+	}()
+	// 上传到阿里云
+	ossDir := utils.RESOURCE_DIR + "knowledge_resource/"
+
+	resourceUrl := ``
+	savePath := ossDir + time.Now().Format("200601/20060102/") + ossFileName
+	ossClient := services.NewOssClient()
+	if ossClient == nil {
+		br.Msg = "上传失败"
+		br.ErrMsg = "初始化OSS服务失败"
+		return
+	}
+	resourceUrl, e = ossClient.UploadFile(ossFileName, filePath, savePath)
+	if e != nil {
+		br.Msg = "文件上传失败"
+		br.ErrMsg = "文件上传失败,Err:" + e.Error()
+		return
+	}
+
+	resourceItem := &knowledge.UpdateResourceResp{
+		FileUrl: resourceUrl,
+	}
+
+	br.Msg = "上传成功"
+	br.Ret = 200
+	br.Success = true
+	br.Data = resourceItem
+}
+
+// GetSourceFrom
+// @Title 获取所有来源
+// @Description 获取所有来源
+// @Success 200 {object} models.EdbdataClassifyResp
+// @router /resource/source_from [get]
+func (this *KnowledgeResourceController) GetSourceFrom() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请重新登录"
+		return
+	}
+	resourceType, _ := this.GetInt("ResourceType")
+	keyword := this.GetString("Keyword")
+	resourceObj := new(knowledge.KnowledgeResource)
+	list, err := resourceObj.GetSourceFrom(keyword, resourceType)
+	if err != nil {
+		br.Msg = "获取数据失败"
+		br.Msg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	resp := new(knowledge.GetSourceFromResp)
+	resp.List = list
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// GetAdminList
+// @Title 获取所有来源
+// @Description 获取所有来源
+// @Success 200 {object} models.EdbdataClassifyResp
+// @router /resource/admins [get]
+func (this *KnowledgeResourceController) GetAdminList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请重新登录"
+		return
+	}
+	resourceType, _ := this.GetInt("ResourceType")
+	keyword := this.GetString("Keyword")
+	resourceObj := new(knowledge.KnowledgeResource)
+	list, err := resourceObj.GetSourceFrom(keyword, resourceType)
+	if err != nil {
+		br.Msg = "获取数据失败"
+		br.Msg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	resp := new(knowledge.GetSourceFromResp)
+	resp.List = list
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 1 - 1
controllers/knowledge_tag.go

@@ -167,7 +167,7 @@ func (this *KnowledgeTagController) ListTag() {
 		this.ServeJSON()
 	}()
 
-	keyWord := this.GetString("KeyWord")
+	keyWord := this.GetString("Keyword")
 	knowledgeObj := new(knowledge.KnowledgeTag)
 	list, err := knowledgeObj.GetTagListByKeyword(keyWord)
 	if err != nil {

+ 13 - 11
models/knowledge/knowledge_resource.go

@@ -366,18 +366,12 @@ func (m *KnowledgeResource) AddMulti(items []*KnowledgeResource) (err error) {
 	return
 }
 
-func GetReportFieldsByIds(ids []int, fields []string) (items []*KnowledgeResource, err error) {
-	if len(ids) == 0 {
-		return
-	}
-
-	field := " * "
-	if len(fields) > 0 {
-		field = fmt.Sprintf(" %s ", strings.Join(fields, ","))
+func (m *KnowledgeResource) GetSourceFrom(keyword string, resource_type int) (items []string, err error) {
+	sql := fmt.Sprintf(`SELECT distinct source_from FROM %s WHERE 1=1 and resource_type=? `, m.TableName())
+	if keyword != `` {
+		sql += ` AND source_from LIKE '%` + keyword + `%'`
 	}
-	sql := fmt.Sprintf(`SELECT %s FROM knowledge_resource WHERE knowledge_resource_id IN (%s)`, field, utils.GetOrmInReplace(len(ids)))
-	//_, err = o.Raw(sql, ids).QueryRows(&items)
-	err = global.DmSQL["rddp"].Raw(sql, ids).Find(&items).Error
+	err = global.DmSQL["rddp"].Raw(sql, resource_type).Scan(&items).Error
 	return
 }
 
@@ -398,3 +392,11 @@ type ResourceImportData struct {
 	ClassifySecondName string `description:"二级分类"`
 	ClassifyThirdName  string `description:"三级分类"`
 }
+
+type UpdateResourceResp struct {
+	FileUrl string `description:"文件地址"`
+}
+
+type GetSourceFromResp struct {
+	List []string `description:"来源列表"`
+}

+ 27 - 0
routers/commentsRouter.go

@@ -8782,6 +8782,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta_gn/eta_api/controllers:KnowledgeResourceController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers:KnowledgeResourceController"],
+        beego.ControllerComments{
+            Method: "GetAdminList",
+            Router: `/resource/admins`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta_gn/eta_api/controllers:KnowledgeResourceController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers:KnowledgeResourceController"],
         beego.ControllerComments{
             Method: "Delete",
@@ -8854,6 +8863,24 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta_gn/eta_api/controllers:KnowledgeResourceController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers:KnowledgeResourceController"],
+        beego.ControllerComments{
+            Method: "GetSourceFrom",
+            Router: `/resource/source_from`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta_gn/eta_api/controllers:KnowledgeResourceController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers:KnowledgeResourceController"],
+        beego.ControllerComments{
+            Method: "ResourceUpload",
+            Router: `/resource/upload`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta_gn/eta_api/controllers:KnowledgeTagController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers:KnowledgeTagController"],
         beego.ControllerComments{
             Method: "Add",

+ 9 - 25
services/knowledge/resource.go

@@ -282,6 +282,7 @@ func ImportResourceData(path string, resourceType int, sysUser *system.Admin) (s
 	//导入失败数据
 	failDataList := make([]*knowledge.KnowledgeImportFail, 0)
 	var indexDataList []knowledge.ResourceImportData
+	tagObj := new(knowledge.KnowledgeTag)
 
 	// 模板校验,然后处理成标准化格式
 	for _, sheet := range xlFile.Sheets {
@@ -357,7 +358,12 @@ func ImportResourceData(path string, resourceType int, sysUser *system.Admin) (s
 		classifyNameMap[name] = v.ClassifyId
 	}
 	// todo 获取所有tag
-	//tagNameMap := make(map[string]int)
+	tagNameMap := make(map[string]int)
+	// todo 获取所有tag
+	tagList, err := tagObj.GetAllTag()
+	for _, v := range tagList {
+		tagNameMap[v.TagName] = v.TagId
+	}
 	//// TODO 成功数量超过20个指标,那就不导入了
 	/*	if len(targetMap) >= 100 {
 		failItem := new(knowledge.KnowledgeImportFail)
@@ -401,35 +407,13 @@ func ImportResourceData(path string, resourceType int, sysUser *system.Admin) (s
 
 		}
 
-		//todo 处理tag信息
-		/*tagId, ok := tagNameMap[v.Tag]
-		if !ok {
-			failItem := &knowledge.KnowledgeImportFail{
-				Title:          v.Title,
-				Content:        v.Content,
-				SourceFrom:     v.SourceFrom,
-				ClassifyFirst:  v.ClassifyFirstName,
-				ClassifySecond: v.ClassifySecondName,
-				ClassifyThird:  v.ClassifyThirdName,
-				ResourceType:   resourceType,
-				StartDate:      v.StartDate,
-				EndDate:        v.EndDate,
-				StartTime:      v.StartTime,
-				EndTime:        v.EndTime,
-				Remark:         "标签不存在",
-				SysUserId:      fmt.Sprint(sysUser.AdminId),
-		CreateTime:     time.Now(),
-			}
-			failDataList = append(failDataList, failItem)
-			continue
-		}*/
-
+		tagId, _ := tagNameMap[v.Tag]
 		req := new(knowledge.AddReq)
 		req.Title = v.Title
 		req.Content = v.Content
 		req.SourceFrom = v.SourceFrom
 		req.ClassifyId = classifyId
-		//req.TagId = tagId
+		req.TagId = tagId
 		req.ResourceType = resourceType
 		if v.StartDate != "" {
 			req.StartTime = fmt.Sprintf("%s %s", v.StartDate, v.StartTime)