Ver código fonte

平衡表添加图表

xyxie 11 meses atrás
pai
commit
f6ab6ce8d7

+ 47 - 44
controllers/data_manage/excel/excel_info.go

@@ -79,35 +79,37 @@ func (c *ExcelInfoController) Add() {
 		return
 	}
 
-	if req.ExcelClassifyId <= 0 {
+	if req.ExcelClassifyId <= 0 && req.ParentId == 0 {
 		br.Msg = "分类参数错误!"
 		br.IsSendEmail = false
 		return
 	}
 
-	excelClassify, err := excel3.GetExcelClassifyById(req.ExcelClassifyId)
-	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
+	if req.ExcelClassifyId > 0 {
+		excelClassify, e := excel3.GetExcelClassifyById(req.ExcelClassifyId)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				br.Msg = "分类不存在"
+				br.ErrMsg = "分类不存在"
+				br.IsSendEmail = false
+				return
+			}
+			br.Msg = "获取分类信息失败"
+			br.ErrMsg = "获取分类信息失败,Err:" + e.Error()
+			return
+		}
+		if excelClassify == nil {
 			br.Msg = "分类不存在"
 			br.ErrMsg = "分类不存在"
 			br.IsSendEmail = false
 			return
 		}
-		br.Msg = "获取分类信息失败"
-		br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
-		return
-	}
-	if excelClassify == nil {
-		br.Msg = "分类不存在"
-		br.ErrMsg = "分类不存在"
-		br.IsSendEmail = false
-		return
 	}
 
 	var condition string
 	var pars []interface{}
-	condition += " AND excel_classify_id=? "
-	pars = append(pars, req.ExcelClassifyId)
+	condition += " AND excel_classify_id=? AND parent_id=?"
+	pars = append(pars, req.ExcelClassifyId, req.ParentId)
 
 	condition += " AND excel_name=? "
 	pars = append(pars, req.ExcelName)
@@ -252,11 +254,11 @@ func (c *ExcelInfoController) Add() {
 		timestamp = strconv.FormatInt(time.Now().UnixNano(), 10) + "_" + utils.GetRandString(10)
 		childExcel = &excel3.ExcelInfo{
 			//ExcelInfoId:     0,
-			ExcelName:       "平衡表",
-			Source:          excelInfo.Source,
-			ExcelType:       excelInfo.ExcelType,
-			UniqueCode:      utils.MD5(utils.EXCEL_DATA_PREFIX + "_" + timestamp),
-			ExcelClassifyId: req.ExcelClassifyId,
+			ExcelName:  "平衡表",
+			Source:     excelInfo.Source,
+			ExcelType:  excelInfo.ExcelType,
+			UniqueCode: utils.MD5(utils.EXCEL_DATA_PREFIX + "_" + timestamp),
+			//ExcelClassifyId: req.ExcelClassifyId,
 			SysUserId:       sysUser.AdminId,
 			SysUserRealName: sysUser.RealName,
 			Content:         excelInfo.Content,
@@ -597,13 +599,20 @@ func (c *ExcelInfoController) Edit() {
 		return
 	}
 
-	if req.ExcelClassifyId <= 0 {
+	excelInfo, err := excel3.GetExcelInfoById(req.ExcelInfoId)
+	if err != nil {
+		br.Msg = "获取ETA表格失败"
+		br.ErrMsg = "获取ETA表格失败,Err:" + err.Error()
+		return
+	}
+
+	if req.ExcelClassifyId <= 0 && excelInfo.ParentId == 0 {
 		br.Msg = "分类参数错误!"
 		br.IsSendEmail = false
 		return
 	}
 
-	// 标记编辑状态
+	// todo 标记编辑状态
 	markRet, err := services.UpdateExcelEditMark(req.ExcelInfoId, sysUser.AdminId, 1, sysUser.RealName)
 	if err != nil {
 		br.Msg = "查询标记状态失败"
@@ -616,23 +625,25 @@ func (c *ExcelInfoController) Edit() {
 		br.Data = markRet
 		return
 	}
-	excelClassify, err := excel3.GetExcelClassifyById(req.ExcelClassifyId)
-	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
+	if req.ExcelClassifyId > 0 {
+		excelClassify, e := excel3.GetExcelClassifyById(req.ExcelClassifyId)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				br.Msg = "分类不存在"
+				br.ErrMsg = "分类不存在"
+				br.IsSendEmail = false
+				return
+			}
+			br.Msg = "获取分类信息失败"
+			br.ErrMsg = "获取分类信息失败,Err:" + e.Error()
+			return
+		}
+		if excelClassify == nil {
 			br.Msg = "分类不存在"
 			br.ErrMsg = "分类不存在"
 			br.IsSendEmail = false
 			return
 		}
-		br.Msg = "获取分类信息失败"
-		br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
-		return
-	}
-	if excelClassify == nil {
-		br.Msg = "分类不存在"
-		br.ErrMsg = "分类不存在"
-		br.IsSendEmail = false
-		return
 	}
 
 	//判断表格是否存在
@@ -641,8 +652,8 @@ func (c *ExcelInfoController) Edit() {
 	condition += " AND excel_info_id != ? "
 	pars = append(pars, req.ExcelInfoId)
 
-	condition += " AND excel_classify_id=? "
-	pars = append(pars, req.ExcelClassifyId)
+	condition += " AND excel_classify_id=? AND parent_id=?"
+	pars = append(pars, req.ExcelClassifyId, excelInfo.ParentId)
 
 	condition += " AND excel_name=? "
 	pars = append(pars, req.ExcelName)
@@ -660,13 +671,6 @@ func (c *ExcelInfoController) Edit() {
 		return
 	}
 
-	excelInfo, err := excel3.GetExcelInfoById(req.ExcelInfoId)
-	if err != nil {
-		br.Msg = "获取ETA表格失败"
-		br.ErrMsg = "获取ETA表格失败,Err:" + err.Error()
-		return
-	}
-
 	// 操作权限校验
 	{
 		// 数据权限
@@ -761,7 +765,6 @@ func (c *ExcelInfoController) Edit() {
 	excelInfo.ExcelClassifyId = req.ExcelClassifyId
 	excelInfo.ExcelImage = req.ExcelImage
 	excelInfo.Content = content
-
 	// 自动保存时不会传缩略图,也就不更新这个字段
 	var updateExcelInfoParams []string
 	if req.ExcelImage != "" {

+ 65 - 25
models/data_manage/excel/excel_chart_edb.go

@@ -1,6 +1,7 @@
 package excel
 
 import (
+	"eta/eta_api/models/data_manage"
 	"eta/eta_api/utils"
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
@@ -10,12 +11,21 @@ import (
 type ExcelChartEdb struct {
 	ExcelChartEdbId int       `orm:"column(excel_chart_edb_id);pk"`
 	ExcelInfoId     int       `description:"表格id"`
+	ChartInfoId     int       `description:"图表id"`
 	EdbCode         string    `description:"指标编码"`
 	EdbName         string    `description:"指标名称"`
 	DateSequence    string    `description:"日期序列选区"`
 	DataSequence    string    `description:"数据序列选区"`
 	SysUserId       int       `description:"创建人"`
 	SysUserRealName string    `description:"创建人姓名"`
+	MaxData         float64   `description:"上限"`
+	MinData         float64   `description:"下限"`
+	IsOrder         bool      `description:"true:正序,false:逆序"`
+	IsAxis          int       `description:"true:左轴,false:右轴"`
+	EdbInfoType     int       `description:"true:标准指标,false:领先指标"`
+	LeadValue       int       `description:"领先值"`
+	LeadUnit        string    `description:"领先单位"`
+	FromTag         string    `description:"标签"`
 	ModifyTime      time.Time `description:"修改时间"`
 	CreateTime      time.Time `description:"创建时间"`
 }
@@ -45,8 +55,14 @@ func (e *ExcelChartEdb) Delete() (err error) {
 	return
 }
 
+type AddChartEdbAndDataItem struct {
+	ChartEdb *ExcelChartEdb
+	DateList []string  `description:"日期列表"`
+	ValList  []float64 `description:"数据列表"`
+}
+
 // 同时添加指标和指标数据
-func (e *ExcelChartEdb) AddChartEdb(chartEdb *ExcelChartEdb, dateList []string, valList []float64) (err error) {
+func (e *ExcelChartEdb) AddChartEdbAndData(list []*AddChartEdbAndDataItem, chartInfo *data_manage.ChartInfo) (err error) {
 	o, err := orm.NewOrmUsingDB("data").Begin()
 	if err != nil {
 		return
@@ -59,6 +75,29 @@ func (e *ExcelChartEdb) AddChartEdb(chartEdb *ExcelChartEdb, dateList []string,
 		}
 	}()
 
+	// 图表指标信息入库
+	updateIds := make([]int, 0)
+	for _, item := range list {
+		err = addChartEdbAndData(o, item.ChartEdb, item.DateList, item.ValList)
+		if err != nil {
+			return
+		}
+		updateIds = append(updateIds, item.ChartEdb.ExcelChartEdbId)
+	}
+
+	//新增图表
+	chartInfoId, err := o.Insert(chartInfo)
+	if err != nil {
+		return
+	}
+
+	//更新图表id
+	sql := `update excel_chart_edb set chart_info_id = ? where excel_chart_edb_id in (` + utils.GetOrmInReplace(len(updateIds)) + `)`
+	_, err = o.Raw(sql, chartInfoId).Exec()
+	return
+}
+
+func addChartEdbAndData(o orm.TxOrmer, chartEdb *ExcelChartEdb, dateList []string, valList []float64) (err error) {
 	// 图表指标信息入库
 	lastId, err := o.Insert(chartEdb)
 	if err != nil {
@@ -68,31 +107,33 @@ func (e *ExcelChartEdb) AddChartEdb(chartEdb *ExcelChartEdb, dateList []string,
 
 	// 图表指标数据入库
 	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 {
+	if len(dateList) > 0 && len(valList) > 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
 			}
-			addList = addList[:0]
+			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]
+			}
 		}
 	}
 
@@ -103,6 +144,5 @@ func (e *ExcelChartEdb) AddChartEdb(chartEdb *ExcelChartEdb, dateList []string,
 			return
 		}
 	}
-
 	return
 }

+ 44 - 2
models/data_manage/excel/request/balance_table.go

@@ -1,10 +1,52 @@
 package request
 
-type AddBalanceTableChart struct {
-	ExcelInfoId     int      `description:"表格ID"`
+import "eta/eta_api/models/data_manage"
+
+type AddBalanceTableChartItem struct {
 	DateSequenceStr string   `description:"日期序列"`
 	DateSequenceVal []string `description:"日期序列的值列表"`
 	DataSequenceStr string   `description:"数据序列"`
 	DataSequenceVal []string `description:"数据序列的值列表"`
 	EdbName         string   `description:"指标名称"`
+	MaxData         float64  `description:"上限"`
+	MinData         float64  `description:"下限"`
+	IsOrder         bool     `description:"true:正序,false:逆序"`
+	IsAxis          int      `description:"true:左轴,false:右轴"`
+	EdbInfoType     int      `description:"true:标准指标,false:领先指标"`
+	LeadValue       int      `description:"领先值"`
+	LeadUnit        string   `description:"领先单位"`
+	FromTag         string   `description:"标签"`
+}
+
+type AddBalanceTableChartReq struct {
+	ExcelInfoId int `description:"表格ID"`
+	ChartInfoId int `description:"图表id,新增时传0"`
+	//ChartClassifyId int    `description:"分类id"`
+	ChartName string `description:"图表名称"`
+	ChartType int    `description:"生成样式:1:曲线图,2:季节性图,3:面积图,4:柱状图,5:散点图,6:组合图,7:柱方图"`
+	//DateType        int    `description:"日期类型:1:00年至今,2:10年至今,3:15年至今,4:年初至今,5:自定义时间,6:起始日期至今"`
+	//StartDate       string `description:"自定义开始日期"`
+	//EndDate         string `description:"自定义结束日期"`
+	Calendar   string `description:"公历/农历"`
+	LeftMin    string `description:"图表左侧最小值"`
+	LeftMax    string `description:"图表左侧最大值"`
+	RightMin   string `description:"图表右侧最小值"`
+	RightMax   string `description:"图表右侧最大值"`
+	Right2Min  string `description:"图表右侧2最小值"`
+	Right2Max  string `description:"图表右侧2最大值"`
+	MinMaxSave int    `description:"是否手动保存过上下限:0-否;1-是"`
+	//BarChartInfo         BarChartInfoReq         `description:"柱方图的配置"`
+	//CorrelationChartInfo CorrelationChartInfoReq `description:"相关性图表配置"`
+	ExtraConfig       string                      `description:"图表额外配置信息,json字符串"`
+	ChartImage        string                      `description:"封面图" json:"-"`
+	SeasonExtraConfig data_manage.SeasonExtraItem `description:"季节性图表中的配置,json数据"`
+	StartYear         int                         `description:"当选择的日期类型为最近N年类型时,即date_type=20, 用start_year表示N"`
+	//ChartThemeId      int             `description:"图表应用主题ID"`
+	//SourcesFrom       string          `description:"图表来源"`
+	//Instructions      string          `description:"图表说明"`
+	//MarkersLines      string          `description:"标识线"`
+	//MarkersAreas      string          `description:"标识区"`
+	//Unit              string          `description:"中文单位名称"`
+	//UnitEn            string          `description:"英文单位名称"`
+	ChartEdbList []AddBalanceTableChartItem
 }

+ 55 - 19
services/data/excel/balance_table.go

@@ -1,20 +1,22 @@
 package excel
 
 import (
+	"eta/eta_api/models/data_manage"
 	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"
+	"time"
 )
 
 // AddBalanceTableChart 添加平衡表图表
-func AddBalanceTableChart(req request.AddBalanceTableChart, sysUser *system.Admin) (err error, errMsg string) {
+func AddBalanceTableChart(req request.AddBalanceTableChartReq, 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()
+		err = fmt.Errorf("找不到该EXCEL!")
 		return
 	}
 
@@ -22,25 +24,59 @@ func AddBalanceTableChart(req request.AddBalanceTableChart, sysUser *system.Admi
 		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 {
-		// 如果是静态表,则直接使用前端传输的数据落到数据库里
+	if len(req.ChartEdbList) == 0 {
+		errMsg = "图表数据不能为空!" + err.Error()
+		err = fmt.Errorf("图表数据不能为空!")
+		return
 	}
+	chartEdbList := make([]*excelModel.AddChartEdbAndDataItem, 0)
+	for _, chartEdb := range req.ChartEdbList {
+		excelEdb := new(excelModel.ExcelChartEdb)
+		excelEdb.EdbName = chartEdb.EdbName
+		randStr := utils.GetRandDigit(4)
+		excelEdb.EdbCode = `T` + time.Now().Format("060102150405") + "_" + randStr
+		excelEdb.ExcelInfoId = excelInfo.ExcelInfoId
+		excelEdb.DateSequence = chartEdb.DateSequenceStr
+		excelEdb.DataSequence = chartEdb.DataSequenceStr
+		excelEdb.SysUserId = sysUser.AdminId
+		excelEdb.SysUserRealName = sysUser.RealName
+		excelEdb.MaxData = chartEdb.MaxData
+		excelEdb.MinData = chartEdb.MinData
+		excelEdb.IsOrder = chartEdb.IsOrder
+		excelEdb.IsAxis = chartEdb.IsAxis
+		excelEdb.FromTag = chartEdb.FromTag
+		excelEdb.EdbInfoType = chartEdb.EdbInfoType
+		excelEdb.LeadValue = chartEdb.LeadValue
+		excelEdb.LeadUnit = chartEdb.LeadUnit
+		var dateList []string
+		var dataList []float64
+		if excelInfo.BalanceType == 1 {
+			// 如果是静态表,则直接使用前端传输的数据落到数据库里
+			dateList, dataList, err, errMsg = HandleEdbSequenceVal(chartEdb.DateSequenceVal, chartEdb.DataSequenceVal)
+			if err != nil {
+				errMsg = "时间序列或数据序列异常!" + err.Error()
+				err = fmt.Errorf("时间序列或数据序列异常!")
+				return
+			}
+		}
 
-	// 将平衡表图表添加到工作表中
-	// 新增指标数据
+		// 处理日期列表和值列表
+		addItem := &excelModel.AddChartEdbAndDataItem{
+			ChartEdb: excelEdb,
+			DateList: dateList,
+			ValList:  dataList,
+		}
+		chartEdbList = append(chartEdbList, addItem)
+	}
+	// todo 处理图表
+	chartInfo := new(data_manage.ChartInfo)
+	obj := new(excelModel.ExcelChartEdb)
+	err = obj.AddChartEdbAndData(chartEdbList, chartInfo)
+	if err != nil {
+		errMsg = err.Error()
+		err = fmt.Errorf("新增图表失败!")
+		return
+	}
 
-	// 新增图表
 	return
 }