|
@@ -43,10 +43,10 @@ func ResidualAnalysisPreview(req residual_analysis_model.ResidualAnalysisReq) (r
|
|
|
// 时间处理
|
|
|
var startDate, endDate string
|
|
|
switch req.DateType {
|
|
|
- case 0:
|
|
|
+ case -1:
|
|
|
startDate = req.StartDate
|
|
|
endDate = req.EndDate
|
|
|
- case 1:
|
|
|
+ case 0:
|
|
|
startDate = req.StartDate
|
|
|
endDate = ""
|
|
|
default:
|
|
@@ -237,17 +237,39 @@ func fillResidualChartInfo(req residual_analysis_model.ResidualAnalysisReq, edbI
|
|
|
mappingEdb[i].IsAxis = 1
|
|
|
mappingEdb[i].ChartColor = `#00F`
|
|
|
mappingEdb[i].IsOrder = false
|
|
|
+ mappingEdb[i].ChartWidth = 3
|
|
|
mappingEdb[i].MinValue = indexMin
|
|
|
mappingEdb[i].MaxValue = indexMax
|
|
|
+ mappingEdb[i].LeftIndexMin = req.RightIndexMin
|
|
|
+ mappingEdb[i].LeftIndexMax = req.RightIndexMax
|
|
|
+ mappingEdb[i].RightIndexMin = req.LeftIndexMin
|
|
|
+ mappingEdb[i].RightIndexMax = req.LeftIndexMax
|
|
|
} else {
|
|
|
mappingEdb[i].IsAxis = 0
|
|
|
mappingEdb[i].ChartColor = `#F00`
|
|
|
+ mappingEdb[i].ChartWidth = 1
|
|
|
+ mappingEdb[i].LeftIndexMin = req.RightIndexMin
|
|
|
+ mappingEdb[i].LeftIndexMax = req.RightIndexMax
|
|
|
+ mappingEdb[i].RightIndexMin = req.LeftIndexMin
|
|
|
+ mappingEdb[i].RightIndexMax = req.LeftIndexMax
|
|
|
}
|
|
|
}
|
|
|
+ reverse(mappingEdb)
|
|
|
|
|
|
return mappingEdb, R2, nil
|
|
|
}
|
|
|
|
|
|
+// 双指针法
|
|
|
+func reverse(slice []residual_analysis_model.ResidualAnalysisChartEdbInfoMapping) {
|
|
|
+ left, right := 0, len(slice)-1
|
|
|
+ for left < right {
|
|
|
+ // 交换元素
|
|
|
+ slice[left], slice[right] = slice[right], slice[left]
|
|
|
+ left++
|
|
|
+ right--
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
func fillMappingChartInfo(req residual_analysis_model.ResidualAnalysisReq, edbInfoMappingA *data_manage.ChartEdbInfoMapping, edbInfoMappingB *data_manage.ChartEdbInfoMapping, originalEdbList []residual_analysis_model.ResidualAnalysisChartEdbInfoMapping, indexADataMap map[string]*data_manage.EdbDataList, startDate string, endDate string, fullADataList []*data_manage.EdbDataList, fullBDataList []*data_manage.EdbDataList) ([]residual_analysis_model.ResidualAnalysisChartEdbInfoMapping, float64, float64, float64, error) {
|
|
|
// 计算公式:Y=aX+b,Y为映射后的指标,X为自变量指标
|
|
|
// 正序:a=(L2-L1)/(R2-R1) b=L2-R2*a
|
|
@@ -511,12 +533,24 @@ func fillOriginalChart(req residual_analysis_model.ResidualAnalysisReq, mappingL
|
|
|
edbInfoMapping.ChartColor = `#00F`
|
|
|
edbInfoMapping.ChartWidth = 3
|
|
|
edbInfoMapping.EdbName = v.EdbName
|
|
|
+ edbInfoMapping.LeftIndexMin = req.LeftIndexMin
|
|
|
+ edbInfoMapping.LeftIndexMax = req.LeftIndexMax
|
|
|
+ edbInfoMapping.RightIndexMin = req.RightIndexMin
|
|
|
+ edbInfoMapping.RightIndexMax = req.RightIndexMax
|
|
|
+ edbInfoMapping.ResidualIndexMin = req.ResidualIndexMin
|
|
|
+ edbInfoMapping.ResidualIndexMax = req.ResidualIndexMax
|
|
|
+ edbInfoMapping.ContrastIndexMin = req.ContrastIndexMin
|
|
|
+ edbInfoMapping.ContrastIndexMax = req.ContrastIndexMax
|
|
|
|
|
|
// 获取图表中的指标数据
|
|
|
dataList, err := data_manage.GetEdbDataList(v.Source, v.SubSource, v.EdbInfoId, startDate, endDate)
|
|
|
if err != nil {
|
|
|
return nil, nil, nil, fmt.Errorf("获取指标数据失败,Err:%s", err.Error())
|
|
|
}
|
|
|
+ if dataList == nil && len(dataList) == 0 {
|
|
|
+ return nil, nil, nil, fmt.Errorf("指标数据为空")
|
|
|
+ }
|
|
|
+
|
|
|
// 重新获取指标数据 产品要求需要和计算指标-拟合残差逻辑保持一致
|
|
|
fullDataList, err := data_manage.GetEdbDataList(v.Source, v.SubSource, v.EdbInfoId, "", "")
|
|
|
if err != nil {
|
|
@@ -579,7 +613,7 @@ func fillOriginalChart(req residual_analysis_model.ResidualAnalysisReq, mappingL
|
|
|
return originalEdbList, fullADataList, fullBDataList, nil
|
|
|
}
|
|
|
|
|
|
-func ContrastPreview(indexCode string) (residual_analysis_model.ResidualAnalysisChartEdbInfoMapping, error) {
|
|
|
+func ContrastPreview(indexCode string, startTime string, endTime string) (residual_analysis_model.ResidualAnalysisChartEdbInfoMapping, error) {
|
|
|
var condition string
|
|
|
var pars []interface{}
|
|
|
|
|
@@ -596,7 +630,7 @@ func ContrastPreview(indexCode string) (residual_analysis_model.ResidualAnalysis
|
|
|
return residual_analysis_model.ResidualAnalysisChartEdbInfoMapping{}, fmt.Errorf("指标不存在")
|
|
|
}
|
|
|
|
|
|
- dataList, err := data_manage.GetEdbDataList(edbInfo.Source, edbInfo.SubSource, edbInfo.EdbInfoId, "", "")
|
|
|
+ dataList, err := data_manage.GetEdbDataList(edbInfo.Source, edbInfo.SubSource, edbInfo.EdbInfoId, startTime, endTime)
|
|
|
|
|
|
var resp residual_analysis_model.ResidualAnalysisChartEdbInfoMapping
|
|
|
resp.EdbInfoId = edbInfo.EdbInfoId
|
|
@@ -869,6 +903,42 @@ func SaveResidualAnalysis(req residual_analysis_model.ResidualAnalysisIndexSaveR
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
+// 刷新残差指标时间戳
|
|
|
+/*func init() {
|
|
|
+ //func main() {
|
|
|
+ var condition string
|
|
|
+ var pars []interface{}
|
|
|
+
|
|
|
+ condition = " and edb_data_id > 0 order by edb_data_id asc limit 500"
|
|
|
+
|
|
|
+ for {
|
|
|
+ dataList, err := residual_analysis_model.GetDataListByCondition(condition, pars)
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Info("获取数据失败, 错误:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果没有数据,退出循环
|
|
|
+ if dataList == nil || len(dataList) == 0 {
|
|
|
+ utils.FileLog.Info("没有更多数据需要更新")
|
|
|
+ break
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新数据时间戳
|
|
|
+ for _, data := range dataList {
|
|
|
+ data.DataTimeStamp = utils.StringToTime(data.DataTime).UnixMilli()
|
|
|
+ data.ModifyTime = time.Now()
|
|
|
+ data.CreateTime = time.Now()
|
|
|
+ data.RefreshDataTimestamp([]string{"create_time", "modify_time", "data_timestamp"})
|
|
|
+ }
|
|
|
+
|
|
|
+ condition = " and edb_data_id > ? order by edb_data_id asc limit 500"
|
|
|
+ pars = []interface{}{dataList[len(dataList)-1].EdbDataId}
|
|
|
+
|
|
|
+ utils.FileLog.Info("刷新残差指标时间戳, 已处理数量:" + strconv.Itoa(len(dataList)))
|
|
|
+ }
|
|
|
+}*/
|
|
|
+
|
|
|
func ResidualAnalysisDetail(edbInfoId int) (residual_analysis_model.ResidualAnalysisDetailResp, error) {
|
|
|
// 通过指标配置映射表 拿到配置id,再获取关联的所有指标信息
|
|
|
var condition string
|