main_test.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. package main
  2. import (
  3. . "dataIdentify/service"
  4. "fmt"
  5. "github.com/xuri/excelize/v2"
  6. "log"
  7. "net/rpc"
  8. "sync"
  9. "testing"
  10. )
  11. // 示例测试
  12. func TestRule(t *testing.T) {
  13. Start("686964f0d5d8e4081f880f7c")
  14. }
  15. /* 返回结果:
  16. * map[中标联合体:否 报价模式:其他]
  17. * 中标联合体: 是/否
  18. * 报价模式:单价/费率/折扣率/正常报价/其他
  19. */
  20. func TestRpc(t *testing.T) {
  21. conn, err := rpc.DialHTTP("tcp", "172.31.31.203:8811")
  22. if err != nil {
  23. log.Println(err)
  24. return
  25. }
  26. defer conn.Close()
  27. var reply map[string]string
  28. err = conn.Call("DataIdentify.Execute", "5b0dfeb4a5cb26b9b79c1330", &reply)
  29. if err != nil {
  30. log.Println(err)
  31. }
  32. log.Println(reply)
  33. }
  34. // 总共 300 报价模式不一致 86 中标联合体不一致 2
  35. func TestCompare(t *testing.T) {
  36. // 打开一个已存在的Excel文件。
  37. of, err := excelize.OpenFile("./报价模式+中标联合体验证第二轮.xlsx")
  38. if err != nil {
  39. log.Fatalln(err)
  40. return
  41. }
  42. // 获取工作表的名称列表。
  43. sheets := of.GetSheetList()
  44. // 读取指定工作表中的所有行。
  45. f := excelize.NewFile()
  46. sheetName := "对比结果"
  47. newSheetIndex, _ := f.NewSheet(sheetName)
  48. f.SetActiveSheet(newSheetIndex)
  49. // 设置工作表的标题行
  50. headers := []string{"_id", "链接", "测试-报价模式", "抽取-报价模式", "测试-中标联合体", "抽取-中标联合体"}
  51. for colNum, header := range headers {
  52. cell, _ := excelize.ColumnNumberToName(colNum + 1)
  53. f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, 1), header)
  54. }
  55. rowsTemp, err := of.GetRows(sheets[1])
  56. if err != nil {
  57. log.Fatalln(err)
  58. }
  59. //rows := [][]string{rowsTemp[0], rowsTemp[1]}
  60. rows := rowsTemp
  61. result := map[string]map[string]interface{}{}
  62. lock := &sync.Mutex{}
  63. pool := make(chan bool, 5)
  64. wait := &sync.WaitGroup{}
  65. for k, r := range rows {
  66. if k == 0 {
  67. continue
  68. }
  69. pool <- true
  70. wait.Add(1)
  71. go func(kk int, row []string) {
  72. defer func() {
  73. <-pool
  74. wait.Done()
  75. }()
  76. a, b := Start(row[0])
  77. bv := ""
  78. if b == 1 {
  79. bv = "是"
  80. } else if b == -1 {
  81. bv = "否"
  82. }
  83. lock.Lock()
  84. result[row[0]] = map[string]interface{}{
  85. "报价模式": a,
  86. "中标联合体": bv,
  87. }
  88. lock.Unlock()
  89. }(k, r)
  90. }
  91. wait.Wait()
  92. var aEq, bEq float64
  93. bZOneFieldMap := map[string]float64{}
  94. oneFieldMap := map[string]float64{}
  95. oneFieldEqMap := map[string]float64{}
  96. var aCount, aaCount, bCount, bbCount float64
  97. rowNum := 1
  98. for k, row := range rows {
  99. if k == 0 {
  100. continue
  101. }
  102. bZOneFieldMap[row[4]]++
  103. if row[4] != "" {
  104. aaCount++
  105. }
  106. if row[6] == "是" {
  107. bbCount++
  108. }
  109. obj := result[row[0]]
  110. if obj == nil {
  111. continue
  112. }
  113. a, b := obj["报价模式"], obj["中标联合体"]
  114. if a == "" && b == "否" {
  115. continue
  116. }
  117. if a != "" {
  118. if a == row[4] {
  119. aEq++
  120. oneFieldEqMap[row[4]]++
  121. }
  122. aCount++
  123. oneFieldMap[a.(string)]++
  124. }
  125. if b == "是" {
  126. if b == row[6] {
  127. bEq++
  128. }
  129. bCount++
  130. }
  131. if (a == "" || a == row[4]) && (b == "否" || b == row[6]) {
  132. continue
  133. }
  134. rowNum++
  135. cell, _ := excelize.ColumnNumberToName(1)
  136. f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, rowNum), row[0])
  137. cell, _ = excelize.ColumnNumberToName(2)
  138. f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, rowNum), row[1])
  139. cell, _ = excelize.ColumnNumberToName(3)
  140. f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, rowNum), row[4])
  141. cell, _ = excelize.ColumnNumberToName(4)
  142. f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, rowNum), a)
  143. cell, _ = excelize.ColumnNumberToName(5)
  144. f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, rowNum), row[6])
  145. cell, _ = excelize.ColumnNumberToName(6)
  146. f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, rowNum), b)
  147. }
  148. f.SaveAs("./对比结果.xlsx")
  149. countRows := float64(len(rows) - 1)
  150. oneFieldMsg := ""
  151. for k, v := range oneFieldMap {
  152. oneFieldMsg += fmt.Sprintf("报价模式-%s,总数:%.f,识别出:%.f,识别率:%.f%%,正确:%.f,正确率:%.2f%%", k, bZOneFieldMap[k], v, v/bZOneFieldMap[k]*100, oneFieldEqMap[k], oneFieldEqMap[k]/v*100) + "\n"
  153. }
  154. log.Println("总数", countRows, "\n",
  155. fmt.Sprintf("报价模式,总数:%.f,识别出:%.f,识别率:%.f%%,正确:%.f,正确率:%.2f%%", aaCount, aCount, aCount/aaCount*100, aEq, aEq/aCount*100), "\n",
  156. oneFieldMsg,
  157. fmt.Sprintf("中标联合体,总数:%.f,识别出:%.f,识别率:%.f%%,正确:%.f,正确率:%.2f%%", bbCount, bCount, bCount/bbCount*100, bEq, bEq/bCount*100), "\n",
  158. "")
  159. }