hsun пре 1 година
родитељ
комит
64619a0ea8

+ 63 - 10
controllers/ppt_english.go

@@ -5,6 +5,7 @@ import (
 	"eta/eta_mobile/models"
 	"eta/eta_mobile/models/company"
 	"eta/eta_mobile/models/ppt_english"
+	"eta/eta_mobile/services"
 	"eta/eta_mobile/services/ppt"
 	"eta/eta_mobile/utils"
 	"github.com/rdlucklib/rdluck_tools/paging"
@@ -130,7 +131,7 @@ func (this *PptEnglishController) AddPpt() {
 			br.Msg = "请输入目录ID"
 			return
 		}
-		item, err := ppt_english.GetPptEnglishByTitle(req.FirstPage.Title)
+		item, err := ppt_english.GetPptEnglishByTitleAndId(req.FirstPage.Title, this.SysUser.AdminId)
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取数据异常!"
 			br.ErrMsg = "获取数据异常,Err:" + err.Error()
@@ -149,6 +150,7 @@ func (this *PptEnglishController) AddPpt() {
 			ReportType:    req.FirstPage.ReportType,
 			PptDate:       req.FirstPage.PptDate,
 			Content:       req.Content,
+			CoverContent:  req.CoverContent,
 			CreateTime:    time.Now(),
 			ModifyTime:    time.Now(),
 			AdminId:       this.SysUser.AdminId,
@@ -182,9 +184,10 @@ func (this *PptEnglishController) AddPpt() {
 		pptInfo.ReportType = req.FirstPage.ReportType
 		pptInfo.PptDate = req.FirstPage.PptDate
 		pptInfo.Content = req.Content
+		pptInfo.CoverContent = req.CoverContent
 		pptInfo.ModifyTime = time.Now()
 
-		err = pptInfo.Update([]string{"TemplateType", "BackgroundImg", "Title", "ReportType", "PptDate", "Content", "ModifyTime"})
+		err = pptInfo.Update([]string{"TemplateType", "BackgroundImg", "Title", "ReportType", "PptDate", "Content", "ModifyTime", "CoverContent"})
 
 		msg = "保存成功"
 	}
@@ -220,7 +223,7 @@ func (this *PptEnglishController) EditPpt() {
 		br.Msg = "标题不能为空"
 		return
 	}
-	item, err := ppt_english.GetPptEnglishByTitle(req.FirstPage.Title)
+	item, err := ppt_english.GetPptEnglishByTitleAndId(req.FirstPage.Title, this.SysUser.AdminId)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "获取数据异常!"
 		br.ErrMsg = "获取数据异常,Err:" + err.Error()
@@ -261,8 +264,9 @@ func (this *PptEnglishController) EditPpt() {
 	pptInfo.ReportType = req.FirstPage.ReportType
 	pptInfo.PptDate = req.FirstPage.PptDate
 	pptInfo.Content = req.Content
+	pptInfo.CoverContent = req.CoverContent
 	pptInfo.ModifyTime = time.Now()
-	err = pptInfo.Update([]string{"TemplateType", "BackgroundImg", "Title", "ReportType", "PptDate", "Content", "ModifyTime"})
+	err = pptInfo.Update([]string{"TemplateType", "BackgroundImg", "Title", "ReportType", "PptDate", "Content", "ModifyTime", "CoverContent"})
 	if err != nil {
 		br.Msg = "编辑失败"
 		br.ErrMsg = "编辑失败,Err:" + err.Error()
@@ -279,6 +283,7 @@ func (this *PptEnglishController) EditPpt() {
 			ReportType:    pptInfo.ReportType,
 			PptDate:       pptInfo.PptDate,
 			Content:       pptInfo.Content,
+			CoverContent:  pptInfo.CoverContent,
 			AdminId:       this.SysUser.AdminId,
 			AdminRealName: this.SysUser.RealName,
 			CreateTime:    time.Now(),
@@ -356,9 +361,19 @@ func (this *PptEnglishController) DeletePpt() {
 func (this *PptEnglishController) DetailPpt() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
 	pptId, _ := this.GetInt("PptId")
 
 	pptInfo, err := ppt_english.GetPptEnglishById(pptId)
@@ -368,10 +383,21 @@ func (this *PptEnglishController) DetailPpt() {
 		return
 	}
 
+	// 查询编辑中
+	editor, e := services.UpdatePptEditing(pptId, 0, sysUser.AdminId, sysUser.RealName, true)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "更新编辑状态失败, err: " + e.Error()
+		return
+	}
+	resp := new(ppt_english.EnglishPPTDetailResp)
+	resp.PptEnglish = pptInfo
+	resp.Editor = editor
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"
-	br.Data = pptInfo
+	br.Data = resp
 }
 
 // DownloadPptx
@@ -464,9 +490,19 @@ func (this *PptEnglishController) Publish() {
 func (this *PptEnglishController) SaveLog() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
 	var req ppt_english.AddPptEnglishReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	if err != nil {
@@ -480,7 +516,7 @@ func (this *PptEnglishController) SaveLog() {
 	}
 
 	// 获取ppt
-	item, err := ppt_english.GetPptEnglishByTitle(req.FirstPage.Title)
+	item, err := ppt_english.GetPptEnglishByTitleAndId(req.FirstPage.Title, this.SysUser.AdminId)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "获取数据异常!"
 		br.ErrMsg = "获取数据异常,Err:" + err.Error()
@@ -493,12 +529,26 @@ func (this *PptEnglishController) SaveLog() {
 	}
 
 	//变更ppt内容
-	_, err = ppt_english.GetPptEnglishById(int(req.PptId))
-	if err != nil {
+	pptItem, e := ppt_english.GetPptEnglishById(int(req.PptId))
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "PPT已被删除, 请刷新页面"
+			return
+		}
 		br.Msg = "信息获取失败"
-		br.ErrMsg = "信息获取失败,Err:" + err.Error()
+		br.ErrMsg = "信息获取失败,Err:" + e.Error()
 		return
 	}
+
+	// 标记编辑状态
+	if pptItem.PptId > 0 {
+		_, e = services.UpdatePptEditing(pptItem.PptId, 1, sysUser.AdminId, sysUser.RealName, true)
+		if e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "更新编辑状态失败, err: " + e.Error()
+			return
+		}
+	}
 	//pptInfo.TemplateType = req.FirstPage.TemplateType
 	//pptInfo.BackgroundImg = req.FirstPage.ImgUrl
 	//pptInfo.Title = req.FirstPage.Title
@@ -517,13 +567,16 @@ func (this *PptEnglishController) SaveLog() {
 		ReportType:    req.FirstPage.ReportType,
 		PptDate:       req.FirstPage.PptDate,
 		Content:       req.Content,
+		CoverContent:  req.CoverContent,
 		AdminId:       this.SysUser.AdminId,
 		AdminRealName: this.SysUser.RealName,
 		CreateTime:    time.Now(),
 	}
 	_, err = ppt_english.AddPptEnglishSaveLog(logInfo)
 	if err != nil {
-
+		br.Msg = "保存失败"
+		br.ErrMsg = "保存PPT日志失败, Err: " + err.Error()
+		return
 	}
 	br.Ret = 200
 	br.Success = true

+ 87 - 14
controllers/ppt_v2.go

@@ -5,6 +5,7 @@ import (
 	"eta/eta_mobile/models"
 	"eta/eta_mobile/models/company"
 	"eta/eta_mobile/models/ppt_english"
+	"eta/eta_mobile/services"
 	"eta/eta_mobile/services/ppt"
 	"eta/eta_mobile/utils"
 	"fmt"
@@ -130,13 +131,13 @@ func (this *PptV2Controller) AddPpt() {
 			br.Msg = "请输入目录ID"
 			return
 		}
-		item, err := models.GetPptV2ByTitle(req.FirstPage.Title)
+		item, err := models.GetPptV2ByTitleAndId(req.FirstPage.Title, this.SysUser.AdminId)
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取数据异常!"
 			br.ErrMsg = "获取数据异常,Err:" + err.Error()
 			return
 		}
-		if item != nil {
+		if item != nil && item.PptId != int(req.PptId) {
 			br.Msg = "标题已存在,不可重复添加"
 			br.IsSendEmail = false
 			return
@@ -149,6 +150,7 @@ func (this *PptV2Controller) AddPpt() {
 			ReportType:    req.FirstPage.ReportType,
 			PptDate:       req.FirstPage.PptDate,
 			Content:       req.Content,
+			CoverContent:  req.CoverContent,
 			CreateTime:    time.Now(),
 			ModifyTime:    time.Now(),
 			AdminId:       this.SysUser.AdminId,
@@ -183,9 +185,10 @@ func (this *PptV2Controller) AddPpt() {
 		pptInfo.ReportType = req.FirstPage.ReportType
 		pptInfo.PptDate = req.FirstPage.PptDate
 		pptInfo.Content = req.Content
+		pptInfo.CoverContent = req.CoverContent
 		pptInfo.ModifyTime = time.Now()
 
-		err = pptInfo.Update([]string{"TemplateType", "BackgroundImg", "Title", "ReportType", "PptDate", "Content", "ModifyTime"})
+		err = pptInfo.Update([]string{"TemplateType", "BackgroundImg", "Title", "ReportType", "PptDate", "Content", "ModifyTime", "CoverContent"})
 
 		msg = "保存成功"
 	}
@@ -221,7 +224,7 @@ func (this *PptV2Controller) EditPpt() {
 		br.Msg = "标题不能为空"
 		return
 	}
-	item, err := models.GetPptV2ByTitle(req.FirstPage.Title)
+	item, err := models.GetPptV2ByTitleAndId(req.FirstPage.Title, this.SysUser.AdminId)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "获取数据异常!"
 		br.ErrMsg = "获取数据异常,Err:" + err.Error()
@@ -262,8 +265,9 @@ func (this *PptV2Controller) EditPpt() {
 	pptInfo.ReportType = req.FirstPage.ReportType
 	pptInfo.PptDate = req.FirstPage.PptDate
 	pptInfo.Content = req.Content
+	pptInfo.CoverContent = req.CoverContent
 	pptInfo.ModifyTime = time.Now()
-	err = pptInfo.Update([]string{"TemplateType", "BackgroundImg", "Title", "ReportType", "PptDate", "Content", "ModifyTime"})
+	err = pptInfo.Update([]string{"TemplateType", "BackgroundImg", "Title", "ReportType", "PptDate", "Content", "ModifyTime", "CoverContent"})
 	if err != nil {
 		br.Msg = "编辑失败"
 		br.ErrMsg = "编辑失败,Err:" + err.Error()
@@ -280,6 +284,7 @@ func (this *PptV2Controller) EditPpt() {
 			ReportType:    pptInfo.ReportType,
 			PptDate:       pptInfo.PptDate,
 			Content:       pptInfo.Content,
+			CoverContent:  pptInfo.CoverContent,
 			AdminId:       this.SysUser.AdminId,
 			AdminRealName: this.SysUser.RealName,
 			CreateTime:    time.Now(),
@@ -357,9 +362,19 @@ func (this *PptV2Controller) DeletePpt() {
 func (this *PptV2Controller) DetailPpt() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
 	pptId, _ := this.GetInt("PptId")
 
 	pptInfo, err := models.GetPptV2ById(pptId)
@@ -369,10 +384,21 @@ func (this *PptV2Controller) DetailPpt() {
 		return
 	}
 
+	// 编辑中
+	editor, e := services.UpdatePptEditing(pptId, 0, sysUser.AdminId, sysUser.RealName, false)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "更新编辑状态失败, err: " + e.Error()
+		return
+	}
+	resp := new(models.PPTDetailResp)
+	resp.PptV2 = pptInfo
+	resp.Editor = editor
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"
-	br.Data = pptInfo
+	br.Data = resp
 }
 
 // DownloadPptx
@@ -465,9 +491,19 @@ func (this *PptV2Controller) Publish() {
 func (this *PptV2Controller) SaveLog() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
 	var req models.AddPptV2Req
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	if err != nil {
@@ -481,7 +517,7 @@ func (this *PptV2Controller) SaveLog() {
 	}
 
 	// 获取ppt
-	item, err := models.GetPptV2ByTitle(req.FirstPage.Title)
+	item, err := models.GetPptV2ByTitleAndId(req.FirstPage.Title, this.SysUser.AdminId)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "获取数据异常!"
 		br.ErrMsg = "获取数据异常,Err:" + err.Error()
@@ -494,12 +530,26 @@ func (this *PptV2Controller) SaveLog() {
 	}
 
 	//变更ppt内容
-	_, err = models.GetPptV2ById(int(req.PptId))
-	if err != nil {
+	pptItem, e := models.GetPptV2ById(int(req.PptId))
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "PPT已被删除, 请刷新页面"
+			return
+		}
 		br.Msg = "信息获取失败"
-		br.ErrMsg = "信息获取失败,Err:" + err.Error()
+		br.ErrMsg = "信息获取失败,Err:" + e.Error()
 		return
 	}
+
+	// 标记编辑状态
+	if pptItem.PptId > 0 {
+		_, e = services.UpdatePptEditing(pptItem.PptId, 1, sysUser.AdminId, sysUser.RealName, false)
+		if e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "更新编辑状态失败, err: " + e.Error()
+			return
+		}
+	}
 	//pptInfo.TemplateType = req.FirstPage.TemplateType
 	//pptInfo.BackgroundImg = req.FirstPage.ImgUrl
 	//pptInfo.Title = req.FirstPage.Title
@@ -518,13 +568,16 @@ func (this *PptV2Controller) SaveLog() {
 		ReportType:    req.FirstPage.ReportType,
 		PptDate:       req.FirstPage.PptDate,
 		Content:       req.Content,
+		CoverContent:  req.CoverContent,
 		AdminId:       this.SysUser.AdminId,
 		AdminRealName: this.SysUser.RealName,
 		CreateTime:    time.Now(),
 	}
-	_, err = models.AddPptV2SaveLog(logInfo)
-	if err != nil {
-
+	_, e = models.AddPptV2SaveLog(logInfo)
+	if e != nil {
+		br.Msg = "保存失败"
+		br.ErrMsg = "保存PPT日志失败, Err: " + e.Error()
+		return
 	}
 	br.Ret = 200
 	br.Success = true
@@ -774,6 +827,24 @@ func (this *PptV2Controller) ToEn() {
 		return
 	}
 
+	// 从基础配置中取出第一张封面图, 作为英文PPT的图片, 没有则取原PPT背景图
+	conf, e := models.GetBusinessConf()
+	if e != nil {
+		br.Msg = "获取PPT图配置失败"
+		br.ErrMsg = "获取PPT图配置失败, Err: " + e.Error()
+		return
+	}
+	coverImg := ""
+	if conf[models.BusinessConfEnPptCoverImgs] != "" {
+		imgArr := strings.Split(conf[models.BusinessConfEnPptCoverImgs], ",")
+		if len(imgArr) > 0 {
+			coverImg = imgArr[0]
+		}
+	}
+	if coverImg == "" {
+		coverImg = origin.BackgroundImg
+	}
+
 	_, e = ppt_english.GetPptGroupByGroupIdAdminId(int64(req.GroupId), this.SysUser.AdminId)
 	if e != nil {
 		br.Msg = "目录信息有误"
@@ -791,11 +862,12 @@ func (this *PptV2Controller) ToEn() {
 	var newId int64
 	pptInfo := &ppt_english.PptEnglish{
 		TemplateType:  origin.TemplateType,
-		BackgroundImg: origin.BackgroundImg,
+		BackgroundImg: coverImg,
 		Title:         newTitle,
 		ReportType:    origin.ReportType,
 		PptDate:       origin.PptDate,
 		Content:       origin.Content,
+		CoverContent:  origin.CoverContent,
 		CreateTime:    time.Now(),
 		ModifyTime:    time.Now(),
 		AdminId:       this.SysUser.AdminId,
@@ -894,6 +966,7 @@ func (this *PptV2Controller) BatchToEn() {
 			ReportType:    origin.ReportType,
 			PptDate:       origin.PptDate,
 			Content:       origin.Content,
+			CoverContent:  origin.CoverContent,
 			CreateTime:    nowTime,
 			ModifyTime:    nowTime,
 			AdminId:       this.SysUser.AdminId,

+ 27 - 2
models/ppt_english/ppt_english.go

@@ -24,6 +24,7 @@ type PptEnglish struct {
 	ReportCode    string    `description:"关联的报告code"`
 	IsShare       int8      `description:"是否分享,0:不分享,1:分享"`
 	PublishTime   time.Time `description:"发布时间"`
+	CoverContent  string    `description:"PPT内容-JSON"`
 }
 
 type PptEnglishItem struct {
@@ -44,6 +45,7 @@ type PptEnglishItem struct {
 	ReportCode    string    `description:"关联的报告code"`
 	IsShare       int8      `description:"是否分享,0:不分享,1:分享"`
 	PublishTime   time.Time `description:"发布时间"`
+	CoverContent  string    `description:"PPT内容-JSON"`
 }
 
 func GetPptEnglishList(condition string, pars []interface{}, startSize, pageSize int) (items []*PptEnglishItem, err error) {
@@ -112,8 +114,9 @@ type AddPptEnglishReq struct {
 		BackIndex    int    `description:"背景图片下标"`
 		TemplateType int    `description:"模版id"`
 	} `description:"首页"`
-	Content string `description:"ppt的json数据"`
-	GroupId int64  `description:"目录id"`
+	Content      string `description:"ppt的json数据"`
+	GroupId      int64  `description:"目录id"`
+	CoverContent string `description:"PPT内容-JSON"`
 }
 
 type AddPptEnglishResp struct {
@@ -249,6 +252,7 @@ type PptEnglishSaveLog struct {
 	AdminId       int       `description:"系统用户id"`
 	AdminRealName string    `description:"系统用户名称"`
 	CreateTime    time.Time `description:"创建时间"`
+	CoverContent  string    `description:"PPT内容-JSON"`
 }
 
 // AddPptEnglishSaveLog 新增PPT日志
@@ -343,3 +347,24 @@ type EnglishPPT2ReportReq struct {
 	Title            string `description:"标题"`
 	Abstract         string `description:"摘要"`
 }
+
+// PPTEditingCache PPT编辑缓存信息
+type PPTEditingCache struct {
+	IsEditing bool   `description:"是否有人编辑"`
+	AdminId   int    `description:"编辑者ID"`
+	Editor    string `description:"编辑者姓名"`
+	Tips      string `description:"提示信息"`
+}
+
+func GetPptEnglishByTitleAndId(title string, adminId int) (item *PptEnglish, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT * FROM ppt_english WHERE 1=1 AND title=? AND admin_id=? `
+	err = o.Raw(sql, title, adminId).QueryRow(&item)
+	return
+}
+
+// EnglishPPTDetailResp 英文PPT详情响应体
+type EnglishPPTDetailResp struct {
+	*PptEnglish
+	Editor PPTEditingCache `description:"编辑人信息"`
+}

+ 20 - 2
models/ppt_v2.go

@@ -1,6 +1,7 @@
 package models
 
 import (
+	"eta/eta_mobile/models/ppt_english"
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"time"
@@ -26,6 +27,7 @@ type PptV2 struct {
 	ReportCode    string    `description:"关联的报告code"`
 	IsShare       int8      `description:"是否分享,0:不分享,1:分享"`
 	PublishTime   time.Time `description:"发布时间"`
+	CoverContent  string    `description:"PPT内容-JSON"`
 }
 
 type PptV2Item struct {
@@ -48,6 +50,7 @@ type PptV2Item struct {
 	ReportCode    string    `description:"关联的报告code"`
 	IsShare       int8      `description:"是否分享,0:不分享,1:分享"`
 	PublishTime   time.Time `description:"发布时间"`
+	CoverContent  string    `description:"PPT内容-JSON"`
 }
 
 func GetPptV2List(condition string, pars []interface{}, startSize, pageSize int) (items []*PptV2Item, err error) {
@@ -116,8 +119,9 @@ type AddPptV2Req struct {
 		BackIndex    int    `description:"背景图片下标"`
 		TemplateType int    `description:"模版id"`
 	} `description:"首页"`
-	Content string `description:"ppt的json数据"`
-	GroupId int64  `description:"目录id"`
+	Content      string `description:"ppt的json数据"`
+	GroupId      int64  `description:"目录id"`
+	CoverContent string `description:"封面图内容-JSON数据"`
 }
 
 type AddPptV2Resp struct {
@@ -230,6 +234,7 @@ type PptV2SaveLog struct {
 	AdminId       int       `description:"系统用户id"`
 	AdminRealName string    `description:"系统用户名称"`
 	CreateTime    time.Time `description:"创建时间"`
+	CoverContent  string    `description:"PPT内容-JSON"`
 }
 
 // AddPptV2SaveLog 新增PPT日志
@@ -323,3 +328,16 @@ type BatchEnPPT2CnReq struct {
 	PptIds  string `description:"英文PPT主键s"`
 	GroupId int    `description:"目录ID"`
 }
+
+func GetPptV2ByTitleAndId(title string, adminId int) (item *PptV2, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT * FROM ppt_v2 WHERE 1=1 AND title=? AND admin_id=? `
+	err = o.Raw(sql, title, adminId).QueryRow(&item)
+	return
+}
+
+// PPTDetailResp PPT详情响应体
+type PPTDetailResp struct {
+	*PptV2
+	Editor ppt_english.PPTEditingCache `description:"编辑人信息"`
+}

+ 61 - 0
services/ppt.go

@@ -9,6 +9,7 @@ import (
 	"eta/eta_mobile/utils"
 	"fmt"
 	"sort"
+	"time"
 )
 
 const (
@@ -141,3 +142,63 @@ func ResetPPTReport(reportId int, isEnglish bool) (err error) {
 	}
 	return
 }
+
+// UpdatePptEditing 更新PPT编辑状态
+func UpdatePptEditing(pptId, status, userId int, userName string, isEn bool) (ret ppt_english.PPTEditingCache, err error) {
+	if pptId <= 0 {
+		return
+	}
+	cacheKey := ""
+	if isEn {
+		cacheKey = fmt.Sprint(utils.CACHE_EN_PPT_EDITING, pptId)
+	} else {
+		cacheKey = fmt.Sprint(utils.CACHE_PPT_EDITING, pptId)
+	}
+
+	// 完成编辑
+	if status == 2 {
+		_ = utils.Rc.Delete(cacheKey)
+		return
+	}
+
+	// 读取缓存中的结果
+	var editor ppt_english.PPTEditingCache
+	strCache, _ := utils.Rc.RedisString(cacheKey)
+	fmt.Println(strCache)
+	if strCache != "" {
+		e := json.Unmarshal([]byte(strCache), &editor)
+		if e != nil {
+			err = fmt.Errorf("解析缓存内容失败: %s", e.Error())
+			return
+		}
+	}
+
+	// 标记编辑中
+	if status == 1 {
+		// 无人编辑, 写入缓存
+		if !editor.IsEditing {
+			ret.IsEditing = true
+			ret.AdminId = userId
+			ret.Editor = userName
+			ret.Tips = fmt.Sprintf("当前%s正在编辑PPT", userName)
+			b, _ := json.Marshal(ret)
+			utils.Rc.SetNX(cacheKey, string(b), 3*time.Minute)
+			return
+		}
+
+		// 有人编辑
+		if editor.IsEditing {
+			// 编辑用户与当前用户不一致, 返回编辑用户, 一致则更新缓存
+			if userId == editor.AdminId {
+				b, _ := json.Marshal(editor)
+				utils.Rc.Do("SETEX", cacheKey, int64(180), string(b))
+			}
+			ret = editor
+			return
+		}
+	} else {
+		// 默认查询
+		ret = editor
+	}
+	return
+}

+ 2 - 0
services/ppt/ppt_english_group.go

@@ -209,6 +209,7 @@ func CopyEnglishGroup(groupId int64, adminId int, adminRealName string) (err err
 			ReportType:    v.ReportType,
 			PptDate:       v.PptDate,
 			Content:       v.Content,
+			CoverContent:  v.CoverContent,
 			CreateTime:    time.Now(),
 			ModifyTime:    time.Now(),
 			AdminId:       adminId,
@@ -731,6 +732,7 @@ func CopyPptEnglish(pptId int, groupId int64, adminId int, adminRealName string)
 		ReportType:    pptInfo.ReportType,
 		PptDate:       pptInfo.PptDate,
 		Content:       pptInfo.Content,
+		CoverContent:  pptInfo.CoverContent,
 		CreateTime:    time.Now(),
 		ModifyTime:    time.Now(),
 		AdminId:       adminId,

+ 2 - 0
services/ppt/ppt_group.go

@@ -376,6 +376,7 @@ func CopyGroup(groupId int64, adminId int, adminRealName string) (err error) {
 			ReportType:    v.ReportType,
 			PptDate:       v.PptDate,
 			Content:       v.Content,
+			CoverContent:  v.CoverContent,
 			PptUrl:        v.PptUrl,
 			PptxUrl:       v.PptxUrl,
 			CreateTime:    time.Now(),
@@ -924,6 +925,7 @@ func CopyPpt(pptId int, groupId int64, adminId int, adminRealName string) (resp
 		ReportType:    pptInfo.ReportType,
 		PptDate:       pptInfo.PptDate,
 		Content:       pptInfo.Content,
+		CoverContent:  pptInfo.CoverContent,
 		PptUrl:        pptInfo.PptUrl,
 		PptxUrl:       pptInfo.PptxUrl,
 		CreateTime:    time.Now(),

+ 4 - 2
utils/constants.go

@@ -205,6 +205,8 @@ const (
 	CACHE_KEY_MYSTEEL_REFRESH         = "mysteel_chemical:refresh"          //钢联化工刷新
 	CACHE_KEY_DAYNEW_REFRESH          = "admin:day_new:refresh"             //每日资讯拉取企业微信聊天记录
 	CACHE_KEY_DAYNEW_TRANSLATE        = "admin:day_new:translate"           //每日资讯中翻英
+	CACHE_PPT_EDITING                 = "eta:ppt:editing:"                  // PPT用户编辑中
+	CACHE_EN_PPT_EDITING              = "eta:en_ppt:editing:"               // 英文PPT用户编辑中
 )
 
 // 模板消息推送类型
@@ -392,5 +394,5 @@ const (
 
 const (
 	WindDbWsd = "wsd"
-	ThsDs = "thsds"
-)
+	ThsDs     = "thsds"
+)