| | |
| | | } |
| | | |
| | | // 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]++ |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | // 将出现次数最多的出行地址设置为常用地址 |
| | | 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) |
| | | |
| | | // 构建快速查找索引,方便查找对应的人员状态和规则 |
| | |
| | | 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 |
| | | } |