Răsfoiți Sursa

Merge branch 'eta_bug_7104_residual_1231@guomengyuan'

gmy 2 luni în urmă
părinte
comite
0f7601cd43

+ 5 - 3
controllers/residual_analysis/residual_analysis_controller.go

@@ -81,15 +81,17 @@ func (this *ResidualAnalysisController) ContrastPreview() {
 		return
 	}
 
-	IndexCode := this.GetString("IndexCode")
-	if IndexCode == "" {
+	indexCode := this.GetString("IndexCode")
+	if indexCode == "" {
 		br.Ret = 403
 		br.Msg = "IndexCode不能为空"
 		br.ErrMsg = "IndexCode不能为空"
 		return
 	}
+	startTime := this.GetString("StartTime")
+	endTime := this.GetString("EndTime")
 
-	resp, err := residual_analysis_service.ContrastPreview(IndexCode)
+	resp, err := residual_analysis_service.ContrastPreview(indexCode, startTime, endTime)
 	if err != nil {
 		return
 	}

+ 9 - 0
models/residual_analysis_model/calculate_residual_analysis_config.go

@@ -112,6 +112,15 @@ type ResidualAnalysisChartEdbInfoMapping struct {
 	MinValue            float64 `description:"最小值"`
 	MaxValue            float64 `description:"最大值"`
 	DataList            interface{}
+
+	LeftIndexMin     float64 `description:"指标A左侧下限"`
+	LeftIndexMax     float64 `description:"指标A左侧上限"`
+	RightIndexMin    float64 `description:"指标B右侧下限"`
+	RightIndexMax    float64 `description:"指标B右侧上限"`
+	ResidualIndexMin float64 `description:"残差指标下限"`
+	ResidualIndexMax float64 `description:"残差指标上限"`
+	ContrastIndexMin float64 `description:"对比指标下限"`
+	ContrastIndexMax float64 `description:"对比指标上限"`
 }
 
 type ResidualAnalysisIndexSaveReq struct {

+ 17 - 0
models/residual_analysis_model/edb_data_residual_analysis.go

@@ -38,3 +38,20 @@ func AddResidualAnalysisData(dataList []edbDataResidualAnalysis) (num int64, err
 
 	return num, nil
 }
+
+// GetDataListByCondition 根据条件查询所有数据
+func GetDataListByCondition(condition string, pars []interface{}) (items []edbDataResidualAnalysis, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `select * from edb_data_residual_analysis where 1=1` + condition
+	_, err = o.Raw(sql, pars...).QueryRows(&items)
+	return items, err
+}
+
+// RefreshDataTimestamp 刷新残差指标时间戳
+func (m *edbDataResidualAnalysis) RefreshDataTimestamp(cols []string) {
+	o := orm.NewOrmUsingDB("data")
+	_, err := o.Update(m, cols...)
+	if err != nil {
+		return
+	}
+}

+ 74 - 4
services/residual_analysis_service/residual_analysis_service.go

@@ -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

+ 1 - 1
utils/date_util.go

@@ -111,7 +111,7 @@ func isLeap(year int) bool {
 
 // StringToTime string 类型时间 转换为 time.Time 类型
 func StringToTime(date string) time.Time {
-	t, _ := time.Parse("2006-01-02", date)
+	t, _ := time.ParseInLocation("2006-01-02", date, time.Local)
 	return t
 }