Browse Source

fix:excel保存

zqbao 8 months ago
parent
commit
f885b6ba85
3 changed files with 85 additions and 17 deletions
  1. 55 12
      controllers/target.go
  2. 8 4
      models/data_manage/excel_style.go
  3. 22 1
      models/target.go

+ 55 - 12
controllers/target.go

@@ -3909,7 +3909,6 @@ func (this *TargetController) ExcelDataAdd() {
 	var frequencyList []string
 	var unitList []string
 
-	var dateList []string
 	secNameToDateMap := make(map[string]map[string]string)
 	//取到所有数据
 	for i := range req.Data {
@@ -3922,9 +3921,7 @@ func (this *TargetController) ExcelDataAdd() {
 			dateMap := req.Data[i][0].(map[string]interface{})
 			_, ok := dateMap["m"]
 			date := dateMap["m"].(string)
-			if ok {
-				dateList = append(dateList, date)
-			} else {
+			if !ok {
 				continue
 			}
 			// 存储数据
@@ -4004,7 +4001,7 @@ func (this *TargetController) ExcelDataAdd() {
 	}
 
 	// 所有的指标数据map
-	edbCodeDataMap := make(map[string]*models.EdbInfoItem)
+	edbCodeInfoMap := make(map[string]*models.EdbInfoItem)
 
 	if len(frequencyList) == 0 {
 		br.Ret = 200
@@ -4012,8 +4009,16 @@ func (this *TargetController) ExcelDataAdd() {
 		br.Msg = "保存成功"
 		return
 	}
+
+	//获取账户所拥有权限的分类id集合
+	classifyIdStrList, err := data.GetEdbClassifyListByAdminId(int64(sysUser.AdminId))
+	if err != nil {
+		br.Msg = "获取分类数据失败"
+		return
+	}
+
 	// 获取当前类所有的有效指标
-	list, err := models.GetTargetItemListSort(req.ClassifyId, 1, frequencyList[0], "", "", []string{strconv.Itoa(req.ClassifyId)})
+	list, err := models.GetTargetItemListSort(req.ClassifyId, 1, req.Frequence, "", "", classifyIdStrList)
 	if err != nil {
 		br.Msg = "获取指标失败"
 		br.ErrMsg = "获取有效指标失败,系统错误,Err:" + err.Error()
@@ -4021,14 +4026,43 @@ func (this *TargetController) ExcelDataAdd() {
 	}
 
 	for _, item := range list {
-		edbCodeDataMap[item.SecName] = item
+		edbCodeInfoMap[item.SecName] = item
+	}
+	if req.ClassifyId != req.OldClassifyId || req.Frequence != req.OldFrequence {
+		// 获取历史类所有的有效指标
+		oldList, err := models.GetTargetItemListSort(req.OldClassifyId, 1, req.OldFrequence, "", "", classifyIdStrList)
+		if err != nil {
+			br.Msg = "获取指标失败"
+			br.ErrMsg = "获取有效指标失败,系统错误,Err:" + err.Error()
+			return
+		}
+		for _, item := range oldList {
+			edbCodeInfoMap[item.SecName] = item
+		}
+	}
+
+	if req.TradeCode == "" {
+		// TradeCode == "" 表示当前数据不是经过搜索的数据,可以进行删除指标操作
+		deleteTraceCodeList := make([]string, 0)
+		for k, v := range edbCodeInfoMap {
+			if _, ok := secNameToDateMap[k]; !ok {
+				deleteTraceCodeList = append(deleteTraceCodeList, v.TradeCode)
+			}
+		}
+		// 删除指标
+		err = models.DeleteEdbinfoByTraceCodeList(deleteTraceCodeList)
+		if err != nil {
+			br.Msg = "excel保存失败"
+			br.ErrMsg = "指标及指标数据删除失败,Err:" + err.Error()
+			return
+		}
 	}
 
 	// 获得需要新增的指标
 	addEdbInfoList := make([]*models.Edbinfo, 0)
 	sortEdbInfoList := make([]*models.Edbinfo, 0)
 	for i, v := range secNameList {
-		if item, ok := edbCodeDataMap[v]; !ok {
+		if item, ok := edbCodeInfoMap[v]; !ok {
 			t := new(models.Edbinfo)
 			t.SecName = v
 			t.Unit = unitList[i]
@@ -4038,7 +4072,7 @@ func (this *TargetController) ExcelDataAdd() {
 			t.UserId = sysUser.AdminId
 			t.Sort = len(list) + i
 			addEdbInfoList = append(addEdbInfoList, t)
-			edbCodeDataMap[t.SecName] = &models.EdbInfoItem{
+			edbCodeInfoMap[t.SecName] = &models.EdbInfoItem{
 				TradeCode: t.TradeCode,
 				SecName:   t.SecName,
 				Unit:      t.Unit,
@@ -4048,9 +4082,18 @@ func (this *TargetController) ExcelDataAdd() {
 		} else {
 			t := new(models.Edbinfo)
 			t.TradeCode = item.TradeCode
-			t.Frequency = frequencyList[i]
+			if req.Frequence != req.OldFrequence || req.ClassifyId != req.OldClassifyId {
+				t.Sort = len(list) + i
+			} else {
+				if req.TradeCode != "" {
+					// 如果是搜索的指标,那就保存原来的排序
+					t.Sort = item.Sort
+				} else {
+					t.Sort = i
+				}
+			}
+			t.Frequency = req.Frequence
 			t.ClassifyId = req.ClassifyId
-			t.Sort = i
 			sortEdbInfoList = append(sortEdbInfoList, t)
 		}
 	}
@@ -4081,7 +4124,7 @@ func (this *TargetController) ExcelDataAdd() {
 		for date, closeVal := range secNameToDateMap[v] {
 			t := new(models.Edbdata)
 			// 理论上这里面不应该出现空值
-			t.TradeCode = edbCodeDataMap[v].TradeCode
+			t.TradeCode = edbCodeInfoMap[v].TradeCode
 			t.Dt = date
 			t.Close = closeVal
 			t.ModifyTime = time.Now()

+ 8 - 4
models/data_manage/excel_style.go

@@ -1,8 +1,9 @@
 package data_manage
 
 import (
-	"github.com/beego/beego/v2/client/orm"
 	"time"
+
+	"github.com/beego/beego/v2/client/orm"
 )
 
 type ExcelStyle struct {
@@ -30,8 +31,11 @@ type ExcelStyleReq struct {
 	CellData         []interface{}
 	Config           interface{}
 	Data             [][]interface{}
-	Frequency        string `description:"频度"`
+	TradeCode        string `description:"指标编码"`
+	Frequence        string `description:"频度"`
 	ClassifyId       int    `description:"分类id"`
+	OldClassifyId    int    `description:"历史分类id"`
+	OldFrequence     string `description:"历史频度"`
 }
 
 type CellData struct {
@@ -187,7 +191,7 @@ func GetExcelEdbdataMappingByTradeCode(classifyId int, frequency string) (excelI
 func GetExcelStyleById(excelId int) (item *ExcelStyle, err error) {
 	o := orm.NewOrmUsingDB("edb")
 	sql := `SELECT * FROM excel_style WHERE excel_id = ? `
-	err = o.Raw(sql,excelId).QueryRow(&item)
+	err = o.Raw(sql, excelId).QueryRow(&item)
 	return
 }
 
@@ -208,4 +212,4 @@ func GetExcelEdbdataMappingCount(classifyId int, tradeCode, frequency string) (c
 type Ct struct {
 	Fa string `json:"fa"`
 	T  string `json:"t"`
-}
+}

+ 22 - 1
models/target.go

@@ -165,7 +165,7 @@ func DeleteAllEdbData(tradeCode string) (err error) {
 	return
 }
 
-// DeleteAllEdbData 根据指标code删除数据
+// DeleteAllEdbDataByTradeCodeList 根据指标code删除数据
 func DeleteAllEdbDataByTradeCodeList(tradeCodeList []string) (err error) {
 	if len(tradeCodeList) == 0 {
 		return
@@ -192,6 +192,27 @@ type Edbinfo struct {
 	Sort         int    `description:"排序"`
 }
 
+func DeleteEdbinfoByTraceCodeList(tradeCodeList []string) (err error) {
+	if len(tradeCodeList) == 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("edb")
+	err = o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error {
+		sql := ` DELETE FROM edbdata WHERE TRADE_CODE in (` + strings.Join(tradeCodeList, ",") + `) `
+		_, err := txOrm.Raw(sql).Exec()
+		if err != nil {
+			return err
+		}
+		sql = ` DELETE FROM edbinfo WHERE TRADE_CODE in (` + strings.Join(tradeCodeList, ",") + `)`
+		_, err = txOrm.Raw(sql).Exec()
+		if err != nil {
+			return err
+		}
+		return nil
+	})
+	return
+}
+
 func GetEdbinfoListCount(condition string, pars []interface{}, mobile string, roleType int) (count int, err error) {
 	o := orm.NewOrmUsingDB("edb")
 	sql := ``