207 lines
4.9 KiB
Go
207 lines
4.9 KiB
Go
package realname
|
||
|
||
import (
|
||
"context"
|
||
"strings"
|
||
|
||
"go-common/app/interface/main/account/conf"
|
||
"go-common/app/interface/main/account/dao/realname"
|
||
"go-common/app/interface/main/account/model"
|
||
"go-common/app/interface/main/account/service/realname/crypto"
|
||
memrpc "go-common/app/service/main/member/api/gorpc"
|
||
memmodel "go-common/app/service/main/member/model"
|
||
"go-common/library/log"
|
||
)
|
||
|
||
// Service is
|
||
type Service struct {
|
||
c *conf.Config
|
||
memRPC *memrpc.Service
|
||
realnameDao *realname.Dao
|
||
mainCryptor *crypto.Main
|
||
alipayCryptor *crypto.Alipay
|
||
missch chan func()
|
||
}
|
||
|
||
// New create service instance and return.
|
||
func New(c *conf.Config, rsapub, rsapriv, alipub, alibilipriv string) (s *Service) {
|
||
s = &Service{
|
||
c: c,
|
||
memRPC: memrpc.New(c.RPCClient2.Member),
|
||
realnameDao: realname.New(c),
|
||
mainCryptor: crypto.NewMain(rsapub, rsapriv),
|
||
alipayCryptor: crypto.NewAlipay(alipub, alibilipriv),
|
||
missch: make(chan func(), 1024),
|
||
}
|
||
go s.missproc()
|
||
return
|
||
}
|
||
|
||
// Status get status of realname
|
||
func (s *Service) Status(c context.Context, mid int64) (status int8, err error) {
|
||
var (
|
||
arg = &memmodel.ArgMemberMid{
|
||
Mid: mid,
|
||
}
|
||
res *memmodel.RealnameStatus
|
||
)
|
||
if res, err = s.memRPC.RealnameStatus(c, arg); err != nil {
|
||
return
|
||
}
|
||
status = int8(*res)
|
||
return
|
||
}
|
||
|
||
// ApplyStatus return realname apply status
|
||
func (s *Service) ApplyStatus(c context.Context, mid int64) (status int8, remark string, realname string, card string, err error) {
|
||
var (
|
||
arg = &memmodel.ArgMemberMid{
|
||
Mid: mid,
|
||
}
|
||
res *memmodel.RealnameApplyStatusInfo
|
||
)
|
||
if res, err = s.memRPC.RealnameApplyStatus(c, arg); err != nil {
|
||
return
|
||
}
|
||
status = int8(res.Status)
|
||
remark = res.Remark
|
||
realname, card = maskRealnameInfo(res.Realname, res.Card)
|
||
return
|
||
}
|
||
|
||
func maskRealnameInfo(realname, card string) (r, c string) {
|
||
var (
|
||
rStrs = strings.Split(realname, "")
|
||
cStrs = strings.Split(card, "")
|
||
)
|
||
if len(rStrs) > 0 {
|
||
r = "*" + strings.Join(rStrs[1:], "")
|
||
}
|
||
if len(cStrs) > 0 {
|
||
if len(cStrs) == 1 {
|
||
c = "*"
|
||
} else if len(cStrs) > 5 {
|
||
c = cStrs[0] + strings.Repeat("*", len(cStrs)-3) + strings.Join(cStrs[len(cStrs)-2:], "")
|
||
} else {
|
||
c = cStrs[0] + strings.Repeat("*", len(cStrs)-1)
|
||
}
|
||
}
|
||
return
|
||
}
|
||
|
||
// CountryList .
|
||
func (s *Service) CountryList(c context.Context) (list []*model.RealnameCountry, err error) {
|
||
list = countryList
|
||
return
|
||
}
|
||
|
||
// CardTypes .
|
||
func (s *Service) CardTypes(c context.Context, platform string, mobiapp string, device string, build int) (list []*model.RealnameCardType, err error) {
|
||
if (platform == "android" && build < 512000) || (platform == "ios" && build <= 5990) {
|
||
list = cardTypeOldList
|
||
return
|
||
}
|
||
// IOS粉暂返回 5.32 版本数据,待 5.36 IOS 重新接入后,根据 build 号,返回 cardTypeList
|
||
if platform == "ios" && mobiapp == "iphone" && device != "pad" {
|
||
list = cardTypeOldIOSList
|
||
return
|
||
}
|
||
list = cardTypeList
|
||
return
|
||
}
|
||
|
||
// CardTypesV2 .
|
||
func (s *Service) CardTypesV2(c context.Context) (list []*model.RealnameCardType, err error) {
|
||
list = cardTypeList
|
||
return
|
||
}
|
||
|
||
// TelCapture .
|
||
func (s *Service) TelCapture(c context.Context, mid int64) (err error) {
|
||
var (
|
||
arg = &memmodel.ArgMemberMid{
|
||
Mid: mid,
|
||
}
|
||
)
|
||
if err = s.memRPC.RealnameTelCapture(c, arg); err != nil {
|
||
return
|
||
}
|
||
return
|
||
}
|
||
|
||
// TelInfo .
|
||
func (s *Service) TelInfo(c context.Context, mid int64) (tel string, err error) {
|
||
if tel, err = s.realnameDao.TelInfo(c, mid); err != nil {
|
||
return
|
||
}
|
||
if len(tel) == 0 {
|
||
return
|
||
}
|
||
if len(tel) < 4 {
|
||
tel = tel[:1] + "****"
|
||
return
|
||
}
|
||
tel = tel[:3] + "****" + tel[len(tel)-4:]
|
||
return
|
||
}
|
||
|
||
// Apply .
|
||
func (s *Service) Apply(c context.Context, mid int64, realname string, cardType int, cardNum string, countryID int, captureCode int, handIMGToken, frontIMGToken, backIMGToken string) (err error) {
|
||
var (
|
||
arg = &memmodel.ArgRealnameApply{
|
||
MID: mid,
|
||
CaptureCode: captureCode,
|
||
Realname: realname,
|
||
CardType: int8(cardType),
|
||
CardCode: cardNum,
|
||
Country: int16(countryID),
|
||
HandIMGToken: handIMGToken,
|
||
FrontIMGToken: frontIMGToken,
|
||
BackIMGToken: backIMGToken,
|
||
}
|
||
)
|
||
if err = s.memRPC.RealnameApply(c, arg); err != nil {
|
||
return
|
||
}
|
||
return
|
||
}
|
||
|
||
// Channel .
|
||
func (s *Service) Channel(c context.Context) (channels []*model.RealnameChannel, err error) {
|
||
for _, c := range conf.Conf.Realname.Channel {
|
||
var (
|
||
channel = &model.RealnameChannel{
|
||
Name: c.Name,
|
||
Flag: model.RealnameFalse,
|
||
}
|
||
)
|
||
if c.Flag {
|
||
channel.Flag = model.RealnameTrue
|
||
}
|
||
channels = append(channels, channel)
|
||
}
|
||
return
|
||
}
|
||
|
||
func (s *Service) addmiss(f func()) {
|
||
select {
|
||
case s.missch <- f:
|
||
default:
|
||
log.Error("eventproc chan full")
|
||
}
|
||
}
|
||
|
||
// missproc is a routine for executing closure.
|
||
func (s *Service) missproc() {
|
||
defer func() {
|
||
if x := recover(); x != nil {
|
||
log.Error("missproc panic %+v", x)
|
||
}
|
||
go s.missproc()
|
||
}()
|
||
for {
|
||
f := <-s.missch
|
||
f()
|
||
}
|
||
}
|