package main import ( . "dataIdentify/service" "fmt" "github.com/xuri/excelize/v2" "log" "net/rpc" "sync" "testing" ) // 示例测试 func TestRule(t *testing.T) { Start("686964f0d5d8e4081f880f7c") } /* 返回结果: * map[中标联合体:否 报价模式:其他] * 中标联合体: 是/否 * 报价模式:单价/费率/折扣率/正常报价/其他 */ func TestRpc(t *testing.T) { conn, err := rpc.DialHTTP("tcp", "172.31.31.203:8811") if err != nil { log.Println(err) return } defer conn.Close() var reply map[string]string err = conn.Call("DataIdentify.Execute", "5b0dfeb4a5cb26b9b79c1330", &reply) if err != nil { log.Println(err) } log.Println(reply) } // 总共 300 报价模式不一致 86 中标联合体不一致 2 func TestCompare(t *testing.T) { // 打开一个已存在的Excel文件。 of, err := excelize.OpenFile("./报价模式+中标联合体验证第二轮.xlsx") if err != nil { log.Fatalln(err) return } // 获取工作表的名称列表。 sheets := of.GetSheetList() // 读取指定工作表中的所有行。 f := excelize.NewFile() sheetName := "对比结果" newSheetIndex, _ := f.NewSheet(sheetName) f.SetActiveSheet(newSheetIndex) // 设置工作表的标题行 headers := []string{"_id", "链接", "测试-报价模式", "抽取-报价模式", "测试-中标联合体", "抽取-中标联合体"} for colNum, header := range headers { cell, _ := excelize.ColumnNumberToName(colNum + 1) f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, 1), header) } rowsTemp, err := of.GetRows(sheets[1]) if err != nil { log.Fatalln(err) } //rows := [][]string{rowsTemp[0], rowsTemp[1]} rows := rowsTemp result := map[string]map[string]interface{}{} lock := &sync.Mutex{} pool := make(chan bool, 5) wait := &sync.WaitGroup{} for k, r := range rows { if k == 0 { continue } pool <- true wait.Add(1) go func(kk int, row []string) { defer func() { <-pool wait.Done() }() a, b := Start(row[0]) bv := "" if b == 1 { bv = "是" } else if b == -1 { bv = "否" } lock.Lock() result[row[0]] = map[string]interface{}{ "报价模式": a, "中标联合体": bv, } lock.Unlock() }(k, r) } wait.Wait() var aEq, bEq float64 bZOneFieldMap := map[string]float64{} oneFieldMap := map[string]float64{} oneFieldEqMap := map[string]float64{} var aCount, aaCount, bCount, bbCount float64 rowNum := 1 for k, row := range rows { if k == 0 { continue } bZOneFieldMap[row[4]]++ if row[4] != "" { aaCount++ } if row[6] == "是" { bbCount++ } obj := result[row[0]] if obj == nil { continue } a, b := obj["报价模式"], obj["中标联合体"] if a == "" && b == "否" { continue } if a != "" { if a == row[4] { aEq++ oneFieldEqMap[row[4]]++ } aCount++ oneFieldMap[a.(string)]++ } if b == "是" { if b == row[6] { bEq++ } bCount++ } if (a == "" || a == row[4]) && (b == "否" || b == row[6]) { continue } rowNum++ cell, _ := excelize.ColumnNumberToName(1) f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, rowNum), row[0]) cell, _ = excelize.ColumnNumberToName(2) f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, rowNum), row[1]) cell, _ = excelize.ColumnNumberToName(3) f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, rowNum), row[4]) cell, _ = excelize.ColumnNumberToName(4) f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, rowNum), a) cell, _ = excelize.ColumnNumberToName(5) f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, rowNum), row[6]) cell, _ = excelize.ColumnNumberToName(6) f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, rowNum), b) } f.SaveAs("./对比结果.xlsx") countRows := float64(len(rows) - 1) oneFieldMsg := "" for k, v := range oneFieldMap { oneFieldMsg += fmt.Sprintf("报价模式-%s,总数:%.f,识别出:%.f,识别率:%.f%%,正确:%.f,正确率:%.2f%%", k, bZOneFieldMap[k], v, v/bZOneFieldMap[k]*100, oneFieldEqMap[k], oneFieldEqMap[k]/v*100) + "\n" } log.Println("总数", countRows, "\n", fmt.Sprintf("报价模式,总数:%.f,识别出:%.f,识别率:%.f%%,正确:%.f,正确率:%.2f%%", aaCount, aCount, aCount/aaCount*100, aEq, aEq/aCount*100), "\n", oneFieldMsg, fmt.Sprintf("中标联合体,总数:%.f,识别出:%.f,识别率:%.f%%,正确:%.f,正确率:%.2f%%", bbCount, bCount, bCount/bbCount*100, bEq, bEq/bCount*100), "\n", "") }