94 lines
2.2 KiB
Go
94 lines
2.2 KiB
Go
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
|
|
}
|