Browse Source

静态表数据落库

xyxie 10 months ago
parent
commit
40be3e0be8

+ 97 - 11
controllers/data_manage/excel/balance_table.go

@@ -443,7 +443,33 @@ func (c *ExcelInfoController) BalanceChartInfoAdd() {
 			return
 		}
 	}
-	chartInfo, err, errMsg, isSendEmail := data.AddBalanceExcelChart(excelInfo, req, sysUser)
+	// 判断如果是静态表,则查询表数据,落库
+	dataListMap := make(map[int][]*data_manage.EdbDataList)
+	if excelInfo.BalanceType == 1 {
+		newExcelDataMap, excelAllRows, excelAllCols, e, errMsg := excelService.GetBalanceExcelData(excelInfo, "")
+		if e != nil {
+			br.Msg = "获取表格数据失败"
+			if errMsg != "" {
+				br.Msg = errMsg
+			}
+			br.ErrMsg = "获取表格数据失败,Err:" + e.Error()
+			return
+		}
+
+		for k, mapping := range req.ChartEdbInfoList {
+			tmpMapping := &excel.ExcelChartEdb{
+				ExcelChartEdbId: k,
+				DateSequence:    mapping.DateSequenceStr,
+				DataSequence:    mapping.DataSequenceStr,
+			}
+			err, errMsg = excelService.GetBalanceExcelEdbData(tmpMapping, newExcelDataMap, dataListMap, excelAllRows, excelAllCols)
+			if err != nil {
+				err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", err.Error())
+				return
+			}
+		}
+	}
+	chartInfo, err, errMsg, isSendEmail := data.AddBalanceExcelChart(excelInfo, req, sysUser, dataListMap)
 	if err != nil {
 		br.Msg = "保存失败"
 		if errMsg != `` {
@@ -592,7 +618,33 @@ func (c *ExcelInfoController) BalanceChartInfoEdit() {
 			return
 		}
 	}
-	chartItem, err, errMsg, isSendEmail := data.EditBalanceExcelChart(excelInfo, req, sysUser)
+	// 判断如果是静态表,则查询表数据,落库
+	dataListMap := make(map[int][]*data_manage.EdbDataList)
+	if excelInfo.BalanceType == 1 {
+		newExcelDataMap, excelAllRows, excelAllCols, e, errMsg := excelService.GetBalanceExcelData(excelInfo, "")
+		if e != nil {
+			br.Msg = "获取表格数据失败"
+			if errMsg != "" {
+				br.Msg = errMsg
+			}
+			br.ErrMsg = "获取表格数据失败,Err:" + e.Error()
+			return
+		}
+
+		for _, mapping := range req.ChartEdbInfoList {
+			tmpMapping := &excel.ExcelChartEdb{
+				ExcelChartEdbId: mapping.ExcelChartEdbId,
+				DateSequence:    mapping.DateSequenceStr,
+				DataSequence:    mapping.DataSequenceStr,
+			}
+			err, errMsg = excelService.GetBalanceExcelEdbData(tmpMapping, newExcelDataMap, dataListMap, excelAllRows, excelAllCols)
+			if err != nil {
+				err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", err.Error())
+				return
+			}
+		}
+	}
+	chartItem, err, errMsg, isSendEmail := data.EditBalanceExcelChart(excelInfo, req, sysUser, dataListMap)
 	if err != nil {
 		br.Msg = "保存失败"
 		if errMsg != `` {
@@ -1032,6 +1084,7 @@ func (c *ExcelInfoController) AddStaticExcel() {
 		}
 	}
 	// 查询出每个子表的内容,并将内容转为静态版本
+	excelDataMap := make(map[int]map[int][]*data_manage.EdbDataList)
 	//查询动态表所有的子表,并复制为静态表
 	condition := " AND parent_id = ? AND balance_type = 0 "
 	var pars []interface{}
@@ -1043,6 +1096,37 @@ func (c *ExcelInfoController) AddStaticExcel() {
 		return
 	}
 	for k, childExcelInfo := range childExcelList {
+		//得到表格数据并落库
+
+		newExcelDataMap, excelAllRows, excelAllCols, e, errMsg := excelService.GetBalanceExcelData(childExcelInfo, "")
+		if e != nil {
+			br.Msg = "获取表格数据失败"
+			if errMsg != "" {
+				br.Msg = errMsg
+			}
+			br.ErrMsg = "获取表格数据失败,Err:" + e.Error()
+			return
+		}
+		tmpMappingList, e := excel.GetExcelChartEdbMappingByExcelInfoId(childExcelInfo.ExcelInfoId)
+		if e != nil {
+			err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", err.Error())
+			return
+		}
+		if len(tmpMappingList) > 0 {
+			for _, mapping := range tmpMappingList {
+				child, ok := excelDataMap[mapping.ChartInfoId]
+				if !ok {
+					child = make(map[int][]*data_manage.EdbDataList)
+				}
+				err, errMsg = excelService.GetBalanceExcelEdbData(mapping, newExcelDataMap, child, excelAllRows, excelAllCols)
+				if err != nil {
+					err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", err.Error())
+					return
+				}
+				excelDataMap[mapping.ChartInfoId] = child
+			}
+		}
+
 		content, e := excelService.TransferBalanceExcelContentToStatic(childExcelInfo, "")
 		if e != nil {
 			br.Msg = "动态内容转成静态失败"
@@ -1052,7 +1136,7 @@ func (c *ExcelInfoController) AddStaticExcel() {
 		childExcelList[k].Content = content
 	}
 
-	excelInfo, err, errMsg, isSendEmail := data.AddBalanceStaticExcel(oldExcelInfo, req.VersionName, sysUser, 0, req.ExcelInfoId, 1, childExcelList, true)
+	excelInfo, err, errMsg, isSendEmail := data.AddBalanceStaticExcel(oldExcelInfo, req.VersionName, sysUser, 0, req.ExcelInfoId, 1, childExcelList, true, excelDataMap)
 	if err != nil {
 		br.Msg = "复制失败"
 		if errMsg != `` {
@@ -1282,10 +1366,10 @@ func (c *ExcelInfoController) ModifyBalanceExcelVersion() {
 	br.IsAddLog = true
 }
 
-func downloadBalanceTable(excelInfo *excel.ExcelInfo) (savePath, zipName string, err error, errMsg string) {
+func downloadBalanceTable(excelInfo *excel.ExcelInfo) (savePath, zipName string, uploadDir string, err error, errMsg string) {
 	dateDir := time.Now().Format("20060102")
 	randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
-	uploadDir := "static/xls/" + dateDir + "/" + randStr + "/" + utils.GetRandString(6)
+	uploadDir = "static/xls/" + dateDir + "/" + randStr
 	err = os.MkdirAll(uploadDir, utils.DIR_MOD)
 	if err != nil {
 		return
@@ -1353,13 +1437,14 @@ func downloadBalanceTable(excelInfo *excel.ExcelInfo) (savePath, zipName string,
 		if err != nil {
 			return
 		}
-		fileList = append(fileList, fpath)
+		fileList = append(fileList, fileName)
 	}
 	// 创建zip
 	zipName = excelInfo.ExcelName + ".zip"
 
-	savePath = zipName
-	zipFile, err := os.Create(zipName)
+	savePath = uploadDir + "/" + zipName
+	fmt.Println(savePath)
+	zipFile, err := os.Create(savePath)
 	if err != nil {
 		return
 	}
@@ -1370,9 +1455,9 @@ func downloadBalanceTable(excelInfo *excel.ExcelInfo) (savePath, zipName string,
 			zipWriter.Close()
 			zipFile.Close()
 		}
-		os.Remove(savePath)
+		//os.Remove(savePath)
 	}()
-	// 获取音频,写入zip
+	//写入zip
 	for i := 0; i < len(fileList); i++ {
 		ioWriter, e := zipWriter.Create(fileList[i])
 		if e != nil {
@@ -1383,7 +1468,8 @@ func downloadBalanceTable(excelInfo *excel.ExcelInfo) (savePath, zipName string,
 			}
 			return
 		}
-		content, e := ioutil.ReadFile(fileList[i])
+		fullPath := uploadDir + "/" + fileList[i]
+		content, e := ioutil.ReadFile(fullPath)
 		if e != nil {
 			err = fmt.Errorf("读取文件失败,Err:" + e.Error())
 			return

+ 25 - 5
controllers/data_manage/excel/excel_info.go

@@ -772,6 +772,11 @@ func (c *ExcelInfoController) Edit() {
 	// 引用的指标id
 	edbInfoIdList := make([]int, 0)
 	content := req.Content
+	contentFlag := false
+	if req.Content != excelInfo.Content {
+		contentFlag = true
+	}
+	balanceTableData := make([][]request.MixedTableCellDataReq, 0)
 	switch excelInfo.Source {
 	case utils.TIME_TABLE: // 自定义表格
 		jsonStrByte, err := json.Marshal(req.TableData)
@@ -826,6 +831,7 @@ func (c *ExcelInfoController) Edit() {
 			br.ErrMsg = "获取最新的数据失败,Err:" + err.Error()
 			return
 		}
+		balanceTableData = newResult
 		edbInfoIdMap := make(map[int]int)
 		for _, tmpV := range newResult {
 			for _, v := range tmpV {
@@ -881,15 +887,26 @@ func (c *ExcelInfoController) Edit() {
 			parentExcelInfoId = excelInfo.RelExcelInfoId
 		}
 		err = excel3.ModifyExcelInfoUpdateUserId(parentExcelInfoId, sysUser.AdminId, sysUser.RealName)
-		br.Msg = "保存失败"
-		br.ErrMsg = "保存失败,Err:" + err.Error()
-		return
+		if err != nil {
+			br.Msg = "保存失败"
+			br.ErrMsg = "保存失败,Err:" + err.Error()
+			return
+		}
+
 	}
 	// 更新excel下载地址(默认的EXCEL需要更新,自定义表格不需要更新)
 	if excelInfo.Source == 1 {
 		go excel2.UpdateExcelInfoFileUrl(excelInfo)
 	}
-
+	// 更新平衡表图表指标
+	if excelInfo.Source == utils.BALANCE_TABLE && excelInfo.BalanceType == 1 && contentFlag == true { //静态表更新表数据
+		err = excel2.SyncBalanceEdbData(excelInfo, balanceTableData)
+		if err != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = err.Error()
+			return
+		}
+	}
 	// 加入草稿
 	{
 		excelDraftInfo := &excel3.ExcelDraft{
@@ -2262,7 +2279,7 @@ func (c *ExcelInfoController) Download() {
 			return
 		}
 	case utils.BALANCE_TABLE: // 混合表格
-		savePath, fileName, err, errMsg := downloadBalanceTable(excelInfo)
+		savePath, fileName, uploadDir, err, errMsg := downloadBalanceTable(excelInfo)
 		if err != nil {
 			br.Msg = "下载失败"
 			if errMsg != `` {
@@ -2271,6 +2288,9 @@ func (c *ExcelInfoController) Download() {
 			br.ErrMsg = "获取最新的数据失败,Err:" + err.Error()
 			return
 		}
+		defer func() {
+			_ = os.Remove(uploadDir)
+		}()
 		// todo 删除文件
 		c.Ctx.Output.Download(savePath, fileName)
 		br.Ret = 200

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

@@ -1,6 +1,8 @@
 package excel
 
 import (
+	"eta/eta_api/models/data_manage"
+	"fmt"
 	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
@@ -9,6 +11,7 @@ type ExcelChartData struct {
 	ExcelChartDataId int `orm:"column(excel_chart_data_id);pk"`
 	ExcelInfoId      int `description:"表格id"`
 	ExcelChartEdbId  int `description:"指标ID"`
+	ChartInfoId      int `description:"图表id"`
 	DataTime         string
 	Value            float64
 	ModifyTime       time.Time `description:"修改时间"`
@@ -42,3 +45,82 @@ func (e *ExcelChartData) Delete() (err error) {
 }
 
 // 查询
+func GetExcelChartDataByExcelInfoId(excelInfoId int) (list []*ExcelChartData, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT *
+             FROM excel_chart_data
+			 WHERE excel_info_id=? 
+             ORDER BY excel_chart_edb_id ASC, excel_chart_data_id ASC `
+	_, err = o.Raw(sql, excelInfoId).QueryRows(&list)
+	return
+}
+
+func BatchUpdateChartEdbData(excelInfoId int, excelEdbMap map[int]*ExcelChartEdb, excelDataMap map[int][]*data_manage.EdbDataList) (err error) {
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
+	//如果有数据则删除所有的数据
+	sql := `delete from excel_chart_data where excel_info_id = ?`
+	_, err = o.Raw(sql, excelInfoId).Exec()
+	if err != nil {
+		return
+	}
+
+	// 图表指标数据入库
+	addList := make([]*ExcelChartData, 0)
+	for chartEdbId, dataList := range excelDataMap {
+		chartEdb, ok := excelEdbMap[chartEdbId]
+		if !ok {
+			err = fmt.Errorf("chartEdbId:%d not exist", chartEdbId)
+			return
+		}
+		for _, v := range dataList {
+			chartData := &ExcelChartData{
+				ExcelInfoId:     chartEdb.ExcelInfoId,
+				ExcelChartEdbId: chartEdb.ExcelChartEdbId,
+				ChartInfoId:     chartEdb.ChartInfoId,
+				DataTime:        v.DataTime,
+				Value:           v.Value,
+				DataTimestamp:   v.DataTimestamp,
+				ModifyTime:      time.Now(),
+				CreateTime:      time.Now(),
+			}
+			addList = append(addList, chartData)
+			// data信息入库
+			if len(addList) > 1000 {
+				_, err = o.InsertMulti(len(addList), addList)
+				if err != nil {
+					return
+				}
+				addList = addList[:0]
+			}
+		}
+	}
+
+	// data信息入库
+	if len(addList) > 0 {
+		_, err = o.InsertMulti(len(addList), addList)
+		if err != nil {
+			return
+		}
+	}
+	return
+}
+
+func GetExcelChartDataByChartInfoId(chartInfoId int) (list []*ExcelChartData, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT *
+             FROM excel_chart_Data
+			 WHERE chart_info_id=? 
+             ORDER BY excel_chart_edb_id ASC `
+	_, err = o.Raw(sql, chartInfoId).QueryRows(&list)
+	return
+}

+ 12 - 19
models/data_manage/excel/excel_chart_edb.go

@@ -97,8 +97,7 @@ func (e *ExcelChartEdb) Delete() (err error) {
 
 type AddChartEdbAndDataItem struct {
 	ChartEdb *ExcelChartEdb
-	DateList []string  `description:"日期列表"`
-	ValList  []float64 `description:"数据列表"`
+	DataList []*ExcelChartData `description:"数据列表"`
 }
 
 // 同时添加指标和指标数据
@@ -128,7 +127,7 @@ func (e *ExcelChartEdb) AddChartEdbAndData(list []*AddChartEdbAndDataItem, chart
 	updateIds := make([]int, 0)
 	var edbInfoIdArrStr []string
 	for _, item := range list {
-		err = addChartEdbAndData(o, item.ChartEdb, item.DateList, item.ValList)
+		err = addChartEdbAndData(o, item.ChartEdb, item.DataList)
 		if err != nil {
 			return
 		}
@@ -170,7 +169,7 @@ func (e *ExcelChartEdb) AddChartEdbAndData(list []*AddChartEdbAndDataItem, chart
 	return
 }
 
-func addChartEdbAndData(o orm.TxOrmer, chartEdb *ExcelChartEdb, dateList []string, valList []float64) (err error) {
+func addChartEdbAndData(o orm.TxOrmer, chartEdb *ExcelChartEdb, dataList []*ExcelChartData) (err error) {
 	// 图表指标信息入库
 	excelChartEdbId := chartEdb.ExcelChartEdbId
 	if chartEdb.ExcelChartEdbId <= 0 {
@@ -198,28 +197,22 @@ func addChartEdbAndData(o orm.TxOrmer, chartEdb *ExcelChartEdb, dateList []strin
 
 	// 图表指标数据入库
 	addList := make([]*ExcelChartData, 0)
-	if len(dateList) > 0 && len(valList) > 0 {
-		for k, v := range dateList {
+	if len(dataList) > 0 {
+		for _, v := range dataList {
 			chartData := &ExcelChartData{
 				ExcelInfoId:     chartEdb.ExcelInfoId,
 				ExcelChartEdbId: chartEdb.ExcelChartEdbId,
-				DataTime:        v,
-				Value:           valList[k],
+				ChartInfoId:     chartEdb.ChartInfoId,
+				DataTime:        v.DataTime,
+				Value:           v.Value,
+				DataTimestamp:   v.DataTimestamp,
 				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))
+				_, err = o.InsertMulti(len(addList), addList)
 				if err != nil {
 					return
 				}
@@ -230,7 +223,7 @@ func addChartEdbAndData(o orm.TxOrmer, chartEdb *ExcelChartEdb, dateList []strin
 
 	// data信息入库
 	if len(addList) > 0 {
-		_, err = o.InsertMulti(len(addList), len(addList))
+		_, err = o.InsertMulti(len(addList), addList)
 		if err != nil {
 			return
 		}
@@ -243,7 +236,7 @@ func GetExcelChartEdbMappingByExcelInfoId(excelInfoId int) (list []*ExcelChartEd
 	sql := ` SELECT *
              FROM excel_chart_edb 
 			 WHERE excel_info_id=? 
-             ORDER BY excel_chart_edb_id ASC `
+             ORDER BY chart_info_id asc, excel_chart_edb_id ASC `
 	_, err = o.Raw(sql, excelInfoId).QueryRows(&list)
 	return
 }

+ 1 - 1
models/data_manage/excel/excel_info.go

@@ -701,7 +701,7 @@ type ExcelInfoDetailButton struct {
 
 func ModifyExcelInfoUpdateUserId(excelInfoId, userId int, userName string) (err error) {
 	o := orm.NewOrmUsingDB("data")
-	sql := `UPDATE excel_info SET sys_user_id=?,sys_user_real_name=? WHERE excel_info_id =? `
+	sql := `UPDATE excel_info SET update_user_id=?,update_user_real_name=? WHERE excel_info_id =? `
 	_, err = o.Raw(sql, userId, userName, excelInfoId).Exec()
 	return
 }

+ 84 - 37
services/data/chart_info_excel_balance.go

@@ -18,7 +18,7 @@ import (
 )
 
 // AddBalanceExcelChart 添加平衡表图表
-func AddBalanceExcelChart(excelInfo *excelModel.ExcelInfo, req request.AddBalanceTableChartReq, sysUser *system.Admin) (chartInfo *data_manage.ChartInfo, err error, errMsg string, isSendEmail bool) {
+func AddBalanceExcelChart(excelInfo *excelModel.ExcelInfo, req request.AddBalanceTableChartReq, sysUser *system.Admin, dataListMap map[int][]*data_manage.EdbDataList) (chartInfo *data_manage.ChartInfo, err error, errMsg string, isSendEmail bool) {
 
 	/*// 操作权限校验, 增加协作人判断
 	{
@@ -61,7 +61,7 @@ func AddBalanceExcelChart(excelInfo *excelModel.ExcelInfo, req request.AddBalanc
 		return
 	}
 	chartEdbList := make([]*excelModel.AddChartEdbAndDataItem, 0)
-	for _, chartEdb := range req.ChartEdbInfoList {
+	for k, chartEdb := range req.ChartEdbInfoList {
 		excelEdb := new(excelModel.ExcelChartEdb)
 		excelEdb.EdbName = chartEdb.EdbName
 		randStr := utils.GetRandDigit(4)
@@ -82,23 +82,28 @@ func AddBalanceExcelChart(excelInfo *excelModel.ExcelInfo, req request.AddBalanc
 		excelEdb.CreateTime = time.Now()
 		excelEdb.ModifyTime = time.Now()
 		excelEdb.ChartWidth = 1
-		var dateList []string
-		var dataList []float64
+		var dataList []*excelModel.ExcelChartData
 		if excelInfo.BalanceType == 1 {
-			// 如果是静态表,则直接使用前端传输的数据落到数据库里
-			/*dateList, dataList, err, errMsg = utils.HandleEdbSequenceVal(chartEdb.DateSequenceVal, chartEdb.DataSequenceVal)
-			if err != nil {
-				errMsg = "时间序列或数据序列异常!"
-				err = fmt.Errorf("时间序列或数据序列异常!%s", err.Error())
+			tmpList, ok := dataListMap[k]
+			if !ok {
+				errMsg = "查询图表数据失败!"
+				err = fmt.Errorf("查询图表数据失败!%s", err.Error())
 				return
-			}*/
+			}
+			for _, l := range tmpList {
+				tmp := &excelModel.ExcelChartData{
+					DataTime:      l.DataTime,
+					Value:         l.Value,
+					DataTimestamp: l.DataTimestamp,
+				}
+				dataList = append(dataList, tmp)
+			}
 		}
 
 		// 处理日期列表和值列表
 		addItem := &excelModel.AddChartEdbAndDataItem{
 			ChartEdb: excelEdb,
-			DateList: dateList,
-			ValList:  dataList,
+			DataList: dataList,
 		}
 		chartEdbList = append(chartEdbList, addItem)
 	}
@@ -267,7 +272,7 @@ func addBalanceExcelChart(req request.AddBalanceTableChartReq, sysUserId int, sy
 }
 
 // EditBalanceExcelChart 添加平衡表图表
-func EditBalanceExcelChart(excelInfo *excelModel.ExcelInfo, req request.AddBalanceTableChartReq, sysUser *system.Admin) (chartInfo *data_manage.ChartInfo, err error, errMsg string, isSendEmail bool) {
+func EditBalanceExcelChart(excelInfo *excelModel.ExcelInfo, req request.AddBalanceTableChartReq, sysUser *system.Admin, dataListMap map[int][]*data_manage.EdbDataList) (chartInfo *data_manage.ChartInfo, err error, errMsg string, isSendEmail bool) {
 	if len(req.ChartEdbInfoList) == 0 {
 		errMsg = "图表数据不能为空!"
 		err = fmt.Errorf("图表数据不能为空!%s", err.Error())
@@ -322,7 +327,7 @@ func EditBalanceExcelChart(excelInfo *excelModel.ExcelInfo, req request.AddBalan
 
 	// 查询edbIds
 	chartEdbList := make([]*excelModel.AddChartEdbAndDataItem, 0)
-	for _, chartEdb := range req.ChartEdbInfoList {
+	for k, chartEdb := range req.ChartEdbInfoList {
 		if _, ok := deleteMap[chartEdb.ExcelChartEdbId]; ok {
 			delete(deleteMap, chartEdb.ExcelChartEdbId)
 		}
@@ -363,23 +368,29 @@ func EditBalanceExcelChart(excelInfo *excelModel.ExcelInfo, req request.AddBalan
 		excelEdb.LeadValue = chartEdb.LeadValue
 		excelEdb.LeadUnit = chartEdb.LeadUnit
 		excelEdb.ModifyTime = time.Now()
-		var dateList []string
-		var dataList []float64
+		var dataList []*excelModel.ExcelChartData
 		if excelInfo.BalanceType == 1 {
 			// 如果是静态表,则直接使用前端传输的数据落到数据库里
-			/*dateList, dataList, err, errMsg = utils.HandleEdbSequenceVal(chartEdb.DateSequenceVal, chartEdb.DataSequenceVal)
-			if err != nil {
-				errMsg = "时间序列或数据序列异常!"
-				err = fmt.Errorf("时间序列或数据序列异常!%s", err.Error())
+			tmpList, ok := dataListMap[k]
+			if !ok {
+				errMsg = "查询图表数据失败!"
+				err = fmt.Errorf("查询图表数据失败!%s", err.Error())
 				return
-			}*/
+			}
+			for _, l := range tmpList {
+				tmp := &excelModel.ExcelChartData{
+					DataTime:      l.DataTime,
+					Value:         l.Value,
+					DataTimestamp: l.DataTimestamp,
+				}
+				dataList = append(dataList, tmp)
+			}
 		}
 
 		// 处理日期列表和值列表
 		addItem := &excelModel.AddChartEdbAndDataItem{
 			ChartEdb: excelEdb,
-			DateList: dateList,
-			ValList:  dataList,
+			DataList: dataList,
 		}
 		chartEdbList = append(chartEdbList, addItem)
 	}
@@ -421,8 +432,6 @@ func editBalanceExcelChart(req request.AddBalanceTableChartReq) (chartInfo *data
 		err = errors.New("获取图表信息失败,Err:" + err.Error())
 		return
 	}
-	// todo 查找默认主题设置
-	// todo 查找默认主题设置
 	// 查找主题类型id
 	chartThemeType, err := chart_theme.GetChartThemeTypeByChartType(chartType)
 	if err != nil {
@@ -1257,7 +1266,7 @@ func getBalanceDataListStartDateAndValue(dataList []*data_manage.EdbDataList) (s
 }
 
 // AddBalanceStaticExcel 另存为和存为静态表以及子表的复制都调用该接口
-func AddBalanceStaticExcel(oldExcelInfo *excelModel.ExcelInfo, versionName string, sysUser *system.Admin, parentId, relExcelInfoId, balanceType int, childExcelList []*excelModel.ExcelInfo, pingNameFlag bool) (excelInfo *excelModel.ExcelInfo, err error, errMsg string, isSendEmail bool) {
+func AddBalanceStaticExcel(oldExcelInfo *excelModel.ExcelInfo, versionName string, sysUser *system.Admin, parentId, relExcelInfoId, balanceType int, childExcelList []*excelModel.ExcelInfo, pingNameFlag bool, excelDataMap map[int]map[int][]*data_manage.EdbDataList) (excelInfo *excelModel.ExcelInfo, err error, errMsg string, isSendEmail bool) {
 	isSendEmail = true
 
 	versionName = utils.TrimLRStr(versionName)
@@ -1342,7 +1351,7 @@ func AddBalanceStaticExcel(oldExcelInfo *excelModel.ExcelInfo, versionName strin
 	}
 	if parentId == 0 && len(childExcelList) > 0 {
 		for _, childExcelInfo := range childExcelList {
-			_, err, errMsg, isSendEmail = AddBalanceStaticExcel(childExcelInfo, versionName, sysUser, excelInfo.ExcelInfoId, relExcelInfoId, balanceType, []*excelModel.ExcelInfo{}, false)
+			_, err, errMsg, isSendEmail = AddBalanceStaticExcel(childExcelInfo, versionName, sysUser, excelInfo.ExcelInfoId, relExcelInfoId, balanceType, []*excelModel.ExcelInfo{}, false, excelDataMap)
 			if err != nil {
 				return
 			}
@@ -1379,7 +1388,12 @@ func AddBalanceStaticExcel(oldExcelInfo *excelModel.ExcelInfo, versionName strin
 					err = fmt.Errorf("未找到图表关联的指标信息")
 					return
 				}
-				err, errMsg, isSendEmail = CopyBalanceExcelChart(chartInfo, mappingList, versionName, sysUser, pingNameFlag)
+				chartEdbDataMap, ok := excelDataMap[chartInfo.ChartInfoId]
+				if !ok && oldExcelInfo.BalanceType == 1 { //
+					err = fmt.Errorf("未找到图表关联的指标信息")
+					return
+				}
+				err, errMsg, isSendEmail = CopyBalanceExcelChart(chartInfo, mappingList, versionName, sysUser, pingNameFlag, chartEdbDataMap)
 				if err != nil {
 					err = fmt.Errorf("复制图表失败 Err:%s", err.Error())
 					return
@@ -1391,7 +1405,7 @@ func AddBalanceStaticExcel(oldExcelInfo *excelModel.ExcelInfo, versionName strin
 }
 
 // CopyBalanceExcelChart 复制平衡表图表
-func CopyBalanceExcelChart(oldChartInfo *data_manage.ChartInfoView, oldChartEdbList []*excelModel.ExcelChartEdb, versionName string, sysUser *system.Admin, pingNameFlag bool) (err error, errMsg string, isSendEmail bool) {
+func CopyBalanceExcelChart(oldChartInfo *data_manage.ChartInfoView, oldChartEdbList []*excelModel.ExcelChartEdb, versionName string, sysUser *system.Admin, pingNameFlag bool, dataListMap map[int][]*data_manage.EdbDataList) (err error, errMsg string, isSendEmail bool) {
 	chartEdbList := make([]*excelModel.AddChartEdbAndDataItem, 0)
 	if pingNameFlag && versionName != "" {
 		oldChartInfo.ChartName += "(" + versionName + ")"
@@ -1419,15 +1433,23 @@ func CopyBalanceExcelChart(oldChartInfo *data_manage.ChartInfoView, oldChartEdbL
 		excelEdb.LeadUnit = chartEdb.LeadUnit
 		excelEdb.CreateTime = time.Now()
 		excelEdb.ModifyTime = time.Now()
-		var dateList []string
-		var dataList []float64
-		// todo 是否需要存储静态表的数据
+		var dataList []*excelModel.ExcelChartData
+		tmpList, ok := dataListMap[chartEdb.ExcelChartEdbId]
+		if ok {
+			for _, l := range tmpList {
+				tmp := &excelModel.ExcelChartData{
+					DataTime:      l.DataTime,
+					Value:         l.Value,
+					DataTimestamp: l.DataTimestamp,
+				}
+				dataList = append(dataList, tmp)
+			}
+		}
 
 		// 处理日期列表和值列表
 		addItem := &excelModel.AddChartEdbAndDataItem{
 			ChartEdb: excelEdb,
-			DateList: dateList,
-			ValList:  dataList,
+			DataList: dataList,
 		}
 		chartEdbList = append(chartEdbList, addItem)
 	}
@@ -1571,7 +1593,6 @@ func CopyBalanceExcel(oldExcelInfo *excelModel.ExcelInfo, excelClassifyId int, e
 	oldExcelInfo.ExcelName = excelName
 
 	// 先复制动态表,再复制动态子表,复制静态表,再复制静态子表
-	//查询动态表所有的子表,并复制为静态表
 	condition := " AND parent_id = ? AND balance_type = 0 "
 	var pars []interface{}
 	pars = append(pars, oldExcelInfo.ExcelInfoId)
@@ -1581,7 +1602,9 @@ func CopyBalanceExcel(oldExcelInfo *excelModel.ExcelInfo, excelClassifyId int, e
 		err = fmt.Errorf("获取子表失败 %s", err.Error())
 		return
 	}
-	excelInfo, err, errMsg, isSendEmail = AddBalanceStaticExcel(oldExcelInfo, "", sysUser, 0, 0, 0, childExcelList, false)
+	// 查询出每个子表的内容,并将内容转为静态版本
+	excelDataMap := make(map[int]map[int][]*data_manage.EdbDataList)
+	excelInfo, err, errMsg, isSendEmail = AddBalanceStaticExcel(oldExcelInfo, "", sysUser, 0, 0, 0, childExcelList, false, excelDataMap)
 	if err != nil {
 		errMsg = "复制动态表失败"
 		err = fmt.Errorf("复制动态表失败 %s", err.Error())
@@ -1608,7 +1631,31 @@ func CopyBalanceExcel(oldExcelInfo *excelModel.ExcelInfo, excelClassifyId int, e
 			err = fmt.Errorf("获取子表失败 %s", err.Error())
 			return
 		}
-		_, err, errMsg, isSendEmail = AddBalanceStaticExcel(staticExcelInfo, staticExcelInfo.VersionName, sysUser, 0, excelInfo.ExcelInfoId, 1, childList, false)
+		excelDataMap = make(map[int]map[int][]*data_manage.EdbDataList)
+		for _, childExcelInfo := range childList {
+			//得到表格数据并落库
+			tmpDataList, e := excelModel.GetExcelChartDataByExcelInfoId(childExcelInfo.ExcelInfoId)
+			if e != nil {
+				err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", err.Error())
+				return
+			}
+			if len(tmpDataList) > 0 {
+				for _, v := range tmpDataList {
+					child, ok := excelDataMap[v.ChartInfoId]
+					if !ok {
+						child = make(map[int][]*data_manage.EdbDataList)
+					}
+					tmp := &data_manage.EdbDataList{
+						DataTime:      v.DataTime,
+						DataTimestamp: v.DataTimestamp,
+						Value:         v.Value,
+					}
+					child[v.ExcelChartEdbId] = append(child[v.ExcelChartEdbId], tmp)
+					excelDataMap[v.ChartInfoId] = child
+				}
+			}
+		}
+		_, err, errMsg, isSendEmail = AddBalanceStaticExcel(staticExcelInfo, staticExcelInfo.VersionName, sysUser, 0, excelInfo.ExcelInfoId, 1, childList, false, excelDataMap)
 		if err != nil {
 			errMsg = "复制动态表失败"
 			err = fmt.Errorf("复制动态表失败 %s", err.Error())

+ 100 - 24
services/data/excel/balance_table.go

@@ -49,10 +49,6 @@ func GetBalanceExcelData(excelDetail *excelModel.ExcelInfo, lang string) (newDat
 }
 
 func GetBalanceExcelChartList(excelInfo *excelModel.ExcelInfo, lang string) (list []*data_manage.ChartInfoView, mappingListMap map[int][]*excelModel.ExcelChartEdb, dataListMap map[int][]*data_manage.EdbDataList, err error, errMsg string) {
-	newExcelDataMap, excelAllRows, excelAllCols, err, errMsg := GetBalanceExcelData(excelInfo, lang)
-	if err != nil {
-		return
-	}
 	dataListMap = make(map[int][]*data_manage.EdbDataList)
 	// 相关联指标
 	mappingListTmp, err := excelModel.GetExcelChartEdbMappingByExcelInfoId(excelInfo.ExcelInfoId)
@@ -61,16 +57,47 @@ func GetBalanceExcelChartList(excelInfo *excelModel.ExcelInfo, lang string) (lis
 		err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", err.Error())
 		return
 	}
-	mappingListMap = make(map[int][]*excelModel.ExcelChartEdb, 0)
 	charInfoIds := make([]int, 0)
-	for _, mapping := range mappingListTmp {
-		mappingListMap[mapping.ChartInfoId] = append(mappingListMap[mapping.ChartInfoId], mapping)
-		err, errMsg = GetBalanceExcelEdbData(mapping, newExcelDataMap, dataListMap, excelAllRows, excelAllCols)
-		if err != nil {
-			err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", err.Error())
+	mappingListMap = make(map[int][]*excelModel.ExcelChartEdb, 0)
+	if excelInfo.BalanceType == 1 {
+		for _, mapping := range mappingListTmp {
+			mappingListMap[mapping.ChartInfoId] = append(mappingListMap[mapping.ChartInfoId], mapping)
+		}
+		//查询库里是否有值
+		chartDataList, e := excelModel.GetExcelChartDataByExcelInfoId(excelInfo.ExcelInfoId)
+		if e != nil {
+			err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", e.Error())
 			return
 		}
+		if len(chartDataList) > 0 {
+			for _, v := range chartDataList {
+				tmp := &data_manage.EdbDataList{
+					EdbDataId:     v.ExcelChartDataId,
+					EdbInfoId:     v.ExcelChartEdbId,
+					DataTime:      v.DataTime,
+					DataTimestamp: v.DataTimestamp,
+					Value:         v.Value,
+				}
+				dataListMap[v.ExcelChartEdbId] = append(dataListMap[v.ExcelChartEdbId], tmp)
+			}
+		}
+	} else {
+		newExcelDataMap, excelAllRows, excelAllCols, e, msg := GetBalanceExcelData(excelInfo, lang)
+		if e != nil {
+			err = e
+			errMsg = msg
+			return
+		}
+		for _, mapping := range mappingListTmp {
+			mappingListMap[mapping.ChartInfoId] = append(mappingListMap[mapping.ChartInfoId], mapping)
+			err, errMsg = GetBalanceExcelEdbData(mapping, newExcelDataMap, dataListMap, excelAllRows, excelAllCols)
+			if err != nil {
+				err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", err.Error())
+				return
+			}
+		}
 	}
+
 	for k, _ := range mappingListMap {
 		charInfoIds = append(charInfoIds, k)
 	}
@@ -83,19 +110,6 @@ func GetBalanceExcelChartList(excelInfo *excelModel.ExcelInfo, lang string) (lis
 			return
 		}
 		list = chartInfoList
-		/*for _, chartInfo := range chartInfoList {
-			mappingList, ok := mappingListMap[chartInfo.ChartInfoId]
-			if !ok {
-				err = fmt.Errorf("未找到图表关联的指标信息")
-				return
-			}
-			var chartInfoResp *data_manage.ChartInfoDetailResp
-			chartInfoResp, err, errMsg = GetBalanceExcelChartDetail(chartInfo, mappingList, sysUser, dataListMap)
-			if err != nil {
-				return
-			}
-			list = append(list, chartInfoResp)
-		}*/
 	}
 	return
 }
@@ -361,6 +375,26 @@ func GetBalanceExcelChartSingle(chartInfoId, ChartEdbId int, lang string) (mappi
 		err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", err.Error())
 		return
 	}
+	dataListMap = make(map[int][]*data_manage.EdbDataList)
+	//查询库里是否有值
+	chartDataList, e := excelModel.GetExcelChartDataByChartInfoId(chartInfoId)
+	if e != nil {
+		err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", e.Error())
+		return
+	}
+	if len(chartDataList) > 0 {
+		for _, v := range chartDataList {
+			tmp := &data_manage.EdbDataList{
+				EdbDataId:     v.ExcelChartDataId,
+				EdbInfoId:     v.ExcelChartEdbId,
+				DataTime:      v.DataTime,
+				DataTimestamp: v.DataTimestamp,
+				Value:         v.Value,
+			}
+			dataListMap[v.ExcelChartEdbId] = append(dataListMap[v.ExcelChartEdbId], tmp)
+		}
+		return
+	}
 	excelInfoId := mappingListTmp[0].ExcelInfoId
 	// 查询所有子表
 	excelInfo, err := excelModel.GetExcelInfoById(excelInfoId)
@@ -379,7 +413,6 @@ func GetBalanceExcelChartSingle(chartInfoId, ChartEdbId int, lang string) (mappi
 	if err != nil {
 		return
 	}
-	dataListMap = make(map[int][]*data_manage.EdbDataList)
 
 	for _, mapping := range mappingListTmp {
 		err, errMsg = GetBalanceExcelEdbData(mapping, newExcelDataMap, dataListMap, excelAllRows, excelAllCols)
@@ -461,3 +494,46 @@ func TransferBalanceExcelContentToStatic(excelDetail *excelModel.ExcelInfo, lang
 	newContent = string(newMixedTableByte)
 	return
 }
+
+func SyncBalanceEdbData(excelInfo *excelModel.ExcelInfo, balanceTableData [][]request.MixedTableCellDataReq) (err error) {
+	tmpMappingList, e := excelModel.GetExcelChartEdbMappingByExcelInfoId(excelInfo.ExcelInfoId)
+	if e != nil {
+		err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", err.Error())
+		return
+	}
+	if len(tmpMappingList) == 0 {
+		return
+	}
+	excelDataMap := make(map[int][]*data_manage.EdbDataList)
+	excelEdbMap := make(map[int]*excelModel.ExcelChartEdb)
+	excelAllRows := len(balanceTableData)
+	excelAllCols := 0
+	newExcelDataMap := make(map[int]map[int]request.MixedTableCellDataReq)
+	for r, row := range balanceTableData {
+		tmp := len(row)
+		if tmp > excelAllCols {
+			excelAllCols = tmp
+		}
+		colMap := make(map[int]request.MixedTableCellDataReq)
+		for c, col := range row {
+			colMap[c] = col
+		}
+		newExcelDataMap[r] = colMap
+	}
+
+	for _, mapping := range tmpMappingList {
+		excelEdbMap[mapping.ExcelChartEdbId] = mapping
+		err, _ = GetBalanceExcelEdbData(mapping, newExcelDataMap, excelDataMap, excelAllRows, excelAllCols)
+		if err != nil {
+			err = fmt.Errorf(" 获取图表,指标信息失败 Err:%s", err.Error())
+			return
+		}
+	}
+	// 批量更新图表数据
+	err = excelModel.BatchUpdateChartEdbData(excelInfo.ExcelInfoId, excelEdbMap, excelDataMap)
+	if err != nil {
+		err = fmt.Errorf(" 批量更新图表数据失败 Err:%s", err.Error())
+		return
+	}
+	return
+}