|
@@ -8,6 +8,7 @@ import (
|
|
|
"eta/eta_index_lib/services/alarm_msg"
|
|
|
"eta/eta_index_lib/utils"
|
|
|
"fmt"
|
|
|
+ "github.com/qiniu/qmgo"
|
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
|
"strings"
|
|
|
"time"
|
|
@@ -135,10 +136,44 @@ func HandleBusinessIndex(indexReq *models.AddBusinessIndexReq) (resp models.Base
|
|
|
}
|
|
|
|
|
|
// 数据处理
|
|
|
+ // 当前传入的最小日期
|
|
|
+ var reqMinDate time.Time
|
|
|
+ if utils.UseMongo {
|
|
|
+ reqMinDate, err = handleBusinessDataByMongo(item, indexReq.DataList)
|
|
|
+ } else {
|
|
|
+ reqMinDate, err = handleBusinessDataByMysql(item, indexReq.DataList)
|
|
|
+ }
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 同步刷新指标库的指标
|
|
|
+ go refreshEdbBusiness(item.IndexCode, reqMinDate)
|
|
|
+
|
|
|
+ resp = models.BaseFromBusinessIndexResp{
|
|
|
+ IndexCode: item.IndexCode,
|
|
|
+ IndexName: item.IndexName,
|
|
|
+ Unit: item.Unit,
|
|
|
+ Frequency: item.Frequency,
|
|
|
+ SourceName: item.SourceName,
|
|
|
+ }
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// handleBusinessDataByMongo
|
|
|
+// @Description: 处理外部指标数据(mongo)
|
|
|
+// @author: Roc
|
|
|
+// @datetime 2024-07-01 15:30:41
|
|
|
+// @param item *models.BaseFromBusinessIndex
|
|
|
+// @param reqDataList []*models.AddBusinessDataReq
|
|
|
+// @return reqMinDate time.Time 当前传入的最小日期
|
|
|
+// @return err error
|
|
|
+func handleBusinessDataByMongo(item *models.BaseFromBusinessIndex, reqDataList []models.AddBusinessDataReq) (reqMinDate time.Time, err error) {
|
|
|
mogDataObj := new(mgo.BaseFromBusinessData)
|
|
|
|
|
|
//获取已存在的所有数据
|
|
|
- exitDataList, err := mogDataObj.GetAllDataList(bson.M{"index_code": indexReq.IndexCode}, []string{"data_time"})
|
|
|
+ exitDataList, err := mogDataObj.GetAllDataList(bson.M{"index_code": item.IndexCode}, []string{"data_time"})
|
|
|
if err != nil {
|
|
|
fmt.Println("GetIndexDataList Err:" + err.Error())
|
|
|
return
|
|
@@ -150,14 +185,12 @@ func HandleBusinessIndex(indexReq *models.AddBusinessIndexReq) (resp models.Base
|
|
|
exitDataMap[v.DataTime.Format(utils.FormatDate)] = v
|
|
|
}
|
|
|
|
|
|
- // 当前传入的最小日期
|
|
|
- var reqMinDate time.Time
|
|
|
// 待添加的数据集
|
|
|
addDataList := make([]interface{}, 0)
|
|
|
updateDataList := make([]mgo.BaseFromBusinessData, 0)
|
|
|
//var hasUpdate bool
|
|
|
// 遍历excel数据,然后跟现有的数据做校验,不存在则入库
|
|
|
- for _, data := range indexReq.DataList {
|
|
|
+ for _, data := range reqDataList {
|
|
|
dateTime, tmpErr := utils.DealExcelDate(data.Date)
|
|
|
if tmpErr != nil {
|
|
|
fmt.Println("time.ParseInLocation Err:" + tmpErr.Error())
|
|
@@ -229,27 +262,121 @@ func HandleBusinessIndex(indexReq *models.AddBusinessIndexReq) (resp models.Base
|
|
|
//fmt.Println("result", result)
|
|
|
|
|
|
//修改最大最小日期
|
|
|
- indexMaxAndMinInfo, err := item.GetEdbInfoMaxAndMinInfo(indexReq.IndexCode)
|
|
|
+ indexMaxAndMinInfo, err := item.GetEdbInfoMaxAndMinInfo(item.IndexCode)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
if err == nil && indexMaxAndMinInfo != nil {
|
|
|
- e := item.ModifyIndexMaxAndMinInfo(indexReq.IndexCode, indexMaxAndMinInfo, isIndexUpdateOrAdd)
|
|
|
+ e := item.ModifyIndexMaxAndMinInfo(item.IndexCode, indexMaxAndMinInfo, isIndexUpdateOrAdd)
|
|
|
if e != nil {
|
|
|
fmt.Println("ModifyIndexMaxAndMinInfo Err:" + e.Error())
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 同步刷新指标库的指标
|
|
|
- go refreshEdbBusiness(item.IndexCode, reqMinDate)
|
|
|
+ return
|
|
|
+}
|
|
|
|
|
|
- resp = models.BaseFromBusinessIndexResp{
|
|
|
- IndexCode: item.IndexCode,
|
|
|
- IndexName: item.IndexName,
|
|
|
- Unit: item.Unit,
|
|
|
- Frequency: item.Frequency,
|
|
|
- SourceName: item.SourceName,
|
|
|
+// handleBusinessDataByMysql
|
|
|
+// @Description: 处理外部指标数据(mysql)
|
|
|
+// @author: Roc
|
|
|
+// @datetime 2024-07-01 15:59:43
|
|
|
+// @param item *models.BaseFromBusinessIndex
|
|
|
+// @param reqDataList []models.AddBusinessDataReq
|
|
|
+// @return reqMinDate time.Time
|
|
|
+// @return err error
|
|
|
+func handleBusinessDataByMysql(item *models.BaseFromBusinessIndex, reqDataList []models.AddBusinessDataReq) (reqMinDate time.Time, err error) {
|
|
|
+ businessDataObj := new(models.BaseFromBusinessData)
|
|
|
+
|
|
|
+ var condition []string
|
|
|
+ var pars []interface{}
|
|
|
+ condition = append(condition, "index_code = ?")
|
|
|
+ pars = append(pars, item.IndexCode)
|
|
|
+ //获取已存在的所有数据
|
|
|
+ exitDataList, err := businessDataObj.GetAllDataList(condition, pars, "data_time ASC")
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("GetIndexDataList Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 已经存在的数据集
|
|
|
+ exitDataMap := make(map[string]*models.BaseFromBusinessData)
|
|
|
+ for _, v := range exitDataList {
|
|
|
+ exitDataMap[v.DataTime.Format(utils.FormatDate)] = v
|
|
|
+ }
|
|
|
+
|
|
|
+ // 待添加的数据集
|
|
|
+ addDataList := make([]*models.BaseFromBusinessData, 0)
|
|
|
+ updateDataList := make([]*models.BaseFromBusinessData, 0)
|
|
|
+ //var hasUpdate bool
|
|
|
+ // 遍历excel数据,然后跟现有的数据做校验,不存在则入库
|
|
|
+ for _, data := range reqDataList {
|
|
|
+ dateTime, tmpErr := utils.DealExcelDate(data.Date)
|
|
|
+ if tmpErr != nil {
|
|
|
+ fmt.Println("time.ParseInLocation Err:" + tmpErr.Error())
|
|
|
+ err = tmpErr
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 调整最小日期
|
|
|
+ if reqMinDate.IsZero() || reqMinDate.After(dateTime) {
|
|
|
+ reqMinDate = dateTime
|
|
|
+ }
|
|
|
+
|
|
|
+ date := dateTime.Format(utils.FormatDate)
|
|
|
+
|
|
|
+ findData, ok := exitDataMap[date]
|
|
|
+ if !ok {
|
|
|
+ addDataList = append(addDataList, &models.BaseFromBusinessData{
|
|
|
+ BaseFromBusinessIndexId: int(item.BaseFromBusinessIndexId),
|
|
|
+ IndexCode: item.IndexCode,
|
|
|
+ DataTime: dateTime,
|
|
|
+ Value: data.Value,
|
|
|
+ CreateTime: time.Now(),
|
|
|
+ ModifyTime: time.Now(),
|
|
|
+ //DataTimestamp: 0,
|
|
|
+ })
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ // 值不匹配,修改数据
|
|
|
+ if findData.Value != data.Value {
|
|
|
+ findData.Value = data.Value
|
|
|
+ findData.ModifyTime = time.Now()
|
|
|
+ updateDataList = append(updateDataList, findData)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 指标数据是否新增或修改
|
|
|
+ var isIndexUpdateOrAdd bool
|
|
|
+
|
|
|
+ // 入库
|
|
|
+ {
|
|
|
+ if len(addDataList) > 0 {
|
|
|
+ isIndexUpdateOrAdd = true
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(updateDataList) > 0 {
|
|
|
+ isIndexUpdateOrAdd = true
|
|
|
+ }
|
|
|
+ err = businessDataObj.HandleData(addDataList, updateDataList)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("UpdateDataByColl:Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ //修改最大最小日期
|
|
|
+ indexMaxAndMinInfo, err := item.GetEdbInfoMaxAndMinInfo(item.IndexCode)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if err == nil && indexMaxAndMinInfo != nil {
|
|
|
+ e := item.ModifyIndexMaxAndMinInfo(item.IndexCode, indexMaxAndMinInfo, isIndexUpdateOrAdd)
|
|
|
+ if e != nil {
|
|
|
+ fmt.Println("ModifyIndexMaxAndMinInfo Err:" + e.Error())
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -326,9 +453,22 @@ func DelBusinessIndex(indexCodeList []string) (joinEdbCodeList, needDelEdbCodeLi
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- // 删除指标明细数据
|
|
|
- mogDataObj := new(mgo.BaseFromBusinessData)
|
|
|
- err = mogDataObj.RemoveMany(bson.M{"index_code": bson.M{"$in": needDelEdbCodeList}})
|
|
|
+ if utils.UseMongo {
|
|
|
+ // 删除指标明细数据
|
|
|
+ mogDataObj := new(mgo.BaseFromBusinessData)
|
|
|
+ err = mogDataObj.RemoveMany(bson.M{"index_code": bson.M{"$in": needDelEdbCodeList}})
|
|
|
+ } else {
|
|
|
+ var condition []string
|
|
|
+ var pars []interface{}
|
|
|
+ delNum := len(needDelEdbCodeList)
|
|
|
+ if delNum > 0 {
|
|
|
+ condition = append(condition, "index_code in ("+utils.GetOrmInReplace(delNum)+")")
|
|
|
+ pars = append(pars, needDelEdbCodeList)
|
|
|
+
|
|
|
+ businessDataObj := models.BaseFromBusinessData{}
|
|
|
+ err = businessDataObj.DelDataByCond(condition, pars)
|
|
|
+ }
|
|
|
+ }
|
|
|
if err != nil {
|
|
|
fmt.Println("删除自有指标明细数据 Err:" + err.Error())
|
|
|
return
|
|
@@ -348,7 +488,7 @@ func DelBusinessIndex(indexCodeList []string) (joinEdbCodeList, needDelEdbCodeLi
|
|
|
func DelBusinessIndexData(indexCode string, startDate, endDate string) (err error, errMsg string) {
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
- fmt.Println("DelBusinessIndex Err:" + err.Error())
|
|
|
+ fmt.Println("DelBusinessIndexData Err:" + err.Error())
|
|
|
}
|
|
|
}()
|
|
|
errMsg = "删除失败"
|
|
@@ -377,11 +517,6 @@ func DelBusinessIndexData(indexCode string, startDate, endDate string) (err erro
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- // 构建查询条件
|
|
|
- queryConditions := bson.M{
|
|
|
- "index_code": item.IndexCode,
|
|
|
- }
|
|
|
-
|
|
|
// 当前传入的最小日期
|
|
|
var reqMinDate time.Time
|
|
|
|
|
@@ -410,6 +545,51 @@ func DelBusinessIndexData(indexCode string, startDate, endDate string) (err erro
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 删除具体的数据
|
|
|
+ var indexMaxAndMinInfo *models.EdbInfoMaxAndMinInfo
|
|
|
+ if utils.UseMongo {
|
|
|
+ indexMaxAndMinInfo, err = delBusinessIndexDataByMongo(item, startDateTime, endDateTime)
|
|
|
+ } else {
|
|
|
+ indexMaxAndMinInfo, err = delBusinessIndexDataByMysql(item, startDateTime, endDateTime)
|
|
|
+ }
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 修改指标的最早最晚日期
|
|
|
+ if indexMaxAndMinInfo != nil {
|
|
|
+ e := item.ModifyIndexMaxAndMinInfo(item.IndexCode, indexMaxAndMinInfo, true)
|
|
|
+ if e != nil {
|
|
|
+ fmt.Println("ModifyIndexMaxAndMinInfo Err:" + e.Error())
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 同步刷新指标库的指标
|
|
|
+ go refreshEdbBusiness(item.IndexCode, reqMinDate)
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// delBusinessIndexDataByMongo
|
|
|
+// @Description: 删除指标数据(从mongo删除)
|
|
|
+// @author: Roc
|
|
|
+// @datetime 2024-07-01 18:00:07
|
|
|
+// @param item *models.BaseFromBusinessIndex
|
|
|
+// @param startDateTime time.Time
|
|
|
+// @param endDateTime time.Time
|
|
|
+// @return err error
|
|
|
+func delBusinessIndexDataByMongo(item *models.BaseFromBusinessIndex, startDateTime, endDateTime time.Time) (indexMaxAndMinInfo *models.EdbInfoMaxAndMinInfo, err error) {
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Error("delBusinessIndexDataByMongo 删除自有指标明细数据 Err:" + err.Error())
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ // 构建查询条件
|
|
|
+ queryConditions := bson.M{
|
|
|
+ "index_code": item.IndexCode,
|
|
|
+ }
|
|
|
+
|
|
|
dateCondition, err := mgo.BuildDateTimeCondition(startDateTime, endDateTime)
|
|
|
if err != nil {
|
|
|
return
|
|
@@ -422,12 +602,66 @@ func DelBusinessIndexData(indexCode string, startDate, endDate string) (err erro
|
|
|
mogDataObj := new(mgo.BaseFromBusinessData)
|
|
|
err = mogDataObj.RemoveMany(queryConditions)
|
|
|
if err != nil {
|
|
|
- fmt.Println("删除自有指标明细数据 Err:" + err.Error())
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- // 同步刷新指标库的指标
|
|
|
- go refreshEdbBusiness(item.IndexCode, reqMinDate)
|
|
|
+ //修改最大最小日期
|
|
|
+ indexMaxAndMinInfo, err = item.GetEdbInfoMaxAndMinInfo(item.IndexCode)
|
|
|
+ // 如果有错误,且错误信息是取不到文档,那么就不修改了
|
|
|
+ if err != nil && !errors.Is(err, qmgo.ErrNoSuchDocuments) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 清空的目的是为了避免异常返回
|
|
|
+ err = nil
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// delBusinessIndexDataByMysql
|
|
|
+// @Description: 删除指标数据(从mysql删除)
|
|
|
+// @author: Roc
|
|
|
+// @datetime 2024-07-02 09:53:13
|
|
|
+// @param item *models.BaseFromBusinessIndex
|
|
|
+// @param startDateTime time.Time
|
|
|
+// @param endDateTime time.Time
|
|
|
+// @return err error
|
|
|
+func delBusinessIndexDataByMysql(item *models.BaseFromBusinessIndex, startDateTime, endDateTime time.Time) (indexMaxAndMinInfo *models.EdbInfoMaxAndMinInfo, err error) {
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Error("delBusinessIndexDataByMysql 删除自有指标明细数据 Err:" + err.Error())
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ // 构建查询条件
|
|
|
+ var condition []string
|
|
|
+ var pars []interface{}
|
|
|
+ condition = append(condition, "index_code = ? ")
|
|
|
+ pars = append(pars, item.IndexCode)
|
|
|
+
|
|
|
+ if !startDateTime.IsZero() {
|
|
|
+ condition = append(condition, " data_time >= ? ")
|
|
|
+ pars = append(pars, startDateTime.Format(utils.FormatDate))
|
|
|
+ }
|
|
|
+ if !endDateTime.IsZero() {
|
|
|
+ condition = append(condition, " data_time <= ? ")
|
|
|
+ pars = append(pars, endDateTime.Format(utils.FormatDate))
|
|
|
+ }
|
|
|
+
|
|
|
+ // 删除数据源中的指标明细数据
|
|
|
+ businessDataObj := new(models.BaseFromBusinessData)
|
|
|
+ err = businessDataObj.DelDataByCond(condition, pars)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //修改最大最小日期
|
|
|
+ indexMaxAndMinInfo, err = item.GetEdbInfoMaxAndMinInfo(item.IndexCode)
|
|
|
+ // 如果有错误,且错误信息是取不到文档,那么就不修改了
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 清空的目的是为了避免异常返回
|
|
|
+ err = nil
|
|
|
|
|
|
return
|
|
|
}
|