[
  {
    "path": ".gitignore",
    "content": "# Compiled class file\n*.class\n\n# Log file\n*.log\n\n# BlueJ files\n*.ctxt\n\n# Mobile Tools for Java (J2ME)\n.mtj.tmp/\n\n# Package Files #\n*.jar\n*.war\n*.nar\n*.ear\n*.zip\n*.tar.gz\n*.rar\n\n# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml\nhs_err_pid*\n"
  },
  {
    "path": ".idea/.name",
    "content": "shieldratelimiter"
  },
  {
    "path": ".idea/codeStyles/codeStyleConfig.xml",
    "content": "<component name=\"ProjectCodeStyleConfiguration\">\n  <state>\n    <option name=\"USE_PER_PROJECT_SETTINGS\" value=\"true\" />\n  </state>\n</component>"
  },
  {
    "path": ".idea/compiler.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"CompilerConfiguration\">\n    <annotationProcessing>\n      <profile name=\"Maven default annotation processors profile\" enabled=\"true\">\n        <sourceOutputDir name=\"target/generated-sources/annotations\" />\n        <sourceTestOutputDir name=\"target/generated-test-sources/test-annotations\" />\n        <outputRelativeToContentRoot value=\"true\" />\n        <module name=\"aliyun-acm-util\" />\n        <module name=\"customer-api-service\" />\n        <module name=\"maccbasecore-facade\" />\n        <module name=\"maccbasecore-service\" />\n        <module name=\"mfbizcore-facade\" />\n        <module name=\"mfbizcore-service\" />\n        <module name=\"mopmweb-facade\" />\n        <module name=\"mopmweb-service\" />\n        <module name=\"mprodbasecore-facade\" />\n        <module name=\"mprodbasecore-service\" />\n        <module name=\"msg-protocol\" />\n        <module name=\"rctmq-spring\" />\n        <module name=\"rctmq-spring-demo\" />\n        <module name=\"sheild-conf-client-core\" />\n        <module name=\"shield-config-manage-ui\" />\n        <module name=\"shield-demo-project-single\" />\n        <module name=\"shield-message-transaction\" />\n        <module name=\"shield-notification-transaction\" />\n        <module name=\"shield-ratelimiter-core\" />\n        <module name=\"shield-tcc-transaction\" />\n        <module name=\"shleld-ratelimter-demo\" />\n      </profile>\n    </annotationProcessing>\n    <bytecodeTargetLevel>\n      <module name=\"permission\" target=\"1.5\" />\n    </bytecodeTargetLevel>\n  </component>\n</project>"
  },
  {
    "path": ".idea/dataSources.local.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"dataSourceStorageLocal\">\n    <data-source name=\"zdz-测试\" uuid=\"40715297-6a53-4c3c-85d1-a0c9fb7ddb38\">\n      <database-info product=\"\" version=\"\" jdbc-version=\"\" driver-name=\"\" driver-version=\"\" family=\"MYSQL\" exact-version=\"0.0\" />\n      <secret-storage>master_key</secret-storage>\n      <first-sync>true</first-sync>\n      <user-name>marketing</user-name>\n    </data-source>\n  </component>\n</project>"
  },
  {
    "path": ".idea/dataSources.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"DataSourceManagerImpl\" format=\"xml\" multifile-model=\"true\">\n    <data-source source=\"LOCAL\" name=\"zdz-测试\" uuid=\"40715297-6a53-4c3c-85d1-a0c9fb7ddb38\">\n      <driver-ref>mysql</driver-ref>\n      <synchronize>true</synchronize>\n      <jdbc-driver>com.mysql.jdbc.Driver</jdbc-driver>\n      <jdbc-url>jdbc:mysql://172.30.61.15:3306</jdbc-url>\n      <driver-properties>\n        <property name=\"autoReconnect\" value=\"true\" />\n        <property name=\"zeroDateTimeBehavior\" value=\"convertToNull\" />\n        <property name=\"tinyInt1isBit\" value=\"false\" />\n        <property name=\"characterEncoding\" value=\"utf8\" />\n        <property name=\"characterSetResults\" value=\"utf8\" />\n        <property name=\"yearIsDateType\" value=\"false\" />\n      </driver-properties>\n    </data-source>\n  </component>\n</project>"
  },
  {
    "path": ".idea/encodings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"Encoding\" defaultCharsetForPropertiesFiles=\"UTF-8\">\n    <file url=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib\" charset=\"UTF-8\" />\n    <file url=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib/aliyun-acm-util\" charset=\"UTF-8\" />\n    <file url=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol\" charset=\"UTF-8\" />\n    <file url=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib/rctmq-spring\" charset=\"UTF-8\" />\n    <file url=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib/rctmq-spring-demo\" charset=\"UTF-8\" />\n    <file url=\"file://$PROJECT_DIR$/../sheild-conf-single/sheild-conf-client-core\" charset=\"UTF-8\" />\n    <file url=\"file://$PROJECT_DIR$/../sheild-conf-single/shield-config-manage-ui\" charset=\"UTF-8\" />\n    <file url=\"file://$PROJECT_DIR$/../sheild-conf-single/shield-demo-project-single\" charset=\"UTF-8\" />\n    <file url=\"file://$PROJECT_DIR$/shleld-ratelimter-demo\" charset=\"UTF-8\" />\n    <file url=\"file://$PROJECT_DIR$/../shield-transaction\" charset=\"UTF-8\" />\n    <file url=\"file://$PROJECT_DIR$/../shield-transaction/shield-message-transaction\" charset=\"UTF-8\" />\n    <file url=\"file://$PROJECT_DIR$/../shield-transaction/shield-notification-transaction\" charset=\"UTF-8\" />\n    <file url=\"file://$PROJECT_DIR$/../shield-transaction/shield-tcc-transaction\" charset=\"UTF-8\" />\n    <file url=\"file://D:/snowalker-workspace/0mkt-workspace/customerapiservice\" charset=\"UTF-8\" />\n    <file url=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore\" charset=\"UTF-8\" />\n    <file url=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade\" charset=\"UTF-8\" />\n    <file url=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service\" charset=\"UTF-8\" />\n    <file url=\"file://D:/snowalker-workspace/0mkt-workspace/mfbizcore\" charset=\"UTF-8\" />\n    <file url=\"file://D:/snowalker-workspace/0mkt-workspace/mfbizcore/mfbizcore-facade\" charset=\"UTF-8\" />\n    <file url=\"file://D:/snowalker-workspace/0mkt-workspace/mfbizcore/mfbizcore-service\" charset=\"UTF-8\" />\n    <file url=\"file://D:/snowalker-workspace/0mkt-workspace/mopmweb\" charset=\"UTF-8\" />\n    <file url=\"file://D:/snowalker-workspace/0mkt-workspace/mopmweb/mopmweb-facade\" charset=\"UTF-8\" />\n    <file url=\"file://D:/snowalker-workspace/0mkt-workspace/mopmweb/mopmweb-service\" charset=\"UTF-8\" />\n    <file url=\"file://D:/snowalker-workspace/0mkt-workspace/mprodbasecore\" charset=\"UTF-8\" />\n    <file url=\"file://D:/snowalker-workspace/0mkt-workspace/mprodbasecore/mprodbasecore-facade\" charset=\"UTF-8\" />\n    <file url=\"file://D:/snowalker-workspace/0mkt-workspace/mprodbasecore/mprodbasecore-service\" charset=\"UTF-8\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/inspectionProfiles/Project_Default.xml",
    "content": "<component name=\"InspectionProjectProfileManager\">\n  <profile version=\"1.0\">\n    <option name=\"myName\" value=\"Project Default\" />\n    <inspection_tool class=\"JavaDoc\" enabled=\"true\" level=\"WARNING\" enabled_by_default=\"true\">\n      <option name=\"TOP_LEVEL_CLASS_OPTIONS\">\n        <value>\n          <option name=\"ACCESS_JAVADOC_REQUIRED_FOR\" value=\"none\" />\n          <option name=\"REQUIRED_TAGS\" value=\"\" />\n        </value>\n      </option>\n      <option name=\"INNER_CLASS_OPTIONS\">\n        <value>\n          <option name=\"ACCESS_JAVADOC_REQUIRED_FOR\" value=\"none\" />\n          <option name=\"REQUIRED_TAGS\" value=\"\" />\n        </value>\n      </option>\n      <option name=\"METHOD_OPTIONS\">\n        <value>\n          <option name=\"ACCESS_JAVADOC_REQUIRED_FOR\" value=\"none\" />\n          <option name=\"REQUIRED_TAGS\" value=\"@return@param@throws or @exception\" />\n        </value>\n      </option>\n      <option name=\"FIELD_OPTIONS\">\n        <value>\n          <option name=\"ACCESS_JAVADOC_REQUIRED_FOR\" value=\"none\" />\n          <option name=\"REQUIRED_TAGS\" value=\"\" />\n        </value>\n      </option>\n      <option name=\"IGNORE_DEPRECATED\" value=\"false\" />\n      <option name=\"IGNORE_JAVADOC_PERIOD\" value=\"true\" />\n      <option name=\"IGNORE_DUPLICATED_THROWS\" value=\"false\" />\n      <option name=\"IGNORE_POINT_TO_ITSELF\" value=\"false\" />\n      <option name=\"myAdditionalJavadocTags\" value=\"date\" />\n    </inspection_tool>\n    <inspection_tool class=\"SerializableHasSerialVersionUIDField\" enabled=\"true\" level=\"WARNING\" enabled_by_default=\"true\">\n      <option name=\"ignoreAnonymousInnerClasses\" value=\"false\" />\n      <option name=\"superClassString\" value=\"java.awt.Component\" />\n    </inspection_tool>\n  </profile>\n</component>"
  },
  {
    "path": ".idea/misc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ExternalStorageConfigurationManager\" enabled=\"true\" />\n  <component name=\"FrameworkDetectionExcludesConfiguration\">\n    <file type=\"web\" url=\"file://$USER_HOME$/Documents/Tencent Files/1210812591/FileRecv/Desktop/permission\" />\n  </component>\n  <component name=\"MavenProjectsManager\">\n    <option name=\"originalFiles\">\n      <list>\n        <option value=\"$PROJECT_DIR$/pom.xml\" />\n        <option value=\"$PROJECT_DIR$/../rmqtool-protocol-lib/pom.xml\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/pom.xml\" />\n        <option value=\"$USER_HOME$/Downloads/mfbizcore-master-396c4c4b8fa04332ac9c212a1c4220c8b0c3aeaa/pom.xml\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/mfbizcore/pom.xml\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/mprodbasecore/pom.xml\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/mopmweb/pom.xml\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/customerapiservice/pom.xml\" />\n        <option value=\"$PROJECT_DIR$/../shield-transaction/pom.xml\" />\n        <option value=\"$PROJECT_DIR$/../sheild-conf-single/pom.xml\" />\n      </list>\n    </option>\n  </component>\n  <component name=\"ProjectRootManager\" version=\"2\" languageLevel=\"JDK_1_8\" project-jdk-name=\"1.8\" project-jdk-type=\"JavaSDK\">\n    <output url=\"file://$PROJECT_DIR$/out\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/vcs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping directory=\"$PROJECT_DIR$/../rmqtool-protocol-lib\" vcs=\"Git\" />\n    <mapping directory=\"$PROJECT_DIR$/../sheild-conf-single\" vcs=\"Git\" />\n    <mapping directory=\"$PROJECT_DIR$\" vcs=\"Git\" />\n    <mapping directory=\"D:/snowalker-workspace/0mkt-workspace/customerapiservice\" vcs=\"Git\" />\n    <mapping directory=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore\" vcs=\"Git\" />\n    <mapping directory=\"D:/snowalker-workspace/0mkt-workspace/mfbizcore\" vcs=\"Git\" />\n    <mapping directory=\"D:/snowalker-workspace/0mkt-workspace/mopmweb\" vcs=\"Git\" />\n    <mapping directory=\"D:/snowalker-workspace/0mkt-workspace/mprodbasecore\" vcs=\"Git\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/workspace.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"AnalysisUIOptions\">\n    <option name=\"GROUP_BY_SEVERITY\" value=\"true\" />\n  </component>\n  <component name=\"ChangeListManager\">\n    <list default=\"true\" id=\"477cdd79-b834-4d18-9f54-0db75fc1fde8\" name=\"Default Changelist\" comment=\"snowalker--添加特殊记账逻辑\">\n      <change afterPath=\"$PROJECT_DIR$/.idea/codeStyles/codeStyleConfig.xml\" afterDir=\"false\" />\n      <change afterPath=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/doc/K8S基础设施搭建.md\" afterDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/../sheild-conf-single/pom.xml\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/../sheild-conf-single/pom.xml\" afterDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/../sheild-conf-single/shield-conf-single.iml\" beforeDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/../sheild-conf-single/shield-config-manage-ui/shield-config-manage-ui.iml\" beforeDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/../sheild-conf-single/shield-config-manage-ui/target/classes/templates/shield-conf-auth.html\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/../sheild-conf-single/shield-config-manage-ui/target/classes/templates/shield-conf-auth.html\" afterDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/../sheild-conf-single/shield-config-manage-ui/target/classes/templates/update-sysconfig.html\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/../sheild-conf-single/shield-config-manage-ui/target/classes/templates/update-sysconfig.html\" afterDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/../sheild-conf-single/shield-demo-project-single/pom.xml\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/../sheild-conf-single/shield-demo-project-single/pom.xml\" afterDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/../sheild-conf-single/shield-demo-project-single/shield-demo-project-single.iml\" beforeDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/../sheild-conf-single/shield-demo-project-single/src/main/java/com/conf/test/App.java\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/../sheild-conf-single/shield-demo-project-single/src/main/java/com/conf/test/App.java\" afterDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/../sheild-conf-single/shield-demo-project-single/src/main/resources/application.properties\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/../sheild-conf-single/shield-demo-project-single/src/main/resources/application.properties\" afterDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/../sheild-conf-single/shield-demo-project-single/target/classes/application.properties\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/../sheild-conf-single/shield-demo-project-single/target/classes/application.properties\" afterDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/.idea/compiler.xml\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/.idea/compiler.xml\" afterDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/.idea/encodings.xml\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/.idea/encodings.xml\" afterDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml\" afterDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/.idea/misc.xml\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/.idea/misc.xml\" afterDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/.idea/vcs.xml\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/.idea/vcs.xml\" afterDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/.idea/workspace.xml\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/.idea/workspace.xml\" afterDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/shield-ratelimiter-core/pom.xml\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/shield-ratelimiter-core/pom.xml\" afterDir=\"false\" />\n      <change beforePath=\"$PROJECT_DIR$/shleld-ratelimter-demo/src/main/java/com/snowalker/ratelimiter/demo/controller/TestController.java\" beforeDir=\"false\" afterPath=\"$PROJECT_DIR$/shleld-ratelimter-demo/src/main/java/com/snowalker/ratelimiter/demo/controller/TestController.java\" afterDir=\"false\" />\n      <change beforePath=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/biz/service/AccountBizServiceFacadeImpl.java\" beforeDir=\"false\" afterPath=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/biz/service/AccountBizServiceFacadeImpl.java\" afterDir=\"false\" />\n      <change beforePath=\"D:/snowalker-workspace/0mkt-workspace/mopmweb/mopmweb-service/src/main/java/com/gaoyang/marketing/mopmweb/util/EncryptUtil.java\" beforeDir=\"false\" afterPath=\"D:/snowalker-workspace/0mkt-workspace/mopmweb/mopmweb-service/src/main/java/com/gaoyang/marketing/mopmweb/util/EncryptUtil.java\" afterDir=\"false\" />\n    </list>\n    <ignored path=\"$PROJECT_DIR$/out/\" />\n    <ignored path=\"$PROJECT_DIR$/target/\" />\n    <ignored path=\"$PROJECT_DIR$/../rmqtool-protocol-lib/target/\" />\n    <ignored path=\"$PROJECT_DIR$/../rmqtool-protocol-lib/aliyun-acm-util/target/\" />\n    <ignored path=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/target/\" />\n    <ignored path=\"$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/target/\" />\n    <ignored path=\"$PROJECT_DIR$/../rmqtool-protocol-lib/rctmq-spring/target/\" />\n    <ignored path=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/target/\" />\n    <ignored path=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/target/\" />\n    <ignored path=\"$PROJECT_DIR$/../rmqtool-protocol-lib/rctmq-spring-demo/target/\" />\n    <ignored path=\"$PROJECT_DIR$/shield-ratelimiter-core/target/\" />\n    <ignored path=\"$PROJECT_DIR$/shleld-ratelimter-demo/target/\" />\n    <ignored path=\"$USER_HOME$/Downloads/mfbizcore-master-396c4c4b8fa04332ac9c212a1c4220c8b0c3aeaa/mfbizcore-service/target/\" />\n    <ignored path=\"$USER_HOME$/Downloads/mfbizcore-master-396c4c4b8fa04332ac9c212a1c4220c8b0c3aeaa/mfbizcore-facade/target/\" />\n    <ignored path=\"$USER_HOME$/Downloads/mfbizcore-master-396c4c4b8fa04332ac9c212a1c4220c8b0c3aeaa/target/\" />\n    <ignored path=\"D:/snowalker-workspace/0mkt-workspace/mfbizcore/target/\" />\n    <ignored path=\"D:/snowalker-workspace/0mkt-workspace/mfbizcore/mfbizcore-service/target/\" />\n    <ignored path=\"D:/snowalker-workspace/0mkt-workspace/mfbizcore/mfbizcore-facade/target/\" />\n    <ignored path=\"D:/snowalker-workspace/0mkt-workspace/mprodbasecore/mprodbasecore-facade/target/\" />\n    <ignored path=\"D:/snowalker-workspace/0mkt-workspace/mprodbasecore/target/\" />\n    <ignored path=\"D:/snowalker-workspace/0mkt-workspace/mprodbasecore/mprodbasecore-service/target/\" />\n    <ignored path=\"D:/snowalker-workspace/0mkt-workspace/mopmweb/target/\" />\n    <ignored path=\"D:/snowalker-workspace/0mkt-workspace/mopmweb/mopmweb-facade/target/\" />\n    <ignored path=\"D:/snowalker-workspace/0mkt-workspace/mopmweb/mopmweb-service/target/\" />\n    <ignored path=\"D:/snowalker-workspace/0mkt-workspace/customerapiservice/target/\" />\n    <ignored path=\"$PROJECT_DIR$/../shield-transaction/shield-notification-transaction/target/\" />\n    <ignored path=\"$PROJECT_DIR$/../shield-transaction/shield-message-transaction/target/\" />\n    <ignored path=\"$PROJECT_DIR$/../shield-transaction/shield-tcc-transaction/target/\" />\n    <ignored path=\"$PROJECT_DIR$/../shield-transaction/target/\" />\n    <ignored path=\"$PROJECT_DIR$/../sheild-conf-single/target/\" />\n    <ignored path=\"$PROJECT_DIR$/../sheild-conf-single/sheild-conf-client-core/target/\" />\n    <ignored path=\"$PROJECT_DIR$/../sheild-conf-single/shield-config-manage-ui/target/\" />\n    <ignored path=\"$PROJECT_DIR$/../sheild-conf-single/shield-demo-project-single/target/\" />\n    <option name=\"EXCLUDED_CONVERTED_TO_IGNORED\" value=\"true\" />\n    <option name=\"SHOW_DIALOG\" value=\"false\" />\n    <option name=\"HIGHLIGHT_CONFLICTS\" value=\"true\" />\n    <option name=\"HIGHLIGHT_NON_ACTIVE_CHANGELIST\" value=\"false\" />\n    <option name=\"LAST_RESOLUTION\" value=\"IGNORE\" />\n  </component>\n  <component name=\"CodeInsightWorkspaceSettings\">\n    <option name=\"optimizeImportsOnTheFly\" value=\"true\" />\n  </component>\n  <component name=\"CompilerWorkspaceConfiguration\">\n    <option name=\"MAKE_PROJECT_ON_SAVE\" value=\"true\" />\n  </component>\n  <component name=\"CoverageDataManager\">\n    <SUITE FILE_PATH=\"coverage/shieldratelimiter$MAccBalanceTests_testAlipayQueryBalance.ic\" NAME=\"MAccBalanceTests.testAlipayQueryBalance Coverage Results\" MODIFIED=\"1543370283268\" SOURCE_PROVIDER=\"com.intellij.coverage.DefaultCoverageFileProvider\" RUNNER=\"idea\" COVERAGE_BY_TEST_ENABLED=\"false\" COVERAGE_TRACING_ENABLED=\"false\">\n      <FILTER>com.gaoyang.marketing.maccbasecore.*</FILTER>\n    </SUITE>\n  </component>\n  <component name=\"DatabaseView\">\n    <option name=\"SHOW_INTERMEDIATE\" value=\"true\" />\n    <option name=\"GROUP_DATA_SOURCES\" value=\"true\" />\n    <option name=\"GROUP_SCHEMA\" value=\"true\" />\n    <option name=\"GROUP_CONTENTS\" value=\"false\" />\n    <option name=\"SORT_POSITIONED\" value=\"false\" />\n    <option name=\"SHOW_EMPTY_GROUPS\" value=\"false\" />\n    <option name=\"AUTO_SCROLL_FROM_SOURCE\" value=\"false\" />\n    <option name=\"HIDDEN_KINDS\">\n      <set />\n    </option>\n    <expand />\n    <select />\n  </component>\n  <component name=\"FUSProjectUsageTrigger\">\n    <session id=\"-709546611\">\n      <usages-collector id=\"statistics.lifecycle.project\">\n        <counts>\n          <entry key=\"project.closed\" value=\"27\" />\n          <entry key=\"project.open.time.118\" value=\"1\" />\n          <entry key=\"project.open.time.12\" value=\"4\" />\n          <entry key=\"project.open.time.13\" value=\"6\" />\n          <entry key=\"project.open.time.14\" value=\"7\" />\n          <entry key=\"project.open.time.15\" value=\"8\" />\n          <entry key=\"project.open.time.16\" value=\"5\" />\n          <entry key=\"project.open.time.17\" value=\"7\" />\n          <entry key=\"project.open.time.18\" value=\"5\" />\n          <entry key=\"project.open.time.19\" value=\"3\" />\n          <entry key=\"project.open.time.22\" value=\"1\" />\n          <entry key=\"project.open.time.23\" value=\"1\" />\n          <entry key=\"project.open.time.24\" value=\"2\" />\n          <entry key=\"project.open.time.4\" value=\"1\" />\n          <entry key=\"project.open.time.6\" value=\"1\" />\n          <entry key=\"project.open.time.9\" value=\"4\" />\n          <entry key=\"project.opened\" value=\"56\" />\n        </counts>\n      </usages-collector>\n      <usages-collector id=\"statistics.file.extensions.edit\">\n        <counts>\n          <entry key=\"CHANGELOG\" value=\"416\" />\n          <entry key=\"Dockerfile\" value=\"14\" />\n          <entry key=\"IntelliJ Default\" value=\"11\" />\n          <entry key=\"gitignore\" value=\"2\" />\n          <entry key=\"java\" value=\"30756\" />\n          <entry key=\"lua\" value=\"26\" />\n          <entry key=\"md\" value=\"4094\" />\n          <entry key=\"properties\" value=\"1495\" />\n          <entry key=\"sh\" value=\"33\" />\n          <entry key=\"sql\" value=\"66\" />\n          <entry key=\"txt\" value=\"51\" />\n          <entry key=\"xml\" value=\"1206\" />\n        </counts>\n      </usages-collector>\n      <usages-collector id=\"statistics.file.types.edit\">\n        <counts>\n          <entry key=\"JAVA\" value=\"30756\" />\n          <entry key=\"Markdown\" value=\"4094\" />\n          <entry key=\"PLAIN_TEXT\" value=\"542\" />\n          <entry key=\"Properties\" value=\"1495\" />\n          <entry key=\"SQL\" value=\"86\" />\n          <entry key=\"Scratch\" value=\"66\" />\n          <entry key=\"VTL\" value=\"11\" />\n          <entry key=\"XML\" value=\"1120\" />\n        </counts>\n      </usages-collector>\n      <usages-collector id=\"statistics.file.extensions.open\">\n        <counts>\n          <entry key=\"0-SNAPSHOT\" value=\"1\" />\n          <entry key=\"111\" value=\"1\" />\n          <entry key=\"15\" value=\"1\" />\n          <entry key=\"2\" value=\"1\" />\n          <entry key=\"6\" value=\"1\" />\n          <entry key=\"8\" value=\"2\" />\n          <entry key=\"CHANGELOG\" value=\"4\" />\n          <entry key=\"Dockerfile\" value=\"10\" />\n          <entry key=\"class\" value=\"32\" />\n          <entry key=\"gitignore\" value=\"12\" />\n          <entry key=\"java\" value=\"1295\" />\n          <entry key=\"lua\" value=\"6\" />\n          <entry key=\"md\" value=\"45\" />\n          <entry key=\"properties\" value=\"125\" />\n          <entry key=\"sh\" value=\"10\" />\n          <entry key=\"springboot添加业务探针\" value=\"1\" />\n          <entry key=\"sql\" value=\"2\" />\n          <entry key=\"xml\" value=\"251\" />\n          <entry key=\"xsd\" value=\"1\" />\n          <entry key=\"设置gitignore去除多余文件\" value=\"1\" />\n        </counts>\n      </usages-collector>\n      <usages-collector id=\"statistics.file.types.open\">\n        <counts>\n          <entry key=\"CLASS\" value=\"32\" />\n          <entry key=\"JAVA\" value=\"1295\" />\n          <entry key=\"Markdown\" value=\"43\" />\n          <entry key=\"PLAIN_TEXT\" value=\"47\" />\n          <entry key=\"Properties\" value=\"125\" />\n          <entry key=\"Scratch\" value=\"2\" />\n          <entry key=\"UML\" value=\"6\" />\n          <entry key=\"XML\" value=\"252\" />\n        </counts>\n      </usages-collector>\n    </session>\n  </component>\n  <component name=\"FavoritesManager\">\n    <favorites_list name=\"shieldratelimiter\" />\n  </component>\n  <component name=\"FileEditorManager\">\n    <leaf SIDE_TABS_SIZE_LIMIT_KEY=\"300\">\n      <file pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/biz/service/AccountBizServiceFacadeImpl.java\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state relative-caret-position=\"6935\">\n              <caret line=\"473\" column=\"34\" selection-start-line=\"473\" selection-start-column=\"34\" selection-end-line=\"473\" selection-end-column=\"34\" />\n              <folding>\n                <element signature=\"imports\" expanded=\"true\" />\n              </folding>\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file pinned=\"false\" current-in-tab=\"true\">\n        <entry file=\"file://$PROJECT_DIR$/shleld-ratelimter-demo/src/main/java/com/snowalker/ratelimiter/demo/controller/TestController.java\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state relative-caret-position=\"169\">\n              <caret line=\"26\" column=\"63\" selection-start-line=\"26\" selection-start-column=\"63\" selection-end-line=\"26\" selection-end-column=\"63\" />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/shleld-ratelimter-demo/src/main/java/com/snowalker/ratelimiter/demo/Application.java\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state relative-caret-position=\"269\">\n              <caret line=\"24\" lean-forward=\"true\" selection-start-line=\"24\" selection-end-line=\"24\" />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/biz/service/AccountBalanceBizServiceFacadeImpl.java\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state relative-caret-position=\"171\">\n              <caret line=\"34\" column=\"68\" selection-start-line=\"34\" selection-start-column=\"68\" selection-end-line=\"34\" selection-end-column=\"68\" />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/AccountBalanceBizServiceFacade.java\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state relative-caret-position=\"171\">\n              <caret line=\"40\" column=\"77\" selection-start-line=\"40\" selection-start-column=\"77\" selection-end-line=\"40\" selection-end-column=\"77\" />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/model/request/QueryAccountBalanceData.java\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state relative-caret-position=\"304\">\n              <caret line=\"16\" column=\"17\" selection-start-line=\"16\" selection-start-column=\"17\" selection-end-line=\"16\" selection-end-column=\"17\" />\n            </state>\n          </provider>\n        </entry>\n      </file>\n    </leaf>\n  </component>\n  <component name=\"FileTemplateManagerImpl\">\n    <option name=\"RECENT_TEMPLATES\">\n      <list>\n        <option value=\"AnnotationType\" />\n        <option value=\"package-info\" />\n        <option value=\"Interface\" />\n        <option value=\"Class\" />\n      </list>\n    </option>\n  </component>\n  <component name=\"FindInProjectRecents\">\n    <findStrings>\n      <find>用户账户信息查询失败</find>\n      <find>queryWebNoticeCrouselBannerList</find>\n      <find>queryWebNoticePopupBoxesList</find>\n      <find>QueryNoticeInfoListDO</find>\n      <find>queryNoticeInfoList</find>\n      <find>insertPrizeInfo</find>\n      <find>queryPrizeInfoList</find>\n      <find>balanceCurTotal</find>\n      <find>queryChargedAccBalanceRecord</find>\n      <find>e.printStackTrace()</find>\n      <find>createNoticeInfo</find>\n      <find>addChargeAccountBalance</find>\n      <find>accCurrBalance</find>\n      <find>updateSpecialChargeAccount</find>\n      <find>冲正</find>\n      <find>needRollbackTradeAmount</find>\n      <find>balanceLast</find>\n      <find>tradeAmountReal</find>\n      <find>ProductTypeInfoModel</find>\n      <find>ProductInfoBizServiceImpl</find>\n      <find>queryAllBalanceRecordList</find>\n      <find>清零</find>\n      <find>version</find>\n      <find>chargeAccountData.getExtMsg()</find>\n      <find>extMsg</find>\n      <find>queryAccountBalanceListData</find>\n      <find>ChargeNotifyLocalModel</find>\n      <find>SpecialChargeLocalModel</find>\n      <find>rulerChargeUtils</find>\n      <find>chargeExtMsg</find>\n    </findStrings>\n    <replaceStrings>\n      <replace>isBlank</replace>\n      <replace>queryNoticeInfoListData</replace>\n      <replace>OutQueryNoticeInfoModel</replace>\n      <replace>CreateNoticeInfoData</replace>\n      <replace>UpdateNoticeInfoData</replace>\n      <replace>OutCreateNoticeInfoModel</replace>\n      <replace>OutUpdateNoticeInfoModel</replace>\n      <replace>CreateNoticeInfoDO</replace>\n      <replace>CreateNoticeInfoDobj</replace>\n      <replace>QueryNoticeInfoListDO</replace>\n      <replace>QueryNoticeInfoDobj</replace>\n      <replace>getNextValueByAscLong</replace>\n      <replace>ChargeNotifyAcmConfig</replace>\n      <replace>SpecialChargeAcmConfig</replace>\n    </replaceStrings>\n    <dirStrings>\n      <dir>D:\\snowalker-workspace\\0mkt-workspace\\maccbasecore\\maccbasecore-service</dir>\n      <dir>D:\\snowalker-workspace\\0mkt-workspace\\mfbizcore</dir>\n      <dir>D:\\snowalker-workspace\\0mkt-workspace\\maccbasecore</dir>\n    </dirStrings>\n  </component>\n  <component name=\"Git.Settings\">\n    <option name=\"ROOT_SYNC\" value=\"DONT_SYNC\" />\n    <option name=\"RECENT_GIT_ROOT_PATH\" value=\"$PROJECT_DIR$\" />\n  </component>\n  <component name=\"HighlightingSettingsPerFile\">\n    <setting file=\"file://D:/snowalker-workspace/0mkt-workspace/mprodbasecore/mprodbasecore-service/src/test/java/com/gaoyang/marketing/mprodbasecore/ZhouzhouLingTests.java\" root0=\"FORCE_HIGHLIGHTING\" />\n    <setting file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/AccountBalanceBizServiceFacade.java\" root0=\"FORCE_HIGHLIGHTING\" />\n  </component>\n  <component name=\"IdeDocumentHistory\">\n    <option name=\"CHANGED_PATHS\">\n      <list>\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/core/service/AccBalanceBizService.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/dal/impl/AccountBalanceDaoImpl.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/dal/AccountBalanceDao.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/enums/AlipayAccBalanceEnum.java\" />\n        <option value=\"$APPLICATION_CONFIG_DIR$/consoles/db/40715297-6a53-4c3c-85d1-a0c9fb7ddb38/console.sql\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/enumutil/AlipayAccBalanceEnum.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/dal/dobj/AccountBalanceQueryDobj.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/resources/com/gaoyang/marketing/maccbasecore/common/dal/dobj/xml/AccountBalanceInfoMapping.xml\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/constant/AccBalanceConst.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/resources/maccbasecore/common-config.properties\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/resources/META-INF/maccbasecore/applicationContext-dubbo-service.xml\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/AccountBizServiceFacade.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/doc/高阳Kubernates部署简介.md\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/util/notify/bean/AccChargeConfigModel.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/util/notify/bean/AccSpecialChargeConfigModel.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/util/notify/bean/AccExtBean.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/util/notify/bean/AccExtEntity.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/util/notify/bean/ChargeNotifyLocalModel.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/util/notify/bean/SpecialChargeLocalModel.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/util/notify/bean/SpecialChargeAcmConfig.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/util/notify/bean/ChargeNotifyAcmConfig.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/util/notify/MessageServer.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/util/notify/AccNotifySender.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/core/service/impl/AccBalanceBizServiceImpl.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/CHANGELOG\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/resources/application-dev.properties\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/resources/application-prod.properties\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/util/config/RulerChargeUtils.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/pom.xml\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/model/response/OutAlipayAccBalanceModel.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/model/response/OutAccountBalanceModel.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/model/request/QueryAccBalanceData.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/AccountBalanceBizServiceFacade.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/model/request/QueryAccountBalanceData.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/biz/service/AccountBalanceBizServiceFacadeImpl.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/test/java/com/gaoyang/marketing/maccbasecore/MAccBalanceTests.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/README.md\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/pom.xml\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/model/AccExtEntity.java\" />\n        <option value=\"$PROJECT_DIR$/../rmqtool-protocol-lib/rctmq-spring-demo/src/main/java/com/snowalker/executor/rmqtest/MQSenderController.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/test/java/com/gaoyang/marketing/maccbasecore/MAccBaseCoreAppTests.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/constant/AccountConst.java\" />\n        <option value=\"D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/biz/service/AccountBizServiceFacadeImpl.java\" />\n        <option value=\"$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/src/main/java/com/gaoyang/marketing/constant/MsgProtocolConst.java\" />\n        <option value=\"$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/src/main/java/com/gaoyang/marketing/constant/MsgEnvConst.java\" />\n        <option value=\"$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/src/main/java/com/gaoyang/marketing/protocol/ExchangeVoucherProtocol.java\" />\n        <option value=\"$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/src/main/java/com/gaoyang/marketing/MsgProtocolFactory.java\" />\n        <option value=\"$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/src/test/java/com/gaoyang/marketing/protocol/TestAccPaymentSuccProtocol.java\" />\n        <option value=\"$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/pom.xml\" />\n        <option value=\"$PROJECT_DIR$/shield-ratelimiter-core/pom.xml\" />\n        <option value=\"$PROJECT_DIR$/shleld-ratelimter-demo/src/main/java/com/snowalker/ratelimiter/demo/controller/TestController.java\" />\n      </list>\n    </option>\n  </component>\n  <component name=\"JsBuildToolGruntFileManager\" detection-done=\"true\" sorting=\"DEFINITION_ORDER\" />\n  <component name=\"JsBuildToolPackageJson\" detection-done=\"true\" sorting=\"DEFINITION_ORDER\" />\n  <component name=\"JsGulpfileManager\">\n    <detection-done>true</detection-done>\n    <sorting>DEFINITION_ORDER</sorting>\n  </component>\n  <component name=\"MavenImportPreferences\">\n    <option name=\"importingSettings\">\n      <MavenImportingSettings>\n        <option name=\"importAutomatically\" value=\"true\" />\n      </MavenImportingSettings>\n    </option>\n  </component>\n  <component name=\"MavenProjectNavigator\">\n    <treeState>\n      <expand>\n        <path>\n          <item name=\"\" type=\"16c1761:MavenProjectsStructure$RootNode\" />\n          <item name=\"maccbasecore-facade\" type=\"9519ce18:MavenProjectsStructure$ProjectNode\" />\n        </path>\n        <path>\n          <item name=\"\" type=\"16c1761:MavenProjectsStructure$RootNode\" />\n          <item name=\"maccbasecore-facade\" type=\"9519ce18:MavenProjectsStructure$ProjectNode\" />\n          <item name=\"Lifecycle\" type=\"58874e2:MavenProjectsStructure$LifecycleNode\" />\n        </path>\n        <path>\n          <item name=\"\" type=\"16c1761:MavenProjectsStructure$RootNode\" />\n          <item name=\"maccbasecore-parent\" type=\"9519ce18:MavenProjectsStructure$ProjectNode\" />\n        </path>\n        <path>\n          <item name=\"\" type=\"16c1761:MavenProjectsStructure$RootNode\" />\n          <item name=\"maccbasecore-parent\" type=\"9519ce18:MavenProjectsStructure$ProjectNode\" />\n          <item name=\"Lifecycle\" type=\"58874e2:MavenProjectsStructure$LifecycleNode\" />\n        </path>\n        <path>\n          <item name=\"\" type=\"16c1761:MavenProjectsStructure$RootNode\" />\n          <item name=\"msg-protocol\" type=\"9519ce18:MavenProjectsStructure$ProjectNode\" />\n        </path>\n        <path>\n          <item name=\"\" type=\"16c1761:MavenProjectsStructure$RootNode\" />\n          <item name=\"msg-protocol\" type=\"9519ce18:MavenProjectsStructure$ProjectNode\" />\n          <item name=\"Lifecycle\" type=\"58874e2:MavenProjectsStructure$LifecycleNode\" />\n        </path>\n      </expand>\n      <select />\n    </treeState>\n  </component>\n  <component name=\"ProjectFrameBounds\" extendedState=\"6\">\n    <option name=\"x\" value=\"415\" />\n    <option name=\"y\" value=\"-10\" />\n    <option name=\"width\" value=\"760\" />\n    <option name=\"height\" value=\"1325\" />\n  </component>\n  <component name=\"ProjectInspectionProfilesVisibleTreeState\">\n    <entry key=\"Project Default\">\n      <profile-state>\n        <expanded-state>\n          <State />\n          <State>\n            <id>Abstraction issuesJava</id>\n          </State>\n          <State>\n            <id>Ali-Check</id>\n          </State>\n          <State>\n            <id>Android</id>\n          </State>\n          <State>\n            <id>Code style issuesJava</id>\n          </State>\n          <State>\n            <id>Compiler issuesJava</id>\n          </State>\n          <State>\n            <id>CorrectnessLintAndroid</id>\n          </State>\n          <State>\n            <id>FinalizationJava</id>\n          </State>\n          <State>\n            <id>GeneralJavaScript</id>\n          </State>\n          <State>\n            <id>Google Web Toolkit</id>\n          </State>\n          <State>\n            <id>Groovy</id>\n          </State>\n          <State>\n            <id>IconsUsabilityLintAndroid</id>\n          </State>\n          <State>\n            <id>Inheritance issuesJava</id>\n          </State>\n          <State>\n            <id>Internationalization</id>\n          </State>\n          <State>\n            <id>InternationalizationJava</id>\n          </State>\n          <State>\n            <id>InternationalizationLintAndroid</id>\n          </State>\n          <State>\n            <id>J2ME issuesJava</id>\n          </State>\n          <State>\n            <id>JSP</id>\n          </State>\n          <State>\n            <id>Java</id>\n          </State>\n          <State>\n            <id>Java 5Java language level migration aidsJava</id>\n          </State>\n          <State>\n            <id>Java 9Java language level migration aidsJava</id>\n          </State>\n          <State>\n            <id>Java interop issuesKotlin</id>\n          </State>\n          <State>\n            <id>Java language level migration aidsJava</id>\n          </State>\n          <State>\n            <id>JavaBeans issuesJava</id>\n          </State>\n          <State>\n            <id>JavaScript</id>\n          </State>\n          <State>\n            <id>Kotlin</id>\n          </State>\n          <State>\n            <id>LintAndroid</id>\n          </State>\n          <State>\n            <id>Numeric issuesJava</id>\n          </State>\n          <State>\n            <id>OtherGroovy</id>\n          </State>\n          <State>\n            <id>PerformanceJava</id>\n          </State>\n          <State>\n            <id>PerformanceLintAndroid</id>\n          </State>\n          <State>\n            <id>Probable bugsJava</id>\n          </State>\n          <State>\n            <id>Probable bugsKotlin</id>\n          </State>\n          <State>\n            <id>SecurityJava</id>\n          </State>\n          <State>\n            <id>SecurityLintAndroid</id>\n          </State>\n          <State>\n            <id>Serialization issuesJava</id>\n          </State>\n          <State>\n            <id>UsabilityLintAndroid</id>\n          </State>\n          <State>\n            <id>Verbose or redundant code constructsJava</id>\n          </State>\n          <State>\n            <id>WebSocket</id>\n          </State>\n        </expanded-state>\n        <selected-state>\n          <State>\n            <id>JSP</id>\n          </State>\n        </selected-state>\n      </profile-state>\n    </entry>\n  </component>\n  <component name=\"ProjectLevelVcsManager\" settingsEditedManually=\"true\" />\n  <component name=\"ProjectView\">\n    <navigator proportions=\"\" version=\"1\">\n      <foldersAlwaysOnTop value=\"true\" />\n    </navigator>\n    <panes>\n      <pane id=\"PackagesPane\" />\n      <pane id=\"ProjectPane\">\n        <subPane>\n          <expand>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"service\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"common\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"common\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"mq\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"common\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"mq\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"acccharge\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"common\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"util\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"common\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"util\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"notify\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"common\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"util\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"notify\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"bean\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"core\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"core\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"service\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"core\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"impl\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"model\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"resources\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"resources\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"xml\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"resources\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"test\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"test\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore-service\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"test\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"maccbasecore\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"shield-ratelimiter\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"shield-ratelimiter\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"shield-ratelimiter-core\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"shield-ratelimiter\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"shield-ratelimiter-core\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"shield-ratelimiter\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"shield-ratelimiter-core\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"shield-ratelimiter\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"shield-ratelimiter-core\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"shield-ratelimiter\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"shield-ratelimiter-core\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"core\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"shield-ratelimiter\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"shield-ratelimiter-core\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"resources\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"shield-ratelimiter\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"shleld-ratelimter-demo\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"shield-ratelimiter\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"shleld-ratelimter-demo\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"shield-ratelimiter\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"shleld-ratelimter-demo\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"shield-ratelimiter\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"shleld-ratelimter-demo\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"shield-ratelimiter\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"shleld-ratelimter-demo\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"demo\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"shield-ratelimiter\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"shleld-ratelimter-demo\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"java\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"demo\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"controller\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"shield-ratelimiter\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"shleld-ratelimter-demo\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"src\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"main\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"resources\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"shield-transaction\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"shieldratelimiter\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"shield-transaction\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"shield-message-transaction\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n          </expand>\n          <select />\n        </subPane>\n      </pane>\n      <pane id=\"Scope\" />\n    </panes>\n  </component>\n  <component name=\"PropertiesComponent\">\n    <property name=\"DatabaseDriversLRU\" value=\"mysql\" />\n    <property name=\"RequestMappingsPanelOrder0\" value=\"0\" />\n    <property name=\"RequestMappingsPanelOrder1\" value=\"1\" />\n    <property name=\"RequestMappingsPanelOrder2\" value=\"2\" />\n    <property name=\"RequestMappingsPanelWidth0\" value=\"75\" />\n    <property name=\"RequestMappingsPanelWidth1\" value=\"75\" />\n    <property name=\"RequestMappingsPanelWidth2\" value=\"75\" />\n    <property name=\"SearchEverywhereHistoryKey\" value=\"&#9;FILE&#9;file://D:/snowalker-workspace/0mkt-workspace/mprodbasecore/mprodbasecore-facade/src/main/java/com/gaoyang/marketing/mbasecore/model/request/UpdateNoticeInfoData.java&#10;isEmpty&#9;PSI&#9;JAVA://com.alipay.sofa.common.profile.ArrayUtil#isEmpty\" />\n    <property name=\"WebServerToolWindowFactoryState\" value=\"false\" />\n    <property name=\"aspect.path.notification.shown\" value=\"true\" />\n    <property name=\"com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp\" value=\"1543988937784\" />\n    <property name=\"database.console.LAST_STATE\" value=\"false\" />\n    <property name=\"extract.method.default.visibility\" value=\"private\" />\n    <property name=\"last_opened_file_path\" value=\"$PROJECT_DIR$/../sheild-conf-single/pom.xml\" />\n    <property name=\"nodejs_interpreter_path.stuck_in_default_project\" value=\"undefined stuck path\" />\n    <property name=\"nodejs_npm_path_reset_for_default_project\" value=\"true\" />\n    <property name=\"project.structure.last.edited\" value=\"Problems\" />\n    <property name=\"project.structure.proportion\" value=\"0.0\" />\n    <property name=\"project.structure.side.proportion\" value=\"0.2\" />\n    <property name=\"settings.editor.selected.configurable\" value=\"editing.templates\" />\n  </component>\n  <component name=\"RecentsManager\">\n    <key name=\"MoveClassesOrPackagesDialog.RECENTS_KEY\">\n      <recent name=\"com.gaoyang.marketing.mprodbasecore.common.dal.dobj\" />\n      <recent name=\"com.gaoyang.marketing.maccbasecore.biz.service\" />\n    </key>\n    <key name=\"CopyFile.RECENT_KEYS\">\n      <recent name=\"D:\\snowalker-workspace\\0mkt-workspace\\maccbasecore\\maccbasecore-service\\doc\" />\n      <recent name=\"D:\\snowalker-workspace\\0mkt-workspace\\customerapiservice\" />\n      <recent name=\"D:\\snowalker-workspace\\0mkt-workspace\\customerapiservice\\src\\main\" />\n      <recent name=\"D:\\snowalker-workspace\\0mkt-workspace\\mprodbasecore\\mprodbasecore-service\\src\\main\\resources\\META-INF\\mprodbasecore\" />\n      <recent name=\"D:\\snowalker-workspace\\0mkt-workspace\\mprodbasecore\\mprodbasecore-service\\src\\main\\resources\\com\\gaoyang\\marketing\\mprodbasecore\\common\\dal\\dobj\\xml\" />\n    </key>\n    <key name=\"CopyClassDialog.RECENTS_KEY\">\n      <recent name=\"com.gaoyang.marketing.maccbasecore.facade.model\" />\n      <recent name=\"com.gaoyang.marketing.maccbasecore.facade.enums\" />\n      <recent name=\"com.gaoyang.marketing.maccbasecore.facade.model.request\" />\n      <recent name=\"com.gaoyang.marketing.maccbasecore.facade.model.response\" />\n      <recent name=\"com.gaoyang.marketing.mprodbasecore\" />\n    </key>\n    <key name=\"MoveFile.RECENT_KEYS\">\n      <recent name=\"D:\\snowalker-workspace\\0mkt-workspace\\mprodbasecore\\mprodbasecore-service\\src\\main\\resources\\com\\gaoyang\\marketing\\mprodbasecore\\common\\dal\\dobj\\xml\" />\n      <recent name=\"D:\\snowalker-workspace\\0mkt-workspace\\mprodbasecore\\mprodbasecore-service\\src\\main\\resources\\com.gaoyang.marketing.mprodbasecore.common.dal.dobj.noticeinfo.xml\" />\n    </key>\n  </component>\n  <component name=\"RunDashboard\">\n    <option name=\"configurationTypes\">\n      <set>\n        <option value=\"SpringBootApplicationConfigurationType\" />\n      </set>\n    </option>\n    <option name=\"ruleStates\">\n      <list>\n        <RuleState>\n          <option name=\"name\" value=\"ConfigurationTypeDashboardGroupingRule\" />\n        </RuleState>\n        <RuleState>\n          <option name=\"name\" value=\"StatusDashboardGroupingRule\" />\n        </RuleState>\n      </list>\n    </option>\n    <option name=\"contentProportion\" value=\"0.10382514\" />\n  </component>\n  <component name=\"RunManager\" selected=\"Spring Boot.Application (1)\">\n    <configuration name=\"MAccBaseCoreAppTests.testAccBalanceCheckHandler\" type=\"JUnit\" factoryName=\"JUnit\" temporary=\"true\" nameIsGenerated=\"true\">\n      <module name=\"maccbasecore-service\" />\n      <extension name=\"coverage\">\n        <pattern>\n          <option name=\"PATTERN\" value=\"com.gaoyang.marketing.maccbasecore.*\" />\n          <option name=\"ENABLED\" value=\"true\" />\n        </pattern>\n      </extension>\n      <option name=\"PACKAGE_NAME\" value=\"com.gaoyang.marketing.maccbasecore\" />\n      <option name=\"MAIN_CLASS_NAME\" value=\"com.gaoyang.marketing.maccbasecore.MAccBaseCoreAppTests\" />\n      <option name=\"METHOD_NAME\" value=\"testAccBalanceCheckHandler\" />\n      <option name=\"TEST_OBJECT\" value=\"method\" />\n      <method v=\"2\">\n        <option name=\"Make\" enabled=\"true\" />\n      </method>\n    </configuration>\n    <configuration name=\"TestAccPaymentSuccProtocol.testMsgProtocolFactory\" type=\"JUnit\" factoryName=\"JUnit\" temporary=\"true\" nameIsGenerated=\"true\">\n      <module name=\"msg-protocol\" />\n      <extension name=\"coverage\">\n        <pattern>\n          <option name=\"PATTERN\" value=\"com.gaoyang.marketing.protocol.*\" />\n          <option name=\"ENABLED\" value=\"true\" />\n        </pattern>\n      </extension>\n      <option name=\"PACKAGE_NAME\" value=\"com.gaoyang.marketing.protocol\" />\n      <option name=\"MAIN_CLASS_NAME\" value=\"com.gaoyang.marketing.protocol.TestAccPaymentSuccProtocol\" />\n      <option name=\"METHOD_NAME\" value=\"testMsgProtocolFactory\" />\n      <option name=\"TEST_OBJECT\" value=\"method\" />\n      <method v=\"2\">\n        <option name=\"Make\" enabled=\"true\" />\n      </method>\n    </configuration>\n    <configuration name=\"TestAccPaymentSuccProtocol.testVoucherExchange\" type=\"JUnit\" factoryName=\"JUnit\" temporary=\"true\" nameIsGenerated=\"true\">\n      <module name=\"msg-protocol\" />\n      <extension name=\"coverage\">\n        <pattern>\n          <option name=\"PATTERN\" value=\"com.gaoyang.marketing.protocol.*\" />\n          <option name=\"ENABLED\" value=\"true\" />\n        </pattern>\n      </extension>\n      <option name=\"PACKAGE_NAME\" value=\"com.gaoyang.marketing.protocol\" />\n      <option name=\"MAIN_CLASS_NAME\" value=\"com.gaoyang.marketing.protocol.TestAccPaymentSuccProtocol\" />\n      <option name=\"METHOD_NAME\" value=\"testVoucherExchange\" />\n      <option name=\"TEST_OBJECT\" value=\"method\" />\n      <method v=\"2\">\n        <option name=\"Make\" enabled=\"true\" />\n      </method>\n    </configuration>\n    <configuration name=\"App (1)\" type=\"SpringBootApplicationConfigurationType\" factoryName=\"Spring Boot\">\n      <module name=\"mfbizcore-service\" />\n      <option name=\"SPRING_BOOT_MAIN_CLASS\" value=\"com.gaoyang.marketing.mfbizcore.App\" />\n      <method v=\"2\">\n        <option name=\"Make\" enabled=\"true\" />\n      </method>\n    </configuration>\n    <configuration name=\"App (2)\" type=\"SpringBootApplicationConfigurationType\" factoryName=\"Spring Boot\">\n      <module name=\"mprodbasecore-service\" />\n      <option name=\"SPRING_BOOT_MAIN_CLASS\" value=\"com.gaoyang.marketing.mprodbasecore.App\" />\n      <method v=\"2\">\n        <option name=\"Make\" enabled=\"true\" />\n      </method>\n    </configuration>\n    <configuration name=\"App (3)\" type=\"SpringBootApplicationConfigurationType\" factoryName=\"Spring Boot\">\n      <module name=\"shield-demo-project-single\" />\n      <option name=\"SPRING_BOOT_MAIN_CLASS\" value=\"com.conf.test.App\" />\n      <method v=\"2\">\n        <option name=\"Make\" enabled=\"true\" />\n      </method>\n    </configuration>\n    <configuration name=\"App (4)\" type=\"SpringBootApplicationConfigurationType\" factoryName=\"Spring Boot\">\n      <module name=\"customer-api-service\" />\n      <option name=\"SPRING_BOOT_MAIN_CLASS\" value=\"com.gaoyang.marketing.customer.App\" />\n      <method v=\"2\">\n        <option name=\"Make\" enabled=\"true\" />\n      </method>\n    </configuration>\n    <configuration name=\"App\" type=\"SpringBootApplicationConfigurationType\" factoryName=\"Spring Boot\">\n      <module name=\"maccbasecore-service\" />\n      <option name=\"SPRING_BOOT_MAIN_CLASS\" value=\"com.gaoyang.marketing.maccbasecore.App\" />\n      <method v=\"2\">\n        <option name=\"Make\" enabled=\"true\" />\n      </method>\n    </configuration>\n    <configuration name=\"Application (1)\" type=\"SpringBootApplicationConfigurationType\" factoryName=\"Spring Boot\" temporary=\"true\" nameIsGenerated=\"true\">\n      <module name=\"shleld-ratelimter-demo\" />\n      <extension name=\"coverage\">\n        <pattern>\n          <option name=\"PATTERN\" value=\"com.snowalker.ratelimiter.demo.*\" />\n          <option name=\"ENABLED\" value=\"true\" />\n        </pattern>\n      </extension>\n      <option name=\"SPRING_BOOT_MAIN_CLASS\" value=\"com.snowalker.ratelimiter.demo.Application\" />\n      <method v=\"2\">\n        <option name=\"Make\" enabled=\"true\" />\n      </method>\n    </configuration>\n    <configuration name=\"Application\" type=\"SpringBootApplicationConfigurationType\" factoryName=\"Spring Boot\" temporary=\"true\" nameIsGenerated=\"true\">\n      <module name=\"rctmq-spring-demo\" />\n      <extension name=\"coverage\">\n        <pattern>\n          <option name=\"PATTERN\" value=\"com.snowalker.*\" />\n          <option name=\"ENABLED\" value=\"true\" />\n        </pattern>\n      </extension>\n      <option name=\"SPRING_BOOT_MAIN_CLASS\" value=\"com.snowalker.Application\" />\n      <additionalParameters>\n        <param>\n          <option name=\"enabled\" value=\"true\" />\n          <option name=\"name\" value=\"\" />\n          <option name=\"value\" value=\"\" />\n        </param>\n        <param>\n          <option name=\"enabled\" value=\"true\" />\n          <option name=\"name\" value=\"\" />\n          <option name=\"value\" value=\"\" />\n        </param>\n        <param>\n          <option name=\"enabled\" value=\"true\" />\n          <option name=\"name\" value=\"\" />\n          <option name=\"value\" value=\"\" />\n        </param>\n      </additionalParameters>\n      <method v=\"2\">\n        <option name=\"Make\" enabled=\"true\" />\n      </method>\n    </configuration>\n    <configuration name=\"MopmwebServiceApplication\" type=\"SpringBootApplicationConfigurationType\" factoryName=\"Spring Boot\">\n      <module name=\"mopmweb-service\" />\n      <option name=\"SPRING_BOOT_MAIN_CLASS\" value=\"com.gaoyang.marketing.mopmweb.MopmwebServiceApplication\" />\n      <method v=\"2\">\n        <option name=\"Make\" enabled=\"true\" />\n      </method>\n    </configuration>\n    <list>\n      <item itemvalue=\"Spring Boot.App\" />\n      <item itemvalue=\"Spring Boot.App (1)\" />\n      <item itemvalue=\"Spring Boot.App (2)\" />\n      <item itemvalue=\"Spring Boot.MopmwebServiceApplication\" />\n      <item itemvalue=\"Spring Boot.App (3)\" />\n      <item itemvalue=\"Spring Boot.App (4)\" />\n      <item itemvalue=\"JUnit.MAccBaseCoreAppTests.testAccBalanceCheckHandler\" />\n      <item itemvalue=\"Spring Boot.Application\" />\n      <item itemvalue=\"JUnit.TestAccPaymentSuccProtocol.testVoucherExchange\" />\n      <item itemvalue=\"JUnit.TestAccPaymentSuccProtocol.testMsgProtocolFactory\" />\n      <item itemvalue=\"Spring Boot.Application (1)\" />\n    </list>\n    <recent_temporary>\n      <list>\n        <item itemvalue=\"Spring Boot.Application (1)\" />\n        <item itemvalue=\"JUnit.TestAccPaymentSuccProtocol.testVoucherExchange\" />\n        <item itemvalue=\"JUnit.TestAccPaymentSuccProtocol.testMsgProtocolFactory\" />\n        <item itemvalue=\"Spring Boot.Application\" />\n        <item itemvalue=\"JUnit.MAccBaseCoreAppTests.testAccBalanceCheckHandler\" />\n      </list>\n    </recent_temporary>\n  </component>\n  <component name=\"SpringBeansView\">\n    <option name=\"beanDetailsProportion\" value=\"0.3\" />\n  </component>\n  <component name=\"SvnConfiguration\">\n    <configuration />\n  </component>\n  <component name=\"TaskManager\">\n    <task active=\"true\" id=\"Default\" summary=\"Default task\">\n      <changelist id=\"477cdd79-b834-4d18-9f54-0db75fc1fde8\" name=\"Default Changelist\" comment=\"\" />\n      <created>1540572346057</created>\n      <option name=\"number\" value=\"Default\" />\n      <option name=\"presentableId\" value=\"Default\" />\n      <updated>1540572346057</updated>\n      <workItem from=\"1540572350027\" duration=\"7000\" />\n      <workItem from=\"1540572387775\" duration=\"8923000\" />\n      <workItem from=\"1540610034057\" duration=\"240000\" />\n      <workItem from=\"1540652614548\" duration=\"3995000\" />\n      <workItem from=\"1540726404590\" duration=\"1170000\" />\n      <workItem from=\"1540729484048\" duration=\"64000\" />\n      <workItem from=\"1540776698240\" duration=\"4554000\" />\n      <workItem from=\"1540785158094\" duration=\"16434000\" />\n      <workItem from=\"1540861164306\" duration=\"14150000\" />\n      <workItem from=\"1540888647283\" duration=\"393000\" />\n      <workItem from=\"1540889065891\" duration=\"9786000\" />\n      <workItem from=\"1540947680924\" duration=\"18338000\" />\n      <workItem from=\"1541036970551\" duration=\"14106000\" />\n      <workItem from=\"1541120966800\" duration=\"16208000\" />\n      <workItem from=\"1541225355711\" duration=\"2401000\" />\n      <workItem from=\"1541396328808\" duration=\"3901000\" />\n      <workItem from=\"1541404660555\" duration=\"4879000\" />\n      <workItem from=\"1541466441635\" duration=\"5458000\" />\n      <workItem from=\"1541503182652\" duration=\"1754000\" />\n      <workItem from=\"1541554818827\" duration=\"19375000\" />\n      <workItem from=\"1541602000529\" duration=\"1894000\" />\n      <workItem from=\"1541639157191\" duration=\"32967000\" />\n      <workItem from=\"1541740352023\" duration=\"30152000\" />\n      <workItem from=\"1541833389028\" duration=\"5352000\" />\n      <workItem from=\"1541920873260\" duration=\"2555000\" />\n      <workItem from=\"1541984386752\" duration=\"16580000\" />\n      <workItem from=\"1542024011021\" duration=\"867000\" />\n      <workItem from=\"1542073724056\" duration=\"1000000\" />\n      <workItem from=\"1542075042578\" duration=\"12469000\" />\n      <workItem from=\"1542113737498\" duration=\"5063000\" />\n      <workItem from=\"1542252871317\" duration=\"17324000\" />\n      <workItem from=\"1542330774066\" duration=\"2339000\" />\n      <workItem from=\"1542594467180\" duration=\"9585000\" />\n      <workItem from=\"1542676191851\" duration=\"12346000\" />\n      <workItem from=\"1542770423568\" duration=\"4296000\" />\n      <workItem from=\"1542781697336\" duration=\"129000\" />\n      <workItem from=\"1542781876867\" duration=\"13995000\" />\n      <workItem from=\"1542848190290\" duration=\"15230000\" />\n      <workItem from=\"1542893582079\" duration=\"427000\" />\n      <workItem from=\"1542934655451\" duration=\"6452000\" />\n      <workItem from=\"1542958380747\" duration=\"5699000\" />\n      <workItem from=\"1543028892169\" duration=\"10871000\" />\n      <workItem from=\"1543194351072\" duration=\"19449000\" />\n      <workItem from=\"1543281042816\" duration=\"18358000\" />\n      <workItem from=\"1543316959384\" duration=\"490000\" />\n      <workItem from=\"1543370221970\" duration=\"14034000\" />\n      <workItem from=\"1543453719039\" duration=\"18820000\" />\n      <workItem from=\"1543539108140\" duration=\"9565000\" />\n      <workItem from=\"1543677936090\" duration=\"271000\" />\n      <workItem from=\"1543737667911\" duration=\"3846000\" />\n      <workItem from=\"1543761882006\" duration=\"140000\" />\n      <workItem from=\"1543762059901\" duration=\"27000\" />\n      <workItem from=\"1543799653349\" duration=\"14163000\" />\n      <workItem from=\"1543890955370\" duration=\"9069000\" />\n      <workItem from=\"1543971987771\" duration=\"1849000\" />\n      <workItem from=\"1543975534312\" duration=\"6317000\" />\n    </task>\n    <task id=\"LOCAL-00001\" summary=\"snowalker--添加特殊记账逻辑\">\n      <created>1540814643793</created>\n      <option name=\"number\" value=\"00001\" />\n      <option name=\"presentableId\" value=\"LOCAL-00001\" />\n      <option name=\"project\" value=\"LOCAL\" />\n      <updated>1540814643793</updated>\n    </task>\n    <task id=\"LOCAL-00002\" summary=\"snowalker--删除多余常量\">\n      <created>1541988161997</created>\n      <option name=\"number\" value=\"00002\" />\n      <option name=\"presentableId\" value=\"LOCAL-00002\" />\n      <option name=\"project\" value=\"LOCAL\" />\n      <updated>1541988161997</updated>\n    </task>\n    <option name=\"localTasksCounter\" value=\"3\" />\n    <servers />\n  </component>\n  <component name=\"TestHistory\">\n    <history-entry file=\"MAccBaseCoreAppTests_testAccBalanceCheckHandler - 2018.12.03 at 10h 35m 03s.xml\">\n      <configuration name=\"MAccBaseCoreAppTests.testAccBalanceCheckHandler\" configurationId=\"JUnit\" />\n    </history-entry>\n    <history-entry file=\"TestAccPaymentSuccProtocol_testVoucherExchange - 2018.12.05 at 10h 44m 39s.xml\">\n      <configuration name=\"TestAccPaymentSuccProtocol.testVoucherExchange\" configurationId=\"JUnit\" />\n    </history-entry>\n    <history-entry file=\"TestAccPaymentSuccProtocol_testMsgProtocolFactory - 2018.12.05 at 10h 45m 10s.xml\">\n      <configuration name=\"TestAccPaymentSuccProtocol.testMsgProtocolFactory\" configurationId=\"JUnit\" />\n    </history-entry>\n    <history-entry file=\"TestAccPaymentSuccProtocol_testVoucherExchange - 2018.12.05 at 10h 46m 24s.xml\">\n      <configuration name=\"TestAccPaymentSuccProtocol.testVoucherExchange\" configurationId=\"JUnit\" />\n    </history-entry>\n    <history-entry file=\"TestAccPaymentSuccProtocol_testVoucherExchange - 2018.12.05 at 10h 46m 42s.xml\">\n      <configuration name=\"TestAccPaymentSuccProtocol.testVoucherExchange\" configurationId=\"JUnit\" />\n    </history-entry>\n    <history-entry file=\"TestAccPaymentSuccProtocol_testVoucherExchange - 2018.12.05 at 10h 47m 10s.xml\">\n      <configuration name=\"TestAccPaymentSuccProtocol.testVoucherExchange\" configurationId=\"JUnit\" />\n    </history-entry>\n    <history-entry file=\"TestAccPaymentSuccProtocol_testVoucherExchange - 2018.12.05 at 10h 47m 16s.xml\">\n      <configuration name=\"TestAccPaymentSuccProtocol.testVoucherExchange\" configurationId=\"JUnit\" />\n    </history-entry>\n    <history-entry file=\"TestAccPaymentSuccProtocol_testVoucherExchange - 2018.12.05 at 10h 47m 36s.xml\">\n      <configuration name=\"TestAccPaymentSuccProtocol.testVoucherExchange\" configurationId=\"JUnit\" />\n    </history-entry>\n    <history-entry file=\"TestAccPaymentSuccProtocol_testVoucherExchange - 2018.12.05 at 10h 48m 00s.xml\">\n      <configuration name=\"TestAccPaymentSuccProtocol.testVoucherExchange\" configurationId=\"JUnit\" />\n    </history-entry>\n    <history-entry file=\"TestAccPaymentSuccProtocol_testVoucherExchange - 2018.12.05 at 10h 48m 13s.xml\">\n      <configuration name=\"TestAccPaymentSuccProtocol.testVoucherExchange\" configurationId=\"JUnit\" />\n    </history-entry>\n  </component>\n  <component name=\"TimeTrackingManager\">\n    <option name=\"totallyTimeSpent\" value=\"470126000\" />\n  </component>\n  <component name=\"TodoView\">\n    <todo-panel id=\"selected-file\">\n      <is-autoscroll-to-source value=\"true\" />\n    </todo-panel>\n    <todo-panel id=\"all\">\n      <are-packages-shown value=\"true\" />\n      <is-autoscroll-to-source value=\"true\" />\n    </todo-panel>\n  </component>\n  <component name=\"ToolWindowManager\">\n    <frame x=\"-7\" y=\"-7\" width=\"1550\" height=\"848\" extended-state=\"6\" />\n    <editor active=\"true\" />\n    <layout>\n      <window_info content_ui=\"combo\" id=\"Project\" order=\"0\" sideWeight=\"0.4964706\" visible=\"true\" weight=\"0.24932976\" />\n      <window_info id=\"Structure\" order=\"1\" sideWeight=\"0.5035294\" side_tool=\"true\" weight=\"0.28619304\" />\n      <window_info id=\"Designer\" order=\"2\" />\n      <window_info id=\"Image Layers\" order=\"3\" />\n      <window_info id=\"UI Designer\" order=\"4\" />\n      <window_info id=\"Capture Tool\" order=\"5\" />\n      <window_info id=\"Favorites\" order=\"6\" sideWeight=\"0.5035294\" side_tool=\"true\" weight=\"0.28619304\" />\n      <window_info id=\"Web\" order=\"7\" side_tool=\"true\" />\n      <window_info anchor=\"bottom\" id=\"Docker\" show_stripe_button=\"false\" />\n      <window_info anchor=\"bottom\" id=\"Message\" order=\"0\" />\n      <window_info anchor=\"bottom\" id=\"Find\" order=\"1\" weight=\"0.32867134\" />\n      <window_info active=\"true\" anchor=\"bottom\" id=\"Run Dashboard\" order=\"2\" sideWeight=\"0.49865952\" visible=\"true\" weight=\"0.6055944\" />\n      <window_info anchor=\"bottom\" id=\"Run\" order=\"3\" sideWeight=\"0.49865952\" weight=\"0.4055944\" />\n      <window_info anchor=\"bottom\" id=\"Debug\" order=\"4\" weight=\"0.36363637\" />\n      <window_info anchor=\"bottom\" id=\"Cvs\" order=\"5\" weight=\"0.25\" />\n      <window_info anchor=\"bottom\" id=\"Inspection\" order=\"6\" weight=\"0.4\" />\n      <window_info anchor=\"bottom\" id=\"Version Control\" order=\"7\" show_stripe_button=\"false\" />\n      <window_info anchor=\"bottom\" id=\"Database Changes\" order=\"8\" />\n      <window_info anchor=\"bottom\" id=\"TODO\" order=\"9\" weight=\"0.36923078\" />\n      <window_info anchor=\"bottom\" id=\"Statistic\" order=\"10\" />\n      <window_info anchor=\"bottom\" id=\"Event Log\" order=\"11\" sideWeight=\"0.5013405\" side_tool=\"true\" weight=\"0.42097902\" />\n      <window_info anchor=\"bottom\" id=\"Terminal\" order=\"12\" sideWeight=\"0.49865952\" weight=\"0.3846154\" />\n      <window_info anchor=\"bottom\" id=\"Spring\" order=\"13\" weight=\"0.61958045\" />\n      <window_info anchor=\"bottom\" id=\"Java Enterprise\" order=\"14\" weight=\"0.32867134\" />\n      <window_info anchor=\"bottom\" id=\"Messages\" order=\"15\" weight=\"0.32867134\" />\n      <window_info anchor=\"bottom\" id=\"Database Console\" order=\"16\" weight=\"0.5916084\" />\n      <window_info anchor=\"bottom\" id=\"Problems\" order=\"17\" />\n      <window_info anchor=\"right\" id=\"Bean Validation\" order=\"0\" weight=\"0.3297587\" />\n      <window_info anchor=\"right\" id=\"Commander\" internal_type=\"SLIDING\" order=\"1\" type=\"SLIDING\" weight=\"0.4\" />\n      <window_info anchor=\"right\" id=\"Maven Projects\" order=\"2\" sideWeight=\"0.4964706\" weight=\"0.14812332\" />\n      <window_info anchor=\"right\" id=\"Ant Build\" order=\"3\" weight=\"0.25\" />\n      <window_info anchor=\"right\" content_ui=\"combo\" id=\"Hierarchy\" order=\"4\" weight=\"0.25\" />\n      <window_info anchor=\"right\" id=\"Palette\" order=\"5\" />\n      <window_info anchor=\"right\" id=\"Capture Analysis\" order=\"6\" />\n      <window_info anchor=\"right\" id=\"Theme Preview\" order=\"7\" />\n      <window_info anchor=\"right\" id=\"Palette&#9;\" order=\"8\" />\n      <window_info anchor=\"right\" id=\"Database\" order=\"9\" weight=\"0.3297587\" />\n      <window_info anchor=\"right\" id=\"Coverage\" order=\"10\" side_tool=\"true\" weight=\"0.3297587\" />\n      <window_info anchor=\"right\" x=\"0\" y=\"0\" width=\"337\" height=\"648\" id=\"Documentation\" order=\"11\" sideWeight=\"0.5035294\" side_tool=\"true\" weight=\"0.14812332\" />\n    </layout>\n    <layout-to-restore>\n      <window_info content_ui=\"combo\" id=\"Project\" order=\"0\" sideWeight=\"0.4964706\" visible=\"true\" weight=\"0.24932976\" />\n      <window_info id=\"Structure\" order=\"1\" sideWeight=\"0.5035294\" side_tool=\"true\" weight=\"0.28619304\" />\n      <window_info id=\"Designer\" order=\"2\" />\n      <window_info id=\"Image Layers\" order=\"3\" />\n      <window_info id=\"UI Designer\" order=\"4\" />\n      <window_info id=\"Capture Tool\" order=\"5\" />\n      <window_info id=\"Favorites\" order=\"6\" sideWeight=\"0.5035294\" side_tool=\"true\" weight=\"0.28619304\" />\n      <window_info id=\"Web\" order=\"7\" side_tool=\"true\" />\n      <window_info anchor=\"bottom\" id=\"Docker\" order=\"0\" show_stripe_button=\"false\" />\n      <window_info anchor=\"bottom\" id=\"Message\" order=\"1\" />\n      <window_info anchor=\"bottom\" id=\"Find\" order=\"2\" weight=\"0.32867134\" />\n      <window_info anchor=\"bottom\" id=\"Run Dashboard\" order=\"3\" sideWeight=\"0.49865952\" weight=\"0.6685315\" />\n      <window_info active=\"true\" anchor=\"bottom\" id=\"Run\" order=\"4\" sideWeight=\"0.49865952\" visible=\"true\" weight=\"0.4055944\" />\n      <window_info anchor=\"bottom\" id=\"Debug\" order=\"5\" weight=\"0.36363637\" />\n      <window_info anchor=\"bottom\" id=\"Cvs\" order=\"6\" weight=\"0.25\" />\n      <window_info anchor=\"bottom\" id=\"Inspection\" order=\"7\" weight=\"0.4\" />\n      <window_info anchor=\"bottom\" id=\"Version Control\" order=\"8\" show_stripe_button=\"false\" />\n      <window_info anchor=\"bottom\" id=\"Database Changes\" order=\"9\" />\n      <window_info anchor=\"bottom\" id=\"TODO\" order=\"10\" weight=\"0.36923078\" />\n      <window_info anchor=\"bottom\" id=\"Statistic\" order=\"11\" />\n      <window_info anchor=\"bottom\" id=\"Event Log\" order=\"12\" sideWeight=\"0.5013405\" side_tool=\"true\" weight=\"0.42097902\" />\n      <window_info anchor=\"bottom\" id=\"Terminal\" order=\"13\" sideWeight=\"0.49865952\" weight=\"0.3846154\" />\n      <window_info anchor=\"bottom\" id=\"Spring\" order=\"14\" weight=\"0.61958045\" />\n      <window_info anchor=\"bottom\" id=\"Java Enterprise\" order=\"15\" weight=\"0.32867134\" />\n      <window_info anchor=\"bottom\" id=\"Messages\" order=\"16\" weight=\"0.32867134\" />\n      <window_info anchor=\"bottom\" id=\"Database Console\" order=\"17\" weight=\"0.5916084\" />\n      <window_info anchor=\"bottom\" id=\"Problems\" order=\"18\" />\n      <window_info anchor=\"right\" id=\"Bean Validation\" order=\"0\" weight=\"0.3297587\" />\n      <window_info anchor=\"right\" id=\"Commander\" internal_type=\"SLIDING\" order=\"1\" type=\"SLIDING\" weight=\"0.4\" />\n      <window_info anchor=\"right\" id=\"Maven Projects\" order=\"2\" sideWeight=\"0.4964706\" weight=\"0.14812332\" />\n      <window_info anchor=\"right\" id=\"Ant Build\" order=\"3\" weight=\"0.25\" />\n      <window_info anchor=\"right\" content_ui=\"combo\" id=\"Hierarchy\" order=\"4\" weight=\"0.25\" />\n      <window_info anchor=\"right\" id=\"Palette\" order=\"5\" />\n      <window_info anchor=\"right\" id=\"Capture Analysis\" order=\"6\" />\n      <window_info anchor=\"right\" id=\"Theme Preview\" order=\"7\" />\n      <window_info anchor=\"right\" id=\"Palette&#9;\" order=\"8\" />\n      <window_info anchor=\"right\" id=\"Database\" order=\"9\" weight=\"0.3297587\" />\n      <window_info anchor=\"right\" id=\"Coverage\" order=\"10\" side_tool=\"true\" weight=\"0.3297587\" />\n      <window_info anchor=\"right\" x=\"0\" y=\"0\" width=\"337\" height=\"648\" id=\"Documentation\" order=\"11\" sideWeight=\"0.5035294\" side_tool=\"true\" weight=\"0.14812332\" />\n    </layout-to-restore>\n  </component>\n  <component name=\"TypeScriptGeneratedFilesManager\">\n    <option name=\"version\" value=\"1\" />\n  </component>\n  <component name=\"UnknownFeatures\">\n    <option featureType=\"com.intellij.fileTypeFactory\" implementationName=\"*.md\" />\n  </component>\n  <component name=\"VcsContentAnnotationSettings\">\n    <option name=\"myLimit\" value=\"2678400000\" />\n  </component>\n  <component name=\"VcsManagerConfiguration\">\n    <MESSAGE value=\"snowalker--添加特殊记账逻辑\" />\n    <MESSAGE value=\"snowalker--删除多余常量\" />\n    <option name=\"LAST_COMMIT_MESSAGE\" value=\"snowalker--删除多余常量\" />\n  </component>\n  <component name=\"editorHistoryManager\">\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/CHANGELOG\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"893\">\n          <caret line=\"47\" selection-start-line=\"47\" selection-end-line=\"47\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/util/notify/bean/AccExtEntity.java\" />\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/README.md\">\n      <provider selected=\"true\" editor-type-id=\"split-provider[text-editor;markdown-preview-editor]\">\n        <state split_layout=\"SPLIT\">\n          <first_editor relative-caret-position=\"568\">\n            <caret line=\"70\" selection-start-line=\"70\" selection-end-line=\"70\" />\n          </first_editor>\n          <second_editor />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/test/java/com/gaoyang/marketing/maccbasecore/MAccBalanceTests.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"156\">\n          <caret line=\"339\" column=\"7\" selection-start-line=\"339\" selection-start-column=\"7\" selection-end-line=\"339\" selection-end-column=\"7\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/model/request/SpecialChargeAccountData.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"551\">\n          <caret line=\"38\" column=\"26\" lean-forward=\"true\" selection-start-line=\"15\" selection-start-column=\"2\" selection-end-line=\"38\" selection-end-column=\"26\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/core/service/impl/AccountBizServiceImpl.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"437\">\n          <caret line=\"634\" column=\"50\" lean-forward=\"true\" selection-start-line=\"634\" selection-start-column=\"50\" selection-end-line=\"634\" selection-end-column=\"50\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/mq/acccharge/consumer/service/AccChargeSubService.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"221\">\n          <caret line=\"29\" column=\"19\" selection-start-line=\"29\" selection-start-column=\"19\" selection-end-line=\"29\" selection-end-column=\"19\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/enumutil/ResponseEnum.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"285\">\n          <caret line=\"15\" column=\"4\" selection-start-line=\"15\" selection-start-column=\"4\" selection-end-line=\"15\" selection-end-column=\"4\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib/rctmq-spring-demo/src/main/java/com/snowalker/executor/rmqtest/MQSenderController.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-216\">\n          <caret line=\"124\" column=\"67\" lean-forward=\"true\" selection-start-line=\"124\" selection-start-column=\"67\" selection-end-line=\"124\" selection-end-column=\"67\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/test/java/com/gaoyang/marketing/maccbasecore/MAccBaseCoreAppTests.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"9633\">\n          <caret line=\"548\" column=\"8\" selection-start-line=\"548\" selection-start-column=\"8\" selection-end-line=\"552\" selection-end-column=\"46\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib/rctmq-spring-demo/src/main/java/com/snowalker/Application.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"380\">\n          <caret line=\"28\" selection-start-line=\"28\" selection-end-line=\"28\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/mq/acccharge/AccChargeServer.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"380\">\n          <caret line=\"32\" column=\"13\" selection-start-line=\"32\" selection-start-column=\"13\" selection-end-line=\"32\" selection-end-column=\"13\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/mq/acccharge/consumer/listener/AccChargeConsumerListener.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"4408\">\n          <caret line=\"260\" column=\"13\" selection-start-line=\"260\" selection-start-column=\"13\" selection-end-line=\"260\" selection-end-column=\"13\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/mq/acccharge/producer/executor/AccChargeLocalServiceExecuter.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"665\">\n          <caret line=\"46\" column=\"50\" selection-start-line=\"46\" selection-start-column=\"50\" selection-end-line=\"46\" selection-end-column=\"50\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/model/AccExtEntity.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"1463\">\n          <caret line=\"91\" column=\"20\" selection-start-line=\"91\" selection-start-column=\"20\" selection-end-line=\"91\" selection-end-column=\"20\" />\n          <folding>\n            <element signature=\"imports\" expanded=\"true\" />\n          </folding>\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/common/util/config/RulerChargeUtils.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"285\">\n          <caret line=\"41\" column=\"31\" selection-start-line=\"41\" selection-start-column=\"31\" selection-end-line=\"41\" selection-end-column=\"31\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/resources/application-dev.properties\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-855\" />\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/resources/maccbasecore/common-config.properties\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"209\">\n          <caret line=\"11\" column=\"29\" selection-start-line=\"11\" selection-start-column=\"29\" selection-end-line=\"11\" selection-end-column=\"29\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/doc/K8S基础设施搭建.md\">\n      <provider selected=\"true\" editor-type-id=\"split-provider[text-editor;markdown-preview-editor]\">\n        <state split_layout=\"SPLIT\">\n          <first_editor relative-caret-position=\"-139\" />\n          <second_editor />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/constant/AccountConst.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"570\">\n          <caret line=\"30\" column=\"74\" selection-start-line=\"30\" selection-start-column=\"67\" selection-end-line=\"30\" selection-end-column=\"74\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/run.sh\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"171\">\n          <caret line=\"9\" selection-start-line=\"9\" selection-end-line=\"9\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/pom.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"304\">\n          <caret line=\"16\" column=\"43\" selection-start-line=\"16\" selection-start-column=\"43\" selection-end-line=\"16\" selection-end-column=\"43\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/doc/高阳Kubernates部署简介.md\">\n      <provider selected=\"true\" editor-type-id=\"split-provider[text-editor;markdown-preview-editor]\">\n        <state split_layout=\"SPLIT\">\n          <first_editor relative-caret-position=\"152\">\n            <caret line=\"8\" column=\"39\" selection-start-line=\"8\" selection-start-column=\"39\" selection-end-line=\"8\" selection-end-column=\"39\" />\n          </first_editor>\n          <second_editor />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/doc/镜像打包部署.md\">\n      <provider selected=\"true\" editor-type-id=\"split-provider[text-editor;markdown-preview-editor]\">\n        <state split_layout=\"SPLIT\">\n          <first_editor relative-caret-position=\"285\">\n            <caret line=\"15\" column=\"34\" selection-start-line=\"15\" selection-start-column=\"34\" selection-end-line=\"15\" selection-end-column=\"34\" />\n          </first_editor>\n          <second_editor />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/Dockerfile\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"133\">\n          <caret line=\"7\" selection-start-line=\"7\" selection-end-line=\"7\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/src/main/java/com/gaoyang/marketing/protocol/DeliverQueryTaskProtocol.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"171\">\n          <caret line=\"20\" column=\"77\" lean-forward=\"true\" selection-start-line=\"20\" selection-start-column=\"38\" selection-end-line=\"20\" selection-end-column=\"77\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/src/main/java/com/gaoyang/marketing/protocol/CreateTradeProtocol.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"57\">\n          <caret line=\"23\" column=\"31\" selection-start-line=\"23\" selection-start-column=\"31\" selection-end-line=\"23\" selection-end-column=\"31\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/src/main/java/com/gaoyang/marketing/protocol/ExchangeVoucherProtocol.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"75\">\n          <caret line=\"47\" column=\"22\" selection-start-line=\"47\" selection-start-column=\"22\" selection-end-line=\"47\" selection-end-column=\"22\" />\n          <folding>\n            <element signature=\"imports\" expanded=\"true\" />\n            <element signature=\"e#1003#1004#0\" expanded=\"true\" />\n            <element signature=\"e#1045#1046#0\" expanded=\"true\" />\n            <element signature=\"e#1169#1170#0\" expanded=\"true\" />\n            <element signature=\"e#1201#1202#0\" expanded=\"true\" />\n            <element signature=\"e#1363#1364#0\" expanded=\"true\" />\n            <element signature=\"e#1389#1390#0\" expanded=\"true\" />\n            <element signature=\"e#1531#1532#0\" expanded=\"true\" />\n            <element signature=\"e#1561#1562#0\" expanded=\"true\" />\n          </folding>\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/src/main/java/com/gaoyang/marketing/MsgProtocolEntity.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"171\">\n          <caret line=\"9\" column=\"13\" selection-start-line=\"9\" selection-start-column=\"13\" selection-end-line=\"9\" selection-end-column=\"13\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/src/main/java/com/gaoyang/marketing/util/MsgProtocolConstUtil.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"203\">\n          <caret line=\"25\" column=\"41\" selection-start-line=\"25\" selection-start-column=\"41\" selection-end-line=\"25\" selection-end-column=\"41\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/src/main/java/com/gaoyang/marketing/constant/MsgEnvConst.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"455\">\n          <caret line=\"40\" column=\"30\" selection-start-line=\"40\" selection-start-column=\"30\" selection-end-line=\"40\" selection-end-column=\"30\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/src/main/java/com/gaoyang/marketing/constant/MsgProtocolConst.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"399\">\n          <caret line=\"72\" column=\"78\" selection-start-line=\"72\" selection-start-column=\"68\" selection-end-line=\"72\" selection-end-column=\"78\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/src/main/java/com/gaoyang/marketing/MsgProtocolFactory.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"531\">\n          <caret line=\"79\" column=\"56\" selection-start-line=\"79\" selection-start-column=\"56\" selection-end-line=\"79\" selection-end-column=\"56\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/src/test/java/com/gaoyang/marketing/protocol/TestAccPaymentSuccProtocol.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"2755\">\n          <caret line=\"156\" selection-start-line=\"156\" selection-end-line=\"156\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/pom.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"190\">\n          <caret line=\"10\" selection-start-line=\"10\" selection-end-line=\"10\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/src/main/java/com/gaoyang/marketing/BaseMsg.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"171\">\n          <caret line=\"10\" column=\"22\" selection-start-line=\"10\" selection-start-column=\"22\" selection-end-line=\"10\" selection-end-column=\"22\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/../rmqtool-protocol-lib/msg-protocol/src/main/java/com/gaoyang/marketing/protocol/DeliveryProtocol.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-57\">\n          <caret line=\"20\" column=\"42\" selection-start-line=\"20\" selection-start-column=\"42\" selection-end-line=\"20\" selection-end-column=\"42\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/pom.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"57\">\n          <caret line=\"12\" selection-start-line=\"12\" selection-end-line=\"12\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/biz/service/AccountBalanceBizServiceFacadeImpl.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"171\">\n          <caret line=\"34\" column=\"68\" selection-start-line=\"34\" selection-start-column=\"68\" selection-end-line=\"34\" selection-end-column=\"68\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/AccountBalanceBizServiceFacade.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"171\">\n          <caret line=\"40\" column=\"77\" selection-start-line=\"40\" selection-start-column=\"77\" selection-end-line=\"40\" selection-end-column=\"77\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/constant/AccBalanceConst.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"209\">\n          <caret line=\"17\" column=\"66\" selection-start-line=\"17\" selection-start-column=\"32\" selection-end-line=\"17\" selection-end-column=\"66\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-facade/src/main/java/com/gaoyang/marketing/maccbasecore/facade/model/request/QueryAccountBalanceData.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"304\">\n          <caret line=\"16\" column=\"17\" selection-start-line=\"16\" selection-start-column=\"17\" selection-end-line=\"16\" selection-end-column=\"17\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/shield-ratelimiter-core/pom.xml\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"38\">\n          <caret line=\"38\" column=\"20\" selection-start-line=\"38\" selection-start-column=\"20\" selection-end-line=\"38\" selection-end-column=\"20\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/shleld-ratelimter-demo/src/main/java/com/snowalker/ratelimiter/demo/Application.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"269\">\n          <caret line=\"24\" lean-forward=\"true\" selection-start-line=\"24\" selection-end-line=\"24\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/shield-ratelimiter-core/src/main/java/com/snowalker/shield/ratelimiter/core/redis/RedisCacheConfig.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"135\">\n          <caret line=\"25\" column=\"13\" selection-start-line=\"25\" selection-start-column=\"13\" selection-end-line=\"25\" selection-end-column=\"13\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/shield-ratelimiter-core/src/main/java/com/snowalker/shield/ratelimiter/core/handler/RateLimterHandler.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"1125\">\n          <caret line=\"93\" column=\"26\" selection-start-line=\"93\" selection-start-column=\"19\" selection-end-line=\"93\" selection-end-column=\"26\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/shield-ratelimiter-core/src/main/java/com/snowalker/shield/ratelimiter/core/annotation/RateLimiter.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"1\">\n          <caret line=\"14\" column=\"18\" selection-start-line=\"14\" selection-start-column=\"18\" selection-end-line=\"14\" selection-end-column=\"18\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/shield-ratelimiter-core/src/main/resources/rateLimter.lua\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-134\">\n          <caret line=\"5\" lean-forward=\"true\" selection-start-line=\"5\" selection-end-line=\"5\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://D:/snowalker-workspace/0mkt-workspace/maccbasecore/maccbasecore-service/src/main/java/com/gaoyang/marketing/maccbasecore/biz/service/AccountBizServiceFacadeImpl.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"6935\">\n          <caret line=\"473\" column=\"34\" selection-start-line=\"473\" selection-start-column=\"34\" selection-end-line=\"473\" selection-end-column=\"34\" />\n          <folding>\n            <element signature=\"imports\" expanded=\"true\" />\n          </folding>\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/shleld-ratelimter-demo/src/main/resources/application.properties\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-114\" />\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/shleld-ratelimter-demo/src/main/java/com/snowalker/ratelimiter/demo/controller/TestController.java\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"169\">\n          <caret line=\"26\" column=\"63\" selection-start-line=\"26\" selection-start-column=\"63\" selection-end-line=\"26\" selection-end-column=\"63\" />\n        </state>\n      </provider>\n    </entry>\n  </component>\n  <component name=\"masterDetails\">\n    <states>\n      <state key=\"ArtifactsStructureConfigurable.UI\">\n        <settings>\n          <artifact-editor />\n          <last-edited>permission:war</last-edited>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n                <option value=\"0.5\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"FacetStructureConfigurable.UI\">\n        <settings>\n          <last-edited>Spring (maccbasecore-service)|Spring</last-edited>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"GlobalLibrariesConfigurable.UI\">\n        <settings>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"JdkListConfigurable.UI\">\n        <settings>\n          <last-edited>1.8</last-edited>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"ModuleStructureConfigurable.UI\">\n        <settings>\n          <last-edited>maccbasecore-service</last-edited>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n                <option value=\"0.6\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"ProjectJDKs.UI\">\n        <settings>\n          <last-edited>1.8</last-edited>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"ProjectLibrariesConfigurable.UI\">\n        <settings>\n          <last-edited>Maven: aopalliance:aopalliance:1.0</last-edited>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n    </states>\n  </component>\n</project>"
  },
  {
    "path": "CHANGELOG",
    "content": "2018-10-29\n1. 增加限流提示自定义属性,message(),不填默认为“false”"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "# shield-ratelimiter\n> 基于Redis的分布式限流工具包\n\n在分布式领域，我们难免会遇到并发量突增，对后端服务造成高压力，严重甚至会导致系统宕机。为避免这种问题，我们通常会为接口添加限流、降级、熔断等能力，从而使接口更为健壮。Java领域常见的开源组件有Netflix的hystrix，阿里系开源的sentinel等，都是蛮不错的限流熔断框架。\n\n今天我们就基于Redis组件的特性，实现一个分布式限流组件，名字就定为shield-ratelimiter。\n<!--more-->\n## 原理\n首先解释下为何采用Redis作为限流组件的核心。\n\n通俗地讲，假设一个用户（用IP判断）每秒访问某服务接口的次数不能超过10次，那么我们可以在Redis中创建一个键，并设置键的过期时间为60秒。\n\n当一个用户对此服务接口发起一次访问就把键值加1，在单位时间（此处为1s）内当键值增加到10的时候，就禁止访问服务接口。PS:在某种场景中添加访问时间间隔还是很有必要的。我们本次不考虑间隔时间，只关注单位时间内的访问次数。\n\n## 需求\n原理已经讲过了，说下需求。\n1. 基于Redis的incr及过期机制开发\n2. 调用方便，声明式\n3. Spring支持\n\n\n基于上述需求，我们决定基于注解方式进行核心功能开发，基于Spring-boot-starter作为基础环境，从而能够很好的适配Spring环境。\n\n另外，在本次开发中，我们不通过简单的调用Redis的java类库API实现对Redis的incr操作。\n\n原因在于，我们要保证整个限流的操作是原子性的，如果用Java代码去做操作及判断，会有并发问题。这里我决定采用Lua脚本进行核心逻辑的定义。\n## 为何使用Lua\n在正式开发前，我简单介绍下对Redis的操作中，为何推荐使用Lua脚本。\n\n1. 减少网络开销: 不使用 Lua 的代码需要向 Redis 发送多次请求, 而脚本只需一次即可, 减少网络传输;\n2. 原子操作: Redis 将整个脚本作为一个原子执行, 无需担心并发, 也就无需事务;\n3. 复用: 脚本会永久保存 Redis 中, 其他客户端可继续使用.\n\nRedis添加了对Lua的支持，能够很好的满足原子性、事务性的支持，让我们免去了很多的异常逻辑处理。对于Lua的语法不是本文的主要内容，感兴趣的可以自行查找资料。\n## 正式开发\n到这里，我们正式开始手写限流组件的进程。\n### 1. 工程定义\n项目基于maven构建，主要依赖Spring-boot-starter，我们主要在springboot上进行开发，因此自定义的开发包可以直接依赖下面这个坐标，方便进行包管理。版本号自行选择稳定版。\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter</artifactId>\n            <version>1.4.2.RELEASE</version>\n        </dependency>\n### 2. Redis整合\n由于我们是基于Redis进行的限流操作，因此需要整合Redis的类库，上面已经讲到，我们是基于Springboot进行的开发，因此这里可以直接整合RedisTemplate。\n#### 2.1 坐标引入\n这里我们引入spring-boot-starter-redis的依赖。\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-redis</artifactId>\n            <version>1.4.2.RELEASE</version>\n        </dependency>\n#### 2.2 注入CacheManager及RedisTemplate\n新建一个Redis的配置类，命名为RedisCacheConfig，使用javaconfig形式注入CacheManager及RedisTemplate。为了操作方便，我们采用了Jackson进行序列化。代码如下\n\n        @Configuration\n        @EnableCaching\n        public class RedisCacheConfig {\n\n            private static final Logger LOGGER = LoggerFactory.getLogger(RedisCacheConfig.class);\n\n            @Bean\n            public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {\n                CacheManager cacheManager = new RedisCacheManager(redisTemplate);\n                if (LOGGER.isDebugEnabled()) {\n                    LOGGER.debug(\"Springboot Redis cacheManager 加载完成\");\n                }\n                return cacheManager;\n            }\n\n            @Bean\n            public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {\n                RedisTemplate<String, Object> template = new RedisTemplate<>();\n                template.setConnectionFactory(factory);\n\n                //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值（默认使用JDK的序列化方式）\n                Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);\n\n                ObjectMapper mapper = new ObjectMapper();\n                mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);\n                mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);\n                serializer.setObjectMapper(mapper);\n\n                template.setValueSerializer(serializer);\n                //使用StringRedisSerializer来序列化和反序列化redis的key值\n                template.setKeySerializer(new StringRedisSerializer());\n                template.afterPropertiesSet();\n                LOGGER.info(\"Springboot RedisTemplate 加载完成\");\n                return template;\n            }\n        }\n\n**注意** 要使用 **@Configuration** 标注此类为一个配置类，当然你可以使用 **@Component**， 但是不推荐，原因在于 **@Component** 注解虽然也可以当作配置类，但是并不会为其生成CGLIB代理Class，而使用**@Configuration**，CGLIB会为其生成代理类，进行性能的提升。\n\n#### 2.3 调用方application.propertie需要增加Redis配置\n我们的包开发完毕之后，调用方的application.properties需要进行相关配置如下：\n\n        #单机模式redis\n        spring.redis.host=127.0.0.1\n        spring.redis.port=6379\n        spring.redis.pool.maxActive=8\n        spring.redis.pool.maxWait=-1\n        spring.redis.pool.maxIdle=8\n        spring.redis.pool.minIdle=0\n        spring.redis.timeout=10000\n        spring.redis.password=\n\n如果有密码的话，配置password即可。\n\n这里为单机配置，如果需要支持哨兵集群，则配置如下，Java代码不需要改动，只需要变动配置即可。**注意** 两种配置不能共存！\n\n        #哨兵集群模式\n        # database name\n        spring.redis.database=0\n        # server password 密码，如果没有设置可不配\n        spring.redis.password=\n        # pool settings ...池配置\n        spring.redis.pool.max-idle=8\n        spring.redis.pool.min-idle=0\n        spring.redis.pool.max-active=8\n        spring.redis.pool.max-wait=-1\n        # name of Redis server  哨兵监听的Redis server的名称\n        spring.redis.sentinel.master=mymaster\n        # comma-separated list of host:port pairs  哨兵的配置列表\n        spring.redis.sentinel.nodes=127.0.0.1:26379,127.0.0.1:26479,127.0.0.1:26579\n\n\n### 3. 定义注解\n为了调用方便，我们定义一个名为**RateLimiter** 的注解，内容如下\n\n            /**\n            * @author snowalker\n            * @version 1.0\n            * @date 2018/10/27 1:25\n            * @className RateLimiter\n            * @desc 限流注解\n            */\n            @Target(ElementType.METHOD)\n            @Retention(RetentionPolicy.RUNTIME)\n            @Documented\n            public @interface RateLimiter {\n\n                /**\n                * 限流key\n                * @return\n                */\n                String key() default \"rate:limiter\";\n                /**\n                * 单位时间限制通过请求数\n                * @return\n                */\n                long limit() default 10;\n\n                /**\n                * 过期时间，单位秒\n                * @return\n                */\n                long expire() default 1;\n            }\n\n该注解明确只用于方法，主要有三个属性。\n1. key--表示限流模块名，指定该值用于区分不同应用，不同场景，推荐格式为：应用名:模块名:ip:接口名:方法名\n2. limit--表示单位时间允许通过的请求数\n3. expire--incr的值的过期时间，业务中表示限流的单位时间。\n### 4. 解析注解\n定义好注解后，需要开发注解使用的切面，这里我们直接使用aspectj进行切面的开发。先看代码\n\n        @Aspect\n        @Component\n        public class RateLimterHandler {\n\n            private static final Logger LOGGER = LoggerFactory.getLogger(RateLimterHandler.class);\n\n            @Autowired\n            RedisTemplate redisTemplate;\n\n            private DefaultRedisScript<Long> getRedisScript;\n\n            @PostConstruct\n            public void init() {\n                getRedisScript = new DefaultRedisScript<>();\n                getRedisScript.setResultType(Long.class);\n                getRedisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource(\"rateLimter.lua\")));\n                LOGGER.info(\"RateLimterHandler[分布式限流处理器]脚本加载完成\");\n            }\n\n这里是注入了RedisTemplate，使用其API进行Lua脚本的调用。\n\ninit() 方法在应用启动时会初始化DefaultRedisScript，并加载Lua脚本，方便进行调用。\n\nPS: Lua脚本放置在classpath下，通过ClassPathResource进行加载。\n\n\n            @Pointcut(\"@annotation(com.snowalker.shield.ratelimiter.core.annotation.RateLimiter)\")\n            public void rateLimiter() {}\n\n这里我们定义了一个切点，表示只要注解了 **@RateLimiter** 的方法，均可以触发限流操作。\n\n            @Around(\"@annotation(rateLimiter)\")\n            public Object around(ProceedingJoinPoint proceedingJoinPoint, RateLimiter rateLimiter) throws Throwable {\n                if (LOGGER.isDebugEnabled()) {\n                    LOGGER.debug(\"RateLimterHandler[分布式限流处理器]开始执行限流操作\");\n                }\n                Signature signature = proceedingJoinPoint.getSignature();\n                if (!(signature instanceof MethodSignature)) {\n                    throw new IllegalArgumentException(\"the Annotation @RateLimter must used on method!\");\n                }\n                /**\n                * 获取注解参数\n                */\n                // 限流模块key\n                String limitKey = rateLimiter.key();\n                Preconditions.checkNotNull(limitKey);\n                // 限流阈值\n                long limitTimes = rateLimiter.limit();\n                // 限流超时时间\n                long expireTime = rateLimiter.expire();\n                if (LOGGER.isDebugEnabled()) {\n                    LOGGER.debug(\"RateLimterHandler[分布式限流处理器]参数值为-limitTimes={},limitTimeout={}\", limitTimes, expireTime);\n                }\n                /**\n                * 执行Lua脚本\n                */\n                List<String> keyList = new ArrayList();\n                // 设置key值为注解中的值\n                keyList.add(limitKey);\n                /**\n                * 调用脚本并执行\n                */\n                Long result = (Long) redisTemplate.execute(getRedisScript, keyList, expireTime, limitTimes);\n                if (result == 0) {\n                    String msg = \"由于超过单位时间=\" + expireTime + \"-允许的请求次数=\" + limitTimes + \"[触发限流]\";\n                    LOGGER.debug(msg);\n                    return \"false\";\n                }\n                if (LOGGER.isDebugEnabled()) {\n                    LOGGER.debug(\"RateLimterHandler[分布式限流处理器]限流执行结果-result={},请求[正常]响应\", result);\n                }\n                return proceedingJoinPoint.proceed();\n            }\n        }\n\n这段代码的逻辑为，获取  **@RateLimiter** 注解配置的属性：key、limit、expire，并通过 **redisTemplate.execute(RedisScript<T> script, List<K> keys, Object... args)** 方法传递给Lua脚本进行限流相关操作，逻辑很清晰。\n\n这里我们定义如果脚本返回状态为0则为触发限流，1表示正常请求。\n### 5. Lua脚本\n这里是我们整个限流操作的核心，通过执行一个Lua脚本进行限流的操作。脚本内容如下\n\n        --获取KEY\n        local key1 = KEYS[1]\n\n        local val = redis.call('incr', key1)\n        local ttl = redis.call('ttl', key1)\n\n        --获取ARGV内的参数并打印\n        local expire = ARGV[1]\n        local times = ARGV[2]\n\n        redis.log(redis.LOG_DEBUG,tostring(times))\n        redis.log(redis.LOG_DEBUG,tostring(expire))\n\n        redis.log(redis.LOG_NOTICE, \"incr \"..key1..\" \"..val);\n        if val == 1 then\n            redis.call('expire', key1, tonumber(expire))\n        else\n            if ttl == -1 then\n                redis.call('expire', key1, tonumber(expire))\n            end\n        end\n\n        if val > tonumber(times) then\n            return 0\n        end\n\n        return 1\n\n逻辑很通俗，我简单介绍下。\n\n1. 首先脚本获取Java代码中传递而来的要限流的模块的key，不同的模块key值一定不能相同，否则会覆盖！\n2. redis.call('incr', key1)对传入的key做incr操作，如果key首次生成，设置超时时间ARGV[1]；（初始值为1）\n3. ttl是为防止某些key在未设置超时时间并长时间已经存在的情况下做的保护的判断；\n4. 每次请求都会做+1操作，当限流的值val大于我们注解的阈值，则返回0表示已经超过请求限制，触发限流。否则为正常请求。\n\n当过期后，又是新的一轮循环，整个过程是一个原子性的操作，能够保证单位时间不会超过我们预设的请求阈值。\n\n到这里我们便可以在项目中进行测试。\n## 测试\n[demo地址](https://github.com/TaXueWWL/shleld-ratelimter/tree/master/shleld-ratelimter-demo)\n\n这里我贴一下核心代码，我们定义一个接口，并注解    **@RateLimiter(key = \"ratedemo:1.0.0\", limit = 5, expire = 100)** 表示模块ratedemo:sendPayment:1.0.0 \n在100s内允许通过5个请求，这里的参数设置是为了方便看结果。实际中，我们通常会设置1s内允许通过的次数。\n\n        @Controller\n        public class TestController {\n\n            private static final Logger LOGGER = LoggerFactory.getLogger(TestController.class);\n\n            @ResponseBody\n            @RequestMapping(\"ratelimiter\")\n            @RateLimiter(key = \"ratedemo:1.0.0\", limit = 5, expire = 100)\n            public String sendPayment(HttpServletRequest request) throws Exception {\n\n                return \"正常请求\";\n            }\n\n        }\n\n我们通过RestClient请求接口，日志返回如下：\n\n        2018-10-28 00:00:00.602 DEBUG 17364 --- [nio-8888-exec-1] c.s.s.r.core.handler.RateLimterHandler   :\n         RateLimterHandler[分布式限流处理器]开始执行限流操作\n        2018-10-28 00:00:00.688 DEBUG 17364 --- [nio-8888-exec-1] c.s.s.r.core.handler.RateLimterHandler   :\n         RateLimterHandler[分布式限流处理器]限流执行结果-result=1,请求[正常]响应\n\n        2018-10-28 00:00:00.860 DEBUG 17364 --- [nio-8888-exec-3] c.s.s.r.core.handler.RateLimterHandler   :\n         RateLimterHandler[分布式限流处理器]开始执行限流操作\n        2018-10-28 00:00:01.183 DEBUG 17364 --- [nio-8888-exec-4] c.s.s.r.core.handler.RateLimterHandler   :\n         RateLimterHandler[分布式限流处理器]开始执行限流操作\n        2018-10-28 00:00:01.520 DEBUG 17364 --- [nio-8888-exec-3] c.s.s.r.core.handler.RateLimterHandler   :\n         RateLimterHandler[分布式限流处理器]限流执行结果-result=1,请求[正常]响应\n        2018-10-28 00:00:01.521 DEBUG 17364 --- [nio-8888-exec-4] c.s.s.r.core.handler.RateLimterHandler   :\n         RateLimterHandler[分布式限流处理器]限流执行结果-result=1,请求[正常]响应\n\n        2018-10-28 00:00:01.557 DEBUG 17364 --- [nio-8888-exec-5] c.s.s.r.core.handler.RateLimterHandler   :\n         RateLimterHandler[分布式限流处理器]开始执行限流操作\n        2018-10-28 00:00:01.558 DEBUG 17364 --- [nio-8888-exec-5] c.s.s.r.core.handler.RateLimterHandler   :\n         RateLimterHandler[分布式限流处理器]限流执行结果-result=1,请求[正常]响应\n\n        2018-10-28 00:00:01.774 DEBUG 17364 --- [nio-8888-exec-7] c.s.s.r.core.handler.RateLimterHandler   :\n         RateLimterHandler[分布式限流处理器]开始执行限流操作\n        2018-10-28 00:00:02.111 DEBUG 17364 --- [nio-8888-exec-8] c.s.s.r.core.handler.RateLimterHandler   :\n         RateLimterHandler[分布式限流处理器]开始\n        2018-10-28 00:00:02.169 DEBUG 17364 --- [nio-8888-exec-7] c.s.s.r.core.handler.RateLimterHandler   :\n         RateLimterHandler[分布式限流处理器]限流执行结果-result=1,请求[正常]响应\n\n        2018-10-28 00:00:02.169 DEBUG 17364 --- [nio-8888-exec-8] c.s.s.r.core.handler.RateLimterHandler   :\n         由于超过单位时间=100-允许的请求次数=5[触发限流]\n        2018-10-28 00:00:02.276 DEBUG 17364 --- [io-8888-exec-10] c.s.s.r.core.handler.RateLimterHandler   :\n         RateLimterHandler[分布式限流处理器]开始执行限流操作\n        2018-10-28 00:00:02.276 DEBUG 17364 --- [io-8888-exec-10] c.s.s.r.core.handler.RateLimterHandler   :\n         RateLimterHandler[分布式限流处理器]参数值为-limitTimes=5,limitTimeout=100\n        2018-10-28 00:00:02.278 DEBUG 17364 --- [io-8888-exec-10] c.s.s.r.core.handler.RateLimterHandler   :\n         由于超过单位时间=100-允许的请求次数=5[触发限流]\n        2018-10-28 00:00:02.445 DEBUG 17364 --- [nio-8888-exec-2] c.s.s.r.core.handler.RateLimterHandler   :\n         RateLimterHandler[分布式限流处理器]开始执行限流操作\n        2018-10-28 00:00:02.445 DEBUG 17364 --- [nio-8888-exec-2] c.s.s.r.core.handler.RateLimterHandler   :\n         RateLimterHandler[分布式限流处理器]参数值为-limitTimes=5,limitTimeout=100\n        2018-10-28 00:00:02.446 DEBUG 17364 --- [nio-8888-exec-2] c.s.s.r.core.handler.RateLimterHandler   :\n         由于超过单位时间=100-允许的请求次数=5[触发限流]\n        2018-10-28 00:00:02.628 DEBUG 17364 --- [nio-8888-exec-4] c.s.s.r.core.handler.RateLimterHandler   :\n         RateLimterHandler[分布式限流处理器]开始执行限流操作\n        2018-10-28 00:00:02.628 DEBUG 17364 --- [nio-8888-exec-4] c.s.s.r.core.handler.RateLimterHandler   :\n         RateLimterHandler[分布式限流处理器]参数值为-limitTimes=5,limitTimeout=100\n        2018-10-28 00:00:02.629 DEBUG 17364 --- [nio-8888-exec-4] c.s.s.r.core.handler.RateLimterHandler   :\n         由于超过单位时间=100-允许的请求次数=5[触发限流]\n\n根据日志能够看到，正常请求5次后，返回限流触发，说明我们的逻辑生效，对前端而言也是可以看到false标记，表明我们的Lua脚本限流逻辑是正确的，这里具体返回什么标记需要调用方进行明确的定义。\n\n## 总结\n我们通过Redis的incr及expire功能特性，开发定义了一套基于注解的分布式限流操作，核心逻辑基于Lua保证了原子性。达到了很好的限流的目的，生产上，可以基于该特点进行定制自己的限流组件，当然你可以参考本文的代码，相信你写的一定比我的demo更好！\n"
  },
  {
    "path": "pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n\n    <groupId>com.snowalker</groupId>\n    <artifactId>shield-ratelimiter</artifactId>\n    <version>1.0-SNAPSHOT</version>\n    <modules>\n        <module>shield-ratelimiter-core</module>\n        <module>shleld-ratelimter-demo</module>\n    </modules>\n    <packaging>pom</packaging>\n\n\n</project>"
  },
  {
    "path": "shield-ratelimiter-core/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <parent>\n        <artifactId>shield-ratelimiter</artifactId>\n        <groupId>com.snowalker</groupId>\n        <version>1.0-SNAPSHOT</version>\n    </parent>\n    <modelVersion>4.0.0</modelVersion>\n\n    <artifactId>shield-ratelimiter-core</artifactId>\n    <name>shield-ratelimiter-core</name>\n    <groupId>com.snowalker</groupId>\n    <version>1.0-SNAPSHOT</version>\n\n    <properties>\n        <java.version>1.8</java.version>\n        <maven.compiler.source>1.8</maven.compiler.source>\n        <maven.compiler.target>1.8</maven.compiler.target>\n        <spring.boot.version>1.4.2.RELEASE</spring.boot.version>\n    </properties>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter</artifactId>\n            <version>${spring.boot.version}</version>\n        </dependency>\n\n        <!--spring缓存支持-->\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-data-redis</artifactId>\n            <version>${spring.boot.version}</version>\n        </dependency>\n\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-aop</artifactId>\n            <version>${spring.boot.version}</version>\n        </dependency>\n\n        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->\n        <dependency>\n            <groupId>org.apache.commons</groupId>\n            <artifactId>commons-lang3</artifactId>\n            <version>3.7</version>\n        </dependency>\n\n        <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->\n        <dependency>\n            <groupId>com.google.guava</groupId>\n            <artifactId>guava</artifactId>\n            <version>26.0-jre</version>\n        </dependency>\n\n        <dependency>\n            <groupId>junit</groupId>\n            <artifactId>junit</artifactId>\n            <version>4.12</version>\n            <scope>test</scope>\n        </dependency>\n\n        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->\n        <dependency>\n            <groupId>com.fasterxml.jackson.core</groupId>\n            <artifactId>jackson-databind</artifactId>\n            <version>2.9.6</version>\n        </dependency>\n\n    </dependencies>\n\n</project>"
  },
  {
    "path": "shield-ratelimiter-core/src/main/java/com/snowalker/shield/ratelimiter/core/annotation/RateLimiter.java",
    "content": "package com.snowalker.shield.ratelimiter.core.annotation;\n\nimport java.lang.annotation.*;\n\n/**\n * @author snowalker\n * @version 1.0\n * @date 2018/10/27 1:25\n * @className RateLimiter\n * @desc 限流注解\n */\n@Target(ElementType.METHOD)\n@Retention(RetentionPolicy.RUNTIME)\n@Documented\npublic @interface RateLimiter {\n\n    /**\n     * 限流key\n     * @return\n     */\n    String key() default \"rate:limiter\";\n    /**\n     * 单位时间限制通过请求数\n     * @return\n     */\n    long limit() default 10;\n\n    /**\n     * 过期时间，单位秒\n     * @return\n     */\n    long expire() default 1;\n\n    /**\n     * 限流提示语\n     * @return\n     */\n    String message() default \"false\";\n}\n"
  },
  {
    "path": "shield-ratelimiter-core/src/main/java/com/snowalker/shield/ratelimiter/core/handler/RateLimterHandler.java",
    "content": "package com.snowalker.shield.ratelimiter.core.handler;\n\nimport com.google.common.base.Preconditions;\nimport com.snowalker.shield.ratelimiter.core.annotation.RateLimiter;\nimport org.apache.commons.lang3.StringUtils;\nimport org.aspectj.lang.ProceedingJoinPoint;\nimport org.aspectj.lang.Signature;\nimport org.aspectj.lang.annotation.Around;\nimport org.aspectj.lang.annotation.Aspect;\nimport org.aspectj.lang.annotation.Pointcut;\nimport org.aspectj.lang.reflect.MethodSignature;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.core.io.ClassPathResource;\nimport org.springframework.data.redis.core.RedisTemplate;\nimport org.springframework.data.redis.core.script.DefaultRedisScript;\nimport org.springframework.scripting.support.ResourceScriptSource;\nimport org.springframework.stereotype.Component;\n\nimport javax.annotation.PostConstruct;\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * @author snowalker\n * @version 1.0\n * @date 2018/10/27 1:17\n * @className RateLimterHandler\n * @desc 限流处理器\n */\n@Aspect\n@Component\npublic class RateLimterHandler {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(RateLimterHandler.class);\n\n    @Autowired\n    RedisTemplate redisTemplate;\n\n    private DefaultRedisScript<Long> getRedisScript;\n\n    @PostConstruct\n    public void init() {\n        getRedisScript = new DefaultRedisScript<>();\n        getRedisScript.setResultType(Long.class);\n        getRedisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource(\"rateLimter.lua\")));\n        LOGGER.info(\"RateLimterHandler[分布式限流处理器]脚本加载完成\");\n    }\n\n    @Pointcut(\"@annotation(com.snowalker.shield.ratelimiter.core.annotation.RateLimiter)\")\n    public void rateLimiter() {}\n\n    @Around(\"@annotation(rateLimiter)\")\n    public Object around(ProceedingJoinPoint proceedingJoinPoint, RateLimiter rateLimiter) throws Throwable {\n        if (LOGGER.isDebugEnabled()) {\n            LOGGER.debug(\"RateLimterHandler[分布式限流处理器]开始执行限流操作\");\n        }\n        Signature signature = proceedingJoinPoint.getSignature();\n        if (!(signature instanceof MethodSignature)) {\n            throw new IllegalArgumentException(\"the Annotation @RateLimter must used on method!\");\n        }\n        /**\n         * 获取注解参数\n         */\n        // 限流模块key\n        String limitKey = rateLimiter.key();\n        Preconditions.checkNotNull(limitKey);\n        // 限流阈值\n        long limitTimes = rateLimiter.limit();\n        // 限流超时时间\n        long expireTime = rateLimiter.expire();\n        if (LOGGER.isDebugEnabled()) {\n            LOGGER.debug(\"RateLimterHandler[分布式限流处理器]参数值为-limitTimes={},limitTimeout={}\", limitTimes, expireTime);\n        }\n        // 限流提示语\n        String message = rateLimiter.message();\n        if (StringUtils.isBlank(message)) {\n            message = \"false\";\n        }\n        /**\n         * 执行Lua脚本\n         */\n        List<String> keyList = new ArrayList();\n        // 设置key值为注解中的值\n        keyList.add(limitKey);\n        /**\n         * 调用脚本并执行\n         */\n        Long result = (Long) redisTemplate.execute(getRedisScript, keyList, expireTime, limitTimes);\n        if (result == 0) {\n            String msg = \"由于超过单位时间=\" + expireTime + \"-允许的请求次数=\" + limitTimes + \"[触发限流]\";\n            LOGGER.debug(msg);\n            return message;\n        }\n        if (LOGGER.isDebugEnabled()) {\n            LOGGER.debug(\"RateLimterHandler[分布式限流处理器]限流执行结果-result={},请求[正常]响应\", result);\n        }\n        return proceedingJoinPoint.proceed();\n    }\n}\n"
  },
  {
    "path": "shield-ratelimiter-core/src/main/java/com/snowalker/shield/ratelimiter/core/redis/RedisCacheConfig.java",
    "content": "package com.snowalker.shield.ratelimiter.core.redis;\nimport com.fasterxml.jackson.annotation.JsonAutoDetect;\nimport com.fasterxml.jackson.annotation.PropertyAccessor;\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.cache.CacheManager;\nimport org.springframework.cache.annotation.EnableCaching;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.data.redis.cache.RedisCacheManager;\nimport org.springframework.data.redis.connection.RedisConnectionFactory;\nimport org.springframework.data.redis.core.RedisTemplate;\nimport org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;\nimport org.springframework.data.redis.serializer.StringRedisSerializer;\n\n/**\n * @author snowalker\n * @version 1.0\n * @date 2018/10/27 1:15\n * @className RedisCacheConfig\n * @desc Redis配置\n */\n@Configuration\n@EnableCaching\npublic class RedisCacheConfig {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(RedisCacheConfig.class);\n\n    @Bean\n    public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {\n        CacheManager cacheManager = new RedisCacheManager(redisTemplate);\n        if (LOGGER.isDebugEnabled()) {\n            LOGGER.debug(\"Springboot Redis cacheManager 加载完成\");\n        }\n        return cacheManager;\n    }\n\n    @Bean\n    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {\n        RedisTemplate<String, Object> template = new RedisTemplate<>();\n        template.setConnectionFactory(factory);\n\n        //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值（默认使用JDK的序列化方式）\n        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);\n\n        ObjectMapper mapper = new ObjectMapper();\n        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);\n        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);\n        serializer.setObjectMapper(mapper);\n\n        template.setValueSerializer(serializer);\n        //使用StringRedisSerializer来序列化和反序列化redis的key值\n        template.setKeySerializer(new StringRedisSerializer());\n        template.afterPropertiesSet();\n        LOGGER.info(\"Springboot RedisTemplate 加载完成\");\n        return template;\n    }\n}"
  },
  {
    "path": "shield-ratelimiter-core/src/main/resources/application.properties",
    "content": "#redis\nspring.redis.hostName=127.0.0.1\nspring.redis.host=127.0.0.1\nspring.redis.port=6379\nspring.redis.pool.maxActive=8\nspring.redis.pool.maxWait=-1\nspring.redis.pool.maxIdle=8\nspring.redis.pool.minIdle=0\nspring.redis.timeout=10000\nspring.redis.password=\n\nlogging.path=D:/log/maccbasecore\n"
  },
  {
    "path": "shield-ratelimiter-core/src/main/resources/rateLimter.lua",
    "content": "--获取KEY\nlocal key1 = KEYS[1]\n\nlocal val = redis.call('incr', key1)\nlocal ttl = redis.call('ttl', key1)\n\n--获取ARGV内的参数并打印\nlocal expire = ARGV[1]\nlocal times = ARGV[2]\n\nredis.log(redis.LOG_DEBUG,tostring(times))\nredis.log(redis.LOG_DEBUG,tostring(expire))\n\nredis.log(redis.LOG_NOTICE, \"incr \"..key1..\" \"..val);\nif val == 1 then\n    redis.call('expire', key1, tonumber(expire))\nelse\n    if ttl == -1 then\n        redis.call('expire', key1, tonumber(expire))\n    end\nend\n\nif val > tonumber(times) then\n    return 0\nend\n\nreturn 1"
  },
  {
    "path": "shield-ratelimiter-core/target/classes/application.properties",
    "content": "#redis\nspring.redis.hostName=127.0.0.1\nspring.redis.host=127.0.0.1\nspring.redis.port=6379\nspring.redis.pool.maxActive=8\nspring.redis.pool.maxWait=-1\nspring.redis.pool.maxIdle=8\nspring.redis.pool.minIdle=0\nspring.redis.timeout=10000\nspring.redis.password=\n\nlogging.path=D:/log/maccbasecore\n"
  },
  {
    "path": "shield-ratelimiter-core/target/classes/rateLimter.lua",
    "content": "--获取KEY\nlocal key1 = KEYS[1]\n\nlocal val = redis.call('incr', key1)\nlocal ttl = redis.call('ttl', key1)\n\n--获取ARGV内的参数并打印\nlocal expire = ARGV[1]\nlocal times = ARGV[2]\n\nredis.log(redis.LOG_DEBUG,tostring(times))\nredis.log(redis.LOG_DEBUG,tostring(expire))\n\nredis.log(redis.LOG_NOTICE, \"incr \"..key1..\" \"..val);\nif val == 1 then\n    redis.call('expire', key1, tonumber(expire))\nelse\n    if ttl == -1 then\n        redis.call('expire', key1, tonumber(expire))\n    end\nend\n\nif val > tonumber(times) then\n    return 0\nend\n\nreturn 1"
  },
  {
    "path": "shield-ratelimiter.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"JAVA_MODULE\" version=\"4\" />"
  },
  {
    "path": "shleld-ratelimter-demo/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n\n    <artifactId>shleld-ratelimter-demo</artifactId>\n\n    <parent>\n        <groupId>org.springframework.boot</groupId>\n        <artifactId>spring-boot-starter-parent</artifactId>\n        <version>1.4.2.RELEASE</version>\n        <relativePath/> <!-- lookup parent from repository -->\n    </parent>\n\n    <properties>\n        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-web</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-test</artifactId>\n            <scope>test</scope>\n        </dependency>\n\n        <dependency>\n            <artifactId>shield-ratelimiter-core</artifactId>\n            <groupId>com.snowalker</groupId>\n            <version>1.0-SNAPSHOT</version>\n        </dependency>\n    </dependencies>\n</project>"
  },
  {
    "path": "shleld-ratelimter-demo/src/main/java/com/snowalker/ratelimiter/demo/Application.java",
    "content": "package com.snowalker.ratelimiter.demo;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.context.ConfigurableApplicationContext;\nimport org.springframework.context.annotation.ComponentScan;\nimport org.springframework.scheduling.annotation.EnableScheduling;\n\n@EnableScheduling\n@SpringBootApplication\n@ComponentScan(basePackages = {\"com.snowalker\"})\npublic class Application {\n\n\tprivate static final Logger LOGGER = LoggerFactory.getLogger(Application.class);\n\n\n\tpublic static void main(String[] args) throws Exception {\n\t\tConfigurableApplicationContext context = SpringApplication.run(Application.class, args);\n\t}\n\n\n}\n"
  },
  {
    "path": "shleld-ratelimter-demo/src/main/java/com/snowalker/ratelimiter/demo/controller/TestController.java",
    "content": "package com.snowalker.ratelimiter.demo.controller;\n\nimport com.snowalker.shield.ratelimiter.core.annotation.RateLimiter;\nimport org.apache.catalina.servlet4preview.http.HttpServletRequest;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.ResponseBody;\n\n/**\n * @author snowalker\n * @version 1.0\n * @date 2018/10/27 2:13\n * @className\n * @desc\n */\n@Controller\npublic class TestController {\n\n    private static final Logger LOGGER = LoggerFactory.getLogger(TestController.class);\n\n    private static final String MESSAGE = \"{\\\"code\\\":\\\"400\\\",\\\"msg\\\":\\\"FAIL\\\",\\\"desc\\\":\\\"触发限流\\\"}\";\n\n    @ResponseBody\n    @RequestMapping(\"ratelimiter\")\n    @RateLimiter(key = \"ratedemo:1.0.0\", limit = 5, expire = 10, message = MESSAGE)\n    public String sendPayment(HttpServletRequest request) throws Exception {\n\n        return \"正常请求\";\n    }\n\n    @ResponseBody\n    @RequestMapping(\"ratelimiter1\")\n    @RateLimiter(key = \"ratedemo:1.0.1\", limit = 5, expire = 10, message = MESSAGE)\n    public String sendPayment1(HttpServletRequest request) throws Exception {\n\n        return \"正常请求\";\n    }\n}\n"
  },
  {
    "path": "shleld-ratelimter-demo/src/main/resources/application.properties",
    "content": "#redis\nspring.redis.hostName=127.0.0.1\nspring.redis.host=127.0.0.1\nspring.redis.port=6379\nspring.redis.pool.maxActive=8\nspring.redis.pool.maxWait=-1\nspring.redis.pool.maxIdle=8\nspring.redis.pool.minIdle=0\nspring.redis.timeout=10000\nspring.redis.password=\n\nlogging.path=D:/log/ratelimiter\nlogging.level.com.snowalker=DEBUG\nserver.port=8888\n"
  },
  {
    "path": "shleld-ratelimter-demo/target/classes/application.properties",
    "content": "#redis\nspring.redis.hostName=127.0.0.1\nspring.redis.host=127.0.0.1\nspring.redis.port=6379\nspring.redis.pool.maxActive=8\nspring.redis.pool.maxWait=-1\nspring.redis.pool.maxIdle=8\nspring.redis.pool.minIdle=0\nspring.redis.timeout=10000\nspring.redis.password=\n\nlogging.path=D:/log/ratelimiter\nlogging.level.com.snowalker=DEBUG\nserver.port=8888\n"
  }
]