zhangzengfei
2024-09-29 3737ab3dd0cc753be986638316c96cb3114601e4
db/repository.go
@@ -1,290 +1,14 @@
package db
import (
   "basic.com/valib/logger.git"
   "errors"
   "gorm.io/gorm"
)
// 查询小区表
func GetCommunityIDs() ([]string, error) {
   db, err := ConnectDB()
   if err != nil {
      return nil, err
   }
   // 查询数据
   var db = DB
   var communityIDs []string
   result := db.Table("domain_unit").Where("domainType = ?", 1).Pluck("id", &communityIDs)
   result := db.Table("domain_unit").Where("domain_type = ?", 1).Pluck("id", &communityIDs)
   if result.Error != nil {
      return nil, result.Error
   }
   return communityIDs, nil
}
// 查询全部数据
func GetAllData() ([]PersonnelStatusRule, error) {
   db, err := ConnectDB()
   if err != nil {
      return nil, err
   }
   var rules []PersonnelStatusRule
   if err := db.Find(&rules).Error; err != nil {
      return nil, err
   }
   return rules, nil
}
// 查询住户时间数据
func GetResidentData(status, communityID string) ([]Resident, error) {
   db, err := ConnectDB()
   if err != nil {
      return nil, err
   }
   var residents []Resident
   // 执行查询
   rows, err := db.Table("person_status").
      Select("person_status.documentNumber", "person_status.communityID", "snapshot_count_summary.last_appearance_time", "snapshot_count_summary.created_at").
      Joins("INNER JOIN snapshot_count_summary ON person_status.documentNumber = snapshot_count_summary.document_number AND person_status.communityID = snapshot_count_summary.community_id").
      Where("person_status.status = ? AND person_status.communityID = ?", status, communityID).
      Rows()
   if err != nil {
      return nil, err
   }
   defer rows.Close()
   // 遍历查询结果
   for rows.Next() {
      var resident Resident
      err := rows.Scan(&resident.DocumentNumber, &resident.CommunityID, &resident.LastAppearanceTime, &resident.CreateAt)
      if err != nil {
         return nil, err
      }
      residents = append(residents, resident)
   }
   if err := rows.Err(); err != nil {
      return nil, err
   }
   return residents, nil
}
// 查询人物属性
func GetDBPersonStatusData(id string) ([]PersonStatus, error) {
   db, err := ConnectDB()
   if err != nil {
      return nil, err
   }
   // 查询数据
   var personStatusList []PersonStatus
   if err := db.Table("person_status").
      Select("documentNumber, status, frequentAddress").
      Where("communityID = ?", id).
      Find(&personStatusList).Error; err != nil {
      return nil, err
   }
   return personStatusList, nil
}
// 根据社区id和住户属性查询住户档案编号
func GetDocNumberFromPersonStatus(id, status string) ([]string, error) {
   db, err := ConnectDB()
   if err != nil {
      return nil, err
   }
   // 查询数据
   var personStatusList []PersonStatus
   if err := db.Table("person_status").
      Select("documentNumber, status, frequentAddress").
      Where("communityID = ? AND status = ?", id, status).
      Find(&personStatusList).Error; err != nil {
      return nil, err
   }
   docNum := make([]string, 0)
   for _, ps := range personStatusList {
      docNum = append(docNum, ps.DocumentNumber)
   }
   return docNum, nil
}
// 查询人物身份属性表
func GetLabelManageIdentity(IdentityType int) ([]LabelManage, error) {
   db, err := ConnectDB()
   if err != nil {
      return nil, err
   }
   // 查询数据
   var labelManageIdentity []LabelManage
   if err := db.Table("label_manage").
      Select("id, name, valid_days").
      Where("type = ?", IdentityType).
      Find(&labelManageIdentity).Error; err != nil {
      return nil, err
   }
   return labelManageIdentity, nil
}
// UpdatePersonInfo 更新或插入多个人员信息
func UpdateMoveInout(personsMoveInout []MoveInout) error {
   // 数据库连接信息
   db, err := ConnectDB()
   if err != nil {
      return err
   }
   // 遍历人员信息
   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)
         //fmt.Println("asdasfasfasf")
         continue
         //return err
      }
      // 如果记录存在,则更新
      if 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 {
         // 如果记录不存在,则插入新记录
         err := db.Create(&personsMoveInout).Error
         if err != nil {
            return err
         }
      }
   }
   return nil
}
// UpdatePersonInfo 更新或插入多个人员身份信息
func UpdateDBPersonLabel(personsIdentity []Identity) error {
   // 数据库连接信息
   db, err := ConnectDB()
   if err != nil {
      return err
   }
   // 遍历人员信息
   for _, personIdentity := range personsIdentity {
      // 检查记录是否存在
      var existingPerson Identity
      err := db.Where("dbtablepersons_id = ? AND community_id = ? AND label_id = ?",
         personIdentity.DocumentNumber,
         personIdentity.CommunityID,
         personIdentity.LabelId,
      ).First(&existingPerson).Error
      if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
         logger.Error("Query person error:", err,
            personIdentity.DocumentNumber,
            personIdentity.CommunityID,
            personIdentity.LabelId)
         //fmt.Println("asdasfasfasf")
         continue
         //return err
      }
      // 如果记录存在,则更新
      if existingPerson.DocumentNumber != "" {
         err := db.Model(&Identity{}).
            Where("dbtablepersons_id = ? AND community_id = ? AND label_id = ?",
               personIdentity.DocumentNumber,
               personIdentity.CommunityID,
               personIdentity.LabelId,
            ).
            Updates(map[string]interface{}{
               "expire_time": personIdentity.ExpireTime,
            }).Error
         if err != nil {
            return err
         }
      } else {
         // 如果记录不存在,则插入新记录
         err := db.Create(&personIdentity).Error
         if err != nil {
            return err
         }
      }
   }
   return nil
}
// UpdatePersonInfo 更新或插入多个人员信息
func UpdatePersonInfo(persons []PersonStatus, communityID string) error {
   // 数据库连接信息
   db, err := ConnectDB()
   if err != nil {
      return err
   }
   // 遍历人员信息
   for _, person := range persons {
      // 检查记录是否存在
      var existingPerson PersonStatus
      err := db.Where("documentNumber = ? AND communityID = ?", person.DocumentNumber, communityID).First(&existingPerson).Error
      if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
         logger.Error("Query person error:", err, person.DocumentNumber, communityID)
         //fmt.Println("asdasfasfasf")
         continue
         //return err
      }
      // 如果记录存在,则更新
      if existingPerson.DocumentNumber != "" {
         err := db.Model(&PersonStatus{}).
            Where("documentNumber = ? AND communityID = ?", person.DocumentNumber, communityID).
            Updates(map[string]interface{}{
               "status":          person.Status,
               "frequentAddress": person.FrequentAddress,
            }).Error
         if err != nil {
            return err
         }
      } else {
         // 如果记录不存在,则插入新记录
         err := db.Create(&person).Error
         if err != nil {
            return err
         }
      }
   }
   return nil
}