Forráskód Böngészése

fix: 报告分类、报告审批

hsun 1 éve
szülő
commit
0b2a36780c

+ 62 - 8
controllers/english_report/report.go

@@ -85,6 +85,14 @@ func (this *EnglishReportController) Add() {
 		return
 	}
 
+	// 根据审批开关及审批流判断当前报告状态
+	state, e := services.CheckReportCurrState(report_approve.FlowReportTypeEnglish, req.ClassifyIdFirst, req.ClassifyIdSecond, models.ReportOperateAdd)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "校验报告当前状态失败, Err: " + e.Error()
+		return
+	}
+
 	item := new(models.EnglishReport)
 	item.AddType = req.AddType
 	item.ClassifyIdFirst = req.ClassifyIdFirst
@@ -95,7 +103,7 @@ func (this *EnglishReportController) Add() {
 	item.Abstract = req.Abstract
 	item.Author = req.Author
 	item.Frequency = req.Frequency
-	item.State = req.State
+	item.State = state
 	item.Content = html.EscapeString(req.Content)
 	item.Stage = maxStage + 1
 	item.ContentSub = html.EscapeString(contentSub)
@@ -702,14 +710,33 @@ func (this *EnglishReportController) PublishReport() {
 		} else {
 			publishTime = time.Now().Format(utils.FormatDateTime)
 		}
-		if tmpErr = models.PublishEnglishReportById(report.Id, publishTime); tmpErr != nil {
-			br.Msg = "报告发布失败"
-			br.ErrMsg = "报告发布失败, Err:" + tmpErr.Error() + ", report_id:" + strconv.Itoa(report.Id)
+
+		// 根据审批开关及审批流判断当前报告状态
+		state, e := services.CheckReportCurrState(report_approve.FlowReportTypeEnglish, report.ClassifyIdFirst, report.ClassifyIdSecond, models.ReportOperatePublish)
+		if e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "校验报告当前状态失败, Err: " + e.Error()
 			return
 		}
-		go func() {
-			_ = services.UpdateEnglishReportEs(report.Id, 2)
-		}()
+
+		if state == models.ReportStatePublished {
+			// 发布报告
+			if tmpErr = models.PublishEnglishReportById(report.Id, publishTime); tmpErr != nil {
+				br.Msg = "报告发布失败"
+				br.ErrMsg = "报告发布失败, Err:" + tmpErr.Error() + ", report_id:" + strconv.Itoa(report.Id)
+				return
+			}
+			go func() {
+				_ = services.UpdateEnglishReportEs(report.Id, 2)
+			}()
+		} else {
+			// 从无审批切换为有审批, 状态重置
+			if e = models.ResetEnglishReportById(report.Id, state); tmpErr != nil {
+				br.Msg = "操作失败"
+				br.ErrMsg = fmt.Sprintf("重置英文报告状态失败, Err: %s, ReportId: %d", e.Error(), report.Id)
+				return
+			}
+		}
 	}
 
 	br.Ret = 200
@@ -782,6 +809,18 @@ func (this *EnglishReportController) PrePublishReport() {
 		return
 	}
 
+	// 校验是否开启了审批流
+	opening, e := services.CheckReportOpenApprove(report_approve.FlowReportTypeEnglish, report.ClassifyIdFirst, report.ClassifyIdSecond)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "校验报告是否开启审批流失败, Err: " + e.Error()
+		return
+	}
+	if opening {
+		br.Msg = "报告已开启审批流, 不可设置定时发布"
+		return
+	}
+
 	var tmpErr error
 	if tmpErr = models.SetPrePublishEnglishReportById(report.Id, req.PrePublishTime); tmpErr != nil {
 		br.Msg = "设置定时发布失败"
@@ -817,7 +856,22 @@ func (this *EnglishReportController) PublishCancleReport() {
 		br.ErrMsg = "参数错误,报告id不可为空"
 		return
 	}
-	err = models.PublishCancelEnglishReport(req.ReportIds)
+	reportInfo, err := models.GetEnglishReportById(req.ReportIds)
+	if err != nil {
+		br.Msg = "获取报告信息失败"
+		br.ErrMsg = "获取报告信息失败,Err:" + err.Error()
+		return
+	}
+
+	// 根据审批开关及审批流判断当前报告状态
+	state, e := services.CheckReportCurrState(report_approve.FlowReportTypeEnglish, reportInfo.ClassifyIdFirst, reportInfo.ClassifyIdSecond, models.ReportOperateCancelPublish)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "校验报告当前状态失败, Err: " + e.Error()
+		return
+	}
+
+	err = models.PublishCancelEnglishReport(req.ReportIds, state)
 	if err != nil {
 		br.Msg = "取消发布失败"
 		br.ErrMsg = "取消发布失败,Err:" + err.Error()

+ 71 - 35
controllers/report.go

@@ -3,7 +3,6 @@ package controllers
 import (
 	"encoding/json"
 	"eta/eta_api/models"
-	"eta/eta_api/models/company"
 	"eta/eta_api/models/report_approve"
 	"eta/eta_api/services"
 	"eta/eta_api/services/alarm_msg"
@@ -266,8 +265,7 @@ func (this *ReportController) PublishReport() {
 		return
 	}
 
-	// TODO:根据审批开关及对应分类审批流判断当前报告初始状态
-
+	// 这里实际上不会批量发布了...
 	reportArr := strings.Split(reportIds, ",")
 	tips := ""
 	for _, v := range reportArr {
@@ -307,28 +305,47 @@ func (this *ReportController) PublishReport() {
 				br.ErrMsg = "报告内容为空,不需要生成,report_id:" + strconv.Itoa(report.Id)
 				return
 			}
-			if tmpErr = models.PublishReportById(report.Id, publishTime); tmpErr != nil {
-				br.Msg = "报告发布失败"
-				br.ErrMsg = "报告发布失败, Err:" + tmpErr.Error() + ", report_id:" + strconv.Itoa(report.Id)
+
+			// 根据审批开关及审批流判断当前报告状态
+			state, e := services.CheckReportCurrState(report_approve.FlowReportTypeChinese, report.ClassifyIdFirst, report.ClassifyIdSecond, models.ReportOperatePublish)
+			if e != nil {
+				br.Msg = "操作失败"
+				br.ErrMsg = "校验报告当前状态失败, Err: " + e.Error()
 				return
 			}
 
-			go func() {
-				// 生成音频
-				if report.VideoUrl == "" {
-					_ = services.CreateVideo(report)
+			if state == models.ReportStatePublished {
+				// 发布报告
+				if tmpErr = models.PublishReportById(report.Id, publishTime); tmpErr != nil {
+					br.Msg = "报告发布失败"
+					br.ErrMsg = "报告发布失败, Err:" + tmpErr.Error() + ", report_id:" + strconv.Itoa(report.Id)
+					return
 				}
-				//// 推送找钢网
-				//if utils.RunMode == "release" && (report.ClassifyNameSecond == "知白守黑日评" || report.ClassifyNameSecond == "股债日评") {
-				//	_ = services.ZhaoGangSend(report)
-				//}
-				// 更新报告Es
-				_ = services.UpdateReportEs(report.Id, 2)
-			}()
+				go func() {
+					// 生成音频
+					if report.VideoUrl == "" {
+						_ = services.CreateVideo(report)
+					}
+					//// 推送找钢网
+					//if utils.RunMode == "release" && (report.ClassifyNameSecond == "知白守黑日评" || report.ClassifyNameSecond == "股债日评") {
+					//	_ = services.ZhaoGangSend(report)
+					//}
+					// 更新报告Es
+					_ = services.UpdateReportEs(report.Id, 2)
+				}()
+			} else {
+				// 从无审批切换为有审批, 状态重置
+				if e = models.ResetReportById(report.Id, state); tmpErr != nil {
+					br.Msg = "操作失败"
+					br.ErrMsg = fmt.Sprintf("重置报告状态失败, Err: %s, ReportId: %d", e.Error(), report.Id)
+					return
+				}
+			}
+
 			recordItem := &models.ReportStateRecord{
 				ReportId:   vint,
 				ReportType: 1,
-				State:      2,
+				State:      state,
 				AdminId:    this.SysUser.AdminId,
 				AdminName:  this.SysUser.AdminName,
 				CreateTime: time.Now(),
@@ -382,7 +399,16 @@ func (this *ReportController) PublishCancleReport() {
 	if reportInfo.MsgIsSend == 1 {
 		publishTimeNullFlag = false
 	}
-	err = models.PublishCancleReport(req.ReportIds, publishTimeNullFlag)
+
+	// 根据审批开关及审批流判断当前报告状态
+	state, e := services.CheckReportCurrState(report_approve.FlowReportTypeChinese, reportInfo.ClassifyIdFirst, reportInfo.ClassifyIdSecond, models.ReportOperateCancelPublish)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "校验报告当前状态失败, Err: " + e.Error()
+		return
+	}
+
+	err = models.PublishCancelReport(req.ReportIds, state, publishTimeNullFlag)
 	if err != nil {
 		br.Msg = "取消发布失败"
 		br.ErrMsg = "取消发布失败,Err:" + err.Error()
@@ -393,26 +419,24 @@ func (this *ReportController) PublishCancleReport() {
 		go services.UpdateReportEs(req.ReportIds, 1)
 	}
 
-	// TODO:根据审批开关及对应分类审批流判断当前报告初始状态
-
-	// 获取审批流设置
-	confKey := "approval_flow"
-	confTmp, e := company.GetConfigDetailByCode(confKey)
-	if e != nil {
-		br.Msg = "获取审批流配置失败"
-		br.ErrMsg = "获取审批流配置失败, Err: " + e.Error()
-		return
-	}
-	if confTmp.ConfigValue == "1" || confTmp.ConfigValue == "2" || confTmp.ConfigValue == "3" {
-		br.Msg = "撤销成功"
-	} else {
-		br.Msg = "取消发布成功"
-	}
+	//// 获取审批流设置
+	//confKey := "approval_flow"
+	//confTmp, e := company.GetConfigDetailByCode(confKey)
+	//if e != nil {
+	//	br.Msg = "获取审批流配置失败"
+	//	br.ErrMsg = "获取审批流配置失败, Err: " + e.Error()
+	//	return
+	//}
+	//if confTmp.ConfigValue == "1" || confTmp.ConfigValue == "2" || confTmp.ConfigValue == "3" {
+	//	br.Msg = "撤销成功"
+	//} else {
+	//	br.Msg = "取消发布成功"
+	//}
 
 	recordItem := &models.ReportStateRecord{
 		ReportId:   req.ReportIds,
 		ReportType: 1,
-		State:      1,
+		State:      state,
 		AdminId:    this.SysUser.AdminId,
 		AdminName:  this.SysUser.AdminName,
 		CreateTime: time.Now(),
@@ -3344,6 +3368,18 @@ func (this *ReportController) PrePublishReport() {
 		return
 	}
 
+	// 校验是否开启了审批流
+	opening, e := services.CheckReportOpenApprove(report_approve.FlowReportTypeChinese, report.ClassifyIdFirst, report.ClassifyIdSecond)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "校验报告是否开启审批流失败, Err: " + e.Error()
+		return
+	}
+	if opening {
+		br.Msg = "报告已开启审批流, 不可设置定时发布"
+		return
+	}
+
 	var tmpErr error
 	if tmpErr = models.SetPrePublishReportById(report.Id, req.PrePublishTime, req.PreMsgSend); tmpErr != nil {
 		br.Msg = "设置定时发布失败"

+ 2 - 2
controllers/report_approve/report_approve.go

@@ -76,7 +76,7 @@ func (this *ReportApproveController) List() {
 	for _, v := range cnClassify {
 		cnClassifyIdName[v.Id] = v.ClassifyName
 	}
-	enClassify, e := models.GetAllEnglishClassify()
+	enClassify, e := models.GetEnglishClassifies()
 	if e != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取英文分类失败, Err: " + e.Error()
@@ -487,7 +487,7 @@ func (this *ReportApproveController) Detail() {
 	for _, v := range cnClassify {
 		cnClassifyIdName[v.Id] = v.ClassifyName
 	}
-	enClassify, e := models.GetAllEnglishClassify()
+	enClassify, e := models.GetEnglishClassifies()
 	if e != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取英文分类失败, Err: " + e.Error()

+ 1 - 1
controllers/report_approve/report_approve_flow.go

@@ -120,7 +120,7 @@ func (this *ReportApproveFlowController) List() {
 	for _, v := range cnClassify {
 		cnClassifyIdName[v.Id] = v.ClassifyName
 	}
-	enClassify, e := models.GetAllEnglishClassify()
+	enClassify, e := models.GetEnglishClassifies()
 	if e != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取英文分类失败, Err: " + e.Error()

+ 43 - 6
controllers/smart_report/smart_report.go

@@ -78,6 +78,14 @@ func (this *SmartReportController) Add() {
 	}
 	stageMax += 1
 
+	// 根据审批开关及审批流判断当前报告状态
+	state, e := services.CheckReportCurrState(report_approve.FlowReportTypeSmart, req.ClassifyIdFirst, req.ClassifyIdSecond, models.ReportOperateAdd)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "校验报告当前状态失败, Err: " + e.Error()
+		return
+	}
+
 	item := new(smart_report.SmartReport)
 	item.AddType = req.AddType
 	item.ClassifyIdFirst = req.ClassifyIdFirst
@@ -93,7 +101,7 @@ func (this *SmartReportController) Add() {
 	item.AdminRealName = sysUser.RealName
 	item.LastModifyAdminId = sysUser.AdminId
 	item.LastModifyAdminName = sysUser.RealName
-	item.State = smart_report.SmartReportStateWaitPublish
+	item.State = state
 	item.CreateTime = time.Now().Local()
 	item.ModifyTime = time.Now().Local()
 	// 继承报告
@@ -131,7 +139,7 @@ func (this *SmartReportController) Add() {
 	recordItem := &models.ReportStateRecord{
 		ReportId:   item.SmartReportId,
 		ReportType: 2,
-		State:      smart_report.SmartReportStateWaitPublish,
+		State:      state,
 		AdminId:    this.SysUser.AdminId,
 		AdminName:  this.SysUser.AdminName,
 		CreateTime: time.Now(),
@@ -414,6 +422,13 @@ func (this *SmartReportController) Publish() {
 		br.Msg = "参数有误"
 		return
 	}
+	operate := 0
+	if req.PublishState == smart_report.SmartReportStateWaitPublish {
+		operate = models.ReportOperateCancelPublish
+	}
+	if req.PublishState == smart_report.SmartReportStatePublished {
+		operate = models.ReportOperatePublish
+	}
 
 	ob := new(smart_report.SmartReport)
 	item, e := ob.GetItemById(req.SmartReportId)
@@ -427,10 +442,18 @@ func (this *SmartReportController) Publish() {
 		return
 	}
 
+	// 根据审批开关及审批流判断当前报告状态
+	state, e := services.CheckReportCurrState(report_approve.FlowReportTypeSmart, item.ClassifyIdFirst, item.ClassifyIdSecond, operate)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "校验报告当前状态失败, Err: " + e.Error()
+		return
+	}
+
 	cols := []string{"State", "ModifyTime"}
-	item.State = req.PublishState
+	item.State = state
 	item.ModifyTime = time.Now().Local()
-	if req.PublishState == smart_report.SmartReportStatePublished {
+	if state == smart_report.SmartReportStatePublished {
 		cols = append(cols, "PublishTime")
 		item.PublishTime = time.Now().Local()
 
@@ -440,8 +463,9 @@ func (this *SmartReportController) Publish() {
 		queue.ReportCode = item.ReportCode
 		_ = utils.Rc.LPush(utils.CACHE_CREATE_REPORT_IMGPDF_QUEUE, queue)
 	}
+
 	// 取消发布时同时清除掉Img和PDF的文件地址
-	if req.PublishState == smart_report.SmartReportStateWaitPublish {
+	if state == smart_report.SmartReportStateWaitPublish {
 		cols = append(cols, "DetailImgUrl", "DetailPdfUrl")
 		item.DetailImgUrl = ""
 		item.DetailPdfUrl = ""
@@ -451,10 +475,11 @@ func (this *SmartReportController) Publish() {
 		br.ErrMsg = "更新研报失败, Err: " + e.Error()
 		return
 	}
+
 	recordItem := &models.ReportStateRecord{
 		ReportId:   req.SmartReportId,
 		ReportType: 2,
-		State:      req.PublishState,
+		State:      state,
 		AdminId:    this.SysUser.AdminId,
 		AdminName:  this.SysUser.AdminName,
 		CreateTime: time.Now(),
@@ -556,6 +581,18 @@ func (this *SmartReportController) PrePublish() {
 		return
 	}
 
+	// 校验是否开启了审批流
+	opening, e := services.CheckReportOpenApprove(report_approve.FlowReportTypeSmart, item.ClassifyIdFirst, item.ClassifyIdSecond)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "校验报告是否开启审批流失败, Err: " + e.Error()
+		return
+	}
+	if opening {
+		br.Msg = "报告已开启审批流, 不可设置定时发布"
+		return
+	}
+
 	item.PrePublishTime = preTime
 	item.PreMsgSend = req.PreMsgSend
 	cols := []string{"PrePublishTime", "PreMsgSend"}

+ 0 - 1
models/classify.go

@@ -39,7 +39,6 @@ type Classify struct {
 	RelateTel         int       `description:"是否在电话会中可选: 0-否; 1-是"`
 	RelateVideo       int       `description:"是否在路演视频中可选: 0-否; 1-是"`
 	IsMassSend        int       `description:"1:群发,0:非群发"`
-	RootId            int       `description:"英文分类-一级分类ID"`
 }
 
 type ClassifyAddReq struct {

+ 21 - 5
models/english_report.go

@@ -338,7 +338,7 @@ func GetEnglishReportCountByCondition(condition string, pars []interface{}) (cou
 	return
 }
 
-// 发布报告
+// PublishEnglishReportById 发布报告
 func PublishEnglishReportById(reportId int, publishTime string) (err error) {
 	o := orm.NewOrmUsingDB("rddp")
 	sql := `UPDATE english_report SET state=2,publish_time=?,pre_publish_time=null,modify_time=NOW() WHERE id = ? `
@@ -346,11 +346,19 @@ func PublishEnglishReportById(reportId int, publishTime string) (err error) {
 	return
 }
 
-// 取消发布报告
-func PublishCancelEnglishReport(reportIds int) (err error) {
+// ResetEnglishReportById 重置报告状态
+func ResetEnglishReportById(reportId, state int) (err error) {
 	o := orm.NewOrmUsingDB("rddp")
-	sql := ` UPDATE english_report SET state=1,pre_publish_time=null WHERE id =?  `
-	_, err = o.Raw(sql, reportIds).Exec()
+	sql := `UPDATE english_report SET state = ?, pre_publish_time = null, modify_time = NOW() WHERE id = ?`
+	_, err = o.Raw(sql, state, reportId).Exec()
+	return
+}
+
+// PublishCancelEnglishReport 取消发布报告
+func PublishCancelEnglishReport(reportIds, state int) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := ` UPDATE english_report SET state=?, pre_publish_time=null WHERE id =?  `
+	_, err = o.Raw(sql, state, reportIds).Exec()
 	return
 }
 
@@ -833,3 +841,11 @@ func (m *EnglishReport) GetItemById(id int) (item *EnglishReport, err error) {
 	err = o.Raw(sql, id).QueryRow(&item)
 	return
 }
+
+// GetEnglishClassifies 获取所有英文分类
+func GetEnglishClassifies() (list []*EnglishClassify, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := ` SELECT * FROM english_classify `
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}

+ 14 - 6
models/report.go

@@ -161,16 +161,16 @@ func PublishReport(reportIds []int) (err error) {
 	return
 }
 
-// PublishCancleReport 取消发布报告
-func PublishCancleReport(reportIds int, publishTimeNullFlag bool) (err error) {
+// PublishCancelReport 取消发布报告
+func PublishCancelReport(reportId, state int, publishTimeNullFlag bool) (err error) {
 	o := orm.NewOrmUsingDB("rddp")
 	var sql string
 	if publishTimeNullFlag {
-		sql = ` UPDATE report SET state=1, publish_time=null, pre_publish_time=null, pre_msg_send=0 WHERE id =?`
+		sql = ` UPDATE report SET state=?, publish_time=null, pre_publish_time=null, pre_msg_send=0 WHERE id =?`
 	} else {
-		sql = ` UPDATE report SET state=1, pre_publish_time=null, pre_msg_send=0 WHERE id =?`
+		sql = ` UPDATE report SET state=?, pre_publish_time=null, pre_msg_send=0 WHERE id =?`
 	}
-	_, err = o.Raw(sql, reportIds).Exec()
+	_, err = o.Raw(sql, state, reportId).Exec()
 	return
 }
 
@@ -697,7 +697,7 @@ SELECT DISTINCT report_id FROM report_chapter WHERE publish_state = 2 AND (video
 	return
 }
 
-// 发布报告
+// PublishReportById 发布报告
 func PublishReportById(reportId int, publishTime time.Time) (err error) {
 	o := orm.NewOrmUsingDB("rddp")
 	sql := `UPDATE report SET state = 2, publish_time = ?, pre_publish_time=null, pre_msg_send=0, modify_time = NOW() WHERE id = ? `
@@ -705,6 +705,14 @@ func PublishReportById(reportId int, publishTime time.Time) (err error) {
 	return
 }
 
+// ResetReportById 重置报告状态
+func ResetReportById(reportId, state int) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `UPDATE report SET state = ?, pre_publish_time = null, pre_msg_send = 0, modify_time = NOW() WHERE id = ?`
+	_, err = o.Raw(sql, state, reportId).Exec()
+	return
+}
+
 // GetCommentReportByReportId 查询有留言的报告列表
 func GetCommentReportByReportId(condition string, pars []interface{}, startSize, pageSize int) (list []*Report, err error) {
 	o := orm.NewOrmUsingDB("rddp")

+ 38 - 0
services/report_approve.go

@@ -65,6 +65,36 @@ func CheckReportApproveFlowChange(reportType, classifyFirstId, classifySecondId
 	return
 }
 
+// CheckReportOpenApprove 校验报告是否开启了审批流
+func CheckReportOpenApprove(reportType, firstId, secondId int) (opening bool, err error) {
+	// 获取审批配置
+	confMap, e := models.GetBusinessConf()
+	if e != nil {
+		err = fmt.Errorf("GetBusinessConf err: %s", e.Error())
+		return
+	}
+	openMap := map[string]bool{"false": false, "true": true}
+	openApprove := openMap[confMap[models.BusinessConfIsReportApprove]]
+
+	// 查询对应分类是否有审批流
+	flowOb := new(report_approve.ReportApproveFlow)
+	flowCond := fmt.Sprintf(` AND %s = ? AND %s = ? AND %s = ?`, report_approve.ReportApproveFlowCols.ReportType, report_approve.ReportApproveFlowCols.ClassifyFirstId, report_approve.ReportApproveFlowCols.ClassifySecondId)
+	flowPars := make([]interface{}, 0)
+	flowPars = append(flowPars, reportType, firstId, secondId)
+	flowItem, e := flowOb.GetItemByCondition(flowCond, flowPars, "")
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = fmt.Errorf("ApproveFlow GetItemByCondition err: %s", e.Error())
+		return
+	}
+
+	// 开启审批/有审批流
+	if openApprove && (flowItem != nil || confMap[models.BusinessConfReportApproveType] == models.BusinessConfReportApproveTypeOther) {
+		opening = true
+		return
+	}
+	return
+}
+
 // CheckReportCurrState 校验报告当前应有的状态
 func CheckReportCurrState(reportType, firstId, secondId, operate int) (state int, err error) {
 	// 获取审批配置
@@ -94,6 +124,7 @@ func CheckReportCurrState(reportType, firstId, secondId, operate int) (state int
 			models.ReportOperateAdd:           models.ReportStateWaitSubmit,  // 新增
 			models.ReportOperateEdit:          models.ReportStateWaitSubmit,  // 编辑
 			models.ReportOperatePublish:       models.ReportStateWaitSubmit,  // 发布
+			models.ReportOperateCancelPublish: models.ReportStateWaitSubmit,  // 取消发布
 			models.ReportOperateSubmitApprove: models.ReportStateWaitApprove, // 提审
 			models.ReportOperateCancelApprove: models.ReportStateWaitSubmit,  // 撤回
 		}
@@ -107,6 +138,7 @@ func CheckReportCurrState(reportType, firstId, secondId, operate int) (state int
 		models.ReportOperateAdd:           models.ReportStateUnpublished, // 新增
 		models.ReportOperateEdit:          models.ReportStateUnpublished, // 编辑
 		models.ReportOperatePublish:       models.ReportStatePublished,   // 发布
+		models.ReportOperateCancelPublish: models.ReportStateUnpublished, // 取消发布
 		models.ReportOperateSubmitApprove: models.ReportStateUnpublished, // 提审
 		models.ReportOperateCancelApprove: models.ReportStateUnpublished, // 撤回
 	}
@@ -786,3 +818,9 @@ func BuildNextNodeRecordAndMsg(approveNodeItem *report_approve.ReportApproveNode
 	}()
 	return
 }
+
+// AfterReportApprovePass 报告审批通过后的处理
+func AfterReportApprovePass() (err error) {
+	// TODO: 研报/智能研报生成音频
+	return
+}