yinbentan
2024-09-26 2030ec81f18f4ec9ea1800f13046acafff6d50f7
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package service
 
import (
    "aps_crm/model"
    "aps_crm/pkg/ecode"
    "aps_crm/pkg/mysqlx"
    "gorm.io/gorm"
)
 
type ContactService struct{}
 
func (ContactService) AddContact(contact *model.Contact) int {
 
    code := checkMemberAndCompany(contact)
    if code != ecode.OK {
        return code
    }
 
    tx := mysqlx.GetDB().Begin()
    // check isFirst
    errCode := setFirstContact(tx, contact)
    if errCode != ecode.OK {
        return errCode
    }
 
    err := model.NewContactSearch(tx).Create(contact)
    if err != nil {
        tx.Rollback()
        return ecode.ContactExist
    }
 
    tx.Commit()
    return ecode.OK
}
 
func (ContactService) UpdateContact(contact *model.Contact) int {
    // check contact exist
    _, err := model.NewContactSearch(nil).SetId(contact.Id).First()
    if err != nil {
        return ecode.ContactNotExist
    }
 
    code := checkMemberAndCompany(contact)
    if code != ecode.OK {
        return code
    }
 
    tx := mysqlx.GetDB().Begin()
    code = setFirstContact(tx, contact)
    if code != ecode.OK {
        return code
    }
 
    // update contact
    err = model.NewContactSearch(tx).SetId(contact.Id).Update(contact)
    if err != nil {
        tx.Rollback()
        return ecode.ContactUpdateErr
    }
 
    tx.Commit()
 
    return ecode.OK
}
 
func checkMemberAndCompany(contact *model.Contact) int {
    // check client exist
    code := CheckClientExist(contact.ClientId)
    if code != ecode.OK {
        return code
    }
 
    // check member exist
    return ecode.OK
}
 
func setFirstContact(tx *gorm.DB, contact *model.Contact) int {
    if contact.IsFirst && contact.ClientId != 0 {
        err := model.NewContactSearch(tx).SetClientId(contact.ClientId).UpdateByMap(map[string]interface{}{
            "is_first": false,
        })
        if err != nil {
            tx.Rollback()
            return ecode.ContactUpdateErr
        }
    }
 
    return ecode.OK
}
 
// CheckContactExist check contact exist
func CheckContactExist(id int) int {
    tmp, err := model.NewContactSearch(nil).SetId(id).First()
    if err != nil {
        return ecode.ContactNotExist
    }
 
    if tmp.Id == 0 {
        return ecode.ContactNotExist
    }
 
    return ecode.OK
}
 
func (ContactService) GetContactList(page, pageSize int, data map[string]interface{}, clientId int) ([]*model.ContactDetail, int64, int) {
    // get contact list
    contacts, total, err := model.NewContactSearch(nil).SetPage(page, pageSize).SetSearchMap(data).SetClientId(clientId).FindAll()
    if err != nil {
        return nil, 0, ecode.ContactListErr
    }
    return contacts, total, ecode.OK
}
 
func (ContactService) DeleteContact(ids []int) int {
    // delete client
    err := model.NewContactSearch(nil).SetIds(ids).Delete()
    if err != nil {
        return ecode.ContactDeleteErr
    }
    return ecode.OK
}
 
func (ContactService) Assign(ids []int, memberId int) int {
    // check contact exist
    //errCode := CheckContactExist(id)
    //if errCode != ecode.OK {
    //    return errCode
    //}
 
    // assign contact
    err := model.NewContactSearch(nil).SetIds(ids).UpdateByMap(map[string]interface{}{
        "member_id": memberId,
    })
    if err != nil {
        return ecode.ContactAssignErr
    }
 
    return ecode.OK
}