From 3737ab3dd0cc753be986638316c96cb3114601e4 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期日, 29 九月 2024 16:20:46 +0800 Subject: [PATCH] fix db column --- rule/engine.go | 136 +++++++++++++++++++++++++++++++++----------- 1 files changed, 101 insertions(+), 35 deletions(-) diff --git a/rule/engine.go b/rule/engine.go index 9409760..95fdafd 100644 --- a/rule/engine.go +++ b/rule/engine.go @@ -2,7 +2,6 @@ import ( "basic.com/valib/logger.git" - "errors" "fmt" "math" "ruleModelEngine/db" @@ -18,19 +17,17 @@ // 閬嶅巻Resident缁撴瀯浣撳垏鐗� for _, resident := range residents { - //fmt.Println("gogogogo!!!!!!!!!!!!!!!!!!!!!!!!!!!") // 灏嗗瓧绗︿覆绫诲瀷鐨勬椂闂磋浆鎹负time.Time绫诲瀷锛屽苟鍙繚鐣欏勾鏈堟棩 lastAppearanceTime := time.Unix(resident.LastAppearanceTime, 0) lastAppearanceDate := time.Date(lastAppearanceTime.Year(), lastAppearanceTime.Month(), lastAppearanceTime.Day(), 0, 0, 0, 0, lastAppearanceTime.Location()) - //lastAppearanceTime, err := time.Parse("2006-01-02", resident.LastAppearanceTime) - datePart := strings.Split(resident.CreateAt, "T")[0] - createdAt, err := time.Parse("2006-01-02", datePart) + createdAt, err := time.Parse("2006-01-02", resident.CreateAt) if err != nil { fmt.Println(err) // 澶勭悊鏃堕棿瑙f瀽閿欒 // 鍙互閫夋嫨璺宠繃璇ユ潯鏁版嵁鎴栬�呰褰曟棩蹇� continue } + // 璁$畻LastAppearanceTime鍜孋reateAt璺濈褰撳墠鏃ユ湡鐨勫ぉ鏁� daysSinceLastAppearance := currentDate.Sub(lastAppearanceDate).Hours() / 24 daysSinceCreateAt := currentDate.Sub(createdAt).Hours() / 24 @@ -57,12 +54,15 @@ } } + if status == "" { + continue + } //fmt.Println("status: ", status) moveInout = append(moveInout, db.MoveInout{ DocumentNumber: resident.DocumentNumber, - CommunityID: resident.CommunityID, - MoveInDate: createdAt, // 瀛樺偍骞存湀鏃� - MoveOutDate: &lastAppearanceDate, // 瀛樺偍骞存湀鏃� + CommunityID: resident.CommunityId, + MoveInDate: createdAt.Format("2006-01-02"), // 瀛樺偍骞存湀鏃� + MoveOutDate: lastAppearanceDate.Format("2006-01-02"), // 瀛樺偍骞存湀鏃� MoveType: moveType, Status: status, }) @@ -71,18 +71,18 @@ 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 string) ([]db.Identity, []db.CaptureInfo) { identity := make([]db.Identity, 0) captureInfo := make([]db.CaptureInfo, 0) for _, info := range personInfos { @@ -111,15 +111,18 @@ //fmt.Println(addrDataArray) //fmt.Println("threshold: ", threshold) //fmt.Println("stdDev: ", stdDev) - info.Status = "fieldworker" + //info.Status = "fieldworker" + info.Status = "visitor" captureInfo = append(captureInfo, info) 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) } @@ -149,26 +152,32 @@ 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 @@ -184,9 +193,66 @@ 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 } // 璁$畻涓�闃跺鏁� -- Gitblit v1.8.0