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