瀏覽代碼

去重优化

apple 5 年之前
父節點
當前提交
ce4a2cd5bf

+ 4 - 0
udpfilterdup/.idea/encodings.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" addBOMForNewFiles="with NO BOM" />
+</project>

+ 6 - 0
udpfilterdup/.idea/misc.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="JavaScriptSettings">
+    <option name="languageLevel" value="ES6" />
+  </component>
+</project>

+ 8 - 0
udpfilterdup/.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/udpfilterdup.iml" filepath="$PROJECT_DIR$/.idea/udpfilterdup.iml" />
+    </modules>
+  </component>
+</project>

+ 8 - 0
udpfilterdup/.idea/udpfilterdup.iml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 6 - 0
udpfilterdup/.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
+  </component>
+</project>

+ 332 - 0
udpfilterdup/.idea/workspace.xml

@@ -0,0 +1,332 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="21f7f4f0-2e1b-4101-be99-3daa1d759f76" name="默认更改列表" comment="">
+      <change beforePath="$PROJECT_DIR$/../.idea/vcs.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../.idea/vcs.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/PuerkitoBio.zip" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/PuerkitoBio/goquery" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/PuerkitoBio/goquery" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/dlclark/regexp2" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/dlclark/regexp2" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/dlclark/regexp2.zip" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/dlclark/regexp2.zip" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/gin-contrib/sse" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/gin-contrib/sse" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/go-ego.zip" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/go-ego/gse" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/go-ego/gse" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/conformance/Makefile" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/conformance/Makefile" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/conformance/conformance.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/conformance/conformance.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/conformance/conformance.sh" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/conformance/conformance.sh" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/conformance/failure_list_go.txt" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/conformance/failure_list_go.txt" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/conformance/internal/conformance_proto/conformance.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/conformance/internal/conformance_proto/conformance.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/conformance/internal/conformance_proto/conformance.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/conformance/internal/conformance_proto/conformance.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/conformance/test.sh" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/conformance/test.sh" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/descriptor/descriptor.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/descriptor/descriptor.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/descriptor/descriptor_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/descriptor/descriptor_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/jsonpb/jsonpb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/jsonpb/jsonpb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/jsonpb/jsonpb_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/jsonpb/jsonpb_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/all_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/all_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/any_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/any_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/clone.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/clone.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/clone_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/clone_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/decode.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/decode.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/decode_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/decode_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/discard.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/discard.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/discard_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/discard_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/encode.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/encode.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/encode_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/encode_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/equal.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/equal.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/equal_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/equal_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/extensions.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/extensions.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/extensions_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/extensions_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/lib.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/lib.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/map_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/map_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/message_set.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/message_set.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/message_set_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/message_set_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/pointer_reflect.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/pointer_reflect.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/pointer_unsafe.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/pointer_unsafe.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/properties.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/properties.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/proto3_proto/proto3.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/proto3_proto/proto3.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/proto3_proto/proto3.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/proto3_proto/proto3.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/proto3_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/proto3_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/size2_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/size2_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/size_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/size_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/table_marshal.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/table_marshal.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/table_merge.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/table_merge.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/table_unmarshal.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/table_unmarshal.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/test_proto/test.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/test_proto/test.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/test_proto/test.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/test_proto/test.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/text.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/text.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/text_parser.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/text_parser.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/text_parser_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/text_parser_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/text_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/proto/text_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/doc.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/doc.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/generator/generator.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/generator/generator.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/generator/internal/remap/remap.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/generator/internal/remap/remap.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/generator/internal/remap/remap_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/generator/internal/remap/remap_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/generator/name_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/generator/name_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/golden_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/golden_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/link_grpc.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/link_grpc.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/main.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/main.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.golden" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.golden" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/deprecated/deprecated.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/deprecated/deprecated.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/deprecated/deprecated.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/deprecated/deprecated.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_base/extension_base.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_base/extension_base.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_base/extension_base.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_base/extension_base.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra/extension_extra.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra/extension_extra.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra/extension_extra.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra/extension_extra.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_user/extension_user.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_user/extension_user.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_user/extension_user.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/extension_user/extension_user.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/grpc/grpc.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/grpc/grpc.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/grpc/grpc.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/grpc/grpc.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/a.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/a.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/a.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/a.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/b.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/b.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/b.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/b.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/a.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/a.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/a.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/a.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/b.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/b.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/b.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public/sub/b.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/import_public_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/fmt/m.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/fmt/m.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/fmt/m.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/fmt/m.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1/m1.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1/m1.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1/m2.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1/m2.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1/m2.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1/m2.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2/m3.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2/m3.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2/m3.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2/m3.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2/m4.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2/m4.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2/m4.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2/m4.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1/m1.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1/m1.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1/m1.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1/m1.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1/m2.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1/m2.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1/m2.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1/m2.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_a1m1.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_a1m1.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_a1m1.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_a1m1.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_a1m2.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_a1m2.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_a1m2.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_a1m2.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_all.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_all.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_all.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_import_all.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/main_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/main_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi1.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi1.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi1.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi1.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi2.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi2.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi2.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi2.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi3.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi3.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi3.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi3.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/proto3/proto3.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/proto3/proto3.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/proto3/proto3.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/protoc-gen-go/testdata/proto3/proto3.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/any.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/any.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/any/any.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/any/any.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/any/any.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/any/any.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/any_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/any_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/doc.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/doc.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/duration.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/duration.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/duration/duration.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/duration/duration.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/duration/duration.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/duration/duration.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/duration_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/duration_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/empty/empty.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/empty/empty.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/empty/empty.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/empty/empty.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/struct/struct.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/struct/struct.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/struct/struct.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/struct/struct.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/timestamp.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/timestamp.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/timestamp_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/timestamp_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/wrappers/wrappers.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/wrappers/wrappers.pb.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/wrappers/wrappers.proto" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/ptypes/wrappers/wrappers.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/golang/protobuf/regenerate.sh" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/golang/protobuf/regenerate.sh" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/gorilla/context" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/gorilla/context" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/gorilla/securecookie" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/gorilla/securecookie" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/gorilla/sessions" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/gorilla/sessions" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/mattn/go-isatty" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/mattn/go-isatty" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/quasoft/memstore" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/quasoft/memstore" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/0doc.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/0doc.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/README.md" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/binc.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/binc.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/cbor.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/cbor.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/cbor_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/cbor_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/codec_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/codec_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/codecgen/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/codecgen/README.md" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/codecgen/gen.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/codecgen/gen.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/codecgen/z.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/codecgen/z.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/decode.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/decode.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/encode.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/encode.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/fast-path.generated.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/fast-path.generated.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/fast-path.go.tmpl" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/fast-path.go.tmpl" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/fast-path.not.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/fast-path.not.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/gen-dec-array.go.tmpl" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/gen-dec-array.go.tmpl" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/gen-dec-map.go.tmpl" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/gen-dec-map.go.tmpl" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/gen-enc-chan.go.tmpl" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/gen-enc-chan.go.tmpl" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/gen-helper.generated.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/gen-helper.generated.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/gen-helper.go.tmpl" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/gen-helper.go.tmpl" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/gen.generated.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/gen.generated.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/gen.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/gen.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_arrayof_gte_go15.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_arrayof_gte_go15.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_arrayof_lt_go15.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_arrayof_lt_go15.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_makemap_gte_go19.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_makemap_gte_go19.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_makemap_lt_go19.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_makemap_lt_go19.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_unexportedembeddedptr_gte_go110.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_unexportedembeddedptr_gte_go110.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_unexportedembeddedptr_lt_go110.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_unexportedembeddedptr_lt_go110.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_unsupported_lt_go14.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_unsupported_lt_go14.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_vendor_eq_go15.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_vendor_eq_go15.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_vendor_eq_go16.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_vendor_eq_go16.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_vendor_gte_go17.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_vendor_gte_go17.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_vendor_lt_go15.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/goversion_vendor_lt_go15.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/helper.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/helper.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/helper_internal.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/helper_internal.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/helper_not_unsafe.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/helper_not_unsafe.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/helper_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/helper_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/helper_unsafe.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/helper_unsafe.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/json.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/json.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/mammoth-test.go.tmpl" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/mammoth-test.go.tmpl" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/mammoth2-test.go.tmpl" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/mammoth2-test.go.tmpl" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/mammoth2_codecgen_generated_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/mammoth2_codecgen_generated_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/mammoth2_generated_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/mammoth2_generated_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/mammoth_generated_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/mammoth_generated_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/msgpack.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/msgpack.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/py_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/py_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/rpc.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/rpc.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/shared_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/shared_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/simple.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/simple.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/test-cbor-goldens.json" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/test-cbor-goldens.json" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/test.py" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/test.py" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/values_flex_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/values_flex_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/values_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/values_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/xml.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/xml.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/z_all_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/../src/github.com/ugorji/go/codec/z_all_test.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/gopkg.in/go-playground/validator.v8" beforeDir="false" afterPath="$PROJECT_DIR$/../src/gopkg.in/go-playground/validator.v8" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/gopkg.in/mgo.v2" beforeDir="false" afterPath="$PROJECT_DIR$/../src/gopkg.in/mgo.v2" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/gopkg.in/natefinch/lumberjack.v2" beforeDir="false" afterPath="$PROJECT_DIR$/../src/gopkg.in/natefinch/lumberjack.v2" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../src/gopkg.in/yaml.v2" beforeDir="false" afterPath="$PROJECT_DIR$/../src/gopkg.in/yaml.v2" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/config.json" beforeDir="false" afterPath="$PROJECT_DIR$/src/config.json" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/datamap.go" beforeDir="false" afterPath="$PROJECT_DIR$/src/datamap.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main.go" beforeDir="false" afterPath="$PROJECT_DIR$/src/main.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../udps/main.go" beforeDir="false" afterPath="$PROJECT_DIR$/../udps/main.go" afterDir="false" />
+    </list>
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="FileEditorManager">
+    <leaf>
+      <file pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/src/main.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="102">
+              <caret line="6" column="7" lean-forward="true" selection-start-line="6" selection-start-column="7" selection-end-line="6" selection-end-column="7" />
+              <folding>
+                <element signature="e#30#175#0" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="GOROOT" path="$USER_HOME$/go" />
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
+  </component>
+  <component name="ProjectFrameBounds" extendedState="6">
+    <option name="x" value="105" />
+    <option name="y" value="89" />
+    <option name="width" value="1403" />
+    <option name="height" value="877" />
+  </component>
+  <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
+  <component name="ProjectView">
+    <navigator proportions="" version="1">
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="ProjectPane">
+        <subPane>
+          <expand>
+            <path>
+              <item name="udpfilterdup" type="b2602c69:ProjectViewProjectNode" />
+              <item name="udpfilterdup" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="udpfilterdup" type="b2602c69:ProjectViewProjectNode" />
+              <item name="udpfilterdup" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+            </path>
+          </expand>
+          <select />
+        </subPane>
+      </pane>
+      <pane id="Scope" />
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="go.gopath.indexing.explicitly.defined" value="true" />
+    <property name="go.sdk.automatically.set" value="true" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+    <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
+    <property name="nodejs_npm_path_reset_for_default_project" value="true" />
+  </component>
+  <component name="RunDashboard">
+    <option name="ruleStates">
+      <list>
+        <RuleState>
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
+        </RuleState>
+        <RuleState>
+          <option name="name" value="StatusDashboardGroupingRule" />
+        </RuleState>
+      </list>
+    </option>
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="37" y="23" width="1403" height="877" extended-state="6" />
+    <layout>
+      <window_info id="Favorites" side_tool="true" />
+      <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.24944486" />
+      <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
+      <window_info anchor="bottom" id="Docker" show_stripe_button="false" />
+      <window_info anchor="bottom" id="Database Changes" />
+      <window_info anchor="bottom" id="Version Control" />
+      <window_info anchor="bottom" id="Terminal" />
+      <window_info anchor="bottom" id="Event Log" side_tool="true" />
+      <window_info anchor="bottom" id="Message" order="0" />
+      <window_info anchor="bottom" id="Find" order="1" />
+      <window_info anchor="bottom" id="Run" order="2" />
+      <window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
+      <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
+      <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
+      <window_info anchor="bottom" id="TODO" order="6" />
+      <window_info anchor="right" id="Database" />
+      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
+      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
+      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
+    </layout>
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="version" value="1" />
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/src/main.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="102">
+          <caret line="6" column="7" lean-forward="true" selection-start-line="6" selection-start-column="7" selection-end-line="6" selection-end-column="7" />
+          <folding>
+            <element signature="e#30#175#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+  </component>
+</project>

+ 1 - 0
udpfilterdup/go_build_main_go

@@ -0,0 +1 @@
+ELF

+ 10 - 7
udpfilterdup/src/config.json

@@ -1,12 +1,13 @@
 {
-    "udpport": ":1485",
+    "udpport": ":1112",
     "dupdays": 2,
     "mongodb": {
-        "addr": "172.17.145.163:27080",
-        "pool": 15,
-        "db": "qfw",
-        "extract": "result_20190906",
-        "bidding": "bidding_126"
+        "addr": "192.168.3.207:27082",
+        "pool": 5,
+        "db": "extract_kf",
+        "extract": "bidding_20190910_01",
+        "extract_copy": "bidding_20190910_01_copy",
+        "bidding": "bidding"
     },
     "jkmail": {
         "to": "renzheng@topnet.net.cn",
@@ -27,4 +28,6 @@
         }
     ],
     "specialwords": "[((]?[0-9一二三四五六七八九十零123456789再][))]?[子分]?[次批标包]|重招|重新招标|勘察|设计|施工|监理|总承包|土石方|可研"
-}
+}
+
+

+ 264 - 37
udpfilterdup/src/datamap.go

@@ -25,17 +25,27 @@ type Info struct {
 	projectcode        string
 	publishtime        int64
 	comeintime         int64
+
+	bidopentime        int64 //开标时间
+	agencyaddr		   string//开标地点
+	detail		   	   string//招标内容
+	site			   string//站点
+
 	ContainSpecialWord bool
 }
 
 var datelimit = float64(432000)
 
+var mm int
+
 type datamap struct {
 	lock   sync.Mutex //锁
 	days   int        //保留几天数据
 	data   map[string][]*Info
 	keymap []string
 	keys   map[string]bool
+
+
 }
 
 func NewDatamap(days int, lastid string) *datamap {
@@ -44,18 +54,20 @@ func NewDatamap(days int, lastid string) *datamap {
 	if lastid == "" {
 		return dm
 	}
+
 	//初始化加载数据
 	sess := mgo.GetMgoConn()
 	defer mgo.DestoryMongoConn(sess)
 	it := sess.DB(mgo.DbName).C(extract).Find(mongodb.ObjToMQ(`{"_id":{"$lte":"`+lastid+`"}}`, true)).Sort("-_id").Iter()
 	now1 := int64(0)
 	n, continuSum := 0, 0
-	for tmp := make(map[string]interface{}); it.Next(tmp); n++ {
-		//
-		if qutil.IntAll(tmp["repeat"]) == 1 || qutil.ObjToString(tmp["subtype"]) == "变更" {
+	for tmp := make(map[string]interface{}); it.Next(&tmp); n++ {
+		//|| qutil.ObjToString(tmp["subtype"]) == "变更"  //变更的数据打开
+		if qutil.IntAll(tmp["repeat"]) == 1  {
 			continuSum++
+
 		} else {
-			cm := tmp["comeintime"]
+			cm := tmp["comeintime"] //时间单位
 			//cm := tmp["publishtime"]
 			comeintime := qutil.Int64All(cm)
 			if comeintime == 0 {
@@ -102,15 +114,29 @@ func NewInfo(tmp map[string]interface{}) *Info {
 	info.subtype = subtype
 	info.buyer = qutil.ObjToString(tmp["buyer"])
 	info.projectname = qutil.ObjToString(tmp["projectname"])
-	info.ContainSpecialWord = FilterRegexp.MatchString(info.projectname) || FilterRegexp.MatchString(info.title)
+	//info.ContainSpecialWord = FilterRegexp.MatchString(info.projectname) || FilterRegexp.MatchString(info.title)
+
+	info.ContainSpecialWord = FilterRegTitle.MatchString(info.title)
 	info.projectcode = qutil.ObjToString(tmp["projectcode"])
 	info.city = qutil.ObjToString(tmp["city"])
 	info.agency = qutil.ObjToString(tmp["agency"])
 	//info.winner = qutil.ObjToString(tmp["winner"])
 	info.publishtime = qutil.Int64All(tmp["publishtime"])
+
+
+
+
+	info.bidopentime  = qutil.Int64All(tmp["bidopentime"])
+	info.agencyaddr	 = qutil.ObjToString(tmp["agencyaddr"])
+	info.detail		= qutil.ObjToString(tmp["detail"])
+	info.site	 = qutil.ObjToString(tmp["site"])
+
+
+
 	return info
 }
 
+
 func (d *datamap) check(info *Info) (b bool, id string) {
 	d.lock.Lock()
 	defer d.lock.Unlock()
@@ -126,7 +152,9 @@ L:
 		data := d.data[k]
 		if len(data) > 0 { //对比
 			for _, v := range data {
+				//正常重复
 				if v.id == info.id {
+
 					return false, v.id
 				}
 				if math.Abs(qutil.Float64All(v.publishtime-info.publishtime)) > datelimit {
@@ -135,42 +163,192 @@ L:
 				if v.agency != "" && info.agency != "" && v.agency != info.agency {
 					continue
 				}
-				n := 0
-				if v.buyer != "" && v.buyer == info.buyer {
-					n++
-				}
-				if v.projectname != "" && v.projectname == info.projectname {
-					n++
-				}
-				if !info.ContainSpecialWord && n > 1 {
-					b = true
-					id = v.id
-					break L
-				} else if v.projectcode != "" && v.projectcode == info.projectcode {
-					n++
-				}
-				if !info.ContainSpecialWord && n > 1 || n > 2 {
-					b = true
-					id = v.id
-					break L
-				}
-				//标题长度大于10且相等即为重复
-				//				if len([]rune(info.title)) > 10 && v.title == info.title {
-				//					b = true
-				//					id = v.id
-				//					break L
-				//				}
-				//标题长度大于10且包含关系+buyer/projectname/projectcode/city(全国/A的只判断包含关系即可)相等即为重复
-				if len([]rune(info.title)) > 10 && len([]rune(v.title)) > 10 && (strings.Contains(v.title, info.title) || strings.Contains(info.title, v.title)) {
-					if info.area == "全国" || n > 0 || info.city == v.city {
-						b = true
-						id = v.id
-						break L
+
+				if info.subtype==v.subtype {
+					if info.subtype == "变更" {
+						//以下为新增方法 , 变更数据判重处理   v为原数据  info为目标数据
+						if info.publishtime<v.publishtime{
+							continue
+						}
+						if info.ContainSpecialWord&&info.title!=v.title&&v.title!="" {
+							continue
+						}
+						if v.projectcode != info.projectcode&&len([]rune(info.projectcode)) >=10&&v.projectcode!=""{
+							continue
+						}
+
+						//同城判定有效
+						first_judge:= false
+						if (v.projectcode != ""&&v.projectcode==info.projectcode&&v.projectname != ""&&v.projectname==info.projectname)||
+							(v.title != ""&&v.title==info.title&&v.bidopentime != 0&&v.bidopentime==info.bidopentime&&v.detail != ""&&v.detail==info.detail) {
+							first_judge = true
+						}
+						//3/6等判断
+						n := 0
+						if v.title != "" && v.title == info.title {
+							n++
+						}
+						if v.projectname != "" && v.projectname == info.projectname {
+							n++
+						}
+						if v.projectcode != "" && v.projectcode == info.projectcode {
+							n++
+						}
+						if v.bidopentime != 0 && v.bidopentime == info.bidopentime {
+							n++
+						}
+						if v.agencyaddr != "" && v.agencyaddr == info.agencyaddr {
+							n++
+						}
+						if v.detail != "" && v.detail == info.detail {
+							n++
+						}
+						t:= judgeCityType(v.area,info.area,v.city,info.city)
+						if n>=3||first_judge==true {
+							if t==2 {
+								//同城
+								b = true
+								id = v.id
+								log.Print("同城满足的",info.id)
+								break L
+							}
+						}
+					}else {//非变更数据判重处理
+						n:=0 //三要素
+						m:=0 //二要素
+						x:=0 //四要素
+						if info.buyer != "" &&v.buyer == info.buyer {
+							n++
+							x++
+						}
+						if info.projectname != ""&&v.projectname == info.projectname {
+							n++
+							m++
+							x++
+						}
+						if info.projectcode != ""&&v.projectcode == info.projectcode {
+							n++
+							m++
+							x++
+						}
+						if info.title != ""&&v.title == info.title {
+							x++
+						}
+
+						t:= judgeCityType(v.area,info.area,v.city,info.city)
+						c_1 :=conditionTitle(v.title,info.title) //标题满足
+						c_2 :=conditionNum(v.projectcode,info.projectcode) //编号满足
+						c_3 :=conditionTAB(v.title,info.title,v.buyer,info.buyer) //标题+采购单位
+
+
+						//同站点判断
+						if info.site != "" && v.site == info.site {
+							if n>1||c_1||c_2 {
+								b = true
+								id = v.id
+								log.Println("站点满足过滤")
+								break L
+							}
+						}else {
+							if info.ContainSpecialWord&&info.title!=v.title&&v.title!="" {
+								continue
+							}
+							if v.projectcode != info.projectcode&&len([]rune(info.projectcode)) >=10&&v.projectcode!=""{
+								continue
+							}
+							//先决条件满足三要素
+							if n==3{
+								b = true
+								id = v.id
+								break L
+							}
+
+							//城市判断
+							if t==0||t==1 { //最少一个全国
+								if c_1 && (c_2||n>1) {
+									b = true
+									id = v.id
+									break L
+								}
+								if c_2&&x>2{
+									b = true
+									id = v.id
+									break L
+								}
+							}else if t==2 { //	省-市
+								if c_1||c_2||n>1 {
+									b = true
+									id = v.id
+									break L
+								}
+							}else if t==3 {//	!省 !市
+								if (c_1&&n>1)||(c_2&&x>2){
+									b = true
+									id = v.id
+									break L
+								}
+
+							}else if t==4 {//	省 !市
+								if m>1||(c_1&&m>0)||(c_2&&x>1)||(c_3&&n>1){
+									b = true
+									id = v.id
+									break L
+								}
+							}else  {
+
+							}
+						}
 					}
 				}
+
+				////非变更数据判重处理
+				//n := 0
+				//if v.buyer != "" && v.buyer == info.buyer {
+				//	n++
+				//}
+				//if v.projectname != "" && v.projectname == info.projectname {
+				//	n++
+				//}
+				//if !info.ContainSpecialWord && n > 1 {
+				//	b = true
+				//	id = v.id
+				//	break L
+				//} else if v.projectcode != "" && v.projectcode == info.projectcode {
+				//	n++
+				//}
+				//if !info.ContainSpecialWord && n > 1 || n > 2 {
+				//	b = true
+				//	id = v.id
+				//	break L
+				//}
+				////标题长度大于10且相等即为重复
+				////				if len([]rune(info.title)) > 10 && v.title == info.title {
+				////					b = true
+				////					id = v.id
+				////					break L
+				////				}
+				////标题长度大于10且包含关系+buyer/projectname/projectcode/city(全国/A的只判断包含关系即可)相等即为重复
+				//if len([]rune(info.title)) > 10 && len([]rune(v.title)) > 10 && (strings.Contains(v.title, info.title) || strings.Contains(info.title, v.title)) {
+				//	if info.area == "全国" || n > 0 || info.city == v.city {
+				//		b = true
+				//		id = v.id
+				//		break L
+				//	}
+				//}
+
+
+
 			}
 		}
 	}
+
+
+
+
+
+
+
+	//往预存数据 d 添加
 	if !b {
 		ct, _ := strconv.ParseInt(info.id[:8], 16, 64)
 		dkey := qutil.FormatDateByInt64(&ct, qutil.Date_yyyyMMdd)
@@ -191,6 +369,55 @@ L:
 	return
 }
 
+
+//判断是否同城等情况
+func judgeCityType(v string, info string,v_c string,info_c string) (t int) {
+
+	t=0
+	if  (v=="全国"||v=="")&&(info=="全国"||info=="") {//均为全国
+		t=0
+	}else if  v!="全国"&&info!="全国"&&v!=""&&info!=""&&
+		v_c!="全国"&&info_c!="全国"&&v_c!=""&&info_c!=""{//均非全国
+		if v==info &&v_c==info_c { //同省同城
+			t=2
+		}else if v!=info&&v_c!=info_c{//非同省非同城
+			t=3
+		}else {//同省非同城
+			t=4
+		}
+	}else {//有且一个全国
+		t=1
+	}
+	return t
+}
+
+//条件一 标题
+func conditionTitle(t1 string, t2 string) bool {
+
+	if len([]rune(t1))>10 && len([]rune(t2))>10&&
+		(strings.Contains(t1, t2)||strings.Contains(t2, t1)) {
+		return true
+	}
+	return false
+}
+//条件二 项目编号
+func conditionNum(c1 string ,c2 string) bool {
+
+	if c1 == c2&&len([]rune(c1)) >=10 {
+		return true
+	}
+	return false
+}
+//条件三 采购单位+标题
+func conditionTAB(t1 string ,t2 string,b1 string,b2 string) bool {
+
+	if t1==t2&&b1==b2 {
+		return true
+	}
+	return false
+}
+
+
 func (d *datamap) update(t int64) {
 	//每天0点清除历史数据
 	d.keymap = d.GetLatelyFiveDay(t)
@@ -213,7 +440,7 @@ func (d *datamap) update(t int64) {
 	for _, v := range d.data {
 		all1 += len(v)
 	}
-	log.Println("更新前后数据:", all, all1)
+	//log.Println("更新前后数据:", all, all1)
 }
 
 func (d *datamap) GetLatelyFiveDay(t int64) []string {

+ 163 - 28
udpfilterdup/src/main.go

@@ -6,7 +6,8 @@ package main
 
 import (
 	"encoding/json"
-	"flag"
+	"fmt"
+	"gopkg.in/mgo.v2/bson"
 	"log"
 	mu "mfw/util"
 	"net"
@@ -22,18 +23,28 @@ var (
 	mconf        map[string]interface{} //mongodb配置信息
 	mgo          *mongodb.MongodbSim    //mongodb操作对象
 	extract      string
+	extract_copy string
 	bidding      string
 	udpclient    mu.UdpClient             //udp对象
 	nextNode     []map[string]interface{} //下节点数组
-	dupdays      = 3                      //初始化判重范围
+	dupdays      = 5                      //初始化判重范围
 	DM           *datamap                 //判重数据
 	FilterRegexp = regexp.MustCompile("^_$")
-	lastid       = ""
+	lastid       = "5d767728a5cb26b9b7748868"  //起始数据1条
+
+
+	FilterRegTitle = regexp.MustCompile("[0-9一二三四五六七八九十零123456789](次|包|标段)")
+
+	//56404035af5374672e00059c
+	//5d767728a5cb26b9b7748868
+
+	inV_n int
 )
 
 func init() {
-	flag.StringVar(&lastid, "id", "", "最后加载id") //以小于等于此id开始加载最近几天的数据
-	flag.Parse()
+	//flag.StringVar(&lastid, "id", "", "最后加载id") //以小于等于此id开始加载最近几天的数据
+	//flag.Parse()// 类似于命令台 scanf
+	////172.17.145.163:27080
 	util.ReadConfig(&Sysconfig)
 	nextNode = util.ObjArrToMapArr(Sysconfig["nextNode"].([]interface{}))
 	mconf = Sysconfig["mongodb"].(map[string]interface{})
@@ -43,8 +54,14 @@ func init() {
 		Size:        util.IntAllDef(mconf["pool"], 10),
 	}
 	extract = mconf["extract"].(string)
+	extract_copy = mconf["extract_copy"].(string)
+
 	//bidding = mconf["bidding"].(string)
 	mgo.InitPool()
+
+
+
+	//测试临时注释
 	dupdays = util.IntAllDef(Sysconfig["dupdays"], 3)
 	//加载数据
 	DM = NewDatamap(dupdays, lastid)
@@ -54,8 +71,72 @@ func init() {
 	}
 }
 
+//新增一个方法 判断
+func main22()  {
+
+	sess := mgo.GetMgoConn()
+	defer mgo.DestoryMongoConn(sess)
+
+	res, _ := mgo.Find(extract, nil, nil, nil, false, -1, -1)
+	res_copy, _ := mgo.Find(extract_copy, nil, nil, nil, false, -1, -1)
+
+	//fmt.Println(len(*res),len(*res_copy))
+
+	m1 :=map[string]int{} //新版本
+	m2 :=map[string]int{} //老版本
+	for _,v:=range *res{
+		m1[(v["_id"].(bson.ObjectId).Hex())]= util.IntAll(v["repeat"])
+	}
+
+	for _,v:=range *res_copy{
+		m2[(v["_id"].(bson.ObjectId).Hex())]= util.IntAll(v["repeat"])
+	}
+	fmt.Println(len(m1),len(m2))
+
+
+	n1:=0
+	n2:=0
+
+
+	var arr1 []string
+	var arr2 []string
+
+	for k,v:=range m2{
+		if m1[k]!=v{
+			if m1[k]==0{
+				n1++
+				arr1 = append(arr1,fmt.Sprintf("目标_id:%s",k))
+			}
+			if m1[k]==1{
+				n2++
+				arr2 = append(arr2,fmt.Sprintf("目标_id:%s",k))
+			}
+		}
+	}
+
+	for _,v:=range arr1 {
+		log.Println(v)
+	}
+
+	log.Println("------")
+	log.Println("------")
+	log.Println("------")
+
+	for _,v:=range arr2 {
+		log.Println(v)
+	}
+
+	log.Println("0:1 对应数量",n1)
+	log.Println("1:0 对应数量",n2)
+
+
+}
+
+
+
 func main() {
 	go checkMapJob()
+
 	updport := Sysconfig["udpport"].(string)
 	udpclient = mu.UdpClient{Local: updport, BufSize: 1024}
 	udpclient.Listen(processUdpMsg)
@@ -64,6 +145,8 @@ func main() {
 }
 
 func processUdpMsg(act byte, data []byte, ra *net.UDPAddr) {
+
+	fmt.Println("接受的段数据")
 	switch act {
 	case mu.OP_TYPE_DATA: //上个节点的数据
 		//从表中开始处理
@@ -91,6 +174,10 @@ func processUdpMsg(act byte, data []byte, ra *net.UDPAddr) {
 
 //开始判重程序
 func task(data []byte, mapInfo map[string]interface{}) {
+
+
+	//
+	fmt.Println("开始判重")
 	defer util.Catch()
 	//区间id
 	sess := mgo.GetMgoConn()
@@ -107,13 +194,17 @@ func task(data []byte, mapInfo map[string]interface{}) {
 	wg := &sync.WaitGroup{}
 	mapLock := &sync.Mutex{}
 	n, repeateN := 0, 0
+
 	for tmp := make(map[string]interface{}); it.Next(&tmp); n++ {
+
+		//fmt.Println(util.ObjToString(tmp["subtype"]))
 		if util.ObjToString(tmp["subtype"]) == "变更" {
-			//go IS.Add("update")
-			continue
+			//fmt.Println("变更信息")
+			//continue
 		}
+
 		if n%10000 == 0 {
-			log.Println("current:", n, tmp["_id"])
+			log.Println("current:", n, tmp["_id"],"repeateN:",repeateN)
 		}
 		pool <- true
 		wg.Add(1)
@@ -123,10 +214,11 @@ func task(data []byte, mapInfo map[string]interface{}) {
 				wg.Done()
 			}()
 			info := NewInfo(tmp)
-			b, id := DM.check(info)
-			if b { //有重复,生成更新语句,更新抽取和更新招标
-				//IS.Add("repeat")
-				repeateN++
+
+			//是否为无效数据
+			if invalidData(info.buyer,info.projectname,info.projectcode) {
+				//
+				inV_n++
 				mapLock.Lock()
 				updateExtract = append(updateExtract, []map[string]interface{}{
 					map[string]interface{}{
@@ -134,22 +226,11 @@ func task(data []byte, mapInfo map[string]interface{}) {
 					},
 					map[string]interface{}{
 						"$set": map[string]interface{}{
-							"repeat":   1,
-							"repeatid": id,
+							"repeat":   -1,
 						},
 					},
 				})
-				//				updateBidding = append(updateBidding, []map[string]interface{}{
-				//					map[string]interface{}{
-				//						"_id": tmp["_id"],
-				//					},
-				//					map[string]interface{}{
-				//						"$set": map[string]interface{}{
-				//							"extracttype": -1,
-				//							"repeatid":    id,
-				//						},
-				//					},
-				//				})
+
 				if len(updateExtract) > 500 {
 					mgo.UpdateBulk(extract, updateExtract...)
 					//mgo.UpdateBulk(bidding, updateBidding...)
@@ -157,8 +238,43 @@ func task(data []byte, mapInfo map[string]interface{}) {
 					updateExtract = [][]map[string]interface{}{}
 				}
 				mapLock.Unlock()
-			} else {
-				//IS.Add("new")
+
+			}else  {
+				b, id := DM.check(info)
+				if b { //有重复,生成更新语句,更新抽取和更新招标
+
+					//重复数据,处理方式   合并操作--------------
+					//重复数据,处理方式   合并操作--------------
+					//重复数据,处理方式   合并操作--------------
+
+
+					repeateN++
+					//log.Println("变更数据重复",tmp["_id"])
+					mapLock.Lock()
+					updateExtract = append(updateExtract, []map[string]interface{}{
+						map[string]interface{}{
+							"_id": tmp["_id"],
+						},
+						map[string]interface{}{
+							"$set": map[string]interface{}{
+								"repeat":   1,
+								"repeatid": id,
+							},
+						},
+					})
+
+					if len(updateExtract) > 500 {
+						mgo.UpdateBulk(extract, updateExtract...)
+						//mgo.UpdateBulk(bidding, updateBidding...)
+						//updateExtract, updateBidding = [][]map[string]interface{}{}, [][]map[string]interface{}{}
+						updateExtract = [][]map[string]interface{}{}
+
+
+					}
+					mapLock.Unlock()
+				} else {
+					//IS.Add("new")
+				}
 			}
 		}(tmp)
 		tmp = make(map[string]interface{})
@@ -168,7 +284,8 @@ func task(data []byte, mapInfo map[string]interface{}) {
 		mgo.UpdateBulk(extract, updateExtract...)
 		//mgo.UpdateBulk(bidding, updateBidding...)
 	}
-	log.Println("this task over.", n, "repeateN:", repeateN, mapInfo["stop"])
+	log.Println("this task over.", n, "repeateN:", repeateN, mapInfo["stop"],"无效数据:",inV_n)
+
 	//任务完成,开始发送广播通知下面节点
 	if n > repeateN && mapInfo["stop"] == nil {
 		for _, to := range nextNode {
@@ -191,3 +308,21 @@ func task(data []byte, mapInfo map[string]interface{}) {
 		}
 	}
 }
+
+//无效数据
+func invalidData(d1 string,d2 string,d3 string)  bool{
+	var n int
+	if d1 != "" {
+		n++
+	}
+	if d2 != "" {
+		n++
+	}
+	if d3 != "" {
+		n++
+	}
+	if n==0 {
+		return true
+	}
+	return false
+}

+ 11 - 3
udps/main.go

@@ -22,12 +22,20 @@ func main() {
 	//2017-04-01,2017-06-01
 	//2017-06-01,2018-06-01
 	//2018-06-01,2019-02-20
-	flag.StringVar(&sid, "sid", "", "开始id")
-	flag.StringVar(&eid, "eid", "", "结束id")
+
+	/*
+	ObjectId("5d767728a5cb26b9b7748868")
+	ObjectId("5d77c881a5cb26b9b7de209d")  //9W条数据
+
+	56404035af5374672e00059c
+	5d4da9c8a5cb26b9b7b6bbcd  100万
+	*/
+	flag.StringVar(&sid, "sid", "5d767728a5cb26b9b7748868", "开始id")
+	flag.StringVar(&eid, "eid", "5d77c881a5cb26b9b7de209d", "结束id")
 	flag.StringVar(&startDate, "start", "", "开始日期2006-01-02")
 	flag.StringVar(&endDate, "end", "", "结束日期2006-01-02")
 	flag.StringVar(&ip, "ip", "127.0.0.1", "ip")
-	flag.StringVar(&port, "port", "", "dup端口")
+	flag.StringVar(&port, "port", "1112", "dup端口")
 	flag.StringVar(&stype, "stype", "", "stype")
 	flag.Parse()
 	var startid, endid bson.ObjectId