Browse Source

Merge branch 'bzq1/execl-edit' of http://8.136.199.33:3000/eta_server/eta_api into bzq1/execl-edit-conflict

zqbao 8 months ago
parent
commit
7d09c17996
5 changed files with 119 additions and 31 deletions
  1. 69 12
      controllers/target.go
  2. 8 4
      models/data_manage/excel_style.go
  3. 1 0
      models/db.go
  4. 38 12
      models/target.go
  5. 3 3
      services/data/edb_info.go

+ 69 - 12
controllers/target.go

@@ -3944,7 +3944,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 {
@@ -3957,9 +3956,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
 			}
 			// 存储数据
@@ -4039,7 +4036,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
@@ -4047,8 +4044,30 @@ func (this *TargetController) ExcelDataAdd() {
 		br.Msg = "保存成功"
 		return
 	}
+
+	//获取账户所拥有权限的分类id集合
+	classifyIdStrList, err := data.GetEdbClassifyListByAdminId(int64(sysUser.AdminId))
+	if err != nil {
+		br.Msg = "获取分类数据失败"
+		return
+	}
+	IsVaild := 0
+	for _, classifyId := range classifyIdStrList {
+		if strconv.Itoa(req.ClassifyId) == classifyId {
+			IsVaild += 1
+		}
+		if strconv.Itoa(req.OldClassifyId) == classifyId {
+			IsVaild += 1
+		}
+	}
+	if IsVaild != 2 {
+		br.Msg = "操作权限不足,请检查分类操作权限"
+		br.ErrMsg = "操作权限不足"
+		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()
@@ -4056,14 +4075,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]
@@ -4073,7 +4121,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,
@@ -4083,9 +4131,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)
 		}
 	}
@@ -4116,7 +4173,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"`
-}
+}

+ 1 - 0
models/db.go

@@ -104,6 +104,7 @@ func init() {
 		new(VarietyTag),                 // 标签表
 		new(ResearchVarietyTagRelation), // 研究员标签关系表
 		new(ReportPptImg),               //Ppt转报告的图片记录表
+		new(EdbinfoUser),
 	)
 
 	// 系统表 数据表

+ 38 - 12
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
@@ -181,15 +181,36 @@ type Edbinfo struct {
 	SecName      string `orm:"column(SEC_NAME);" description:"指标名称"`
 	Unit         string `orm:"column(UNIT);" description:"单位"`
 	Remark       string `orm:"column(REMARK);" description:"备注"`
-	Frequency    string `description:"频度"`
-	ClassifyId   int    `description:"分类id"`
-	ClassifyName string `description:"分类名称"`
-	CreateDate   string `description:"创建时间"`
-	UserId       int    `description:"录入用户id"`
-	UserName     string `description:"录入用户名称"`
-	NoticeTime   string `description:"通知时间"`
-	Mobile       string `description:"录入者手机号"`
-	Sort         int    `description:"排序"`
+	Frequency    string `orm:"column(frequency)" description:"频度"`
+	ClassifyId   int    `orm:"column(classify_id)" description:"分类id"`
+	ClassifyName string `orm:"-" description:"分类名称"`
+	CreateDate   string `orm:"column(create_date)" description:"创建时间"`
+	UserId       int    `orm:"column(user_id)" description:"录入用户id"`
+	UserName     string `orm:"-" description:"录入用户名称"`
+	NoticeTime   string `orm:"column(notice_time)" description:"通知时间"`
+	Mobile       string `orm:"column(mobile)" description:"录入者手机号"`
+	Sort         int    `orm:"column(sort)" 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) {
@@ -306,10 +327,15 @@ func GetEdbinfoBySecNameList(secNameList []string) (items []*Edbinfo, err error)
 	}
 	sql := `SELECT * FROM edbinfo WHERE  left(TRADE_CODE,1)='W' AND REMARK='手动' `
 	if len(secNameList) > 0 {
-		sql += " AND SEC_NAME IN (" + strings.Join(secNameList, ",") + ") "
+		var holder []string
+		for range secNameList {
+			holder = append(holder, "?")
+		}
+
+		sql += " AND SEC_NAME IN (" + strings.Join(holder, ",") + ") "
 	}
 	o := orm.NewOrmUsingDB("edb")
-	err = o.Raw(sql).QueryRow(&items)
+	_, err = o.Raw(sql, secNameList).QueryRows(&items)
 	return
 }
 

+ 3 - 3
services/data/edb_info.go

@@ -799,11 +799,11 @@ func MultiAddEdbInfo(edbInfoList []*models.Edbinfo, mobile string) (msg string,
 		return
 	}
 	if len(items) > 0 {
-		msg = "指标名称已存在:"
+		var existName []string
 		for _, edbInfo := range items {
-			msg += edbInfo.SecName + ","
+			existName = append(existName, edbInfo.SecName)
 		}
-		msg = msg[:len(msg)-2]
+		msg = fmt.Sprintf("指标名称已存在:%s", strings.Join(existName, ","))
 		err = errors.New("指标名称已存在")
 		return
 	}