Ver Fonte

editing

zwxi há 5 meses atrás
pai
commit
38a5fb1e38

+ 61 - 1
controllers/bi_dashboard.go

@@ -7,6 +7,7 @@ import (
 	biapprove "eta_gn/eta_api/models/bi_approve"
 	"eta_gn/eta_api/models/bi_dashboard"
 	"eta_gn/eta_api/models/system"
+	"eta_gn/eta_api/services"
 	biapproveSerice "eta_gn/eta_api/services/bi_approve"
 	"eta_gn/eta_api/utils"
 	"fmt"
@@ -329,6 +330,14 @@ func (this *BIDaShboardController) DetailDashboard() {
 		return
 	}
 
+	editor, e := services.UpdateBiDashboardEditing(dashboardId, 0, sysUser.AdminId, sysUser.RealName)
+	if e != nil {
+		br.Msg = "编辑状态更新失败"
+		br.ErrMsg = "编辑状态更新失败,Err:" + e.Error()
+		return
+	}
+
+	resp.Editor = editor
 	resp.BiDashboard = dashboardItem
 	resp.List = detailList
 
@@ -1220,6 +1229,57 @@ func (this *BIDaShboardController) HomePageSave() {
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "保存成功"
-	br.Data = item
 	return
 }
+
+
+// Editing
+// @Title 标记/查询编辑状态
+// @Description 标记/查询编辑状态
+// @Param	request	body models.PPTEditingReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /editing [post]
+func (this *BIDaShboardController) Editing() {
+	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 bi_dashboard.BiDashboardEditingReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.BiDashboardId <= 0 {
+		br.Msg = "参数有误"
+		return
+	}
+	if req.Status < 0 {
+		br.Msg = "标记状态异常"
+		return
+	}
+
+	editor, e := services.UpdateBiDashboardEditing(req.BiDashboardId, req.Status, sysUser.AdminId, sysUser.RealName)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "更新编辑状态失败, err: " + e.Error()
+		return
+	}
+
+	br.Data = editor
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}

+ 20 - 3
models/bi_dashboard/bi_dashboard.go

@@ -75,11 +75,21 @@ func DelDashboard(id int) (err error) {
 	return global.DEFAULT_DmSQL.Delete(&BiDashboard{BiDashboardId: id}).Error
 }
 
+// BiDashboardEditingCache PPT编辑缓存信息
+type BiDashboardEditingCache struct {
+	IsEditing bool   `description:"是否有人编辑"`
+	AdminId   int    `description:"编辑者ID"`
+	Editor    string `description:"编辑者姓名"`
+	Tips      string `description:"提示信息"`
+}
+
 // DashboardDetailResp 详情响应体
 type DashboardDetailResp struct {
 	*BiDashboard
-	IsGrant int `description:"是否共享,0:不是,1:是"`
-	List    []*BiDashboardDetail
+	IsGrant   int                     `description:"是否共享,0:不是,1:是"`
+	IsEditing bool                    `description:"是否有人编辑"`
+	Editor    BiDashboardEditingCache `description:"编辑人信息"`
+	List      []*BiDashboardDetail
 }
 
 type AddDashboardReq struct {
@@ -128,4 +138,11 @@ func GetAllGrantList(sysUserId int) (list []*BiDashboard, err error) {
 
 func SaveDashboard(item *BiDashboard) (err error) {
 	return global.DEFAULT_DmSQL.Save(item).Error
-}
+}
+
+
+// BiDashboardEditingReq 标记编辑中请求体
+type BiDashboardEditingReq struct {
+	BiDashboardId  int `description:"看板主键ID"`
+	Status int `description:"标记状态: 1-编辑中; 2-编辑完成"`
+}

+ 9 - 0
routers/commentsRouter.go

@@ -8314,6 +8314,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta_gn/eta_api/controllers:BIDaShboardController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers:BIDaShboardController"],
+        beego.ControllerComments{
+            Method: "Editing",
+            Router: `/editing`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta_gn/eta_api/controllers:BIDaShboardController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers:BIDaShboardController"],
         beego.ControllerComments{
             Method: "Grant",

+ 68 - 0
services/bi_dashboard.go

@@ -0,0 +1,68 @@
+package services
+
+import (
+	"encoding/json"
+	"eta_gn/eta_api/models/bi_dashboard"
+	"eta_gn/eta_api/utils"
+	"fmt"
+	"time"
+)
+
+
+
+
+// UpdateBiDashboardEditing 更新看板编辑状态
+func UpdateBiDashboardEditing(boardId, status, userId int, userName string) (ret bi_dashboard.BiDashboardEditingCache, err error) {
+	if boardId <= 0 {
+		return
+	}
+	cacheKey := ""
+	cacheKey = fmt.Sprint(utils.CACHE_BI_DASHBOARD_EDITING, boardId)
+
+	// 完成编辑
+	if status == 2 {
+		_ = utils.Rc.Delete(cacheKey)
+		return
+	}
+
+	// 读取缓存中的结果
+	var editor bi_dashboard.BiDashboardEditingCache
+	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正在编辑看板", 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
+}

+ 1 - 0
utils/constants.go

@@ -236,6 +236,7 @@ const (
 	CACHE_SMART_REPORT_SEND_MSG = "eta:smart_report:sending:" // 智能研报用户报告推送
 	CACHE_PPT_EDITING           = "eta:ppt:editing:"          // PPT用户编辑中
 	CACHE_EN_PPT_EDITING        = "eta:en_ppt:editing:"       // 英文PPT用户编辑中
+	CACHE_BI_DASHBOARD_EDITING  = "eta:bi_dashboard:editing:" // 看板用户编辑中
 
 	CACHE_CREATE_REPORT_IMGPDF_QUEUE = "eta_report:report_img_pdf_queue" // 生成报告长图PDF队列
 	CACHE_EDB_TERMINAL_CODE_URL      = "edb:terminal_code:edb_code:"     // 指标与终端关系的缓存