sunty
2024-05-29 16b34c939d6790fe6ebe61f8f0e85fe80ee52224
data/prepare.go
@@ -65,11 +65,11 @@
}
// SetFrequentAddress 方法计算出现最频繁的出行地址并设置为常用地址
func SetFrequentAddress(c *db.CaptureInfo) {
func GetFrequentAddress(captureDetail []db.CaptureDetail) string {
   outAddressCounts := make(map[string]int)
   inAddressCounts := make(map[string]int)
   // 统计每个出行地址的出现次数
   for _, detail := range c.CaptureDetail {
   for _, detail := range captureDetail {
      if detail.Direction == "out" {
         outAddressCounts[detail.CaptureAddress]++
      }
@@ -96,12 +96,11 @@
         }
      }
   }
   // 将出现次数最多的出行地址设置为常用地址
   c.FrequentAddress = 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, communityID string) []db.PersonStatus {
   filteredInfos := make([]db.PersonStatus, 0)
   // 构建快速查找索引,方便查找对应的人员状态和规则
@@ -109,35 +108,31 @@
   ruleIndex := make(map[string]db.PersonnelStatusRule)
   for _, person := range personStatus {
      statusIndex[person.DocumentNumber] = person
      statusIndex[person.DocumentNumber] = *person
   }
   for _, rule := range ruleInfos {
      ruleIndex[rule.Name] = rule
   }
   //fmt.Println("statusIndex: ", statusIndex)
   //fmt.Println("ruleIndex: ", ruleIndex)
   // 处理每个抓拍信息
   for _, info := range captureInfos {
      //fmt.Println("info", info.DocumentNumber, info.Status, info.FrequentAddress)
      //fmt.Println("person", statusIndex[info.DocumentNumber].DocumentNumber, statusIndex[info.DocumentNumber].Status, statusIndex[info.DocumentNumber].FrequentAddress)
      // 检查是否存在对应的人员状态
      person, ok := statusIndex[info.DocumentNumber]
      if !ok {
         // 不存在对应的人员状态为新数据
         filteredInfos = append(filteredInfos, db.PersonStatus{OrgId: info.OrgId, CommunityID: communityID, DocumentNumber: info.DocumentNumber, Status: info.Status, FrequentAddress: info.FrequentAddress})
         continue
      }
      person := statusIndex[info.DocumentNumber]
      //fmt.Println("person: ", person.DocumentNumber, person.Status, person.FrequentAddress, person.LastAppearanceTime, person.LastAppearanceStatusTime)
      // 判断状态和常用地址是否相等,如果相等则忽略
      if (info.Status == person.Status || info.CaptureDays <= ruleIndex[person.DocumentNumber].DetectionDaysEnd) &&
         info.FrequentAddress == person.FrequentAddress {
         continue
      }
      //if (info.Status == person.Status || info.CaptureDays <= ruleIndex[person.DocumentNumber].DetectionDaysEnd) &&
      //   info.FrequentAddress == person.FrequentAddress {
      //   continue
      //}
      // 更新过滤后的信息列表
      filteredInfos = append(filteredInfos, db.PersonStatus{OrgId: info.OrgId, CommunityID: communityID, DocumentNumber: info.DocumentNumber, Status: info.Status, FrequentAddress: info.FrequentAddress})
      //fmt.Println("LastAppearanceTime: ", person.LastAppearanceTime)
      filteredInfos = append(filteredInfos, db.PersonStatus{CommunityID: communityID, DocumentNumber: info.DocumentNumber, Status: info.Status, FrequentAddress: info.FrequentAddress, LastAppearanceStatusTime: person.LastAppearanceTime})
   }
   //fmt.Println("filteredInfos: ", filteredInfos)
   return filteredInfos
}