From 28c5cf41c5064579dd62f79fd40dc5990e9565b2 Mon Sep 17 00:00:00 2001 From: sunty <1172534965@qq.com> Date: 星期一, 09 九月 2024 20:52:54 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- db/repository.go | 53 +++++++-- cache/device.go | 20 ++++ .idea/workspace.xml | 144 +++------------------------- db/database.go | 3 db/models.go | 15 +++ main.go | 7 + task/engine.go | 24 ++++ 7 files changed, 124 insertions(+), 142 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 5974bc7..d901054 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,17 +1,9 @@ <?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="1銆佷慨鏀规煡璇㈢瓥鐣� 2銆佷慨鏀瑰湴鍧�缁熻绛栫暐"> - <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/config/config.go" beforeDir="false" afterPath="$PROJECT_DIR$/config/config.go" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/config/rulemodelengine.yaml" beforeDir="false" afterPath="$PROJECT_DIR$/config/rulemodelengine.yaml" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/data/prepare.go" beforeDir="false" afterPath="$PROJECT_DIR$/data/prepare.go" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/db/elastic.go" beforeDir="false" afterPath="$PROJECT_DIR$/db/elastic.go" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/rule/engine.go" beforeDir="false" afterPath="$PROJECT_DIR$/rule/engine.go" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/rule/service.go" beforeDir="false" afterPath="$PROJECT_DIR$/rule/service.go" afterDir="false" /> + <list default="true" id="919111b8-f2aa-4154-8db0-88e76c9af55d" name="Default Changelist" comment=""> + <change beforePath="$PROJECT_DIR$/cache/device.go" beforeDir="false" afterPath="$PROJECT_DIR$/cache/device.go" afterDir="false" /> </list> - <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" /> @@ -19,109 +11,6 @@ </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$/rule/service.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="179"> - <caret line="11" column="4" selection-start-line="11" selection-start-column="4" selection-end-line="11" selection-end-column="4" /> - </state> - </provider> - </entry> - </file> - <file pinned="false" current-in-tab="true"> - <entry file="file://$PROJECT_DIR$/data/prepare.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="71"> - <caret line="17" column="36" lean-forward="true" selection-start-line="17" selection-start-column="36" selection-end-line="17" selection-end-column="36" /> - <folding> - <element signature="e#14#61#0" expanded="true" /> - </folding> - </state> - </provider> - </entry> - </file> - <file pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/rule/identityEngine.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="48"> - <caret line="5" column="1" lean-forward="true" selection-start-line="5" selection-start-column="1" selection-end-line="5" selection-end-column="1" /> - </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="737"> - <caret line="46" column="48" lean-forward="true" selection-start-line="46" selection-start-column="48" selection-end-line="46" selection-end-column="48" /> - <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$/config/rulemodelengine.yaml"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="337"> - <caret line="30" column="19" selection-start-line="30" selection-start-column="17" selection-end-line="30" selection-end-column="19" /> - </state> - </provider> - </entry> - </file> - <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="192"> - <caret line="29" column="70" selection-start-line="29" selection-start-column="70" selection-end-line="29" selection-end-column="70" /> - </state> - </provider> - </entry> - </file> - <file pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/db/elasticScriptToId.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="840"> - <caret line="39" column="46" lean-forward="true" selection-start-line="39" selection-start-column="46" selection-end-line="39" selection-end-column="46" /> - </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="189"> - <caret line="8" column="4" selection-start-line="8" selection-start-column="4" selection-end-line="8" selection-end-column="4" /> - </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="193"> - <caret line="152" column="11" selection-start-line="152" selection-start-column="11" selection-end-line="152" selection-end-column="11" /> - </state> - </provider> - </entry> - </file> - <file pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/db/repository.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="162"> - <caret line="105" column="5" selection-start-line="105" selection-start-column="5" selection-end-line="105" selection-end-column="5" /> - <folding> - <element signature="e#12#78#0" expanded="true" /> - </folding> - </state> - </provider> - </entry> - </file> - </leaf> </component> <component name="FileTemplateManagerImpl"> <option name="RECENT_TEMPLATES"> @@ -164,9 +53,17 @@ <find>time</find> </findStrings> </component> - <component name="GOROOT" path="C:/Program Files/Go" /> + <component name="GOROOT" url="file://D:/Go" /> <component name="Git.Settings"> <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> + </component> + <component name="GitSEFilterConfiguration"> + <file-type-list> + <filtered-out-file-type name="LOCAL_BRANCH" /> + <filtered-out-file-type name="REMOTE_BRANCH" /> + <filtered-out-file-type name="TAG" /> + <filtered-out-file-type name="COMMIT_BY_MESSAGE" /> + </file-type-list> </component> <component name="IdeDocumentHistory"> <option name="CHANGED_PATHS"> @@ -292,7 +189,7 @@ <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.sdk" /> + <property name="settings.editor.selected.configurable" value="watcher.settings" /> </component> <component name="RecentsManager"> <key name="MoveFile.RECENT_KEYS"> @@ -301,18 +198,6 @@ <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"> @@ -550,6 +435,11 @@ </component> <component name="VgoProject"> <integration-enabled>true</integration-enabled> + <environment> + <map> + <entry key="GOPROXY" value="https://goproxy.cn,direct" /> + </map> + </environment> <proxy>https://goproxy.cn,direct</proxy> </component> <component name="XDebuggerManager"> diff --git a/cache/device.go b/cache/device.go index 9140696..cd00d50 100644 --- a/cache/device.go +++ b/cache/device.go @@ -6,6 +6,8 @@ ) var Device = make(map[string]db.Device) +var PublicHouse = make(map[string]map[string]string, 0) // 鍏鎴挎暟鎹� 韬唤璇佸彿:灏忓尯 +var PublicHouseAlarmCache = make(map[string]struct{}, 0) // 淇濆瓨鐢充綇涓嶄竴鐨勬暟鎹�, 鍚屼竴涓韩浠借瘉鍙锋殏鏃舵姤璀︿竴娆� func DeviceCacheInit() error { var err error @@ -20,3 +22,21 @@ } return nil } + +func PublicHouseCacheInit() error { + ph, err := db.GetPublicHouseData() + if err != nil { + logger.Error("GetDeviceData", err) + return err + } + + for _, v := range ph { + if _, ok := PublicHouse[v.CommunityID]; !ok { + PublicHouse[v.CommunityID] = make(map[string]string, 0) + } + + PublicHouse[v.CommunityID][v.IdCard] = v.EndTime + } + + return nil +} diff --git a/db/database.go b/db/database.go index 01e3bd7..43ef00e 100644 --- a/db/database.go +++ b/db/database.go @@ -34,6 +34,9 @@ sqlDb.SetMaxOpenConns(1) sqlDb.SetConnMaxLifetime(time.Duration(120) * time.Second) sqlDb.SetConnMaxIdleTime(time.Duration(1800) * time.Second) + + db.AutoMigrate(&PublicHouse{}) + DB = db return nil } diff --git a/db/models.go b/db/models.go index c48417b..67af5ca 100644 --- a/db/models.go +++ b/db/models.go @@ -164,3 +164,18 @@ CaptureAddress string `json:"captureAddress"` Direction string `json:"direction"` } + +type PublicHouse struct { + ID int `gorm:"primaryKey;autoIncrement" json:"id"` // 涓婚敭ID + CommunityID string `gorm:"column:community_id;type:varchar(255)" json:"community_id"` // 灏忓尯ID + Applicant string `gorm:"column:applicant;type:varchar(255)" json:"applicant"` // 鐢宠浜� + IdCard string `gorm:"column:id_card;type:varchar(50)" json:"id_card"` // 璇佷欢缂栧彿 + PhoneNumber string `gorm:"column:phone_number;type:varchar(20)" json:"phone_number"` // 鑱旂郴鐢佃瘽 + Address string `gorm:"column:address;type:varchar(255)" json:"address"` // 鎴垮眿鍦板潃 + ApplicationTime string `gorm:"column:application_time" json:"application_time"` // 鐢宠鏃堕棿 + EndTime string `gorm:"column:end_time" json:"end_time"` // 缁撴潫鏃堕棿 +} + +func (PublicHouse) TableName() string { + return "public_house" +} diff --git a/db/repository.go b/db/repository.go index 48b4757..ca159f7 100644 --- a/db/repository.go +++ b/db/repository.go @@ -4,6 +4,7 @@ "basic.com/valib/logger.git" "errors" "gorm.io/gorm" + "strconv" ) // 鏌ヨ灏忓尯琛� @@ -29,6 +30,17 @@ return nil, result.Error } return device, nil +} + +func GetPublicHouseData() ([]PublicHouse, error) { + // 鏌ヨ鏁版嵁 + var db = DB + var ph []PublicHouse + result := db.Table("public_house").Where("1 = 1").Find(&ph) + if result.Error != nil { + return nil, result.Error + } + return ph, nil } // 鏌ヨ鍏ㄩ儴鏁版嵁 @@ -88,18 +100,17 @@ } // 鏌ヨ浜虹墿灞炴�� -func GetDBPersonStatusData(id string) ([]PersonStatus, error) { +func GetDBPersonStatus(id, communityId string) string { var db = DB - // 鏌ヨ鏁版嵁 - var personStatusList []PersonStatus - if err := db.Table("person_status"). - Select("documentNumber, status, frequentAddress"). - Where("communityID = ?", id). - Find(&personStatusList).Error; err != nil { - return nil, err - } - return personStatusList, nil + // 鏌ヨ鏁版嵁 + var personStatus string + db.Table("snapshot_count_summary"). + Select("status"). + Where("community_id = ? and document_number = ?", communityId, id). + Find(&personStatus) + + return personStatus } // 鏌ヨ灏忓尯妗f琛� (鍘熸煡璇换鍔″睘鎬�) @@ -120,7 +131,7 @@ func GetAgeById(id string) (int, error) { var db = DB // 鏌ヨ鏁版嵁 - var age int + var age string if err := db.Table("dbtablepersons"). Select("age"). Where("id = ?", id). @@ -128,7 +139,20 @@ return 0, err } - return age, nil + return strconv.Atoi(age) +} + +// 鏌ヨ浜虹墿韬唤璇佸彿 +func GetIdCardById(id string) string { + var db = DB + // 鏌ヨ鏁版嵁 + var idCard string + db.Table("dbtablepersons"). + Select("idCard"). + Where("id = ?", id). + Find(&idCard) + + return idCard } //// 鏍规嵁绀惧尯id鍜屼綇鎴峰睘鎬ф煡璇綇鎴锋。妗堢紪鍙� @@ -169,7 +193,7 @@ // 鏍规嵁dbtablepersons琛╥d鏌ヨ鐩爣妗f骞撮緞 func QueryAgeById(id string) (int, error) { var db = DB - var age int + var age string err := db.Table("dbtablepersons"). Select("age"). Where("id = ?", id). @@ -177,7 +201,8 @@ if err != nil { return 0, err } - return age, nil + + return strconv.Atoi(age) } // UpdatePersonInfo 鏇存柊鎴栨彃鍏ュ涓汉鍛樹俊鎭� diff --git a/main.go b/main.go index 86e9d3a..e9c8019 100644 --- a/main.go +++ b/main.go @@ -36,7 +36,12 @@ logger.Error("璁惧琛ㄧ紦瀛樺け璐�", cacheErr) return } - logger.Info("cache device success !") + cacheErr = cache.PublicHouseCacheInit() + if cacheErr != nil { + logger.Error("鍏鎴挎暟鎹紦瀛樺け璐�", cacheErr) + return + } + logger.Info("cache init success !") } func initApiServer() { diff --git a/task/engine.go b/task/engine.go index c3b1452..0594e10 100644 --- a/task/engine.go +++ b/task/engine.go @@ -62,5 +62,29 @@ } func registeredAddressNotMatchActualResidence(taskPerson db.TaskPerson) bool { + idCard := db.GetIdCardById(taskPerson.DocumentNumber) + if idCard == "" { + return false + } + + if _, ok := cache.PublicHouse[taskPerson.CommunityId]; !ok { + return false + } + + // 鏈夎韩浠借瘉鍙�, 灏忓尯灞炰簬鍏鎴�, 鍏鎴跨櫥璁拌韩浠借瘉鍙锋病鏈夎鏉¤褰�, 杩斿洖true + personStatus := db.GetDBPersonStatus(taskPerson.DocumentNumber, taskPerson.CommunityId) + logger.Debugf("Actual residence get person id:%s status: %s", taskPerson.DocumentNumber, personStatus) + if personStatus == "resident" || personStatus == "permanent_resident" { + if _, ok := cache.PublicHouse[taskPerson.CommunityId][idCard]; !ok { + // 鎺у埗绋嬪簭杩愯鏈熼棿鍙緭鍑轰竴娆℃姤璀� + if _, ok := cache.PublicHouseAlarmCache[idCard]; ok { + return false + } else { + cache.PublicHouseAlarmCache[idCard] = struct{}{} + return true + } + } + } + return false } -- Gitblit v1.8.0