Ver código fonte

Merge branch 'feature/excel_refresh_0517'

hsun 9 meses atrás
pai
commit
ad788615c2

+ 118 - 1
controllers/excel_info.go

@@ -5,6 +5,7 @@ import (
 	"eta/eta_chart_lib/models"
 	"eta/eta_chart_lib/models/request"
 	"eta/eta_chart_lib/models/response"
+	"eta/eta_chart_lib/services/data"
 	excel2 "eta/eta_chart_lib/services/data/excel"
 	"eta/eta_chart_lib/services/excel"
 	"eta/eta_chart_lib/utils"
@@ -129,7 +130,7 @@ func (this *ExcelInfoController) GetTableDetail() {
 			br.ErrMsg = "表格json转结构体失败,Err:" + err.Error()
 			return
 		}
-		newResult, tmpErr, tmpErrMsg := excel2.GetMixedTableCellData(result)
+		newResult, tmpErr, tmpErrMsg := excel2.GetMixedTableCellData(result, this.Lang)
 		if tmpErr != nil {
 			br.Msg = "获取失败"
 			if tmpErrMsg != `` {
@@ -180,3 +181,119 @@ func (this *ExcelInfoController) GetTableDetail() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// Refresh
+// @Title 刷新
+// @Description 刷新接口
+// @Param   UniqueCode  query  string  true  "表格id"
+// @router /refresh [get]
+func (this *ExcelInfoController) Refresh() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	uniqueCode := this.GetString("UniqueCode")
+	if uniqueCode == "" {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误, UniqueCode is empty"
+		return
+	}
+	key := utils.HZ_CHART_LIB_EXCEL_TABLE_DETAIL_REFRESH + ":" + uniqueCode
+	ok := utils.Rc.SetNX(key, 1, time.Second*300)
+	if !ok {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "表格刷新中"
+		return
+	}
+	defer func() {
+		_ = utils.Rc.Delete(key)
+	}()
+
+	// 获取数据详情
+	excelDetail, errMsg, err := excel2.GetExcelDetailInfoByExcelInfoId(uniqueCode, this.Lang)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			br.Msg = "该表格已被删除,请刷新页面"
+			br.ErrMsg = "该表格已被删除,请刷新页面,Err:" + err.Error()
+			return
+		}
+		br.Msg = errMsg
+		br.ErrMsg = "获取表格表信息失败,Err:" + err.Error()
+		return
+	}
+
+	// 数据刷新(只有自定义表格有刷新)
+	if excelDetail.Source == utils.TIME_TABLE {
+		jsonByte, e := json.Marshal(excelDetail.TableData)
+		if e != nil {
+			br.Msg = "自定义表格数据获取失败"
+			br.ErrMsg = "自定义表格数据获取失败,转json失败,Err:" + e.Error()
+			return
+		}
+		var tableData request.TableDataReq
+		if e = json.Unmarshal(jsonByte, &tableData); e != nil {
+			br.Msg = "自定义表格数据获取失败"
+			br.ErrMsg = "自定义表格数据获取失败,json转结构体失败,Err:" + e.Error()
+			return
+		}
+
+		if len(tableData.EdbInfoIdList) > 0 {
+			if e, _ = data.EdbInfoRefreshAllFromBase(tableData.EdbInfoIdList, false); e != nil {
+				br.Msg = "刷新失败"
+				br.ErrMsg = "刷新失败,Err:" + e.Error()
+				return
+			}
+		}
+	}
+
+	// 数据刷新-混合表格
+	if excelDetail.Source == utils.MIXED_TABLE {
+		jsonByte, e := json.Marshal(excelDetail.TableData)
+		if e != nil {
+			br.Msg = "刷新失败"
+			br.ErrMsg = "JSON格式化混合表格数据失败, Err: " + e.Error()
+			return
+		}
+		var tableData request.MixedTableReq
+		if e = json.Unmarshal(jsonByte, &tableData); e != nil {
+			br.Msg = "刷新失败"
+			br.ErrMsg = "解析混合表格数据失败, Err: " + e.Error()
+			return
+		}
+		edbInfoIds := make([]int, 0)
+		edbInfoIdExist := make(map[int]bool)
+		if len(tableData.Data) > 0 {
+			for _, t := range tableData.Data {
+				for _, v := range t {
+					if v.EdbInfoId > 0 && !edbInfoIdExist[v.EdbInfoId] {
+						edbInfoIdExist[v.EdbInfoId] = true
+						edbInfoIds = append(edbInfoIds, v.EdbInfoId)
+					}
+				}
+			}
+		}
+		if len(edbInfoIds) > 0 {
+			if e, _ = data.EdbInfoRefreshAllFromBase(edbInfoIds, false); e != nil {
+				br.Msg = "刷新失败"
+				br.ErrMsg = "刷新混合表格数据失败, Err: " + e.Error()
+				return
+			}
+		}
+	}
+
+	// 清除缓存
+	detailKey := utils.HZ_CHART_LIB_EXCEL_TABLE_DETAIL + ":" + excelDetail.UniqueCode
+	if utils.Re == nil {
+		_ = utils.Rc.Delete(detailKey)
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "刷新成功"
+}

+ 25 - 0
models/data_manage/excel/excel_info.go

@@ -623,3 +623,28 @@ func ModifyExcelInfoUserIdByOldUserId(oldUserIdList []int, userId int, userName
 	_, err = o.Raw(sql, userId, userName, oldUserIdList).Exec()
 	return
 }
+
+// ExcelInfoDetail excel表格详情(前端使用)
+type ExcelInfoDetail struct {
+	ExcelInfoId     int         `orm:"column(excel_info_id);pk"`
+	Source          int         `description:"表格来源,1:excel插件的表格,2:自定义表格,默认:1"`
+	ExcelType       int         `description:"表格类型,1:指标列,2:日期列,默认:1"`
+	ExcelName       string      `description:"表格名称"`
+	UniqueCode      string      `description:"表格唯一编码"`
+	ExcelClassifyId int         `description:"表格分类id"`
+	SysUserId       int         `description:"操作人id"`
+	SysUserRealName string      `description:"操作人真实姓名"`
+	Content         string      `description:"表格内容"`
+	ExcelImage      string      `description:"表格图片"`
+	FileUrl         string      `description:"表格下载地址"`
+	Sort            int         `description:"排序字段,数字越小越排前面"`
+	IsDelete        int         `description:"是否删除,0:未删除,1:已删除"`
+	ModifyTime      time.Time   `description:"最近修改日期"`
+	CreateTime      time.Time   `description:"创建日期"`
+	TableData       interface{} `description:"表格内容"`
+	//Button           ExcelInfoDetailButton `description:"操作权限"`
+	CanEdit          bool   `description:"是否可编辑"`
+	Editor           string `description:"编辑人"`
+	IsJoinPermission int    `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
+	HaveOperaAuth    bool   `description:"是否有数据权限"`
+}

+ 9 - 0
routers/commentsRouter.go

@@ -61,6 +61,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_chart_lib/controllers:ExcelInfoController"] = append(beego.GlobalControllerRouter["eta/eta_chart_lib/controllers:ExcelInfoController"],
+        beego.ControllerComments{
+            Method: "Refresh",
+            Router: `/refresh`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_chart_lib/controllers:TableController"] = append(beego.GlobalControllerRouter["eta/eta_chart_lib/controllers:TableController"],
         beego.ControllerComments{
             Method: "TableInfoDetail",

+ 4 - 4
services/data/base_edb_lib.go

@@ -191,9 +191,9 @@ type BaseCalculateDataResp struct {
 }
 
 // BaseCalculate 基础计算
-func BaseCalculate(param string) (resp *BaseCalculateResp, err error) {
+func BaseCalculate(param, lang string) (resp *BaseCalculateResp, err error) {
 	urlStr := "calculate/base"
-	_, resultByte, err := postAddEdbData(param, urlStr)
+	_, resultByte, err := postAddEdbData(param, urlStr, lang)
 	err = json.Unmarshal(resultByte, &resp)
 	if err != nil {
 		return
@@ -220,9 +220,9 @@ func postRefreshEdbData(param map[string]interface{}, urlStr string) (resp *mode
 }
 
 // postAddEdbData 新增指标数据
-func postAddEdbData(paramStr string, urlStr string) (resp *models.BaseResponse, result []byte, err error) {
+func postAddEdbData(paramStr string, urlStr, lang string) (resp *models.BaseResponse, result []byte, err error) {
 	postUrl := utils.EDB_LIB_URL + urlStr
-	result, err = HttpPost(postUrl, paramStr, "application/json")
+	result, err = HttpPost(postUrl, paramStr, lang, "application/json")
 	if err != nil {
 		return
 	}

+ 76 - 0
services/data/excel/excel_info.go

@@ -1,9 +1,11 @@
 package excel
 
 import (
+	"encoding/json"
 	"errors"
 	"eta/eta_chart_lib/models"
 	"eta/eta_chart_lib/models/data_manage"
+	"eta/eta_chart_lib/models/data_manage/excel"
 	"eta/eta_chart_lib/models/request"
 	"eta/eta_chart_lib/services/data"
 	"eta/eta_chart_lib/utils"
@@ -1115,3 +1117,77 @@ func GetFirstHistoryEdbDataList(edbInfo *data_manage.EdbInfo, num int, endDate s
 //
 //	return
 //}
+
+// GetExcelDetailInfoByExcelInfoId 根据表格id获取表格详情
+func GetExcelDetailInfoByExcelInfoId(uniqueCode, lang string) (excelDetail excel.ExcelInfoDetail, errMsg string, err error) {
+	errMsg = `获取失败`
+	//获取eta表格信息
+	excelInfo, err := excel.GetExcelInfoByUniqueCode(uniqueCode)
+	if err != nil {
+		err = errors.New("获取ETA表格信息失败,Err:" + err.Error())
+		if err.Error() == utils.ErrNoRow() {
+			errMsg = "ETA表格被删除,请刷新页面"
+			err = errors.New("ETA表格被删除,请刷新页面,Err:" + err.Error())
+		}
+		return
+	}
+
+	return formatExcelInfo2Detail(excelInfo, lang)
+}
+
+func formatExcelInfo2Detail(excelInfo *excel.ExcelInfo, lang string) (excelDetail excel.ExcelInfoDetail, errMsg string, err error) {
+	excelDetail = excel.ExcelInfoDetail{
+		ExcelInfoId:     excelInfo.ExcelInfoId,
+		Source:          excelInfo.Source,
+		ExcelType:       excelInfo.ExcelType,
+		ExcelName:       excelInfo.ExcelName,
+		UniqueCode:      excelInfo.UniqueCode,
+		ExcelClassifyId: excelInfo.ExcelClassifyId,
+		SysUserId:       excelInfo.SysUserId,
+		SysUserRealName: excelInfo.SysUserRealName,
+		Content:         excelInfo.Content,
+		ExcelImage:      excelInfo.ExcelImage,
+		FileUrl:         excelInfo.FileUrl,
+		Sort:            excelInfo.Sort,
+		IsDelete:        excelInfo.IsDelete,
+		ModifyTime:      excelInfo.ModifyTime,
+		CreateTime:      excelInfo.CreateTime,
+		TableData:       nil,
+	}
+
+	switch excelInfo.Source {
+	case utils.TIME_TABLE: // 时间序列表格
+		var tableDataConfig TableDataConfig
+		err = json.Unmarshal([]byte(excelDetail.Content), &tableDataConfig)
+		if err != nil {
+			err = errors.New("表格json转结构体失败,Err:" + err.Error())
+			return
+		}
+		result, tmpErr := GetDataByTableDataConfig(tableDataConfig)
+		if tmpErr != nil {
+			err = errors.New("获取最新的表格数据失败,Err:" + tmpErr.Error())
+			return
+		}
+
+		excelDetail.TableData = result
+	case utils.MIXED_TABLE: // 混合表格
+		var result request.MixedTableReq
+		err = json.Unmarshal([]byte(excelDetail.Content), &result)
+		if err != nil {
+			err = errors.New("表格json转结构体失败,Err:" + err.Error())
+			return
+		}
+		newData, tmpErr, tmpErrMsg := GetMixedTableCellData(result, lang)
+		if tmpErr != nil {
+			errMsg = "获取失败"
+			if tmpErrMsg != `` {
+				errMsg = tmpErrMsg
+			}
+			err = errors.New("获取最新的数据失败,Err:" + tmpErr.Error())
+			return
+		}
+		result.Data = newData
+		excelDetail.TableData = result
+	}
+	return
+}

+ 2 - 2
services/data/excel/mixed_table.go

@@ -39,7 +39,7 @@ type Cell struct {
 }
 
 // GetMixedTableCellData 获取混合表格数据
-func GetMixedTableCellData(mixedTableReq request.MixedTableReq) (newMixedTableCellDataList [][]request.MixedTableCellDataReq, err error, errMsg string) {
+func GetMixedTableCellData(mixedTableReq request.MixedTableReq, lang string) (newMixedTableCellDataList [][]request.MixedTableCellDataReq, err error, errMsg string) {
 	cellRelationConf := mixedTableReq.CellRelation
 	config := mixedTableReq.Data
 
@@ -354,7 +354,7 @@ func GetMixedTableCellData(mixedTableReq request.MixedTableReq) (newMixedTableCe
 						err = tmpErr
 						return
 					}
-					respItem, tmpErr := data.BaseCalculate(string(reqJson))
+					respItem, tmpErr := data.BaseCalculate(string(reqJson), lang)
 					if tmpErr != nil {
 						utils.FileLog.Error(fmt.Sprintf("计算失败2,配置信息;%s;错误原因:%s", cell.Value, tmpErr.Error()))
 						err = tmpErr

+ 4 - 3
utils/constants.go

@@ -121,9 +121,10 @@ const (
 )
 
 const (
-	HZ_CHART_LIB_DETAIL             = "HZ_CHART_LIB_DETAIL_" //图表
-	HZ_TABLE_LIB_DETAIL             = "HZ_TABLE_LIB_DETAIL_" //表格
-	HZ_CHART_LIB_EXCEL_TABLE_DETAIL = "HZ_CHART_LIB_EXCEL_TABLE_DETAIL"
+	HZ_CHART_LIB_DETAIL                     = "HZ_CHART_LIB_DETAIL_" //图表
+	HZ_TABLE_LIB_DETAIL                     = "HZ_TABLE_LIB_DETAIL_" //表格
+	HZ_CHART_LIB_EXCEL_TABLE_DETAIL         = "HZ_CHART_LIB_EXCEL_TABLE_DETAIL"
+	HZ_CHART_LIB_EXCEL_TABLE_DETAIL_REFRESH = "HZ_CHART_LIB_EXCEL_TABLE_DETAIL_REFRESH"
 )
 
 // 图表类型