weightFusionMethod.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. package main
  2. import (
  3. qu "qfw/util"
  4. "reflect"
  5. "strconv"
  6. )
  7. //处理-重复附件数据
  8. func dealWithRepeatAttachData(attach map[string]interface{},data map[string]interface{}) bool {
  9. /*
  10. "attach_text" : {
  11. "1" : {
  12. "0" : {
  13. "file_name" : "政采贷融资.doc",
  14. "attach_url" : "d5ca0944-6af1-11eb-a8bb-0242ac120002"
  15. }
  16. },
  17. "0" : {
  18. "0" : {
  19. "file_name" : "01永嘉县人民医院发光免疫试剂采购及设备租赁项目公开招标文件(电子招标).doc",
  20. "attach_url" : "7827b2d4-6adb-11eb-bd40-0242ac120002"
  21. }
  22. },
  23. "3" : { //data
  24. "0" : {
  25. "file_name" : "政采贷融资.doc",
  26. "attach_url" : "d5ca0944-6af1-11eb-a8bb-0242ac120002"
  27. }
  28. },
  29. },
  30. */
  31. //重复返回 true
  32. for _,sourceValue := range attach{
  33. //处理此结构数据
  34. new_sourceArr := dealWithSpecialStructAttachData(*qu.ObjToMap(sourceValue))
  35. new_dataArr := dealWithSpecialStructAttachData(data)
  36. if judgeArrIsTheSame(new_sourceArr,new_dataArr) { //相同
  37. return true
  38. }
  39. }
  40. return false
  41. }
  42. //处理-特殊结构体-附件数据
  43. func dealWithSpecialStructAttachData(data map[string]interface{}) []map[string]string {
  44. arr:=make([]map[string]string,0)
  45. //sourceValue - data 平级
  46. /*
  47. "1" : {
  48. "0" : {
  49. "file_name" : "政采贷融资.doc",
  50. "attach_url" : "d5ca0944-6af1-11eb-a8bb-0242ac120002"
  51. }
  52. },
  53. */
  54. for _,v:=range data {
  55. if dict,isOK := v.(map[string]interface{});isOK {
  56. file_name:=qu.ObjToString(dict["file_name"])
  57. attach_url:=qu.ObjToString(dict["attach_url"])
  58. arr = append(arr, map[string]string{"file_name":file_name,"attach_url":attach_url})
  59. }
  60. }
  61. return arr
  62. }
  63. //判断数组-结构是否相同
  64. func judgeArrIsTheSame(arr1 []map[string]string,arr2 []map[string]string) bool {
  65. if len(arr1)!=len(arr2) {
  66. return false
  67. }
  68. for _,v := range arr1 {
  69. isOK:=false
  70. for _,v1:=range arr2 {
  71. if v["file_name"]==v1["file_name"] && v["attach_url"]==v1["attach_url"] {
  72. isOK = true
  73. break
  74. }
  75. }
  76. if !isOK {//不完全一致
  77. return false
  78. }
  79. }
  80. return true
  81. }
  82. //处理时间方法
  83. func (weight *weightDataMap)dealWithTimeData(key string) (int,int) {
  84. saveids:=weight.saveids
  85. data:=weight.data
  86. timeArr := make([]int,0)
  87. for _,v:=range saveids{
  88. timeArr = append(timeArr,qu.IntAll(data[v].data[key]))
  89. }
  90. //最小 最大排序方法
  91. return sortTimeArrMethod(timeArr)
  92. }
  93. //时间排序方法 小 → 大
  94. func sortTimeArrMethod(arr []int) (int,int) {
  95. for i := 0; i < len(arr); i++ {
  96. for j := i + 1; j < len(arr); j++ {
  97. if arr[i] > arr[j] {
  98. arr[i], arr[j] = arr[j], arr[i]
  99. }
  100. }
  101. }
  102. indexEarly,indexLately := 0,len(arr)-1
  103. return arr[indexEarly],arr[indexLately]
  104. }
  105. //返回true 需要融合的字段
  106. func judgeIsFusionKey(key string) bool {
  107. s_dict := *qu.ObjToMap(fusionAllKey["String"])
  108. i_dict := *qu.ObjToMap(fusionAllKey["Int"])
  109. f_dict := *qu.ObjToMap(fusionAllKey["Float"])
  110. if s_dict[key]!=nil || i_dict[key]!=nil || f_dict[key]!=nil {
  111. return true
  112. }
  113. return false
  114. }
  115. func judgeIsEffectiveData(value interface{},key string) bool {
  116. //指定字段处理
  117. if key=="area" {
  118. if qu.ObjToString(value) == "全国" || qu.ObjToString(value) == "" {
  119. return false
  120. }else {
  121. return true
  122. }
  123. }
  124. if key=="buyeraddr"||key=="agencyaddr"||key=="winneraddr" {
  125. if qu.ObjToString(value) == "无" || qu.ObjToString(value) == "" {
  126. return false
  127. }else {
  128. return true
  129. }
  130. }
  131. //int float 类型
  132. valueType := reflect.ValueOf(value).Kind()
  133. if valueType==reflect.Int || valueType==reflect.Int32 || valueType==reflect.Int64 ||
  134. valueType==reflect.Int8 || valueType==reflect.Int16||valueType==reflect.Float32||
  135. valueType==reflect.Float64{
  136. if key=="bidopentime" || key=="bidamount" || key=="budget" {
  137. if qu.Float64All(value) == 0.0 {
  138. return false
  139. }
  140. }
  141. return true
  142. }
  143. //bool类型处理
  144. if valueType==reflect.Bool {
  145. return true
  146. }
  147. /* Array Chan Map Slice String*/
  148. valueLen := reflect.ValueOf(value).Len()
  149. if valueLen>0 {
  150. return true
  151. }else {
  152. return false
  153. }
  154. }
  155. //判断是否在当前id段落
  156. func judgeIsCurIds (gtid string,lteid string,curid string) bool {
  157. gt_time, _ := strconv.ParseInt(gtid[:8], 16, 64)
  158. lte_time, _ := strconv.ParseInt(lteid[:8], 16, 64)
  159. cur_time, _ := strconv.ParseInt(curid[:8], 16, 64)
  160. if cur_time>gt_time&&cur_time<=lte_time {
  161. return true
  162. }
  163. return false
  164. }