//fmt.Println("-------------------", len(compareABCD)) //四个元素一致 [AB][AB][AB][AB] vm = []string{"A", "B"} for i := 0; i < 2; i++ { for j := 0; j < 2; j++ { for k := 0; k < 2; k++ { for m := 0; m < 2; m++ { key := vm[i] + vm[j] + vm[k] + vm[m] compareAB[key] = true //fmt.Println(key) } } } } fmt.Println("-------------------", len(compareAB)) //---至少两个一致,其他可能不存在 //[AB][ABD][AB][ABD] //[AB][ABD][ABD][AB] //[ABD][AB][ABD][AB] //[ABD][AB][AB][ABD] vm = []string{"A", "B"} vm2 := []string{"A", "B", "D"} for i := 0; i < 2; i++ { for j := 0; j < 3; j++ { for k := 0; k < 2; k++ { for m := 0; m < 3; m++ { key := vm[i] + vm2[j] + vm[k] + vm2[m] if !compareAB[key] { compareAB2D[key] = true //fmt.Println(key) } } } } } for i := 0; i < 2; i++ { for j := 0; j < 3; j++ { for k := 0; k < 3; k++ { for m := 0; m < 2; m++ { key := vm[i] + vm2[j] + vm2[k] + vm[m] if !compareAB[key] { compareAB2D[key] = true //fmt.Println(key) } } } } } for i := 0; i < 3; i++ { for j := 0; j < 2; j++ { for k := 0; k < 3; k++ { for m := 0; m < 2; m++ { key := vm2[i] + vm[j] + vm2[k] + vm[m] if !compareAB[key] { compareAB2D[key] = true //fmt.Println(key) } } } } } for i := 0; i < 3; i++ { for j := 0; j < 2; j++ { for k := 0; k < 2; k++ { for m := 0; m < 3; m++ { key := vm2[i] + vm[j] + vm[k] + vm2[m] if !compareAB[key] { compareAB2D[key] = true //fmt.Println(key) } } } } } //fmt.Println("-------------------", len(compareAB2D)) //---至少一个一致,其他可能不存在 //[ABD][ABD][ABD][ABD] //已经删除DDDD vm = []string{"A", "B", "D"} for i := 0; i < 3; i++ { for j := 0; j < 3; j++ { for k := 0; k < 3; k++ { for m := 0; m < 3; m++ { key := vm[i] + vm[j] + vm[k] + vm[m] if !compareAB[key] && !compareAB2D[key] && !compareNoPass[key] { compareABD[key] = true //fmt.Println(key) } } } } } //fmt.Println("-------------------", len(compareABD)) //[AB][ABCD][AB][ABCD] //[AB][ABCD][ABCD][AB] //[ABCD][AB][ABCD][AB] //[ABCD][AB][AB][ABCD] vm = []string{"A", "B"} vm2 = []string{"A", "B", "C", "D"} for i := 0; i < 2; i++ { for j := 0; j < 4; j++ { for k := 0; k < 2; k++ { for m := 0; m < 4; m++ { key := vm[i] + vm2[j] + vm[k] + vm2[m] if !compareAB[key] && !compareAB2D[key] && !compareNoPass[key] && !compareABD[key] { compareAB2CD[key] = true //fmt.Println(key) } } } } } for i := 0; i < 2; i++ { for j := 0; j < 4; j++ { for k := 0; k < 4; k++ { for m := 0; m < 2; m++ { key := vm[i] + vm2[j] + vm2[k] + vm[m] if !compareAB[key] && !compareAB2D[key] && !compareNoPass[key] && !compareABD[key] { compareAB2CD[key] = true //fmt.Println(key) } } } } } for i := 0; i < 4; i++ { for j := 0; j < 2; j++ { for k := 0; k < 4; k++ { for m := 0; m < 2; m++ { key := vm2[i] + vm[j] + vm2[k] + vm[m] if !compareAB[key] && !compareAB2D[key] && !compareNoPass[key] && !compareABD[key] { compareAB2CD[key] = true //fmt.Println(key) } } } } } for i := 0; i < 4; i++ { for j := 0; j < 2; j++ { for k := 0; k < 2; k++ { for m := 0; m < 4; m++ { key := vm2[i] + vm[j] + vm[k] + vm2[m] if !compareAB[key] && !compareAB2D[key] && !compareNoPass[key] && !compareABD[key] { compareAB2CD[key] = true //fmt.Println(key) } } } } } //fmt.Println("-------------------", len(compareAB2CD)) //[ABCD][ABCD][ABCD][ABCD] //已经删除[CD][CD][CD][CD] //这个要重点讨论 vm = []string{"A", "B", "C", "D"} for i := 0; i < 4; i++ { for j := 0; j < 4; j++ { for k := 0; k < 4; k++ { for m := 0; m < 4; m++ { key := vm[i] + vm[j] + vm[k] + vm[m] if !compareAB[key] && !compareAB2D[key] && !compareABD[key] && !compareNoPass[key] && !compareAB2CD[key] { compareABCD[key] = true //fmt.Println(key) } } } } } //fmt.Println("-------------------", len(compareABCD)) /* if compareNoPass[compareStr] { //[CD][CD][CD] //没有通过 } else { compareProject.score = score compareProject.pos = k if compareAB[compareStr] || compareAB2D[compareStr] || compareAB2CD[compareStr] { //项目名称、项目编号相等 四个相等 if compareBuyer != "C" { //采购单位相等或不存在 if compareBuyer == "D" { //不存在 if "AA" == compareCity && compareAgency != "C" && compareTime != "D" { if info.LenPN > 19 || info.LenPC > 12 || info.LenPTC > 12 { comRes1 = append(comRes1, compareProject) BFind = true } else { comRes2 = append(comRes2, compareProject) BFind = true } } else { if info.LenPN > 19 || info.LenPC > 12 || info.LenPTC > 12 { comRes2 = append(comRes2, compareProject) BFind = true } else if compareCity[1:1] != "C" && compareAgency != "C" && compareTime != "D" { comRes3 = append(comRes3, compareProject) BFind = true } } } else { //相等或包含 comRes1 = append(comRes1, compareProject) BFind = true } } else { //采购单位不相等 //省市 时间 代理机构 if "AA" == compareCity && compareAgency != "D" && compareTime != "D" { if info.LenPN > 19 || info.LenPC > 12 || info.LenPTC > 12 { comRes1 = append(comRes1, compareProject) BFind = true } else { comRes2 = append(comRes2, compareProject) BFind = true } } else { if (compareCity[1:1] != "C" && compareAgency != "C" && compareTime != "D") && (info.LenPN > 19 || info.LenPC > 12 || info.LenPTC > 12) { comRes2 = append(comRes2, compareProject) BFind = true } } } //} else if compareAB2D[compareStr] { //至少有两个[AB]*[AB]*相等 } else if compareABD[compareStr] { //至少有一个[ABD]相等 if compareBuyer != "C" { //采购单位相等或不存在 if compareBuyer == "D" { //不存在 if "AA" == compareCity && compareAgency != "C" && compareTime != "D" { if (info.LenPN > 19) && (info.LenPC > 12 || info.LenPTC > 12) { comRes2 = append(comRes2, compareProject) BFind = true } else if info.LenPN > 19 || info.LenPC > 12 || info.LenPTC > 12 { comRes3 = append(comRes3, compareProject) BFind = true } } else { if (compareCity[1:1] != "C" && compareAgency != "C" && compareTime != "D") && (info.LenPN > 19 || info.LenPC > 12 || info.LenPTC > 12) { comRes3 = append(comRes3, compareProject) BFind = true } } } else { //相等或包含 if (info.LenPN > 19) && (info.LenPC > 12 || info.LenPTC > 12) { comRes1 = append(comRes1, compareProject) BFind = true } else { comRes2 = append(comRes2, compareProject) BFind = true } } } else { //采购单位不相等 //省市 时间 代理机构 if "AA" == compareCity && compareAgency != "D" && compareTime != "D" { if (info.LenPN > 19) && (info.LenPC > 12 || info.LenPTC > 12) { comRes2 = append(comRes2, compareProject) BFind = true } else if info.LenPN > 19 || info.LenPC > 12 || info.LenPTC > 12 { comRes3 = append(comRes3, compareProject) BFind = true } } else { if (compareCity[1:1] != "C" && compareAgency != "C" && compareTime != "D") && (info.LenPN > 19) && (info.LenPC > 12 || info.LenPTC > 12) { comRes3 = append(comRes3, compareProject) BFind = true } } } } else if compareABCD[compareStr] { //有不相等的 if compareBuyer != "C" { //采购单位相等或不存在 if compareBuyer == "D" { //不存在 if "AA" == compareCity && compareAgency != "C" && compareTime != "D" { if (info.LenPN > 21) && (info.LenPC > 14 || info.LenPTC > 14) { comRes2 = append(comRes2, compareProject) BFind = true } else if info.LenPN > 21 || info.LenPC > 14 || info.LenPTC > 14 { comRes3 = append(comRes3, compareProject) BFind = true } } else { if (compareCity[1:1] != "C" && compareAgency != "C" && compareTime != "D") && (info.LenPN > 21 || info.LenPC > 14 || info.LenPTC > 14) { comRes3 = append(comRes3, compareProject) BFind = true } } } else { //相等或包含 if (info.LenPN > 21) && (info.LenPC > 14 || info.LenPTC > 14) { comRes1 = append(comRes1, compareProject) BFind = true } else { comRes2 = append(comRes2, compareProject) BFind = true } } } else { //采购单位不相等 //省市 时间 代理机构 if "AA" == compareCity && compareAgency != "D" && compareTime != "D" { if (info.LenPN > 24) && (info.LenPC > 16 || info.LenPTC > 16) { comRes2 = append(comRes2, compareProject) BFind = true } else if info.LenPN > 24 || info.LenPC > 16 || info.LenPTC > 16 { comRes3 = append(comRes3, compareProject) BFind = true } } else { if (compareCity[1:1] != "C" && compareAgency != "C" && compareTime != "D") && (info.LenPN > 24) && (info.LenPC > 16 || info.LenPTC > 16) { comRes3 = append(comRes3, compareProject) BFind = true } } } } } */ // if !BFind { // //解锁 // IDArr[k].Lock.Unlock() // /* if info.PTN != "" { if info.PTN == compareProject.PTN || info.PTN == compareProject.ProjectName { compareStr += "A" score += 4 if len([]rune(info.PTN)) > 19 { score += 2 } } else if compareProject.PTN != "" { if strings.Contains(info.PTN, compareProject.PTN) || strings.Contains(compareProject.PTN, info.PTN) { compareStr += "B" score += 3 if len([]rune(info.PTN)) > 19 { score += 2 } } else { compareStr += "C" } } else if compareProject.ProjectName != "" { if strings.Contains(info.PTN, compareProject.ProjectName) || strings.Contains(compareProject.ProjectName, info.PTN) { compareStr += "B" score += 3 if len([]rune(info.PTN)) > 19 { score += 2 } } else { compareStr += "C" } } else { compareStr += "D" } } else { compareStr += "D" } */ if info.ProjectCode != "" { if info.ProjectCode == compareProject.ProjectCode { compareStr += "A" score += 4 if len([]rune(info.ProjectCode)) > 12 { score += 2 } } else if compareProject.ProjectCode != "" { if strings.Contains(info.ProjectCode, compareProject.ProjectCode) || strings.Contains(compareProject.ProjectCode, info.ProjectCode) { compareStr += "B" score += 3 if len([]rune(info.ProjectCode)) > 12 { score += 2 } } else { compareStr += "C" } } else { compareStr += "D" } } else { compareStr += "D" } if info.PTC != "" { if info.PTC == "" { //compareProject.PTC || info.PTC == compareProject.ProjectCode { compareStr += "A" score += 4 if len([]rune(info.PTC)) > 12 { score += 2 } } else if "" != "" { if strings.Contains(info.PTC, "") || strings.Contains("", info.PTC) { compareStr += "B" score += 3 if len([]rune(info.PTC)) > 12 { score += 2 } } else { compareStr += "C" } } else if compareProject.ProjectCode != "" { if strings.Contains(info.PTC, compareProject.ProjectCode) || strings.Contains(compareProject.ProjectCode, info.PTC) { compareStr += "B" score += 3 if len([]rune(info.PTC)) > 12 { score += 2 } } else { compareStr += "C" } } else { compareStr += "D" } } else { compareStr += "D" } 、 if len(comRes1) > 0 { if len(comRes1) > 1 { sort.Slice(comRes1, func(i, j int) bool { return comRes1[i].score > comRes1[j].score }) } UpdateProject(tmp, info, comRes1[0], 1, comStr) } else if len(comRes2) > 0 { if len(comRes2) > 1 { sort.Slice(comRes2, func(i, j int) bool { return comRes2[i].score > comRes2[j].score }) } UpdateProject(tmp, info, comRes2[0], 2, comStr) } else if len(comRes3) > 0 { if len(comRes3) > 1 { sort.Slice(comRes3, func(i, j int) bool { return comRes3[i].score > comRes3[j].score }) } UpdateProject(tmp, info, comRes3[0], 3, comStr) } else { //没有找到 id := NewProject(tmp, info) t, _ := strconv.ParseInt(id[0:8], 16, 64) AllMapLock.Lock() AllIdsMap[int(t)%idsMapSize][id] = &ID{Id: id, lastTime: info.Publishtime} AllMapLock.Unlock() for _, m := range idsMap { m.Key.Arr = append(m.Key.Arr, id) } } for k, v := range str { if v != "" && repeat[v] == nil { index := len(v) % size m := AllMap[index] m.Lock.Lock() ids := m.Map[v] if ids == nil { ids = &Key{Arr: []string{}} m.Map[v] = ids } //所有键一样的对象加锁 ids.Lock.Lock() m.Lock.Unlock() repeat[v] = &IdsMapAndIndex{ids, k} } }