Browse Source

fix:报告列表接口返回相关数据

Roc 9 months ago
parent
commit
2d286abc36
4 changed files with 456 additions and 2 deletions
  1. 223 0
      controllers/report_chapter.go
  2. 16 2
      models/report.go
  3. 6 0
      models/report_chapter.go
  4. 211 0
      services/report.go

+ 223 - 0
controllers/report_chapter.go

@@ -324,6 +324,200 @@ func (this *ReportController) EditDayWeekChapter() {
 	br.Msg = "保存成功"
 }
 
+// DelChapter
+// @Title 编辑晨周报章节内容
+// @Description 编辑晨周报章节内容
+// @Param	request	body models.EditReportChapterReq true "type json string"
+// @Success 200 Ret=200 保存成功
+// @router /chapter/del [post]
+//func (this *ReportController) DelChapter() {
+//	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 models.DelReportChapterReq
+//	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+//	if err != nil {
+//		br.Msg = "参数解析异常!"
+//		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+//		return
+//	}
+//	reportChapterId := req.ReportChapterId
+//	if reportChapterId <= 0 {
+//		br.Msg = "报告章节ID有误"
+//		return
+//	}
+//	if req.Content == "" {
+//		br.Msg = "请输入内容"
+//		return
+//	}
+//
+//	// 获取章节详情
+//	reportChapterInfo, err := models.GetReportChapterInfoById(reportChapterId)
+//	if err != nil {
+//		br.Msg = "报告章节信息有误"
+//		br.ErrMsg = "报告章节信息有误, Err: " + err.Error()
+//		return
+//	}
+//
+//	// 获取报告详情
+//	reportInfo, err := models.GetReportByReportId(reportChapterInfo.ReportId)
+//	if err != nil {
+//		br.Msg = "报告信息有误"
+//		br.ErrMsg = "报告信息有误, Err: " + err.Error()
+//		return
+//	}
+//
+//	// 操作权限校验
+//	{
+//		// 如果不是创建人,那么就要去查看是否授权
+//		if reportInfo.AdminId != sysUser.AdminId {
+//			// 授权用户权限校验
+//			chapterGrantObj := report.ReportChapterGrant{}
+//			_, tmpErr := chapterGrantObj.GetGrantByIdAndAdmin(reportChapterInfo.ReportChapterId, sysUser.AdminId)
+//			if tmpErr != nil {
+//				if tmpErr.Error() == utils.ErrNoRow() {
+//					br.Msg = "没有权限"
+//					br.ErrMsg = "没有权限"
+//					br.IsSendEmail = false
+//					return
+//				}
+//				br.Msg = "获取章节id授权用户失败"
+//				br.ErrMsg = "获取章节id授权用户失败, Err: " + tmpErr.Error()
+//				return
+//			}
+//		}
+//
+//		// 标记更新中
+//		{
+//			markStatus, err := services.UpdateReportEditMark(reportChapterInfo.ReportId, reportChapterInfo.ReportChapterId, sysUser.AdminId, 1, sysUser.RealName, this.Lang)
+//			if err != nil {
+//				br.Msg = err.Error()
+//				return
+//			}
+//			if markStatus.Status == 1 {
+//				br.Msg = markStatus.Msg
+//				br.IsSendEmail = false
+//				return
+//			}
+//		}
+//	}
+//
+//	if reportInfo.State == 2 {
+//		br.Msg = "该报告已发布,不允许编辑"
+//		br.ErrMsg = "该报告已发布,不允许编辑"
+//		return
+//	}
+//
+//	reqTickerList := req.TickerList
+//	// 更新章节及指标
+//	contentSub := ""
+//	if req.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
+//		}
+//		req.Content = contentClean
+//
+//		contentSub, err = services.GetReportContentSub(req.Content)
+//		if err != nil {
+//			br.Msg = "内容分段解析失败"
+//			br.ErrMsg = "编辑报告章节-解析 ContentSub 失败, Err: " + err.Error()
+//			return
+//		}
+//	}
+//
+//	reportChapterInfo.Title = req.Title
+//	//reportChapterInfo.AddType = req.AddType
+//	reportChapterInfo.Author = req.Author
+//	reportChapterInfo.Content = html.EscapeString(req.Content)
+//	reportChapterInfo.ContentSub = html.EscapeString(contentSub)
+//	reportChapterInfo.IsEdit = 1
+//	reportChapterInfo.CreateTime = req.CreateTime
+//	reportChapterInfo.VideoUrl = req.VideoUrl
+//	reportChapterInfo.VideoName = req.VideoName
+//	reportChapterInfo.VideoPlaySeconds = req.VideoPlaySeconds
+//	reportChapterInfo.VideoSize = req.VideoSize
+//	reportChapterInfo.VideoKind = 1
+//
+//	reportChapterInfo.LastModifyAdminId = sysUser.AdminId
+//	reportChapterInfo.LastModifyAdminName = sysUser.RealName
+//	reportChapterInfo.ContentModifyTime = time.Now()
+//	reportChapterInfo.ContentStruct = html.EscapeString(req.ContentStruct)
+//	reportChapterInfo.CanvasColor = req.CanvasColor
+//	reportChapterInfo.HeadResourceId = req.HeadResourceId
+//	reportChapterInfo.EndResourceId = req.EndResourceId
+//
+//	updateCols := make([]string, 0)
+//	updateCols = append(updateCols, "Title", "AddType", "Author", "Content", "ContentSub", "IsEdit", "CreateTime")
+//	if req.VideoUrl != "" {
+//		updateCols = append(updateCols, "VideoUrl", "VideoName", "VideoSize", "VideoPlaySeconds", "VideoKind")
+//	}
+//
+//	updateCols = append(updateCols, "LastModifyAdminId", "LastModifyAdminName", "ContentModifyTime", "ContentStruct", "CanvasColor", "HeadResourceId", "EndResourceId")
+//
+//	// 章节报告更新指标
+//	tickerList := make([]*models.ReportChapterTicker, 0)
+//	if len(reqTickerList) > 0 {
+//		nowTime := time.Now()
+//		for i := 0; i < len(reqTickerList); i++ {
+//			tickerList = append(tickerList, &models.ReportChapterTicker{
+//				ReportChapterId: reportChapterInfo.ReportChapterId,
+//				Sort:            reqTickerList[i].Sort,
+//				Ticker:          reqTickerList[i].Ticker,
+//				CreateTime:      nowTime,
+//				UpdateTime:      nowTime,
+//			})
+//		}
+//	}
+//	err = models.UpdateChapterAndTicker(reportChapterInfo, updateCols, tickerList)
+//	if err != nil {
+//		br.Msg = "保存失败"
+//		br.ErrMsg = "报告章节内容保存失败, Err: " + err.Error()
+//		return
+//	}
+//
+//	// 标记更新中
+//	{
+//		markStatus, err := services.UpdateReportEditMark(reportChapterInfo.ReportId, reportChapterInfo.ReportChapterId, sysUser.AdminId, 1, sysUser.RealName, this.Lang)
+//		if err != nil {
+//			br.Msg = err.Error()
+//			return
+//		}
+//		if markStatus.Status == 1 {
+//			br.Msg = markStatus.Msg
+//			return
+//		}
+//	}
+//
+//	// 备份关键数据
+//	chapters := make([]*models.ReportChapter, 0)
+//	chapters = append(chapters, reportChapterInfo)
+//	go services.SaveReportLogs(nil, chapters, sysUser.AdminId, sysUser.RealName)
+//
+//	br.Ret = 200
+//	br.Success = true
+//	br.Msg = "保存成功"
+//}
+
 // EditChapterBaseInfoAndPermission
 // @Title 修改报告章节的基础信息、授权用户权限、品种权限
 // @Description 修改报告章节的基础信息、授权用户权限、品种权限
@@ -773,6 +967,35 @@ func (this *ReportController) EditChapterTrendTag() {
 		return
 	}
 
+	// 获取报告详情
+	reportInfo, err := models.GetReportByReportId(chapterInfo.ReportId)
+	if err != nil {
+		br.Msg = "报告信息有误"
+		br.ErrMsg = "报告信息有误, Err: " + err.Error()
+		return
+	}
+
+	// 操作权限校验
+	{
+		// 如果不是创建人,那么就要去查看是否授权
+		if reportInfo.AdminId != sysUser.AdminId {
+			// 授权用户权限校验
+			chapterGrantObj := report.ReportChapterGrant{}
+			_, tmpErr := chapterGrantObj.GetGrantByIdAndAdmin(chapterInfo.ReportChapterId, sysUser.AdminId)
+			if tmpErr != nil {
+				if tmpErr.Error() == utils.ErrNoRow() {
+					br.Msg = "没有权限"
+					br.ErrMsg = "没有权限"
+					br.IsSendEmail = false
+					return
+				}
+				br.Msg = "获取章节id授权用户失败"
+				br.ErrMsg = "获取章节id授权用户失败, Err: " + tmpErr.Error()
+				return
+			}
+		}
+	}
+
 	// 更新章节标签
 	chapterInfo.Trend = req.Trend
 	updateCols := make([]string, 0)

+ 16 - 2
models/report.go

@@ -129,8 +129,22 @@ type ReportList struct {
 	ApproveTime        string                    `description:"审批时间"`
 	DetailImgUrl       string                    `description:"报告详情长图地址"`
 	DetailPdfUrl       string                    `description:"报告详情PDF地址"`
-	ReportLayout       int8                      `description:"报告布局,1:常规布局,2:智能布局。默认:1"`
-	ReportCreateTime   time.Time                 `description:"报告时间创建时间"`
+
+	ReportLayout        int8      `description:"报告布局,1:常规布局,2:智能布局。默认:1"`
+	ReportCreateTime    time.Time `description:"报告时间创建时间"`
+	ContentStruct       string    `description:"内容组件"`
+	LastModifyAdminId   int       `description:"最后更新人ID"`
+	LastModifyAdminName string    `description:"最后更新人姓名"`
+	ContentModifyTime   time.Time `description:"内容更新时间"`
+	HeadImg             string    `description:"报告头图地址"`
+	EndImg              string    `description:"报告尾图地址"`
+	CanvasColor         string    `description:"画布颜色"`
+	NeedSplice          int       `description:"是否拼接版头版位的标记,主要是为了兼容历史报告。0-不需要 1-需要"`
+	HeadResourceId      int       `description:"版头资源ID"`
+	EndResourceId       int       `description:"版尾资源ID"`
+	ClassifyIdThird     int       `description:"三级分类id"`
+	ClassifyNameThird   string    `description:"三级分类名称"`
+	CollaborateType     int8      `description:"协作方式,1:个人,2:多人协作。默认:1"`
 }
 
 type ReportListResp struct {

+ 6 - 0
models/report_chapter.go

@@ -507,3 +507,9 @@ func (chapterChapterInfo *ReportChapter) Update(cols []string) (err error) {
 
 	return
 }
+
+// DelReportChapterReq
+// @Description: 删除报告章节请求体
+type DelReportChapterReq struct {
+	ReportChapterId int `description:"报告章节ID"`
+}

+ 211 - 0
services/report.go

@@ -1683,3 +1683,214 @@ func EditChapterBaseInfoAndPermission(reportInfo *models.Report, reportChapterIn
 
 	return
 }
+
+// DelChapterBaseInfoAndPermission
+// @Description: 修改报告章节的基础信息、授权用户权限、品种权限
+// @author: Roc
+// @datetime 2024-06-05 11:49:11
+// @param reportInfo *models.Report
+// @param reportChapterInfo *models.ReportChapter
+// @param title string
+// @param permissionIdList []int
+// @param adminIdList []int
+// @return err error
+// @return errMsg string
+func DelChapter(reportInfo *models.Report, reportChapterInfo *models.ReportChapter, title string, permissionIdList []int, adminIdList []int) (err error, errMsg string) {
+	errMsg = "删除失败"
+
+	if reportInfo.State == 2 {
+		errMsg = "该报告已发布,不允许删除"
+		err = errors.New(errMsg)
+		return
+	}
+
+	updateCols := make([]string, 0)
+	// 如果标题内容,那么就修改
+	if title != `` {
+		reportChapterInfo.Title = title
+		reportChapterInfo.ModifyTime = time.Now()
+		updateCols = append(updateCols, "Title", "ModifyTime")
+		reportChapterInfo.UpdateChapter(updateCols)
+	}
+
+	reportGrantObj := report.ReportGrant{}
+	chapterGrantObj := report.ReportChapterGrant{}
+	chapterPermissionObj := report.ReportChapterPermissionMapping{}
+
+	// 需要添加的报告章节授权数据
+	addChapterAdminList := make([]*report.ReportChapterGrant, 0)
+	// 待移除的报告章节授权数据id
+	delReportChapterGrantIdList := make([]int, 0)
+
+	// 处理当前报告章节需要新增/移除的授权信息
+	{
+		// 获取当前章节已经授权的用户信息
+		chapterGrantList, tmpErr := chapterGrantObj.GetGrantListById(reportChapterInfo.ReportChapterId)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+
+		// 当前章节已经授权的用户信息
+		currChapterAdminMap := make(map[int]*report.ReportChapterGrant)
+		// 需要删除的报告章节授权数据
+		delChapterAdminMap := make(map[int]*report.ReportChapterGrant)
+		for _, v := range chapterGrantList {
+			currChapterAdminMap[v.AdminId] = v
+			delChapterAdminMap[v.AdminId] = v
+		}
+
+		for _, adminId := range adminIdList {
+			_, ok := currChapterAdminMap[adminId]
+			// 如果存在,那么从 “需要删除的报告章节授权数据” 的map中移除
+			if ok {
+				delete(delChapterAdminMap, adminId)
+				continue
+			}
+			// 如果不存在,那么就新增授权
+			addChapterAdminList = append(addChapterAdminList, &report.ReportChapterGrant{
+				//GrantId:         0,
+				ReportChapterId: reportChapterInfo.ReportChapterId,
+				AdminId:         adminId,
+				CreateTime:      time.Now(),
+			})
+		}
+
+		// 查出需要移除的授权id
+		for _, v := range delChapterAdminMap {
+			delReportChapterGrantIdList = append(delReportChapterGrantIdList, v.GrantId)
+		}
+	}
+
+	// 其他章节授权的用户
+	otherChapterAdminMap := make(map[int]bool)
+	{
+		// 获取报告所有的章节id
+		reportChapterIdList, tmpErr := models.GetReportChapterIdList(reportInfo.Id)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+
+		if len(reportChapterIdList) > 0 {
+			list, tmpErr := chapterGrantObj.GetGrantListByIdList(reportChapterIdList)
+			if tmpErr != nil {
+				err = tmpErr
+				return
+			}
+			for _, v := range list {
+				// 如果是当前章节,因为涉及到重新授权,所以得过滤
+				if v.ReportChapterId == reportChapterInfo.ReportChapterId {
+					continue
+				}
+				otherChapterAdminMap[v.AdminId] = true
+			}
+		}
+	}
+
+	// 需要添加的报告授权数据
+	addReportAdminList := make([]*report.ReportGrant, 0)
+	// 待移除的报告授权数据id
+	delReportGrantIdList := make([]int, 0)
+
+	// 处理当前报告需要新增/移除的授权信息
+	{
+		// 获取当前报告已经授权的用户信息
+		reportGrantList, tmpErr := reportGrantObj.GetGrantListById(reportInfo.Id)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+
+		// 当前报告已经授权的用户信息
+		currReportAdminMap := make(map[int]*report.ReportGrant)
+		// 需要删除的报告授权数据
+		delReportAdminMap := make(map[int]*report.ReportGrant)
+		for _, v := range reportGrantList {
+			currReportAdminMap[v.AdminId] = v
+			delReportAdminMap[v.AdminId] = v
+		}
+
+		// 先看需要新增哪些用户
+		for _, tmpAdminId := range adminIdList {
+			_, ok := currReportAdminMap[tmpAdminId]
+			// 如果章节中需要新增的用户 已经在 报告授权用户里面,那么就忽略,可以不用新增了
+			if ok {
+				delete(delReportAdminMap, tmpAdminId)
+				continue
+			}
+
+			// 如果不存在,那么就新增授权
+			addReportAdminList = append(addReportAdminList, &report.ReportGrant{
+				//GrantId:         0,
+				ReportId:   reportInfo.Id,
+				AdminId:    tmpAdminId,
+				CreateTime: time.Now(),
+			})
+		}
+
+		// 再看看章节中,需要移除的用户
+		for _, tmpAdminId := range delReportChapterGrantIdList {
+			_, ok := otherChapterAdminMap[tmpAdminId]
+			// 如果章节中需要移除的用户 在 报告中其他章节的授权用户里面,那么就忽略,可以不用删除了
+			if ok {
+				delete(delReportAdminMap, tmpAdminId)
+				continue
+			}
+		}
+
+		// 查出需要移除的授权id
+		for _, v := range delReportAdminMap {
+			delReportGrantIdList = append(delReportGrantIdList, v.GrantId)
+		}
+	}
+
+	// 需要添加的报告章节品种权限数据
+	addChapterPermissionList := make([]*report.ReportChapterPermissionMapping, 0)
+	// 待移除的报告章节品种权限数据id
+	delChapterPermissionMappingIdList := make([]int, 0)
+
+	// 处理当前报告章节需要新增/移除的品种权限信息
+	{
+		// 获取当前章节已经配置的品种权限信息
+		chapterPermissionList, tmpErr := chapterPermissionObj.GetPermissionListById(reportChapterInfo.ReportChapterId)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+
+		// 当前章节已经配置的品种权限信息
+		currChapterPermissionMap := make(map[int]*report.ReportChapterPermissionMapping)
+		// 需要删除的报告章节品种权限配置
+		delChapterPermissionMap := make(map[int]*report.ReportChapterPermissionMapping)
+		for _, v := range chapterPermissionList {
+			currChapterPermissionMap[v.ChartPermissionId] = v
+			delChapterPermissionMap[v.ChartPermissionId] = v
+		}
+
+		for _, permissionId := range permissionIdList {
+			_, ok := currChapterPermissionMap[permissionId]
+			// 如果存在,那么从 “需要删除的报告章节品种权限配置” 的map中移除
+			if ok {
+				delete(delChapterPermissionMap, permissionId)
+				continue
+			}
+			// 如果不存在,那么就新增品种权限配置
+			addChapterPermissionList = append(addChapterPermissionList, &report.ReportChapterPermissionMapping{
+				//ReportChapterPermissionMappingId:         0,
+				ReportChapterId:   reportChapterInfo.ReportChapterId,
+				ChartPermissionId: permissionId,
+				CreateTime:        time.Now(),
+			})
+		}
+
+		// 查出需要移除的品种权限配置
+		for _, v := range delChapterPermissionMap {
+			delChapterPermissionMappingIdList = append(delChapterPermissionMappingIdList, v.ReportChapterPermissionMappingId)
+		}
+	}
+
+	err = models.EditChapterBaseInfoAndPermission(reportChapterInfo, updateCols, addReportAdminList, addChapterAdminList, addChapterPermissionList, delReportGrantIdList, delReportChapterGrantIdList, delChapterPermissionMappingIdList)
+
+	return
+}