Explorar el Código

fix:研报-详情(基础信息,不含章节信息)新增授权人和当前分类的关联品种

Roc hace 9 meses
padre
commit
538115c1c8

+ 11 - 0
controllers/report_chapter.go

@@ -415,6 +415,17 @@ func (this *ReportController) DelChapter() {
 		return
 	}
 
+	// 删除章节
+	err, errMsg := services.DelChapter(reportInfo, reportChapterInfo, sysUser)
+	if err != nil {
+		br.Msg = "删除失败"
+		if errMsg != "" {
+			br.Msg = errMsg
+		}
+		br.ErrMsg = "删除失败,Err:" + err.Error()
+		return
+	}
+
 	// 备份关键数据
 	chapters := make([]*models.ReportChapter, 0)
 	chapters = append(chapters, reportChapterInfo)

+ 123 - 91
controllers/report_v2.go

@@ -5,6 +5,7 @@ import (
 	"eta/eta_api/models"
 	"eta/eta_api/models/report"
 	"eta/eta_api/models/report_approve"
+	"eta/eta_api/models/system"
 	"eta/eta_api/services"
 	"eta/eta_api/services/alarm_msg"
 	"eta/eta_api/services/data"
@@ -316,6 +317,20 @@ func (this *ReportController) Add() {
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
+
+	if req.Title == `` {
+		br.Msg = "标题不能为空"
+		br.ErrMsg = "标题不能为空"
+		br.IsSendEmail = false
+		return
+	}
+	if req.ClassifyIdFirst <= 0 {
+		br.Msg = "分类必填"
+		br.ErrMsg = "分类必填"
+		br.IsSendEmail = false
+		return
+	}
+
 	var contentSub string
 	if req.Content != "" {
 		e := utils.ContentXssCheck(req.Content)
@@ -370,6 +385,7 @@ func (this *ReportController) Add() {
 
 	item := new(models.Report)
 	item.AddType = req.AddType
+	item.ReportVersion = 2
 	item.ClassifyIdFirst = req.ClassifyIdFirst
 	item.ClassifyNameFirst = req.ClassifyNameFirst
 	item.ClassifyIdSecond = req.ClassifyIdSecond
@@ -411,7 +427,7 @@ func (this *ReportController) Add() {
 	item.IsPublicPublish = req.IsPublicPublish
 	item.ReportCreateTime = time.Now()
 
-	err, errMsg := services.AddReportAndChapter(item, req.InheritReportId)
+	err, errMsg := services.AddReportAndChapter(item, req.InheritReportId, req.GrantAdminIdList)
 	if err != nil {
 		br.Msg = "保存失败"
 		if errMsg != "" {
@@ -469,11 +485,10 @@ func (this *ReportController) Edit() {
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
-	if req.Content == "" {
-		br.Msg = "报告内容不能为空"
-		return
-	}
-
+	//if req.Content == "" {
+	//	br.Msg = "报告内容不能为空"
+	//	return
+	//}
 	//更新标记key
 	markStatus, err := services.UpdateReportEditMark(int(req.ReportId), 0, sysUser.AdminId, 1, sysUser.RealName, this.Lang)
 	if err != nil {
@@ -486,7 +501,6 @@ func (this *ReportController) Edit() {
 		return
 	}
 
-	var stage int
 	reportInfo, e := models.GetReportByReportId(int(req.ReportId))
 	if e != nil {
 		if e.Error() == utils.ErrNoRow() {
@@ -497,86 +511,24 @@ func (this *ReportController) Edit() {
 		br.ErrMsg = "获取报告失败, Err: " + e.Error()
 		return
 	}
+
 	if reportInfo.State == models.ReportStatePublished || reportInfo.State == models.ReportStatePass {
 		br.Msg = "该报告已发布,不允许编辑"
 		br.ErrMsg = "该报告已发布,不允许编辑"
 		return
 	}
-	if reportInfo.ClassifyNameFirst != req.ClassifyNameFirst || reportInfo.ClassifyNameSecond != req.ClassifyNameSecond {
-		// 报告期数
-		maxStage, _ := models.GetReportStageEdit(req.ClassifyIdFirst, req.ClassifyIdSecond, req.ClassifyIdThird, int(req.ReportId))
-		maxStage = maxStage + 1
-		stage = maxStage
-	} else {
-		stage = reportInfo.Stage
-	}
-	//if req.State != reportInfo.State {
-	//	recordItem := &models.ReportStateRecord{
-	//		ReportId:   int(req.ReportId),
-	//		ReportType: 1,
-	//		State:      req.State,
-	//		AdminId:    this.SysUser.AdminId,
-	//		AdminName:  this.SysUser.AdminName,
-	//		CreateTime: time.Now(),
-	//	}
-	//	go func() {
-	//		_, _ = models.AddReportStateRecord(recordItem)
-	//	}()
-	//}
 
-	//item := new(models.Report)
-	reportInfo.ClassifyIdFirst = req.ClassifyIdFirst
-	reportInfo.ClassifyNameFirst = req.ClassifyNameFirst
-	reportInfo.ClassifyIdSecond = req.ClassifyIdSecond
-	reportInfo.ClassifyNameSecond = req.ClassifyNameSecond
-	reportInfo.ClassifyIdThird = req.ClassifyIdThird
-	reportInfo.ClassifyNameThird = req.ClassifyNameThird
-	reportInfo.Title = req.Title
-	reportInfo.Abstract = req.Abstract
-	reportInfo.Author = req.Author
-	reportInfo.Frequency = req.Frequency
-	//reportInfo.State = reportInfo.State // 编辑不变更状态
-	reportInfo.Stage = stage // 编辑不变更期数
-	//reportInfo.Content = html.EscapeString(req.Content)	// 编辑不变更具体内容
-	//reportInfo.ContentSub = html.EscapeString(contentSub)	// 编辑不变更具体内容
-	reportInfo.CreateTime = req.CreateTime
-	//reportInfo.CollaborateType = req.CollaborateType
-	//reportInfo.ReportLayout = req.ReportLayout
-	if req.IsPublicPublish <= 0 {
-		req.IsPublicPublish = 1
-	}
-	reportInfo.IsPublicPublish = req.IsPublicPublish
-	err = reportInfo.Update([]string{"ClassifyIdFirst", "ClassifyNameFirst", "ClassifyIdSecond", "ClassifyNameSecond", "ClassifyIdThird", "ClassifyNameThird", "Title", "Abstract", "Author", "Frequency", "Stage", "CreateTime", "IsPublicPublish"})
+	// 编辑报告信息
+	err, errMsg := services.EditReport(reportInfo, req, sysUser)
 	if err != nil {
 		br.Msg = "保存失败"
+		if errMsg != "" {
+			br.Msg = errMsg
+		}
 		br.ErrMsg = "保存失败,Err:" + err.Error()
 		return
 	}
 
-	// TODO 权限处理
-	//处理权限
-	//go func() {
-	//	e := models.RemoveChartPermissionChapterMapping(req.ReportId)
-	//	if e != nil {
-	//		alarm_msg.SendAlarmMsg("修改删除报告权限失败,Err:"+e.Error(), 3)
-	//		return
-	//	}
-	//	permissionItems, e := models.GetPermission(req.ClassifyIdSecond)
-	//	if e != nil {
-	//		alarm_msg.SendAlarmMsg("获取权限失败,Err:"+e.Error(), 3)
-	//		return
-	//	}
-	//	for _, v := range permissionItems {
-	//		e = models.AddChartPermissionChapterMapping(v.ChartPermissionId, req.ReportId)
-	//		if e != nil {
-	//			alarm_msg.SendAlarmMsg("新增权限失败,Err:"+e.Error(), 3)
-	//			return
-	//		}
-	//	}
-	//	// 同步crm权限
-	//	_ = services.EditReportPermissionSync(req.ReportId, req.ClassifyIdSecond)
-	//}()
-
 	reportCode := utils.MD5(strconv.Itoa(int(req.ReportId)))
 	resp := new(models.EditResp)
 	resp.ReportId = req.ReportId
@@ -1059,17 +1011,17 @@ func (this *ReportController) AuthorizedListReport() {
 	var list []*models.ReportList
 
 	// 没有输入信息,那就不展示
-	//if keyword == `` {
-	//	page := paging.GetPaging(currentIndex, pageSize, 0)
-	//	resp := new(models.ReportListResp)
-	//	resp.Paging = page
-	//	resp.List = list
-	//	br.Ret = 200
-	//	br.Success = true
-	//	br.Msg = "获取成功"
-	//	br.Data = resp
-	//	return
-	//}
+	if keyword == `` && classifyIdFirst <= 0 {
+		page := paging.GetPaging(currentIndex, pageSize, 0)
+		resp := new(models.ReportListResp)
+		resp.Paging = page
+		resp.List = list
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		br.Data = resp
+		return
+	}
 
 	// 当前用户有权限的报告id列表
 	grantReportIdList := make([]int, 0)
@@ -1197,7 +1149,7 @@ func (this *ReportController) BaseDetail() {
 		br.Msg = "参数错误"
 		return
 	}
-	item, err := models.GetReportById(reportId)
+	reportInfo, err := models.GetReportById(reportId)
 	if err != nil {
 		if err.Error() == utils.ErrNoRow() {
 			br.Msg = "报告已被删除"
@@ -1211,12 +1163,92 @@ func (this *ReportController) BaseDetail() {
 	// 基础信息就不获取章节信息了
 	chapterList := make([]*models.ReportChapter, 0)
 
-	item.Content = html.UnescapeString(item.Content)
-	item.ContentSub = html.UnescapeString(item.ContentSub)
+	reportInfo.Content = html.UnescapeString(reportInfo.Content)
+	reportInfo.ContentSub = html.UnescapeString(reportInfo.ContentSub)
+
+	grandAdminList := make([]models.ReportDetailViewAdmin, 0)
+	permissionList := make([]models.ReportDetailViewPermission, 0)
+
+	// 处理报告授权用户列表
+	{
+		obj := report.ReportGrant{}
+		grantList, tmpErr := obj.GetGrantListById(reportId)
+		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, models.ReportDetailViewAdmin{
+					AdminId:   v.AdminId,
+					AdminName: v.RealName,
+				})
+			}
+		}
+
+	}
+
+	// 处理章节id关联品种id列表
+	{
+		minClassifyId := reportInfo.ClassifyIdThird
+		if minClassifyId <= 0 {
+			minClassifyId = reportInfo.ClassifyIdSecond
+		}
+		if minClassifyId <= 0 {
+			minClassifyId = reportInfo.ClassifyIdFirst
+		}
+		if minClassifyId <= 0 {
+			br.Msg = "分类异常"
+			br.ErrMsg = "分类异常"
+			return
+		}
+
+		// 获取分类关联的品种id
+		classifyPermissionList, tmpErr := models.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 := models.GetChartPermissionByIdList(permissionIdList)
+			if tmpErr != nil {
+				br.Msg = "获取章节id授权用户列表失败"
+				br.ErrMsg = "获取章节id授权用户列表失败, Err: " + tmpErr.Error()
+				return
+			}
+			for _, v := range adminList {
+				permissionList = append(permissionList, models.ReportDetailViewPermission{
+					PermissionId:   v.ChartPermissionId,
+					PermissionName: v.ChartPermissionName,
+				})
+			}
+		}
+
+	}
 
 	resp := &models.ReportDetailView{
-		ReportDetail: item,
-		ChapterList:  chapterList,
+		ReportDetail:   reportInfo,
+		ChapterList:    chapterList,
+		GrandAdminList: grandAdminList,
+		PermissionList: permissionList,
 	}
 	br.Ret = 200
 	br.Success = true

+ 18 - 0
models/chart_permission.go

@@ -256,3 +256,21 @@ func GetChartPermissionsByProductId() (list []*ChartPermission, err error) {
 	_, err = o.Raw(sql, FiccProductId).QueryRows(&list)
 	return
 }
+
+// GetChartPermissionByIdList
+// @Description: 根据品种ID列表获取权限列表
+// @author: Roc
+// @datetime 2024-06-07 10:32:29
+// @param permissionIdList []int
+// @return items []*ChartPermission
+// @return err error
+func GetChartPermissionByIdList(permissionIdList []int) (items []*ChartPermission, err error) {
+	num := len(permissionIdList)
+	if num <= 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT * FROM chart_permission WHERE chart_permission_id in (` + utils.GetOrmInReplace(num) + `) `
+	err = o.Raw(sql, permissionIdList).QueryRow(&items)
+	return
+}

+ 29 - 138
models/report.go

@@ -505,6 +505,7 @@ type AddReq struct {
 	ReportLayout       int8   `description:"报告布局,1:常规布局,2:智能布局。默认:1"`
 	IsPublicPublish    int8   `description:"是否公开发布,1:是,2:否"`
 	InheritReportId    int    `description:"待继承的报告ID"`
+	GrantAdminIdList   []int  `description:"授权用户id列表"`
 }
 
 type PrePublishReq struct {
@@ -549,7 +550,8 @@ type EditReq struct {
 	EndResourceId      int    `description:"版尾资源ID"`
 	//CollaborateType    int8   `description:"协作方式,1:个人,2:多人协作。默认:1"`
 	//ReportLayout       int8   `description:"报告布局,1:常规布局,2:智能布局。默认:1"`
-	IsPublicPublish int8 `description:"是否公开发布,1:是,2:否"`
+	IsPublicPublish  int8  `description:"是否公开发布,1:是,2:否"`
+	GrantAdminIdList []int `description:"授权用户id列表"`
 }
 
 type EditResp struct {
@@ -757,7 +759,15 @@ func GetDayWeekReportStage(classifyIdFirst int, yearStart time.Time) (count int,
 	return
 }
 
-// AddReportAndChapter 新增报告及章节
+// AddReportAndChapter
+// @Description: 新增报告及章节
+// @author: Roc
+// @datetime 2024-06-06 17:08:34
+// @param reportItem *Report
+// @param allGrantUserList []*report.ReportGrant
+// @param addReportChapterList []AddReportChapter
+// @return reportId int64
+// @return err error
 func AddReportAndChapter(reportItem *Report, allGrantUserList []*report.ReportGrant, addReportChapterList []AddReportChapter) (reportId int64, err error) {
 	o := orm.NewOrmUsingDB("rddp")
 	to, err := o.Begin()
@@ -876,7 +886,23 @@ func (reportInfo *Report) UpdateReport(cols []string) (err error) {
 // @Description: 晨周报详情
 type ReportDetailView struct {
 	*ReportDetail
-	ChapterList []*ReportChapter
+	ChapterList    []*ReportChapter
+	GrandAdminList []ReportDetailViewAdmin
+	PermissionList []ReportDetailViewPermission
+}
+
+// ReportDetailViewAdmin
+// @Description: 报告里面的授权人
+type ReportDetailViewAdmin struct {
+	AdminId   int
+	AdminName string
+}
+
+// ReportDetailViewPermission
+// @Description: 报告分类关联的品种权限
+type ReportDetailViewPermission struct {
+	PermissionId   int
+	PermissionName string
 }
 
 func GetUnPublishDayReport(startTime time.Time, endTime time.Time) (item *Report, err error) {
@@ -1439,138 +1465,3 @@ func ModifyReportImgUrl(reportId int, detailImgUrl string) (err error) {
 	_, err = o.Raw(sql, detailImgUrl, reportId).Exec()
 	return
 }
-
-// EditChapterBaseInfoAndPermission
-// @Description: 修改报告章节的基础信息、授权用户权限、品种权限
-// @author: Roc
-// @datetime 2024-06-05 11:45:04
-// @param reportChapterInfo *ReportChapter
-// @param updateCols []string
-// @param addReportGrantList []*report.ReportGrant
-// @param addReportChapterGrantList []report.ReportChapterGrant
-// @param addChapterPermissionMap []*report.ReportChapterPermissionMapping
-// @param delReportGrantIdList []int
-// @param delReportChapterGrantIdList []int
-// @param delChapterPermissionMappingIdList []int
-// @return err error
-func EditChapterBaseInfoAndPermission(reportChapterInfo *ReportChapter, updateCols []string, addReportGrantList []*report.ReportGrant, addReportChapterGrantList []*report.ReportChapterGrant, addChapterPermissionMap []*report.ReportChapterPermissionMapping, delReportGrantIdList, delReportChapterGrantIdList, delChapterPermissionMappingIdList []int) (err error) {
-	o := orm.NewOrmUsingDB("rddp")
-	to, err := o.Begin()
-	if err != nil {
-		return
-	}
-	defer func() {
-		if err != nil {
-			_ = to.Rollback()
-		} else {
-			_ = to.Commit()
-		}
-	}()
-
-	// 变更报告章节信息
-	if len(updateCols) > 0 {
-		_, err = to.Update(reportChapterInfo, updateCols...)
-		if err != nil {
-			return
-		}
-	}
-
-	// 新增报告授权用户
-	if len(addReportGrantList) > 0 {
-		_, err = to.InsertMulti(500, addReportGrantList)
-		if err != nil {
-			return
-		}
-	}
-
-	// 删除报告授权用户
-	delNum := len(delReportGrantIdList)
-	if delNum > 0 {
-		sql := `DELETE FROM report_grant WHERE grant_id IN (` + utils.GetOrmInReplace(delNum) + `)`
-		_, err = to.Raw(sql, delReportGrantIdList).Exec()
-		if err != nil {
-			return
-		}
-	}
-
-	// 新增报告章节授权用户
-	if len(addReportChapterGrantList) > 0 {
-		_, err = to.InsertMulti(500, addReportChapterGrantList)
-		if err != nil {
-			return
-		}
-	}
-
-	// 删除报告章节授权用户
-	delNum = len(delReportChapterGrantIdList)
-	if delNum > 0 {
-		sql := `DELETE FROM report_chapter_grant WHERE grant_id IN (` + utils.GetOrmInReplace(delNum) + `)`
-		_, err = to.Raw(sql, delReportChapterGrantIdList).Exec()
-		if err != nil {
-			return
-		}
-	}
-
-	// 新增报告章节的品种配置
-	if len(addChapterPermissionMap) > 0 {
-		_, err = to.InsertMulti(500, addChapterPermissionMap)
-		if err != nil {
-			return
-		}
-	}
-
-	// 删除报告章节的品种配置
-	delNum = len(delChapterPermissionMappingIdList)
-	if delNum > 0 {
-		sql := `DELETE FROM report_chapter_permission_mapping WHERE report_chapter_permission_mapping_id IN (` + utils.GetOrmInReplace(delNum) + `)`
-		_, err = to.Raw(sql, delChapterPermissionMappingIdList).Exec()
-		if err != nil {
-			return
-		}
-	}
-
-	return
-}
-
-// GetReportListCountByAuthorized
-// @Description: 获取有权限的报告列表的报告数量
-// @author: Roc
-// @datetime 2024-05-30 15:14:01
-// @param condition string
-// @param pars []interface{}
-// @return count int
-// @return err error
-func GetReportListCountByAuthorized(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrmUsingDB("rddp")
-	sql := `SELECT COUNT(1) AS count  FROM report as a 
- WHERE 1=1  `
-	if condition != "" {
-		sql += condition
-	}
-
-	err = o.Raw(sql, pars).QueryRow(&count)
-	return
-}
-
-// GetReportListByAuthorized
-// @Description: 获取有权限的报告列表的数据
-// @author: Roc
-// @datetime 2024-05-30 15:15:07
-// @param condition string
-// @param pars []interface{}
-// @param startSize int
-// @param pageSize int
-// @return items []*ReportList
-// @return err error
-func GetReportListByAuthorized(condition string, pars []interface{}, startSize, pageSize int) (items []*ReportList, err error) {
-	o := orm.NewOrmUsingDB("rddp")
-
-	sql := `SELECT id,classify_id_first,classify_name_first,classify_id_second,classify_name_second,classify_id_third,classify_name_third,title,stage,create_time FROM report as a WHERE 1=1  `
-	if condition != "" {
-		sql += condition
-	}
-	// 排序:1:未发布;2:已发布;3-待提交;4-待审批;5-已驳回;6-已通过
-	sql += ` GROUP BY a.id ORDER BY FIELD(state,3,1,4,5,6,2), modify_time DESC LIMIT ?,?`
-	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
-	return
-}

+ 233 - 0
models/report_v2.go

@@ -0,0 +1,233 @@
+package models
+
+import (
+	"eta/eta_api/models/report"
+	"eta/eta_api/utils"
+	"github.com/beego/beego/v2/client/orm"
+)
+
+// EditReportAndPermission
+// @Description: 修改报告的基础信息、授权用户权限
+// @author: Roc
+// @datetime 2024-06-06 17:11:12
+// @param reportInfo *Report
+// @param updateCols []string
+// @param addReportGrantList []*report.ReportGrant
+// @param delReportGrantIdList []int
+// @return err error
+func EditReportAndPermission(reportInfo *Report, updateCols []string, addReportGrantList []*report.ReportGrant, delReportGrantIdList []int) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+
+	// 变更报告章节信息
+	if len(updateCols) > 0 {
+		_, err = to.Update(reportInfo, updateCols...)
+		if err != nil {
+			return
+		}
+	}
+
+	// 新增报告授权用户
+	if len(addReportGrantList) > 0 {
+		_, err = to.InsertMulti(500, addReportGrantList)
+		if err != nil {
+			return
+		}
+	}
+
+	// 删除报告授权用户
+	delNum := len(delReportGrantIdList)
+	if delNum > 0 {
+		sql := `DELETE FROM report_grant WHERE grant_id IN (` + utils.GetOrmInReplace(delNum) + `)`
+		_, err = to.Raw(sql, delReportGrantIdList).Exec()
+		if err != nil {
+			return
+		}
+	}
+
+	return
+}
+
+// EditChapterBaseInfoAndPermission
+// @Description: 修改报告章节的基础信息、授权用户权限、品种权限
+// @author: Roc
+// @datetime 2024-06-05 11:45:04
+// @param reportChapterInfo *ReportChapter
+// @param updateCols []string
+// @param addReportChapterGrantList []report.ReportChapterGrant
+// @param addChapterPermissionMap []*report.ReportChapterPermissionMapping
+// @param delReportChapterGrantIdList []int
+// @param delChapterPermissionMappingIdList []int
+// @return err error
+func EditChapterBaseInfoAndPermission(reportChapterInfo *ReportChapter, updateCols []string, addReportChapterGrantList []*report.ReportChapterGrant, addChapterPermissionMap []*report.ReportChapterPermissionMapping, delReportChapterGrantIdList, delChapterPermissionMappingIdList []int) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+
+	// 变更报告章节信息
+	if len(updateCols) > 0 {
+		_, err = to.Update(reportChapterInfo, updateCols...)
+		if err != nil {
+			return
+		}
+	}
+
+	// 新增报告章节授权用户
+	if len(addReportChapterGrantList) > 0 {
+		_, err = to.InsertMulti(500, addReportChapterGrantList)
+		if err != nil {
+			return
+		}
+	}
+
+	// 删除报告章节授权用户
+	delNum := len(delReportChapterGrantIdList)
+	if delNum > 0 {
+		sql := `DELETE FROM report_chapter_grant WHERE grant_id IN (` + utils.GetOrmInReplace(delNum) + `)`
+		_, err = to.Raw(sql, delReportChapterGrantIdList).Exec()
+		if err != nil {
+			return
+		}
+	}
+
+	// 新增报告章节的品种配置
+	if len(addChapterPermissionMap) > 0 {
+		_, err = to.InsertMulti(500, addChapterPermissionMap)
+		if err != nil {
+			return
+		}
+	}
+
+	// 删除报告章节的品种配置
+	delNum = len(delChapterPermissionMappingIdList)
+	if delNum > 0 {
+		sql := `DELETE FROM report_chapter_permission_mapping WHERE report_chapter_permission_mapping_id IN (` + utils.GetOrmInReplace(delNum) + `)`
+		_, err = to.Raw(sql, delChapterPermissionMappingIdList).Exec()
+		if err != nil {
+			return
+		}
+	}
+
+	return
+}
+
+// DelChapterAndPermission
+// @Description: 删除报告章节、授权用户权限、品种权限
+// @author: Roc
+// @datetime 2024-06-06 17:25:47
+// @param reportInfo *Report
+// @param updateReportCols []string
+// @param reportChapterInfo *ReportChapter
+// @return err error
+func DelChapterAndPermission(reportInfo *Report, updateReportCols []string, reportChapterInfo *ReportChapter) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+
+	// 变更报告信息
+	if len(updateReportCols) > 0 {
+		_, err = to.Update(reportInfo, updateReportCols...)
+		if err != nil {
+			return
+		}
+	}
+
+	// 删除报告对应章节
+	{
+		_, err = to.Delete(reportChapterInfo)
+		if err != nil {
+			return
+		}
+	}
+
+	// 删除报告章节的授权用户权限
+	{
+		sql := `DELETE FROM report_chapter_grant WHERE report_chapter_id = ? `
+		_, err = to.Raw(sql, reportChapterInfo.ReportChapterId).Exec()
+		if err != nil {
+			return
+		}
+	}
+
+	// 删除报告章节的品种配置
+	{
+		sql := `DELETE FROM report_chapter_permission_mapping WHERE report_chapter_id = ? `
+		_, err = to.Raw(sql, reportChapterInfo.ReportChapterId).Exec()
+		if err != nil {
+			return
+		}
+	}
+
+	return
+}
+
+// GetReportListCountByAuthorized
+// @Description: 获取有权限的报告列表的报告数量
+// @author: Roc
+// @datetime 2024-05-30 15:14:01
+// @param condition string
+// @param pars []interface{}
+// @return count int
+// @return err error
+func GetReportListCountByAuthorized(condition string, pars []interface{}) (count int, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT COUNT(1) AS count  FROM report as a 
+ WHERE 1=1  `
+	if condition != "" {
+		sql += condition
+	}
+
+	err = o.Raw(sql, pars).QueryRow(&count)
+	return
+}
+
+// GetReportListByAuthorized
+// @Description: 获取有权限的报告列表的数据
+// @author: Roc
+// @datetime 2024-05-30 15:15:07
+// @param condition string
+// @param pars []interface{}
+// @param startSize int
+// @param pageSize int
+// @return items []*ReportList
+// @return err error
+func GetReportListByAuthorized(condition string, pars []interface{}, startSize, pageSize int) (items []*ReportList, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+
+	sql := `SELECT id,classify_id_first,classify_name_first,classify_id_second,classify_name_second,classify_id_third,classify_name_third,title,stage,create_time FROM report as a WHERE 1=1  `
+	if condition != "" {
+		sql += condition
+	}
+	// 排序:1:未发布;2:已发布;3-待提交;4-待审批;5-已驳回;6-已通过
+	sql += ` GROUP BY a.id ORDER BY FIELD(state,3,1,4,5,6,2), modify_time DESC LIMIT ?,?`
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}

+ 9 - 0
routers/commentsRouter.go

@@ -7828,6 +7828,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers:ReportController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers:ReportController"],
+        beego.ControllerComments{
+            Method: "DelChapter",
+            Router: `/chapter/del`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers:ReportController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers:ReportController"],
         beego.ControllerComments{
             Method: "ChapterMove",

+ 0 - 726
services/report.go

@@ -5,7 +5,6 @@ import (
 	"errors"
 	"eta/eta_api/models"
 	"eta/eta_api/models/company"
-	"eta/eta_api/models/report"
 	"eta/eta_api/models/system"
 	"eta/eta_api/services/alarm_msg"
 	"eta/eta_api/services/public_api"
@@ -1149,728 +1148,3 @@ func SaveReportLogs(item *models.Report, chapters []*models.ReportChapter, admin
 	}
 	return
 }
-
-// AddReportAndChapter
-// @Description: 新增报告(包含章节)
-// @author: Roc
-// @datetime 2024-06-04 11:23:20
-// @param reportInfo *models.Report
-// @param inheritReportId int
-// @return err error
-// @return errMsg string
-func AddReportAndChapter(reportInfo *models.Report, inheritReportId int) (err error, errMsg string) {
-	// 获取最小分类id
-	minClassifyId := reportInfo.ClassifyIdThird
-	if minClassifyId <= 0 {
-		minClassifyId = reportInfo.ClassifyIdSecond
-	}
-	if minClassifyId <= 0 {
-		minClassifyId = reportInfo.ClassifyIdFirst
-	}
-	if minClassifyId <= 0 {
-		errMsg = "分类异常"
-		err = errors.New(errMsg)
-		return
-	}
-
-	errMsg = "生成报告失败"
-
-	// 报告继承
-	if inheritReportId > 0 {
-		inheritReport, tmpErr := models.GetReportByReportId(inheritReportId)
-		if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
-			errMsg = "获取待继承的报告失败"
-			err = tmpErr
-			return
-		}
-		if inheritReport != nil {
-			// 判断当前的报告分类与继承的报告分类是否一致
-			if inheritReport.ClassifyIdFirst != reportInfo.ClassifyIdFirst || inheritReport.ClassifyIdSecond != reportInfo.ClassifyIdSecond || inheritReport.ClassifyIdThird != reportInfo.ClassifyIdThird {
-				errMsg = "分类异常,与继承的报告分类不一致"
-				err = tmpErr
-				return
-			}
-
-			reportInfo.ChapterType = inheritReport.ChapterType
-			reportInfo.Content = inheritReport.Content
-			reportInfo.ContentSub = inheritReport.ContentSub
-			reportInfo.ContentStruct = inheritReport.ContentStruct
-			reportInfo.HeadImg = inheritReport.HeadImg
-			reportInfo.EndImg = inheritReport.EndImg
-			reportInfo.CanvasColor = inheritReport.CanvasColor
-			reportInfo.NeedSplice = inheritReport.NeedSplice
-			reportInfo.HeadResourceId = inheritReport.HeadResourceId
-			reportInfo.EndResourceId = inheritReport.EndResourceId
-		}
-	}
-
-	// 获取待生成的报告章节
-	addChapterList, allGrantUserList, err, errMsg := getAddChapter(reportInfo, minClassifyId, inheritReportId)
-
-	// 新增报告及章节
-	var reportId int64
-	reportId, err = models.AddReportAndChapter(reportInfo, allGrantUserList, addChapterList)
-	if err != nil {
-		err = errors.New("新增报告及章节失败, Err: " + err.Error())
-		return
-	}
-	reportCode := utils.MD5(strconv.Itoa(reportInfo.Id))
-	reportInfo.ReportCode = reportCode
-
-	// 修改唯一编码
-	{
-		go models.ModifyReportCode(reportId, reportCode)
-	}
-
-	// TODO 报告权限处理
-	//处理权限
-	//go func() {
-	//	permissionItems, e := models.GetPermission(req.ClassifyIdSecond)
-	//	if e != nil {
-	//		alarm_msg.SendAlarmMsg("获取权限失败,Err:"+e.Error(), 3)
-	//		return
-	//	}
-	//	for _, v := range permissionItems {
-	//		e = models.AddChartPermissionChapterMapping(v.ChartPermissionId, int64(item.Id))
-	//		if e != nil {
-	//			alarm_msg.SendAlarmMsg("新增权限失败,Err:"+e.Error(), 3)
-	//			return
-	//		}
-	//	}
-	//	// 同步crm权限
-	//	_ = EditReportPermissionSync(int64(item.Id), req.ClassifyIdSecond)
-	//}()
-
-	return
-}
-
-// getAddChapter
-// @Description: 获取待新增的报告章节列表
-// @author: Roc
-// @datetime 2024-06-04 13:10:58
-// @param reportInfo *models.Report
-// @param minClassifyId int
-// @param inheritReportId int
-// @return chapterList []*models.ReportChapter
-// @return err error
-// @return errMsg string
-func getAddChapter(reportInfo *models.Report, minClassifyId, inheritReportId int) (chapterList []models.AddReportChapter, allGrantUserList []*report.ReportGrant, err error, errMsg string) {
-	// 待生成的报告章节内容
-	chapterList = make([]models.AddReportChapter, 0)
-	// 所有的授权用户
-
-	allGrantUserList = make([]*report.ReportGrant, 0)
-	if reportInfo.HasChapter != 1 {
-		return
-	}
-
-	// TODO 弘则得单独处理启用禁用的情况
-	//if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox && utils.BusinessCode != utils.BusinessCodeDebug {
-	//	br.Ret = 200
-	//	br.Success = true
-	//	br.Msg = "操作成功"
-	//	return
-	//}
-
-	errMsg = "生成报告章节失败"
-	// 章节类型列表
-	typeList, err := models.GetReportChapterTypeListByClassifyId(minClassifyId)
-	if err != nil {
-		err = errors.New(errMsg)
-		return
-	}
-
-	// 分类章节的授权用户
-	typeGrantListMap := make(map[int][]*report.ReportChapterGrant)
-	// 自定义章节列表
-	customAddChapterList := make([]models.AddReportChapter, 0)
-	// 报告继承
-	inheritChapterMap := make(map[int]*models.ReportChapter)
-	if inheritReportId > 0 {
-		// 继承待继承的报告章节内容
-		inheritReportChapters, tmpErr := models.GetChapterListByReportId(inheritReportId)
-		if tmpErr != nil {
-			errMsg = "获取待继承的报告章节失败"
-			err = tmpErr
-			return
-		}
-		reportChaptersIdList := make([]int, 0)
-		for _, v := range inheritReportChapters {
-			reportChaptersIdList = append(reportChaptersIdList, v.ReportChapterId)
-		}
-
-		// 继承的报告章节用户map
-		grantListMap := make(map[int][]*report.ReportChapterGrant)
-		// 授权数据列表
-		if len(reportChaptersIdList) > 0 {
-			obj := report.ReportChapterGrant{}
-			grantList, tmpErr := obj.GetGrantListByIdList(reportChaptersIdList)
-			if tmpErr != nil {
-				errMsg = "获取待继承的报告章节的授权用户列表失败"
-				err = tmpErr
-				return
-			}
-
-			for _, v := range grantList {
-				currReportChapterId := v.ReportChapterId
-				tmpGrantList, ok := grantListMap[currReportChapterId]
-				if !ok {
-					tmpGrantList = make([]*report.ReportChapterGrant, 0)
-				}
-				v.ReportChapterId = 0
-				v.GrantId = 0
-				tmpGrantList = append(tmpGrantList, v)
-				grantListMap[currReportChapterId] = tmpGrantList
-			}
-		}
-
-		// 继承的报告章节内容
-		for i := 0; i < len(inheritReportChapters); i++ {
-			customChapter := inheritReportChapters[i]
-
-			// 授权用户列表
-			tmpGrantList, ok := grantListMap[customChapter.ReportChapterId]
-			if !ok {
-				tmpGrantList = make([]*report.ReportChapterGrant, 0)
-			}
-			typeGrantListMap[customChapter.TypeId] = tmpGrantList
-
-			// 判断该章节是否是系统章节,如果是的话,那就是需要额外创建的
-			if customChapter.TypeId > 0 {
-				inheritChapterMap[customChapter.TypeId] = customChapter
-				continue
-			}
-
-			// 自定义的报告内容
-			customChapter.ReportId = reportInfo.Id
-			customChapter.ReportChapterId = 0
-			customChapter.ClassifyIdFirst = reportInfo.ClassifyIdFirst
-			customChapter.ClassifyNameFirst = reportInfo.ClassifyNameFirst
-			customChapter.ClassifyIdSecond = reportInfo.ClassifyIdSecond
-			customChapter.ClassifyNameSecond = reportInfo.ClassifyNameSecond
-			customChapter.ClassifyIdThird = reportInfo.ClassifyIdThird
-			customChapter.ClassifyNameThird = reportInfo.ClassifyNameThird
-			customChapter.Stage = reportInfo.Stage
-			customChapter.PublishState = 1
-			customChapter.CreateTime = reportInfo.CreateTime
-			customChapter.ModifyTime = time.Now()
-			customChapter.LastModifyAdminId = reportInfo.LastModifyAdminId
-			customChapter.LastModifyAdminName = reportInfo.LastModifyAdminName
-			customChapter.ContentModifyTime = time.Now()
-
-			customAddChapter := models.AddReportChapter{
-				ReportChapter: customChapter,
-				GrantList:     tmpGrantList,
-			}
-			customAddChapterList = append(customAddChapterList, customAddChapter)
-		}
-	}
-
-	// 最大排序
-	var maxSort int
-	for _, typeItem := range typeList {
-		v := inheritChapterMap[typeItem.ReportChapterTypeId]
-		chapterItem := new(models.ReportChapter)
-		if v != nil {
-			chapterItem.AddType = 2
-			chapterItem.Title = v.Title
-			chapterItem.ReportType = v.ReportType
-			chapterItem.ClassifyIdFirst = reportInfo.ClassifyIdFirst
-			chapterItem.ClassifyNameFirst = reportInfo.ClassifyNameFirst
-			chapterItem.ClassifyIdSecond = reportInfo.ClassifyIdSecond
-			chapterItem.ClassifyNameSecond = reportInfo.ClassifyNameSecond
-			chapterItem.ClassifyIdThird = reportInfo.ClassifyIdThird
-			chapterItem.ClassifyNameThird = reportInfo.ClassifyNameThird
-			chapterItem.TypeId = typeItem.ReportChapterTypeId
-			chapterItem.TypeName = typeItem.ReportChapterTypeName
-			chapterItem.Content = v.Content
-			chapterItem.ContentSub = v.ContentSub
-			chapterItem.Stage = reportInfo.Stage
-			chapterItem.PublishState = 1
-			chapterItem.Sort = typeItem.Sort
-			chapterItem.CreateTime = reportInfo.CreateTime
-			chapterItem.ModifyTime = time.Now()
-
-			chapterItem.LastModifyAdminId = reportInfo.LastModifyAdminId
-			chapterItem.LastModifyAdminName = reportInfo.LastModifyAdminName
-			chapterItem.ContentModifyTime = time.Now()
-			chapterItem.ContentStruct = v.ContentStruct
-			chapterItem.CanvasColor = v.CanvasColor
-			chapterItem.HeadResourceId = v.HeadResourceId
-			chapterItem.EndResourceId = v.EndResourceId
-			chapterItem.CollaborateType = v.CollaborateType
-			chapterItem.ReportLayout = v.ReportLayout
-			chapterItem.ReportCreateTime = time.Now()
-		} else {
-			chapterItem.AddType = 1
-			//chapterItem.ReportType = reportType
-			chapterItem.ClassifyIdFirst = reportInfo.ClassifyIdFirst
-			chapterItem.ClassifyNameFirst = reportInfo.ClassifyNameFirst
-			chapterItem.ClassifyIdSecond = reportInfo.ClassifyIdSecond
-			chapterItem.ClassifyNameSecond = reportInfo.ClassifyNameSecond
-			chapterItem.ClassifyIdThird = reportInfo.ClassifyIdThird
-			chapterItem.ClassifyNameThird = reportInfo.ClassifyNameThird
-			chapterItem.TypeId = typeItem.ReportChapterTypeId
-			chapterItem.TypeName = typeItem.ReportChapterTypeName
-			chapterItem.Stage = reportInfo.Stage
-			chapterItem.PublishState = 1
-			chapterItem.Sort = typeItem.Sort
-			chapterItem.CreateTime = reportInfo.CreateTime
-			chapterItem.ModifyTime = time.Now()
-
-			chapterItem.LastModifyAdminId = reportInfo.LastModifyAdminId
-			chapterItem.LastModifyAdminName = reportInfo.LastModifyAdminName
-			chapterItem.ContentModifyTime = time.Now()
-			//chapterItem.ContentStruct = v.ContentStruct
-			//chapterItem.HeadImg = v.HeadImg
-			//chapterItem.EndImg = v.EndImg
-			//chapterItem.CanvasColor = v.CanvasColor
-			//chapterItem.HeadResourceId = v.HeadResourceId
-			//chapterItem.EndResourceId = v.EndResourceId
-			chapterItem.CollaborateType = reportInfo.CollaborateType
-			chapterItem.ReportLayout = reportInfo.ReportLayout
-			chapterItem.ReportCreateTime = time.Now()
-		}
-
-		if typeItem.Sort > maxSort {
-			maxSort = typeItem.Sort
-		}
-
-		// 授权用户列表
-		tmpGrantList, ok := typeGrantListMap[chapterItem.TypeId]
-		if !ok {
-			tmpGrantList = make([]*report.ReportChapterGrant, 0)
-		}
-		addChapter := models.AddReportChapter{
-			ReportChapter: chapterItem,
-			GrantList:     tmpGrantList,
-		}
-
-		chapterList = append(chapterList, addChapter)
-	}
-
-	// 将自定义的章节内容添加到待生成的章节内容中
-	for _, addChapterItem := range customAddChapterList {
-		maxSort++
-		addChapterItem.ReportChapter.Sort = maxSort
-		chapterList = append(chapterList, addChapterItem)
-	}
-
-	hasGrantUserMap := make(map[int]bool)
-	for _, grantList := range typeGrantListMap {
-		for _, grant := range grantList {
-			if _, ok := hasGrantUserMap[grant.AdminId]; !ok {
-				allGrantUserList = append(allGrantUserList, &report.ReportGrant{
-					//GrantId:      0,
-					//ReportId:     0,
-					AdminId:    grant.AdminId,
-					CreateTime: time.Now(),
-				})
-			}
-		}
-	}
-
-	return
-}
-
-// EditChapterBaseInfoAndPermission
-// @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 EditChapterBaseInfoAndPermission(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
-}
-
-// 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
-//			}
-//		}
-//	}
-//
-//	// 待移除的报告授权数据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 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
-//}

+ 692 - 0
services/report_v2.go

@@ -0,0 +1,692 @@
+package services
+
+import (
+	"errors"
+	"eta/eta_api/models"
+	"eta/eta_api/models/report"
+	"eta/eta_api/models/system"
+	"eta/eta_api/utils"
+	"strconv"
+	"time"
+)
+
+// AddReportAndChapter
+// @Description: 新增报告(包含章节)
+// @author: Roc
+// @datetime 2024-06-04 11:23:20
+// @param reportInfo *models.Report
+// @param inheritReportId int
+// @return err error
+// @return errMsg string
+func AddReportAndChapter(reportInfo *models.Report, inheritReportId int, grantAdminIdList []int) (err error, errMsg string) {
+	// 获取最小分类id
+	minClassifyId := reportInfo.ClassifyIdThird
+	if minClassifyId <= 0 {
+		minClassifyId = reportInfo.ClassifyIdSecond
+	}
+	if minClassifyId <= 0 {
+		minClassifyId = reportInfo.ClassifyIdFirst
+	}
+	if minClassifyId <= 0 {
+		errMsg = "分类异常"
+		err = errors.New(errMsg)
+		return
+	}
+
+	errMsg = "生成报告失败"
+
+	// 报告继承
+	if inheritReportId > 0 {
+		inheritReport, tmpErr := models.GetReportByReportId(inheritReportId)
+		if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
+			errMsg = "获取待继承的报告失败"
+			err = tmpErr
+			return
+		}
+		if inheritReport != nil {
+			// 判断当前的报告分类与继承的报告分类是否一致
+			if inheritReport.ClassifyIdFirst != reportInfo.ClassifyIdFirst || inheritReport.ClassifyIdSecond != reportInfo.ClassifyIdSecond || inheritReport.ClassifyIdThird != reportInfo.ClassifyIdThird {
+				errMsg = "分类异常,与继承的报告分类不一致"
+				err = tmpErr
+				return
+			}
+
+			reportInfo.ChapterType = inheritReport.ChapterType
+			reportInfo.Content = inheritReport.Content
+			reportInfo.ContentSub = inheritReport.ContentSub
+			reportInfo.ContentStruct = inheritReport.ContentStruct
+			reportInfo.HeadImg = inheritReport.HeadImg
+			reportInfo.EndImg = inheritReport.EndImg
+			reportInfo.CanvasColor = inheritReport.CanvasColor
+			reportInfo.NeedSplice = inheritReport.NeedSplice
+			reportInfo.HeadResourceId = inheritReport.HeadResourceId
+			reportInfo.EndResourceId = inheritReport.EndResourceId
+		}
+	}
+
+	// 获取待生成的报告章节
+	addChapterList, allGrantUserList, err, errMsg := getAddChapter(reportInfo, minClassifyId, inheritReportId, grantAdminIdList)
+
+	// 新增报告及章节
+	var reportId int64
+	reportId, err = models.AddReportAndChapter(reportInfo, allGrantUserList, addChapterList)
+	if err != nil {
+		err = errors.New("新增报告及章节失败, Err: " + err.Error())
+		return
+	}
+	reportCode := utils.MD5(strconv.Itoa(reportInfo.Id))
+	reportInfo.ReportCode = reportCode
+
+	// 修改唯一编码
+	{
+		go models.ModifyReportCode(reportId, reportCode)
+	}
+
+	// TODO 报告权限处理
+	//处理权限
+	//go func() {
+	//	permissionItems, e := models.GetPermission(req.ClassifyIdSecond)
+	//	if e != nil {
+	//		alarm_msg.SendAlarmMsg("获取权限失败,Err:"+e.Error(), 3)
+	//		return
+	//	}
+	//	for _, v := range permissionItems {
+	//		e = models.AddChartPermissionChapterMapping(v.ChartPermissionId, int64(item.Id))
+	//		if e != nil {
+	//			alarm_msg.SendAlarmMsg("新增权限失败,Err:"+e.Error(), 3)
+	//			return
+	//		}
+	//	}
+	//	// 同步crm权限
+	//	_ = EditReportPermissionSync(int64(item.Id), req.ClassifyIdSecond)
+	//}()
+
+	return
+}
+
+// EditReport
+// @Description: 修改报告的基础信息、授权用户权限
+// @author: Roc
+// @datetime 2024-06-06 17:16:58
+// @param reportInfo *models.Report
+// @param req models.EditReq
+// @param sysUser *system.Admin
+// @return err error
+// @return errMsg string
+func EditReport(reportInfo *models.Report, req models.EditReq, sysUser *system.Admin) (err error, errMsg string) {
+	errMsg = `保存失败`
+	var stage int
+	if reportInfo.ClassifyNameFirst != req.ClassifyNameFirst || reportInfo.ClassifyNameSecond != req.ClassifyNameSecond {
+		// 报告期数
+		maxStage, _ := models.GetReportStageEdit(req.ClassifyIdFirst, req.ClassifyIdSecond, req.ClassifyIdThird, int(req.ReportId))
+		maxStage = maxStage + 1
+		stage = maxStage
+	} else {
+		stage = reportInfo.Stage
+	}
+	//if req.State != reportInfo.State {
+	//	recordItem := &models.ReportStateRecord{
+	//		ReportId:   int(req.ReportId),
+	//		ReportType: 1,
+	//		State:      req.State,
+	//		AdminId:    this.SysUser.AdminId,
+	//		AdminName:  this.SysUser.AdminName,
+	//		CreateTime: time.Now(),
+	//	}
+	//	go func() {
+	//		_, _ = models.AddReportStateRecord(recordItem)
+	//	}()
+	//}
+
+	//item := new(models.Report)
+	reportInfo.ClassifyIdFirst = req.ClassifyIdFirst
+	reportInfo.ClassifyNameFirst = req.ClassifyNameFirst
+	reportInfo.ClassifyIdSecond = req.ClassifyIdSecond
+	reportInfo.ClassifyNameSecond = req.ClassifyNameSecond
+	reportInfo.ClassifyIdThird = req.ClassifyIdThird
+	reportInfo.ClassifyNameThird = req.ClassifyNameThird
+	reportInfo.Title = req.Title
+	reportInfo.Abstract = req.Abstract
+	reportInfo.Author = req.Author
+	reportInfo.Frequency = req.Frequency
+	//reportInfo.State = reportInfo.State // 编辑不变更状态
+	reportInfo.Stage = stage // 编辑不变更期数
+	//reportInfo.Content = html.EscapeString(req.Content)	// 编辑不变更具体内容
+	//reportInfo.ContentSub = html.EscapeString(contentSub)	// 编辑不变更具体内容
+	reportInfo.CreateTime = req.CreateTime
+	//reportInfo.CollaborateType = req.CollaborateType
+	//reportInfo.ReportLayout = req.ReportLayout
+	if req.IsPublicPublish <= 0 {
+		req.IsPublicPublish = 1
+	}
+	reportInfo.IsPublicPublish = req.IsPublicPublish
+	reportInfo.LastModifyAdminId = sysUser.AdminId
+	reportInfo.LastModifyAdminName = sysUser.RealName
+	reportInfo.ModifyTime = time.Now()
+
+	updateCols := []string{"ClassifyIdFirst", "ClassifyNameFirst", "ClassifyIdSecond", "ClassifyNameSecond", "ClassifyIdThird", "ClassifyNameThird", "Title", "Abstract", "Author", "Frequency", "Stage", "CreateTime", "IsPublicPublish", "LastModifyAdminId", "LastModifyAdminName", "ModifyTime"}
+
+	// 需要添加的报告授权数据
+	addReportAdminList := make([]*report.ReportGrant, 0)
+	// 待移除的报告授权数据id
+	delReportGrantIdList := make([]int, 0)
+
+	// 处理当前报告需要新增/移除的授权信息
+	{
+		reportGrantObj := report.ReportGrant{}
+		// 获取当前报告已经授权的用户信息
+		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 req.GrantAdminIdList {
+			_, ok := currReportAdminMap[tmpAdminId]
+			// 如果章节中需要新增的用户 已经在 报告授权用户里面,那么就忽略,可以不用新增了
+			if ok {
+				delete(delReportAdminMap, tmpAdminId)
+				continue
+			}
+
+			// 如果不存在,那么就新增授权
+			addReportAdminList = append(addReportAdminList, &report.ReportGrant{
+				//GrantId:         0,
+				ReportId:   reportInfo.Id,
+				AdminId:    tmpAdminId,
+				CreateTime: time.Now(),
+			})
+		}
+
+		// 查出需要移除的授权id
+		for _, v := range delReportAdminMap {
+			delReportGrantIdList = append(delReportGrantIdList, v.GrantId)
+		}
+	}
+
+	// 修改报告的基本信息,以及报告的授权用户
+	err = models.EditReportAndPermission(reportInfo, updateCols, addReportAdminList, delReportGrantIdList)
+	if err != nil {
+		return
+	}
+	// TODO 权限处理
+	//处理权限
+	//go func() {
+	//	e := models.RemoveChartPermissionChapterMapping(req.ReportId)
+	//	if e != nil {
+	//		alarm_msg.SendAlarmMsg("修改删除报告权限失败,Err:"+e.Error(), 3)
+	//		return
+	//	}
+	//	permissionItems, e := models.GetPermission(req.ClassifyIdSecond)
+	//	if e != nil {
+	//		alarm_msg.SendAlarmMsg("获取权限失败,Err:"+e.Error(), 3)
+	//		return
+	//	}
+	//	for _, v := range permissionItems {
+	//		e = models.AddChartPermissionChapterMapping(v.ChartPermissionId, req.ReportId)
+	//		if e != nil {
+	//			alarm_msg.SendAlarmMsg("新增权限失败,Err:"+e.Error(), 3)
+	//			return
+	//		}
+	//	}
+	//	// 同步crm权限
+	//	_ = services.EditReportPermissionSync(req.ReportId, req.ClassifyIdSecond)
+	//}()
+
+	return
+}
+
+// getAddChapter
+// @Description: 获取待新增的报告章节列表
+// @author: Roc
+// @datetime 2024-06-04 13:10:58
+// @param reportInfo *models.Report
+// @param minClassifyId int
+// @param inheritReportId int
+// @param grantAdminIdList []int
+// @return chapterList []*models.ReportChapter
+// @return err error
+// @return errMsg string
+func getAddChapter(reportInfo *models.Report, minClassifyId, inheritReportId int, grantAdminIdList []int) (chapterList []models.AddReportChapter, allGrantUserList []*report.ReportGrant, err error, errMsg string) {
+	// 待生成的报告章节内容
+	chapterList = make([]models.AddReportChapter, 0)
+
+	// 所有的授权用户
+	allGrantUserList = make([]*report.ReportGrant, 0)
+	// 报告授权的用户ID
+	needAdminIdMap := make(map[int]bool)
+	for _, adminId := range grantAdminIdList {
+		needAdminIdMap[adminId] = true
+		allGrantUserList = append(allGrantUserList, &report.ReportGrant{
+			//GrantId:      0,
+			//ReportId:     0,
+			AdminId:    adminId,
+			CreateTime: time.Now(),
+		})
+	}
+	if reportInfo.HasChapter != 1 {
+		return
+	}
+
+	// TODO 弘则得单独处理启用禁用的情况
+	//if utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeSandbox && utils.BusinessCode != utils.BusinessCodeDebug {
+	//	br.Ret = 200
+	//	br.Success = true
+	//	br.Msg = "操作成功"
+	//	return
+	//}
+
+	errMsg = "生成报告章节失败"
+	// 章节类型列表
+	typeList, err := models.GetReportChapterTypeListByClassifyId(minClassifyId)
+	if err != nil {
+		err = errors.New(errMsg)
+		return
+	}
+
+	// 分类章节的授权用户
+	typeGrantListMap := make(map[int][]*report.ReportChapterGrant)
+	// 自定义章节列表
+	customAddChapterList := make([]models.AddReportChapter, 0)
+	// 报告继承
+	inheritChapterMap := make(map[int]*models.ReportChapter)
+	if inheritReportId > 0 {
+		// 继承待继承的报告章节内容
+		inheritReportChapters, tmpErr := models.GetChapterListByReportId(inheritReportId)
+		if tmpErr != nil {
+			errMsg = "获取待继承的报告章节失败"
+			err = tmpErr
+			return
+		}
+		reportChaptersIdList := make([]int, 0)
+		for _, v := range inheritReportChapters {
+			reportChaptersIdList = append(reportChaptersIdList, v.ReportChapterId)
+		}
+
+		// 继承的报告章节用户map
+		grantListMap := make(map[int][]*report.ReportChapterGrant)
+		// 授权数据列表
+		if len(reportChaptersIdList) > 0 {
+			obj := report.ReportChapterGrant{}
+			grantList, tmpErr := obj.GetGrantListByIdList(reportChaptersIdList)
+			if tmpErr != nil {
+				errMsg = "获取待继承的报告章节的授权用户列表失败"
+				err = tmpErr
+				return
+			}
+
+			for _, v := range grantList {
+				// 如果不在报告授权的用户ID里面,那么该章节就不继承该授权用户
+				if _, ok := needAdminIdMap[v.AdminId]; !ok {
+					continue
+				}
+
+				currReportChapterId := v.ReportChapterId
+				tmpGrantList, ok := grantListMap[currReportChapterId]
+				if !ok {
+					tmpGrantList = make([]*report.ReportChapterGrant, 0)
+				}
+				v.ReportChapterId = 0
+				v.GrantId = 0
+				tmpGrantList = append(tmpGrantList, v)
+				grantListMap[currReportChapterId] = tmpGrantList
+			}
+		}
+
+		// 继承的报告章节内容
+		for i := 0; i < len(inheritReportChapters); i++ {
+			customChapter := inheritReportChapters[i]
+
+			// 授权用户列表
+			tmpGrantList, ok := grantListMap[customChapter.ReportChapterId]
+			if !ok {
+				tmpGrantList = make([]*report.ReportChapterGrant, 0)
+			}
+			typeGrantListMap[customChapter.TypeId] = tmpGrantList
+
+			// 判断该章节是否是系统章节,如果是的话,那就是需要额外创建的
+			if customChapter.TypeId > 0 {
+				inheritChapterMap[customChapter.TypeId] = customChapter
+				continue
+			}
+
+			// 自定义的报告内容
+			customChapter.ReportId = reportInfo.Id
+			customChapter.ReportChapterId = 0
+			customChapter.ClassifyIdFirst = reportInfo.ClassifyIdFirst
+			customChapter.ClassifyNameFirst = reportInfo.ClassifyNameFirst
+			customChapter.ClassifyIdSecond = reportInfo.ClassifyIdSecond
+			customChapter.ClassifyNameSecond = reportInfo.ClassifyNameSecond
+			customChapter.ClassifyIdThird = reportInfo.ClassifyIdThird
+			customChapter.ClassifyNameThird = reportInfo.ClassifyNameThird
+			customChapter.Stage = reportInfo.Stage
+			customChapter.PublishState = 1
+			customChapter.CreateTime = reportInfo.CreateTime
+			customChapter.ModifyTime = time.Now()
+			customChapter.LastModifyAdminId = reportInfo.LastModifyAdminId
+			customChapter.LastModifyAdminName = reportInfo.LastModifyAdminName
+			customChapter.ContentModifyTime = time.Now()
+
+			customAddChapter := models.AddReportChapter{
+				ReportChapter: customChapter,
+				GrantList:     tmpGrantList,
+			}
+			customAddChapterList = append(customAddChapterList, customAddChapter)
+		}
+	}
+
+	// 最大排序
+	var maxSort int
+	for _, typeItem := range typeList {
+		v := inheritChapterMap[typeItem.ReportChapterTypeId]
+		chapterItem := new(models.ReportChapter)
+		if v != nil {
+			chapterItem.AddType = 2
+			chapterItem.Title = v.Title
+			chapterItem.ReportType = v.ReportType
+			chapterItem.ClassifyIdFirst = reportInfo.ClassifyIdFirst
+			chapterItem.ClassifyNameFirst = reportInfo.ClassifyNameFirst
+			chapterItem.ClassifyIdSecond = reportInfo.ClassifyIdSecond
+			chapterItem.ClassifyNameSecond = reportInfo.ClassifyNameSecond
+			chapterItem.ClassifyIdThird = reportInfo.ClassifyIdThird
+			chapterItem.ClassifyNameThird = reportInfo.ClassifyNameThird
+			chapterItem.TypeId = typeItem.ReportChapterTypeId
+			chapterItem.TypeName = typeItem.ReportChapterTypeName
+			chapterItem.Content = v.Content
+			chapterItem.ContentSub = v.ContentSub
+			chapterItem.Stage = reportInfo.Stage
+			chapterItem.PublishState = 1
+			chapterItem.Sort = typeItem.Sort
+			chapterItem.CreateTime = reportInfo.CreateTime
+			chapterItem.ModifyTime = time.Now()
+
+			chapterItem.LastModifyAdminId = reportInfo.LastModifyAdminId
+			chapterItem.LastModifyAdminName = reportInfo.LastModifyAdminName
+			chapterItem.ContentModifyTime = time.Now()
+			chapterItem.ContentStruct = v.ContentStruct
+			chapterItem.CanvasColor = v.CanvasColor
+			chapterItem.HeadResourceId = v.HeadResourceId
+			chapterItem.EndResourceId = v.EndResourceId
+			chapterItem.CollaborateType = v.CollaborateType
+			chapterItem.ReportLayout = v.ReportLayout
+			chapterItem.ReportCreateTime = time.Now()
+		} else {
+			chapterItem.AddType = 1
+			//chapterItem.ReportType = reportType
+			chapterItem.ClassifyIdFirst = reportInfo.ClassifyIdFirst
+			chapterItem.ClassifyNameFirst = reportInfo.ClassifyNameFirst
+			chapterItem.ClassifyIdSecond = reportInfo.ClassifyIdSecond
+			chapterItem.ClassifyNameSecond = reportInfo.ClassifyNameSecond
+			chapterItem.ClassifyIdThird = reportInfo.ClassifyIdThird
+			chapterItem.ClassifyNameThird = reportInfo.ClassifyNameThird
+			chapterItem.TypeId = typeItem.ReportChapterTypeId
+			chapterItem.TypeName = typeItem.ReportChapterTypeName
+			chapterItem.Stage = reportInfo.Stage
+			chapterItem.PublishState = 1
+			chapterItem.Sort = typeItem.Sort
+			chapterItem.CreateTime = reportInfo.CreateTime
+			chapterItem.ModifyTime = time.Now()
+
+			chapterItem.LastModifyAdminId = reportInfo.LastModifyAdminId
+			chapterItem.LastModifyAdminName = reportInfo.LastModifyAdminName
+			chapterItem.ContentModifyTime = time.Now()
+			//chapterItem.ContentStruct = v.ContentStruct
+			//chapterItem.HeadImg = v.HeadImg
+			//chapterItem.EndImg = v.EndImg
+			//chapterItem.CanvasColor = v.CanvasColor
+			//chapterItem.HeadResourceId = v.HeadResourceId
+			//chapterItem.EndResourceId = v.EndResourceId
+			chapterItem.CollaborateType = reportInfo.CollaborateType
+			chapterItem.ReportLayout = reportInfo.ReportLayout
+			chapterItem.ReportCreateTime = time.Now()
+		}
+
+		if typeItem.Sort > maxSort {
+			maxSort = typeItem.Sort
+		}
+
+		// 授权用户列表
+		tmpGrantList, ok := typeGrantListMap[chapterItem.TypeId]
+		if !ok {
+			tmpGrantList = make([]*report.ReportChapterGrant, 0)
+		}
+		addChapter := models.AddReportChapter{
+			ReportChapter: chapterItem,
+			GrantList:     tmpGrantList,
+		}
+
+		chapterList = append(chapterList, addChapter)
+	}
+
+	// 将自定义的章节内容添加到待生成的章节内容中
+	for _, addChapterItem := range customAddChapterList {
+		maxSort++
+		addChapterItem.ReportChapter.Sort = maxSort
+		chapterList = append(chapterList, addChapterItem)
+	}
+
+	hasGrantUserMap := make(map[int]bool)
+	for _, grantList := range typeGrantListMap {
+		for _, grant := range grantList {
+			if _, ok := hasGrantUserMap[grant.AdminId]; !ok {
+				allGrantUserList = append(allGrantUserList, &report.ReportGrant{
+					//GrantId:      0,
+					//ReportId:     0,
+					AdminId:    grant.AdminId,
+					CreateTime: time.Now(),
+				})
+			}
+		}
+	}
+
+	return
+}
+
+// EditChapterBaseInfoAndPermission
+// @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 EditChapterBaseInfoAndPermission(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{}
+
+	// 报告授权的用户map
+	reportGrantAdminIdMap := make(map[int]bool)
+	// 获取报告授权的用户信息
+	{
+		// 获取当前报告已经授权的用户信息
+		reportGrantList, tmpErr := reportGrantObj.GetGrantListById(reportInfo.Id)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, v := range reportGrantList {
+			reportGrantAdminIdMap[v.AdminId] = true
+		}
+	}
+
+	// 需要添加的报告章节授权数据
+	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 {
+			// 如果该用户 不在 报告授权的用户map 里面,说明这个用户是要移除的
+			if _, ok := reportGrantAdminIdMap[adminId]; !ok {
+				continue
+			}
+			_, 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
+			}
+		}
+	}
+
+	// 需要添加的报告章节品种权限数据
+	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, addChapterAdminList, addChapterPermissionList, delReportChapterGrantIdList, delChapterPermissionMappingIdList)
+
+	return
+}
+
+// DelChapter
+// @Description: 删除报告章节、授权用户权限、品种权限
+// @author: Roc
+// @datetime 2024-06-06 17:28:37
+// @param reportInfo *models.Report
+// @param reportChapterInfo *models.ReportChapter
+// @param sysUser *system.Admin
+// @return err error
+// @return errMsg string
+func DelChapter(reportInfo *models.Report, reportChapterInfo *models.ReportChapter, sysUser *system.Admin) (err error, errMsg string) {
+	errMsg = "删除失败"
+	if reportInfo.State == 2 {
+		errMsg = "该报告已发布,不允许删除"
+		err = errors.New(errMsg)
+		return
+	}
+
+	reportInfo.LastModifyAdminId = sysUser.AdminId
+	reportInfo.LastModifyAdminName = sysUser.RealName
+	reportInfo.ModifyTime = time.Now()
+	updateReportCols := []string{"LastModifyAdminId", "LastModifyAdminName", "ModifyTime"}
+	err = models.DelChapterAndPermission(reportInfo, updateReportCols, reportChapterInfo)
+
+	return
+}