main_test.go 4.6 KB

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