xyxie 5 ヶ月 前
コミット
c6d6bb5220

+ 699 - 0
controllers/knowledge_resource.go

@@ -0,0 +1,699 @@
+package controllers
+
+import (
+	"encoding/json"
+	"eta_gn/eta_api/models"
+	"eta_gn/eta_api/models/knowledge"
+	knowledgeServ "eta_gn/eta_api/services/knowledge"
+	"eta_gn/eta_api/utils"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"html"
+	"strconv"
+	"strings"
+)
+
+// 分类
+type KnowledgeResourceController struct {
+	BaseAuthController
+}
+
+// ListReport
+// @Title 获取事件列表接口
+// @Description 获取事件列表
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   TimeType     query string true  "筛选的时间类别:publish_time(发布时间),modify_time(更新时间);approve_time(审批时间)"
+// @Param   StartDate   query   string  true       "开始时间"
+// @Param   EndDate   query   string  true       "结束时间"
+// @Param   Frequency   query   string  true       "频度"
+// @Param   ClassifyIdFirst   query   int  true       "一级分类id"
+// @Param   ClassifyIdSecond   query   int  true       "二级分类id"
+// @Param   ClassifyIdThird   query   int  true       "三级分类id"
+// @Param   State   query   int  true       "状态"
+// @Param   KeyWord   query   string  true       "搜索关键词"
+// @Param   PublishSort   query   string  true       "desc:降序,asc 升序(预留)"
+// @Param   FilterReportType   query   string  true       "筛选事件类型,1:公共研报,2:共享研报,3:我的研报"
+// @Success 200 {object} knowledge.KnowledgeResourceListResp
+// @router /resource/list [get]
+func (this *KnowledgeResourceController) List() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+
+	classifyIds := this.GetString("ClassifyIds")
+	// 添加人
+	addUserIds, _ := this.GetInt("SysUserIds")
+	// 标签
+	tagIds := this.GetString("TagIds")
+
+	keyWord := this.GetString("Keyword")
+
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = utils.StartIndex(currentIndex, pageSize)
+
+	var condition string
+	var pars []interface{}
+
+	if keyWord != "" {
+		condition += ` AND (title LIKE ?) `
+		pars = utils.GetLikeKeywordPars(pars, keyWord, 2)
+	}
+	if classifyIds != "" {
+		//转成数组,并把类型转成int
+		classifyIdsArr := strings.Split(classifyIds, ",")
+		var classifyIdsInt []int
+		for _, v := range classifyIdsArr {
+			classifyId, _ := strconv.Atoi(v)
+			classifyIdsInt = append(classifyIdsInt, classifyId)
+		}
+		condition += ` AND classify_id in (?) `
+		pars = append(pars, classifyIdsInt)
+	}
+	if addUserIds > 0 {
+		// 转成数组,并把类型转成int
+		addUserIdsArr := strings.Split(strconv.Itoa(addUserIds), ",")
+		var addUserIdsInt []int
+		for _, v := range addUserIdsArr {
+			addUserId, _ := strconv.Atoi(v)
+			addUserIdsInt = append(addUserIdsInt, addUserId)
+		}
+		condition += ` AND admin_id in (?) `
+		pars = append(pars, addUserIdsInt)
+	}
+	if tagIds != "" {
+		//转成数组,并把类型转成int
+		tagIdsArr := strings.Split(tagIds, ",")
+		var tagIdsInt []int
+		for _, v := range tagIdsArr {
+			tagId, _ := strconv.Atoi(v)
+			tagIdsInt = append(tagIdsInt, tagId)
+		}
+		condition += ` AND tag_id in (?) `
+		pars = append(pars, tagIdsInt)
+	}
+
+	var err error
+	var total int
+	var list []*knowledge.KnowledgeResourceList
+	// 共享事件需要连表查询,所以需要单独写
+	total, err = knowledge.GetKnowledgeResourceListCount(condition, pars)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	list, err = knowledge.GetKnowledgeResourceList(condition, pars, startSize, pageSize)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	// 整理分类ID
+	classifyFullNameMap := make(map[int]string)
+	classifyIdsArr := make([]int, 0)
+	for _, v := range list {
+		classifyIdsArr = append(classifyIdsArr, v.ClassifyId)
+	}
+	// 获取分类列表
+	classifyList, err := knowledge.GetFullClassifyListByIdList(classifyIdsArr)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	for _, v := range classifyList {
+		name := v.ClassifyName
+		if v.ParentName != "" {
+			name = v.ParentName + "/" + name
+		}
+		if v.RootName != "" {
+			name = v.RootName + "/" + name
+		}
+		classifyFullNameMap[v.ClassifyId] = name
+	}
+
+	/* // 整理标签ID
+	    tagNameMap := make(map[int]string)
+	    tagIdsArr := make([]int, 0)
+	    for _, v := range list {
+	        tagIdsArr = append(tagIdsArr, v.TagId)
+	    }
+	    // 获取标签列表
+	    tagList, err := knowledge.GetTagListByIdList(tagIdsArr)
+	    if err != nil {
+	        br.Msg = "获取失败"
+	        br.ErrMsg = "获取失败,Err:" + err.Error()
+		}*/
+
+	for _, item := range list {
+		// todo 编辑状态
+		/*markStatus, err := services.UpdateReportEditMark(item.Id, 0, this.SysUser.AdminId, 2, this.SysUser.RealName, this.Lang)
+		if err != nil {
+			br.Msg = "查询标记状态失败"
+			br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
+			return
+		}
+		if markStatus.Status == 0 {
+			item.CanEdit = true
+		} else {
+			item.Editor = markStatus.Editor
+		}*/
+		classifyName, ok := classifyFullNameMap[item.ClassifyId]
+		if ok {
+			item.ClassifyFullName = classifyName
+		}
+		/*tagName, ok := tagNameMap[item.TagId]
+		if ok {
+			item.TagName = tagName
+		*/
+	}
+
+	page := paging.GetPaging(currentIndex, pageSize, total)
+	resp := new(knowledge.KnowledgeResourceListResp)
+	resp.Paging = page
+	resp.List = list
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// Add
+// @Title 新增事件接口
+// @Description 新增事件(区分事件类型)
+// @Param	request	body knowledge.AddReq true "type json string"
+// @Success 200 {object} knowledge.AddResp
+// @router /resource/add [post]
+func (this *KnowledgeResourceController) Add() {
+	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
+	}
+	var req knowledge.AddReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	if req.Title == `` {
+		br.Msg = "标题不能为空"
+		br.ErrMsg = "标题不能为空"
+		br.IsSendEmail = false
+		return
+	}
+	if req.ClassifyId <= 0 {
+		br.Msg = "分类必填"
+		br.ErrMsg = "分类必填"
+		br.IsSendEmail = false
+		return
+	}
+	if req.ResourceType == knowledge.KnowledgeResourceTypeEvent || req.ResourceType == knowledge.KnowledgeResourceTypePolicy {
+		if req.StartTime == "" {
+			br.Msg = "开始时间必填"
+			br.ErrMsg = "开始时间必填"
+			return
+		}
+	}
+	item, err, errMsg := knowledgeServ.AddResource(&req, sysUser)
+	if err != nil {
+		br.Msg = "保存失败"
+		if errMsg != "" {
+			br.Msg = errMsg
+		}
+		br.ErrMsg = "保存失败,Err:" + err.Error()
+		return
+	}
+
+	resp := new(knowledge.AddResp)
+	resp.KnowledgeResourceId = item.KnowledgeResourceId
+	resp.ResourceCode = item.ResourceCode
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "保存成功"
+	br.Data = resp
+}
+
+// Edit
+// @Title 编辑事件基础信息接口
+// @Description 编辑事件基础信息(不区分事件类型)
+// @Param	request	body knowledge.EditReq true "type json string"
+// @Success 200 {object} knowledge.EditResp
+// @router /resource/edit [post]
+func (this *KnowledgeResourceController) Edit() {
+	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
+	}
+
+	var req knowledge.EditReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	if req.KnowledgeResourceId <= 0 {
+		br.Msg = "请选择事件"
+		br.ErrMsg = "请选择事件"
+		return
+	}
+	if req.Title == `` {
+		br.Msg = "标题不能为空"
+		br.ErrMsg = "标题不能为空"
+		br.IsSendEmail = false
+		return
+	}
+	if req.ClassifyId <= 0 {
+		br.Msg = "分类必填"
+		br.ErrMsg = "分类必填"
+		br.IsSendEmail = false
+		return
+	}
+
+	if req.ResourceType == knowledge.KnowledgeResourceTypeEvent || req.ResourceType == knowledge.KnowledgeResourceTypePolicy {
+		if req.StartTime == "" {
+			br.Msg = "开始时间必填"
+			br.ErrMsg = "开始时间必填"
+			return
+		}
+	}
+
+	// todo 更新标记key
+	/*markStatus, err := services.UpdateReportEditMark(int(req.KnowledgeResourceId), 0, sysUser.AdminId, 1, sysUser.RealName, this.Lang)
+	if err != nil {
+		br.Msg = err.Error()
+		return
+	}
+	if markStatus.Status == 1 {
+		br.Msg = markStatus.Msg
+		//br.Ret = 202 //202 服务器已接受请求,但尚未处理。
+		return
+	}*/
+	resourceObj := new(knowledge.KnowledgeResource)
+	resourceInfo, e := resourceObj.GetById(int(req.KnowledgeResourceId))
+	if e != nil {
+		if utils.IsErrNoRow(e) {
+			br.Msg = "事件已被删除, 请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取事件失败, Err: " + e.Error()
+		return
+	}
+
+	// 编辑事件信息
+	err, errMsg := knowledgeServ.EditResource(resourceInfo, req, sysUser)
+	if err != nil {
+		br.Msg = "保存失败"
+		if errMsg != "" {
+			br.Msg = errMsg
+		}
+		br.ErrMsg = "保存失败,Err:" + err.Error()
+		return
+	}
+
+	resp := new(knowledge.EditResp)
+	resp.KnowledgeResourceId = req.KnowledgeResourceId
+	resp.ResourceCode = resourceInfo.ResourceCode
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "保存成功"
+	br.Data = resp
+}
+
+// Detail
+// @Title 获取事件详情接口
+// @Description 获取事件详情
+// @Param	request	body knowledge.KnowledgeResourceDetailReq true "type json string"
+// @Success 200 {object} knowledge.KnowledgeResource
+// @router /resource/detail [get]
+func (this *KnowledgeResourceController) Detail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	/*var req knowledge.KnowledgeResourceDetailReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.KnowledgeResourceId <= 0 {
+		br.Msg = "参数错误"
+		return
+	}*/
+	knowledgeResourceId, err := this.GetInt("KnowledgeResourceId")
+	if err != nil {
+		br.Msg = "获取参数失败!"
+		br.ErrMsg = "获取参数失败,Err:" + err.Error()
+		return
+	}
+	if knowledgeResourceId <= 0 {
+		br.Msg = "参数错误"
+		return
+	}
+	resourceObj := new(knowledge.KnowledgeResource)
+	item, err := resourceObj.GetById(knowledgeResourceId)
+	if err != nil {
+		if utils.IsErrNoRow(err) {
+			br.Msg = "事件已被删除"
+			return
+		}
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	item.Content = html.UnescapeString(item.Content)
+
+	resp := &knowledge.KnowledgeResourceDetailView{
+		KnowledgeResource: item,
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// SaveReportContent
+// @Title 保存草稿
+// @Description 保存草稿
+// @Param	request	body knowledge.SaveReportContent true "type json string"
+// @Success 200 {object} knowledge.KnowledgeResourceAuthorResp
+// @router /resource/saveContent [post]
+func (this *KnowledgeResourceController) SaveReportContent() {
+	br := new(models.BaseResponse).Init()
+	br.IsSendEmail = false
+	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
+	}
+	var req knowledge.SaveReportContent
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	knowledgeResourceId := req.KnowledgeResourceId
+	//noChangeFlag := req.NoChange
+
+	if knowledgeResourceId <= 0 {
+		resp := new(knowledge.SaveReportContentResp)
+		resp.KnowledgeResourceId = knowledgeResourceId
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "保存成功"
+		br.Data = resp
+		return
+	}
+
+	// 获取事件详情
+	/*resourceInfo, _ := knowledge.GetReportByknowledgeResourceId(req.KnowledgeResourceId)
+	if resourceInfo != nil && resourceInfo.State == 2 {
+		br.Msg = "该事件已发布,不允许编辑"
+		br.ErrMsg = "该事件已发布,不允许编辑"
+		br.IsSendEmail = false
+		return
+	}
+
+	// 标记更新中
+	{
+		markStatus, err := services.UpdateReportEditMark(req.KnowledgeResourceId, 0, sysUser.AdminId, 1, sysUser.RealName, this.Lang)
+		if err != nil {
+			br.Msg = err.Error()
+			return
+		}
+		if markStatus.Status == 1 {
+			br.Msg = markStatus.Msg
+			return
+		}
+	}
+
+	// 内容有过修改的话,那么逻辑处理
+	if noChangeFlag != 1 {
+		content := req.Content
+		if content == "" {
+			content = this.GetString("Content")
+		}
+		if content != "" {
+			e := utils.ContentXssCheck(req.Content)
+			if e != nil {
+				br.Msg = "存在非法标签"
+				br.ErrMsg = "存在非法标签, Err: " + e.Error()
+				return
+			}
+			contentClean, e := services.FilterReportContentBr(req.Content)
+			if e != nil {
+				br.Msg = "内容去除前后空格失败"
+				br.ErrMsg = "内容去除前后空格失败, Err: " + e.Error()
+				return
+			}
+			content = contentClean
+
+			contentSub, err := services.GetReportContentSub(content)
+			if err != nil {
+				go alarm_msg.SendAlarmMsg("解析 ContentSub 失败,Err:"+err.Error(), 3)
+				//utils.SendEmail(utils.APPNAME+"失败提醒", "解析 ContentSub 失败,Err:"+err.Error(), utils.EmailSendToUsers)
+			}
+			resourceInfo.Content = html.EscapeString(content)
+			resourceInfo.ContentSub = html.EscapeString(contentSub)
+			resourceInfo.ContentStruct = html.EscapeString(req.ContentStruct)
+			resourceInfo.HeadImg = req.HeadImg
+			resourceInfo.EndImg = req.EndImg
+			resourceInfo.CanvasColor = req.CanvasColor
+			resourceInfo.HeadResourceId = req.HeadResourceId
+			resourceInfo.EndResourceId = req.EndResourceId
+			resourceInfo.ModifyTime = time.Now()
+			resourceInfo.ContentModifyTime = time.Now()
+			updateCols := []string{"Content", "ContentSub", "ContentStruct", "HeadImg", "EndImg", "CanvasColor", "HeadResourceId", "EndResourceId", "ModifyTime", "ContentModifyTime"}
+			err = resourceInfo.UpdateReport(updateCols)
+			if err != nil {
+				br.Msg = "保存失败"
+				br.ErrMsg = "保存失败,Err:" + err.Error()
+				return
+			}
+			go knowledge.AddReportSaveLog(knowledgeResourceId, this.SysUser.AdminId, resourceInfo.Content, resourceInfo.ContentSub, resourceInfo.ContentStruct, resourceInfo.CanvasColor, this.SysUser.AdminName, resourceInfo.HeadResourceId, resourceInfo.EndResourceId)
+		}
+	}
+	*/
+	resp := new(knowledge.SaveReportContentResp)
+	resp.KnowledgeResourceId = knowledgeResourceId
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "保存成功"
+	br.Data = resp
+}
+
+// BaseDetail
+// @Title 获取事件基础信息详情接口
+// @Description 获取事件基础信息详情接口
+// @Param	request	body knowledge.KnowledgeResourceDetailReq true "type json string"
+// @Success 200 {object} knowledge.KnowledgeResource
+// @router /resource/detail/base [get]
+func (this *KnowledgeResourceController) BaseDetail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	/*var req knowledge.KnowledgeResourceDetailReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.KnowledgeResourceId <= 0 {
+		br.Msg = "参数错误"
+		return
+	}*/
+	/*knowledgeResourceId, err := this.GetInt("KnowledgeResourceId")
+	if err != nil {
+		br.Msg = "获取参数失败!"
+		br.ErrMsg = "获取参数失败,Err:" + err.Error()
+		return
+	}
+	if knowledgeResourceId <= 0 {
+		br.Msg = "参数错误"
+		return
+	}
+	resourceInfo, err := knowledge.GetReportById(knowledgeResourceId)
+	if err != nil {
+		if utils.IsErrNoRow(err) {
+			br.Msg = "事件已被删除"
+			return
+		}
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+
+	// 基础信息就不获取章节信息了
+	chapterList := make([]*knowledge.KnowledgeResourceChapter, 0)
+
+	resourceInfo.Content = html.UnescapeString(resourceInfo.Content)
+	resourceInfo.ContentSub = html.UnescapeString(resourceInfo.ContentSub)
+
+	grandAdminList := make([]knowledge.KnowledgeResourceDetailViewAdmin, 0)
+	permissionList := make([]knowledge.KnowledgeResourceDetailViewPermission, 0)
+
+	// 处理事件授权用户列表
+	{
+		obj := report.ReportGrant{}
+		grantList, tmpErr := obj.GetGrantListById(knowledgeResourceId)
+		if tmpErr != nil {
+			br.Msg = "获取章节id授权用户列表失败"
+			br.ErrMsg = "获取章节id授权用户列表失败, Err: " + tmpErr.Error()
+			return
+		}
+
+		if len(grantList) > 0 {
+			grandAdminIdList := make([]int, 0)
+			for _, v := range grantList {
+				grandAdminIdList = append(grandAdminIdList, v.AdminId)
+			}
+			adminList, tmpErr := system.GetAdminListByIdList(grandAdminIdList)
+			if tmpErr != nil {
+				br.Msg = "获取章节id授权用户列表失败"
+				br.ErrMsg = "获取章节id授权用户列表失败, Err: " + tmpErr.Error()
+				return
+			}
+			for _, v := range adminList {
+				grandAdminList = append(grandAdminList, knowledge.KnowledgeResourceDetailViewAdmin{
+					AdminId:   v.AdminId,
+					AdminName: v.RealName,
+				})
+			}
+		}
+
+	}
+
+	// 处理章节id关联品种id列表
+	{
+		minClassifyId := resourceInfo.ClassifyIdThird
+		if minClassifyId <= 0 {
+			minClassifyId = resourceInfo.ClassifyIdSecond
+		}
+		if minClassifyId <= 0 {
+			minClassifyId = resourceInfo.ClassifyIdFirst
+		}
+		if minClassifyId <= 0 {
+			br.Msg = "分类异常"
+			br.ErrMsg = "分类异常"
+			return
+		}
+
+		// 获取分类关联的品种id
+		classifyPermissionList, tmpErr := knowledge.GetPermission(minClassifyId)
+		if tmpErr != nil {
+			br.Msg = "获取分类信息失败"
+			br.ErrMsg = "获取失败,Err:" + tmpErr.Error()
+			return
+		}
+
+		if len(classifyPermissionList) > 0 {
+			permissionIdList := make([]int, 0)
+			for _, v := range classifyPermissionList {
+				permissionIdList = append(permissionIdList, v.ChartPermissionId)
+			}
+			adminList, tmpErr := knowledge.GetChartPermissionByIdList(permissionIdList)
+			if tmpErr != nil {
+				br.Msg = "获取章节id授权用户列表失败"
+				br.ErrMsg = "获取章节id授权用户列表失败, Err: " + tmpErr.Error()
+				return
+			}
+			for _, v := range adminList {
+				permissionList = append(permissionList, knowledge.KnowledgeResourceDetailViewPermission{
+					PermissionId:   v.ChartPermissionId,
+					PermissionName: v.PermissionName,
+				})
+			}
+		}
+
+	}
+
+	resp := &knowledge.KnowledgeResourceDetailView{
+		ReportDetail:   resourceInfo,
+		ChapterList:    chapterList,
+		GrandAdminList: grandAdminList,
+		PermissionList: permissionList,
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp*/
+}
+
+// Delete
+// @Title 删除事件接口
+// @Description 删除事件
+// @Param	request	body knowledge.DeleteReq true "type json string"
+// @Success 200 Ret=200 删除成功
+// @router /resource/delete [post]
+func (this *KnowledgeResourceController) Delete() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var req knowledge.DeleteReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.KnowledgeResourceId <= 0 {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误,事件id不可为空"
+		return
+	}
+	resourceObj := new(knowledge.KnowledgeResource)
+	if err = resourceObj.Delete(req.KnowledgeResourceId); err != nil {
+		br.Msg = "删除失败"
+		br.ErrMsg = "删除事件失败, Err: " + err.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "删除成功"
+}

+ 20 - 1
models/knowledge/knowledge_classify.go

@@ -9,7 +9,7 @@ import (
 )
 
 type KnowledgeClassify struct {
-	ClassifyId   int       `gorm:"primaryKey;autoIncrement;column:classify_id"`
+	ClassifyId   int       `gorm:"primaryKey;column:classify_id"`
 	ClassifyName string    `gorm:"column:classify_name;default:'';type:varchar(125);not null"` // 注意:varchar的默认长度可能需要根据实际情况调整
 	Sort         int       `gorm:"column:sort;default:0;type:tinyint"`
 	ParentId     int       `gorm:"column:parent_id;default:0;type:int"`
@@ -463,3 +463,22 @@ func (k *KnowledgeClassify) GetClassifyListByIdList(classifyIdList []int) (items
 	err = global.DmSQL["rddp"].Raw(sql, classifyIdList).Find(&items).Error
 	return
 }
+
+type KnowledgeFullClassify struct {
+	KnowledgeClassify
+	ParentName string `gorm:"column:parent_name"`
+	RootName   string `gorm:"column:root_name"`
+}
+
+func GetFullClassifyListByIdList(classifyIdList []int) (items []*KnowledgeFullClassify, err error) {
+	num := len(classifyIdList)
+	if num <= 0 {
+		return
+	}
+	sql := `SELECT kc1.*, kc2.classify_name AS parent_name, kc3.classify_name AS root_name  
+FROM knowledge_classify kc1  
+LEFT JOIN knowledge_classify kc2 ON kc1.parent_id = kc2.classify_id
+LEFT JOIN knowledge_classify kc3 ON kc2.parent_id = kc3.classify_id WHERE kc1.classify_id IN (?) `
+	err = global.DmSQL["rddp"].Raw(sql, classifyIdList).Find(&items).Error
+	return
+}

+ 361 - 5
models/knowledge/knowledge_resource.go

@@ -1,15 +1,34 @@
 package knowledge
 
-import "time"
+import (
+	"eta_gn/eta_api/global"
+	"eta_gn/eta_api/utils"
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"gorm.io/gorm"
+	"strings"
+	"time"
+)
+
+const (
+	// 事件类型-事件库
+	KnowledgeResourceTypeEvent = 0
+	// 事件-政策库
+	KnowledgeResourceTypePolicy = 1
+	// 事件-观点库
+	KnowledgeResourceTypeOpinion = 2
+	// 事件类型-知识库
+	KnowledgeResourceTypeKnow = 3
+)
 
 type KnowledgeResource struct {
 	KnowledgeResourceId int       `gorm:"column:knowledge_resource_id;;primaryKey;autoIncrement"`
 	ResourceType        int       `gorm:"column:resource_type;"`
 	ClassifyId          int       `gorm:"column:classify_id"`
-	title               string    `gorm:"column:title;"`
+	Title               string    `gorm:"column:title;"`
 	CreateTime          string    `gorm:"column:create_time" description:"创建时间"`
 	ModifyTime          time.Time `gorm:"column:modify_time;autoUpdateTime" description:"修改时间"`
-	State               int       `gorm:"column:state" description:"1:未发布;2:已发布;3-待提交;4-待审批;5-已驳回;6-已通过"`
+	State               int       `gorm:"column:state" description:"0:未发布;1:已发布;"`
 	Content             string    `gorm:"column:content"`
 	ResourceCode        string    `gorm:"column:resource_code"`
 	AdminId             int       `gorm:"column:admin_id" description:"创建者账号"`
@@ -20,11 +39,348 @@ type KnowledgeResource struct {
 	EndTime             string    `gorm:"column:end_time"`
 }
 
-func (k *KnowledgeResource) TableName() string {
+func (m *KnowledgeResource) TableName() string {
 	return "knowledge_resource"
 }
 
 // 查询列表
-func (k *KnowledgeResource) QueryList(condition string, pars []interface{}) (items []*KnowledgeResource, err error) {
+func (m *KnowledgeResource) QueryList(condition string, pars []interface{}) (items []*KnowledgeResource, err error) {
+	return
+}
+
+type KnowledgeResourceList struct {
+	KnowledgeResourceId int       `gorm:"column:knowledge_resource_id;;primaryKey;autoIncrement"`
+	ResourceType        int       `gorm:"column:resource_type;"`
+	ClassifyId          int       `gorm:"column:classify_id"`
+	Title               string    `gorm:"column:title;"`
+	CreateTime          string    `gorm:"column:create_time" description:"创建时间"`
+	ModifyTime          time.Time `gorm:"column:modify_time;autoUpdateTime" description:"修改时间"`
+	State               int       `gorm:"column:state" description:"1:未发布;2:已发布;3-待提交;4-待审批;5-已驳回;6-已通过"`
+	ResourceCode        string    `gorm:"column:resource_code"`
+	AdminId             int       `gorm:"column:admin_id" description:"创建者账号"`
+	AdminRealName       string    `gorm:"column:admin_real_name" description:"创建者姓名"`
+	SourceFrom          string    `gorm:"column:source_from"`
+	TagId               int       `gorm:"column:tag_id;default:0;NOT NULL"`
+	StartTime           string    `gorm:"column:start_time"`
+	EndTime             string    `gorm:"column:end_time"`
+	ClassifyFullName    string
+	TagName             string
+	// todo 是否需要记录最后更新人
+	/*DetailImgUrl        string    `gorm:"column:detail_img_url" description:"事件详情长图地址"`
+	DetailPdfUrl        string    `gorm:"column:detail_pdf_url" description:"事件详情PDF地址"`
+	LastModifyAdminId   int       `gorm:"column:last_modify_admin_id" description:"最后更新人ID"`
+	LastModifyAdminName string    `gorm:"column:last_modify_admin_name" description:"最后更新人姓名"`
+	ContentModifyTime   time.Time `gorm:"column:content_modify_time" description:"内容更新时间"`*/
+}
+
+type KnowledgeResourceListResp struct {
+	List   []*KnowledgeResourceList
+	Paging *paging.PagingItem `description:"分页数据"`
+}
+
+func GetKnowledgeResourceList(condition string, pars []interface{}, startSize, pageSize int) (items []*KnowledgeResourceList, err error) {
+
+	sql := `SELECT * FROM knowledge_resource WHERE 1=1  `
+	if condition != "" {
+		sql += condition
+	}
+	// 排序:1:未发布;2:已发布;3-待提交;4-待审批;5-已驳回;6-已通过
+	sql += `ORDER BY modify_time DESC LIMIT ?,?`
+	//_, err = o.Raw(sql, pars...).QueryRows(&items)
+	pars = append(pars, startSize)
+	pars = append(pars, pageSize)
+	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
+	return
+}
+
+func GetKnowledgeResourceListCount(condition string, pars []interface{}) (count int, err error) {
+	//oRddp := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT COUNT(1) AS count  FROM knowledge_resource WHERE 1=1 `
+	if condition != "" {
+		sql += condition
+	}
+	//err = oRddp.Raw(sql, pars).QueryRow(&count)
+	err = global.DmSQL["rddp"].Raw(sql, pars...).Scan(&count).Error
+	return
+}
+
+func (m *KnowledgeResource) Delete(knowledgeResourceIds int) (err error) {
+
+	sql := ` DELETE FROM knowledge_resource WHERE knowledge_resource_id =? `
+	//_, err = o.Raw(sql, knowledgeResourceIds).Exec()
+	err = global.DmSQL["rddp"].Exec(sql, knowledgeResourceIds).Error
 	return
 }
+
+func (m *KnowledgeResource) GetById(knowledgeResourceId int) (item *KnowledgeResource, err error) {
+
+	sql := `SELECT * FROM knowledge_resource WHERE knowledge_resource_id =?`
+	//err = o.Raw(sql, knowledgeResourceId).QueryRow(&item)
+	err = global.DmSQL["rddp"].Raw(sql, knowledgeResourceId).First(&item).Error
+	return
+}
+
+// GetSimpleKnowledgeResourceByIds 根据事件ID查询事件基本信息
+func GetSimpleKnowledgeResourceByIds(knowledgeResourceIds []int) (list []*KnowledgeResource, err error) {
+	if len(knowledgeResourceIds) == 0 {
+		return
+	}
+
+	sql := `SELECT id, title, resource_code FROM knowledge_resource WHERE knowledge_resource_id IN (` + utils.GetOrmInReplace(len(knowledgeResourceIds)) + `)`
+	//_, err = o.Raw(sql, knowledgeResourceIds).QueryRows(&list)
+	err = global.DmSQL["rddp"].Raw(sql, knowledgeResourceIds).Find(&list).Error
+	return
+}
+
+type DeleteReq struct {
+	KnowledgeResourceId int `description:"事件id"`
+}
+
+type AddReq struct {
+	ResourceType int    `gorm:"column:resource_type;"`
+	ClassifyId   int    `gorm:"column:classify_id"`
+	Title        string `gorm:"column:title;"`
+	State        int    `gorm:"column:state" description:"1:未发布;2:已发布;3-待提交;4-待审批;5-已驳回;6-已通过"`
+	Content      string `gorm:"column:content"`
+	SourceFrom   string `gorm:"column:source_from"`
+	TagId        int    `gorm:"column:tag_id;default:0;NOT NULL"`
+	StartTime    string `gorm:"column:start_time"`
+	EndTime      string `gorm:"column:end_time"`
+}
+
+type AddResp struct {
+	KnowledgeResourceId int    `description:"事件id"`
+	ResourceCode        string `description:"事件code"`
+}
+
+func (m *KnowledgeResource) Add(item *KnowledgeResource) (err error) {
+	err = global.DmSQL["rddp"].Create(item).Error
+	return
+}
+
+type EditReq struct {
+	KnowledgeResourceId int64  `description:"事件id"`
+	ResourceType        int    `gorm:"column:resource_type;"`
+	ClassifyId          int    `gorm:"column:classify_id"`
+	Title               string `gorm:"column:title;"`
+	State               int    `gorm:"column:state" description:"1:未发布;2:已发布;3-待提交;4-待审批;5-已驳回;6-已通过"`
+	Content             string `gorm:"column:content"`
+	SourceFrom          string `gorm:"column:source_from"`
+	TagId               int    `gorm:"column:tag_id;default:0;NOT NULL"`
+	StartTime           string `gorm:"column:start_time"`
+	EndTime             string `gorm:"column:end_time"`
+}
+
+type EditResp struct {
+	KnowledgeResourceId int64  `description:"事件id"`
+	ResourceCode        string `description:"事件code"`
+}
+
+type ReportDetailReq struct {
+	KnowledgeResourceId int `description:"事件id"`
+}
+
+type ClassifyIdDetailReq struct {
+	ClassifyIdFirst  int `description:"事件一级分类id"`
+	ClassifyIdSecond int `description:"事件二级分类id"`
+}
+
+func GetReportDetailByClassifyId(classifyIdFirst, classifyIdSecond int) (item *KnowledgeResource, err error) {
+
+	sql := ` SELECT * FROM knowledge_resource WHERE 1=1 `
+	if classifyIdSecond > 0 {
+		sql = sql + ` AND classify_id_second=?   ORDER BY stage DESC LIMIT 1`
+		//err = o.Raw(sql, classifyIdSecond).QueryRow(&item)
+		err = global.DmSQL["rddp"].Raw(sql, classifyIdSecond).First(&item).Error
+	} else {
+		sql = sql + ` AND classify_id_first=?   ORDER BY stage DESC LIMIT 1`
+		//err = o.Raw(sql, classifyIdFirst).QueryRow(&item)
+		err = global.DmSQL["rddp"].Raw(sql, classifyIdFirst).First(&item).Error
+	}
+	return
+}
+
+type SaveReportContent struct {
+	Content             string `description:"内容"`
+	KnowledgeResourceId int    `description:"事件id"`
+	NoChange            int    `description:"内容是否未改变:1:内容未改变"`
+
+	// 以下是智能研报相关
+	ContentStruct  string `description:"内容组件"`
+	HeadImg        string `description:"事件头图地址"`
+	EndImg         string `description:"事件尾图地址"`
+	CanvasColor    string `description:"画布颜色"`
+	NeedSplice     int    `description:"是否拼接版头版位的标记,主要是为了兼容历史事件。0-不需要 1-需要"`
+	HeadResourceId int    `description:"版头资源ID"`
+	EndResourceId  int    `description:"版尾资源ID"`
+}
+
+func AddReportSaveLog(knowledgeResourceId, adminId int, content, contentSub, contentStruct, canvasColor, adminName string, headResourceId, endResourceId int) (err error) {
+
+	sql := ` INSERT INTO  knowledge_resource_save_log(knowledge_resource_id, content,content_sub,content_struct,canvas_color,head_resource_id,end_resource_id,admin_id,admin_name) VALUES (?,?,?,?,?,?,?,?,?) `
+	//_, err = o.Raw(sql, knowledgeResourceId, content, contentSub, contentStruct, canvasColor, headResourceId, endResourceId, adminId, adminName).Exec()
+	err = global.DmSQL["rddp"].Exec(sql, knowledgeResourceId, content, contentSub, contentStruct, canvasColor, headResourceId, endResourceId, adminId, adminName).Error
+	return
+}
+
+type SaveReportContentResp struct {
+	KnowledgeResourceId int `description:"事件id"`
+}
+
+func ModifyResourceCode(knowledgeResourceId int64, resourceCode string) (err error) {
+	sql := `UPDATE knowledge_resource SET resource_code=? WHERE knowledge_resource_id =? `
+	err = global.DmSQL["rddp"].Exec(sql, resourceCode, knowledgeResourceId).Error
+	return
+}
+
+// SaveDayWeekReportReq 新增晨报周报请求体
+type SaveDayWeekReportReq struct {
+	KnowledgeResourceId int    `description:"事件ID"`
+	Title               string `description:"标题"`
+	ReportType          string `description:"一级分类ID"`
+	Author              string `description:"作者"`
+	CreateTime          string `description:"创建时间"`
+}
+
+// UpdateReport 更新事件
+func (m *KnowledgeResource) Update(cols []string) (err error) {
+
+	//_, err = o.Update(reportInfo, cols...)
+	err = global.DmSQL["rddp"].Select(cols).Updates(m).Error
+	return
+}
+
+type ElasticReportDetail struct {
+	gorm.Model
+	KnowledgeResourceId int `gorm:"column:knowledge_resource_id;index" description:"事件ID"`
+
+	Title        string `gorm:"column:title" description:"标题"`
+	Abstract     string `gorm:"column:abstract" description:"摘要"`
+	BodyContent  string `gorm:"column:body_content" description:"内容"`
+	ClassifyId   int    `gorm:"column:classify_id" description:"最小单元的分类ID"`
+	ClassifyName string `gorm:"column:classify_name" description:"最小单元的分类名称"`
+}
+
+// UpdateReportSecondClassifyNameByClassifyId 更新事件分类名称字段
+func UpdateReportSecondClassifyNameByClassifyId(classifyId int, classifyName string) (err error) {
+
+	sql := " UPDATE knowledge_resource SET classify_name_second = ? WHERE classify_id_second = ? "
+	//_, err = o.Raw(sql, classifyName, classifyId).Exec()
+	err = global.DmSQL["rddp"].Exec(sql, classifyName, classifyId).Error
+	return
+}
+
+// UpdateReportFirstClassifyNameByClassifyId 更新事件分类一级名称字段
+func UpdateReportFirstClassifyNameByClassifyId(classifyId int, classifyName string) (err error) {
+
+	sql := " UPDATE knowledge_resource SET classify_name_first = ? WHERE classify_id_first = ? "
+	//_, err = o.Raw(sql, classifyName, classifyId).Exec()
+	err = global.DmSQL["rddp"].Exec(sql, classifyName, classifyId).Error
+	return
+}
+
+// UpdateReportThirdClassifyNameByClassifyId 更新事件的三级分类名称字段
+func UpdateReportThirdClassifyNameByClassifyId(classifyId int, classifyName string) (err error) {
+
+	sql := " UPDATE knowledge_resource SET classify_name_third = ? WHERE classify_id_third = ? "
+	//_, err = o.Raw(sql, classifyName, classifyId).Exec()
+	err = global.DmSQL["rddp"].Exec(sql, classifyName, classifyId).Error
+	return
+}
+
+// MarkEditReport 标记编辑英文研报的请求数据
+type MarkEditReport struct {
+	KnowledgeResourceId int `description:"研报id"`
+	ReportChapterId     int `description:"研报章节id"`
+	Status              int `description:"标记状态,1:编辑中,2:查询状态,3:编辑完成"`
+}
+
+type MarkReportResp struct {
+	Status int    `description:"状态:0:无人编辑, 1:当前有人在编辑"`
+	Msg    string `description:"提示信息"`
+	Editor string `description:"编辑者姓名"`
+}
+
+type MarkReportItem struct {
+	AdminId                 int    `description:"编辑者ID"`
+	Editor                  string `description:"编辑者姓名"`
+	ReportClassifyNameFirst string
+}
+
+// GetReportByCondition 获取事件
+func GetReportByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, isPage bool, startSize, pageSize int) (items []*KnowledgeResource, err error) {
+
+	fields := `*`
+	if len(fieldArr) > 0 {
+		fields = strings.Join(fieldArr, ",")
+	}
+	sql := `SELECT ` + fields + ` FROM knowledge_resource WHERE 1=1 `
+	sql += condition
+	order := ` ORDER BY modify_time DESC`
+	if orderRule != `` {
+		order = orderRule
+	}
+	sql += order
+	if isPage {
+		sql += ` LIMIT ?,?`
+		//_, err = o.Raw(sql, pars...).QueryRows(&items)
+		err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
+	} else {
+		//_, err = o.Raw(sql, pars).QueryRows(&items)
+		err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
+	}
+	return
+}
+
+// SetPrePublishReportById 设置定时发布
+func SetPrePublishReportById(knowledgeResourceId int, prePublishTime string, preMsgSend int) (err error) {
+
+	sql := `UPDATE knowledge_resource SET pre_publish_time=?, pre_msg_send=? WHERE knowledge_resource_id = ? and state = 1 `
+	//_, err = o.Raw(sql, prePublishTime, preMsgSend, knowledgeResourceId).Exec()
+	err = global.DmSQL["rddp"].Exec(sql, prePublishTime, preMsgSend, knowledgeResourceId).Error
+	return
+}
+
+// UpdateReportsStateBySecondIds 批量更新二级分类事件状态
+func UpdateReportsStateBySecondIds(oldState, newState int, secondIds []int) (err error) {
+	if len(secondIds) <= 0 {
+		return
+	}
+
+	// (有审批流的)未发布->待提交
+	sql := fmt.Sprintf(`UPDATE knowledge_resource SET state = ?, pre_publish_time = NULL WHERE state = ? AND classify_id_second IN (%s)`, utils.GetOrmInReplace(len(secondIds)))
+	//_, err = o.Raw(sql, newState, oldState, secondIds).Exec()
+	err = global.DmSQL["rddp"].Exec(sql, newState, oldState, secondIds).Error
+	if err != nil {
+		return
+	}
+	// (无审批流的)待提交->未发布
+	sql = fmt.Sprintf(`UPDATE knowledge_resource SET state = ?, pre_publish_time = NULL WHERE state = ? AND classify_id_second NOT IN (%s)`, utils.GetOrmInReplace(len(secondIds)))
+	//_, err = o.Raw(sql, oldState, newState, secondIds).Exec()
+	err = global.DmSQL["rddp"].Exec(sql, oldState, newState, secondIds).Error
+	return
+}
+
+func (m *KnowledgeResource) AddMulti(items []*KnowledgeResource) (err error) {
+	err = global.DmSQL["rddp"].CreateInBatches(items, utils.MultiAddNum).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, ","))
+	}
+	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
+	return
+}
+
+type KnowledgeResourceDetailView struct {
+	*KnowledgeResource
+}

+ 0 - 375
models/report.go

@@ -283,37 +283,6 @@ func GetReportListCount(condition string, pars []interface{}) (count int, err er
 	return
 }
 
-func GetReportList(condition string, pars []interface{}, startSize, pageSize int) (items []*ReportList, err error) {
-	//o := orm.NewOrmUsingDB("rddp")
-
-	sql := `SELECT *,
-        (SELECT COUNT(1) FROM report_view_record AS rvr WHERE rvr.report_id=report.id) AS pv,
-        (SELECT COUNT(DISTINCT user_id) FROM report_view_record AS rvr WHERE rvr.report_id=report.id) AS uv
-        FROM report WHERE 1=1  `
-	if condition != "" {
-		sql += condition
-	}
-	// 排序:1:未发布;2:已发布;3-待提交;4-待审批;5-已驳回;6-已通过
-	sql += `ORDER BY FIELD(state,3,1,4,5,6,2), modify_time DESC LIMIT ?,?`
-	//_, err = o.Raw(sql, pars...).QueryRows(&items)
-	pars = append(pars, startSize)
-	pars = append(pars, pageSize)
-	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
-	return
-}
-
-// PublishReport 发布报告
-func PublishReport(reportIds []int) (err error) {
-	if len(reportIds) == 0 {
-		return
-	}
-	//o := orm.NewOrmUsingDB("rddp")
-	sql := `UPDATE report SET state=2,publish_time=now(),modify_time=NOW() WHERE id IN (` + utils.GetOrmInReplace(len(reportIds)) + `)`
-	//_, err = o.Raw(sql).Exec()
-	err = global.DmSQL["rddp"].Exec(sql, reportIds).Error
-	return
-}
-
 // PublishCancelReport 取消发布报告
 func PublishCancelReport(reportId, state int, publishTimeNullFlag bool, lastModifyAdminId int, lastModifyAdminName string) (err error) {
 	//o := orm.NewOrmUsingDB("rddp")
@@ -400,14 +369,6 @@ func GetReportById(reportId int) (item *ReportDetail, err error) {
 	return
 }
 
-func GetReportByIds(reportIds string) (list []*ReportDetail, err error) {
-	//o := orm.NewOrmUsingDB("rddp")
-	sql := `SELECT * FROM report WHERE id in ` + reportIds
-	//_, err = o.Raw(sql).QueryRows(&list)
-	err = global.DmSQL["rddp"].Raw(sql).Find(&list).Error
-	return
-}
-
 // GetSimpleReportByIds 根据报告ID查询报告基本信息
 func GetSimpleReportByIds(reportIds []int) (list []*Report, err error) {
 	if len(reportIds) == 0 {
@@ -457,45 +418,6 @@ func GetReportStage(classifyIdFirst, classifyIdSecond, classifyIdThird int) (cou
 	return
 }
 
-// GetReportStageEdit
-// @Description: 获取报告的最大期数(每一年的最大期数)
-// @author: Roc
-// @datetime 2024-06-04 13:50:34
-// @param classifyIdFirst int
-// @param classifyIdSecond int
-// @param classifyIdThird int
-// @param reportId int
-// @return count int
-// @return err error
-func GetReportStageEdit(classifyIdFirst, classifyIdSecond, classifyIdThird, reportId int) (count int, err error) {
-	classifyId := classifyIdThird
-	if classifyId <= 0 {
-		classifyId = classifyIdSecond
-	}
-	if classifyId <= 0 {
-		classifyId = classifyIdFirst
-	}
-	if classifyId <= 0 {
-		err = errors.New("错误的分类id")
-		return
-	}
-	yearStart := time.Date(time.Now().Local().Year(), 1, 1, 0, 0, 0, 0, time.Local)
-
-	sql := `SELECT MAX(stage) AS max_stage FROM report WHERE create_time > ? AND id<>?  `
-	if classifyIdThird > 0 {
-		sql += " AND classify_id_third = ? "
-	} else if classifyIdSecond > 0 {
-		sql += " AND classify_id_second = ? "
-	} else {
-		sql = " AND classify_id_first = ? "
-	}
-
-	//o := orm.NewOrmUsingDB("rddp")
-	//o.Raw(sql, yearStart, reportId, classifyId).QueryRow(&count)
-	err = global.DmSQL["rddp"].Raw(sql, yearStart, reportId, classifyId).Scan(&count).Error
-	return
-}
-
 type PublishReq struct {
 	ReportIds string `description:"报告id,多个用英文逗号隔开"`
 	ReportUrl string `description:"报告Url"`
@@ -746,14 +668,6 @@ type SaveReportContent struct {
 	EndResourceId  int    `description:"版尾资源ID"`
 }
 
-func EditReportContent(reportId int, content, contentSub string) (err error) {
-	//o := orm.NewOrmUsingDB("rddp")
-	sql := ` UPDATE report SET content=?,content_sub=?,modify_time=NOW() WHERE id=? `
-	//_, err = o.Raw(sql, content, contentSub, reportId).Exec()
-	err = global.DmSQL["rddp"].Exec(sql, content, contentSub, reportId).Error
-	return
-}
-
 func AddReportSaveLog(reportId, adminId int, content, contentSub, contentStruct, canvasColor, adminName string, headResourceId, endResourceId int) (err error) {
 	//o := orm.NewOrmUsingDB("rddp")
 	sql := ` INSERT INTO report_save_log(report_id, content,content_sub,content_struct,canvas_color,head_resource_id,end_resource_id,admin_id,admin_name) VALUES (?,?,?,?,?,?,?,?,?) `
@@ -828,15 +742,6 @@ type SaveDayWeekReportReq struct {
 	CreateTime string `description:"创建时间"`
 }
 
-// GetDayWeekReportStage 获取晨报周报期数
-func GetDayWeekReportStage(classifyIdFirst int, yearStart time.Time) (count int, err error) {
-	//o := orm.NewOrmUsingDB("rddp")
-	sql := " SELECT MAX(stage) AS max_stage FROM report WHERE classify_id_first = ? AND create_time > ? "
-	//o.Raw(sql, classifyIdFirst, yearStart).QueryRow(&count)
-	err = global.DmSQL["rddp"].Raw(sql, classifyIdFirst, yearStart).Scan(&count).Error
-	return
-}
-
 // GetReportByReportId 主键获取报告
 func GetReportByReportId(reportId int) (item *Report, err error) {
 	//o := orm.NewOrmUsingDB("rddp")
@@ -846,15 +751,6 @@ func GetReportByReportId(reportId int) (item *Report, err error) {
 	return
 }
 
-// GetReportByOldReportId 根据老报告id主键获取报告
-func GetReportByOldReportId(reportId int) (item *Report, err error) {
-	//o := orm.NewOrmUsingDB("rddp")
-	sql := `SELECT * FROM report WHERE old_report_id = ?`
-	//err = o.Raw(sql, reportId).QueryRow(&item)
-	err = global.DmSQL["rddp"].Raw(sql, reportId).First(&item).Error
-	return
-}
-
 // DeleteDayWeekReportAndChapter 删除晨周报及章节
 func DeleteDayWeekReportAndChapter(reportId int) (err error) {
 	//o := orm.NewOrmUsingDB("rddp")
@@ -916,27 +812,6 @@ type ReportDetailViewPermission struct {
 	PermissionName string
 }
 
-func GetUnPublishDayReport(startTime time.Time, endTime time.Time) (item *Report, err error) {
-	//o := orm.NewOrmUsingDB("rddp")
-	sql := ` SELECT
-				*
-			FROM
-				report AS a
-			WHERE
-				a.has_chapter = 1
-			AND a.chapter_type = "day"
-			AND a.state = 1
-			AND (
-				a.create_time BETWEEN ? AND ?
-			)
-			ORDER BY
-				a.create_time DESC
-			LIMIT 1 `
-	//err = o.Raw(sql, startTime, endTime).QueryRow(&item)
-	err = global.DmSQL["rddp"].Raw(sql, startTime, endTime).First(&item).Error
-	return
-}
-
 type ElasticReportDetail struct {
 	gorm.Model
 	ReportId           int    `gorm:"column:report_id;index" description:"报告ID"`
@@ -957,24 +832,6 @@ type ElasticReportDetail struct {
 	StageStr           string `gorm:"column:stage_str" description:"报告期数"`
 }
 
-// GetLastPublishedDayWeekReport 获取上一篇已发布的晨周报
-func GetLastPublishDayWeekReport(chapterType string) (item *Report, err error) {
-	//o := orm.NewOrmUsingDB("rddp")
-	sql := ` SELECT * FROM report WHERE has_chapter = 1 AND chapter_type = ? AND state = 2 ORDER BY publish_time DESC LIMIT 1 `
-	//err = o.Raw(sql, chapterType).QueryRow(&item)
-	err = global.DmSQL["rddp"].Raw(sql, chapterType).First(&item).Error
-	return
-}
-
-// GetNewReportExist
-func GetNewReportExist(oldReportId int) (item *Report, err error) {
-	//o := orm.NewOrmUsingDB("rddp")
-	sql := ` SELECT id FROM report WHERE old_report_id = ? LIMIT 1 `
-	//err = o.Raw(sql, oldReportId).QueryRow(&item)
-	err = global.DmSQL["rddp"].Raw(sql, oldReportId).First(&item).Error
-	return
-}
-
 // PublishReportAndChapter 发布报告及章节
 func PublishReportAndChapter(reportInfo *Report, isPublishReport bool, cols []string) (err error) {
 	//o := orm.NewOrmUsingDB("rddp")
@@ -1014,16 +871,6 @@ func PublishReportAndChapter(reportInfo *Report, isPublishReport bool, cols []st
 	return
 }
 
-func GetSyncEmptyVideoReport() (list []*Report, err error) {
-	//o := orm.NewOrmUsingDB("rddp")
-	sql := ` SELECT id FROM report WHERE old_report_id > 0 AND state = 2 AND chapter_type = "" AND (video_size = "" OR video_play_seconds = "")
-UNION ALL
-SELECT DISTINCT report_id FROM report_chapter WHERE publish_state = 2 AND (video_size = "" OR video_play_seconds = "") `
-	//_, err = o.Raw(sql).QueryRows(&list)
-	err = global.DmSQL["rddp"].Raw(sql).Find(&list).Error
-	return
-}
-
 // PublishReportById 发布报告
 func PublishReportById(reportId int, publishTime time.Time, lastModifyAdminId int, lastModifyAdminName string) (err error) {
 	//o := orm.NewOrmUsingDB("rddp")
@@ -1042,84 +889,6 @@ func ResetReportById(reportId, state int, lastModifyAdminId int, lastModifyAdmin
 	return
 }
 
-// GetCommentReportByReportId 查询有留言的报告列表
-func GetCommentReportByReportId(condition string, pars []interface{}, startSize, pageSize int) (list []*Report, err error) {
-	//o := orm.NewOrmUsingDB("rddp")
-	sql := `SELECT
-	id,
-	create_time,
-	title,
-	classify_name_first,
-	classify_id_first,
-	classify_name_second,
-	classify_id_second,
-	state,
-IF
-	( publish_time, publish_time, create_time ) AS publish_time 
-FROM
-	report 
-WHERE
-	1=1
-  `
-	if condition != "" {
-		sql += condition
-	}
-	sql += ` ORDER BY  publish_time DESC , title ASC LIMIT ?,?`
-	//_, err = o.Raw(sql, pars...).QueryRows(&list)
-	pars = append(pars, startSize)
-	pars = append(pars, pageSize)
-	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&list).Error
-	return
-}
-
-// GetCommentReportByReportIdOrderBy 查询有留言的报告列表(指定排序)
-func GetCommentReportByReportIdOrderBy(condition string, pars []interface{}, startSize, pageSize int, orderBy string) (list []*Report, err error) {
-	//o := orm.NewOrmUsingDB("rddp")
-	sql := `SELECT
-	id,
-	create_time,
-	title,
-	classify_name_first,
-	classify_id_first,
-	classify_name_second,
-	classify_id_second,
-	state,
-IF
-	( publish_time, publish_time, create_time ) AS publish_time 
-FROM
-	report 
-WHERE
-	1=1
-  `
-	if condition != "" {
-		sql += condition
-	}
-	if orderBy == `` {
-		sql += ` ORDER BY  publish_time DESC , title ASC `
-	} else {
-		sql += orderBy
-	}
-	sql += ` LIMIT ?,? `
-	//_, err = o.Raw(sql, pars...).QueryRows(&list)
-	pars = append(pars, startSize)
-	pars = append(pars, pageSize)
-	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&list).Error
-	return
-}
-
-// GetCommentReportTotalByReportId 查询有留言的报告列表总数
-func GetCommentReportTotalByReportId(condition string, pars []interface{}) (total int64, err error) {
-	//o := orm.NewOrmUsingDB("rddp")
-	sql := `SELECT count(*)
-        FROM report WHERE 1=1`
-	if condition != "" {
-		sql += condition
-	}
-	//err = o.Raw(sql, pars).QueryRow(&total)
-	err = global.DmSQL["rddp"].Raw(sql, pars...).Scan(&total).Error
-	return
-}
-
 // 点赞相关的报告列表
 type LikeReportItem struct {
 	gorm.Model
@@ -1135,116 +904,6 @@ type LikeReportItem struct {
 	Title                 string    `gorm:"column:title" description:"标题"`
 }
 
-// GetLikeReportByReportIdReportChapterId 获取有被点赞的报告列表
-func GetLikeReportByReportIdReportChapterId(reportIds string, chapterIds string, orderStr string, startSize, pageSize int) (list []*LikeReportItem, err error) {
-	//o := orm.NewOrmUsingDB("rddp")
-	sql := `( SELECT
-id AS report_id,
-0 AS report_chapter_id,
-classify_id_first,
-classify_id_second,
-classify_name_first,
-classify_name_second,
-0 as report_chapter_type_id,
-"" as report_chapter_type_name,
-publish_time,
-title
-FROM
-	report
-WHERE
-	classify_name_first != "晨报" 
-	AND classify_name_first != "周报"
-	AND id in (` + reportIds + `)
-	)
-UNION
-	
-( SELECT
-report_id,
-report_chapter_id,
-classify_id_first,
-0 as classify_id_second,
-classify_name_first,
-null as classify_name_second,
-type_id as report_chapter_type_id,
-type_name as report_chapter_type_name,
-publish_time,
-title
-FROM
-	report_chapter
-WHERE
-	 report_chapter_id in (` + chapterIds + `)
-	)`
-	if orderStr != "" {
-		sql += ` ORDER BY FIELD(CONCAT(report_id, "-",report_chapter_id),` + orderStr + `)`
-	} else {
-		sql += ` ORDER BY  publish_time DESC, report_id Desc`
-	}
-	sql += ` LIMIT ?,?`
-	//_, err = o.Raw(sql, startSize, pageSize).QueryRows(&list)
-	err = global.DmSQL["rddp"].Raw(sql, startSize, pageSize).Find(&list).Error
-	return
-}
-
-// GetLikeReportTotalByReportIdReportChapterId 获取有被点赞的报告列表总数
-func GetLikeReportTotalByReportIdReportChapterId(reportIds string, chapterIds string) (total int64, err error) {
-	//o := orm.NewOrmUsingDB("rddp")
-	sql := `select count(*) from (( SELECT
-id AS report_id,
-0 AS report_chapter_id,
-classify_id_first,
-classify_id_second,
-classify_name_first,
-classify_name_second,
-0 as report_chapter_type_id,
-publish_time,
-title
-FROM
-	report
-WHERE
-	classify_name_first != "晨报" 
-	AND classify_name_first != "周报"
-	AND id in (` + reportIds + `)
-	)
-UNION
-	
-( SELECT
-report_id,
-report_chapter_id,
-classify_id_first,
-0 as classify_id_second,
-classify_name_first,
-null as classify_name_second,
-type_id as report_chapter_type_id,
-publish_time,
-title
-FROM
-	report_chapter
-WHERE
-report_chapter_id in (` + chapterIds + `)
-	)) r`
-	//err = o.Raw(sql).QueryRow(&total)
-	err = global.DmSQL["rddp"].Raw(sql).Scan(&total).Error
-	return
-}
-
-// GetPageReportList 分页获取报告列表
-func GetPageReportList(condition string, pars []interface{}, startSize, pageSize int) (total int, items []*ReportList, err error) {
-	//o := orm.NewOrmUsingDB("rddp")
-	sql := `SELECT * FROM report WHERE 1=1 `
-	sql += condition
-	sql += ` ORDER BY modify_time DESC`
-	totalSql := `SELECT COUNT(1) total FROM (` + sql + `) z `
-	//err = o.Raw(totalSql, pars).QueryRow(&total)
-	err = global.DmSQL["rddp"].Raw(totalSql, pars...).Scan(&total).Error
-	if err != nil {
-		return
-	}
-	sql += ` LIMIT ?,? `
-	//_, err = o.Raw(sql, pars...).QueryRows(&items)
-	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
-	return
-}
-
 // SunCodeReq 获取太阳码请求体
 type SunCodeReq struct {
 	CodePage  string `json:"CodePage" description:"太阳码page"`
@@ -1319,31 +978,6 @@ func UpdateReportThirdClassifyNameByClassifyId(classifyId int, classifyName stri
 	return
 }
 
-// UpdateReportSecondClassifyFirstNameByClassifyId 更新报告二级分类的一级分类名称和id
-func UpdateReportSecondClassifyFirstNameByClassifyId(classifyId, newClassifyId int, classifyName string) (err error) {
-	//o := orm.NewOrmUsingDB("rddp")
-	sql := " UPDATE report SET classify_name_first = ?, classify_id_first = ? WHERE classify_id_second = ? "
-	//_, err = o.Raw(sql, classifyName, newClassifyId, classifyId).Exec()
-	err = global.DmSQL["rddp"].Exec(sql, classifyName, newClassifyId, classifyId).Error
-	return
-}
-
-// GetEmptyContentSubPPTReport 获取前两章为空的PPT报告
-func GetEmptyContentSubPPTReport() (list []*Report, err error) {
-	sql := `SELECT
-				r.id,
-				r.content,
-				r.content_sub
-			FROM
-				report AS r
-			JOIN ppt_v2 AS p ON r.id = p.report_id
-			WHERE
-				p.report_id > 0 AND r.content_sub = ""`
-	//_, err = orm.NewOrmUsingDB("rddp").Raw(sql).QueryRows(&list)
-	err = global.DmSQL["rddp"].Raw(sql).Find(&list).Error
-	return
-}
-
 // ModifyReportAuthor 更改报告作者
 func ModifyReportAuthor(condition string, pars []interface{}, authorName string) (count int, err error) {
 	//产品权限
@@ -1434,15 +1068,6 @@ func GetReportByCondition(condition string, pars []interface{}, fieldArr []strin
 	return
 }
 
-// ModifyReportMsgIsSendV2 更新报告消息状态
-func ModifyReportMsgIsSendV2(reportId int) (err error) {
-	//o := orm.NewOrmUsingDB("rddp")
-	sql := `UPDATE report SET msg_is_send = 1, ths_msg_is_send = 1, msg_send_time = NOW() WHERE id = ? LIMIT 1`
-	//_, err = o.Raw(sql, reportId).Exec()
-	err = global.DmSQL["rddp"].Exec(sql, reportId).Error
-	return
-}
-
 // SetPrePublishReportById 设置定时发布
 func SetPrePublishReportById(reportId int, prePublishTime string, preMsgSend int) (err error) {
 	//o := orm.NewOrmUsingDB("rddp")

+ 63 - 0
routers/commentsRouter.go

@@ -8521,6 +8521,69 @@ 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: "Add",
+            Router: `/resource/add`,
+            AllowHTTPMethods: []string{"post"},
+            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",
+            Router: `/resource/delete`,
+            AllowHTTPMethods: []string{"post"},
+            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: "Detail",
+            Router: `/resource/detail`,
+            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: "BaseDetail",
+            Router: `/resource/detail/base`,
+            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: "Edit",
+            Router: `/resource/edit`,
+            AllowHTTPMethods: []string{"post"},
+            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: "List",
+            Router: `/resource/list`,
+            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: "SaveReportContent",
+            Router: `/resource/saveContent`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta_gn/eta_api/controllers:MeetingProbabilitiesController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers:MeetingProbabilitiesController"],
         beego.ControllerComments{
             Method: "Detail",

+ 1 - 0
routers/router.go

@@ -390,6 +390,7 @@ func init() {
 		web.NSNamespace("/knowledge",
 			web.NSInclude(
 				&controllers.KnowledgeClassifyController{},
+				&controllers.KnowledgeResourceController{},
 			),
 		),
 	)

+ 2 - 0
services/knowledge/classify.go

@@ -268,6 +268,8 @@ func AddKnowledgeClassify(classifyName string, parentId, resourceType int) (err
 	if err != nil {
 		return
 	}
+	fmt.Println("classify.ClassifyId:")
+	fmt.Println(classify.ClassifyId)
 	// 如果父级分类不为空的话,那么就标记有子级分类,同时
 	if parentClassifyItem != nil {
 		parentClassifyItem.HasChild = 1

+ 152 - 0
services/knowledge/resource.go

@@ -0,0 +1,152 @@
+package knowledge
+
+import (
+	"eta_gn/eta_api/models/knowledge"
+	"eta_gn/eta_api/models/system"
+	"eta_gn/eta_api/services"
+	"eta_gn/eta_api/utils"
+	"fmt"
+	"html"
+	"strconv"
+	"time"
+)
+
+func AddResource(req *knowledge.AddReq, sysUser *system.Admin) (item *knowledge.KnowledgeResource, err error, errMsg string) {
+	if req.Content != "" {
+		e := utils.ContentXssCheck(req.Content)
+		if e != nil {
+			errMsg = "存在非法标签"
+			err = fmt.Errorf("存在非法标签, Err: " + e.Error())
+			return
+		}
+		content, e := services.FilterReportContentBr(req.Content)
+		if e != nil {
+			errMsg = "内容去除前后空格失败"
+			err = fmt.Errorf("内容去除前后空格失败, Err: " + e.Error())
+			return
+		}
+		req.Content = content
+
+		/*contentSub, err = services.GetReportContentSub(req.Content)
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("ContentSub 失败,Err:"+err.Error(), 3)
+			//utils.SendEmail(utils.APPNAME+"失败提醒", "解析 ContentSub 失败,Err:"+err.Error(), utils.EmailSendToUsers)
+			return
+		}*/
+	}
+
+	classifyObj := new(knowledge.KnowledgeClassify)
+	classifyItem, err := classifyObj.GetClassifyById(req.ClassifyId)
+	if err != nil {
+		if utils.IsErrNoRow(err) {
+			err = fmt.Errorf("分类不存在,Err:" + err.Error())
+			errMsg = "分类不存在"
+			return
+		}
+		errMsg = "获取分类失败"
+		err = fmt.Errorf("获取分类失败,Err:" + err.Error())
+		return
+	}
+	if req.ClassifyId != classifyItem.ClassifyId { // 如果传进来的分类id和数据库中查到的分类id不一致,说明传进来的分类id是错误的
+		errMsg = "错误分类"
+		err = fmt.Errorf("错误分类")
+		return
+	}
+
+	// todo 校验标签
+
+	item = new(knowledge.KnowledgeResource)
+	item.ClassifyId = req.ClassifyId
+	item.TagId = req.TagId
+	item.SourceFrom = req.SourceFrom
+	item.ResourceType = req.ResourceType
+	item.Title = req.Title
+	item.State = 1
+	item.Content = html.EscapeString(req.Content)
+	timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
+	item.ResourceCode = utils.MD5(utils.CHART_PREFIX + "_" + timestamp)
+	//todo 内容前5行
+	//item.ContentSub = html.EscapeString(contentSub)
+	item.StartTime = req.StartTime
+	item.EndTime = req.EndTime
+	item.ModifyTime = time.Now()
+	item.AdminId = sysUser.AdminId
+	item.AdminRealName = sysUser.RealName
+	//item.LastModifyAdminId = sysUser.AdminId
+	//item.LastModifyAdminName = sysUser.RealName
+	item.ModifyTime = time.Now()
+	item.CreateTime = time.Now().Format(utils.FormatDateTime)
+
+	err = item.Add(item)
+	if err != nil {
+		errMsg = "保存失败"
+		err = fmt.Errorf("保存失败,Err:" + err.Error())
+		return
+	}
+	//todo 是否需要保存到es中
+	return
+}
+func EditResource(resourceInfo *knowledge.KnowledgeResource, req knowledge.EditReq, sysUser *system.Admin) (err error, errMsg string) {
+	errMsg = `保存失败`
+
+	if req.Content != "" {
+		e := utils.ContentXssCheck(req.Content)
+		if e != nil {
+			errMsg = "存在非法标签"
+			err = fmt.Errorf("存在非法标签, Err: " + e.Error())
+			return
+		}
+		content, e := services.FilterReportContentBr(req.Content)
+		if e != nil {
+			errMsg = "内容去除前后空格失败"
+			err = fmt.Errorf("内容去除前后空格失败, Err: " + e.Error())
+			return
+		}
+		req.Content = content
+
+		/*contentSub, err = services.GetReportContentSub(req.Content)
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("ContentSub 失败,Err:"+err.Error(), 3)
+			//utils.SendEmail(utils.APPNAME+"失败提醒", "解析 ContentSub 失败,Err:"+err.Error(), utils.EmailSendToUsers)
+			return
+		}*/
+	}
+
+	classifyObj := new(knowledge.KnowledgeClassify)
+	classifyItem, err := classifyObj.GetClassifyById(req.ClassifyId)
+	if err != nil {
+		if utils.IsErrNoRow(err) {
+			err = fmt.Errorf("分类不存在,Err:" + err.Error())
+			errMsg = "分类不存在"
+			return
+		}
+		errMsg = "获取分类失败"
+		err = fmt.Errorf("获取分类失败,Err:" + err.Error())
+		return
+	}
+	if req.ClassifyId != classifyItem.ClassifyId { // 如果传进来的分类id和数据库中查到的分类id不一致,说明传进来的分类id是错误的
+		errMsg = "错误分类"
+		err = fmt.Errorf("错误分类")
+		return
+	}
+
+	resourceInfo.ClassifyId = req.ClassifyId
+	resourceInfo.SourceFrom = req.SourceFrom
+	resourceInfo.TagId = req.TagId
+	resourceInfo.Title = req.Title
+	resourceInfo.Content = html.EscapeString(req.Content)
+	resourceInfo.StartTime = req.StartTime
+	resourceInfo.EndTime = req.EndTime
+	//resourceInfo.LastModifyAdminId = sysUser.AdminId
+	//resourceInfo.LastModifyAdminName = sysUser.RealName
+	resourceInfo.ModifyTime = time.Now()
+
+	updateCols := []string{"ClassifyId", "SourceFrom", "TagId", "Title", "Content", "StartTime", "EndTime", "ModifyTime"}
+
+	// 修改报告的基本信息,以及报告的授权用户
+	err = resourceInfo.Update(updateCols)
+	if err != nil {
+		return
+	}
+	return
+}