zhangzengfei
2024-09-29 3737ab3dd0cc753be986638316c96cb3114601e4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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
}