package test_data import ( "bufio" "encoding/json" "log" "os" "sort" "strings" "testData/global" "testData/model" ) func GetWarningSelection(product, step string) map[string][]string { var fileHandles []*model.FileHandled global.PostGreSQL.Where("product LIKE ? AND step = ?", product+"%", step). Limit(10).Order("created_at desc").Find(&fileHandles) datas := make([][]string, 0) fieldMap := make(map[string]int) binMap := make(map[string]interface{}) var selection []string for _, fileHandle := range fileHandles { singleDatas := make([][]string, 0) _ = json.Unmarshal([]byte(fileHandle.SbinHbin), &binMap) f, err := os.Open(fileHandle.Path) if err != nil { log.Println(err) } scanner := bufio.NewScanner(f) xyMap := make(map[string]int) for scanner.Scan() { line := scanner.Text() s := strings.Split(line, ",") if strings.Contains(fileHandle.Step, "CP") { x := s[fieldMap["X_COORD"]] y := s[fieldMap["Y_COORD"]] if _, ok := xyMap[x+","+y]; !ok { xyMap[x+","+y] = len(singleDatas) singleDatas = append(singleDatas, s[:len(s)-1]) } } else { singleDatas = append(singleDatas, s[:len(s)-1]) } if len(singleDatas) == 1 { if strings.Contains(fileHandle.Step, "CP") { selection = s[8 : len(s)-1] } else { selection = s[6 : len(s)-1] } for index, cell := range s { if index == len(s)-1 { continue } fieldMap[cell] = index } } } if len(singleDatas) >= 1 { singleDatas = singleDatas[1:] } datas = append(datas, singleDatas...) f.Close() } sBinMap := make(map[string]int) for _, data := range datas { sBinMap[data[fieldMap["SOFT_BIN"]]] += 1 } hBinMap := make(map[string]int) var sBin, hBin []string for k := range sBinMap { if _, ok := binMap[k]; ok { sBin = append(sBin, k) hBinMap[binMap[k].(string)] += 1 } } sort.Slice(sBin, func(i, j int) bool { return sBinMap[sBin[i]] > sBinMap[sBin[j]] }) for k := range hBinMap { hBin = append(hBin, k) } sort.Slice(hBin, func(i, j int) bool { return hBinMap[hBin[i]] > hBinMap[hBin[j]] }) res := make(map[string][]string) res["selection"] = selection res["sbin"] = sBin res["hbin"] = hBin return res }