瀏覽代碼

Merge branch 'feature/eta1.8.5_excel_balance' into debug

# Conflicts:
#	models/data_manage/excel/request/excel_info.go
xyxie 11 月之前
父節點
當前提交
befc7e94ec

+ 176 - 0
controllers/data_manage/excel/balance_table.go

@@ -0,0 +1,176 @@
+package excel
+
+import (
+	"encoding/json"
+	"eta/eta_api/models"
+	"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/data/data_manage_permission"
+	excel2 "eta/eta_api/services/data/excel"
+	"eta/eta_api/utils"
+	"strings"
+	"time"
+)
+
+// GetChildTable
+// @Title 获取子表
+// @Description 获取子表
+// @Param	request	body request.MixedTableCellDataReq true "type json string"
+// @router /excel_info/child_table [get]
+func (c *ExcelInfoController) GetChildTable() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+
+	sysUser := c.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	parentId, _ := c.GetInt("ParentId")
+	if parentId <= 0 {
+		br.Msg = "请选择父表"
+		return
+	}
+	list := make([]*excel.ExcelInfo, 0)
+	// 查询所有子表
+	childList, err := excel.GetChildExcelInfoByParentId(parentId)
+	if err != nil {
+		br.Msg = "查询子表失败"
+		return
+	}
+	if len(childList) > 0 {
+		list = childList
+	}
+
+	data := &response.BalanceChildTableResp{List: list}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "查询成功"
+	br.Data = data
+}
+
+// Rename
+// @Title 表格重命名接口
+// @Description 表格重命名接口
+// @Param	request	body request.EditExcelInfoReq true "type json string"
+// @Success 200 {object} response.AddExcelInfoResp
+// @router /excel_info/rename [post]
+func (c *ExcelInfoController) Rename() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+
+	sysUser := c.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	var req request.RenameExcelInfoReq
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.ExcelInfoId <= 0 {
+		br.Msg = "请传入ETA表格标识!"
+		return
+	}
+
+	req.ExcelName = strings.Trim(req.ExcelName, " ")
+	if req.ExcelName == "" {
+		br.Msg = "请填写表格名称!"
+		br.IsSendEmail = false
+		return
+	}
+
+	excelInfo, err := excel.GetExcelInfoById(req.ExcelInfoId)
+	if err != nil {
+		br.Msg = "获取ETA表格失败"
+		br.ErrMsg = "获取ETA表格失败,Err:" + err.Error()
+		return
+	}
+	//判断表格是否存在
+	var condition string
+	var pars []interface{}
+	condition += " AND excel_info_id != ? "
+	pars = append(pars, req.ExcelInfoId)
+
+	condition += " AND excel_classify_id=? "
+	pars = append(pars, excelInfo.ExcelClassifyId)
+
+	condition += " AND excel_name=? "
+	pars = append(pars, req.ExcelName)
+
+	// 获取分类下是否存在该表格名称
+	count, err := excel.GetExcelInfoCountByCondition(condition, pars)
+	if err != nil {
+		br.Msg = "ETA判断表格名称是否存在失败"
+		br.ErrMsg = "判断ETA表格名称是否存在失败,Err:" + err.Error()
+		return
+	}
+	if count > 0 {
+		br.Msg = "ETA表格名称已存在,请重新填写"
+		br.IsSendEmail = false
+		return
+	}
+
+	// todo 操作权限校验, 增加协作人判断
+	{
+		// 数据权限
+		haveOperaAuth, err := data_manage_permission.CheckExcelPermissionByExcelInfoId(excelInfo.ExcelInfoId, excelInfo.ExcelClassifyId, excelInfo.IsJoinPermission, c.SysUser.AdminId)
+		if err != nil {
+			br.Msg = "获取ETA表格失败"
+			br.ErrMsg = "获取ETA表格权限失败,Err:" + err.Error()
+			return
+		}
+		button := excel2.GetExcelInfoOpButton(sysUser, excelInfo.SysUserId, excelInfo.Source, haveOperaAuth)
+		if !button.OpButton {
+			br.Msg = "无操作权限"
+			br.Msg = "无操作权限"
+			br.IsSendEmail = false
+			return
+		}
+	}
+
+	excelInfo.ModifyTime = time.Now()
+	excelInfo.ExcelName = req.ExcelName
+	excelInfo.UpdateUserId = sysUser.AdminId
+	excelInfo.UpdateUserRealName = sysUser.RealName
+	// 自动保存时不会传缩略图,也就不更新这个字段
+	updateExcelInfoParams := []string{"ModifyTime", "ExcelName", "UpdateUserId", "UpdateUserRealName"}
+
+	err = excelInfo.Update(updateExcelInfoParams)
+	if err != nil {
+		br.Msg = "保存失败"
+		br.ErrMsg = "保存失败,Err:" + err.Error()
+		return
+	}
+
+	resp := response.AddExcelInfoResp{
+		ExcelInfoId: excelInfo.ExcelInfoId,
+		UniqueCode:  excelInfo.UniqueCode,
+	}
+
+	//删除公共图库那边的缓存
+	_ = utils.Rc.Delete(utils.HZ_CHART_LIB_EXCEL_TABLE_DETAIL + ":" + excelInfo.UniqueCode)
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "修改成功"
+	br.Data = resp
+	br.IsAddLog = true
+}

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

@@ -230,7 +230,6 @@ func (c *ExcelInfoController) Add() {
 		ModifyTime:         time.Now(),
 		CreateTime:         time.Now(),
 		ParentId:           req.ParentId,
-		BalanceType:        req.BalanceType,
 		UpdateUserId:       sysUser.AdminId,
 		UpdateUserRealName: sysUser.RealName,
 	}
@@ -695,7 +694,7 @@ func (c *ExcelInfoController) Edit() {
 			return
 		}
 		content = string(contentByte)
-	case utils.MIXED_TABLE: // 混合表格
+	case utils.MIXED_TABLE, utils.BALANCE_TABLE: // 混合表格, 平衡表
 		contentByte, err := json.Marshal(req.TableData)
 		if err != nil {
 			br.Msg = "混合表格数据获取失败"

+ 44 - 0
models/data_manage/excel/excel_chart_data.go

@@ -0,0 +1,44 @@
+package excel
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type ExcelChartData struct {
+	ExcelChartDataId int `orm:"column(excel_chart_data_id);pk"`
+	ExcelInfoId      int `description:"表格id"`
+	ExcelChartEdbId  int `description:"指标ID"`
+	DataTime         string
+	Value            float64
+	ModifyTime       time.Time `description:"修改时间"`
+	CreateTime       time.Time `description:"创建时间"`
+	DataTimestamp    int64
+}
+
+func (e *ExcelChartData) TableName() string {
+	return "excel_chart_data"
+}
+
+// 新增
+func (e *ExcelChartData) Add() (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Insert(e)
+	return
+}
+
+// 修改
+func (e *ExcelChartData) Update(cols []string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Update(e, cols...)
+	return
+}
+
+// 删除
+func (e *ExcelChartData) Delete() (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Delete(e)
+	return
+}
+
+// 查询

+ 108 - 0
models/data_manage/excel/excel_chart_edb.go

@@ -0,0 +1,108 @@
+package excel
+
+import (
+	"eta/eta_api/utils"
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type ExcelChartEdb struct {
+	ExcelChartEdbId int       `orm:"column(excel_chart_edb_id);pk"`
+	ExcelInfoId     int       `description:"表格id"`
+	EdbCode         string    `description:"指标编码"`
+	EdbName         string    `description:"指标名称"`
+	DateSequence    string    `description:"日期序列选区"`
+	DataSequence    string    `description:"数据序列选区"`
+	SysUserId       int       `description:"创建人"`
+	SysUserRealName string    `description:"创建人姓名"`
+	ModifyTime      time.Time `description:"修改时间"`
+	CreateTime      time.Time `description:"创建时间"`
+}
+
+func (e *ExcelChartEdb) TableName() string {
+	return "excel_chart_edb"
+}
+
+// 新增
+func (e *ExcelChartEdb) Add() (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Insert(e)
+	return
+}
+
+// 修改
+func (e *ExcelChartEdb) Update(cols []string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Update(e, cols...)
+	return
+}
+
+// 删除
+func (e *ExcelChartEdb) Delete() (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Delete(e)
+	return
+}
+
+// 同时添加指标和指标数据
+func (e *ExcelChartEdb) AddChartEdb(chartEdb *ExcelChartEdb, dateList []string, valList []float64) (err error) {
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
+
+	// 图表指标信息入库
+	lastId, err := o.Insert(chartEdb)
+	if err != nil {
+		return
+	}
+	chartEdb.ExcelChartEdbId = int(lastId)
+
+	// 图表指标数据入库
+	addList := make([]*ExcelChartData, 0)
+	for k, v := range dateList {
+		chartData := &ExcelChartData{
+			ExcelInfoId:     chartEdb.ExcelInfoId,
+			ExcelChartEdbId: chartEdb.ExcelChartEdbId,
+			DataTime:        v,
+			Value:           valList[k],
+			ModifyTime:      time.Now(),
+			CreateTime:      time.Now(),
+		}
+		//时间戳
+		currentDate, er := time.Parse(utils.FormatDate, v)
+		if er != nil {
+			err = fmt.Errorf("时间格式化失败 err:%v", er)
+			return
+		}
+		timestamp := currentDate.UnixNano() / 1e6
+		chartData.DataTimestamp = timestamp
+		addList = append(addList, chartData)
+		// data信息入库
+		if len(addList) > 1000 {
+			_, err = o.InsertMulti(len(addList), len(addList))
+			if err != nil {
+				return
+			}
+			addList = addList[:0]
+		}
+	}
+
+	// data信息入库
+	if len(addList) > 0 {
+		_, err = o.InsertMulti(len(addList), len(addList))
+		if err != nil {
+			return
+		}
+	}
+
+	return
+}

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

@@ -633,3 +633,11 @@ func ModifyExcelInfoUserIdByOldUserId(oldUserIdList []int, userId int, userName
 	_, err = o.Raw(sql, userId, userName, oldUserIdList).Exec()
 	return
 }
+
+// GetChildExcelInfoByParentId 根据id 获取eta表格详情
+func GetChildExcelInfoByParentId(parentId int) (items []*ExcelInfo, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT excel_info_id,source,excel_type,excel_name,unique_code,excel_classify_id,sys_user_id,sys_user_real_name,excel_image,file_url,sort,create_time,modify_time,is_join_permission, parent_id, balance_type, update_user_id,update_user_real_name FROM excel_info WHERE parent_id=? AND is_delete=0 order by sort asc, excel_info_id asc`
+	_, err = o.Raw(sql, parentId).QueryRows(&items)
+	return
+}

+ 10 - 0
models/data_manage/excel/request/balance_table.go

@@ -0,0 +1,10 @@
+package request
+
+type AddBalanceTableChart struct {
+	ExcelInfoId     int      `description:"表格ID"`
+	DateSequenceStr string   `description:"日期序列"`
+	DateSequenceVal []string `description:"日期序列的值列表"`
+	DataSequenceStr string   `description:"数据序列"`
+	DataSequenceVal []string `description:"数据序列的值列表"`
+	EdbName         string   `description:"指标名称"`
+}

+ 14 - 9
models/data_manage/excel/request/excel_info.go

@@ -24,7 +24,6 @@ type AddExcelInfoReq struct {
 	Content         string      `description:"Excel表格内容"`
 	TableData       interface{} `description:"自定义表格的数据内容"`
 	ParentId        int         `description:"表格的父级id"`
-	BalanceType     int         `description:"平衡表类型:0 动态表,1静态表"`
 }
 
 // EditExcelInfoReq 编辑表格请求
@@ -138,16 +137,22 @@ type CopyExcelInfoReq struct {
 
 // 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图片数据"`
+	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:编辑完成"`
-}
+	Status      int `description:"标记状态,1:编辑中,2:编辑完成"`
+}
+
+// RenameExcelInfoReq 表格重命名请求
+type RenameExcelInfoReq struct {
+	ExcelInfoId int    `description:"ETA表格ID"`
+	ExcelName   string `description:"表格名称"`
+}

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

@@ -93,3 +93,7 @@ type ExcelInfoDetailButton struct {
 	OpEdbButton      bool `description:"是否可生成指标"`
 	RefreshEdbButton bool `description:"是否可刷新指标"`
 }
+
+type BalanceChildTableResp struct {
+	List []*excel2.ExcelInfo `json:"list"`
+}

+ 18 - 0
routers/commentsRouter.go

@@ -826,6 +826,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: "GetChildTable",
+            Router: `/excel_info/child_table`,
+            AllowHTTPMethods: []string{"get"},
+            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: "Copy",
@@ -925,6 +934,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: "Rename",
+            Router: `/excel_info/rename`,
+            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: "BatchRefresh",

+ 46 - 0
services/data/excel/balance_table.go

@@ -0,0 +1,46 @@
+package excel
+
+import (
+	excelModel "eta/eta_api/models/data_manage/excel"
+	"eta/eta_api/models/data_manage/excel/request"
+	"eta/eta_api/models/system"
+	"eta/eta_api/utils"
+	"fmt"
+)
+
+// AddBalanceTableChart 添加平衡表图表
+func AddBalanceTableChart(req request.AddBalanceTableChart, sysUser *system.Admin) (err error, errMsg string) {
+	// 获取表格信息
+	excelInfo, err := excelModel.GetExcelInfoById(req.ExcelInfoId)
+	if err != nil {
+		err = fmt.Errorf("找不到该EXCEL!")
+		errMsg = "找不到该EXCEL!err:" + err.Error()
+		return
+	}
+
+	if excelInfo.Source != utils.BALANCE_TABLE {
+		err = fmt.Errorf("EXCEL类型错误!")
+		return
+	}
+	excelEdb := new(excelModel.ExcelChartEdb)
+	excelEdb.EdbName = req.EdbName
+	// todo 新增指标编码
+	excelEdb.EdbCode = ""
+	excelEdb.ExcelInfoId = excelInfo.ExcelInfoId
+	excelEdb.DateSequence = req.DateSequenceStr
+	excelEdb.DataSequence = req.DataSequenceStr
+	excelEdb.SysUserId = sysUser.AdminId
+	excelEdb.SysUserRealName = sysUser.RealName
+	// 如果是静态表,则直接使用前端传输的数据落到数据库里
+	if excelInfo.BalanceType == 0 {
+
+	} else if excelInfo.BalanceType == 1 {
+		// 如果是静态表,则直接使用前端传输的数据落到数据库里
+	}
+
+	// 将平衡表图表添加到工作表中
+	// 新增指标数据
+
+	// 新增图表
+	return
+}

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

@@ -134,7 +134,7 @@ func formatExcelInfo2Detail(excelInfo *excel.ExcelInfo, sysUserId int, lang stri
 		}
 
 		excelDetail.TableData = result
-	case utils.MIXED_TABLE, utils.BALANCE_TABLE: // 混合表格
+	case utils.MIXED_TABLE, utils.BALANCE_TABLE: // 混合表格 平衡表
 		var result request.MixedTableReq
 		err = json.Unmarshal([]byte(excelDetail.Content), &result)
 		if err != nil {
@@ -183,7 +183,7 @@ func GetExcelInfoOpButton(sysUser *system.Admin, belongUserId, source int, haveO
 		}
 	}
 
-	// todo 如果是平衡表,判断是否是协作人
+	//todo 如果是平衡表,判断是否是协作人
 
 	return
 }