From ddf0dc9d26e4e046431e9bdb1ce8b346270d3156 Mon Sep 17 00:00:00 2001
From: sunty <1172534965@qq.com>
Date: 星期日, 26 五月 2024 18:58:30 +0800
Subject: [PATCH] 完成布控模块

---
 .idea/vcs.xml       |    6 
 .idea/modules.xml   |    8 
 go.sum              |  126 +++++
 .idea/workspace.xml |  696 +++++++++++++++++++++++++++++
 .idea/encodings.xml |    4 
 db/database.go      |   39 +
 ruleModelEngine.iml |    9 
 db/elastic.go       |  381 +++++++++++++++
 db/models.go        |  156 ++++++
 .idea/misc.xml      |    6 
 10 files changed, 1,431 insertions(+), 0 deletions(-)

diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..15a15b2
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" addBOMForNewFiles="with NO BOM" />
+</project>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..639900d
--- /dev/null
+++ b/.idea/misc.xml
@@ -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>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..e4a1151
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/ruleModelEngine.iml" filepath="$PROJECT_DIR$/ruleModelEngine.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..5437d44
--- /dev/null
+++ b/.idea/workspace.xml
@@ -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="娣诲姞甯冩帶妯″潡锛屽悎骞秔erson_status鍜宻napshot_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="娣诲姞甯冩帶妯″潡锛屽悎骞秔erson_status鍜宻napshot_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="娣诲姞甯冩帶妯″潡锛屽悎骞秔erson_status鍜宻napshot_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>
\ No newline at end of file
diff --git a/db/database.go b/db/database.go
new file mode 100644
index 0000000..f4afe69
--- /dev/null
+++ b/db/database.go
@@ -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
+}
diff --git a/db/elastic.go b/db/elastic.go
new file mode 100644
index 0000000..eeb7253
--- /dev/null
+++ b/db/elastic.go
@@ -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
+}
diff --git a/db/models.go b/db/models.go
new file mode 100644
index 0000000..6420353
--- /dev/null
+++ b/db/models.go
@@ -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:''"`                                      // 妗f缂栧彿
+	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"`
+}
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..d5b098a
--- /dev/null
+++ b/go.sum
@@ -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=
diff --git a/ruleModelEngine.iml b/ruleModelEngine.iml
new file mode 100644
index 0000000..8021953
--- /dev/null
+++ b/ruleModelEngine.iml
@@ -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>
\ No newline at end of file

--
Gitblit v1.8.0