浏览代码

Merge branch 'ETA_1.2.1' into debug

# Conflicts:
#	models/data_manage/excel/request/excel_info.go
#	models/db.go
ziwen 1 年之前
父节点
当前提交
fbe8cdc065

+ 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"
@@ -244,7 +245,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
@@ -424,6 +430,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)
 
@@ -630,7 +649,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 {
@@ -673,6 +698,14 @@ func (c *ExcelInfoController) Edit() {
 		err = excel3.AddExcelDraft(excelDraftInfo)
 	}
 
+	// 标记编辑状态
+	_, err = services.UpdateExcelEditMark(req.ExcelInfoId, sysUser.AdminId, 1, sysUser.RealName)
+	if err != nil {
+		br.Msg = "查询标记状态失败"
+		br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
+		return
+	}
+
 	resp := response.AddExcelInfoResp{
 		ExcelInfoId: excelInfo.ExcelInfoId,
 		UniqueCode:  excelInfo.UniqueCode,
@@ -1103,6 +1136,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 = "添加成功"
@@ -2204,3 +2244,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
+}

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

@@ -128,3 +128,35 @@ type CopyExcelInfoReq struct {
 	ExcelName       string `description:"表格名称"`
 	ExcelClassifyId int    `description:"分类id"`
 }
+
+// MixedTableReq 混合表格保存请求参数
+type MixedTableReq struct {
+	CellRelation string                    `description:"单元格关系"`
+	Data         [][]MixedTableCellDataReq `description:"混合表格单元格参数"`
+}
+
+// MixedTableCellDataReq 混合表格单元格参数
+type MixedTableCellDataReq struct {
+	Uid       string `description:"单元格唯一标识"`
+	DataType  int    `description:"数据类型,1:日期,2:指标,3:自定义文本,4:插值"`
+	DataTime  string `description:"所属日期"`
+	EdbInfoId int    `description:"指标id"`
+	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 操作按钮

+ 8 - 0
models/db.go

@@ -426,6 +426,14 @@ func initEtaTrial() {
 	)
 }
 
+// initChartFramework 图库框架相关表
+func initChartFramework() {
+	orm.RegisterModel(
+		new(data_manage.ChartFramework),     // 图库框架主表
+		new(data_manage.ChartFrameworkNode), // 图库框架节点表
+	)
+}
+
 // initExcel 初始化EXCEL
 func initExcel() {
 	orm.RegisterModel(

+ 9 - 0
routers/commentsRouter.go

@@ -394,6 +394,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",

+ 2 - 2
services/data/edb_info.go

@@ -35,7 +35,7 @@ func EdbInfoRefreshAllFromBaseV2(edbInfoId int, refreshAll bool) (err error, isA
 // @author Roc
 // @datetime 2022-09-16 11:04:44
 // @description 将原有的单个指标刷新,调整为批量多个指标刷新
-// DeprecatedTime 2023-10-23 09:38:19废弃试用
+// DeprecatedTime 2023-10-23 09:38:19废弃
 // Deprecated
 func EdbInfoRefreshAllFromBaseV3Bak(edbInfoIdList []int, refreshAll, isSync bool) (err error, isAsync bool) {
 	var errmsg string
@@ -76,7 +76,7 @@ func EdbInfoRefreshAllFromBaseV3Bak(edbInfoIdList []int, refreshAll, isSync bool
 //	@param isSync bool
 //	@return err error
 //	@return isAsync bool
-func EdbInfoRefreshAllFromBaseV3(edbInfoIdList []int, refreshAll bool, isSync bool) (err error, isAsync bool) {
+func EdbInfoRefreshAllFromBaseV3(edbInfoIdList []int, refreshAll, isSync bool) (err error, isAsync bool) {
 	var errmsg string
 	defer func() {
 		if err != nil {

+ 5 - 5
services/excel/lucky_sheet.go

@@ -108,7 +108,7 @@ type LuckySheetDataBak struct {
 // LuckySheetData sheet表格数据
 type LuckySheetData struct {
 	Name     string               `json:"name" description:"工作表名称"`
-	Index    int                  `json:"index" description:"工作表索引"`
+	Index    interface{}          `json:"index" description:"工作表索引"`
 	Row      int                  `json:"row" description:"行数"`
 	Column   int                  `json:"column" description:"列数"`
 	CellData []LuckySheetCellData `json:"celldata" description:"单元格数据"`
@@ -894,10 +894,10 @@ var LuckyFontFamilyMap = map[int]string{
 	2:  "Tahoma",
 	3:  "Verdana",
 	4:  "微软雅黑",
-	5:  "宋体",  //宋体(Song)、
-	6:  "黑体",  // 黑体(ST Heiti)
-	7:  "楷体",  //楷体(ST Kaiti),
-	8:  "仿宋",  //仿宋(ST FangSong),
+	5:  "宋体",   //宋体(Song)、
+	6:  "黑体",   // 黑体(ST Heiti)
+	7:  "楷体",   //楷体(ST Kaiti),
+	8:  "仿宋",   //仿宋(ST FangSong),
 	9:  "新宋体", //新宋体(ST Song),
 	10: "华文新魏",
 	11: "华文行楷",

+ 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
+}
+