bak.txt 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470
  1. //fmt.Println("-------------------", len(compareABCD))
  2. //四个元素一致 [AB][AB][AB][AB]
  3. vm = []string{"A", "B"}
  4. for i := 0; i < 2; i++ {
  5. for j := 0; j < 2; j++ {
  6. for k := 0; k < 2; k++ {
  7. for m := 0; m < 2; m++ {
  8. key := vm[i] + vm[j] + vm[k] + vm[m]
  9. compareAB[key] = true
  10. //fmt.Println(key)
  11. }
  12. }
  13. }
  14. }
  15. fmt.Println("-------------------", len(compareAB))
  16. //---至少两个一致,其他可能不存在
  17. //[AB][ABD][AB][ABD]
  18. //[AB][ABD][ABD][AB]
  19. //[ABD][AB][ABD][AB]
  20. //[ABD][AB][AB][ABD]
  21. vm = []string{"A", "B"}
  22. vm2 := []string{"A", "B", "D"}
  23. for i := 0; i < 2; i++ {
  24. for j := 0; j < 3; j++ {
  25. for k := 0; k < 2; k++ {
  26. for m := 0; m < 3; m++ {
  27. key := vm[i] + vm2[j] + vm[k] + vm2[m]
  28. if !compareAB[key] {
  29. compareAB2D[key] = true
  30. //fmt.Println(key)
  31. }
  32. }
  33. }
  34. }
  35. }
  36. for i := 0; i < 2; i++ {
  37. for j := 0; j < 3; j++ {
  38. for k := 0; k < 3; k++ {
  39. for m := 0; m < 2; m++ {
  40. key := vm[i] + vm2[j] + vm2[k] + vm[m]
  41. if !compareAB[key] {
  42. compareAB2D[key] = true
  43. //fmt.Println(key)
  44. }
  45. }
  46. }
  47. }
  48. }
  49. for i := 0; i < 3; i++ {
  50. for j := 0; j < 2; j++ {
  51. for k := 0; k < 3; k++ {
  52. for m := 0; m < 2; m++ {
  53. key := vm2[i] + vm[j] + vm2[k] + vm[m]
  54. if !compareAB[key] {
  55. compareAB2D[key] = true
  56. //fmt.Println(key)
  57. }
  58. }
  59. }
  60. }
  61. }
  62. for i := 0; i < 3; i++ {
  63. for j := 0; j < 2; j++ {
  64. for k := 0; k < 2; k++ {
  65. for m := 0; m < 3; m++ {
  66. key := vm2[i] + vm[j] + vm[k] + vm2[m]
  67. if !compareAB[key] {
  68. compareAB2D[key] = true
  69. //fmt.Println(key)
  70. }
  71. }
  72. }
  73. }
  74. }
  75. //fmt.Println("-------------------", len(compareAB2D))
  76. //---至少一个一致,其他可能不存在
  77. //[ABD][ABD][ABD][ABD] //已经删除DDDD
  78. vm = []string{"A", "B", "D"}
  79. for i := 0; i < 3; i++ {
  80. for j := 0; j < 3; j++ {
  81. for k := 0; k < 3; k++ {
  82. for m := 0; m < 3; m++ {
  83. key := vm[i] + vm[j] + vm[k] + vm[m]
  84. if !compareAB[key] && !compareAB2D[key] && !compareNoPass[key] {
  85. compareABD[key] = true
  86. //fmt.Println(key)
  87. }
  88. }
  89. }
  90. }
  91. }
  92. //fmt.Println("-------------------", len(compareABD))
  93. //[AB][ABCD][AB][ABCD]
  94. //[AB][ABCD][ABCD][AB]
  95. //[ABCD][AB][ABCD][AB]
  96. //[ABCD][AB][AB][ABCD]
  97. vm = []string{"A", "B"}
  98. vm2 = []string{"A", "B", "C", "D"}
  99. for i := 0; i < 2; i++ {
  100. for j := 0; j < 4; j++ {
  101. for k := 0; k < 2; k++ {
  102. for m := 0; m < 4; m++ {
  103. key := vm[i] + vm2[j] + vm[k] + vm2[m]
  104. if !compareAB[key] && !compareAB2D[key] && !compareNoPass[key] && !compareABD[key] {
  105. compareAB2CD[key] = true
  106. //fmt.Println(key)
  107. }
  108. }
  109. }
  110. }
  111. }
  112. for i := 0; i < 2; i++ {
  113. for j := 0; j < 4; j++ {
  114. for k := 0; k < 4; k++ {
  115. for m := 0; m < 2; m++ {
  116. key := vm[i] + vm2[j] + vm2[k] + vm[m]
  117. if !compareAB[key] && !compareAB2D[key] && !compareNoPass[key] && !compareABD[key] {
  118. compareAB2CD[key] = true
  119. //fmt.Println(key)
  120. }
  121. }
  122. }
  123. }
  124. }
  125. for i := 0; i < 4; i++ {
  126. for j := 0; j < 2; j++ {
  127. for k := 0; k < 4; k++ {
  128. for m := 0; m < 2; m++ {
  129. key := vm2[i] + vm[j] + vm2[k] + vm[m]
  130. if !compareAB[key] && !compareAB2D[key] && !compareNoPass[key] && !compareABD[key] {
  131. compareAB2CD[key] = true
  132. //fmt.Println(key)
  133. }
  134. }
  135. }
  136. }
  137. }
  138. for i := 0; i < 4; i++ {
  139. for j := 0; j < 2; j++ {
  140. for k := 0; k < 2; k++ {
  141. for m := 0; m < 4; m++ {
  142. key := vm2[i] + vm[j] + vm[k] + vm2[m]
  143. if !compareAB[key] && !compareAB2D[key] && !compareNoPass[key] && !compareABD[key] {
  144. compareAB2CD[key] = true
  145. //fmt.Println(key)
  146. }
  147. }
  148. }
  149. }
  150. }
  151. //fmt.Println("-------------------", len(compareAB2CD))
  152. //[ABCD][ABCD][ABCD][ABCD] //已经删除[CD][CD][CD][CD] //这个要重点讨论
  153. vm = []string{"A", "B", "C", "D"}
  154. for i := 0; i < 4; i++ {
  155. for j := 0; j < 4; j++ {
  156. for k := 0; k < 4; k++ {
  157. for m := 0; m < 4; m++ {
  158. key := vm[i] + vm[j] + vm[k] + vm[m]
  159. if !compareAB[key] && !compareAB2D[key] && !compareABD[key] && !compareNoPass[key] && !compareAB2CD[key] {
  160. compareABCD[key] = true
  161. //fmt.Println(key)
  162. }
  163. }
  164. }
  165. }
  166. }
  167. //fmt.Println("-------------------", len(compareABCD))
  168. /*
  169. if compareNoPass[compareStr] {
  170. //[CD][CD][CD]
  171. //没有通过
  172. } else {
  173. compareProject.score = score
  174. compareProject.pos = k
  175. if compareAB[compareStr] || compareAB2D[compareStr] || compareAB2CD[compareStr] { //项目名称、项目编号相等 四个相等
  176. if compareBuyer != "C" { //采购单位相等或不存在
  177. if compareBuyer == "D" { //不存在
  178. if "AA" == compareCity && compareAgency != "C" && compareTime != "D" {
  179. if info.LenPN > 19 || info.LenPC > 12 || info.LenPTC > 12 {
  180. comRes1 = append(comRes1, compareProject)
  181. BFind = true
  182. } else {
  183. comRes2 = append(comRes2, compareProject)
  184. BFind = true
  185. }
  186. } else {
  187. if info.LenPN > 19 || info.LenPC > 12 || info.LenPTC > 12 {
  188. comRes2 = append(comRes2, compareProject)
  189. BFind = true
  190. } else if compareCity[1:1] != "C" && compareAgency != "C" && compareTime != "D" {
  191. comRes3 = append(comRes3, compareProject)
  192. BFind = true
  193. }
  194. }
  195. } else { //相等或包含
  196. comRes1 = append(comRes1, compareProject)
  197. BFind = true
  198. }
  199. } else { //采购单位不相等
  200. //省市 时间 代理机构
  201. if "AA" == compareCity && compareAgency != "D" && compareTime != "D" {
  202. if info.LenPN > 19 || info.LenPC > 12 || info.LenPTC > 12 {
  203. comRes1 = append(comRes1, compareProject)
  204. BFind = true
  205. } else {
  206. comRes2 = append(comRes2, compareProject)
  207. BFind = true
  208. }
  209. } else {
  210. if (compareCity[1:1] != "C" && compareAgency != "C" && compareTime != "D") && (info.LenPN > 19 || info.LenPC > 12 || info.LenPTC > 12) {
  211. comRes2 = append(comRes2, compareProject)
  212. BFind = true
  213. }
  214. }
  215. }
  216. //} else if compareAB2D[compareStr] { //至少有两个[AB]*[AB]*相等
  217. } else if compareABD[compareStr] { //至少有一个[ABD]相等
  218. if compareBuyer != "C" { //采购单位相等或不存在
  219. if compareBuyer == "D" { //不存在
  220. if "AA" == compareCity && compareAgency != "C" && compareTime != "D" {
  221. if (info.LenPN > 19) && (info.LenPC > 12 || info.LenPTC > 12) {
  222. comRes2 = append(comRes2, compareProject)
  223. BFind = true
  224. } else if info.LenPN > 19 || info.LenPC > 12 || info.LenPTC > 12 {
  225. comRes3 = append(comRes3, compareProject)
  226. BFind = true
  227. }
  228. } else {
  229. if (compareCity[1:1] != "C" && compareAgency != "C" && compareTime != "D") && (info.LenPN > 19 || info.LenPC > 12 || info.LenPTC > 12) {
  230. comRes3 = append(comRes3, compareProject)
  231. BFind = true
  232. }
  233. }
  234. } else { //相等或包含
  235. if (info.LenPN > 19) && (info.LenPC > 12 || info.LenPTC > 12) {
  236. comRes1 = append(comRes1, compareProject)
  237. BFind = true
  238. } else {
  239. comRes2 = append(comRes2, compareProject)
  240. BFind = true
  241. }
  242. }
  243. } else { //采购单位不相等
  244. //省市 时间 代理机构
  245. if "AA" == compareCity && compareAgency != "D" && compareTime != "D" {
  246. if (info.LenPN > 19) && (info.LenPC > 12 || info.LenPTC > 12) {
  247. comRes2 = append(comRes2, compareProject)
  248. BFind = true
  249. } else if info.LenPN > 19 || info.LenPC > 12 || info.LenPTC > 12 {
  250. comRes3 = append(comRes3, compareProject)
  251. BFind = true
  252. }
  253. } else {
  254. if (compareCity[1:1] != "C" && compareAgency != "C" && compareTime != "D") && (info.LenPN > 19) && (info.LenPC > 12 || info.LenPTC > 12) {
  255. comRes3 = append(comRes3, compareProject)
  256. BFind = true
  257. }
  258. }
  259. }
  260. } else if compareABCD[compareStr] { //有不相等的
  261. if compareBuyer != "C" { //采购单位相等或不存在
  262. if compareBuyer == "D" { //不存在
  263. if "AA" == compareCity && compareAgency != "C" && compareTime != "D" {
  264. if (info.LenPN > 21) && (info.LenPC > 14 || info.LenPTC > 14) {
  265. comRes2 = append(comRes2, compareProject)
  266. BFind = true
  267. } else if info.LenPN > 21 || info.LenPC > 14 || info.LenPTC > 14 {
  268. comRes3 = append(comRes3, compareProject)
  269. BFind = true
  270. }
  271. } else {
  272. if (compareCity[1:1] != "C" && compareAgency != "C" && compareTime != "D") && (info.LenPN > 21 || info.LenPC > 14 || info.LenPTC > 14) {
  273. comRes3 = append(comRes3, compareProject)
  274. BFind = true
  275. }
  276. }
  277. } else { //相等或包含
  278. if (info.LenPN > 21) && (info.LenPC > 14 || info.LenPTC > 14) {
  279. comRes1 = append(comRes1, compareProject)
  280. BFind = true
  281. } else {
  282. comRes2 = append(comRes2, compareProject)
  283. BFind = true
  284. }
  285. }
  286. } else { //采购单位不相等
  287. //省市 时间 代理机构
  288. if "AA" == compareCity && compareAgency != "D" && compareTime != "D" {
  289. if (info.LenPN > 24) && (info.LenPC > 16 || info.LenPTC > 16) {
  290. comRes2 = append(comRes2, compareProject)
  291. BFind = true
  292. } else if info.LenPN > 24 || info.LenPC > 16 || info.LenPTC > 16 {
  293. comRes3 = append(comRes3, compareProject)
  294. BFind = true
  295. }
  296. } else {
  297. if (compareCity[1:1] != "C" && compareAgency != "C" && compareTime != "D") && (info.LenPN > 24) && (info.LenPC > 16 || info.LenPTC > 16) {
  298. comRes3 = append(comRes3, compareProject)
  299. BFind = true
  300. }
  301. }
  302. }
  303. }
  304. }
  305. */
  306. // if !BFind {
  307. // //解锁
  308. // IDArr[k].Lock.Unlock()
  309. //
  310. /*
  311. if info.PTN != "" {
  312. if info.PTN == compareProject.PTN || info.PTN == compareProject.ProjectName {
  313. compareStr += "A"
  314. score += 4
  315. if len([]rune(info.PTN)) > 19 {
  316. score += 2
  317. }
  318. } else if compareProject.PTN != "" {
  319. if strings.Contains(info.PTN, compareProject.PTN) || strings.Contains(compareProject.PTN, info.PTN) {
  320. compareStr += "B"
  321. score += 3
  322. if len([]rune(info.PTN)) > 19 {
  323. score += 2
  324. }
  325. } else {
  326. compareStr += "C"
  327. }
  328. } else if compareProject.ProjectName != "" {
  329. if strings.Contains(info.PTN, compareProject.ProjectName) || strings.Contains(compareProject.ProjectName, info.PTN) {
  330. compareStr += "B"
  331. score += 3
  332. if len([]rune(info.PTN)) > 19 {
  333. score += 2
  334. }
  335. } else {
  336. compareStr += "C"
  337. }
  338. } else {
  339. compareStr += "D"
  340. }
  341. } else {
  342. compareStr += "D"
  343. }
  344. */
  345. if info.ProjectCode != "" {
  346. if info.ProjectCode == compareProject.ProjectCode {
  347. compareStr += "A"
  348. score += 4
  349. if len([]rune(info.ProjectCode)) > 12 {
  350. score += 2
  351. }
  352. } else if compareProject.ProjectCode != "" {
  353. if strings.Contains(info.ProjectCode, compareProject.ProjectCode) || strings.Contains(compareProject.ProjectCode, info.ProjectCode) {
  354. compareStr += "B"
  355. score += 3
  356. if len([]rune(info.ProjectCode)) > 12 {
  357. score += 2
  358. }
  359. } else {
  360. compareStr += "C"
  361. }
  362. } else {
  363. compareStr += "D"
  364. }
  365. } else {
  366. compareStr += "D"
  367. }
  368. if info.PTC != "" {
  369. if info.PTC == "" { //compareProject.PTC || info.PTC == compareProject.ProjectCode {
  370. compareStr += "A"
  371. score += 4
  372. if len([]rune(info.PTC)) > 12 {
  373. score += 2
  374. }
  375. } else if "" != "" {
  376. if strings.Contains(info.PTC, "") || strings.Contains("", info.PTC) {
  377. compareStr += "B"
  378. score += 3
  379. if len([]rune(info.PTC)) > 12 {
  380. score += 2
  381. }
  382. } else {
  383. compareStr += "C"
  384. }
  385. } else if compareProject.ProjectCode != "" {
  386. if strings.Contains(info.PTC, compareProject.ProjectCode) || strings.Contains(compareProject.ProjectCode, info.PTC) {
  387. compareStr += "B"
  388. score += 3
  389. if len([]rune(info.PTC)) > 12 {
  390. score += 2
  391. }
  392. } else {
  393. compareStr += "C"
  394. }
  395. } else {
  396. compareStr += "D"
  397. }
  398. } else {
  399. compareStr += "D"
  400. }
  401. if len(comRes1) > 0 {
  402. if len(comRes1) > 1 {
  403. sort.Slice(comRes1, func(i, j int) bool {
  404. return comRes1[i].score > comRes1[j].score
  405. })
  406. }
  407. UpdateProject(tmp, info, comRes1[0], 1, comStr)
  408. } else if len(comRes2) > 0 {
  409. if len(comRes2) > 1 {
  410. sort.Slice(comRes2, func(i, j int) bool {
  411. return comRes2[i].score > comRes2[j].score
  412. })
  413. }
  414. UpdateProject(tmp, info, comRes2[0], 2, comStr)
  415. } else if len(comRes3) > 0 {
  416. if len(comRes3) > 1 {
  417. sort.Slice(comRes3, func(i, j int) bool {
  418. return comRes3[i].score > comRes3[j].score
  419. })
  420. }
  421. UpdateProject(tmp, info, comRes3[0], 3, comStr)
  422. } else {
  423. //没有找到
  424. id := NewProject(tmp, info)
  425. t, _ := strconv.ParseInt(id[0:8], 16, 64)
  426. AllMapLock.Lock()
  427. AllIdsMap[int(t)%idsMapSize][id] = &ID{Id: id, lastTime: info.Publishtime}
  428. AllMapLock.Unlock()
  429. for _, m := range idsMap {
  430. m.Key.Arr = append(m.Key.Arr, id)
  431. }
  432. }
  433. for k, v := range str {
  434. if v != "" && repeat[v] == nil {
  435. index := len(v) % size
  436. m := AllMap[index]
  437. m.Lock.Lock()
  438. ids := m.Map[v]
  439. if ids == nil {
  440. ids = &Key{Arr: []string{}}
  441. m.Map[v] = ids
  442. }
  443. //所有键一样的对象加锁
  444. ids.Lock.Lock()
  445. m.Lock.Unlock()
  446. repeat[v] = &IdsMapAndIndex{ids, k}
  447. }
  448. }