diff --git a/repository/test.data/chart.go b/repository/test.data/chart.go index 7b13743..aa8a2de 100644 --- a/repository/test.data/chart.go +++ b/repository/test.data/chart.go @@ -442,7 +442,7 @@ func Histogram(req *request.Histogram) ([]*model.Histogram, error) { } // Scatter 散点图 -func Scatter(req *request.Scatter) ([]*model.Scatter, model.ScatterLimit, model.ScatterLimit, error) { +func Scatter(req *request.Scatter) ([]*model.Scatter, []model.ScatterLimit, []model.ScatterLimit, error) { var groups []string if len(req.SubBatch) == 0 && len(req.WaferID) == 0 { @@ -472,7 +472,8 @@ func Scatter(req *request.Scatter) ([]*model.Scatter, model.ScatterLimit, model. } var scatters []*model.Scatter - var xScatterLimit, yScatterLimit model.ScatterLimit + var xScatterLimitArray, yScatterLimitArray []model.ScatterLimit + //var xScatterLimit, yScatterLimit model.ScatterLimit if len(req.Site) == 0 { scatterFieldMap := make(map[string]int) counter := make(map[string]map[string]int) @@ -510,46 +511,90 @@ func Scatter(req *request.Scatter) ([]*model.Scatter, model.ScatterLimit, model. Field: xySelection.X + "," + xySelection.Y + " All Site", Datas: [][]string{}} scatterFieldMap[xySelection.X+","+xySelection.Y] = len(scatters) scatters = append(scatters, scatter) + xScatterLimitArray = append(xScatterLimitArray, model.ScatterLimit{ + Max: "", + Min: "", + }) + yScatterLimitArray = append(yScatterLimitArray, model.ScatterLimit{ + Max: "", + Min: "", + }) } scatters[scatterFieldMap[xySelection.X+","+xySelection.Y]].Datas = append( scatters[scatterFieldMap[xySelection.X+","+xySelection.Y]].Datas, []string{data[fieldMap[xySelection.X]], data[fieldMap[xySelection.Y]]}) - if xScatterLimit.Min == "" { - xScatterLimit.Min = data[fieldMap[xySelection.X]] + if xScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Min == "" { + xScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Min = data[fieldMap[xySelection.X]] } else { - xScatterLimitFloat, _ := strconv.ParseFloat(xScatterLimit.Min, 8) + xScatterLimitFloat, _ := strconv.ParseFloat(xScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Min, 8) dataFloat, _ := strconv.ParseFloat(data[fieldMap[xySelection.X]], 8) if xScatterLimitFloat > dataFloat { - xScatterLimit.Min = data[fieldMap[xySelection.X]] + xScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Min = data[fieldMap[xySelection.X]] } } - if xScatterLimit.Max == "" { - xScatterLimit.Max = data[fieldMap[xySelection.X]] + if xScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Max == "" { + xScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Max = data[fieldMap[xySelection.X]] } else { - xScatterLimitFloat, _ := strconv.ParseFloat(xScatterLimit.Max, 8) + xScatterLimitFloat, _ := strconv.ParseFloat(xScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Max, 8) dataFloat, _ := strconv.ParseFloat(data[fieldMap[xySelection.X]], 8) if xScatterLimitFloat < dataFloat { - xScatterLimit.Max = data[fieldMap[xySelection.X]] + xScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Max = data[fieldMap[xySelection.X]] } } - if yScatterLimit.Min == "" { - yScatterLimit.Min = data[fieldMap[xySelection.Y]] + if yScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Min == "" { + yScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Min = data[fieldMap[xySelection.Y]] } else { - yScatterLimitFloat, _ := strconv.ParseFloat(yScatterLimit.Min, 8) + yScatterLimitFloat, _ := strconv.ParseFloat(yScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Min, 8) dataFloat, _ := strconv.ParseFloat(data[fieldMap[xySelection.Y]], 8) if yScatterLimitFloat > dataFloat { - yScatterLimit.Min = data[fieldMap[xySelection.Y]] + yScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Min = data[fieldMap[xySelection.Y]] } } - if yScatterLimit.Max == "" { - yScatterLimit.Max = data[fieldMap[xySelection.Y]] + if yScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Max == "" { + yScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Max = data[fieldMap[xySelection.Y]] } else { - yScatterLimitFloat, _ := strconv.ParseFloat(yScatterLimit.Max, 8) + yScatterLimitFloat, _ := strconv.ParseFloat(yScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Max, 8) dataFloat, _ := strconv.ParseFloat(data[fieldMap[xySelection.Y]], 8) if yScatterLimitFloat < dataFloat { - yScatterLimit.Max = data[fieldMap[xySelection.Y]] + yScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Max = data[fieldMap[xySelection.Y]] } } + //if xScatterLimit.Min == "" { + // xScatterLimit.Min = data[fieldMap[xySelection.X]] + //} else { + // xScatterLimitFloat, _ := strconv.ParseFloat(xScatterLimit.Min, 8) + // dataFloat, _ := strconv.ParseFloat(data[fieldMap[xySelection.X]], 8) + // if xScatterLimitFloat > dataFloat { + // xScatterLimit.Min = data[fieldMap[xySelection.X]] + // } + //} + //if xScatterLimit.Max == "" { + // xScatterLimit.Max = data[fieldMap[xySelection.X]] + //} else { + // xScatterLimitFloat, _ := strconv.ParseFloat(xScatterLimit.Max, 8) + // dataFloat, _ := strconv.ParseFloat(data[fieldMap[xySelection.X]], 8) + // if xScatterLimitFloat < dataFloat { + // xScatterLimit.Max = data[fieldMap[xySelection.X]] + // } + //} + //if yScatterLimit.Min == "" { + // yScatterLimit.Min = data[fieldMap[xySelection.Y]] + //} else { + // yScatterLimitFloat, _ := strconv.ParseFloat(yScatterLimit.Min, 8) + // dataFloat, _ := strconv.ParseFloat(data[fieldMap[xySelection.Y]], 8) + // if yScatterLimitFloat > dataFloat { + // yScatterLimit.Min = data[fieldMap[xySelection.Y]] + // } + //} + //if yScatterLimit.Max == "" { + // yScatterLimit.Max = data[fieldMap[xySelection.Y]] + //} else { + // yScatterLimitFloat, _ := strconv.ParseFloat(yScatterLimit.Max, 8) + // dataFloat, _ := strconv.ParseFloat(data[fieldMap[xySelection.Y]], 8) + // if yScatterLimitFloat < dataFloat { + // yScatterLimit.Max = data[fieldMap[xySelection.Y]] + // } + //} } } } @@ -596,6 +641,14 @@ func Scatter(req *request.Scatter) ([]*model.Scatter, model.ScatterLimit, model. Field: xySelection.X + "," + xySelection.Y + "-Site" + site, Datas: [][]string{}} scatterFieldMap[xySelection.X+","+xySelection.Y+"-Site"+site] = len(scatters) scatters = append(scatters, scatter) + xScatterLimitArray = append(xScatterLimitArray, model.ScatterLimit{ + Max: "", + Min: "", + }) + yScatterLimitArray = append(yScatterLimitArray, model.ScatterLimit{ + Max: "", + Min: "", + }) } scatters[scatterFieldMap[xySelection.X+","+xySelection.Y+"-Site"+site]].Datas = append( scatters[scatterFieldMap[xySelection.X+","+xySelection.Y+"-Site"+site]].Datas, @@ -610,49 +663,86 @@ func Scatter(req *request.Scatter) ([]*model.Scatter, model.ScatterLimit, model. //scatters[scatterFieldMap[xySelection.X+","+xySelection.Y]].Datas = append( // scatters[scatterFieldMap[xySelection.X+","+xySelection.Y]].Datas, // []string{data[fieldMap[xySelection.X]], data[fieldMap[xySelection.Y]]}) - if xScatterLimit.Min == "" { - xScatterLimit.Min = data[fieldMap[xySelection.X]] + + if xScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Min == "" { + xScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Min = data[fieldMap[xySelection.X]] } else { - xScatterLimitFloat, _ := strconv.ParseFloat(xScatterLimit.Min, 8) + xScatterLimitFloat, _ := strconv.ParseFloat(xScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Min, 8) dataFloat, _ := strconv.ParseFloat(data[fieldMap[xySelection.X]], 8) if xScatterLimitFloat > dataFloat { - xScatterLimit.Min = data[fieldMap[xySelection.X]] + xScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Min = data[fieldMap[xySelection.X]] } } - if xScatterLimit.Max == "" { - xScatterLimit.Max = data[fieldMap[xySelection.X]] + if xScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Max == "" { + xScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Max = data[fieldMap[xySelection.X]] } else { - xScatterLimitFloat, _ := strconv.ParseFloat(xScatterLimit.Max, 8) + xScatterLimitFloat, _ := strconv.ParseFloat(xScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Max, 8) dataFloat, _ := strconv.ParseFloat(data[fieldMap[xySelection.X]], 8) if xScatterLimitFloat < dataFloat { - xScatterLimit.Max = data[fieldMap[xySelection.X]] + xScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Max = data[fieldMap[xySelection.X]] } } - if yScatterLimit.Min == "" { - yScatterLimit.Min = data[fieldMap[xySelection.Y]] + if yScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Min == "" { + yScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Min = data[fieldMap[xySelection.Y]] } else { - yScatterLimitFloat, _ := strconv.ParseFloat(yScatterLimit.Min, 8) + yScatterLimitFloat, _ := strconv.ParseFloat(yScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Min, 8) dataFloat, _ := strconv.ParseFloat(data[fieldMap[xySelection.Y]], 8) if yScatterLimitFloat > dataFloat { - yScatterLimit.Min = data[fieldMap[xySelection.Y]] + yScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Min = data[fieldMap[xySelection.Y]] } } - if yScatterLimit.Max == "" { - yScatterLimit.Max = data[fieldMap[xySelection.Y]] + if yScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Max == "" { + yScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Max = data[fieldMap[xySelection.Y]] } else { - yScatterLimitFloat, _ := strconv.ParseFloat(yScatterLimit.Max, 8) + yScatterLimitFloat, _ := strconv.ParseFloat(yScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Max, 8) dataFloat, _ := strconv.ParseFloat(data[fieldMap[xySelection.Y]], 8) if yScatterLimitFloat < dataFloat { - yScatterLimit.Max = data[fieldMap[xySelection.Y]] + yScatterLimitArray[scatterFieldMap[xySelection.X+","+xySelection.Y]].Max = data[fieldMap[xySelection.Y]] } } + //if xScatterLimit.Min == "" { + // xScatterLimit.Min = data[fieldMap[xySelection.X]] + //} else { + // xScatterLimitFloat, _ := strconv.ParseFloat(xScatterLimit.Min, 8) + // dataFloat, _ := strconv.ParseFloat(data[fieldMap[xySelection.X]], 8) + // if xScatterLimitFloat > dataFloat { + // xScatterLimit.Min = data[fieldMap[xySelection.X]] + // } + //} + //if xScatterLimit.Max == "" { + // xScatterLimit.Max = data[fieldMap[xySelection.X]] + //} else { + // xScatterLimitFloat, _ := strconv.ParseFloat(xScatterLimit.Max, 8) + // dataFloat, _ := strconv.ParseFloat(data[fieldMap[xySelection.X]], 8) + // if xScatterLimitFloat < dataFloat { + // xScatterLimit.Max = data[fieldMap[xySelection.X]] + // } + //} + //if yScatterLimit.Min == "" { + // yScatterLimit.Min = data[fieldMap[xySelection.Y]] + //} else { + // yScatterLimitFloat, _ := strconv.ParseFloat(yScatterLimit.Min, 8) + // dataFloat, _ := strconv.ParseFloat(data[fieldMap[xySelection.Y]], 8) + // if yScatterLimitFloat > dataFloat { + // yScatterLimit.Min = data[fieldMap[xySelection.Y]] + // } + //} + //if yScatterLimit.Max == "" { + // yScatterLimit.Max = data[fieldMap[xySelection.Y]] + //} else { + // yScatterLimitFloat, _ := strconv.ParseFloat(yScatterLimit.Max, 8) + // dataFloat, _ := strconv.ParseFloat(data[fieldMap[xySelection.Y]], 8) + // if yScatterLimitFloat < dataFloat { + // yScatterLimit.Max = data[fieldMap[xySelection.Y]] + // } + //} } } } } } } - return scatters, xScatterLimit, yScatterLimit, nil + return scatters, xScatterLimitArray, yScatterLimitArray, nil } func Pie(req *request.Pie) ([]*model.Pie, error) { diff --git a/repository/test.data/export.go b/repository/test.data/export.go index 3d0289a..7b4f265 100644 --- a/repository/test.data/export.go +++ b/repository/test.data/export.go @@ -1148,11 +1148,19 @@ func ExportScatter(req *request.Scatter) string { scatterFile.SetSheetName("Sheet1", "All") sheetName := scatterFile.GetSheetName(0) selectionValueMap := make(map[string][]int) + selectionXLimitMap := make(map[string][]float64) + selectionYLimitMap := make(map[string][]float64) rowIndex := 1 for _, selection := range req.XYSelection { for k := range selectionPointsMap { if strings.Contains(k, selection.X+","+selection.Y) { + if _, ok := selectionXLimitMap[k]; !ok { + selectionXLimitMap[k] = []float64{math.MinInt64, math.MaxFloat64} + } + if _, ok := selectionYLimitMap[k]; !ok { + selectionYLimitMap[k] = []float64{math.MinInt64, math.MaxFloat64} + } sheetX := []interface{}{k, selection.X} sheetY := []interface{}{"", selection.Y} for point := range selectionPointsMap[k] { @@ -1163,6 +1171,18 @@ func ExportScatter(req *request.Scatter) string { y, _ := yDecimal.Float64() sheetX = append(sheetX, x) sheetY = append(sheetY, y) + if x > selectionXLimitMap[k][0] { + selectionXLimitMap[k][0] = x + } + if x < selectionXLimitMap[k][1] { + selectionXLimitMap[k][1] = x + } + if y > selectionYLimitMap[k][0] { + selectionYLimitMap[k][0] = y + } + if y < selectionYLimitMap[k][1] { + selectionYLimitMap[k][1] = y + } } for idx, row := range [][]interface{}{ sheetX, @@ -1188,6 +1208,14 @@ func ExportScatter(req *request.Scatter) string { if strings.Contains(k, selection.X+","+selection.Y) { if err := scatterFile.AddChart("All", utils.NumToRow(strconv.Itoa(b))+strconv.Itoa(a), &excelize.Chart{ Type: excelize.Scatter, + XAxis: excelize.ChartAxis{ + Maximum: &selectionXLimitMap[k][0], + Minimum: &selectionXLimitMap[k][1], + }, + YAxis: excelize.ChartAxis{ + Maximum: &selectionYLimitMap[k][0], + Minimum: &selectionYLimitMap[k][1], + }, Series: []excelize.ChartSeries{ { Name: "All" + "!$A$1", @@ -1276,11 +1304,19 @@ func ExportScatter(req *request.Scatter) string { scatterFile.NewSheet(group) selectionValueMap := make(map[string][]int) + selectionXLimitMap := make(map[string][]float64) + selectionYLimitMap := make(map[string][]float64) rowIndex := 1 for _, selection := range req.XYSelection { for k := range selectionPointsMap { if strings.Contains(k, selection.X+","+selection.Y) { + if _, ok := selectionXLimitMap[k]; !ok { + selectionXLimitMap[k] = []float64{math.MinInt64, math.MaxFloat64} + } + if _, ok := selectionYLimitMap[k]; !ok { + selectionYLimitMap[k] = []float64{math.MinInt64, math.MaxFloat64} + } sheetX := []interface{}{k, selection.X} sheetY := []interface{}{"", selection.Y} for point := range selectionPointsMap[k] { @@ -1291,6 +1327,18 @@ func ExportScatter(req *request.Scatter) string { y, _ := yDecimal.Float64() sheetX = append(sheetX, x) sheetY = append(sheetY, y) + if x > selectionXLimitMap[k][0] { + selectionXLimitMap[k][0] = x + } + if x < selectionXLimitMap[k][1] { + selectionXLimitMap[k][1] = x + } + if y > selectionYLimitMap[k][0] { + selectionYLimitMap[k][0] = y + } + if y < selectionYLimitMap[k][1] { + selectionYLimitMap[k][1] = y + } } for idx, row := range [][]interface{}{ sheetX, @@ -1316,6 +1364,14 @@ func ExportScatter(req *request.Scatter) string { if strings.Contains(k, selection.X+","+selection.Y) { if err := scatterFile.AddChart(group, utils.NumToRow(strconv.Itoa(b))+strconv.Itoa(a), &excelize.Chart{ Type: excelize.Scatter, + XAxis: excelize.ChartAxis{ + Maximum: &selectionXLimitMap[k][0], + Minimum: &selectionXLimitMap[k][1], + }, + YAxis: excelize.ChartAxis{ + Maximum: &selectionYLimitMap[k][0], + Minimum: &selectionYLimitMap[k][1], + }, Series: []excelize.ChartSeries{ { Name: group + "!$A$1",