Browse Source

Merge branch 'ETA_1.2.1'

ziwen 1 year ago
parent
commit
6dfa18b3d1

+ 14 - 0
controllers/data_manage/excel/custom_analysis.go

@@ -7,6 +7,7 @@ import (
 	excelModel "eta/eta_api/models/data_manage/excel"
 	"eta/eta_api/models/data_manage/excel/request"
 	"eta/eta_api/models/data_manage/excel/response"
+	"eta/eta_api/services"
 	"eta/eta_api/services/data/excel"
 	"eta/eta_api/utils"
 	"fmt"
@@ -394,6 +395,14 @@ func (c *CustomAnalysisController) BaseExcelDetail() {
 		br.ErrMsg = err.Error()
 		return
 	}
+	// 编辑状态
+	markStatus, err := services.UpdateExcelEditMark(excelDetail.ExcelInfoId, sysUser.AdminId, 2, sysUser.RealName)
+	if err != nil {
+		br.Msg = "查询标记状态失败"
+		br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
+		return
+	}
+
 
 	resp.IsFind = true
 	resp.ExcelInfo = response.FindExcelInfo{
@@ -412,6 +421,11 @@ func (c *CustomAnalysisController) BaseExcelDetail() {
 		CreateTime:      excelDetail.CreateTime,
 		Button:          excel.GetExcelInfoOpButton(sysUser, excelDetail.SysUserId, excelDetail.Source),
 	}
+	if markStatus.Status == 0 {
+		resp.ExcelInfo.CanEdit = true
+	} else {
+		resp.ExcelInfo.Editor = markStatus.Editor
+	}
 	if excelDetail != nil {
 		sheetList, err := excelModel.GetAllSheetItemList(excelDetail.ExcelInfoId)
 		if err != nil {

+ 91 - 2
controllers/data_manage/excel/excel_info.go

@@ -9,6 +9,7 @@ import (
 	excel3 "eta/eta_api/models/data_manage/excel"
 	"eta/eta_api/models/data_manage/excel/request"
 	"eta/eta_api/models/data_manage/excel/response"
+	"eta/eta_api/services"
 	"eta/eta_api/services/data"
 	excel2 "eta/eta_api/services/data/excel"
 	"eta/eta_api/services/excel"
@@ -241,7 +242,12 @@ func (c *ExcelInfoController) Add() {
 	if req.Source == 1 {
 		go excel2.UpdateExcelInfoFileUrl(excelInfo)
 	}
-
+	_, err = services.UpdateExcelEditMark(excelInfo.ExcelInfoId, sysUser.AdminId, 1, sysUser.RealName)
+	if err != nil {
+		br.Msg = "查询标记状态失败"
+		br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
+		return
+	}
 	resp := new(response.AddExcelInfoResp)
 	resp.ExcelInfoId = excelInfo.ExcelInfoId
 	resp.UniqueCode = excelInfo.UniqueCode
@@ -421,6 +427,19 @@ func (c *ExcelInfoController) Detail() {
 		return
 	}
 
+	// 编辑状态
+	markStatus, err := services.UpdateExcelEditMark(excelInfoId, sysUser.AdminId, 2, sysUser.RealName)
+	if err != nil {
+		br.Msg = "查询标记状态失败"
+		br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
+		return
+	}
+	if markStatus.Status == 0 {
+		excelDetail.CanEdit = true
+	} else {
+		excelDetail.Editor = markStatus.Editor
+	}
+
 	// excel表格按钮权限
 	excelDetail.Button = excel2.GetExcelInfoOpButton(sysUser, excelDetail.SysUserId, excelDetail.Source)
 
@@ -488,6 +507,14 @@ func (c *ExcelInfoController) Edit() {
 		return
 	}
 
+	// 标记编辑状态
+	_, err = services.UpdateExcelEditMark(req.ExcelInfoId, sysUser.AdminId, 1, sysUser.RealName)
+	if err != nil {
+		br.Msg = "查询标记状态失败"
+		br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
+		return
+	}
+
 	excelClassify, err := excel3.GetExcelClassifyById(req.ExcelClassifyId)
 	if err != nil {
 		if err.Error() == utils.ErrNoRow() {
@@ -624,7 +651,13 @@ func (c *ExcelInfoController) Edit() {
 	excelInfo.ExcelImage = req.ExcelImage
 	excelInfo.Content = content
 
-	updateExcelInfoParams := []string{"ModifyTime", "ExcelName", "ExcelType", "ExcelClassifyId", "ExcelImage", "Content"}
+	// 自动保存时不会传缩略图,也就不更新这个字段
+	var updateExcelInfoParams []string
+	if req.ExcelImage != "" {
+		updateExcelInfoParams = []string{"ModifyTime", "ExcelName", "ExcelType", "ExcelClassifyId", "ExcelImage", "Content"}
+	} else {
+		updateExcelInfoParams = []string{"ModifyTime", "ExcelName", "ExcelType", "ExcelClassifyId", "Content"}
+	}
 
 	excelEdbMappingList := make([]*excel3.ExcelEdbMapping, 0)
 	if len(edbInfoIdList) > 0 {
@@ -1097,6 +1130,13 @@ func (c *ExcelInfoController) AddDraft() {
 		return
 	}
 
+	_, err = services.UpdateExcelEditMark(req.ExcelInfoId, sysUser.AdminId, 1, sysUser.RealName)
+	if err != nil {
+		br.Msg = "查询标记状态失败"
+		br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
+		return
+	}
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "添加成功"
@@ -2143,3 +2183,52 @@ func decompressZip(src string) error {
 	}
 	return nil
 }
+
+// MarkEditStatus
+// @Title 标记沙盘编辑状态
+// @Description 标记沙盘编辑状态接口
+// @Param	request	body request.MarkEditSandbox true "type json string"
+// @Success 200 标记成功 ;202 标记成功
+// @router /excel_info/mark [post]
+func (this *ExcelInfoController) MarkEditStatus() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		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 request.MarkEditExcel
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	if req.ExcelInfoId <= 0 {
+		br.Msg = "缺少表格编号"
+		return
+	}
+	if req.Status <= 0 {
+		br.Msg = "标记状态异常"
+		return
+	}
+	//更新标记key
+	data, err := services.UpdateExcelEditMark(req.ExcelInfoId, sysUser.AdminId, req.Status, sysUser.RealName)
+	if err != nil {
+		br.Msg = err.Error()
+		return
+	}
+
+	msg := "标记成功"
+	br.Ret = 200
+	br.Success = true
+	br.Msg = msg
+	br.Data = data
+}

+ 16 - 0
models/data_manage/excel/request/excel_info.go

@@ -144,3 +144,19 @@ type MixedTableCellDataReq struct {
 	ShowValue string `description:"展示值"`
 	Value     string `description:"实际值"`
 }
+
+// AddAndEditSandbox 添加/编辑沙盘的请求数据
+type AddAndEditSandbox struct {
+	ExcelInfoId          int    `description:"excel表格ID"`
+	Name               string `description:"沙盘名称"`
+	ChartPermissionId  int    `description:"品种权限id"`
+	Content            string `description:"沙盘内容"`
+	PicUrl             string `description:"沙盘图片地址"`
+	SvgData            string `description:"沙盘svg图片数据"`
+}
+
+// MarkEditExcel 标记编辑表格的请求数据
+type MarkEditExcel struct {
+	ExcelInfoId int `description:"表格id"`
+	Status    int `description:"标记状态,1:编辑中,2:编辑完成"`
+}

+ 2 - 0
models/data_manage/excel/response/excel_info.go

@@ -66,6 +66,8 @@ type ExcelInfoDetail struct {
 	CreateTime      time.Time             `description:"创建日期"`
 	TableData       interface{}           `description:"表格内容"`
 	Button          ExcelInfoDetailButton `description:"操作权限"`
+	CanEdit         bool                  `description:"是否可编辑"`
+	Editor          string                `description:"编辑人"`
 }
 
 // ExcelInfoDetailButton 操作按钮

+ 2 - 0
models/data_manage/excel/response/sheet.go

@@ -28,4 +28,6 @@ type FindExcelInfo struct {
 	ModifyTime      time.Time             `description:"最近修改日期"`
 	CreateTime      time.Time             `description:"创建日期"`
 	Button          ExcelInfoDetailButton `description:"操作权限"`
+	CanEdit         bool                  `description:"是否可编辑"`
+	Editor          string                `description:"编辑人"`
 }

+ 9 - 0
routers/commentsRouter.go

@@ -385,6 +385,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/excel:ExcelInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/excel:ExcelInfoController"],
+        beego.ControllerComments{
+            Method: "MarkEditStatus",
+            Router: `/excel_info/mark`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/excel:ExcelInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/excel:ExcelInfoController"],
         beego.ControllerComments{
             Method: "Move",

+ 63 - 0
services/excel_info.go

@@ -0,0 +1,63 @@
+package services
+
+import (
+	"encoding/json"
+	"eta/eta_api/models"
+	"eta/eta_api/models/system"
+	"eta/eta_api/utils"
+	"fmt"
+	"time"
+)
+
+// UpdateExcelEditMark 更新表格当前更新状态
+// status 枚举值 1:编辑中,0:完成编辑, 2:只做查询
+func UpdateExcelEditMark(excelInfoId, nowUserId, status int, nowUserName string) (ret models.MarkReportResp, err error) {
+	//更新标记key
+	key := fmt.Sprint(`crm:excel:edit:`, excelInfoId)
+	opUserId, e := utils.Rc.RedisInt(key)
+	var opUser models.MarkReportItem
+	if e != nil {
+		opUserInfoStr, tErr := utils.Rc.RedisString(key)
+		if tErr == nil {
+			tErr = json.Unmarshal([]byte(opUserInfoStr), &opUser)
+			if tErr == nil {
+				opUserId = opUser.AdminId
+			}
+		}
+	}
+	if opUserId > 0 && opUserId != nowUserId {
+		editor := opUser.Editor
+		if editor == "" {
+			//查询账号的用户姓名
+			otherInfo, e := system.GetSysAdminById(opUserId)
+			if e != nil {
+				err = fmt.Errorf("查询其他编辑者信息失败")
+				return
+			}
+			editor = otherInfo.RealName
+		}
+
+		ret.Status = 1
+		ret.Msg = fmt.Sprintf("当前%s正在编辑中", editor)
+		ret.Editor = editor
+		return
+	}
+	if status == 1 {
+		nowUser := &models.MarkReportItem{AdminId: nowUserId, Editor: nowUserName}
+		bt, e := json.Marshal(nowUser)
+		if e != nil {
+			err = fmt.Errorf("格式化编辑者信息失败")
+			return
+		}
+		if opUserId > 0 {
+			utils.Rc.Do("SETEX", key, int64(300), string(bt)) //3分钟缓存
+		} else {
+			utils.Rc.SetNX(key, string(bt), time.Second*60*5) //3分钟缓存
+		}
+	} else if status == 0 {
+		//清除编辑缓存
+		_ = utils.Rc.Delete(key)
+	}
+	return
+}
+