|
@@ -456,6 +456,167 @@ func (m *AiPredictModelIndex) ImportIndexAndData(createIndexes, updateIndexes []
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+// UpdateIndexAndData 导入数据
|
|
|
+func (m *AiPredictModelIndex) UpdateIndexAndData(modelIndexItem *AiPredictModelIndex, dataList []*AiPredictModelData, updateCols []string) (err error) {
|
|
|
+ o := global.DbMap[utils.DbNameIndex]
|
|
|
+ tx := o.Begin()
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ _ = tx.Rollback()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ _ = tx.Commit()
|
|
|
+ }()
|
|
|
+
|
|
|
+ // 更新指标
|
|
|
+ e := tx.Select(updateCols).Updates(modelIndexItem).Error
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("update index err: %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var existDataList []*AiPredictModelData
|
|
|
+ // 查询标的的所有数据
|
|
|
+ sqlRun := `SELECT * FROM ai_predict_model_data WHERE ai_predict_model_index_id = ? ORDER BY ai_predict_model_data_id DESC`
|
|
|
+ err = tx.Raw(sqlRun, modelIndexItem.AiPredictModelIndexId).Find(&existDataList).Error
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("find index data err: %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ existDailyMap := make(map[string]*AiPredictModelData)
|
|
|
+ existMonthlyMap := make(map[string]*AiPredictModelData)
|
|
|
+ removeDailyDateMap := make(map[string]bool)
|
|
|
+ removeMonthlyDateMap := make(map[string]bool)
|
|
|
+
|
|
|
+ for _, d := range existDataList {
|
|
|
+ tmpDate := d.DataTime.Format(utils.FormatDate)
|
|
|
+ if d.Source == ModelDataSourceDaily {
|
|
|
+ existDailyMap[tmpDate] = d
|
|
|
+ removeDailyDateMap[tmpDate] = true
|
|
|
+ }
|
|
|
+ if d.Source == ModelDataSourceMonthly {
|
|
|
+ existMonthlyMap[tmpDate] = d
|
|
|
+ removeMonthlyDateMap[tmpDate] = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ addDataList := make([]*AiPredictModelData, 0)
|
|
|
+ for _, tmpData := range dataList {
|
|
|
+ tmpData.AiPredictModelIndexId = modelIndexItem.AiPredictModelIndexId
|
|
|
+ tmpData.IndexCode = modelIndexItem.IndexCode
|
|
|
+ tmpData.DataTimestamp = tmpData.DataTime.UnixNano() / 1e6
|
|
|
+
|
|
|
+ // 档期日期
|
|
|
+ tmpDate := tmpData.DataTime.Format(utils.FormatDate)
|
|
|
+
|
|
|
+ if tmpData.Source == ModelDataSourceDaily {
|
|
|
+ delete(removeDailyDateMap, tmpDate)
|
|
|
+ if existData, ok := existDailyMap[tmpDate]; ok {
|
|
|
+ // 修改
|
|
|
+ dataUpdateCols := make([]string, 0)
|
|
|
+ if existData.Value != tmpData.Value {
|
|
|
+ existData.Value = tmpData.Value
|
|
|
+ dataUpdateCols = append(dataUpdateCols, "Value")
|
|
|
+ }
|
|
|
+ if existData.PredictValue != tmpData.PredictValue {
|
|
|
+ existData.PredictValue = tmpData.PredictValue
|
|
|
+ dataUpdateCols = append(dataUpdateCols, "PredictValue")
|
|
|
+ }
|
|
|
+ if existData.Direction != tmpData.Direction {
|
|
|
+ existData.Direction = tmpData.Direction
|
|
|
+ dataUpdateCols = append(dataUpdateCols, "Direction")
|
|
|
+ }
|
|
|
+ if existData.DeviationRate != tmpData.DeviationRate {
|
|
|
+ existData.DeviationRate = tmpData.DeviationRate
|
|
|
+ dataUpdateCols = append(dataUpdateCols, "DeviationRate")
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(dataUpdateCols) > 0 {
|
|
|
+ existData.ModifyTime = time.Now()
|
|
|
+ dataUpdateCols = append(dataUpdateCols, "ModifyTime")
|
|
|
+ tmpErr := tx.Select(dataUpdateCols).Updates(existData).Error
|
|
|
+ if tmpErr != nil {
|
|
|
+ utils.FileLog.Error("update index data err: %v", tmpErr)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ addDataList = append(addDataList, tmpData)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if tmpData.Source == ModelDataSourceMonthly {
|
|
|
+ delete(removeMonthlyDateMap, tmpDate)
|
|
|
+ if existData, ok := existMonthlyMap[tmpDate]; ok {
|
|
|
+ // 修改
|
|
|
+ dataUpdateCols := make([]string, 0)
|
|
|
+ if existData.Value != tmpData.Value {
|
|
|
+ existData.Value = tmpData.Value
|
|
|
+ dataUpdateCols = append(dataUpdateCols, "Value")
|
|
|
+ }
|
|
|
+ if existData.PredictValue.Float64 != tmpData.PredictValue.Float64 {
|
|
|
+ existData.PredictValue = tmpData.PredictValue
|
|
|
+ dataUpdateCols = append(dataUpdateCols, "PredictValue")
|
|
|
+ }
|
|
|
+ if existData.Direction != tmpData.Direction {
|
|
|
+ existData.Direction = tmpData.Direction
|
|
|
+ dataUpdateCols = append(dataUpdateCols, "Direction")
|
|
|
+ }
|
|
|
+ if existData.DeviationRate != tmpData.DeviationRate {
|
|
|
+ existData.DeviationRate = tmpData.DeviationRate
|
|
|
+ dataUpdateCols = append(dataUpdateCols, "DeviationRate")
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(dataUpdateCols) > 0 {
|
|
|
+ existData.ModifyTime = time.Now()
|
|
|
+ dataUpdateCols = append(dataUpdateCols, "ModifyTime")
|
|
|
+ tmpErr := tx.Select(dataUpdateCols).Updates(existData).Error
|
|
|
+ if tmpErr != nil {
|
|
|
+ utils.FileLog.Error("update index data err: %v", tmpErr)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ addDataList = append(addDataList, tmpData)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 清除不要了的日度指标
|
|
|
+ if len(removeDailyDateMap) > 0 {
|
|
|
+ removeDateList := make([]string, 0)
|
|
|
+ for date := range removeDailyDateMap {
|
|
|
+ removeDateList = append(removeDateList, date)
|
|
|
+ }
|
|
|
+ sql := `DELETE FROM ai_predict_model_data WHERE ai_predict_model_index_id = ? AND source = ? AND data_time IN (?)`
|
|
|
+ e = tx.Exec(sql, modelIndexItem.AiPredictModelIndexId, ModelDataSourceDaily, removeDateList).Error
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("clear index daily data err: %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 清除不要了的月度指标
|
|
|
+ if len(removeMonthlyDateMap) > 0 {
|
|
|
+ removeDateList := make([]string, 0)
|
|
|
+ for date := range removeMonthlyDateMap {
|
|
|
+ removeDateList = append(removeDateList, date)
|
|
|
+ }
|
|
|
+ sql := `DELETE FROM ai_predict_model_data WHERE ai_predict_model_index_id = ? AND source = ? AND data_time IN (?)`
|
|
|
+ e = tx.Exec(sql, modelIndexItem.AiPredictModelIndexId, ModelDataSourceMonthly, removeDateList).Error
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("clear index monthly data err: %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ e = tx.CreateInBatches(addDataList, utils.MultiAddNum).Error
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("insert index data err: %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
type AiPredictModelDetailResp struct {
|
|
|
TableData []*AiPredictModelDataItem `description:"表格数据"`
|
|
|
ChartView *data_manage.ChartInfoDetailResp `description:"月度预测数据图表"`
|