Browse Source

新增图表简介

xyxie 2 weeks ago
parent
commit
4de11a7c92
5 changed files with 197 additions and 3 deletions
  1. 113 0
      models/chart_description.go
  2. 1 1
      models/chart_info.go
  3. 1 0
      models/db.go
  4. 7 0
      models/system/admin.go
  5. 75 2
      services/chart_info.go

+ 113 - 0
models/chart_description.go

@@ -0,0 +1,113 @@
+package models
+
+import (
+	"eta/eta_forum_hub/utils"
+	"time"
+
+	"github.com/beego/beego/v2/client/orm"
+)
+
+type ChartDescription struct {
+	Id               int       `gorm:"column:id;primaryKey"`
+	Description      string    `gorm:"column:description"`
+	ChartInfoId      int       `gorm:"column:chart_info_id"` // 图表id
+	SysUserId        int       `gorm:"column:sys_user_id"`     // 创建人id
+	SysUserRealName  string    `gorm:"column:sys_user_real_name"` // 创建人姓名
+	ModifyTime       time.Time `gorm:"column:modify_time"`     // 变更时间
+	CreateTime       time.Time `gorm:"column:create_time"`     // 关系建立时间
+}
+
+type ChartDescriptionReq struct {
+	Id               int       
+	Description      string      // 图表id
+	ChartInfoId      int       
+	SysUserId        int         // 创建人id
+	SysUserRealName  string    	 // 创建人姓名
+	AdminName        string   	 // 创建人姓名
+	ModifyTime       time.Time 	 // 变更时间
+	CreateTime       time.Time 	 // 关系建立时间  
+}
+
+// GetChartDescriptionByChartInfoId 根据图表ID获取图表简介
+func GetChartDescriptionByChartInfoId(chartInfoId int) (item []*ChartDescription, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM chart_description WHERE chart_info_id = ? order by create_time desc, id desc`
+	_, err = o.Raw(sql, chartInfoId).QueryRows(&item)
+	return
+}
+
+// 批量更新
+func BatchUpdateChartDescription(chartInfoId int, descriptionList []*ChartDescription) (err error) {
+	o := orm.NewOrm()
+	// 用事务
+	tx, err := o.Begin()
+	if err != nil {
+		return err
+	}
+	defer func ()  {
+		if err != nil {
+			tx.Rollback()
+		}else{
+			tx.Commit()
+		}	
+	}()
+
+	
+	// 批量更新
+	if len(descriptionList) == 0 {
+		// 删除所有记录
+		sql := `DELETE FROM chart_description WHERE chart_info_id = ?`
+		_, err = tx.Raw(sql, chartInfoId).Exec()
+		return
+	}
+	// 删除数组
+	deleteIdMap := make(map[int]bool)
+	// 查询现有记录
+	existingRecords := make(map[int]*ChartDescription)
+	var existing []*ChartDescription
+	sql := `SELECT * FROM chart_description WHERE chart_info_id = ?`
+	_, err = o.Raw(sql, chartInfoId).QueryRows(&existing)
+	if err != nil {
+		return err
+	}
+	for _, record := range existing {
+		existingRecords[record.Id] = record
+		deleteIdMap[record.Id] = true
+	}
+
+	// 分离需要更新和插入的记录
+	var toInsert []*ChartDescription
+	for _, desc := range descriptionList {
+		delete(deleteIdMap, desc.Id)
+		if _, exists := existingRecords[desc.Id]; exists {
+			// 更新
+			sql := "UPDATE chart_description SET description = ?, sys_user_id = ?, sys_user_real_name = ?, modify_time = ? WHERE id = ?"
+			_, err = tx.Raw(sql, desc.Description, desc.SysUserId, desc.SysUserRealName, desc.ModifyTime, desc.Id).Exec()
+			if err != nil {
+				return err
+			}
+		} else {
+			toInsert = append(toInsert, desc)
+		}
+	}
+
+	// 批量插入
+	if len(toInsert) > 0 {
+		_, err := tx.InsertMulti(len(toInsert), toInsert)
+		if err != nil {
+			return err
+		}
+	}
+	
+	// 删除数组中为true的记录
+	deleteIds := make([]int, 0)
+	for id, _ := range deleteIdMap {
+		deleteIds = append(deleteIds, id)
+	}
+	if len(deleteIds) > 0 {
+		sql := `DELETE FROM chart_description WHERE id IN (`+utils.GetOrmInReplace(len(deleteIds))+`) AND chart_info_id = ?`
+		_, err = tx.Raw(sql, chartInfoId).Exec()
+	}
+	
+	return
+}

+ 1 - 1
models/chart_info.go

@@ -1023,7 +1023,7 @@ type AddChartInfoReq struct {
 
 type AddChartReq struct {
 	ChartInfo               *ChartInfo
-	Description             string `description:"逻辑简述"`
+	Description             []*ChartDescriptionReq `description:"逻辑简述"`
 	EdbInfoList             []*EdbInfo
 	ChartThemeList          []*ChartTheme
 	EdbInfoDataList         []*AddEdbDataReq

+ 1 - 0
models/db.go

@@ -47,6 +47,7 @@ func initChart() {
 		new(ChartThemeType),
 		new(ChartSeries),
 		new(ChartSeriesEdbMapping),
+		new(ChartDescription),
 	)
 }
 

+ 7 - 0
models/system/admin.go

@@ -246,6 +246,13 @@ func GetAdminByAdminName(adminName string) (item *Admin, err error) {
 	return
 }
 
+// GetAdminListByAdminName 账号获取用户列表
+func GetAdminListByAdminName(adminNames []string) (items []*Admin, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM admin WHERE admin_name in (` + utils.GetOrmInReplace(len(adminNames)) + `) `
+	_, err = o.Raw(sql, adminNames).QueryRows(&items)
+	return
+}	
 // GetAdminByAdminNameAndBusinessCode 账号获取用户
 func GetAdminByAdminNameAndBusinessCode(adminName, businessCode string) (item *Admin, err error) {
 	o := orm.NewOrm()

+ 75 - 2
services/chart_info.go

@@ -152,7 +152,6 @@ func AddChartInfo(req *models.AddChartReq, sysUserId int, sysUserRealName string
 	chartInfo.MarkersAreas = req.ChartInfo.MarkersAreas
 	chartInfo.Unit = req.ChartInfo.Unit
 	chartInfo.UnitEn = req.ChartInfo.UnitEn
-	chartInfo.Description = req.Description
 	chartInfo.ChartImage = req.ChartInfo.ChartImage
 	chartInfo.Sort = req.ChartInfo.Sort
 	/*newId, err := models.AddChartInfo(chartInfo)
@@ -253,6 +252,13 @@ func AddChartInfo(req *models.AddChartReq, sysUserId int, sysUserRealName string
 			return
 		}
 	}
+	// 添加图表简介
+	err, errMsg = addOrUpdateChartDescriptionList(chartInfo.ChartInfoId, req.Description)
+	if err != nil {
+		errMsg = "保存失败"
+		err = errors.New("保存失败,Err:" + err.Error())
+		return
+	}
 	//添加es数据
 	go EsAddOrEditChartInfo(chartInfo.ChartInfoId)
 
@@ -551,6 +557,13 @@ func UpdateChartInfoAndEdbInfo(req *models.AddChartReq, sysUserId int, sysUserRe
 			return
 		}
 	}
+	// 更新图表简介
+	err, errMsg = addOrUpdateChartDescriptionList(chartInfo.ChartInfoId, req.Description)
+	if err != nil {
+		errMsg = "保存失败"
+		err = errors.New("保存失败,Err:" + err.Error())
+		return
+	}
 	//添加es数据
 	go EsAddOrEditChartInfo(chartInfo.ChartInfoId)
 	go EsAddOrEditChartCollectByChartInfoId(chartInfo.ChartInfoId)
@@ -606,7 +619,14 @@ func DeleteChart(chartInfoId int) (err error, errMsg string) {
 		err = fmt.Errorf("删除指标数据失败, Err:" + err.Error())
 		return
 	}
-
+	// 删除图表简介
+	descriptionList := make([]*models.ChartDescriptionReq, 0)
+	err, errMsg = addOrUpdateChartDescriptionList(chartInfo.ChartInfoId, descriptionList)
+	if err != nil {
+		errMsg = "删除失败"
+		err = errors.New("删除图表简介失败,Err:" + err.Error())
+		return
+	}
 	go EsDeleteChartInfo(chartInfo.ChartInfoId)
 	go func() {
 		var e error
@@ -731,3 +751,56 @@ func transferChartConfigEdbInfoId(chartInfo *models.ChartInfo, newEdbInfoIdMap m
 	}
 	return
 }
+
+
+func addOrUpdateChartDescriptionList(chartInfoId int, reqDescription []*models.ChartDescriptionReq) (err error, errMsg string) {
+	descriptionList := make([]*models.ChartDescription, 0)
+	if len(reqDescription) == 0 {
+		err = models.BatchUpdateChartDescription(chartInfoId, descriptionList)
+		if err != nil {
+			errMsg = "保存失败"
+			err = errors.New("保存失败,Err:" + err.Error())
+			return
+		}
+	}
+	// 更换成社区的创建人
+	oldAdminIdMap := make(map[string]int)
+	adminNames := make([]string, 0)
+	for _, v := range reqDescription {
+		adminNames = append(adminNames, v.AdminName)
+	}
+	adminList, e := system.GetAdminListByAdminName(adminNames)
+	if e != nil {
+		errMsg = "获取创建人信息失败"
+		err = errors.New("获取创建人信息失败,Err:" + e.Error())
+		return
+	}
+	for _, v := range reqDescription {
+		for _, admin := range adminList {
+			oldAdminIdMap[v.AdminName] = admin.AdminId
+		}
+	}
+	
+	for _, v := range reqDescription {
+		if oldAdminId, ok := oldAdminIdMap[v.AdminName]; ok {
+			v.SysUserId = oldAdminId
+		}else{
+			v.SysUserId = 0
+		}
+		descriptionList = append(descriptionList, &models.ChartDescription{
+			ChartInfoId: chartInfoId,
+			Description: v.Description,
+			SysUserId: v.SysUserId,
+			SysUserRealName: v.AdminName,
+			ModifyTime: time.Now(),
+			CreateTime: time.Now(),
+		})
+	}
+	err = models.BatchUpdateChartDescription(chartInfoId, descriptionList)
+	if err != nil {
+		errMsg = "保存失败"
+		err = errors.New("保存失败,Err:" + err.Error())
+		return
+	}
+	return
+}