package db import ( "basic.com/valib/logger.git" "errors" "gorm.io/gorm" "time" ) type MoveInout struct { ID string `gorm:"column:id;type:varchar(255);" json:"id"` OrgId string `gorm:"column:org_id;type:varchar(299);not null;default:''"` // 派出所id CommunityID string `gorm:"uniqueIndex:idx_document_number_community_id;index:community_id_last_appearance_time;column:community_id;type:varchar(299);not null;default:''"` // 小区id DocumentNumber string `gorm:"uniqueIndex:idx_document_number_community_id;column:document_number;type:varchar(299);not null;default:''"` //最后出现地点 MoveInDate string `gorm:"column:move_in_date;type:date;" json:"moveInDate"` //搬入日期 MoveOutDate string `gorm:"column:move_out_date;type:date;" json:"moveOutDate"` //搬出日期 Status string `gorm:"column:status;"` MoveType string `gorm:"column:move_type;"` DaysAppeared int `gorm:"column:days_appeared;type:int(11);not null;default:0" json:"daysAppeared"` // 出现天数 LastAppearanceTime int64 `gorm:"index:community_id_last_appearance_time;column:last_appearance_time;type:int;not null;default:0" json:"lastAppearanceTime"` //最后出现时间 LastLocation string `gorm:"column:last_location;type:varchar(255);not null;default:''" json:"lastLocation"` //最后出现地点 CreatedAt time.Time UpdatedAt time.Time DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` } // UpdatePersonInfo 更新或插入多个人员信息 func UpdateMoveInout(personsMoveInout []MoveInout) error { var db = DB // 遍历人员信息 for _, personMoveInout := range personsMoveInout { // 检查记录是否存在 var existingPerson MoveInout err := db.Where("document_number = ? AND community_id = ?", personMoveInout.DocumentNumber, personMoveInout.CommunityID).First(&existingPerson).Error if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { logger.Error("Query person error:", err, personMoveInout.DocumentNumber, personMoveInout.CommunityID) continue } // 如果记录存在,则更新 if existingPerson.DocumentNumber != "" { //fmt.Println("existingPerson.DocumentNumber: ", existingPerson.DocumentNumber) if existingPerson.Status != "Verified" { err := db.Model(&MoveInout{}). Where("document_number = ? AND community_id = ?", personMoveInout.DocumentNumber, personMoveInout.CommunityID). Updates(map[string]interface{}{ "status": personMoveInout.Status, "move_out_date": personMoveInout.MoveOutDate, }).Error if err != nil { return err } } else { err := db.Model(&MoveInout{}). Where("document_number = ? AND community_id = ?", personMoveInout.DocumentNumber, personMoveInout.CommunityID). Updates(map[string]interface{}{ "move_out_date": personMoveInout.MoveOutDate, }).Error if err != nil { return err } } } else { // 如果记录不存在,则插入新记录 //fmt.Println("插入记录失败") //fmt.Println("data", &personMoveInout) err := db.Create(&personMoveInout).Error if err != nil { return err } } } return nil }