101 lines
2.2 KiB
Go
101 lines
2.2 KiB
Go
|
package service
|
||
|
|
||
|
import (
|
||
|
"sync"
|
||
|
|
||
|
"go-common/app/interface/main/mcn/model/mcnmodel"
|
||
|
"go-common/library/ecode"
|
||
|
"go-common/library/log"
|
||
|
"go-common/library/time"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
lastLoadMcnUniqueTime time.Time
|
||
|
)
|
||
|
|
||
|
//UniqueCheck check unique
|
||
|
type UniqueCheck struct {
|
||
|
// all the values is mcn id
|
||
|
PhoneMap map[string]int64
|
||
|
IDCardMap map[string]int64
|
||
|
CompanyNameMap map[string]int64
|
||
|
CompanyLicenseIDMap map[string]int64
|
||
|
lock sync.Mutex
|
||
|
}
|
||
|
|
||
|
//NewUniqueCheck new checker
|
||
|
func NewUniqueCheck() *UniqueCheck {
|
||
|
return &UniqueCheck{
|
||
|
PhoneMap: make(map[string]int64),
|
||
|
IDCardMap: make(map[string]int64),
|
||
|
CompanyNameMap: make(map[string]int64),
|
||
|
CompanyLicenseIDMap: make(map[string]int64),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//CheckIsUniqe check is unique
|
||
|
func (u *UniqueCheck) CheckIsUniqe(req *mcnmodel.McnApplyReq) (err error) {
|
||
|
if req == nil {
|
||
|
return
|
||
|
}
|
||
|
u.lock.Lock()
|
||
|
defer u.lock.Unlock()
|
||
|
if v, ok := u.PhoneMap[req.ContactPhone]; ok {
|
||
|
if req.McnMid != v {
|
||
|
err = ecode.MCNUpBindUpDuplicatePhone
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if v, ok := u.IDCardMap[req.ContactIdcard]; ok {
|
||
|
if req.McnMid != v {
|
||
|
err = ecode.MCNUpBindUpDuplicateIDCard
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if v, ok := u.CompanyNameMap[req.CompanyName]; ok {
|
||
|
if req.McnMid != v {
|
||
|
err = ecode.MCNUpBindUpDuplicateCompanyName
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if v, ok := u.CompanyLicenseIDMap[req.CompanyLicenseID]; ok {
|
||
|
if req.McnMid != v {
|
||
|
err = ecode.MCNUpBindUpDuplicateCompanyLicenseID
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
//AddItem add item from db
|
||
|
func (u *UniqueCheck) AddItem(sign *mcnmodel.McnSign) {
|
||
|
u.lock.Lock()
|
||
|
defer u.lock.Unlock()
|
||
|
u.PhoneMap[sign.ContactPhone] = sign.McnMid
|
||
|
u.IDCardMap[sign.ContactIdcard] = sign.McnMid
|
||
|
u.CompanyNameMap[sign.CompanyName] = sign.McnMid
|
||
|
u.CompanyLicenseIDMap[sign.CompanyLicenseID] = sign.McnMid
|
||
|
}
|
||
|
|
||
|
func (s *Service) loadMcnUniqueCache() {
|
||
|
var list []*mcnmodel.McnSign
|
||
|
var err = s.mcndao.GetMcnDB().
|
||
|
Select("mcn_mid, company_name, company_license_id, contact_idcard, contact_phone, mtime").
|
||
|
Where("mtime>?", lastLoadMcnUniqueTime).
|
||
|
Find(&list).Error
|
||
|
if err != nil {
|
||
|
log.Warn("cannot get unique, err=%s", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
for _, v := range list {
|
||
|
s.uniqueChecker.AddItem(v)
|
||
|
if lastLoadMcnUniqueTime < v.Mtime {
|
||
|
lastLoadMcnUniqueTime = v.Mtime
|
||
|
}
|
||
|
}
|
||
|
}
|