package services import ( "eta_gn/eta_index_lib/logic" "eta_gn/eta_index_lib/models" "eta_gn/eta_index_lib/services/alarm_msg" "eta_gn/eta_index_lib/utils" "fmt" "strings" "time" ) // HandleSciIndex 处理卓创(红桃3)的Excel数据 func HandleSciIndex(indexNameList, thirdIndexIdList, frequencyList, unitList []string, dataMap map[string]map[string]string, filePath, terminalCode string) { // 卓创(红桃3)指标id列表 sciIndexModel := new(models.BaseFromSciIndex) list, err := sciIndexModel.GetAllIndex() if err != nil { fmt.Println("获取指标失败:", err) return } allIndexMap := make(map[string]*models.BaseFromSciIndex) for _, v := range list { allIndexMap[v.IndexCode] = v } // 需要入库的指标下标 needAddIndexKeyList := make([]int, 0) needAddIndexMap := make(map[string]int, 0) for key, v := range thirdIndexIdList { if sciIndexInfo, ok := allIndexMap[v]; !ok { if _, ok2 := needAddIndexMap[v]; !ok2 { needAddIndexKeyList = append(needAddIndexKeyList, key) needAddIndexMap[v] = key } } else { updateColList := make([]string, 0) if sciIndexInfo.FilePath != filePath { sciIndexInfo.FilePath = filePath updateColList = append(updateColList, "FilePath") } if sciIndexInfo.TerminalCode != terminalCode { sciIndexInfo.TerminalCode = terminalCode updateColList = append(updateColList, "TerminalCode") } // 更新指标源信息 if len(updateColList) > 0 { sciIndexInfo.Update(updateColList) } } } //fmt.Println(needAddIndexKeyList) //return addSciIndexList := make([]*models.BaseFromSciIndex, 0) // 新的指标入库 for _, key := range needAddIndexKeyList { tmpSciIndex := &models.BaseFromSciIndex{ //BaseFromSciIndexId: 0, //ClassifyId: 0, IndexCode: thirdIndexIdList[key], IndexName: indexNameList[key], Frequency: frequencyList[key], Unit: unitList[key], //StartDate: time.Time{}, //EndDate: time.Time{}, FilePath: filePath, TerminalCode: terminalCode, CreateTime: time.Now(), ModifyTime: time.Now(), } addSciIndexList = append(addSciIndexList, tmpSciIndex) } //fmt.Println(addSciIndexList) if len(addSciIndexList) > 0 { err = sciIndexModel.BatchAdd(addSciIndexList) if err != nil { fmt.Println("批量添加指标失败:", err) return } fmt.Println("添加成功") } // 红桃3实际数据处理 HandleSciData(dataMap) } // HandleData 红桃3实际数据处理 func HandleSciData(dataMap map[string]map[string]string) { errMsgList := make([]string, 0) defer func() { if len(errMsgList) > 0 { go alarm_msg.SendAlarmMsg(fmt.Sprint("红桃3实际数据处理失败,err:", strings.Join(errMsgList, "\n")), 3) } }() // 获取所有的指标 sciIndexModel := new(models.BaseFromSciIndex) list, err := sciIndexModel.GetAllIndex() if err != nil { fmt.Println("获取指标失败:", err) return } allIndexMap := make(map[string]*models.BaseFromSciIndex) for _, v := range list { allIndexMap[v.IndexCode] = v } sciIndexDataModel := new(models.BaseFromSciData) for indexCode, data := range dataMap { indexInfo, ok := allIndexMap[indexCode] if !ok { fmt.Println("找不到该指标:", indexCode) continue } indexDataList, err := sciIndexDataModel.GetIndexDataList(indexCode) if err != nil { errMsgList = append(errMsgList, fmt.Sprint("查找卓创基础指标失败,指标编码:", indexCode, ";错误原因:", err.Error())) continue } indexDataExistMap := make(map[string]*models.BaseFromSciData) for _, indexData := range indexDataList { indexDataExistMap[indexData.DataTime] = indexData } addSciDataList := make([]*models.BaseFromSciData, 0) for currDate, currVal := range data { currDataTime, tmpErr := time.ParseInLocation(utils.FormatDate, currDate, time.Local) if tmpErr != nil { errMsgList = append(errMsgList, fmt.Sprint("时间格式化失败,指标编码:", currDate, ";错误原因:", tmpErr.Error())) continue } timestamp := currDataTime.UnixNano() / 1e6 sciData, ok := indexDataExistMap[currDate] //判断是否存在数据,如果不存在,那么插入数据,存在的话那么修改数据 if !ok { tmpBaseFromSciData := &models.BaseFromSciData{ //SciDataId: 0, BaseFromSciIndexId: indexInfo.BaseFromSciIndexId, IndexCode: indexInfo.IndexCode, DataTime: currDate, Value: currVal, DataTimestamp: timestamp, CreateTime: time.Now(), ModifyTime: time.Now(), } indexDataExistMap[currDate] = tmpBaseFromSciData addSciDataList = append(addSciDataList, tmpBaseFromSciData) } else { // 更新数据 existValue := sciData.Value if existValue != currVal { //fmt.Println("existValue:", existValue, ";====;currVal:", currVal) sciData.Value = currVal sciData.ModifyTime = time.Now() // 如果是已经入库了数据,那么就更新,否则只是单纯更改内存数据,而不去更新数据库 if sciData.SciDataId > 0 { tmpErr = sciData.Update([]string{"Value", "ModifyTime"}) if tmpErr != nil { errMsgList = append(errMsgList, fmt.Sprint("指标数据更新失败,指标编码:", indexCode, ",时间:", currDate, ";错误原因:", tmpErr.Error())) continue } } } } } if len(addSciDataList) > 0 { err = sciIndexDataModel.BatchAdd(addSciDataList) if err != nil { errMsgList = append(errMsgList, fmt.Sprint("批量添加数据失败,指标编码:", indexCode, err.Error())) continue } } indexInfo.ModifyTime = time.Now() indexInfo.Update([]string{"ModifyTime"}) // 同步刷新ETA图库红桃3的指标 { // 获取指标详情 edbInfo, err := models.GetEdbInfoByEdbCode(utils.DATA_SOURCE_SCI, indexInfo.IndexCode) if err != nil && err.Error() != utils.ErrNoRow() { errMsgList = append(errMsgList, fmt.Sprint("刷新ETA指标异常,指标编码:", indexCode, err.Error())) continue } // 已经加入到指标库的话,那么就去更新ETA指标库吧 if edbInfo != nil { go logic.RefreshBaseEdbInfo(edbInfo, ``) } } } }