|
@@ -155,97 +155,151 @@ func MoveDataDaysToNewDataList(dataList []*data_manage.EdbDataList, moveDay int)
|
|
|
}
|
|
|
|
|
|
// GetChartEdbInfoFormat 相关性图表-获取指标信息
|
|
|
-func GetChartEdbInfoFormat(chartInfoId int, edbInfoMappingA, edbInfoMappingB *data_manage.ChartEdbInfoMapping) (edbList []*data_manage.ChartEdbInfoMapping, err error) {
|
|
|
+func GetChartEdbInfoFormat(chartInfoId int, edbInfoMapping *data_manage.ChartEdbInfoMapping) (edbList []*data_manage.ChartEdbInfoMapping, err error) {
|
|
|
edbList = make([]*data_manage.ChartEdbInfoMapping, 0)
|
|
|
- if edbInfoMappingA == nil || edbInfoMappingB == nil {
|
|
|
+ if edbInfoMapping == nil {
|
|
|
err = fmt.Errorf("指标信息有误")
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- edbInfoMappingA.FrequencyEn = data.GetFrequencyEn(edbInfoMappingA.Frequency)
|
|
|
- if edbInfoMappingA.Unit == `无` {
|
|
|
- edbInfoMappingA.Unit = ``
|
|
|
- }
|
|
|
- if edbInfoMappingB.Unit == `无` {
|
|
|
- edbInfoMappingB.Unit = ``
|
|
|
+ edbInfoMapping.FrequencyEn = data.GetFrequencyEn(edbInfoMapping.Frequency)
|
|
|
+ if edbInfoMapping.Unit == `无` {
|
|
|
+ edbInfoMapping.Unit = ``
|
|
|
}
|
|
|
if chartInfoId <= 0 {
|
|
|
- edbInfoMappingA.IsAxis = 1
|
|
|
- edbInfoMappingA.LeadValue = 0
|
|
|
- edbInfoMappingA.LeadUnit = ""
|
|
|
- edbInfoMappingA.ChartEdbMappingId = 0
|
|
|
- edbInfoMappingA.ChartInfoId = 0
|
|
|
- edbInfoMappingA.IsOrder = false
|
|
|
- edbInfoMappingA.EdbInfoType = 1
|
|
|
- edbInfoMappingA.ChartStyle = ""
|
|
|
- edbInfoMappingA.ChartColor = ""
|
|
|
- edbInfoMappingA.ChartWidth = 0
|
|
|
-
|
|
|
- edbInfoMappingB.IsAxis = 1
|
|
|
- edbInfoMappingB.LeadValue = 0
|
|
|
- edbInfoMappingB.LeadUnit = ""
|
|
|
- edbInfoMappingB.ChartEdbMappingId = 0
|
|
|
- edbInfoMappingB.ChartInfoId = 0
|
|
|
- edbInfoMappingB.IsOrder = false
|
|
|
- edbInfoMappingB.EdbInfoType = 1
|
|
|
- edbInfoMappingB.ChartStyle = ""
|
|
|
- edbInfoMappingB.ChartColor = ""
|
|
|
- edbInfoMappingB.ChartWidth = 0
|
|
|
+ edbInfoMapping.IsAxis = 1
|
|
|
+ edbInfoMapping.LeadValue = 0
|
|
|
+ edbInfoMapping.LeadUnit = ""
|
|
|
+ edbInfoMapping.ChartEdbMappingId = 0
|
|
|
+ edbInfoMapping.ChartInfoId = 0
|
|
|
+ edbInfoMapping.IsOrder = false
|
|
|
+ edbInfoMapping.EdbInfoType = 1
|
|
|
+ edbInfoMapping.ChartStyle = ""
|
|
|
+ edbInfoMapping.ChartColor = ""
|
|
|
+ edbInfoMapping.ChartWidth = 0
|
|
|
+
|
|
|
} else {
|
|
|
- edbInfoMappingA.LeadUnitEn = data.GetLeadUnitEn(edbInfoMappingA.LeadUnit)
|
|
|
- edbInfoMappingB.LeadUnitEn = data.GetLeadUnitEn(edbInfoMappingB.LeadUnit)
|
|
|
+ edbInfoMapping.LeadUnitEn = data.GetLeadUnitEn(edbInfoMapping.LeadUnit)
|
|
|
}
|
|
|
- edbList = append(edbList, edbInfoMappingA, edbInfoMappingB)
|
|
|
+ edbList = append(edbList, edbInfoMapping)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// GetChartDataByEdbInfo 相关性图表-根据指标信息获取x轴和y轴
|
|
|
-func GetChartDataByEdbInfo(edbInfoMapping *data_manage.ChartEdbInfoMapping, req data_manage.ChartRangeAnalysisExtraConf) (xEdbIdValue []int, dataResp data_manage.ChartRangeAnalysisDataResp, err error) {
|
|
|
+func GetChartDataByEdbInfo(edbInfoMapping *data_manage.ChartEdbInfoMapping, req *data_manage.ChartRangeAnalysisExtraConf) (xEdbIdValue []int, dataResp data_manage.ChartRangeAnalysisDataResp, err error) {
|
|
|
// 指标的开始日期和结束日期
|
|
|
- startDateTime, _ := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
|
|
|
- startDate = startDateTime.AddDate(0, 0, 1).Format(utils.FormatDate)
|
|
|
-
|
|
|
- // 根据时间区间类型来获取数据的计算窗口,然后再拼接成整段数据
|
|
|
- // 智能划分得到一个开始日期,和结束日期
|
|
|
- // 手工划分得到多个开始日期和结束日期(已排序)
|
|
|
- // 跨年划分得到多个开始日期和结束日期
|
|
|
-
|
|
|
- //// 2023-03-02 时间序列始终以指标B为基准, 始终是A进行平移
|
|
|
- //baseEdbInfo := edbInfoMappingB
|
|
|
- //changeEdbInfo := edbInfoMappingA
|
|
|
- // 2023-03-17 时间序列始终以指标A为基准, 始终是B进行平移
|
|
|
- baseEdbInfo := edbInfoMapping
|
|
|
- changeEdbInfo := edbInfoMappingB
|
|
|
+ edbStartDateTime, _ := time.ParseInLocation(utils.FormatDate, edbInfoMapping.StartDate, time.Local)
|
|
|
+ edbStartDate := edbStartDateTime.AddDate(0, 0, 1).Format(utils.FormatDate)
|
|
|
+ edbEndDateTime, _ := time.ParseInLocation(utils.FormatDate, edbInfoMapping.EndDate, time.Local)
|
|
|
+ edbEndDate := edbEndDateTime.AddDate(0, 0, 1).Format(utils.FormatDate)
|
|
|
|
|
|
// 获取时间基准指标在时间区间内的值
|
|
|
- aDataList := make([]*data_manage.EdbDataList, 0)
|
|
|
- switch baseEdbInfo.EdbInfoCategoryType {
|
|
|
+ dataList := make([]*data_manage.EdbDataList, 0)
|
|
|
+ switch edbInfoMapping.EdbInfoCategoryType {
|
|
|
case 0:
|
|
|
- aDataList, err = data_manage.GetEdbDataList(baseEdbInfo.Source, baseEdbInfo.SubSource, baseEdbInfo.EdbInfoId, startDate, endDate)
|
|
|
+ dataList, err = data_manage.GetEdbDataList(edbInfoMapping.Source, edbInfoMapping.SubSource, edbInfoMapping.EdbInfoId, "", "")
|
|
|
case 1:
|
|
|
- _, aDataList, _, _, err, _ = data.GetPredictDataListByPredictEdbInfoId(baseEdbInfo.EdbInfoId, startDate, endDate, false)
|
|
|
+ _, dataList, _, _, err, _ = data.GetPredictDataListByPredictEdbInfoId(edbInfoMapping.EdbInfoId, "", "", false)
|
|
|
default:
|
|
|
err = errors.New("指标base类型异常")
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- // 获取变频指标所有日期的值, 插值法完善数据
|
|
|
- bDataList := make([]*data_manage.EdbDataList, 0)
|
|
|
- switch changeEdbInfo.EdbInfoCategoryType {
|
|
|
+ dateList := make([]data_manage.ChartRangeAnalysisDateDataItem, 0)
|
|
|
+ switch req.DateRangeType {
|
|
|
case 0:
|
|
|
- bDataList, err = data_manage.GetEdbDataList(changeEdbInfo.Source, changeEdbInfo.SubSource, changeEdbInfo.EdbInfoId, "", "")
|
|
|
+ // 智能划分得到一个开始日期,和结束日期
|
|
|
+ var startDateTime, endDateTime time.Time
|
|
|
+ if req.AutoDateConf.IsAutoStartDate == 0 { //固定设置
|
|
|
+ startDate := req.AutoDateConf.StartDate
|
|
|
+ if startDate == "" {
|
|
|
+ startDate = "2020-01-01"
|
|
|
+ }
|
|
|
+ startDateTime, _ = time.ParseInLocation(utils.FormatDate, startDate, time.Local)
|
|
|
+ endDateTime = edbEndDateTime
|
|
|
+ } else {
|
|
|
+ startConf := req.AutoDateConf.StartDateConf
|
|
|
+ endConf := req.AutoDateConf.EndDateConf
|
|
|
+ startDate := ""
|
|
|
+ endDate := ""
|
|
|
+ if startConf.BaseDateType == 0 { //
|
|
|
+ startDate = edbStartDate
|
|
|
+ } else if startConf.BaseDateType == 1 {
|
|
|
+ startDate = time.Now().Format(utils.FormatDate)
|
|
|
+ }
|
|
|
+ if startConf.MoveForward > 0 {
|
|
|
+ startDate = GetEdbDateByMoveForward(startConf.MoveForward, dataList)
|
|
|
+ }
|
|
|
+ if len(startConf.DateChange) > 0 {
|
|
|
+ startDate, err = HandleEdbDateChange(startDate, startConf.DateChange)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("智能划分开始日期处理失败:%s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if endConf.BaseDateType == 0 { //
|
|
|
+ endDate = edbEndDate
|
|
|
+ } else if endConf.BaseDateType == 2 {
|
|
|
+ endDate = "2020-01-01"
|
|
|
+ }
|
|
|
+ if endConf.MoveForward > 0 {
|
|
|
+ endDate = GetEdbDateByMoveForward(endConf.MoveForward, dataList)
|
|
|
+ }
|
|
|
+ if len(endConf.DateChange) > 0 {
|
|
|
+ endDate, err = HandleEdbDateChange(endDate, endConf.DateChange)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("智能划分结束日期处理失败:%s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ startDateTime, _ = time.ParseInLocation(utils.FormatDate, startDate, time.Local)
|
|
|
+ endDateTime, _ = time.ParseInLocation(utils.FormatDate, endDate, time.Local)
|
|
|
+ }
|
|
|
+ dateList = append(dateList, data_manage.ChartRangeAnalysisDateDataItem{
|
|
|
+ StartDate: startDateTime,
|
|
|
+ EndDate: endDateTime})
|
|
|
case 1:
|
|
|
- _, bDataList, _, _, err, _ = data.GetPredictDataListByPredictEdbInfoId(changeEdbInfo.EdbInfoId, "", "", false)
|
|
|
- default:
|
|
|
- err = errors.New("指标change类型异常")
|
|
|
- return
|
|
|
+ // 手工划分得到多个开始日期和结束日期(已排序)
|
|
|
+ for _, v := range req.ManualDateConf {
|
|
|
+ startDateT, _ := time.ParseInLocation(utils.FormatDate, v.StartDate, time.Local)
|
|
|
+ endDateT, _ := time.ParseInLocation(utils.FormatDate, v.EndDate, time.Local)
|
|
|
+ tmp :=
|
|
|
+ data_manage.ChartRangeAnalysisDateDataItem{
|
|
|
+ StartDate: startDateT,
|
|
|
+ EndDate: endDateT,
|
|
|
+ }
|
|
|
+ dateList = append(dateList, tmp)
|
|
|
+ }
|
|
|
+ case 2:
|
|
|
+ startYear := edbStartDateTime.Year()
|
|
|
+ endYear := edbEndDateTime.Year()
|
|
|
+ startDay := req.YearDateConf.StartDay
|
|
|
+ endDay := req.YearDateConf.EndDay
|
|
|
+ for year := startYear; year <= endYear; year++ {
|
|
|
+ startDate := fmt.Sprintf("%d-%s", year, startDay)
|
|
|
+ endDate := fmt.Sprintf("%d-%s", year+1, endDay)
|
|
|
+ startDateTime, _ := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
|
|
|
+ endDateTime, _ := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
|
|
|
+ if startDateTime.Before(edbStartDateTime) {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ if endDateTime.After(edbEndDateTime) {
|
|
|
+ endDateTime = edbEndDateTime
|
|
|
+ }
|
|
|
+ tmp := data_manage.ChartRangeAnalysisDateDataItem{
|
|
|
+ StartDate: startDateTime,
|
|
|
+ EndDate: endDateTime,
|
|
|
+ }
|
|
|
+ dateList = append(dateList, tmp)
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
- //changeDataMap := make(map[string]float64)
|
|
|
- //newChangeDataList, e := HandleDataByLinearRegression(bDataList, changeDataMap)
|
|
|
- //if e != nil {
|
|
|
- // err = fmt.Errorf("获取变频指标插值法Map失败, Err: %s", e.Error())
|
|
|
- // return
|
|
|
- //}
|
|
|
+ // 根据时间区间类型来获取数据的计算窗口,然后再拼接成整段数据
|
|
|
+
|
|
|
+ // 手工划分得到多个开始日期和结束日期(已排序)
|
|
|
+ // 跨年划分得到多个开始日期和结束日期
|
|
|
|
|
|
// 2023-03-17 时间序列始终以指标A为基准, 始终是B进行平移
|
|
|
baseDataList := make([]*data_manage.EdbDataList, 0)
|
|
@@ -1572,3 +1626,49 @@ func FormatChartEdbInfoMappings(chartInfoId int, mappings []*data_manage.ChartEd
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+func GetEdbDateByMoveForward(moveForward int, edbDataList []*data_manage.EdbDataList) (date string) {
|
|
|
+ moveForward = 0
|
|
|
+ // 根据日期进行排序
|
|
|
+ index := len(edbDataList) - 1 - moveForward
|
|
|
+ for k, v := range edbDataList {
|
|
|
+ if k == index {
|
|
|
+ date = v.DataTime
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// HandleEdbDateChange 处理日期变换
|
|
|
+func HandleEdbDateChange(date string, dateChange []*data_manage.EdbDateConfDateChange) (newDate string, err error) {
|
|
|
+ newDate = date
|
|
|
+ if newDate != "" {
|
|
|
+ if len(dateChange) > 0 {
|
|
|
+ var dateTime time.Time
|
|
|
+ dateTime, err = time.ParseInLocation(utils.FormatDate, newDate, time.Local)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("日期解析失败: %s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range dateChange {
|
|
|
+ if v.ChangeType == 1 {
|
|
|
+ dateTime = dateTime.AddDate(v.Year, v.Month, v.Day)
|
|
|
+ newDate = dateTime.Format(utils.FormatDate)
|
|
|
+ } else if v.ChangeType == 2 {
|
|
|
+ newDate, err, _ = utils.HandleSystemAppointDateT(dateTime, v.FrequencyDay, v.Frequency)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ dateTime, err = time.ParseInLocation(utils.FormatDate, newDate, time.Local)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("日期解析失败: %s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return
|
|
|
+}
|