|
@@ -1,8 +1,12 @@
|
|
|
package excel
|
|
|
|
|
|
import (
|
|
|
+ "eta/eta_chart_lib/models"
|
|
|
"eta/eta_chart_lib/utils"
|
|
|
+ "fmt"
|
|
|
"github.com/beego/beego/v2/client/orm"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
@@ -93,8 +97,138 @@ func (e *ExcelChartEdb) Delete() (err error) {
|
|
|
|
|
|
type AddChartEdbAndDataItem struct {
|
|
|
ChartEdb *ExcelChartEdb
|
|
|
- DateList []string `description:"日期列表"`
|
|
|
- ValList []float64 `description:"数据列表"`
|
|
|
+ DataList []*ExcelChartData `description:"数据列表"`
|
|
|
+}
|
|
|
+
|
|
|
+// 同时添加指标和指标数据
|
|
|
+func (e *ExcelChartEdb) AddChartEdbAndData(list []*AddChartEdbAndDataItem, chartInfo *models.ChartInfo, deleteEdbIds []int) (err error) {
|
|
|
+ o, err := orm.NewOrmUsingDB("data").Begin()
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ _ = o.Rollback()
|
|
|
+ } else {
|
|
|
+ _ = o.Commit()
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ // 先删除原先的绑定的指标
|
|
|
+ if len(deleteEdbIds) > 0 && chartInfo.ChartInfoId > 0 {
|
|
|
+ sql := `DELETE FROM excel_chart_edb WHERE chart_info_id = ? AND excel_chart_edb_id in (` + utils.GetOrmInReplace(len(deleteEdbIds)) + `)`
|
|
|
+ _, err = o.Raw(sql, chartInfo.ChartInfoId, deleteEdbIds).Exec()
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("删除原先的指标失败:%v", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 图表指标信息入库
|
|
|
+ updateIds := make([]int, 0)
|
|
|
+ var edbInfoIdArrStr []string
|
|
|
+ for _, item := range list {
|
|
|
+ err = addChartEdbAndData(o, item.ChartEdb, item.DataList)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ updateIds = append(updateIds, item.ChartEdb.ExcelChartEdbId)
|
|
|
+ edbInfoIdArrStr = append(edbInfoIdArrStr, strconv.Itoa(item.ChartEdb.ExcelChartEdbId))
|
|
|
+ }
|
|
|
+
|
|
|
+ //新增图表
|
|
|
+ chartInfoId := chartInfo.ChartInfoId
|
|
|
+ if chartInfo.ChartInfoId <= 0 {
|
|
|
+ lastId, e := o.Insert(chartInfo)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("新增图表失败,AddChartEdbAndData: %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ chartInfoId = int(lastId)
|
|
|
+ } else {
|
|
|
+ _, err = o.Update(chartInfo)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("更新图表失败,AddChartEdbAndData: %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新图表id
|
|
|
+ sql := `update excel_chart_edb set chart_info_id = ? where excel_chart_edb_id in (` + utils.GetOrmInReplace(len(updateIds)) + `) and chart_info_id=0`
|
|
|
+ _, err = o.Raw(sql, chartInfoId, updateIds).Exec()
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("更新图表id失败,AddChartEdbAndData: %v", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(edbInfoIdArrStr) > 0 {
|
|
|
+ edbInfoIdStr := strings.Join(edbInfoIdArrStr, ",")
|
|
|
+ //更新图表关联的指标id
|
|
|
+ sql = `update chart_info set edb_info_ids = ? where chart_info_id = ?`
|
|
|
+ _, err = o.Raw(sql, edbInfoIdStr, chartInfoId).Exec()
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func addChartEdbAndData(o orm.TxOrmer, chartEdb *ExcelChartEdb, dataList []*ExcelChartData) (err error) {
|
|
|
+ // 图表指标信息入库
|
|
|
+ excelChartEdbId := chartEdb.ExcelChartEdbId
|
|
|
+ if chartEdb.ExcelChartEdbId <= 0 {
|
|
|
+ lastId, e := o.Insert(chartEdb)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("新增指标失败,addChartEdbAndData: %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ excelChartEdbId = int(lastId)
|
|
|
+ } else {
|
|
|
+ _, e := o.Update(chartEdb)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("更新指标失败,addChartEdbAndData: %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ //如果有数据则删除所有的数据
|
|
|
+ sql := `delete from excel_chart_data where excel_chart_edb_id = ?`
|
|
|
+ _, err = o.Raw(sql, excelChartEdbId).Exec()
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ chartEdb.ExcelChartEdbId = excelChartEdbId
|
|
|
+
|
|
|
+ // 图表指标数据入库
|
|
|
+ addList := make([]*ExcelChartData, 0)
|
|
|
+ if len(dataList) > 0 {
|
|
|
+ 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 GetExcelChartEdbMappingByExcelInfoId(excelInfoId int) (list []*ExcelChartEdb, err error) {
|
|
@@ -102,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
|
|
|
}
|
|
@@ -141,3 +275,89 @@ func GetExcelInfoByChartInfoId(chartInfoId int) (item *ExcelInfo, err error) {
|
|
|
err = o.Raw(sql, chartInfoId).QueryRow(&item)
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+// 同时删除指标和指标数据
|
|
|
+func DeleteExcelChartEdbAndData(excelInfoIds []int, chartInfoIds []int) (err error) {
|
|
|
+ o, err := orm.NewOrmUsingDB("data").Begin()
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ _ = o.Rollback()
|
|
|
+ } else {
|
|
|
+ _ = o.Commit()
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ // 把对应的表格状态改成删除状态
|
|
|
+ //更新图表id
|
|
|
+ sql := `update excel_info set is_delete = 1, modify_time = ? where excel_info_id in (` + utils.GetOrmInReplace(len(excelInfoIds)) + `)`
|
|
|
+ _, err = o.Raw(sql, time.Now(), excelInfoIds).Exec()
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("更新图表id失败,AddChartEdbAndData: %v", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 把删除图表状态
|
|
|
+ if len(chartInfoIds) > 0 {
|
|
|
+ sql := `DELETE FROM chart_info WHERE chart_info_id in (` + utils.GetOrmInReplace(len(chartInfoIds)) + `)`
|
|
|
+ _, err = o.Raw(sql, chartInfoIds).Exec()
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("删除原先的指标失败:%v", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // todo 如果加入到我的图库中,则删除我的图库中的数据
|
|
|
+ }
|
|
|
+ // 删除原先的绑定的指标
|
|
|
+ sql = `DELETE FROM excel_chart_edb WHERE excel_info_id in (` + utils.GetOrmInReplace(len(excelInfoIds)) + `)`
|
|
|
+ _, err = o.Raw(sql, excelInfoIds).Exec()
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("删除原先的指标失败:%v", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 删除指标数据
|
|
|
+ sql = `DELETE FROM excel_chart_data WHERE excel_info_id in (` + utils.GetOrmInReplace(len(excelInfoIds)) + `)`
|
|
|
+ _, err = o.Raw(sql, excelInfoIds).Exec()
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("删除原先的指标失败:%v", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// 删除平衡表中的指标和数据
|
|
|
+func DeleteBalanceExcelChartInfoAndData(chartInfoId int) (err error) {
|
|
|
+ o := orm.NewOrmUsingDB("data")
|
|
|
+ to, err := o.Begin()
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ _ = to.Rollback()
|
|
|
+ } else {
|
|
|
+ _ = to.Commit()
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ sql := ` DELETE FROM chart_info WHERE chart_info_id=? `
|
|
|
+ _, err = to.Raw(sql, chartInfoId).Exec()
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("删除平衡表图表失败 %s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ sql = ` DELETE FROM excel_chart_edb WHERE chart_info_id=? `
|
|
|
+ _, err = to.Raw(sql, chartInfoId).Exec()
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("删除平衡表图表指标失败 %s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 删除表格里的数据
|
|
|
+ sql = ` DELETE FROM excel_chart_data WHERE chart_info_id=? `
|
|
|
+ _, err = to.Raw(sql, chartInfoId).Exec()
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("删除平衡表图表指标失败 %s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|