tool.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package tool
  2. import (
  3. "data_ai/extract"
  4. "data_ai/ul"
  5. log "github.com/donnie4w/go-logger/logger"
  6. "sync"
  7. "time"
  8. )
  9. // 工具修正程序
  10. func StartToolInfo() {
  11. log.Debug("工具开始大模型修正数据······")
  12. q := map[string]interface{}{}
  13. pool_mgo := make(chan bool, ul.Reading)
  14. wg_mgo := &sync.WaitGroup{}
  15. sess := ul.SourceMgo.GetMgoConn()
  16. defer ul.SourceMgo.DestoryMongoConn(sess)
  17. total, isok := 0, 0
  18. it := sess.DB(ul.SourceMgo.DbName).C(ul.Ext_Name).Find(&q).Sort("_id").Iter()
  19. for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
  20. if total%100 == 0 {
  21. log.Debug("cur index ", total)
  22. }
  23. isok++
  24. pool_mgo <- true
  25. wg_mgo.Add(1)
  26. go func(tmp map[string]interface{}) {
  27. defer func() {
  28. <-pool_mgo
  29. wg_mgo.Done()
  30. }()
  31. u_id, s_id := "", false
  32. if sid, bid := tmp["_id"].(string); bid {
  33. s_id = true
  34. u_id = sid
  35. } else {
  36. u_id = ul.BsonTOStringId(tmp["_id"])
  37. }
  38. data := extract.ResolveInfo(tmp, u_id)
  39. if len(data) > 0 && u_id != "" {
  40. //更新-
  41. update_info := make(map[string]interface{}, 0)
  42. update_info["ai_zhipu"] = data
  43. tmp["ai_zhipu"] = data
  44. //是否删除
  45. is_unset := ul.ChooseCheckDataAI(tmp, &update_info)
  46. if update_info["com_package"] == nil { //构建单包信息···
  47. com_package := ul.CreatSingleFieldInfo(tmp, update_info)
  48. update_info["com_package"] = com_package
  49. }
  50. //补充规则大全····
  51. getReplenishRules(tmp, update_info)
  52. //最终单位修正与选取
  53. getTheBestUnit(tmp, update_info)
  54. //校验金额与折扣率(删除金额)
  55. un_bid := getVerifyBidDiscount(tmp, update_info)
  56. //校验是否科学计数法影响金额
  57. getScientificNotation(tmp, update_info)
  58. //最终更新
  59. if len(update_info) > 0 {
  60. if s_id {
  61. ul.SourceMgo.UpdateStrId(ul.Ext_Name, u_id, map[string]interface{}{
  62. "$set": update_info,
  63. })
  64. } else {
  65. ul.SourceMgo.UpdateById(ul.Ext_Name, u_id, map[string]interface{}{
  66. "$set": update_info,
  67. })
  68. }
  69. }
  70. if is_unset {
  71. if s_id {
  72. ul.SourceMgo.UpdateStrId(ul.Ext_Name, u_id, map[string]interface{}{
  73. "$unset": ul.Unset_Check,
  74. })
  75. } else {
  76. ul.SourceMgo.UpdateById(ul.Ext_Name, u_id, map[string]interface{}{
  77. "$unset": ul.Unset_Check,
  78. })
  79. }
  80. }
  81. if un_bid && !is_unset {
  82. if s_id {
  83. ul.SourceMgo.UpdateStrId(ul.Ext_Name, u_id, map[string]interface{}{
  84. "$unset": map[string]interface{}{"bidamount": 1},
  85. })
  86. } else {
  87. ul.SourceMgo.UpdateById(ul.Ext_Name, u_id, map[string]interface{}{
  88. "$unset": map[string]interface{}{"bidamount": 1},
  89. })
  90. }
  91. }
  92. }
  93. }(tmp)
  94. tmp = make(map[string]interface{})
  95. }
  96. wg_mgo.Wait()
  97. log.Debug("ai is over ...")
  98. }
  99. // 测试验证单条工具更新···
  100. func TestToolSingleInfo(name string, tmpid string) {
  101. log.Debug("测试单条数据数据···")
  102. now := time.Now().Unix()
  103. tmp := ul.BidMgo.FindById(name, tmpid)
  104. if len(tmp) == 0 || tmp == nil {
  105. log.Debug("未查询到数据...", tmpid)
  106. return
  107. }
  108. u_id := ul.BsonTOStringId(tmp["_id"])
  109. data := extract.ResolveInfo(tmp, u_id)
  110. if len(data) > 0 || u_id == "" {
  111. tmp["ai_zhipu"] = data
  112. }
  113. log.Debug("耗时···", time.Now().Unix()-now)
  114. }