Parcourir la source

Merge branch 'pool_378_rzd_data_deal' into debug

kobe6258 il y a 1 semaine
Parent
commit
799927b48b

+ 142 - 44
controllers/base_from_rzd.go

@@ -7,7 +7,6 @@ import (
 	"eta/eta_index_lib/models"
 	"eta/eta_index_lib/services"
 	"eta/eta_index_lib/utils"
-	"fmt"
 	"strconv"
 	"time"
 )
@@ -189,6 +188,64 @@ func (this *BaseFromRzdController) AddRzdClassify() {
 	br.Msg = "获取成功"
 }
 
+type RzdClassify struct {
+	ClassifyName   string `json:"ClassifyName"`
+	ParentId       int    `json:"ParentId"`
+	Sort           int    `json:"Sort"`
+	ClassifyNameEn string `json:"ClassifyNameEn"`
+}
+type BatchAddRzdClassifyReq struct {
+	List []RzdClassify `json:"List"`
+}
+
+// BatchAddRzdClassify
+// @Title 新增分类
+// @Description 获取分类
+// @Success 200 {object} models.BaseFromRzdClassify
+// @router /add/rzd/batch_add_classify [post]
+func (this *BaseFromRzdController) BatchAddRzdClassify() {
+	br := new(models.BaseResponse).Init()
+	var cacheKey string
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		_ = utils.Rc.Delete(cacheKey)
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var reqData BatchAddRzdClassifyReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &reqData)
+	if err != nil {
+		br.ErrMsg = "无法解析请求体"
+		return
+	}
+	var categoryList []*models.BaseFromRzdClassify
+	for _, classify := range reqData.List {
+		if classify.ClassifyName == "" {
+			br.Msg = "请输入分类!"
+			br.ErrMsg = "请输入分类"
+			return
+		}
+		categoryList = append(categoryList, &models.BaseFromRzdClassify{
+			ClassifyName:   classify.ClassifyName,
+			ParentId:       classify.ParentId,
+			Sort:           classify.Sort,
+			CreateTime:     utils.GetCurrentTime(),
+			ModifyTime:     utils.GetCurrentTime(),
+			ClassifyNameEn: classify.ClassifyNameEn,
+		})
+	}
+	err = models.BatchAddRzdClassify(categoryList)
+	if err != nil {
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Data = categoryList
+	br.Msg = "获取成功"
+}
+
 // GetRzdClassifyByName
 // @Title 获取分类
 // @Description 获取分类
@@ -231,6 +288,34 @@ func (this *BaseFromRzdController) GetRzdClassifyByName() {
 	br.Msg = "获取成功"
 }
 
+// GetRzdClassifyList
+// @Title 获取分类
+// @Description 获取分类
+// @Success 200 {object} models.BaseFromRzdClassify
+// @router /get/rzd/classify [post]
+func (this *BaseFromRzdController) GetRzdClassifyList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	classifyList, err := models.GetRzdClassifyList()
+	if err != nil {
+		br.Msg = "获取睿咨得分类失败"
+		br.ErrMsg = "获取睿咨得分类失败,err:" + err.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Data = classifyList
+	br.Msg = "获取成功"
+}
+
 // AddBatchRzdData
 // @Title 新增数据源指标数据
 // @Description 新增数据源指标数据
@@ -247,62 +332,75 @@ func (this *BaseFromRzdController) AddBatchRzdData() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-	var req []models.BaseFromRzdData
-	fmt.Println(string(this.Ctx.Input.RequestBody))
+	var req models.IndexInfo
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
-
-	err = models.AddRzdDataList(req)
-	if err != nil {
-		br.Msg = "新增指标数据失败!"
-		br.ErrMsg = "新增指标数据失败,Err:" + err.Error()
-		return
-	}
-
-	// 维护start_date,end_date,latest_value字段
-	var indexCodes []string
-	for _, data := range req {
-		indexCodes = append(indexCodes, data.IndexCode)
-	}
-	mapInfo, err := models.GetRzdDataMaxAndMinDateByIndexCodes(indexCodes)
+	//先添加指标
+	rzdIndex, err := models.GetRzdIndexByCode(req.IndexCode)
 	if err != nil {
-		return
-	}
-	for indexCode, info := range mapInfo {
-		_ = models.UpdateRzdEdbDataByIndexCodes(indexCode, info)
-	}
-
-	// 同步新增指标库数据
-	// 判断是否存在于指标库
-	// 获取指标详情
-	/* 调用方对 指标库数据做了维护处理
-	var dataList []models.EdbDataRzd
-	for _, data := range req {
-		edbInfo, err := models.GetEdbInfoByEdbCode(utils.DATA_SOURCE_RZD, data.IndexCode)
+		if !utils.IsErrNoRow(err) {
+			br.Msg = "查询指标失败"
+			br.ErrMsg = "查询指标失败,Err:" + err.Error()
+			return
+		}
+		rzdIndex = &models.BaseFromRzdIndex{
+			CreateTime:            time.Now(),     // 创建时间
+			BaseFromRzdClassifyId: req.ClassifyId, // 指标编码
+			IndexName:             req.IndexName,  // 指标名称
+			IndexCode:             req.IndexCode,
+			Frequency:             req.Frequency, // 频度
+			Unit:                  req.Unit,      // 单位
+			StartDate:             req.StartDate, // 数据开始日期
+			EndDate:               req.EndDate,   // 数据结束日期
+			LatestValue:           req.LatestValue.InexactFloat64(),
+		}
+		var dataList []*models.BaseFromRzdData
+		for _, data := range req.DataList {
+			rzdData := &models.BaseFromRzdData{
+				CreateTime: time.Now().Format(utils.FormatDateTime),
+				IndexCode:  req.IndexCode,
+				DataTime:   data.DataTime.Format(utils.FormatDate),
+				Value:      data.Value.InexactFloat64(),
+			}
+			dataList = append(dataList, rzdData)
+		}
+		err = models.AddRzdIndexWithDataList(rzdIndex, dataList)
 		if err != nil {
-			br.Msg = "指标不存在!"
-			br.ErrMsg = "指标不存在"
+			br.Msg = "查询指标失败"
+			br.ErrMsg = "查询指标失败,Err:" + err.Error()
 			return
 		}
-		if edbInfo.EdbInfoId == 0 {
-			continue
+	} else {
+		rzdIndex.BaseFromRzdClassifyId = req.ClassifyId
+		if rzdIndex.StartDate.After(req.StartDate) {
+			rzdIndex.StartDate = req.StartDate
 		}
-		dataRzd := models.EdbDataRzd{
-			EdbInfoId:     data.BaseFromRzdIndexId,
-			DataTime:      data.DataTime,
-			Value:         data.Value,
-			EdbCode:       data.IndexCode,
-			CreateTime:    utils.GetCurrentTime(),
-			ModifyTime:    utils.GetCurrentTime(),
-			DataTimestamp: uint64(time.Now().UnixNano() / int64(time.Millisecond)),
+		if rzdIndex.EndDate.Before(req.EndDate) {
+			rzdIndex.EndDate = req.EndDate
+			rzdIndex.LatestValue = req.LatestValue.InexactFloat64()
+		}
+		var dataList []*models.BaseFromRzdData
+		for _, data := range req.DataList {
+			rzdData := &models.BaseFromRzdData{
+				BaseFromRzdIndexId: rzdIndex.BaseFromRzdIndexId,
+				CreateTime:         time.Now().Format(utils.FormatDateTime),
+				IndexCode:          req.IndexCode,
+				DataTime:           data.DataTime.Format(utils.FormatDate),
+				Value:              data.Value.InexactFloat64(),
+			}
+			dataList = append(dataList, rzdData)
+		}
+		err = models.UpdateIndexAndAddRzdDataList(rzdIndex, dataList)
+		if err != nil {
+			br.Msg = "新增指标数据失败!"
+			br.ErrMsg = "新增指标数据失败,Err:" + err.Error()
+			return
 		}
-		dataList = append(dataList, dataRzd)
 	}
-	_ = models.AddRzdEdbDataList(dataList)*/
 
 	br.Ret = 200
 	br.Success = true

+ 25 - 8
models/base_from_rzd_classify.go

@@ -4,17 +4,17 @@ package models
 import (
 	"eta/eta_index_lib/global"
 	"eta/eta_index_lib/utils"
+	"gorm.io/gorm/clause"
 )
 
 type BaseFromRzdClassify struct {
-	BaseFromRzdClassifyId int `gorm:"column:base_from_rzd_classify_id;primaryKey"`
-	//BaseFromRzdClassifyId int    `orm:"column(base_from_rzd_classify_id);pk"`
-	CreateTime     string `gorm:"column:create_time"`
-	ModifyTime     string `gorm:"column:modify_time"`
-	ClassifyName   string `gorm:"column:classify_name"`
-	ParentId       int    `gorm:"column:parent_id"`
-	Sort           int    `gorm:"column:sort"`
-	ClassifyNameEn string `gorm:"column:classify_name_en"`
+	BaseFromRzdClassifyId int    `gorm:"column:base_from_rzd_classify_id;primaryKey"`
+	CreateTime            string `gorm:"column:create_time"`
+	ModifyTime            string `gorm:"column:modify_time"`
+	ClassifyName          string `gorm:"column:classify_name"`
+	ParentId              int    `gorm:"column:parent_id"`
+	Sort                  int    `gorm:"column:sort"`
+	ClassifyNameEn        string `gorm:"column:classify_name_en"`
 }
 
 // GetRzdClassifyByName 根据分类名称查询
@@ -29,6 +29,13 @@ func GetRzdClassifyByName(classifyName string) (item *BaseFromRzdClassify, err e
 	return
 }
 
+// GetRzdClassifyByName 睿咨得分类查询
+func GetRzdClassifyList() (list []*BaseFromRzdClassify, err error) {
+	sql := `SELECT * FROM base_from_rzd_classify`
+	err = global.DEFAULT_DB.Raw(sql).Find(&list).Error
+	return
+}
+
 // AddRzdClassify 新增分类
 func AddRzdClassify(classify *BaseFromRzdClassify) (int64, error) {
 	//o := orm.NewOrm()
@@ -40,3 +47,13 @@ func AddRzdClassify(classify *BaseFromRzdClassify) (int64, error) {
 	id := int64(classify.BaseFromRzdClassifyId)
 	return id, nil
 }
+
+// BatchAddRzdClassify 批量新增分类
+func BatchAddRzdClassify(classify []*BaseFromRzdClassify) (err error) {
+	err = global.DEFAULT_DB.Clauses(
+		clause.OnConflict{
+			Columns:   []clause.Column{{Name: "classify_name"}},
+			DoNothing: true,
+		}).CreateInBatches(classify, 100).Error
+	return
+}

+ 40 - 2
models/base_from_rzd_data.go

@@ -4,12 +4,14 @@ package models
 import (
 	"eta/eta_index_lib/global"
 	"eta/eta_index_lib/utils"
+	"github.com/shopspring/decimal"
 	"gorm.io/gorm"
+	"gorm.io/gorm/clause"
+	"time"
 )
 
 type BaseFromRzdData struct {
-	BaseFromRzdDataId int `gorm:"column:base_from_rzd_data_id;primaryKey"`
-	//BaseFromRzdDataId  int     `orm:"column(base_from_rzd_data_id);pk"`
+	BaseFromRzdDataId  int     `gorm:"column:base_from_rzd_data_id;primaryKey"`
 	BaseFromRzdIndexId int     `gorm:"column:base_from_rzd_index_id"`
 	CreateTime         string  `gorm:"column:create_time"`
 	DataTime           string  `gorm:"column:data_time"`
@@ -18,6 +20,23 @@ type BaseFromRzdData struct {
 	Value              float64 `gorm:"column:value"`
 }
 
+type IndexInfo struct {
+	IndexName   string
+	IndexCode   string
+	Frequency   string
+	Unit        string
+	ClassifyId  int
+	StartDate   time.Time
+	EndDate     time.Time
+	LatestValue decimal.Decimal
+	DataList    []IndexData
+}
+
+type IndexData struct {
+	DataTime time.Time
+	Value    decimal.Decimal
+}
+
 // AfterFind 在该模型上设置钩子函数,把日期转成正确的string,所以查询函数只能用Find函数,First或者Scan是不会触发该函数的来获取数据
 func (m *BaseFromRzdData) AfterFind(db *gorm.DB) (err error) {
 	m.DataTime = utils.GormDateStrToDateStr(m.DataTime)
@@ -43,6 +62,25 @@ func AddRzdDataList(items []BaseFromRzdData) (err error) {
 
 	return
 }
+func UpdateIndexAndAddRzdDataList(index *BaseFromRzdIndex, items []*BaseFromRzdData) (err error) {
+	tx := global.DEFAULT_DB.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+	err = tx.Model(index).Select([]string{"latest_value", "start_date", "end_date", "base_from_rzd_classify_id"}).Updates(&index).Error
+	if err != nil {
+		return
+	}
+	err = tx.Clauses(
+		clause.OnConflict{
+			Columns:   []clause.Column{{Name: "base_from_rzd_index_id"}, {Name: "data_time"}},
+			DoUpdates: clause.AssignmentColumns([]string{"value"})}).CreateInBatches(items, len(items)).Error
+	return
+}
 
 // GetRzdDataByIndexCodeAndDataTime 根据指标id和数据日期查询数据
 func GetRzdDataByIndexCodeAndDataTime(indexCode string, dataTime string) (item BaseFromRzdData, err error) {

+ 24 - 5
models/base_from_rzd_index.go

@@ -4,7 +4,7 @@ package models
 
 import (
 	"eta/eta_index_lib/global"
-	"eta/eta_index_lib/utils"
+	"gorm.io/gorm/clause"
 	"time"
 )
 
@@ -41,6 +41,29 @@ func AddRzdIndex(item *BaseFromRzdIndex) (int64, error) {
 	id := int64(item.BaseFromRzdIndexId)
 	return id, nil
 }
+func AddRzdIndexWithDataList(item *BaseFromRzdIndex, dataList []*BaseFromRzdData) (err error) {
+	tx := global.DEFAULT_DB.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+	err = tx.Create(&item).Error
+	if err != nil {
+		return
+	}
+	id := int64(item.BaseFromRzdIndexId)
+	for _, v := range dataList {
+		v.BaseFromRzdIndexId = int(id)
+	}
+	err = tx.Clauses(
+		clause.OnConflict{
+			Columns:   []clause.Column{{Name: "base_from_rzd_index_id"}, {Name: "data_time"}},
+			DoUpdates: clause.AssignmentColumns([]string{"value"})}).CreateInBatches(dataList, len(dataList)).Error
+	return
+}
 
 // GetRzdIndexByCode 查询指标编码是否存在
 func GetRzdIndexByCode(indexCode string) (item *BaseFromRzdIndex, err error) {
@@ -48,9 +71,5 @@ func GetRzdIndexByCode(indexCode string) (item *BaseFromRzdIndex, err error) {
 	sql := `SELECT * FROM base_from_rzd_index WHERE index_code=?`
 	//err = o.Raw(sql, indexCode).QueryRow(&item)
 	err = global.DEFAULT_DB.Raw(sql, indexCode).First(&item).Error
-	if utils.IsErrNoRow(err) {
-		return nil, nil
-	}
-
 	return
 }

+ 18 - 0
routers/commentsRouter.go

@@ -304,6 +304,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_index_lib/controllers:BaseFromRzdController"] = append(beego.GlobalControllerRouter["eta/eta_index_lib/controllers:BaseFromRzdController"],
+        beego.ControllerComments{
+            Method: "BatchAddRzdClassify",
+            Router: `/add/rzd/batch_add_classify`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_index_lib/controllers:BaseFromRzdController"] = append(beego.GlobalControllerRouter["eta/eta_index_lib/controllers:BaseFromRzdController"],
         beego.ControllerComments{
             Method: "AddRzdClassify",
@@ -331,6 +340,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_index_lib/controllers:BaseFromRzdController"] = append(beego.GlobalControllerRouter["eta/eta_index_lib/controllers:BaseFromRzdController"],
+        beego.ControllerComments{
+            Method: "GetRzdClassifyList",
+            Router: `/get/rzd/classify`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_index_lib/controllers:BaseFromRzdController"] = append(beego.GlobalControllerRouter["eta/eta_index_lib/controllers:BaseFromRzdController"],
         beego.ControllerComments{
             Method: "GetRzdClassifyByName",