package rule
|
|
import (
|
"basic.com/valib/logger.git"
|
"fmt"
|
"ruleModelEngine/cache"
|
"ruleModelEngine/config"
|
"ruleModelEngine/data"
|
"ruleModelEngine/db"
|
"ruleModelEngine/task"
|
"strconv"
|
"time"
|
)
|
|
//
|
//// 检查规则表书否存在异常
|
//func checkRuleValidity(rules []db.PersonnelStatusRule) bool {
|
// for i := 0; i < len(rules); i++ {
|
// for j := i + 1; j < len(rules); j++ {
|
// ruleI := rules[i]
|
// ruleJ := rules[j]
|
// //fmt.Println(ruleI.DetectionDaysStart,ruleI.DetectionDaysEnd)
|
// //fmt.Println(ruleJ.DetectionDaysStart,ruleJ.DetectionDaysEnd)
|
// if (ruleI.DetectionDaysStart <= ruleJ.DetectionDaysEnd && ruleI.DetectionDaysStart >= ruleJ.DetectionDaysStart) ||
|
// (ruleI.DetectionDaysEnd <= ruleJ.DetectionDaysEnd && ruleI.DetectionDaysEnd >= ruleJ.DetectionDaysStart) ||
|
// (ruleI.DetectionDaysStart <= ruleJ.DetectionDaysStart && ruleI.DetectionDaysEnd >= ruleJ.DetectionDaysEnd) {
|
// return false
|
// }
|
// }
|
// }
|
// return true
|
//}
|
|
func executeEnteringButNotLeaving(communityId string) {
|
//进出异常布控任务,暂时归类到标签计算部分
|
//fmt.Println("进出异常开始入口!!!!!!")
|
tasks, err := db.GetAllTaskData()
|
if err != nil {
|
logger.Error("GetAllTaskData Error", err)
|
}
|
var tkInfo db.Task
|
for _, taskInfo := range tasks {
|
if taskInfo.Name == "进出异常" {
|
tkInfo.Id = taskInfo.Id
|
tkInfo.Name = taskInfo.Name
|
}
|
}
|
|
//fmt.Println("tkInfo: ", tkInfo)
|
//fmt.Println("docNumIdMap: ", len(docNumIdMap))
|
//获取商住楼cameraid
|
|
cameraIds := make([]string, 0)
|
for _, deviceInfo := range cache.Device {
|
if deviceInfo.AreaID == communityId && deviceInfo.BuildingType == db.BuildingTypeMixedUse {
|
cameraIds = append(cameraIds, deviceInfo.DeviceCode)
|
}
|
}
|
|
if len(cameraIds) == 0 {
|
logger.Info("不存在商住楼设备:", cameraIds)
|
return
|
}
|
//查询待判断进出异常预警档案
|
days := config.Api.AInterval
|
docNumIdMap, err := db.QueryLastIdByDayRange(communityId, cameraIds, days, days-1)
|
if err != nil {
|
logger.Error("QueryByDayRange err: ", err)
|
}
|
for docNumber, id := range docNumIdMap {
|
//fmt.Println(docNumber, id)
|
alarmRules := make([]db.AlarmRule, 0)
|
flag := task.EnteringButNotLeaving(docNumber, communityId, cameraIds, days)
|
if flag == true {
|
alarmRules = append(alarmRules, db.AlarmRule{RuleId: strconv.Itoa(tkInfo.Id), RuleText: tkInfo.Name, AlarmLevel: "0"})
|
}
|
//fmt.Println("alarmRules: ", id, alarmRules)
|
addFlag, err := db.AddAlarmRules(alarmRules, id)
|
if err != nil {
|
logger.Error("AddAlarmRules err: ", err)
|
}
|
if addFlag == true {
|
logger.Info("AddAlarmRules success: ", id)
|
}
|
}
|
}
|
|
// 执行程序入口
|
func ExecuteTask() {
|
//return
|
ruleInfo, err := db.GetAllData()
|
if err != nil {
|
logger.Error("GetAllData Error", err)
|
}
|
fmt.Println("ruleInfo: ", ruleInfo)
|
communityIDs, err := db.GetCommunityIDs()
|
fmt.Println("communityIDs:", communityIDs)
|
if err != nil {
|
logger.Error("GetCommunityIDs Error", err)
|
}
|
labeManage, err := db.GetLabelManageIdentity(2)
|
if err != nil {
|
logger.Error("GetDBPersonStatusData Error", err)
|
}
|
//fmt.Println(labeManage)
|
for _, communityID := range communityIDs {
|
executeEnteringButNotLeaving(communityID)
|
|
//万全社区
|
//if communityID != "50010101010000001001" {
|
// continue
|
//}
|
fmt.Println("communityID: ", communityID)
|
//continue
|
now := time.Now()
|
timeThresholdDay := now.AddDate(0, 0, -config.Api.TimeThreshold)
|
timeThresholdDayZeroTime := time.Date(timeThresholdDay.Year(), timeThresholdDay.Month(), timeThresholdDay.Day(), 0, 0, 0, 0, timeThresholdDay.Location()).Unix()
|
fmt.Println("比对时间戳:", timeThresholdDayZeroTime)
|
//查询社区内人员档案,方便数据更新
|
personStatusList, err := db.QueryPersonStatusWithPagination(communityID, timeThresholdDayZeroTime)
|
if err != nil {
|
logger.Error("QueryPersonStatusWithPagination err: ", err)
|
}
|
|
documentNumberIDS := make([]string, 0)
|
for _, personStatus := range personStatusList {
|
//fmt.Println("personStatus.LastAppearanceTime: ", personStatus.LastAppearanceTime)
|
documentNumberIDS = append(documentNumberIDS, personStatus.DocumentNumber)
|
//业务逻辑
|
}
|
fmt.Println("社区档案总条数:", len(documentNumberIDS))
|
captureInfos := make([]db.CaptureInfo, 0)
|
batchSize := config.Elastic.BatchSize
|
//fmt.Println(batchSize)
|
for i := 0; i < len(documentNumberIDS); i += batchSize {
|
end := i + batchSize
|
if end > len(documentNumberIDS) {
|
end = len(documentNumberIDS)
|
}
|
batch := documentNumberIDS[i:end]
|
//fmt.Println("batch: ", batch)
|
batchCaptureInfos, err := db.QueryByTimeThresholdDataByCommunityId(communityID, batch, config.Api.TimeThreshold)
|
if err != nil {
|
logger.Error("Query1MDataByCommunityId Error", err)
|
}
|
if len(batchCaptureInfos) == 0 {
|
continue
|
}
|
//fmt.Println("batchCaptureInfos: ", batchCaptureInfos)
|
captureInfos = append(captureInfos, batchCaptureInfos...)
|
}
|
if len(captureInfos) == 0 {
|
continue
|
}
|
fmt.Println("共计有档案数据条数为:", len(captureInfos))
|
//补全分析所需数据
|
for i := range captureInfos {
|
captureDays, overnightCount := data.CalculateCaptureDays(captureInfos[i].CaptureDetail)
|
captureInfos[i].CaptureDays = captureDays
|
captureInfos[i].OvernightStays = overnightCount
|
|
captureInfos[i].Status = data.SetStatus(captureDays, ruleInfo)
|
if captureInfos[i].OvernightStays >= 5 && (captureInfos[i].CaptureDays <= 14 && captureInfos[i].CaptureDays >= 5) {
|
captureInfos[i].Status = "resident"
|
}
|
//fmt.Println("SetStatus: ", captureInfos[i].Status)
|
age, err := db.QueryAgeById(captureInfos[i].DocumentNumber)
|
if err != nil {
|
logger.Error("QueryAgeById ERROR", err)
|
}
|
captureInfos[i].Age = age
|
captureInfos[i].FrequentAddress = data.GetFrequentAddress(captureInfos[i].CaptureDetail)
|
//fmt.Println("CaptureDetail: ", captureInfos[i].DocumentNumber, captureInfos[i].CaptureDays, captureInfos[i].CaptureDetail)
|
}
|
//continue
|
//fmt.Println("residentCount: ", residentCount)
|
//fmt.Println("captureInfosQ: ", captureInfos)
|
for _, identity := range labeManage {
|
switch identity.Name {
|
case "服务人员":
|
identity, attribute := CreateLinearModel(captureInfos, communityID, 2.68, identity.ValidDays, identity.Id)
|
|
errIdentity := db.UpdateDBPersonLabel(identity)
|
if errIdentity != nil {
|
logger.Error("UpdateDBPersonLabel Error", errIdentity)
|
}
|
|
captureInfos = attribute
|
|
}
|
}
|
|
identity := CreateProcessModel(captureInfos, 30, communityID, labeManage)
|
errIdentity := db.UpdateDBPersonLabel(identity)
|
if errIdentity != nil {
|
logger.Error("UpdateDBPersonLabel Error", errIdentity)
|
}
|
|
//continue
|
|
postCaptureInfos := data.ProcessData(captureInfos, personStatusList, ruleInfo, communityID)
|
for _, inf := range postCaptureInfos {
|
fmt.Println("---->pause prepare: capture ", inf.DocumentNumber, inf.Status, inf.FrequentAddress)
|
//return
|
//time.Sleep(time.Second * 10)
|
|
//fmt.Println("inf: ", inf.DocumentNumber, inf.Status, inf.FrequentAddress, inf.LastAppearanceStatusTime)
|
}
|
fmt.Println("共更新档案数:", len(postCaptureInfos))
|
//fmt.Println("----->captureInfos: ", len(captureInfos))
|
//continue
|
UpdatePersonInfoErr := db.UpdatePersonInfo(postCaptureInfos, communityID)
|
if UpdatePersonInfoErr != nil {
|
logger.Error("MatchPermanentResidentTargets Error: ", UpdatePersonInfoErr)
|
}
|
|
resident, DocNumberErr := db.GetResidentData("resident", communityID)
|
//fmt.Println(resident)
|
//return
|
if DocNumberErr != nil {
|
logger.Error("GetDocNumberFromPersonStatus Error: ", DocNumberErr)
|
}
|
|
//fmt.Println(resident)
|
//fmt.Println("resident: ", resident)
|
mio := processResidentStatus(resident)
|
//fmt.Println("mip: ", mio)
|
UpdateMoveInoutErr := db.UpdateMoveInout(mio)
|
if UpdateMoveInoutErr != nil {
|
logger.Error("UpdateMoveInoutErr Error: ", UpdateMoveInoutErr)
|
}
|
}
|
}
|