Browse Source

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

xyxie 11 months ago
parent
commit
3e9fbd6c2a

+ 156 - 8
controllers/data_manage/excel/balance_table.go

@@ -6,9 +6,11 @@ import (
 	"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/models/system"
 	"eta/eta_api/services/data/data_manage_permission"
 	excel2 "eta/eta_api/services/data/excel"
 	"eta/eta_api/utils"
+	"strconv"
 	"strings"
 	"time"
 )
@@ -106,14 +108,8 @@ func (c *ExcelInfoController) Rename() {
 	//判断表格是否存在
 	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)
+	condition += " AND excel_info_id != ? AND excel_classify_id=? AND excel_name=?  AND parent_id=?"
+	pars = append(pars, req.ExcelInfoId, excelInfo.ExcelClassifyId, req.ExcelName, excelInfo.ParentId)
 
 	// 获取分类下是否存在该表格名称
 	count, err := excel.GetExcelInfoCountByCondition(condition, pars)
@@ -174,3 +170,155 @@ func (c *ExcelInfoController) Rename() {
 	br.Data = resp
 	br.IsAddLog = true
 }
+
+// SaveExcelWorker
+// @Title 新增编辑表格协作人接口
+// @Description 新增编辑表格协作人接口
+// @Param	request	body request.EditExcelInfoReq true "type json string"
+// @Success 200 {object} response.AddExcelInfoResp
+// @router /excel_info/worker/save [post]
+func (c *ExcelInfoController) SaveExcelWorker() {
+	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.SaveExcelInfoWorkerReq
+	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
+	}
+
+	excelInfo, err := excel.GetExcelInfoById(req.ExcelInfoId)
+	if err != nil {
+		br.Msg = "获取ETA表格失败"
+		br.ErrMsg = "获取ETA表格失败,Err:" + err.Error()
+		return
+	}
+	if excelInfo.SysUserId != sysUser.AdminId {
+		br.Msg = "您没有权限操作!"
+		br.ErrMsg = "您没有权限操作!"
+		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
+		}
+	}
+	obj := new(excel.ExcelWorker)
+	notDeleteWorkerIds := make([]string, 0)
+	workerMap := make(map[int]struct{})
+	if req.SysUserIds != "" {
+		notDeleteWorkerIds = strings.Split(req.SysUserIds, ",")
+	}
+	existList, err := obj.GetByExcelInfoId(req.ExcelInfoId)
+	if err != nil {
+		br.Msg = "获取表格协作人失败!"
+		br.ErrMsg = "获取表格协作人失败,Err:" + err.Error()
+		return
+	}
+	for _, v := range existList {
+		workerMap[v.SysUserId] = struct{}{}
+	}
+	addIds := make([]int, 0)
+	for _, v := range notDeleteWorkerIds {
+		id, _ := strconv.Atoi(v)
+		if _, ok := workerMap[id]; !ok {
+			addIds = append(addIds, id)
+		}
+	}
+	// 查询协作人姓名
+	adminList, err := system.GetAdminListByIdListWithoutEnable(addIds)
+	addList := make([]*excel.ExcelWorker, 0)
+	for _, v := range adminList {
+		addList = append(addList, &excel.ExcelWorker{
+			ExcelInfoId:     req.ExcelInfoId,
+			SysUserId:       v.AdminId,
+			SysUserRealName: v.RealName,
+			CreateTime:      time.Now(),
+			ModifyTime:      time.Now(),
+		})
+	}
+	// 保存协作人
+	err = obj.AddWorker(req.ExcelInfoId, addList, notDeleteWorkerIds)
+	if err != nil {
+		br.Msg = "保存失败"
+		br.ErrMsg = "保存失败,Err:" + err.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// GetWorker
+// @Title 查询协作人接口
+// @Description 新增编辑表格协作人接口
+// @Param	request	body request.EditExcelInfoReq true "type json string"
+// @Success 200 {object} response.AddExcelInfoResp
+// @router /excel_info/worker [get]
+func (c *ExcelInfoController) GetWorker() {
+	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
+	}
+
+	excelInfoId, _ := c.GetInt("ExcelInfoId")
+	if excelInfoId <= 0 {
+		br.Msg = "请选择表格"
+		br.ErrMsg = "ExcelInfoId未传"
+		br.IsSendEmail = false
+		return
+	}
+
+	obj := new(excel.ExcelWorker)
+
+	list, err := obj.GetByExcelInfoId(excelInfoId)
+	if err != nil {
+		br.Msg = "获取表格协作人失败!"
+		br.ErrMsg = "获取表格协作人失败,Err:" + err.Error()
+		return
+	}
+	data := &response.BalanceTableWorkerResp{List: list}
+	br.Data = data
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}

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

+ 74 - 0
models/data_manage/excel/excel_worker.go

@@ -0,0 +1,74 @@
+package excel
+
+import (
+	"eta/eta_api/utils"
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type ExcelWorker struct {
+	ExcelWorkerId   int       `orm:"column(excel_worker_id);pk"`
+	ExcelInfoId     int       `description:"表格id"`
+	SysUserId       int       `description:"创建人"`
+	SysUserRealName string    `description:"创建人姓名"`
+	ModifyTime      time.Time `description:"修改时间"`
+	CreateTime      time.Time `description:"创建时间"`
+}
+
+func (e *ExcelWorker) TableName() string {
+	return "excel_worker"
+}
+
+// 新增 协作人
+func (e *ExcelWorker) AddWorker(excelInfoId int, addWorkers []*ExcelWorker, notDeleteWorkers []string) (err error) {
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
+	if len(notDeleteWorkers) > 0 {
+		sql := `delete from excel_worker where excel_info_id = ? and sys_user_id not in (` + utils.GetOrmInReplace(len(notDeleteWorkers)) + `)`
+		_, err = o.Raw(sql, excelInfoId, notDeleteWorkers).Exec()
+		if err != nil {
+			return
+		}
+	} else if len(notDeleteWorkers) == 0 { // 清空协作人
+		sql := `delete from excel_worker where excel_info_id = ? `
+		_, err = o.Raw(sql, excelInfoId).Exec()
+		if err != nil {
+			return
+		}
+	}
+	if len(addWorkers) > 0 {
+		_, err = o.InsertMulti(len(addWorkers), addWorkers)
+	}
+	return
+}
+
+// 修改
+func (e *ExcelWorker) Update(cols []string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Update(e, cols...)
+	return
+}
+
+// 删除
+func (e *ExcelWorker) Delete() (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Delete(e)
+	return
+}
+
+// 查询
+func (e *ExcelWorker) GetByExcelInfoId(excelInfoId int) (items []*ExcelWorker, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `select * from excel_worker where excel_info_id = ? `
+	_, err = o.Raw(sql, excelInfoId).QueryRows(&items)
+	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
 }

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

@@ -156,3 +156,8 @@ type RenameExcelInfoReq struct {
 	ExcelInfoId int    `description:"ETA表格ID"`
 	ExcelName   string `description:"表格名称"`
 }
+
+type SaveExcelInfoWorkerReq struct {
+	ExcelInfoId int    `description:"ETA表格ID"`
+	SysUserIds  string `description:"协作人ID 用英文逗号拼接"`
+}

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

@@ -95,5 +95,9 @@ type ExcelInfoDetailButton struct {
 }
 
 type BalanceChildTableResp struct {
-	List []*excel2.ExcelInfo `json:"list"`
+	List []*excel2.ExcelInfo
+}
+
+type BalanceTableWorkerResp struct {
+	List []*excel2.ExcelWorker
 }

+ 3 - 0
models/db.go

@@ -494,6 +494,9 @@ func initExcel() {
 		new(excel.ExcelSheet),      //ETA excel sheet
 		new(excel.ExcelSheetData),  //ETA excel sheet data
 		new(excel.ExcelEdbMapping), //ETA excel 与 指标 的关系表
+		new(excel.ExcelWorker),     // 平衡表协作人表格
+		new(excel.ExcelChartEdb),   // 平衡表做图指标
+		new(excel.ExcelChartData),  // 平衡表作图数据
 	)
 }
 

+ 18 - 0
routers/commentsRouter.go

@@ -1033,6 +1033,24 @@ 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: "GetWorker",
+            Router: `/excel_info/worker`,
+            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: "SaveExcelWorker",
+            Router: `/excel_info/worker/save`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/future_good:FutureGoodChartClassifyController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/future_good:FutureGoodChartClassifyController"],
         beego.ControllerComments{
             Method: "AddChartClassify",

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