Browse Source

Merge branch 'master' into feature/eta1.4.6_radar_chart

xyxie 1 year ago
parent
commit
7aeedb2bb9

+ 8 - 1
controllers/data_manage/edb_info.go

@@ -2135,6 +2135,11 @@ func (this *EdbInfoController) EdbInfoAdd() {
 
 
 	//新增操作日志
 	//新增操作日志
 	{
 	{
+		// 添加钢联指标更新日志
+		if edbInfo.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
+			go data_stat.AddEdbInfoUpdateLog(edbInfo.EdbInfoId, 1, "", sysUser, 2)
+		}
+		
 		edbLog := new(data_manage.EdbInfoLog)
 		edbLog := new(data_manage.EdbInfoLog)
 		edbLog.EdbInfoId = edbInfo.EdbInfoId
 		edbLog.EdbInfoId = edbInfo.EdbInfoId
 		edbLog.SourceName = edbInfo.SourceName
 		edbLog.SourceName = edbInfo.SourceName
@@ -2310,7 +2315,9 @@ func (this *EdbInfoController) EdbInfoEdit() {
 
 
 	// 添加钢联指标更新日志
 	// 添加钢联指标更新日志
 	if edbInfo.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
 	if edbInfo.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
-		go data_stat.AddEdbInfoUpdateLog(req.EdbInfoId, 1, "", sysUser)
+		if edbInfo.EdbName != req.EdbName || edbInfo.Frequency != req.Frequency || edbInfo.Unit != req.Unit {
+			go data_stat.AddEdbInfoUpdateLog(req.EdbInfoId, 1, "", sysUser, 1)
+		}
 	}
 	}
 	br.Ret = 200
 	br.Ret = 200
 	br.Success = true
 	br.Success = true

+ 63 - 10
controllers/ppt_english.go

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

+ 87 - 14
controllers/ppt_v2.go

@@ -5,6 +5,7 @@ import (
 	"eta/eta_mobile/models"
 	"eta/eta_mobile/models"
 	"eta/eta_mobile/models/company"
 	"eta/eta_mobile/models/company"
 	"eta/eta_mobile/models/ppt_english"
 	"eta/eta_mobile/models/ppt_english"
+	"eta/eta_mobile/services"
 	"eta/eta_mobile/services/ppt"
 	"eta/eta_mobile/services/ppt"
 	"eta/eta_mobile/utils"
 	"eta/eta_mobile/utils"
 	"fmt"
 	"fmt"
@@ -130,13 +131,13 @@ func (this *PptV2Controller) AddPpt() {
 			br.Msg = "请输入目录ID"
 			br.Msg = "请输入目录ID"
 			return
 			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() {
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取数据异常!"
 			br.Msg = "获取数据异常!"
 			br.ErrMsg = "获取数据异常,Err:" + err.Error()
 			br.ErrMsg = "获取数据异常,Err:" + err.Error()
 			return
 			return
 		}
 		}
-		if item != nil {
+		if item != nil && item.PptId != int(req.PptId) {
 			br.Msg = "标题已存在,不可重复添加"
 			br.Msg = "标题已存在,不可重复添加"
 			br.IsSendEmail = false
 			br.IsSendEmail = false
 			return
 			return
@@ -149,6 +150,7 @@ func (this *PptV2Controller) AddPpt() {
 			ReportType:    req.FirstPage.ReportType,
 			ReportType:    req.FirstPage.ReportType,
 			PptDate:       req.FirstPage.PptDate,
 			PptDate:       req.FirstPage.PptDate,
 			Content:       req.Content,
 			Content:       req.Content,
+			CoverContent:  req.CoverContent,
 			CreateTime:    time.Now(),
 			CreateTime:    time.Now(),
 			ModifyTime:    time.Now(),
 			ModifyTime:    time.Now(),
 			AdminId:       this.SysUser.AdminId,
 			AdminId:       this.SysUser.AdminId,
@@ -183,9 +185,10 @@ func (this *PptV2Controller) AddPpt() {
 		pptInfo.ReportType = req.FirstPage.ReportType
 		pptInfo.ReportType = req.FirstPage.ReportType
 		pptInfo.PptDate = req.FirstPage.PptDate
 		pptInfo.PptDate = req.FirstPage.PptDate
 		pptInfo.Content = req.Content
 		pptInfo.Content = req.Content
+		pptInfo.CoverContent = req.CoverContent
 		pptInfo.ModifyTime = time.Now()
 		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 = "保存成功"
 		msg = "保存成功"
 	}
 	}
@@ -221,7 +224,7 @@ func (this *PptV2Controller) EditPpt() {
 		br.Msg = "标题不能为空"
 		br.Msg = "标题不能为空"
 		return
 		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() {
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "获取数据异常!"
 		br.Msg = "获取数据异常!"
 		br.ErrMsg = "获取数据异常,Err:" + err.Error()
 		br.ErrMsg = "获取数据异常,Err:" + err.Error()
@@ -262,8 +265,9 @@ func (this *PptV2Controller) EditPpt() {
 	pptInfo.ReportType = req.FirstPage.ReportType
 	pptInfo.ReportType = req.FirstPage.ReportType
 	pptInfo.PptDate = req.FirstPage.PptDate
 	pptInfo.PptDate = req.FirstPage.PptDate
 	pptInfo.Content = req.Content
 	pptInfo.Content = req.Content
+	pptInfo.CoverContent = req.CoverContent
 	pptInfo.ModifyTime = time.Now()
 	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 {
 	if err != nil {
 		br.Msg = "编辑失败"
 		br.Msg = "编辑失败"
 		br.ErrMsg = "编辑失败,Err:" + err.Error()
 		br.ErrMsg = "编辑失败,Err:" + err.Error()
@@ -280,6 +284,7 @@ func (this *PptV2Controller) EditPpt() {
 			ReportType:    pptInfo.ReportType,
 			ReportType:    pptInfo.ReportType,
 			PptDate:       pptInfo.PptDate,
 			PptDate:       pptInfo.PptDate,
 			Content:       pptInfo.Content,
 			Content:       pptInfo.Content,
+			CoverContent:  pptInfo.CoverContent,
 			AdminId:       this.SysUser.AdminId,
 			AdminId:       this.SysUser.AdminId,
 			AdminRealName: this.SysUser.RealName,
 			AdminRealName: this.SysUser.RealName,
 			CreateTime:    time.Now(),
 			CreateTime:    time.Now(),
@@ -357,9 +362,19 @@ func (this *PptV2Controller) DeletePpt() {
 func (this *PptV2Controller) DetailPpt() {
 func (this *PptV2Controller) DetailPpt() {
 	br := new(models.BaseResponse).Init()
 	br := new(models.BaseResponse).Init()
 	defer func() {
 	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
 		this.Data["json"] = br
 		this.Data["json"] = br
 		this.ServeJSON()
 		this.ServeJSON()
 	}()
 	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
 	pptId, _ := this.GetInt("PptId")
 	pptId, _ := this.GetInt("PptId")
 
 
 	pptInfo, err := models.GetPptV2ById(pptId)
 	pptInfo, err := models.GetPptV2ById(pptId)
@@ -369,10 +384,21 @@ func (this *PptV2Controller) DetailPpt() {
 		return
 		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.Ret = 200
 	br.Success = true
 	br.Success = true
 	br.Msg = "获取成功"
 	br.Msg = "获取成功"
-	br.Data = pptInfo
+	br.Data = resp
 }
 }
 
 
 // DownloadPptx
 // DownloadPptx
@@ -465,9 +491,19 @@ func (this *PptV2Controller) Publish() {
 func (this *PptV2Controller) SaveLog() {
 func (this *PptV2Controller) SaveLog() {
 	br := new(models.BaseResponse).Init()
 	br := new(models.BaseResponse).Init()
 	defer func() {
 	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
 		this.Data["json"] = br
 		this.Data["json"] = br
 		this.ServeJSON()
 		this.ServeJSON()
 	}()
 	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
 	var req models.AddPptV2Req
 	var req models.AddPptV2Req
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	if err != nil {
 	if err != nil {
@@ -481,7 +517,7 @@ func (this *PptV2Controller) SaveLog() {
 	}
 	}
 
 
 	// 获取ppt
 	// 获取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() {
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "获取数据异常!"
 		br.Msg = "获取数据异常!"
 		br.ErrMsg = "获取数据异常,Err:" + err.Error()
 		br.ErrMsg = "获取数据异常,Err:" + err.Error()
@@ -494,12 +530,26 @@ func (this *PptV2Controller) SaveLog() {
 	}
 	}
 
 
 	//变更ppt内容
 	//变更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.Msg = "信息获取失败"
-		br.ErrMsg = "信息获取失败,Err:" + err.Error()
+		br.ErrMsg = "信息获取失败,Err:" + e.Error()
 		return
 		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.TemplateType = req.FirstPage.TemplateType
 	//pptInfo.BackgroundImg = req.FirstPage.ImgUrl
 	//pptInfo.BackgroundImg = req.FirstPage.ImgUrl
 	//pptInfo.Title = req.FirstPage.Title
 	//pptInfo.Title = req.FirstPage.Title
@@ -518,13 +568,16 @@ func (this *PptV2Controller) SaveLog() {
 		ReportType:    req.FirstPage.ReportType,
 		ReportType:    req.FirstPage.ReportType,
 		PptDate:       req.FirstPage.PptDate,
 		PptDate:       req.FirstPage.PptDate,
 		Content:       req.Content,
 		Content:       req.Content,
+		CoverContent:  req.CoverContent,
 		AdminId:       this.SysUser.AdminId,
 		AdminId:       this.SysUser.AdminId,
 		AdminRealName: this.SysUser.RealName,
 		AdminRealName: this.SysUser.RealName,
 		CreateTime:    time.Now(),
 		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.Ret = 200
 	br.Success = true
 	br.Success = true
@@ -774,6 +827,24 @@ func (this *PptV2Controller) ToEn() {
 		return
 		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)
 	_, e = ppt_english.GetPptGroupByGroupIdAdminId(int64(req.GroupId), this.SysUser.AdminId)
 	if e != nil {
 	if e != nil {
 		br.Msg = "目录信息有误"
 		br.Msg = "目录信息有误"
@@ -791,11 +862,12 @@ func (this *PptV2Controller) ToEn() {
 	var newId int64
 	var newId int64
 	pptInfo := &ppt_english.PptEnglish{
 	pptInfo := &ppt_english.PptEnglish{
 		TemplateType:  origin.TemplateType,
 		TemplateType:  origin.TemplateType,
-		BackgroundImg: origin.BackgroundImg,
+		BackgroundImg: coverImg,
 		Title:         newTitle,
 		Title:         newTitle,
 		ReportType:    origin.ReportType,
 		ReportType:    origin.ReportType,
 		PptDate:       origin.PptDate,
 		PptDate:       origin.PptDate,
 		Content:       origin.Content,
 		Content:       origin.Content,
+		CoverContent:  origin.CoverContent,
 		CreateTime:    time.Now(),
 		CreateTime:    time.Now(),
 		ModifyTime:    time.Now(),
 		ModifyTime:    time.Now(),
 		AdminId:       this.SysUser.AdminId,
 		AdminId:       this.SysUser.AdminId,
@@ -894,6 +966,7 @@ func (this *PptV2Controller) BatchToEn() {
 			ReportType:    origin.ReportType,
 			ReportType:    origin.ReportType,
 			PptDate:       origin.PptDate,
 			PptDate:       origin.PptDate,
 			Content:       origin.Content,
 			Content:       origin.Content,
+			CoverContent:  origin.CoverContent,
 			CreateTime:    nowTime,
 			CreateTime:    nowTime,
 			ModifyTime:    nowTime,
 			ModifyTime:    nowTime,
 			AdminId:       this.SysUser.AdminId,
 			AdminId:       this.SysUser.AdminId,

+ 2 - 0
models/data_stat/edb_info_update_log.go

@@ -36,6 +36,7 @@ type EdbInfoUpdateLog struct {
 	DataUpdateFailedReason string    `description:"数据未正常更新原因"`
 	DataUpdateFailedReason string    `description:"数据未正常更新原因"`
 	DataUpdateTime         string    `description:"数据更新时间"`
 	DataUpdateTime         string    `description:"数据更新时间"`
 	IsSourceRefresh        int       `description:"是否为终端刷新到数据源的刷新操作:0否,1是"`
 	IsSourceRefresh        int       `description:"是否为终端刷新到数据源的刷新操作:0否,1是"`
+	UpdateType             int       `description:"变更类型,0:数据明细变更,1:基础信息变更, 2:新增指标"`
 }
 }
 
 
 type EdbInfoUpdateLogItem struct {
 type EdbInfoUpdateLogItem struct {
@@ -61,6 +62,7 @@ type EdbInfoUpdateLogItem struct {
 	TerminalCode          string  `description:"终端编码,用于配置在机器上"`
 	TerminalCode          string  `description:"终端编码,用于配置在机器上"`
 	DataUpdateTime        string  `description:"最近一次数据发生变化的时间"`
 	DataUpdateTime        string  `description:"最近一次数据发生变化的时间"`
 	ErDataUpdateDate      string  `description:"本次更新,数据发生变化的最早日期"`
 	ErDataUpdateDate      string  `description:"本次更新,数据发生变化的最早日期"`
+	UpdateType            int     `description:"变更类型,0:数据明细变更,1:基础信息变更, 2:新增指标"`
 }
 }
 
 
 func AddEdbUpdateLog(item *EdbInfoUpdateLog) (lastId int64, err error) {
 func AddEdbUpdateLog(item *EdbInfoUpdateLog) (lastId int64, err error) {

+ 27 - 2
models/ppt_english/ppt_english.go

@@ -24,6 +24,7 @@ type PptEnglish struct {
 	ReportCode    string    `description:"关联的报告code"`
 	ReportCode    string    `description:"关联的报告code"`
 	IsShare       int8      `description:"是否分享,0:不分享,1:分享"`
 	IsShare       int8      `description:"是否分享,0:不分享,1:分享"`
 	PublishTime   time.Time `description:"发布时间"`
 	PublishTime   time.Time `description:"发布时间"`
+	CoverContent  string    `description:"PPT内容-JSON"`
 }
 }
 
 
 type PptEnglishItem struct {
 type PptEnglishItem struct {
@@ -44,6 +45,7 @@ type PptEnglishItem struct {
 	ReportCode    string    `description:"关联的报告code"`
 	ReportCode    string    `description:"关联的报告code"`
 	IsShare       int8      `description:"是否分享,0:不分享,1:分享"`
 	IsShare       int8      `description:"是否分享,0:不分享,1:分享"`
 	PublishTime   time.Time `description:"发布时间"`
 	PublishTime   time.Time `description:"发布时间"`
+	CoverContent  string    `description:"PPT内容-JSON"`
 }
 }
 
 
 func GetPptEnglishList(condition string, pars []interface{}, startSize, pageSize int) (items []*PptEnglishItem, err error) {
 func GetPptEnglishList(condition string, pars []interface{}, startSize, pageSize int) (items []*PptEnglishItem, err error) {
@@ -112,8 +114,9 @@ type AddPptEnglishReq struct {
 		BackIndex    int    `description:"背景图片下标"`
 		BackIndex    int    `description:"背景图片下标"`
 		TemplateType int    `description:"模版id"`
 		TemplateType int    `description:"模版id"`
 	} `description:"首页"`
 	} `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 {
 type AddPptEnglishResp struct {
@@ -249,6 +252,7 @@ type PptEnglishSaveLog struct {
 	AdminId       int       `description:"系统用户id"`
 	AdminId       int       `description:"系统用户id"`
 	AdminRealName string    `description:"系统用户名称"`
 	AdminRealName string    `description:"系统用户名称"`
 	CreateTime    time.Time `description:"创建时间"`
 	CreateTime    time.Time `description:"创建时间"`
+	CoverContent  string    `description:"PPT内容-JSON"`
 }
 }
 
 
 // AddPptEnglishSaveLog 新增PPT日志
 // AddPptEnglishSaveLog 新增PPT日志
@@ -343,3 +347,24 @@ type EnglishPPT2ReportReq struct {
 	Title            string `description:"标题"`
 	Title            string `description:"标题"`
 	Abstract         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
 package models
 
 
 import (
 import (
+	"eta/eta_mobile/models/ppt_english"
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"time"
 	"time"
@@ -26,6 +27,7 @@ type PptV2 struct {
 	ReportCode    string    `description:"关联的报告code"`
 	ReportCode    string    `description:"关联的报告code"`
 	IsShare       int8      `description:"是否分享,0:不分享,1:分享"`
 	IsShare       int8      `description:"是否分享,0:不分享,1:分享"`
 	PublishTime   time.Time `description:"发布时间"`
 	PublishTime   time.Time `description:"发布时间"`
+	CoverContent  string    `description:"PPT内容-JSON"`
 }
 }
 
 
 type PptV2Item struct {
 type PptV2Item struct {
@@ -48,6 +50,7 @@ type PptV2Item struct {
 	ReportCode    string    `description:"关联的报告code"`
 	ReportCode    string    `description:"关联的报告code"`
 	IsShare       int8      `description:"是否分享,0:不分享,1:分享"`
 	IsShare       int8      `description:"是否分享,0:不分享,1:分享"`
 	PublishTime   time.Time `description:"发布时间"`
 	PublishTime   time.Time `description:"发布时间"`
+	CoverContent  string    `description:"PPT内容-JSON"`
 }
 }
 
 
 func GetPptV2List(condition string, pars []interface{}, startSize, pageSize int) (items []*PptV2Item, err error) {
 func GetPptV2List(condition string, pars []interface{}, startSize, pageSize int) (items []*PptV2Item, err error) {
@@ -116,8 +119,9 @@ type AddPptV2Req struct {
 		BackIndex    int    `description:"背景图片下标"`
 		BackIndex    int    `description:"背景图片下标"`
 		TemplateType int    `description:"模版id"`
 		TemplateType int    `description:"模版id"`
 	} `description:"首页"`
 	} `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 {
 type AddPptV2Resp struct {
@@ -230,6 +234,7 @@ type PptV2SaveLog struct {
 	AdminId       int       `description:"系统用户id"`
 	AdminId       int       `description:"系统用户id"`
 	AdminRealName string    `description:"系统用户名称"`
 	AdminRealName string    `description:"系统用户名称"`
 	CreateTime    time.Time `description:"创建时间"`
 	CreateTime    time.Time `description:"创建时间"`
+	CoverContent  string    `description:"PPT内容-JSON"`
 }
 }
 
 
 // AddPptV2SaveLog 新增PPT日志
 // AddPptV2SaveLog 新增PPT日志
@@ -323,3 +328,16 @@ type BatchEnPPT2CnReq struct {
 	PptIds  string `description:"英文PPT主键s"`
 	PptIds  string `description:"英文PPT主键s"`
 	GroupId int    `description:"目录ID"`
 	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:"编辑人信息"`
+}

+ 7 - 1
services/data/cross_variety/chart.go

@@ -347,7 +347,13 @@ func GetChartData(chartInfoId int, config request.ChartConfigReq) (edbList []*da
 			CoordinatePointData: coordinatePointList,
 			CoordinatePointData: coordinatePointList,
 		})
 		})
 	}
 	}
-
+	// 处理颜色
+	colorMap := utils.GetColorMap()
+	for k, _ := range dataList {
+		if c, ok1 := colorMap[k]; ok1 {
+			dataList[k].Color = c
+		}
+	}
 	dataResp = ChartInfoResp{
 	dataResp = ChartInfoResp{
 		XName:       xTagInfo.ChartTagName + "百分位",
 		XName:       xTagInfo.ChartTagName + "百分位",
 		XNameEn:     xTagInfo.ChartTagNameEn,
 		XNameEn:     xTagInfo.ChartTagNameEn,

+ 2 - 1
services/data_stat/edb_info_stat.go

@@ -9,7 +9,7 @@ import (
 )
 )
 
 
 // AddEdbInfoUpdateLog 添加指标编辑/刷新日志
 // AddEdbInfoUpdateLog 添加指标编辑/刷新日志
-func AddEdbInfoUpdateLog(edbInfoId int, updateResult int, updateFailedReason string, sysUser *system.Admin) (err error) {
+func AddEdbInfoUpdateLog(edbInfoId int, updateResult int, updateFailedReason string, sysUser *system.Admin, updateType int) (err error) {
 	var edbInfo *data_manage.EdbInfo
 	var edbInfo *data_manage.EdbInfo
 	if edbInfoId > 0 {
 	if edbInfoId > 0 {
 		// 获取指标详情
 		// 获取指标详情
@@ -45,6 +45,7 @@ func AddEdbInfoUpdateLog(edbInfoId int, updateResult int, updateFailedReason str
 		log.UpdateFailedReason = updateFailedReason
 		log.UpdateFailedReason = updateFailedReason
 		log.DataUpdateTime = edbInfo.DataUpdateTime
 		log.DataUpdateTime = edbInfo.DataUpdateTime
 		log.ErDataUpdateDate = edbInfo.ErDataUpdateDate
 		log.ErDataUpdateDate = edbInfo.ErDataUpdateDate
+		log.UpdateType = updateType
 		_, err = data_stat.AddEdbUpdateLog(log)
 		_, err = data_stat.AddEdbUpdateLog(log)
 		if err != nil {
 		if err != nil {
 			err = fmt.Errorf("新增指标更新日志失败,Err: %s", err)
 			err = fmt.Errorf("新增指标更新日志失败,Err: %s", err)

+ 61 - 0
services/ppt.go

@@ -9,6 +9,7 @@ import (
 	"eta/eta_mobile/utils"
 	"eta/eta_mobile/utils"
 	"fmt"
 	"fmt"
 	"sort"
 	"sort"
+	"time"
 )
 )
 
 
 const (
 const (
@@ -141,3 +142,63 @@ func ResetPPTReport(reportId int, isEnglish bool) (err error) {
 	}
 	}
 	return
 	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,
 			ReportType:    v.ReportType,
 			PptDate:       v.PptDate,
 			PptDate:       v.PptDate,
 			Content:       v.Content,
 			Content:       v.Content,
+			CoverContent:  v.CoverContent,
 			CreateTime:    time.Now(),
 			CreateTime:    time.Now(),
 			ModifyTime:    time.Now(),
 			ModifyTime:    time.Now(),
 			AdminId:       adminId,
 			AdminId:       adminId,
@@ -731,6 +732,7 @@ func CopyPptEnglish(pptId int, groupId int64, adminId int, adminRealName string)
 		ReportType:    pptInfo.ReportType,
 		ReportType:    pptInfo.ReportType,
 		PptDate:       pptInfo.PptDate,
 		PptDate:       pptInfo.PptDate,
 		Content:       pptInfo.Content,
 		Content:       pptInfo.Content,
+		CoverContent:  pptInfo.CoverContent,
 		CreateTime:    time.Now(),
 		CreateTime:    time.Now(),
 		ModifyTime:    time.Now(),
 		ModifyTime:    time.Now(),
 		AdminId:       adminId,
 		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,
 			ReportType:    v.ReportType,
 			PptDate:       v.PptDate,
 			PptDate:       v.PptDate,
 			Content:       v.Content,
 			Content:       v.Content,
+			CoverContent:  v.CoverContent,
 			PptUrl:        v.PptUrl,
 			PptUrl:        v.PptUrl,
 			PptxUrl:       v.PptxUrl,
 			PptxUrl:       v.PptxUrl,
 			CreateTime:    time.Now(),
 			CreateTime:    time.Now(),
@@ -924,6 +925,7 @@ func CopyPpt(pptId int, groupId int64, adminId int, adminRealName string) (resp
 		ReportType:    pptInfo.ReportType,
 		ReportType:    pptInfo.ReportType,
 		PptDate:       pptInfo.PptDate,
 		PptDate:       pptInfo.PptDate,
 		Content:       pptInfo.Content,
 		Content:       pptInfo.Content,
+		CoverContent:  pptInfo.CoverContent,
 		PptUrl:        pptInfo.PptUrl,
 		PptUrl:        pptInfo.PptUrl,
 		PptxUrl:       pptInfo.PptxUrl,
 		PptxUrl:       pptInfo.PptxUrl,
 		CreateTime:    time.Now(),
 		CreateTime:    time.Now(),

+ 14 - 0
utils/common.go

@@ -2036,3 +2036,17 @@ func GetDateByDateTypeV2(dateType int, tmpStartDate, tmpEndDate string, startYea
 
 
 	return
 	return
 }
 }
+
+func GetColorMap() map[int]string {
+	colorMap := make(map[int]string)
+	colors := []string{"#0000FF", "#FF0000", "#999999", "#000000", "#7CB5EC", "#90ED7D", "#F7A35C", "#8085E9",
+		"#F15C80", "#E4D354", "#2B908F", "#F45B5B", "#91E8E1", "#FDA8C7", "#8A4294",
+		"#578B5A", "#0033FF", "#849EC1", "#FFDF0C", "#005496", "#00F0FF", "#4D535B",
+		"#4F4C34", "#804141", "#86BABD", "#8AA3FF", "#960000", "#A173DB", "#A39340",
+		"#CE814A", "#D1D2E6", "#EAB7B7", "#FF2E7A", "#FF4AF8", "#FF785B", "#FF9696", "#FFA800", "#FFBC97", "#FFDFDF"}
+	for k, v := range colors {
+		colorMap[k] = v
+	}
+
+	return colorMap
+}

+ 3 - 2
utils/constants.go

@@ -205,8 +205,9 @@ const (
 	CACHE_KEY_MYSTEEL_REFRESH         = "mysteel_chemical:refresh"          //钢联化工刷新
 	CACHE_KEY_MYSTEEL_REFRESH         = "mysteel_chemical:refresh"          //钢联化工刷新
 	CACHE_KEY_DAYNEW_REFRESH          = "admin:day_new:refresh"             //每日资讯拉取企业微信聊天记录
 	CACHE_KEY_DAYNEW_REFRESH          = "admin:day_new:refresh"             //每日资讯拉取企业微信聊天记录
 	CACHE_KEY_DAYNEW_TRANSLATE        = "admin:day_new:translate"           //每日资讯中翻英
 	CACHE_KEY_DAYNEW_TRANSLATE        = "admin:day_new:translate"           //每日资讯中翻英
-
-	CACHE_CREATE_REPORT_IMGPDF_QUEUE = "eta_report:report_img_pdf_queue" // 生成报告长图PDF队列
+	CACHE_CREATE_REPORT_IMGPDF_QUEUE  = "eta_report:report_img_pdf_queue"   // 生成报告长图PDF队列
+	CACHE_PPT_EDITING                 = "eta:ppt:editing:"                  // PPT用户编辑中
+	CACHE_EN_PPT_EDITING              = "eta:en_ppt:editing:"               // 英文PPT用户编辑中
 )
 )
 
 
 // 模板消息推送类型
 // 模板消息推送类型