From 01d57ff8488cf6919daf673d33a124534b5e5d69 Mon Sep 17 00:00:00 2001 From: jh_peng Date: Mon, 28 Apr 2025 18:28:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=88=86=E6=9E=90=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=20=E6=8A=A5=E8=AD=A6=E8=AE=BE=E7=BD=AE=E7=AA=97?= =?UTF-8?q?=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/test.data/warning.go | 14 ++++ repository/test.data/warning.go | 45 ----------- repository/test.data/warning.selection.go | 93 +++++++++++++++++++++++ router/warning.go | 1 + 4 files changed, 108 insertions(+), 45 deletions(-) create mode 100644 repository/test.data/warning.selection.go diff --git a/api/test.data/warning.go b/api/test.data/warning.go index a913920..cb921bd 100644 --- a/api/test.data/warning.go +++ b/api/test.data/warning.go @@ -67,6 +67,20 @@ func (S *SWarningService) ShowList(c *gin.Context) { response.OkWithData(gin.H{"warning": warning, "total": total}, c) } +// @Tags 数据分析平台 +// @Summary 查询报警设置产品参考信息 +// @Security ApiKeyAuth +// @accept application/json +// @Param product query string false "产品型号" +// @Param step query string false "工序" +// @Success 200 {string} string "{"success":true,"data":{},"msg":"操作成功"}" +// @Router /testData/warning/selection [get] +func (S *SWarningService) WarningSelection(c *gin.Context) { + product := c.Query("product") + step := c.Query("step") + response.OkWithData(test_data.GetWarningSelection(product, step), c) +} + // @Tags 数据分析平台 // @Summary 删除报警设置信息 // @Security ApiKeyAuth diff --git a/repository/test.data/warning.go b/repository/test.data/warning.go index 572ca8e..5ffd67f 100644 --- a/repository/test.data/warning.go +++ b/repository/test.data/warning.go @@ -3,28 +3,11 @@ package test_data import ( "errors" "gorm.io/gorm" - "strconv" "testData/global" "testData/model" ) func UpdateWarning(req *model.Warning) error { - _, err := strconv.ParseFloat(req.FirstPassProbabilityLimitL, 64) - if err != nil { - return errors.New("一次通过率下限必须是数字") - } - _, err = strconv.ParseFloat(req.ReturnProbabilityLimitH, 64) - if err != nil { - return errors.New("回收率上限必须是数字") - } - _, err = strconv.ParseFloat(req.PassProbabilityLimitL, 64) - if err != nil { - return errors.New("良率下限必须是数字") - } - _, err = strconv.ParseFloat(req.AveragePassProbability, 64) - if err != nil { - return errors.New("平均良率必须是数字") - } var warning *model.Warning if errors.Is(global.PostGreSQL.Where("product = ? AND step = ?", req.Product, req.Step).First(&warning).Error, gorm.ErrRecordNotFound) { global.PostGreSQL.Create(&model.Warning{ @@ -53,52 +36,24 @@ func UpdateWarning(req *model.Warning) error { for k := range req.PassProbabilityDiff { req.PassProbabilityDiff[k].ID = 0 req.PassProbabilityDiff[k].WarningID = warning.ID - _, err = strconv.ParseFloat(req.PassProbabilityDiff[k].SitePassProbabilityDiff, 64) - if err != nil { - return errors.New("良率差异设置必须是数字") - } - _, err = strconv.ParseFloat(req.PassProbabilityDiff[k].PassProbabilityDiff, 64) - if err != nil { - return errors.New("良率差异设置必须是数字") - } - _, err = strconv.ParseFloat(req.PassProbabilityDiff[k].PassProbabilityWave, 64) - if err != nil { - return errors.New("良率差异设置必须是数字") - } } global.PostGreSQL.Where("warning_id = ?", warning.ID).Delete(&model.PassProbabilityDiff{}) global.PostGreSQL.Create(&req.PassProbabilityDiff) for k := range req.BinControl { req.BinControl[k].ID = 0 req.BinControl[k].WarningID = warning.ID - _, err = strconv.ParseFloat(req.BinControl[k].BinFailLimitH, 64) - if err != nil { - return errors.New("关键BIN设置必须是数字") - } } global.PostGreSQL.Where("warning_id = ?", warning.ID).Delete(&model.BinControl{}) global.PostGreSQL.Create(&req.BinControl) for k := range req.SelectionDiffControl { req.SelectionDiffControl[k].ID = 0 req.SelectionDiffControl[k].WarningID = warning.ID - _, err = strconv.ParseFloat(req.SelectionDiffControl[k].SiteDiff, 64) - if err != nil { - return errors.New("参数允许差异设置必须是数字") - } - _, err = strconv.ParseFloat(req.SelectionDiffControl[k].SubBatchDiff, 64) - if err != nil { - return errors.New("参数允许差异设置必须是数字") - } } global.PostGreSQL.Where("warning_id = ?", warning.ID).Delete(&model.SelectionDiffControl{}) global.PostGreSQL.Create(&req.SelectionDiffControl) for k := range req.StackingMaterialsWarning { req.StackingMaterialsWarning[k].ID = 0 req.StackingMaterialsWarning[k].WarningID = warning.ID - _, err = strconv.ParseFloat(req.StackingMaterialsWarning[k].Diff, 64) - if err != nil { - return errors.New("叠料报警设置必须是数字") - } } global.PostGreSQL.Where("warning_id = ?", warning.ID).Delete(&model.StackingMaterialsWarning{}) global.PostGreSQL.Create(&req.StackingMaterialsWarning) diff --git a/repository/test.data/warning.selection.go b/repository/test.data/warning.selection.go new file mode 100644 index 0000000..7ebda01 --- /dev/null +++ b/repository/test.data/warning.selection.go @@ -0,0 +1,93 @@ +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 +} diff --git a/router/warning.go b/router/warning.go index 5b388c7..2e0dfd5 100644 --- a/router/warning.go +++ b/router/warning.go @@ -11,6 +11,7 @@ func InitWarningRouter(R *gin.RouterGroup) { { warningGroup.POST("", warningService.Update) warningGroup.GET("", warningService.ShowList) + warningGroup.GET("selection", warningService.WarningSelection) warningGroup.DELETE("", warningService.Delete) } }