package models import ( "fmt" "github.com/beego/beego/v2/client/orm" "hongze/hongze_edb_lib/utils" "strconv" "strings" "time" ) type BaseFromTradeEicIndex struct { BaseFromEicIndexId int `orm:"column(base_from_eic_index_id);pk"` Country string Type string EicCode string ShortName string Name string Status string GasDayStartedOn string GasInStorage string GasInStorageCode string Full string FullCode string Trend string TrendCode string Injection string InjectionCode string Withdrawal string WithdrawalCode string WorkingGasVolume string WorkingGasVolumeCode string InjectionCapacity string InjectionCapacityCode string WithdrawalCapacity string WithdrawalCapacityCode string Info string CreateTime time.Time ModifyTime time.Time } type BaseFromTradeEicIndexV2 struct { BaseFromEicIndexId int `orm:"column(base_from_eic_index_id);pk"` Type string EicCode string Name string Status string GasDayStart string GasInStorage string GasInStorageCode string Consumption string ConsumptionCode string ConsumptionFull string ConsumptionFullCode string Full string FullCode string Trend string TrendCode string Injection string InjectionCode string Withdrawal string WithdrawalCode string WorkingGasVolume string WorkingGasVolumeCode string InjectionCapacity string InjectionCapacityCode string WithdrawalCapacity string WithdrawalCapacityCode string Info string Parent string CreateTime time.Time ModifyTime time.Time } func GetBaseFromEicDataAllByIndexCode(indexCode, suffix string) (list []*BaseFromTradeEicIndexV2, err error) { o := orm.NewOrm() var name string if suffix == "" { name = "eic_code" } else if suffix == "GS" { name = "gas_in_storage_code" } else if suffix == "C" { name = "consumption_code" } else if suffix == "CF" { name = "consumption_full_code" } else if suffix == "F" { name = "full_code" } else if suffix == "T" { name = "trend_code" } else if suffix == "In" { name = "injection_code" } else if suffix == "Out" { name = "withdrawal_code" } else if suffix == "WGV" { name = "working_gas_volume_code" } else if suffix == "IC" { name = "injection_capacity_code" } else if suffix == "WC" { name = "withdrawal_capacity_code" } sql := `SELECT * FROM base_from_trade_eic_index_v2 WHERE %s=? ` sql = fmt.Sprintf(sql, name) _, err = o.Raw(sql, indexCode).QueryRows(&list) return } func GetGieDataByTradeCode(condition string, pars []interface{}) (item []*BaseFromTradeEicIndex, err error) { sql := ` SELECT * FROM base_from_trade_eic_index WHERE 1=1 ` o := orm.NewOrm() if condition != "" { sql += condition } sql += ` ORDER BY gas_day_started_on DESC ` fmt.Println(sql, pars) _, err = o.Raw(sql, pars).QueryRows(&item) return } func GetGieDataByTradeCodeV2(condition string, pars []interface{}) (item []*BaseFromTradeEicIndexV2, err error) { sql := ` SELECT * FROM base_from_trade_eic_index_v2 WHERE 1=1 ` o := orm.NewOrm() if condition != "" { sql += condition } sql += ` ORDER BY gas_day_start DESC ` fmt.Println(sql, pars) _, err = o.Raw(sql, pars).QueryRows(&item) return } //新增欧洲天然气指标数据 func AddEdbDataFromGie(edbCode string) (err error) { var suffix string l := len(edbCode) if strings.Contains(edbCode[l-2:], "GS") { suffix = "GS" }else if strings.Contains(edbCode[l-2:], "CF") { suffix = "CF" } else if strings.Contains(edbCode[l-1:], "T") { suffix = "T" } else if strings.Contains(edbCode[l-2:], "In") { suffix = "In" } else if strings.Contains(edbCode[l-3:], "Out") { suffix = "Out" } else if strings.Contains(edbCode[l-3:], "WGV") { suffix = "WGV" } else if strings.Contains(edbCode[l-2:], "IC") { suffix = "IC" } else if strings.Contains(edbCode[l-2:], "WC") { suffix = "WC" } else if strings.Contains(edbCode[l-1:], "F") { suffix = "F" } else if strings.Contains(edbCode[l-1:], "C") { suffix = "C" } else { suffix = "" } o := orm.NewOrm() eicBaseDataAll, err := GetBaseFromEicDataAllByIndexCode(edbCode, suffix) if err != nil && err.Error() != utils.ErrNoRow() { fmt.Println("GetBaseFromEicDataAllByIndexCode err:", err) return } var isAdd bool addSql := ` INSERT INTO edb_data_gie(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values ` existMap := make(map[string]string) for _, sv := range eicBaseDataAll { eDate := sv.GasDayStart dataTime, err := time.Parse(utils.FormatDate, eDate) if err != nil { fmt.Println("time.Parse Err:" + eDate) return err } timestamp := dataTime.UnixNano() / 1e6 timeStr := fmt.Sprintf("%d", timestamp) //var name string if _, ok := existMap[eDate]; !ok { if suffix == "GS" { //name = "gas_in_storage" addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.GasInStorage) existMap[eDate] = sv.GasInStorage } else if suffix == "C" { //name = "consumption" addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.Full) existMap[eDate] = sv.Consumption } else if suffix == "CF" { //name = "consumption_full" addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.Full) existMap[eDate] = sv.ConsumptionFull } else if suffix == "F" { //name = "full" addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.Full) existMap[eDate] = sv.Full } else if suffix == "T" { //name = "trend" addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.Trend) existMap[eDate] = sv.Trend } else if suffix == "In" { //name = "injection" addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.Injection) existMap[eDate] = sv.Injection } else if suffix == "Out" { //name = "withdrawal" addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.Withdrawal) existMap[eDate] = sv.Withdrawal } else if suffix == "WGV" { //name = "working_gas_volume" addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.WorkingGasVolume) existMap[eDate] = sv.WorkingGasVolume } else if suffix == "IC" { //name = "injection_capacity" addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.InjectionCapacity) existMap[eDate] = sv.InjectionCapacity } else if suffix == "WC" { //name = "withdrawal_capacity" addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.WithdrawalCapacity) existMap[eDate] = sv.WithdrawalCapacity } isAdd = true } } if isAdd { addSql = strings.TrimRight(addSql, ",") utils.FileLog.Info("addSql:" + addSql) _, err = o.Raw(addSql).Exec() if err != nil { fmt.Println("addSql err:", err) return err } } return } //刷新欧洲天然气指标数据 func RefreshEdbDataFromGie(edbInfoId int, edbCode, startDate string) (err error) { source := utils.DATA_SOURCE_GIE o := orm.NewOrm() if err != nil { return } var suffix string l := len(edbCode) if strings.Contains(edbCode[l-2:], "GS") { suffix = "GS" }else if strings.Contains(edbCode[l-2:], "CF") { suffix = "CF" } else if strings.Contains(edbCode[l-1:], "T") { suffix = "T" } else if strings.Contains(edbCode[l-2:], "In") { suffix = "In" } else if strings.Contains(edbCode[l-3:], "Out") { suffix = "Out" } else if strings.Contains(edbCode[l-3:], "WGV") { suffix = "WGV" } else if strings.Contains(edbCode[l-2:], "IC") { suffix = "IC" } else if strings.Contains(edbCode[l-2:], "WC") { suffix = "WC" } else if strings.Contains(edbCode[l-1:], "F") { suffix = "F" } else if strings.Contains(edbCode[l-1:], "C") { suffix = "C" } else { suffix = "" } edbInfoIdStr := strconv.Itoa(edbInfoId) //计算数据 var condition string var pars []interface{} if edbCode != "" { condition += " AND eic_code=? " pars = append(pars, edbCode[:l-len(suffix)]) } if startDate != "" { condition += " AND gas_day_start>=? " pars = append(pars, startDate) } eicDataList, err := GetGieDataByTradeCodeV2(condition, pars) fmt.Println("all eicDataList", len(eicDataList)) //获取指标所有数据 var existCondition string var existPars []interface{} existCondition += " AND edb_info_id=? " existPars = append(existPars, edbInfoId) if startDate != "" { existCondition += " AND data_time>=? " existPars = append(existPars, startDate) } existList, err := GetEdbDataByCondition(source, existCondition, existPars) if err != nil { return err } existMap := make(map[string]*EdbInfoSearchData) for _, v := range existList { existMap[v.DataTime] = v } addSql := ` INSERT INTO edb_data_gie(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values ` var isAdd bool dataMap := make(map[string]interface{}) for _, v := range eicDataList { var value string if suffix == "GS" { value = v.GasInStorage } else if suffix == "C" { value = v.Consumption } else if suffix == "CF" { value = v.ConsumptionFull } else if suffix == "F" { value = v.Full } else if suffix == "T" { value = v.Trend } else if suffix == "In" { value = v.Injection } else if suffix == "Out" { value = v.Withdrawal } else if suffix == "WGV" { value = v.WorkingGasVolume } else if suffix == "IC" { value = v.InjectionCapacity } else if suffix == "WC" { value = v.WithdrawalCapacity } item := v itemValue := value if findItem, ok := existMap[v.GasDayStart]; !ok { eDate := item.GasDayStart sValue := itemValue if sValue != "" { dataTime, err := time.Parse(utils.FormatDate, eDate) if err != nil { return err } timestamp := dataTime.UnixNano() / 1e6 timeStr := fmt.Sprintf("%d", timestamp) saveValue := sValue if _, ok := dataMap[eDate]; !ok { addSql += GetAddSql(edbInfoIdStr, edbCode, eDate, timeStr, saveValue) isAdd = true } } } else { if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != itemValue { err = ModifyEdbDataById(source, findItem.EdbDataId, itemValue) if err != nil { return err } } } dataMap[v.GasDayStart] = v.GasDayStart } if isAdd { addSql = strings.TrimRight(addSql, ",") _, err = o.Raw(addSql).Exec() if err != nil { return err } } return }