| | |
| | | |
| | | import ( |
| | | "basic.com/valib/logger.git" |
| | | "errors" |
| | | "fmt" |
| | | "math" |
| | | "ruleModelEngine/db" |
| | |
| | | } |
| | | } |
| | | |
| | | if status == "" { |
| | | continue |
| | | } |
| | | //fmt.Println("status: ", status) |
| | | moveInout = append(moveInout, db.MoveInout{ |
| | | DocumentNumber: resident.DocumentNumber, |
| | | CommunityID: resident.CommunityID, |
| | | CommunityID: resident.CommunityId, |
| | | MoveInDate: createdAt, // 存储年月日 |
| | | MoveOutDate: &lastAppearanceDate, // 存储年月日 |
| | | MoveType: moveType, |
| | |
| | | return moveInout |
| | | } |
| | | |
| | | func ProcessRuleEngine(personInfos []db.CaptureInfo, ruleInfo []db.PersonnelStatusRule, cmmunityID string) (bool, error) { |
| | | ruleInfoCheck := checkRuleValidity(ruleInfo) |
| | | if ruleInfoCheck == false { |
| | | logger.Error("规则库数据异常") |
| | | return false, errors.New("规则库数据异常") |
| | | } |
| | | fmt.Println("清洗前: ", len(personInfos)) |
| | | logger.Info("规则算法执行完毕!!!") |
| | | return true, nil |
| | | } |
| | | //func ProcessRuleEngine(personInfos []db.CaptureInfo, ruleInfo []db.PersonnelStatusRule, cmmunityID string) (bool, error) { |
| | | // ruleInfoCheck := checkRuleValidity(ruleInfo) |
| | | // if ruleInfoCheck == false { |
| | | // logger.Error("规则库数据异常") |
| | | // return false, errors.New("规则库数据异常") |
| | | // } |
| | | // fmt.Println("清洗前: ", len(personInfos)) |
| | | // logger.Info("规则算法执行完毕!!!") |
| | | // return true, nil |
| | | //} |
| | | |
| | | func CreateLinearModel(personInfos []db.CaptureInfo, communityID string, threshold float64, validDays int) ([]db.Identity, []db.CaptureInfo) { |
| | | func CreateLinearModel(personInfos []db.CaptureInfo, communityID string, threshold float64, validDays int, labelId int) ([]db.Identity, []db.CaptureInfo) { |
| | | identity := make([]db.Identity, 0) |
| | | captureInfo := make([]db.CaptureInfo, 0) |
| | | for _, info := range personInfos { |
| | |
| | | identity = append(identity, db.Identity{ |
| | | CommunityID: communityID, |
| | | DocumentNumber: info.DocumentNumber, |
| | | LabelId: 3, |
| | | LabelId: labelId, |
| | | ExpireTime: GetCurrentDateAddDaysTimestamp(validDays)}) |
| | | continue |
| | | } |
| | | captureInfo = append(captureInfo, info) |
| | | } else { |
| | | captureInfo = append(captureInfo, info) |
| | | } |
| | | |
| | |
| | | fmt.Println(addrData) |
| | | } |
| | | |
| | | func CreateProcessModel(personInfos []db.CaptureInfo, days int) { |
| | | timeTOIndex := getIndexForTime(24 * 60) |
| | | dateTOIndex := getIndexForDate(days) |
| | | //fmt.Println(dateTOIndex) |
| | | inModelMatrix := make([][]int, days) |
| | | for i := range inModelMatrix { |
| | | inModelMatrix[i] = make([]int, 24*60) |
| | | func CreateProcessModel(personInfos []db.CaptureInfo, days int, communityID string, labelManage []db.LabelManage) []db.Identity { |
| | | labelIndexMap := make(map[string]int) |
| | | for index, labelManageInfo := range labelManage { |
| | | labelIndexMap[labelManageInfo.Name] = index |
| | | } |
| | | outModelMatrix := make([][]int, days) |
| | | for i := range outModelMatrix { |
| | | outModelMatrix[i] = make([]int, 24*60) |
| | | } |
| | | identity := make([]db.Identity, 0) |
| | | for _, info := range personInfos { |
| | | timeTOIndex := getIndexForTime(24 * 60) |
| | | dateTOIndex := getIndexForDate(days) |
| | | //fmt.Println(dateTOIndex) |
| | | inModelMatrix := make([][]int, days) |
| | | for i := range inModelMatrix { |
| | | inModelMatrix[i] = make([]int, 24*60) |
| | | } |
| | | outModelMatrix := make([][]int, days) |
| | | for i := range outModelMatrix { |
| | | outModelMatrix[i] = make([]int, 24*60) |
| | | } |
| | | //fmt.Println("info: ", info) |
| | | for _, captureInfo := range info.CaptureDetail { |
| | | captrueDateTime := captureInfo.CaptureDate |
| | | dateTimeObj, err := time.Parse("2006-01-02 15:04:05", captrueDateTime) |
| | | if err != nil { |
| | | logger.Error("Parse time error", err) |
| | | return |
| | | continue |
| | | //return n/**/il, err |
| | | } |
| | | if isWeekend(dateTimeObj) { |
| | | continue |
| | |
| | | continue |
| | | } |
| | | } |
| | | countMaxRows, colS, colE := CountMaxRows(outModelMatrix, 30, 30) |
| | | logger.Info("规律出勤时间段:", colS, colE, "\t次数: ", countMaxRows) |
| | | if countMaxRows >= 10 { |
| | | if info.Age <= 22 && info.Age >= 7 { |
| | | lIndex := labelIndexMap["学生"] |
| | | identity = append(identity, db.Identity{ |
| | | CommunityID: communityID, |
| | | DocumentNumber: info.DocumentNumber, |
| | | LabelId: labelManage[lIndex].Id, |
| | | ExpireTime: GetCurrentDateAddDaysTimestamp(labelManage[lIndex].ValidDays)}) |
| | | } else if info.Age >= 23 && info.Age <= 60 { |
| | | lIndex := labelIndexMap["上班族"] |
| | | identity = append(identity, db.Identity{ |
| | | CommunityID: communityID, |
| | | DocumentNumber: info.DocumentNumber, |
| | | LabelId: labelManage[lIndex].Id, |
| | | ExpireTime: GetCurrentDateAddDaysTimestamp(labelManage[lIndex].ValidDays)}) |
| | | } else if info.Age > 60 { |
| | | lIndex := labelIndexMap["离退休人员"] |
| | | identity = append(identity, db.Identity{ |
| | | CommunityID: communityID, |
| | | DocumentNumber: info.DocumentNumber, |
| | | LabelId: labelManage[lIndex].Id, |
| | | ExpireTime: GetCurrentDateAddDaysTimestamp(labelManage[lIndex].ValidDays)}) |
| | | } |
| | | //fmt.Println("上班族", info.DocumentNumber, info.Age, countMaxRows, colS, colE) |
| | | } else { |
| | | countMaxRows, colS, colE := CountMaxRows(inModelMatrix, 30, 30) |
| | | logger.Info("规律出勤时间段:", colS, colE, "\t次数: ", countMaxRows) |
| | | if countMaxRows >= 10 { |
| | | if info.Age <= 22 && info.Age >= 7 { |
| | | lIndex := labelIndexMap["学生"] |
| | | identity = append(identity, db.Identity{ |
| | | CommunityID: communityID, |
| | | DocumentNumber: info.DocumentNumber, |
| | | LabelId: labelManage[lIndex].Id, |
| | | ExpireTime: GetCurrentDateAddDaysTimestamp(labelManage[lIndex].ValidDays)}) |
| | | } else if info.Age >= 23 && info.Age <= 60 { |
| | | lIndex := labelIndexMap["上班族"] |
| | | identity = append(identity, db.Identity{ |
| | | CommunityID: communityID, |
| | | DocumentNumber: info.DocumentNumber, |
| | | LabelId: labelManage[lIndex].Id, |
| | | ExpireTime: GetCurrentDateAddDaysTimestamp(labelManage[lIndex].ValidDays)}) |
| | | } else if info.Age > 60 { |
| | | lIndex := labelIndexMap["离退休人员"] |
| | | identity = append(identity, db.Identity{ |
| | | CommunityID: communityID, |
| | | DocumentNumber: info.DocumentNumber, |
| | | LabelId: labelManage[lIndex].Id, |
| | | ExpireTime: GetCurrentDateAddDaysTimestamp(labelManage[lIndex].ValidDays)}) |
| | | } |
| | | //fmt.Println("上班族", info.DocumentNumber, info.Age, countMaxRows, colS, colE) |
| | | } |
| | | } |
| | | |
| | | //fmt.Println("outModelMatrix: ", outModelMatrix) |
| | | //fmt.Println("inModelMatrix: ", inModelMatrix) |
| | | } |
| | | fmt.Println(outModelMatrix) |
| | | fmt.Println(inModelMatrix) |
| | | return identity |
| | | } |
| | | |
| | | // 计算一阶导数 |