zhangzengfei
2024-09-29 3737ab3dd0cc753be986638316c96cb3114601e4
data/prepare.go
@@ -3,6 +3,7 @@
import (
   "fmt"
   "regexp"
   "ruleModelEngine/config"
   "ruleModelEngine/db"
   "strings"
   "time"
@@ -120,10 +121,11 @@
         //如果是, 提前设置好备用地址 floor1Address = detail.CaptureAddress
         floor1Address = detail.CaptureAddress
      }
      if matchFlagNoF && floor1Address != "" {
      if matchFlagNoF && floor1Address == "" {
         //如果是, 提前设置好备用地址 floor1Address = detail.CaptureAddress
         floor1Address = detail.CaptureAddress
      }
      //fmt.Println("now floor1Address:", floor1Address,"\tnow detail CaptureAddress",detail.CaptureAddress)
      //判断日期标是否满足条件 判断日期标是否为空,若为空表示是第一个元素,初始化日期靶标
      if pointDate == "" {
         //初始化日期靶标为当前日期
@@ -132,7 +134,7 @@
         pointAddress[detail.CaptureAddress]++
         //若为最后一条则计算单日常用地址
         if index == len(captureDetail)-1 {
            fmt.Println("处理前pointAddress表:", pointAddress)
            //fmt.Println("处理前pointAddress表:", pointAddress)
            //这代表仅有一条数据,将会直接把当前地址加入dateAddress 日期汇总单日常用地址表内 下方continue会直接结束循环
            //否则会初始化pointDate和pointAddress
            dateAddress[pointDate] = detail.CaptureAddress
@@ -145,7 +147,7 @@
         pointAddress[detail.CaptureAddress]++
         //若为最后一条则计算单日常用地址
         if index == len(captureDetail)-1 {
            fmt.Println("处理前pointAddress表:", pointAddress)
            //fmt.Println("处理前pointAddress表:", pointAddress)
            //计算单日常用地址 若地址内都为1F或者空地址,会返回空地址
            dateAddress[pointDate] = getfrAddress(pointAddress)
            continue
@@ -157,7 +159,7 @@
            //把当前最后一条加入   pointAddress靶标地址
            pointAddress[detail.CaptureAddress]++
            //
            fmt.Println("处理前pointAddress表:", pointAddress)
            //fmt.Println("处理前pointAddress表:", pointAddress)
            //计算单日常用地址 若地址内都为1F或者空地址,会返回空地址
            dateAddress[pointDate] = getfrAddress(pointAddress)
            continue
@@ -169,11 +171,11 @@
         pointAddress = make(map[string]int, 0)
      }
   }
   fmt.Println("抓拍地址待处理结构表:", dateAddress)
   fmt.Println("dareAddress len: ", len(dateAddress))
   //判断抓拍的非1楼非空的天数占比总天数
   if float64(len(dateAddress))/float64(len(captureDays))*100 >= 50 {
      fmt.Println("非1楼非空抓拍占比: ", float64(len(dateAddress))/float64(len(captureDays))*100)
   //fmt.Println("抓拍地址待处理结构表:", dateAddress)
   //fmt.Println("dareAddress len: ", len(dateAddress))
   //判断抓拍的非1楼非空非地下的天数占比总天数
   if float64(len(dateAddress))/float64(len(captureDays))*100 >= float64(config.Api.CapAddrDaysThreshold) {
      //fmt.Println("非1楼非空抓拍占比: ", float64(len(dateAddress))/float64(len(captureDays))*100)
      //初始化地址列表,按地址计数
      addressCount := make(map[string]int)
      //遍历之前汇总的单日常用地址列表
@@ -193,12 +195,12 @@
   }
   //fmt.Println("in address: ", inAddressCounts)
   //fmt.Println("out address: ", outAddressCounts)
   fmt.Println("final address: ", frequentAddress)
   //fmt.Println("final address: ", frequentAddress)
   return frequentAddress
}
// processData 函数处理数据,根据要求过滤掉数据并根据规则更新状态
func ProcessData(captureInfos []db.CaptureInfo, personStatus []*db.PersonStatus, ruleInfos []db.PersonnelStatusRule, communityID string) []db.PersonStatus {
func ProcessData(captureInfos []db.CaptureInfo, personStatus []*db.PersonStatus, ruleInfos []db.PersonnelStatusRule, statusNo map[string]int, communityID string) []db.PersonStatus {
   filteredInfos := make([]db.PersonStatus, 0)
   // 构建快速查找索引,方便查找对应的人员状态和规则
@@ -228,6 +230,9 @@
      //}
      // 更新过滤后的信息列表
      //fmt.Println("LastAppearanceTime: ", person.LastAppearanceTime)
      if statusNo[person.Status] > statusNo[info.Status] {
         continue
      }
      filteredInfos = append(filteredInfos, db.PersonStatus{CommunityID: communityID, DocumentNumber: info.DocumentNumber, Status: info.Status, FrequentAddress: info.FrequentAddress, LastAppearanceStatusTime: person.LastAppearanceTime})
   }