package services import ( "encoding/json" "errors" "eta/eta_data_init/models" "eta/eta_data_init/utils" "fmt" "github.com/xuri/excelize/v2" "os" "path/filepath" "strings" ) // InitBaseIndexData 初始化基础指标数据 func InitBaseIndexData(dataPath string) { var err error defer func() { if err != nil { fmt.Println("InitBaseIndexData Err:" + err.Error()) utils.FileLog.Info("InitJiaYueIndexData Err: " + err.Error()) } }() //读取excel path, err := filepath.Abs(os.Args[0]) if err != nil { fmt.Println(err) } dir := filepath.Dir(path) fmt.Println("dir:" + dir) //dataPath := dir + "/docs/东吴ETA同花顺指标20230925.xlsx" dataPath = dir + dataPath fmt.Println("dataPath:" + dataPath) f, err := excelize.OpenFile(dataPath) if err != nil { fmt.Println(err) return } defer func() { // Close the spreadsheet. if err := f.Close(); err != nil { fmt.Println(err) } }() rows, err := f.GetRows("Sheet1") if err != nil { fmt.Println(err) return } fmt.Println("rows len:", len(rows)) // 获取创建人信息 mobileMap := make(map[string]*models.Admin) if utils.MYSQL_URL_ETA != "" { admins, e := models.GetSysAdminList(``, make([]interface{}, 0)) if e != nil { err = fmt.Errorf("GetSysAdminList err: %s", e.Error()) return } for _, v := range admins { if v.Mobile == "" { continue } mobileMap[v.Mobile] = v } } for rk, row := range rows { if rk > 0 { var classifyFirst, classifySecond, classifyThree, classifyFourth, classifyFifth, classifySixth, indexCode, indexName, frequency, unit, source, mobile, terminalCode string for ck, colCell := range row { colCell = strings.TrimSpace(colCell) switch ck { case 0: classifyFirst = colCell case 1: classifySecond = colCell case 2: classifyThree = colCell case 3: classifyFourth = colCell case 4: classifyFifth = colCell case 5: classifySixth = colCell case 6: indexCode = colCell case 7: indexName = colCell case 8: frequency = colCell case 9: unit = colCell case 10: source = colCell case 11: mobile = colCell case 12: terminalCode = colCell } } if classifyFirst != "" && indexCode != "" && indexName != "" && unit != "" && frequency != "" && source != "" { var firstId, secondId, thirdId, fourthId, fifthId, lastId int method := "classify/get_or_add" classifyFirstMap := make(map[string]interface{}) classifyFirstMap["ClassifyName"] = classifyFirst classifyFirstMap["ParentId"] = 0 classifyFirstMap["Level"] = 0 classifyFirstMap["ClassifyType"] = 0 result, e := PostEdbLib(classifyFirstMap, method) if e != nil { err = fmt.Errorf("ClassifyFirst PostEdbLib err: %s", e.Error()) return } resp := new(models.ClassifyResp) if e = json.Unmarshal(result, &resp); e != nil { err = fmt.Errorf("ClassifyFirst json unmarshal err: %s", e.Error()) return } if resp.Ret != 200 { err = fmt.Errorf("ClassifyFirst resp msg: %s; errMsg: %s", resp.Msg, resp.ErrMsg) return } firstId = resp.Data.ClassifyId lastId = firstId // 二级分类 if classifySecond != "" { classifySecondMap := make(map[string]interface{}) classifySecondMap["ClassifyName"] = classifySecond classifySecondMap["ParentId"] = firstId classifySecondMap["Level"] = 1 classifySecondMap["ClassifyType"] = 0 res2, e := PostEdbLib(classifySecondMap, method) if e != nil { err = fmt.Errorf("ClassifySecond PostEdbLib err: %s", e.Error()) return } resp2 := new(models.ClassifyResp) if e = json.Unmarshal(res2, &resp2); e != nil { err = fmt.Errorf("ClassifySecond json unmarshal err: %s", e.Error()) return } if resp2.Ret != 200 { err = fmt.Errorf("ClassifySecond resp msg: %s; errMsg: %s", resp2.Msg, resp2.ErrMsg) return } secondId = resp2.Data.ClassifyId lastId = secondId } // 三级分类 if classifyThree != "" { classifyThreeMap := make(map[string]interface{}) classifyThreeMap["ClassifyName"] = classifyThree classifyThreeMap["ParentId"] = secondId classifyThreeMap["Level"] = 2 classifyThreeMap["ClassifyType"] = 0 res3, e := PostEdbLib(classifyThreeMap, method) if e != nil { err = fmt.Errorf("ClassifyThird PostEdbLib err: %s", e.Error()) return } resp3 := new(models.ClassifyResp) if e = json.Unmarshal(res3, &resp3); e != nil { err = fmt.Errorf("ClassifyThird json unmarshal err: %s", e.Error()) return } if resp3.Ret != 200 { err = fmt.Errorf("ClassifyThird resp msg: %s; errMsg: %s", resp3.Msg, resp3.ErrMsg) return } thirdId = resp3.Data.ClassifyId lastId = thirdId } // 四级分类 if classifyFourth != "" { classifyFourthMap := make(map[string]interface{}) classifyFourthMap["ClassifyName"] = classifyFourth classifyFourthMap["ParentId"] = thirdId classifyFourthMap["Level"] = 3 classifyFourthMap["ClassifyType"] = 0 res4, e := PostEdbLib(classifyFourthMap, method) if e != nil { err = fmt.Errorf("ClassifyFourth PostEdbLib err: %s", e.Error()) return } resp4 := new(models.ClassifyResp) if e = json.Unmarshal(res4, &resp4); e != nil { err = fmt.Errorf("ClassifyFourth json unmarshal err: %s", e.Error()) return } if resp4.Ret != 200 { err = fmt.Errorf("ClassifyFourth resp msg: %s; errMsg: %s", resp4.Msg, resp4.ErrMsg) return } fourthId = resp4.Data.ClassifyId lastId = fourthId } // 五级分类 if classifyFifth != "" { classifyFifthMap := make(map[string]interface{}) classifyFifthMap["ClassifyName"] = classifyFifth classifyFifthMap["ParentId"] = fourthId classifyFifthMap["Level"] = 4 classifyFifthMap["ClassifyType"] = 0 res5, e := PostEdbLib(classifyFifthMap, method) if e != nil { err = fmt.Errorf("ClassifyFifth PostEdbLib err: %s", e.Error()) return } resp5 := new(models.ClassifyResp) if e = json.Unmarshal(res5, &resp5); e != nil { err = fmt.Errorf("ClassifyFifth json unmarshal err: %s", e.Error()) return } if resp5.Ret != 200 { err = fmt.Errorf("ClassifyFifth resp msg: %s; errMsg: %s", resp5.Msg, resp5.ErrMsg) return } fifthId = resp5.Data.ClassifyId lastId = fifthId } // 六级分类 if classifySixth != "" { classifySixthMap := make(map[string]interface{}) classifySixthMap["ClassifyName"] = classifySixth classifySixthMap["ParentId"] = fifthId classifySixthMap["Level"] = 5 classifySixthMap["ClassifyType"] = 0 res6, e := PostEdbLib(classifySixthMap, method) if e != nil { err = fmt.Errorf("ClassifySixth PostEdbLib err: %s", e.Error()) return } resp6 := new(models.ClassifyResp) if e = json.Unmarshal(res6, &resp6); e != nil { err = fmt.Errorf("ClassifySixth json unmarshal err: %s", e.Error()) return } if resp6.Ret != 200 { err = fmt.Errorf("ClassifySixth resp msg: %s; errMsg: %s", resp6.Msg, resp6.ErrMsg) return } lastId = resp6.Data.ClassifyId } method = "edb_info/add" sourceId, ok := IndexSourceMap[source] if !ok { fmt.Println("source is not defined") fmt.Println(classifyFirst, classifySecond, classifyThree, indexCode, indexName, frequency, unit, source) continue } indexMap := make(map[string]interface{}) indexMap["Source"] = sourceId indexMap["EdbCode"] = indexCode indexMap["EdbName"] = indexName indexMap["Frequency"] = frequency indexMap["Unit"] = unit indexMap["ClassifyId"] = lastId indexMap["TerminalCode"] = terminalCode admin := mobileMap[mobile] if admin != nil { indexMap["AdminId"] = admin.AdminId indexMap["AdminName"] = admin.RealName } result, err = PostEdbLib(indexMap, method) if err != nil { utils.FileLog.Info("初始化指标失败:" + err.Error() + " result:" + string(result)) return } indexResp := new(models.EdbInfoResp) err = json.Unmarshal(result, &indexResp) if err != nil { utils.FileLog.Info("初始化分类2失败:" + err.Error()) return } if indexResp.Ret != 200 { if strings.Contains(indexResp.Msg, "新增指标失败") { continue } else { fmt.Println("初始化指标失败:" + indexResp.Msg + ";" + indexResp.ErrMsg) utils.FileLog.Info("初始化指标失败:" + indexResp.Msg + ";" + indexResp.ErrMsg) return } } fmt.Println("add index success:" + indexCode) //刷新指标 { switch source { case "wind", "万得": method = "wind/refresh" case "ths", "同花顺": method = "ths/refresh" case "彭博": method = "pb/refresh" case "路透": method = "lt/refresh" case "": } if method != `` { refreshMap := make(map[string]interface{}) refreshMap["EdbInfoId"] = indexResp.Data.EdbInfoId refreshMap["EdbCode"] = indexCode refreshMap["StartDate"] = "1990-01-01" PostEdbLib(refreshMap, method) } } } else { fmt.Println("data is empty") fmt.Println(classifyFirst, classifySecond, classifyThree, indexCode, indexName, frequency, unit, source) } } } } // 初始化基础指标数据-钢联 func InitBaseIndexDataFromMysteel(filePath string) { var err error defer func() { if err != nil { fmt.Println("InitBaseIndexDataFromMysteel Err:" + err.Error()) utils.FileLog.Info("InitBaseIndexDataFromMysteel Err:" + err.Error()) } }() //读取excel path, err := filepath.Abs(os.Args[0]) if err != nil { fmt.Println(err) } dir := filepath.Dir(path) fmt.Println("dir:" + dir) dataPath := dir + filePath fmt.Println("dataPath:" + dataPath) f, err := excelize.OpenFile(dataPath) if err != nil { fmt.Println(err) return } defer func() { // Close the spreadsheet. if err := f.Close(); err != nil { fmt.Println(err) } }() rows, err := f.GetRows("Sheet1") if err != nil { fmt.Println(err) return } fmt.Println("rows len:", len(rows)) // 获取创建人信息 mobileMap := make(map[string]*models.Admin) if utils.MYSQL_URL_ETA != "" { admins, e := models.GetSysAdminList(``, make([]interface{}, 0)) if e != nil { err = fmt.Errorf("GetSysAdminList err: %s", e.Error()) return } for _, v := range admins { if v.Mobile == "" { continue } mobileMap[v.Mobile] = v } } for rk, row := range rows { if rk > 0 { var classifyFirst, classifySecond, classifyThree, classifyFourth, classifyFifth, classifySixth, indexCode, indexName, frequency, unit, source, mobile string for ck, colCell := range row { colCell = strings.TrimSpace(colCell) switch ck { case 0: classifyFirst = colCell case 1: classifySecond = colCell case 2: classifyThree = colCell case 3: classifyFourth = colCell case 4: classifyFifth = colCell case 5: classifySixth = colCell case 6: indexCode = colCell case 7: indexName = colCell case 8: frequency = colCell case 9: unit = colCell case 10: source = colCell case 11: mobile = colCell } } if classifyFirst != "" && indexCode != "" && indexName != "" && unit != "" && frequency != "" && source != "" { //判断指标是否存在 method := "mysteel_chemical/index_detail" indexSearchMap := make(map[string]interface{}) indexSearchMap["IndexCode"] = indexCode indexResult, e := PostEdbLib(indexSearchMap, method) if e != nil { err = fmt.Errorf("判断指标是否存在失败, Err: %s", e.Error()) return } mysteelIndexResp := new(models.MysteelIndexResp) e = json.Unmarshal(indexResult, &mysteelIndexResp) if e != nil { err = fmt.Errorf("判断指标是否存在失败, Err: %s", e.Error()) return } if mysteelIndexResp.Ret != 200 { fmt.Println("判断指标是否存在失败,Err:" + mysteelIndexResp.ErrMsg) //utils.FileLog.Info("判断指标是否存在失败:" + err.Error()) //return continue } if mysteelIndexResp.Data.BaseFromMysteelChemicalIndexId <= 0 { fmt.Println("指标:" + indexCode + ";不存在") continue } var firstId, secondId, thirdId, fourthId, fifthId, lastId int method = "classify/get_or_add" classifyFirstMap := make(map[string]interface{}) classifyFirstMap["ClassifyName"] = classifyFirst classifyFirstMap["ParentId"] = 0 classifyFirstMap["Level"] = 0 classifyFirstMap["ClassifyType"] = 0 result, e := PostEdbLib(classifyFirstMap, method) if e != nil { err = fmt.Errorf("ClassifyFirst PostEdbLib err: %s", e.Error()) return } resp := new(models.ClassifyResp) if e = json.Unmarshal(result, &resp); e != nil { err = fmt.Errorf("ClassifyFirst json unmarshal err: %s", e.Error()) return } if resp.Ret != 200 { err = fmt.Errorf("ClassifyFirst resp msg: %s; errMsg: %s", resp.Msg, resp.ErrMsg) return } firstId = resp.Data.ClassifyId lastId = firstId // 二级分类 if classifySecond != "" { classifySecondMap := make(map[string]interface{}) classifySecondMap["ClassifyName"] = classifySecond classifySecondMap["ParentId"] = firstId classifySecondMap["Level"] = 1 classifySecondMap["ClassifyType"] = 0 res2, e := PostEdbLib(classifySecondMap, method) if e != nil { err = fmt.Errorf("ClassifySecond PostEdbLib err: %s", e.Error()) return } resp2 := new(models.ClassifyResp) if e = json.Unmarshal(res2, &resp2); e != nil { err = fmt.Errorf("ClassifySecond json unmarshal err: %s", e.Error()) return } if resp2.Ret != 200 { err = fmt.Errorf("ClassifySecond resp msg: %s; errMsg: %s", resp2.Msg, resp2.ErrMsg) return } secondId = resp2.Data.ClassifyId lastId = secondId } // 三级分类 if classifyThree != "" { classifyThreeMap := make(map[string]interface{}) classifyThreeMap["ClassifyName"] = classifyThree classifyThreeMap["ParentId"] = secondId classifyThreeMap["Level"] = 2 classifyThreeMap["ClassifyType"] = 0 res3, e := PostEdbLib(classifyThreeMap, method) if e != nil { err = fmt.Errorf("ClassifyThird PostEdbLib err: %s", e.Error()) return } resp3 := new(models.ClassifyResp) if e = json.Unmarshal(res3, &resp3); e != nil { err = fmt.Errorf("ClassifyThird json unmarshal err: %s", e.Error()) return } if resp3.Ret != 200 { err = fmt.Errorf("ClassifyThird resp msg: %s; errMsg: %s", resp3.Msg, resp3.ErrMsg) return } thirdId = resp3.Data.ClassifyId lastId = thirdId } // 四级分类 if classifyFourth != "" { classifyFourthMap := make(map[string]interface{}) classifyFourthMap["ClassifyName"] = classifyFourth classifyFourthMap["ParentId"] = thirdId classifyFourthMap["Level"] = 3 classifyFourthMap["ClassifyType"] = 0 res4, e := PostEdbLib(classifyFourthMap, method) if e != nil { err = fmt.Errorf("ClassifyFourth PostEdbLib err: %s", e.Error()) return } resp4 := new(models.ClassifyResp) if e = json.Unmarshal(res4, &resp4); e != nil { err = fmt.Errorf("ClassifyFourth json unmarshal err: %s", e.Error()) return } if resp4.Ret != 200 { err = fmt.Errorf("ClassifyFourth resp msg: %s; errMsg: %s", resp4.Msg, resp4.ErrMsg) return } fourthId = resp4.Data.ClassifyId lastId = fourthId } // 五级分类 if classifyFifth != "" { classifyFifthMap := make(map[string]interface{}) classifyFifthMap["ClassifyName"] = classifyFifth classifyFifthMap["ParentId"] = fourthId classifyFifthMap["Level"] = 4 classifyFifthMap["ClassifyType"] = 0 res5, e := PostEdbLib(classifyFifthMap, method) if e != nil { err = fmt.Errorf("ClassifyFifth PostEdbLib err: %s", e.Error()) return } resp5 := new(models.ClassifyResp) if e = json.Unmarshal(res5, &resp5); e != nil { err = fmt.Errorf("ClassifyFifth json unmarshal err: %s", e.Error()) return } if resp5.Ret != 200 { err = fmt.Errorf("ClassifyFifth resp msg: %s; errMsg: %s", resp5.Msg, resp5.ErrMsg) return } fifthId = resp5.Data.ClassifyId lastId = fifthId } // 六级分类 if classifySixth != "" { classifySixthMap := make(map[string]interface{}) classifySixthMap["ClassifyName"] = classifySixth classifySixthMap["ParentId"] = fifthId classifySixthMap["Level"] = 5 classifySixthMap["ClassifyType"] = 0 res6, e := PostEdbLib(classifySixthMap, method) if e != nil { err = fmt.Errorf("ClassifySixth PostEdbLib err: %s", e.Error()) return } resp6 := new(models.ClassifyResp) if e = json.Unmarshal(res6, &resp6); e != nil { err = fmt.Errorf("ClassifySixth json unmarshal err: %s", e.Error()) return } if resp6.Ret != 200 { err = fmt.Errorf("ClassifySixth resp msg: %s; errMsg: %s", resp6.Msg, resp6.ErrMsg) return } lastId = resp6.Data.ClassifyId } method = "edb_info/add" indexMap := make(map[string]interface{}) indexMap["Source"] = IndexSourceMap[source] indexMap["EdbCode"] = indexCode indexMap["EdbName"] = indexName indexMap["Frequency"] = frequency indexMap["Unit"] = unit indexMap["ClassifyId"] = lastId admin := mobileMap[mobile] if admin != nil { indexMap["AdminId"] = admin.AdminId indexMap["AdminName"] = admin.RealName } result, err = PostEdbLib(indexMap, method) if err != nil { utils.FileLog.Info("初始化指标失败:" + err.Error() + " result:" + string(result)) return } indexResp := new(models.EdbInfoResp) err = json.Unmarshal(result, &indexResp) if err != nil { utils.FileLog.Info("初始化分类2失败:" + err.Error()) return } if indexResp.Ret != 200 { if strings.Contains(indexResp.Msg, "新增指标失败") { continue } else { fmt.Println("初始化指标失败:" + indexResp.Msg + ";" + indexResp.ErrMsg) utils.FileLog.Info("初始化指标失败:" + indexResp.Msg + ";" + indexResp.ErrMsg) return } } fmt.Println("add index success:" + indexCode) //刷新指标 method = "mysteel_chemical/refresh" refreshMap := make(map[string]interface{}) refreshMap["EdbInfoId"] = indexResp.Data.EdbInfoId refreshMap["EdbCode"] = indexCode refreshMap["StartDate"] = "1990-01-01" PostEdbLib(refreshMap, method) } else { fmt.Println("data is empty") fmt.Println(classifyFirst, classifySecond, classifyThree, indexCode, indexName, frequency, unit, source) } } } } // 初始化基础指标数据-有色 func InitBaseIndexDataFromDataSourceSmm(filePath string) { var err error defer func() { if err != nil { fmt.Println("InitBaseIndexDataFromDataSourceSmm Err:" + err.Error()) utils.FileLog.Info("InitBaseIndexDataFromDataSourceSmm Err:" + err.Error()) } }() //读取excel path, err := filepath.Abs(os.Args[0]) if err != nil { fmt.Println(err) } dir := filepath.Dir(path) fmt.Println("dir:" + dir) dataPath := dir + filePath fmt.Println("dataPath:" + dataPath) f, err := excelize.OpenFile(dataPath) if err != nil { fmt.Println(err) return } defer func() { // Close the spreadsheet. if err := f.Close(); err != nil { fmt.Println(err) } }() rows, err := f.GetRows("Sheet1") if err != nil { fmt.Println(err) return } fmt.Println("rows len:", len(rows)) // 获取创建人信息 mobileMap := make(map[string]*models.Admin) if utils.MYSQL_URL_ETA != "" { admins, e := models.GetSysAdminList(``, make([]interface{}, 0)) if e != nil { err = fmt.Errorf("GetSysAdminList err: %s", e.Error()) return } for _, v := range admins { if v.Mobile == "" { continue } mobileMap[v.Mobile] = v } } for rk, row := range rows { if rk > 0 { var classifyFirst, classifySecond, classifyThree, classifyFourth, classifyFifth, classifySixth, indexCode, indexName, frequency, unit, source, mobile string for ck, colCell := range row { colCell = strings.TrimSpace(colCell) switch ck { case 0: classifyFirst = colCell case 1: classifySecond = colCell case 2: classifyThree = colCell case 3: classifyFourth = colCell case 4: classifyFifth = colCell case 5: classifySixth = colCell case 6: indexCode = colCell case 7: indexName = colCell case 8: frequency = colCell case 9: unit = colCell case 10: source = colCell case 11: mobile = colCell } } if classifyFirst != "" && indexCode != "" && indexName != "" && unit != "" && frequency != "" && source != "" { //判断指标是否存在 method := "smm/index_detail/from_data_source" indexSearchMap := make(map[string]interface{}) indexSearchMap["IndexCode"] = indexCode indexResult, e := PostEdbLib(indexSearchMap, method) if e != nil { err = fmt.Errorf("判断指标是否存在失败, Err: %s", e.Error()) return } smmIndexResp := new(models.BaseFromSmmIndexResp) e = json.Unmarshal(indexResult, &smmIndexResp) if e != nil { err = fmt.Errorf("判断指标是否存在失败, Err: %s", e.Error()) return } if smmIndexResp.Ret != 200 { fmt.Println("判断指标是否存在失败,Err:" + smmIndexResp.ErrMsg) //utils.FileLog.Info("判断指标是否存在失败:" + err.Error()) //return continue } if smmIndexResp.Data.BaseFromSmmIndexId <= 0 { fmt.Println("指标:" + indexCode + ";不存在") continue } var firstId, secondId, thirdId, fourthId, fifthId, lastId int method = "classify/get_or_add" classifyFirstMap := make(map[string]interface{}) classifyFirstMap["ClassifyName"] = classifyFirst classifyFirstMap["ParentId"] = 0 classifyFirstMap["Level"] = 0 classifyFirstMap["ClassifyType"] = 0 result, e := PostEdbLib(classifyFirstMap, method) if e != nil { err = fmt.Errorf("ClassifyFirst PostEdbLib err: %s", e.Error()) return } resp := new(models.ClassifyResp) if e = json.Unmarshal(result, &resp); e != nil { err = fmt.Errorf("ClassifyFirst json unmarshal err: %s", e.Error()) return } if resp.Ret != 200 { err = fmt.Errorf("ClassifyFirst resp msg: %s; errMsg: %s", resp.Msg, resp.ErrMsg) return } firstId = resp.Data.ClassifyId lastId = firstId // 二级分类 if classifySecond != "" { classifySecondMap := make(map[string]interface{}) classifySecondMap["ClassifyName"] = classifySecond classifySecondMap["ParentId"] = firstId classifySecondMap["Level"] = 1 classifySecondMap["ClassifyType"] = 0 res2, e := PostEdbLib(classifySecondMap, method) if e != nil { err = fmt.Errorf("ClassifySecond PostEdbLib err: %s", e.Error()) return } resp2 := new(models.ClassifyResp) if e = json.Unmarshal(res2, &resp2); e != nil { err = fmt.Errorf("ClassifySecond json unmarshal err: %s", e.Error()) return } if resp2.Ret != 200 { err = fmt.Errorf("ClassifySecond resp msg: %s; errMsg: %s", resp2.Msg, resp2.ErrMsg) return } secondId = resp2.Data.ClassifyId lastId = secondId } // 三级分类 if classifyThree != "" { classifyThreeMap := make(map[string]interface{}) classifyThreeMap["ClassifyName"] = classifyThree classifyThreeMap["ParentId"] = secondId classifyThreeMap["Level"] = 2 classifyThreeMap["ClassifyType"] = 0 res3, e := PostEdbLib(classifyThreeMap, method) if e != nil { err = fmt.Errorf("ClassifyThird PostEdbLib err: %s", e.Error()) return } resp3 := new(models.ClassifyResp) if e = json.Unmarshal(res3, &resp3); e != nil { err = fmt.Errorf("ClassifyThird json unmarshal err: %s", e.Error()) return } if resp3.Ret != 200 { err = fmt.Errorf("ClassifyThird resp msg: %s; errMsg: %s", resp3.Msg, resp3.ErrMsg) return } thirdId = resp3.Data.ClassifyId lastId = thirdId } // 四级分类 if classifyFourth != "" { classifyFourthMap := make(map[string]interface{}) classifyFourthMap["ClassifyName"] = classifyFourth classifyFourthMap["ParentId"] = thirdId classifyFourthMap["Level"] = 3 classifyFourthMap["ClassifyType"] = 0 res4, e := PostEdbLib(classifyFourthMap, method) if e != nil { err = fmt.Errorf("ClassifyFourth PostEdbLib err: %s", e.Error()) return } resp4 := new(models.ClassifyResp) if e = json.Unmarshal(res4, &resp4); e != nil { err = fmt.Errorf("ClassifyFourth json unmarshal err: %s", e.Error()) return } if resp4.Ret != 200 { err = fmt.Errorf("ClassifyFourth resp msg: %s; errMsg: %s", resp4.Msg, resp4.ErrMsg) return } fourthId = resp4.Data.ClassifyId lastId = fourthId } // 五级分类 if classifyFifth != "" { classifyFifthMap := make(map[string]interface{}) classifyFifthMap["ClassifyName"] = classifyFifth classifyFifthMap["ParentId"] = fourthId classifyFifthMap["Level"] = 4 classifyFifthMap["ClassifyType"] = 0 res5, e := PostEdbLib(classifyFifthMap, method) if e != nil { err = fmt.Errorf("ClassifyFifth PostEdbLib err: %s", e.Error()) return } resp5 := new(models.ClassifyResp) if e = json.Unmarshal(res5, &resp5); e != nil { err = fmt.Errorf("ClassifyFifth json unmarshal err: %s", e.Error()) return } if resp5.Ret != 200 { err = fmt.Errorf("ClassifyFifth resp msg: %s; errMsg: %s", resp5.Msg, resp5.ErrMsg) return } fifthId = resp5.Data.ClassifyId lastId = fifthId } // 六级分类 if classifySixth != "" { classifySixthMap := make(map[string]interface{}) classifySixthMap["ClassifyName"] = classifySixth classifySixthMap["ParentId"] = fifthId classifySixthMap["Level"] = 5 classifySixthMap["ClassifyType"] = 0 res6, e := PostEdbLib(classifySixthMap, method) if e != nil { err = fmt.Errorf("ClassifySixth PostEdbLib err: %s", e.Error()) return } resp6 := new(models.ClassifyResp) if e = json.Unmarshal(res6, &resp6); e != nil { err = fmt.Errorf("ClassifySixth json unmarshal err: %s", e.Error()) return } if resp6.Ret != 200 { err = fmt.Errorf("ClassifySixth resp msg: %s; errMsg: %s", resp6.Msg, resp6.ErrMsg) return } lastId = resp6.Data.ClassifyId } method = "edb_info/add" indexMap := make(map[string]interface{}) indexMap["Source"] = IndexSourceMap[source] indexMap["EdbCode"] = indexCode indexMap["EdbName"] = indexName indexMap["Frequency"] = frequency indexMap["Unit"] = unit indexMap["ClassifyId"] = lastId admin := mobileMap[mobile] if admin != nil { indexMap["AdminId"] = admin.AdminId indexMap["AdminName"] = admin.RealName } result, err = PostEdbLib(indexMap, method) if err != nil { utils.FileLog.Info("初始化指标失败:" + err.Error() + " result:" + string(result)) return } indexResp := new(models.EdbInfoResp) err = json.Unmarshal(result, &indexResp) if err != nil { utils.FileLog.Info("初始化分类2失败:" + err.Error()) return } if indexResp.Ret != 200 { if strings.Contains(indexResp.Msg, "新增指标失败") { continue } else { fmt.Println("初始化指标失败:" + indexResp.Msg + ";" + indexResp.ErrMsg) utils.FileLog.Info("初始化指标失败:" + indexResp.Msg + ";" + indexResp.ErrMsg) return } } fmt.Println("add index success:" + indexCode) //刷新指标 { refreshMethod := "smm/refresh" refreshMap := make(map[string]interface{}) refreshMap["EdbInfoId"] = indexResp.Data.EdbInfoId refreshMap["EdbCode"] = indexCode refreshMap["StartDate"] = "1990-01-01" PostEdbLib(refreshMap, refreshMethod) } } else { fmt.Println("data is empty") fmt.Println(classifyFirst, classifySecond, classifyThree, indexCode, indexName, frequency, unit, source) } } } } // InitDataToEdbInfo // @Description: 添加指标到指标库 // @author: Roc // @datetime 2024-01-15 14:12:12 // @param filePath string func InitDataToEdbInfo(filePath string) { var err error defer func() { if err != nil { fmt.Println("InitDataToEdbInfo Err:" + err.Error()) utils.FileLog.Info("InitDataToEdbInfo Err:" + err.Error()) } }() //读取excel path, err := filepath.Abs(os.Args[0]) if err != nil { fmt.Println(err) } dir := filepath.Dir(path) fmt.Println("dir:" + dir) dataPath := dir + filePath fmt.Println("dataPath:" + dataPath) f, err := excelize.OpenFile(dataPath) if err != nil { fmt.Println(err) return } defer func() { // Close the spreadsheet. if err := f.Close(); err != nil { fmt.Println(err) } }() rows, err := f.GetRows("Sheet1") if err != nil { fmt.Println(err) return } fmt.Println("rows len:", len(rows)) // 获取创建人信息 mobileMap := make(map[string]*models.Admin) if utils.MYSQL_URL_ETA != "" { admins, e := models.GetSysAdminList(``, make([]interface{}, 0)) if e != nil { err = fmt.Errorf("GetSysAdminList err: %s", e.Error()) return } for _, v := range admins { if v.Mobile == "" { continue } mobileMap[v.Mobile] = v } } for rk, row := range rows { if rk > 0 { var classifyFirst, classifySecond, classifyThree, classifyFourth, classifyFifth, classifySixth, indexCode, indexName, frequency, unit, source, mobile, terminalCode string for ck, colCell := range row { colCell = strings.TrimSpace(colCell) switch ck { case 0: classifyFirst = colCell case 1: classifySecond = colCell case 2: classifyThree = colCell case 3: classifyFourth = colCell case 4: classifyFifth = colCell case 5: classifySixth = colCell case 6: indexCode = colCell case 7: indexName = colCell case 8: frequency = colCell case 9: unit = colCell case 10: source = colCell case 11: mobile = colCell case 12: terminalCode = colCell } } // 校验excel文件内容 { errMsgList := make([]string, 0) if classifyFirst == "" { errMsgList = append(errMsgList, `一级目录不允许为空`) } if indexCode == "" { errMsgList = append(errMsgList, `指标编码不允许为空`) } if indexName == "" { errMsgList = append(errMsgList, `指标名称不允许为空`) } if frequency == "" { errMsgList = append(errMsgList, `频度不允许为空`) } if unit == "" { errMsgList = append(errMsgList, `单位不允许为空`) } if source == "" { errMsgList = append(errMsgList, `指标来源不允许为空`) } if terminalCode == "" { errMsgList = append(errMsgList, `终端号不允许为空`) } // 如果有错误信息,那么就不继续执行 if len(errMsgList) > 0 { fmt.Println(strings.Join(errMsgList, ";")) fmt.Println(classifyFirst, classifySecond, classifyThree, indexCode, indexName, frequency, unit, source, terminalCode) continue } } // 开始入库 { //判断指标是否存在 switch source { case "钢联": ok, e := VerifyMysteelIndex(indexCode) if e != nil { fmt.Println(indexCode, ";判断指标是否存在失败,Err:"+e.Error()) continue } if !ok { fmt.Println("指标:" + indexCode + ";不存在") continue } case "SMM": ok, e := VerifySmmIndex(indexCode) if e != nil { fmt.Println(indexCode, ";判断指标是否存在失败,Err:"+e.Error()) continue } if !ok { fmt.Println("指标:" + indexCode + ";不存在") continue } } var firstId, secondId, thirdId, fourthId, fifthId, lastId int method := "classify/get_or_add" classifyFirstMap := make(map[string]interface{}) classifyFirstMap["ClassifyName"] = classifyFirst classifyFirstMap["ParentId"] = 0 classifyFirstMap["Level"] = 0 classifyFirstMap["ClassifyType"] = 0 result, e := PostEdbLib(classifyFirstMap, method) if e != nil { err = fmt.Errorf("ClassifyFirst PostEdbLib err: %s", e.Error()) return } resp := new(models.ClassifyResp) if e = json.Unmarshal(result, &resp); e != nil { err = fmt.Errorf("ClassifyFirst json unmarshal err: %s", e.Error()) return } if resp.Ret != 200 { err = fmt.Errorf("ClassifyFirst resp msg: %s; errMsg: %s", resp.Msg, resp.ErrMsg) return } firstId = resp.Data.ClassifyId lastId = firstId // 二级分类 if classifySecond != "" { classifySecondMap := make(map[string]interface{}) classifySecondMap["ClassifyName"] = classifySecond classifySecondMap["ParentId"] = firstId classifySecondMap["Level"] = 1 classifySecondMap["ClassifyType"] = 0 res2, e := PostEdbLib(classifySecondMap, method) if e != nil { err = fmt.Errorf("ClassifySecond PostEdbLib err: %s", e.Error()) return } resp2 := new(models.ClassifyResp) if e = json.Unmarshal(res2, &resp2); e != nil { err = fmt.Errorf("ClassifySecond json unmarshal err: %s", e.Error()) return } if resp2.Ret != 200 { err = fmt.Errorf("ClassifySecond resp msg: %s; errMsg: %s", resp2.Msg, resp2.ErrMsg) return } secondId = resp2.Data.ClassifyId lastId = secondId } // 三级分类 if classifyThree != "" { classifyThreeMap := make(map[string]interface{}) classifyThreeMap["ClassifyName"] = classifyThree classifyThreeMap["ParentId"] = secondId classifyThreeMap["Level"] = 2 classifyThreeMap["ClassifyType"] = 0 res3, e := PostEdbLib(classifyThreeMap, method) if e != nil { err = fmt.Errorf("ClassifyThird PostEdbLib err: %s", e.Error()) return } resp3 := new(models.ClassifyResp) if e = json.Unmarshal(res3, &resp3); e != nil { err = fmt.Errorf("ClassifyThird json unmarshal err: %s", e.Error()) return } if resp3.Ret != 200 { err = fmt.Errorf("ClassifyThird resp msg: %s; errMsg: %s", resp3.Msg, resp3.ErrMsg) return } thirdId = resp3.Data.ClassifyId lastId = thirdId } // 四级分类 if classifyFourth != "" { classifyFourthMap := make(map[string]interface{}) classifyFourthMap["ClassifyName"] = classifyFourth classifyFourthMap["ParentId"] = thirdId classifyFourthMap["Level"] = 3 classifyFourthMap["ClassifyType"] = 0 res4, e := PostEdbLib(classifyFourthMap, method) if e != nil { err = fmt.Errorf("ClassifyFourth PostEdbLib err: %s", e.Error()) return } resp4 := new(models.ClassifyResp) if e = json.Unmarshal(res4, &resp4); e != nil { err = fmt.Errorf("ClassifyFourth json unmarshal err: %s", e.Error()) return } if resp4.Ret != 200 { err = fmt.Errorf("ClassifyFourth resp msg: %s; errMsg: %s", resp4.Msg, resp4.ErrMsg) return } fourthId = resp4.Data.ClassifyId lastId = fourthId } // 五级分类 if classifyFifth != "" { classifyFifthMap := make(map[string]interface{}) classifyFifthMap["ClassifyName"] = classifyFifth classifyFifthMap["ParentId"] = fourthId classifyFifthMap["Level"] = 4 classifyFifthMap["ClassifyType"] = 0 res5, e := PostEdbLib(classifyFifthMap, method) if e != nil { err = fmt.Errorf("ClassifyFifth PostEdbLib err: %s", e.Error()) return } resp5 := new(models.ClassifyResp) if e = json.Unmarshal(res5, &resp5); e != nil { err = fmt.Errorf("ClassifyFifth json unmarshal err: %s", e.Error()) return } if resp5.Ret != 200 { err = fmt.Errorf("ClassifyFifth resp msg: %s; errMsg: %s", resp5.Msg, resp5.ErrMsg) return } fifthId = resp5.Data.ClassifyId lastId = fifthId } // 六级分类 if classifySixth != "" { classifySixthMap := make(map[string]interface{}) classifySixthMap["ClassifyName"] = classifySixth classifySixthMap["ParentId"] = fifthId classifySixthMap["Level"] = 5 classifySixthMap["ClassifyType"] = 0 res6, e := PostEdbLib(classifySixthMap, method) if e != nil { err = fmt.Errorf("ClassifySixth PostEdbLib err: %s", e.Error()) return } resp6 := new(models.ClassifyResp) if e = json.Unmarshal(res6, &resp6); e != nil { err = fmt.Errorf("ClassifySixth json unmarshal err: %s", e.Error()) return } if resp6.Ret != 200 { err = fmt.Errorf("ClassifySixth resp msg: %s; errMsg: %s", resp6.Msg, resp6.ErrMsg) return } lastId = resp6.Data.ClassifyId } // 添加指标 method = "edb_info/add" sourceId, ok := IndexSourceMap[source] if !ok { fmt.Println("source is not defined") fmt.Println(classifyFirst, classifySecond, classifyThree, indexCode, indexName, frequency, unit, source) continue } indexMap := make(map[string]interface{}) indexMap["Source"] = sourceId indexMap["EdbCode"] = indexCode indexMap["EdbName"] = indexName indexMap["Frequency"] = frequency indexMap["Unit"] = unit indexMap["ClassifyId"] = lastId indexMap["TerminalCode"] = terminalCode admin := mobileMap[mobile] if admin != nil { indexMap["AdminId"] = admin.AdminId indexMap["AdminName"] = admin.RealName } result, err = PostEdbLib(indexMap, method) if err != nil { utils.FileLog.Info("初始化指标失败:" + err.Error() + " result:" + string(result)) return } indexResp := new(models.EdbInfoResp) err = json.Unmarshal(result, &indexResp) if err != nil { utils.FileLog.Info("初始化分类2失败:" + err.Error()) return } if indexResp.Ret != 200 { if strings.Contains(indexResp.Msg, "新增指标失败") { continue } else { fmt.Println("初始化指标失败:" + indexResp.Msg + ";" + indexResp.ErrMsg) utils.FileLog.Info("初始化指标失败:" + indexResp.Msg + ";" + indexResp.ErrMsg) return } } fmt.Println("add index success:" + indexCode) //刷新指标 method, ok = IndexSourceRefreshMap[sourceId] if !ok { fmt.Println("source refresh path is not defined") fmt.Println(classifyFirst, classifySecond, classifyThree, indexCode, indexName, frequency, unit, source) continue } refreshMap := make(map[string]interface{}) refreshMap["EdbInfoId"] = indexResp.Data.EdbInfoId refreshMap["EdbCode"] = indexCode refreshMap["StartDate"] = "1990-01-01" PostEdbLib(refreshMap, method) } } } } // VerifyMysteelIndex // @Description: 判断钢联指标编码是否已经入库 // @author: Roc // @datetime 2024-01-15 13:54:48 // @param indexCode string // @return ok bool // @return err error func VerifyMysteelIndex(indexCode string) (ok bool, err error) { //判断指标是否存在 method := "mysteel_chemical/index_detail" indexSearchMap := make(map[string]interface{}) indexSearchMap["IndexCode"] = indexCode indexResult, e := PostEdbLib(indexSearchMap, method) if e != nil { err = fmt.Errorf("判断指标是否存在失败, Err: %s", e.Error()) return } mysteelIndexResp := new(models.MysteelIndexResp) e = json.Unmarshal(indexResult, &mysteelIndexResp) if e != nil { err = fmt.Errorf("判断指标是否存在失败, Err: %s", e.Error()) return } if mysteelIndexResp.Ret != 200 { err = errors.New("判断指标是否存在失败,Err:" + mysteelIndexResp.ErrMsg) return } if mysteelIndexResp.Data.BaseFromMysteelChemicalIndexId <= 0 { fmt.Println("指标:" + indexCode + ";不存在") return } ok = true return } // VerifySmmIndex // @Description: 判断有色指标编码是否已经入库 // @author: Roc // @datetime 2024-01-15 13:54:48 // @param indexCode string // @return ok bool // @return err error func VerifySmmIndex(indexCode string) (ok bool, err error) { //判断指标是否存在 method := "smm/index_detail/from_data_source" indexSearchMap := make(map[string]interface{}) indexSearchMap["IndexCode"] = indexCode indexResult, e := PostEdbLib(indexSearchMap, method) if e != nil { err = fmt.Errorf("判断指标是否存在失败, Err: %s", e.Error()) return } smmIndexResp := new(models.BaseFromSmmIndexResp) e = json.Unmarshal(indexResult, &smmIndexResp) if e != nil { err = fmt.Errorf("判断指标是否存在失败, Err: %s", e.Error()) return } if smmIndexResp.Ret != 200 { err = errors.New("判断指标是否存在失败,Err:" + smmIndexResp.ErrMsg) return } if smmIndexResp.Data.BaseFromSmmIndexId <= 0 { //fmt.Println("指标:" + indexCode + ";不存在") return } ok = true return }