sunty
2024-05-26 ddf0dc9d26e4e046431e9bdb1ce8b346270d3156
完成布控模块
10个文件已添加
1431 ■■■■■ 已修改文件
.idea/encodings.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/misc.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/modules.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/vcs.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/workspace.xml 696 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
db/database.go 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
db/elastic.go 381 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
db/models.go 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.sum 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruleModelEngine.iml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/encodings.xml
New file
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="Encoding" addBOMForNewFiles="with NO BOM" />
</project>
.idea/misc.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ProjectRootManager">
    <output url="file://$PROJECT_DIR$/out" />
  </component>
</project>
.idea/modules.xml
New file
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ProjectModuleManager">
    <modules>
      <module fileurl="file://$PROJECT_DIR$/ruleModelEngine.iml" filepath="$PROJECT_DIR$/ruleModelEngine.iml" />
    </modules>
  </component>
</project>
.idea/vcs.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="VcsDirectoryMappings">
    <mapping directory="" vcs="Git" />
  </component>
</project>
.idea/workspace.xml
New file
@@ -0,0 +1,696 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ChangeListManager">
    <list default="true" id="919111b8-f2aa-4154-8db0-88e76c9af55d" name="Default Changelist" comment="" />
    <ignored path="$PROJECT_DIR$/out/" />
    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
    <option name="SHOW_DIALOG" value="false" />
    <option name="HIGHLIGHT_CONFLICTS" value="true" />
    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
    <option name="LAST_RESOLUTION" value="IGNORE" />
  </component>
  <component name="FavoritesManager">
    <favorites_list name="ruleModelEngine" />
  </component>
  <component name="FileEditorManager">
    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
      <file pinned="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/db/elastic.go">
          <provider selected="true" editor-type-id="text-editor">
            <state relative-caret-position="308">
              <caret line="188" column="23" lean-forward="true" selection-start-line="188" selection-start-column="23" selection-end-line="188" selection-end-column="23" />
              <folding>
                <element signature="e#12#114#0" expanded="true" />
              </folding>
            </state>
          </provider>
        </entry>
      </file>
      <file pinned="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/rule/engine.go">
          <provider selected="true" editor-type-id="text-editor">
            <state relative-caret-position="-129">
              <caret line="346" column="42" lean-forward="true" selection-start-line="346" selection-start-column="42" selection-end-line="346" selection-end-column="42" />
            </state>
          </provider>
        </entry>
      </file>
      <file pinned="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/rule/service.go">
          <provider selected="true" editor-type-id="text-editor">
            <state relative-caret-position="521">
              <caret line="56" column="31" lean-forward="true" selection-start-line="56" selection-start-column="31" selection-end-line="56" selection-end-column="31" />
              <folding>
                <element signature="e#14#107#0" expanded="true" />
              </folding>
            </state>
          </provider>
        </entry>
      </file>
      <file pinned="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/task/engine.go">
          <provider selected="true" editor-type-id="text-editor">
            <state relative-caret-position="350">
              <caret line="31" column="118" lean-forward="true" selection-start-line="31" selection-start-column="118" selection-end-line="31" selection-end-column="118" />
              <folding>
                <element signature="e#14#76#0" expanded="true" />
              </folding>
            </state>
          </provider>
        </entry>
      </file>
      <file pinned="false" current-in-tab="true">
        <entry file="file://$PROJECT_DIR$/config/app.yaml">
          <provider selected="true" editor-type-id="text-editor">
            <state relative-caret-position="517">
              <caret line="32" lean-forward="true" selection-start-line="32" selection-end-line="32" />
            </state>
          </provider>
        </entry>
      </file>
      <file pinned="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/db/models.go">
          <provider selected="true" editor-type-id="text-editor">
            <state relative-caret-position="254">
              <caret line="39" column="29" lean-forward="true" selection-start-line="39" selection-start-column="29" selection-end-line="39" selection-end-column="30" />
            </state>
          </provider>
        </entry>
      </file>
      <file pinned="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/config/config.go">
          <provider selected="true" editor-type-id="text-editor">
            <state relative-caret-position="545">
              <caret line="45" column="4" selection-start-line="45" selection-start-column="4" selection-end-line="45" selection-end-column="4" />
              <folding>
                <element signature="e#16#89#0" expanded="true" />
              </folding>
            </state>
          </provider>
        </entry>
      </file>
      <file pinned="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/task/service.go">
          <provider selected="true" editor-type-id="text-editor">
            <state relative-caret-position="328">
              <caret line="81" column="5" lean-forward="true" selection-start-line="80" selection-start-column="48" selection-end-line="81" selection-end-column="5" />
              <folding>
                <element signature="e#14#53#0" expanded="true" />
              </folding>
            </state>
          </provider>
        </entry>
      </file>
      <file pinned="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/main.go">
          <provider selected="true" editor-type-id="text-editor">
            <state relative-caret-position="-222">
              <caret line="50" column="28" lean-forward="true" selection-start-line="50" selection-start-column="28" selection-end-line="50" selection-end-column="28" />
            </state>
          </provider>
        </entry>
      </file>
      <file pinned="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/api/analysisApi/server.go">
          <provider selected="true" editor-type-id="text-editor">
            <state relative-caret-position="216">
              <caret line="13" column="23" lean-forward="true" selection-start-line="13" selection-start-column="23" selection-end-line="13" selection-end-column="23" />
            </state>
          </provider>
        </entry>
      </file>
    </leaf>
  </component>
  <component name="FileTemplateManagerImpl">
    <option name="RECENT_TEMPLATES">
      <list>
        <option value="Go File" />
      </list>
    </option>
  </component>
  <component name="FindInProjectRecents">
    <findStrings>
      <find>asdasfasfasf</find>
      <find>s</find>
      <find>1</find>
      <find>15</find>
      <find>moveout</find>
      <find>daysSince</find>
      <find>mip</find>
      <find>info</find>
      <find>now</find>
      <find>status</find>
      <find>resident</find>
      <find>ruleModelEngine/config</find>
      <find>Map</find>
      <find>ce</find>
      <find>append</find>
      <find>person</find>
      <find>PersonStatus</find>
      <find>GetDocNumberFromPersonStatus</find>
      <find>UpdatePersonInfo</find>
      <find>labeManage</find>
      <find>Table</find>
      <find>16</find>
      <find>newAlarmRules</find>
      <find>map</find>
      <find>make(map</find>
      <find>inter</find>
      <find>task</find>
      <find>personInfo</find>
      <find>buildingFloors</find>
      <find>fmt</find>
    </findStrings>
  </component>
  <component name="GOROOT" path="C:/Program Files/Go" />
  <component name="Git.Settings">
    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
  </component>
  <component name="IdeDocumentHistory">
    <option name="CHANGED_PATHS">
      <list>
        <option value="$PROJECT_DIR$/rule/identityEngine.go" />
        <option value="$PROJECT_DIR$/db/database.go" />
        <option value="$PROJECT_DIR$/api/analysis/server.go" />
        <option value="$PROJECT_DIR$/data/prepare.go" />
        <option value="$PROJECT_DIR$/db/cache.go" />
        <option value="$PROJECT_DIR$/cache/cache.go" />
        <option value="$PROJECT_DIR$/cache/device.go" />
        <option value="$PROJECT_DIR$/task/tool.go" />
        <option value="$PROJECT_DIR$/db/repository.go" />
        <option value="$PROJECT_DIR$/rule/engine.go" />
        <option value="$PROJECT_DIR$/api/analysisApi/server.go" />
        <option value="$PROJECT_DIR$/db/elasticScriptToId.go" />
        <option value="$PROJECT_DIR$/config/config.go" />
        <option value="$PROJECT_DIR$/rule/service.go" />
        <option value="$PROJECT_DIR$/db/models.go" />
        <option value="$PROJECT_DIR$/db/elastic.go" />
        <option value="$PROJECT_DIR$/config/app.yaml" />
        <option value="$PROJECT_DIR$/task/engine.go" />
        <option value="$PROJECT_DIR$/main.go" />
        <option value="$PROJECT_DIR$/task/service.go" />
      </list>
    </option>
  </component>
  <component name="ProjectFrameBounds" extendedState="6">
    <option name="x" value="-8" />
    <option name="y" value="-8" />
    <option name="width" value="1936" />
    <option name="height" value="1176" />
  </component>
  <component name="ProjectView">
    <navigator proportions="" version="1">
      <foldersAlwaysOnTop value="true" />
    </navigator>
    <panes>
      <pane id="Scope" />
      <pane id="ProjectPane">
        <subPane>
          <expand>
            <path>
              <item name="ruleModelEngine" type="b2602c69:ProjectViewProjectNode" />
              <item name="ruleModelEngine" type="462c0819:PsiDirectoryNode" />
            </path>
            <path>
              <item name="ruleModelEngine" type="b2602c69:ProjectViewProjectNode" />
              <item name="ruleModelEngine" type="462c0819:PsiDirectoryNode" />
              <item name="api" type="462c0819:PsiDirectoryNode" />
            </path>
            <path>
              <item name="ruleModelEngine" type="b2602c69:ProjectViewProjectNode" />
              <item name="ruleModelEngine" type="462c0819:PsiDirectoryNode" />
              <item name="api" type="462c0819:PsiDirectoryNode" />
              <item name="analysisApi" type="462c0819:PsiDirectoryNode" />
            </path>
            <path>
              <item name="ruleModelEngine" type="b2602c69:ProjectViewProjectNode" />
              <item name="ruleModelEngine" type="462c0819:PsiDirectoryNode" />
              <item name="cache" type="462c0819:PsiDirectoryNode" />
            </path>
            <path>
              <item name="ruleModelEngine" type="b2602c69:ProjectViewProjectNode" />
              <item name="ruleModelEngine" type="462c0819:PsiDirectoryNode" />
              <item name="config" type="462c0819:PsiDirectoryNode" />
            </path>
            <path>
              <item name="ruleModelEngine" type="b2602c69:ProjectViewProjectNode" />
              <item name="ruleModelEngine" type="462c0819:PsiDirectoryNode" />
              <item name="data" type="462c0819:PsiDirectoryNode" />
            </path>
            <path>
              <item name="ruleModelEngine" type="b2602c69:ProjectViewProjectNode" />
              <item name="ruleModelEngine" type="462c0819:PsiDirectoryNode" />
              <item name="db" type="462c0819:PsiDirectoryNode" />
            </path>
            <path>
              <item name="ruleModelEngine" type="b2602c69:ProjectViewProjectNode" />
              <item name="ruleModelEngine" type="462c0819:PsiDirectoryNode" />
              <item name="rule" type="462c0819:PsiDirectoryNode" />
            </path>
            <path>
              <item name="ruleModelEngine" type="b2602c69:ProjectViewProjectNode" />
              <item name="ruleModelEngine" type="462c0819:PsiDirectoryNode" />
              <item name="task" type="462c0819:PsiDirectoryNode" />
            </path>
            <path>
              <item name="ruleModelEngine" type="b2602c69:ProjectViewProjectNode" />
              <item name="ruleModelEngine" type="462c0819:PsiDirectoryNode" />
              <item name="util" type="462c0819:PsiDirectoryNode" />
            </path>
            <path>
              <item name="ruleModelEngine" type="b2602c69:ProjectViewProjectNode" />
              <item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
            </path>
          </expand>
          <select />
        </subPane>
      </pane>
      <pane id="PackagesPane" />
    </panes>
  </component>
  <component name="PropertiesComponent">
    <property name="DefaultGoTemplateProperty" value="Go File" />
    <property name="GO_FMT" value="true" />
    <property name="WebServerToolWindowFactoryState" value="false" />
    <property name="aspect.path.notification.shown" value="true" />
    <property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1716721006565" />
    <property name="configurable.Global.GOPATH.is.expanded" value="true" />
    <property name="configurable.Module.GOPATH.is.expanded" value="false" />
    <property name="configurable.Project.GOPATH.is.expanded" value="true" />
    <property name="go.gopath.indexing.explicitly.defined" value="true" />
    <property name="last_opened_file_path" value="D:/" />
    <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
    <property name="nodejs_npm_path_reset_for_default_project" value="true" />
    <property name="restartRequiresConfirmation" value="false" />
    <property name="settings.editor.selected.configurable" value="go.vgo" />
  </component>
  <component name="RecentsManager">
    <key name="MoveFile.RECENT_KEYS">
      <recent name="F:\workspace\golang\cloud_ai\ruleModelEngine\cache" />
    </key>
    <key name="CopyFile.RECENT_KEYS">
      <recent name="F:\workspace\golang\cloud_ai\ruleModelEngine" />
    </key>
  </component>
  <component name="RunDashboard">
    <option name="ruleStates">
      <list>
        <RuleState>
          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
        </RuleState>
        <RuleState>
          <option name="name" value="StatusDashboardGroupingRule" />
        </RuleState>
      </list>
    </option>
  </component>
  <component name="RunManager" selected="Go Build.go build main.go">
    <configuration name="go build elastic.go" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
      <module name="ruleModelEngine" />
      <working_directory value="$PROJECT_DIR$" />
      <kind value="FILE" />
      <filePath value="$PROJECT_DIR$/db/elastic.go" />
      <package value="ruleModelEngine" />
      <directory value="$PROJECT_DIR$" />
      <method v="2" />
    </configuration>
    <configuration name="go build main.go" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
      <module name="ruleModelEngine" />
      <working_directory value="$PROJECT_DIR$" />
      <kind value="FILE" />
      <filePath value="$PROJECT_DIR$/main.go" />
      <package value="ruleModelEngine" />
      <directory value="$PROJECT_DIR$" />
      <method v="2" />
    </configuration>
    <recent_temporary>
      <list>
        <item itemvalue="Go Build.go build main.go" />
        <item itemvalue="Go Build.go build elastic.go" />
      </list>
    </recent_temporary>
  </component>
  <component name="SvnConfiguration">
    <configuration />
  </component>
  <component name="TaskManager">
    <task active="true" id="Default" summary="Default task">
      <changelist id="919111b8-f2aa-4154-8db0-88e76c9af55d" name="Default Changelist" comment="" />
      <created>1713166065668</created>
      <option name="number" value="Default" />
      <option name="presentableId" value="Default" />
      <updated>1713166065668</updated>
      <workItem from="1713166068218" duration="121229000" />
      <workItem from="1714960004642" duration="105790000" />
    </task>
    <task id="LOCAL-00001" summary="新增迁入迁出,属性分析,身份分析等">
      <created>1714471841345</created>
      <option name="number" value="00001" />
      <option name="presentableId" value="LOCAL-00001" />
      <option name="project" value="LOCAL" />
      <updated>1714471841345</updated>
    </task>
    <task id="LOCAL-00002" summary="添加布控模块,合并person_status和snapshot_count_summary数据库等">
      <created>1716555879404</created>
      <option name="number" value="00002" />
      <option name="presentableId" value="LOCAL-00002" />
      <option name="project" value="LOCAL" />
      <updated>1716555879404</updated>
    </task>
    <task id="LOCAL-00003" summary="添加布控模块,合并person_status和snapshot_count_summary数据库等">
      <created>1716720676019</created>
      <option name="number" value="00003" />
      <option name="presentableId" value="LOCAL-00003" />
      <option name="project" value="LOCAL" />
      <updated>1716720676019</updated>
    </task>
    <task id="LOCAL-00004" summary="完成布控模块">
      <created>1716720903870</created>
      <option name="number" value="00004" />
      <option name="presentableId" value="LOCAL-00004" />
      <option name="project" value="LOCAL" />
      <updated>1716720903870</updated>
    </task>
    <option name="localTasksCounter" value="5" />
    <servers />
  </component>
  <component name="TimeTrackingManager">
    <option name="totallyTimeSpent" value="227019000" />
  </component>
  <component name="ToolWindowManager">
    <frame x="-8" y="-8" width="1936" height="1176" extended-state="6" />
    <layout>
      <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.17643923" />
      <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
      <window_info id="Image Layers" order="2" />
      <window_info id="Designer" order="3" />
      <window_info id="UI Designer" order="4" />
      <window_info id="Capture Tool" order="5" />
      <window_info id="Favorites" order="6" side_tool="true" />
      <window_info anchor="bottom" id="Message" order="0" />
      <window_info anchor="bottom" id="Find" order="1" />
      <window_info anchor="bottom" id="Run" order="2" weight="0.42802304" />
      <window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
      <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
      <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
      <window_info anchor="bottom" id="TODO" order="6" />
      <window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
      <window_info active="true" anchor="bottom" id="Terminal" order="8" visible="true" weight="0.31765833" />
      <window_info anchor="bottom" id="Version Control" order="9" />
      <window_info anchor="bottom" id="Database Changes" order="10" />
      <window_info anchor="bottom" id="Event Log" order="11" side_tool="true" />
      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
      <window_info anchor="right" id="Palette" order="3" />
      <window_info anchor="right" id="Theme Preview" order="4" />
      <window_info anchor="right" id="Maven" order="5" />
      <window_info anchor="right" id="Capture Analysis" order="6" />
      <window_info anchor="right" id="Palette&#9;" order="7" />
      <window_info anchor="right" id="Database" order="8" />
    </layout>
    <layout-to-restore>
      <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.17643923" />
      <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
      <window_info id="Image Layers" order="2" />
      <window_info id="Designer" order="3" />
      <window_info id="UI Designer" order="4" />
      <window_info id="Capture Tool" order="5" />
      <window_info id="Favorites" order="6" side_tool="true" />
      <window_info anchor="bottom" id="Message" order="0" />
      <window_info anchor="bottom" id="Find" order="1" />
      <window_info active="true" anchor="bottom" id="Run" order="2" visible="true" weight="0.42802304" />
      <window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
      <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
      <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
      <window_info anchor="bottom" id="TODO" order="6" />
      <window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
      <window_info anchor="bottom" id="Terminal" order="8" weight="0.31765833" />
      <window_info anchor="bottom" id="Version Control" order="9" />
      <window_info anchor="bottom" id="Database Changes" order="10" />
      <window_info anchor="bottom" id="Event Log" order="11" side_tool="true" />
      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
      <window_info anchor="right" id="Palette" order="3" />
      <window_info anchor="right" id="Theme Preview" order="4" />
      <window_info anchor="right" id="Maven" order="5" />
      <window_info anchor="right" id="Capture Analysis" order="6" />
      <window_info anchor="right" id="Palette&#9;" order="7" />
      <window_info anchor="right" id="Database" order="8" />
    </layout-to-restore>
  </component>
  <component name="TypeScriptGeneratedFilesManager">
    <option name="version" value="1" />
  </component>
  <component name="VcsManagerConfiguration">
    <MESSAGE value="新增迁入迁出,属性分析,身份分析等" />
    <MESSAGE value="添加布控模块,合并person_status和snapshot_count_summary数据库等" />
    <MESSAGE value="完成布控模块" />
    <option name="LAST_COMMIT_MESSAGE" value="完成布控模块" />
  </component>
  <component name="VgoProject">
    <integration-enabled>true</integration-enabled>
    <proxy>https://goproxy.cn,direct</proxy>
  </component>
  <component name="editorHistoryManager">
    <entry file="file://$PROJECT_DIR$/go.mod">
      <provider selected="true" editor-type-id="text-editor">
        <state>
          <caret column="13" selection-start-column="13" selection-end-column="13" />
        </state>
      </provider>
    </entry>
    <entry file="file://C:/Program Files/Go/src/time/format.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="203">
          <caret line="619" column="14" selection-start-line="619" selection-start-column="14" selection-end-line="619" selection-end-column="14" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/util/util.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="-6285">
          <caret line="3" column="32" lean-forward="true" selection-start-line="3" selection-start-column="4" selection-end-line="3" selection-end-column="32" />
        </state>
      </provider>
    </entry>
    <entry file="file://C:/Program Files/Go/src/math/const.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="409">
          <caret line="49" column="4" selection-start-line="49" selection-start-column="4" selection-end-line="49" selection-end-column="4" />
        </state>
      </provider>
    </entry>
    <entry file="file://C:/Program Files/Go/src/time/time.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="208">
          <caret line="1466" column="5" selection-start-line="1466" selection-start-column="5" selection-end-line="1466" selection-end-column="5" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/rule/identityEngine.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="-844">
          <caret line="5" column="1" lean-forward="true" selection-start-line="5" selection-start-column="1" selection-end-line="5" selection-end-column="1" />
          <folding>
            <element signature="e#14#39#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$USER_HOME$/go/pkg/mod/gorm.io/gorm@v1.25.9/gorm.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="322">
          <caret line="371" column="19" lean-forward="true" selection-start-line="371" selection-start-column="19" selection-end-line="371" selection-end-column="19" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/db/database.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="576">
          <caret line="24" selection-start-line="24" selection-end-line="24" />
          <folding>
            <element signature="e#12#88#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$USER_HOME$/go/pkg/mod/basic.com/!cloud!a!i/protomsg.git@v0.0.0-20240523091240-77f661e9c66f/analysis/analysis_grpc.pb.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="195">
          <caret line="72" column="5" selection-start-line="72" selection-start-column="5" selection-end-line="72" selection-end-column="5" />
        </state>
      </provider>
    </entry>
    <entry file="file://$USER_HOME$/go/pkg/mod/basic.com/!cloud!a!i/protomsg.git@v0.0.0-20240523091240-77f661e9c66f/analysis/analysis.pb.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="178">
          <caret line="21" lean-forward="true" selection-start-line="21" selection-end-line="21" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/data/prepare.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="42">
          <caret line="103" column="8" lean-forward="true" selection-start-line="103" selection-start-column="8" selection-end-line="103" selection-end-column="8" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/cache/device.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="168">
          <caret line="7" column="35" lean-forward="true" selection-start-line="7" selection-start-column="35" selection-end-line="7" selection-end-column="35" />
          <folding>
            <element signature="e#15#77#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/task/tool.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="504">
          <caret line="21" column="9" selection-start-line="21" selection-start-column="9" selection-end-line="21" selection-end-column="9" />
          <folding>
            <element signature="e#14#41#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/db/repository.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="-2">
          <caret line="170" column="8" selection-start-line="170" selection-start-column="8" selection-end-line="170" selection-end-column="8" />
          <folding>
            <element signature="e#12#78#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$USER_HOME$/go/pkg/mod/basic.com/pubsub/esutil.git@v0.0.0-20240401091908-7a10b30099c6/EsClient.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="98">
          <caret line="1003" column="20" selection-start-line="1003" selection-start-column="20" selection-end-line="1003" selection-end-column="20" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/db/elasticScriptToId.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="82">
          <caret line="8" column="5" selection-start-line="8" selection-start-column="5" selection-end-line="8" selection-end-column="5" />
          <folding>
            <element signature="e#12#86#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/rule/engine.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="-129">
          <caret line="346" column="42" lean-forward="true" selection-start-line="346" selection-start-column="42" selection-end-line="346" selection-end-column="42" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/config/config.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="545">
          <caret line="45" column="4" selection-start-line="45" selection-start-column="4" selection-end-line="45" selection-end-column="4" />
          <folding>
            <element signature="e#16#89#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/rule/service.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="521">
          <caret line="56" column="31" lean-forward="true" selection-start-line="56" selection-start-column="31" selection-end-line="56" selection-end-column="31" />
          <folding>
            <element signature="e#14#107#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/task/engine.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="350">
          <caret line="31" column="118" lean-forward="true" selection-start-line="31" selection-start-column="118" selection-end-line="31" selection-end-column="118" />
          <folding>
            <element signature="e#14#76#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/db/models.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="254">
          <caret line="39" column="29" lean-forward="true" selection-start-line="39" selection-start-column="29" selection-end-line="39" selection-end-column="30" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/db/elastic.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="308">
          <caret line="188" column="23" lean-forward="true" selection-start-line="188" selection-start-column="23" selection-end-line="188" selection-end-column="23" />
          <folding>
            <element signature="e#12#114#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$USER_HOME$/go/pkg/mod/basic.com/!cloud!a!i/protomsg.git@v0.0.0-20240524094225-61cfc0043e88/analysis/analysis_grpc.pb.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="338">
          <caret line="72" column="5" selection-start-line="72" selection-start-column="5" selection-end-line="72" selection-end-column="5" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/api/analysisApi/server.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="216">
          <caret line="13" column="23" lean-forward="true" selection-start-line="13" selection-start-column="23" selection-end-line="13" selection-end-column="23" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/task/service.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="328">
          <caret line="81" column="5" lean-forward="true" selection-start-line="80" selection-start-column="48" selection-end-line="81" selection-end-column="5" />
          <folding>
            <element signature="e#14#53#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/main.go">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="-222">
          <caret line="50" column="28" lean-forward="true" selection-start-line="50" selection-start-column="28" selection-end-line="50" selection-end-column="28" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/config/app.yaml">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="517">
          <caret line="32" lean-forward="true" selection-start-line="32" selection-end-line="32" />
        </state>
      </provider>
    </entry>
  </component>
  <component name="masterDetails">
    <states>
      <state key="ProjectJDKs.UI">
        <settings>
          <last-edited>1.8</last-edited>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.2" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
    </states>
  </component>
</project>
db/database.go
New file
@@ -0,0 +1,39 @@
package db
import (
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
    "ruleModelEngine/config"
    "time"
)
var DB *gorm.DB
//// 初始化数据库连接
//func InitDB() error {
//    dsn := "root:c++java123@tcp(" + config.DataBase.Host + ":" + config.DataBase.Port + ")/" + config.DataBase.Name + "?charset=utf8mb4&parseTime=True&loc=Local"
//    var err error
//    db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
//    if err != nil {
//        return err
//    }
//    return nil
//}
func ConnectDB() (error) {
    dsn := "root:c++java123@tcp(" + config.DataBase.Host + ":" + config.DataBase.Port + ")/" + config.DataBase.Name + "?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        return err
    }
    sqlDb,err := db.DB()
    if err != nil{
        return err
    }
    sqlDb.SetMaxIdleConns(2)
    sqlDb.SetMaxOpenConns(1)
    sqlDb.SetConnMaxLifetime(time.Duration(120) * time.Second)
    sqlDb.SetConnMaxIdleTime(time.Duration(1800) * time.Second)
    DB = db
    return nil
}
db/elastic.go
New file
@@ -0,0 +1,381 @@
package db
import (
    "basic.com/pubsub/esutil.git"
    "basic.com/valib/logger.git"
    "encoding/json"
    "fmt"
    "ruleModelEngine/config"
    "ruleModelEngine/util"
    "strconv"
)
func decodeDocumentInfos(docInfo []map[string]interface{}) ([]CaptureInfo, error) {
    captureInfos := make([]CaptureInfo, 0)
    for _, info := range docInfo {
        var captureInfo = CaptureInfo{}
        captureInfo.DocumentNumber = info["key"].(string)
        buckets := info["top_hits"].(map[string]interface{})["hits"].(map[string]interface{})["hits"].([]interface{})
        orgId := buckets[0].(map[string]interface{})["_source"].(map[string]interface{})["orgId"].(string)
        captureInfo.OrgId = orgId
        for _, sourceInfo := range buckets {
            rSourceInfo := sourceInfo.(map[string]interface{})
            source := rSourceInfo["_source"].(map[string]interface{})
            picDate := source["picDate"].(string)
            cameraLocation := source["cameraLocation"].(map[string]interface{})
            unit := cameraLocation["unit"].(string)
            floor := cameraLocation["floor"].(string)
            building := cameraLocation["building"].(string)
            direction := cameraLocation["direction"].(string)
            captureAddress := building + unit + floor
            captureInfo.CaptureDetail = append(captureInfo.CaptureDetail, CaptureDetail{CaptureAddress: captureAddress, CaptureDate: picDate, Direction: direction})
        }
        captureInfos = append(captureInfos, captureInfo)
    }
    return captureInfos, nil
}
func QueryTimesByDocNumberDays(days int, docNumber string) (int, error) {
    esURL := "http://" + config.Elastic.Host + ":" + config.Elastic.Port + "/" + config.Elastic.Index + "/_search"
    queryDSL := `{
    "query": {
        "bool": {
            "filter": [
                {
                    "range": {
                        "picDate": {
                            "gte": "now-` + strconv.Itoa(days) + `d/d"
                        }
                    }
                },
                {
                    "term": {
                        "documentNumber": "` + docNumber + `"
                    }
                }
            ]
        }
    },
    "size": 0
}`
    buf, err := esutil.EsReq("POST", esURL, []byte(queryDSL))
    if err != nil {
        return 0, err
    }
    total, err := esutil.SourceTotal(buf)
    if err != nil {
        return 0, err
    }
    return total, nil
}
func QueryLastIdByDayRange(dayGte, dayLt int) (map[string]string, error) {
    esURL := "http://" + config.Elastic.Host + ":" + config.Elastic.Port + "/" + config.Elastic.Index + "/_search"
    queryDSL := `{
    "query": {
        "bool": {
            "filter": [
                {
                    "range": {
                        "picDate": {
                            "gte": "now-` + strconv.Itoa(dayGte) + `d/d",
                            "lt": "now-` + strconv.Itoa(dayLt) + `d/d"
                        }
                    }
                }
            ]
        }
    },
    "size": 0,
    "aggs": {
        "group_by_documentnumber": {
            "terms": {
                "field": "documentNumber",
                "size": 100000
            },
            "aggs": {
                "top_hits": {
                    "top_hits": {
                        "_source": [
                            "documentNumber",
                            "id"
                        ],
                        "size": 1,
                        "sort": [
                            {
                                "picDate": {
                                    "order": "desc"
                                }
                            }
                        ]
                    }
                }
            }
        }
    }
}`
    //fmt.Println(queryDSL)
    //fmt.Println(esURL)
    docNumberMap := make(map[string]string)
    buf, err := esutil.EsReq("POST", esURL, []byte(queryDSL))
    if err != nil {
        return nil, err
    }
    source, err := esutil.SourceAggregationList(buf)
    if err != nil {
        return nil, err
    }
    fmt.Println("source", source)
    for _, info := range source {
        buckets := info["top_hits"].(map[string]interface{})["hits"].(map[string]interface{})["hits"].([]interface{})
        for _, sourceInfo := range buckets {
            rSourceInfo := sourceInfo.(map[string]interface{})
            source := rSourceInfo["_source"].(map[string]interface{})
            documentNumber := source["documentNumber"].(string)
            id := source["id"].(string)
            docNumberMap[documentNumber] = id
        }
    }
    return docNumberMap, nil
}
func QueryById(id string) (TaskPerson, error) {
    esURL := "http://" + config.Elastic.Host + ":" + config.Elastic.Port + "/" + config.Elastic.Index + "/_search"
    queryDSL := `{
    "query": {
        "bool": {
            "filter": [
                {
                    "term": {
                        "id": "` + id + `"
                    }
                }
            ]
        }
    },
    "_source": [
        "id",
        "cameraId",
        "picDate",
        "communityId",
        "documentNumber",
        "cameraLocation.floor",
        "targetInfo.targetType"
    ]
}`
    var taskPerson TaskPerson
    buf, err := esutil.EsReq("POST", esURL, []byte(queryDSL))
    if err != nil {
        return taskPerson, err
    }
    source, err := esutil.Sourcelist(buf)
    if err != nil {
        return taskPerson, err
    }
    if len(source) == 0 {
        return taskPerson, nil
    }
    //fmt.Println(source[0])
    taskPerson.Id = source[0]["id"].(string)
    taskPerson.PicDate = source[0]["picDate"].(string)
    taskPerson.CameraId = source[0]["cameraId"].(string)
    taskPerson.CommunityId = source[0]["communityId"].(string)
    taskPerson.DocumentNumber = source[0]["documentNumber"].(string)
    taskPerson.TargetType = source[0]["targetInfo"].(map[string]interface{})["targetType"].(string)
    taskPerson.Floor = source[0]["cameraLocation"].(map[string]interface{})["floor"].(string)
    return taskPerson, nil
}
func QueryCheckDataByDocumentNumber(documentNumber string, startTime, endTime string) (int, error) {
    esURL := "http://" + config.Elastic.Host + ":" + config.Elastic.Port + "/" + config.Elastic.Index + "/_search"
    queryDSL := `{
    "query": {
        "bool": {
            "filter": [
                {
                    "term": {
                        "documentNumber": "` + documentNumber + `"
                    }
                },
                {
                    "range": {
                        "picDate": {
                            "gte": "` + startTime + `",
                            "lt" : "` + endTime + `"
                        }
                    }
                }
            ],
            "must_not": [
                {
                    "term": {
                        "floor": ""
                    }
                }
            ]
        }
    },
    "size": 100,
    "_source": [
        "cameraLocation.floor",
        "cameraLocation.building"
    ]
}`
    //fmt.Println("queryDSL: ", queryDSL)
    //var floor =
    buf, err := esutil.EsReq("POST", esURL, []byte(queryDSL))
    if err != nil {
        return 0, err
    }
    source, err := esutil.Sourcelist(buf)
    if err != nil {
        return 0, err
    }
    if len(source) == 0 {
        return 0, nil
    }
    buildingFloors := make(map[string]bool)
    for _, info := range source {
        building := info["cameraLocation"].(map[string]interface{})["building"].(string)
        floor := info["cameraLocation"].(map[string]interface{})["floor"].(string)
        if building != "" && floor != "" {
            buildingFloors[building+floor] = true
        }
    }
    //fmt.Println("buildingFloors: ", buildingFloors, len(buildingFloors))
    return len(buildingFloors), nil
}
func AddAlarmRules(alarmRules []AlarmRule, id string) (bool, error) {
    if len(alarmRules) == 0 {
        logger.Info("未有预警 id: ", id)
        return true, nil
    }
    fmt.Println("预警 id: ", id)
    fmt.Println("预警 AlarmRule: ", alarmRules)
    esURL := "http://" + config.Elastic.Host + ":" + config.Elastic.Port + "/" + config.Elastic.Index + "/_update_by_query"
    newAlarmRulesJson, err := json.Marshal(alarmRules)
    if err != nil {
        logger.Error("json.Marshal alarmRules err: ", newAlarmRulesJson)
        return false, err
    }
    queryDSL := `{
    "script": {
        "source": "for (item in params.newAlarmRules) { ctx._source.alarmRules.add(item) } ctx._source.isAlarm = params.newStatus",
        "lang": "painless",
        "params": {
             "newStatus":true,
            "newAlarmRules": ` + string(newAlarmRulesJson) + `
        }
    },
    "query": {
        "bool": {
            "filter": [
                {
                    "term": {
                        "id": "` + id + `"
                    }
                }
            ]
        }
    }
}`
    //fmt.Println("AddAlarmRules: ", esURL)
    //fmt.Println("AddAlarmRules: ", queryDSL)
    //return true, nil
    buf, err := esutil.EsReq("POST", esURL, []byte(queryDSL))
    if err != nil {
        logger.Error("EsReq err: ", err)
        return false, err
    }
    addFlag, err := esutil.SourceUpdated(buf)
    if err != nil {
        logger.Error("SourceUpdated err: ", err)
        return false, err
    }
    if addFlag != 0 {
        return true, nil
    }
    return false, nil
}
func Query1MDataByCommunityId(communityId string) ([]CaptureInfo, error) {
    //fmt.Println(config.Elastic.DocumentSize)
    //fmt.Println(config.Elastic.TopHitsSize)
    esURL := "http://" + config.Elastic.Host + ":" + config.Elastic.Port + "/" + config.Elastic.Index + "/_search"
    queryDSL := `
    {
        "query": {
            "bool": {
                "filter": [
                    {
                        "range": {
                            "picDate": {
                                "gte": "now-30d/d",
                                "lt": "now/d"
                            }
                        }
                    },
                    {
                        "term":{
                            "communityId":"` + communityId + `"
                        }
                    }
                ],
                "must_not": [
                    {
                        "term": {
                            "documentNumber": ""
                        }
                    }
                ],
                "should": []
            }
        },
        "size": 0,
        "aggs": {
            "group_by_documentnumber": {
                "terms": {
                    "field": "documentNumber",
                    "size": ` + strconv.Itoa(config.Elastic.DocumentSize) + `
                },
                "aggs": {
                    "top_hits": {
                        "top_hits": {
                            "_source": [
                                "documentNumber",
                                "picDate",
                                "orgId",
                                "cameraLocation.building",
                                "cameraLocation.unit",
                                "cameraLocation.floor",
                                "cameraLocation.direction"
                            ],
                            "size": ` + strconv.Itoa(config.Elastic.TopHitsSize) + `,
                            "sort": [
                                {
                                    "picDate": {
                                        "order": "asc"
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        }
    }`
    //fmt.Println(esURL)
    //fmt.Println(queryDSL)
    buf, err := esutil.EsReq("POST", esURL, []byte(queryDSL))
    if err != nil {
        return nil, err
    }
    source, err := util.SourceAggregationList(buf)
    if err != nil {
        return nil, err
    }
    result, _ := decodeDocumentInfos(source)
    return result, nil
}
db/models.go
New file
@@ -0,0 +1,156 @@
package db
import (
    "time"
)
type PersonnelStatusRule struct {
    ID                  int    `gorm:"column:id"`
    Name                string `gorm:"column:name"`
    DetectionCountStart int    `gorm:"column:detectionCountStart"`
    DetectionCountEnd   int    `gorm:"column:detectionCountEnd"`
    DetectionDaysStart  int    `gorm:"column:detectionDaysStart"`
    DetectionDaysEnd    int    `gorm:"column:detectionDaysEnd"`
    Status              string `gorm:"column:status"`
}
type AlarmRule struct {
    RuleId     string `json:"ruleId"`
    RuleText   string `json:"ruleText"`
    AlarmLevel string `json:"alarmLevel"`
}
type TaskPerson struct {
    Id             string `json:"id"`
    CameraId       string `json:"cameraId"`
    CommunityId    string `json:"communityId"`
    PicDate        string `json:"picDate"`
    DocumentNumber string `json:"documentNumber"`
    TargetType     string `json:"targetType"`
    Floor          string `json:"floor"`
}
type BuildingType int
const (
    BuildingTypeResidential    BuildingType = 1 //住宅楼
    BuildingTypeMixedUse       BuildingType = 2 //商住楼
    BuildingTypePublicRental   BuildingType = 3 //公租房
    BuildingTypeLowIncome      BuildingType = 4 //廉租房
    BuildingTypeOldResidential BuildingType = 5 //老旧小区
    BuildingTypeOffice         BuildingType = 6 //写字楼
)
type Device struct {
    DeviceCode       string       `gorm:"column:deviceCode" json:"deviceCode" example:"J83762"`                                 //设备编码
    BuildingType     BuildingType `gorm:"column:building_type;type:tinyint(1);not null;default:0" json:"buildingType"`          //楼宇类型
    MaxBuildingFloor int          `gorm:"column:max_building_floor;type:tinyint(1);not null;default:0" json:"maxBuildingFloor"` //最高楼层号
}
type Task struct {
    Id   int    `gorm:"column:id"`
    Name string `gorm:"name"`
}
func (Task) TableName() string {
    return "task"
}
type MoveInout struct {
    //RecordId       int        `gorm:"column:record_id"`
    DocumentNumber string     `gorm:"column:document_number"`
    CommunityID    string     `gorm:"column:community_id"`
    MoveInDate     time.Time  `gorm:"column:move_in_date"`
    MoveOutDate    *time.Time `gorm:"column:move_out_date"`
    Status         string     `gorm:"column:status"`
    MoveType       string     `gorm:"column:move_type"`
}
func (MoveInout) TableName() string {
    return "move_inout"
}
type Resident struct {
    CommunityId        string `gorm:"column:community_id"`
    DocumentNumber     string `gorm:"column:document_number"`
    LastAppearanceTime int64  `gorm:"column:last_appearance_time"`
    CreateAt           string `gorm:"column:create_at"`
}
type PersonStatus struct {
    Id                 uint   `gorm:"column:id;primary_key;auto_increment;not null;"`
    OrgId              string `gorm:"column:org_id;type:varchar(299);not null;default:''"`                                                                                            // 派出所id
    CommunityID        string `gorm:"uniqueIndex:idx_document_number_community_id;index:community_id_last_appearance_time;column:community_id;type:varchar(299);not null;default:''"` // 小区id
    DocumentNumber     string `gorm:"uniqueIndex:idx_document_number_community_id;column:document_number;type:varchar(299);not null;default:''"`                                      // 档案编号
    DaysAppeared       int    `gorm:"column:days_appeared;type:int(11);not null;default:0" json:"daysAppeared"`                                                                       // 出现天数
    Count              int    `gorm:"column:count;type:int;not null;default:0"`                                                                                                       // 抓拍次数
    Status             string `gorm:"column:status;type:varchar(255);not null;default:''"`                                                                                            //标签
    LastAppearanceTime int64  `gorm:"index:community_id_last_appearance_time;column:last_appearance_time;type:int;not null;default:0" json:"lastAppearanceTime"`                      //最后出现时间
    LastLocation       string `gorm:"column:last_location;type:varchar(255);not null;default:''" json:"lastLocation"`                                                                 //最后出现地点
    FrequentAddress    string `gorm:"column:frequent_address;type:varchar(255);not null;default:''" json:"frequentAddress"`                                                           //常出现地点
    CreatedAt          time.Time
    UpdatedAt          time.Time
    ////OrgId           string `gorm:"column:org_id"`
    //CommunityID     string `gorm:"column:communityID"`
    //DocumentNumber  string `gorm:"column:documentNumber"`
    //Status          string `gorm:"column:status"`
    //FrequentAddress string `gorm:"column:frequentAddress"`
}
func (PersonStatus) TableName() string {
    return "snapshot_count_summary"
}
type LabelManage struct {
    Id        int    `gorm:"id"`
    Name      string `gorm:"name"`
    ValidDays int    `gorm:"valid_days"`
}
func (LabelManage) TableName() string {
    return "label_manage"
}
type Identity struct {
    CreatedAt      time.Time
    UpdatedAt      time.Time
    CommunityID    string `gorm:"column:community_id"`
    DocumentNumber string `gorm:"column:dbtablepersons_id"`
    LabelId        int    `gorm:"column:label_id"`
    ExpireTime     int64  `gorm:"column:expire_time"`
}
func (Identity) TableName() string {
    return "dbtablepersons_label"
}
//
//type ModelMatix struct {
//    CommunityID     string
//    DocumentNumber  string
//    CaptureDate     string
//    Status          string
//    FrequentAddress string
//}
type StatusPersonMapping struct {
    Status string
    IDs    []string
}
type CaptureInfo struct {
    OrgId           string          `json:"orgId"` //派出所Id
    DocumentNumber  string          `json:"documentNumber"`
    CaptureDays     int             `json:"captureDays"`     //抓拍天数
    OvernightStays  int             `json:"overnightStays"`  //过夜天数
    Status          string          `json:"status"`          //状态
    FrequentAddress string          `json:"frequentAddress"` //常用地址
    Age             int             `json:"age"`             //年龄
    CaptureDetail   []CaptureDetail `json:"captureDetail"`
}
type CaptureDetail struct {
    CaptureDate    string `json:"captureDate"`
    CaptureAddress string `json:"captureAddress"`
    Direction      string `json:"direction"`
}
go.sum
New file
@@ -0,0 +1,126 @@
basic.com/CloudAI/protomsg.git v0.0.0-20240523091240-77f661e9c66f h1:1M7dj+pSxEZ5GDimvqcB9Vl8S747mb3FlODR3F8RCG8=
basic.com/CloudAI/protomsg.git v0.0.0-20240523091240-77f661e9c66f/go.mod h1:lZXQZPD7Nwo1ZIPWzlB3SHwK8BfbwumEQGHSE79lhOo=
basic.com/CloudAI/protomsg.git v0.0.0-20240524094225-61cfc0043e88 h1:xW9mYZt35TTXPVzayWQaF2XR7mO3Fq+mN48nBmho2cI=
basic.com/CloudAI/protomsg.git v0.0.0-20240524094225-61cfc0043e88/go.mod h1:lZXQZPD7Nwo1ZIPWzlB3SHwK8BfbwumEQGHSE79lhOo=
basic.com/pubsub/esutil.git v0.0.0-20240401091908-7a10b30099c6 h1:j8+vyFtnNZkwrfA9booFTZL7a0GOLrGf4+q7X5P52Bs=
basic.com/pubsub/esutil.git v0.0.0-20240401091908-7a10b30099c6/go.mod h1:yIvppFPFGC61DOdm71ujnsxZBMFUu2yKjr5O43bMWCw=
basic.com/pubsub/protomsg.git v0.0.0-20230210092337-5f1e6cdae7c3 h1:h6dF39g4oqEMY0wDcFG3W4wYpeTNFjwWMp8TmFKnrAg=
basic.com/pubsub/protomsg.git v0.0.0-20230210092337-5f1e6cdae7c3/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
basic.com/valib/logger.git v0.0.0-20220225105132-5cf6309c132f h1:ByWle6XVKj9n4ILEyml622trRlC5TlWMLe0pyIaXoeA=
basic.com/valib/logger.git v0.0.0-20220225105132-5cf6309c132f/go.mod h1:SPlOGUUlxCscwF1dkqmLb0oJXVqg1uJ8hsPXLFxrw1M=
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM=
github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk=
github.com/pelletier/go-toml/v2 v2.2.1 h1:9TA9+T8+8CUCO2+WYnDLCgrYi9+omqKXyjDtosvtEhg=
github.com/pelletier/go-toml/v2 v2.2.1/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ=
github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8 h1:ESSUROHIBHg7USnszlcdmjBEwdMj9VUvU+OPk4yl2mc=
golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be h1:LG9vZxsWGOmUKieR8wPAUR3u3MpnYFQZROPIMaXh7/A=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY=
google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg=
google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gorm.io/driver/mysql v1.5.6 h1:Ld4mkIickM+EliaQZQx3uOJDJHtrd70MxAUqWqlx3Y8=
gorm.io/driver/mysql v1.5.6/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
gorm.io/gorm v1.25.9 h1:wct0gxZIELDk8+ZqF/MVnHLkA1rvYlBWUMv2EdsK1g8=
gorm.io/gorm v1.25.9/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
ruleModelEngine.iml
New file
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
  <component name="NewModuleRootManager" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$" />
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
  </component>
</module>