2024-11-26 23:12:41 +08:00

108 lines
3.1 KiB
Go

package renzhengshouquan
import (
"math/rand"
"shylinux.com/x/ice"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/toolkits"
"shylinux.com/x/community/src/renzhengshouquan/model"
)
type cert struct {
Table
order string `data:"1"`
fields string `data:"cert_status,path,number,name,type,address,mobile,verify,user_uid"`
upload string `name:"upload" role:"leader"`
remove string `name:"remove" role:"leader"`
verify string `name:"verify mobile* verify*" role:"void"`
}
func (s cert) Upload(m *ice.Message, arg ...string) {
p := s.UploadCreate(m.Options(mdb.FIELD, "cert"), model.PATH, "")
switch AuthType(kit.Int(m.Cmd(Auth{}, s.Select, model.UID, m.Option(model.AUTH_UID)).Append(model.AUTH_TYPE))) {
case AuthPersonal:
msg := m.Cmd(OcrVendor, OcrVendor.IDCard, p)
s.Update(m, kit.Dict(
model.NUMBER, msg.Append("IdNum"),
model.NAME, msg.Append("Name"),
model.TYPE, msg.Append("Sex"),
model.BIRTH, msg.Append("Birth"),
model.ADDRESS, msg.Append("Address"),
), m.OptionSimple(model.AUTH_UID)...)
case AuthCompany:
msg := m.Cmd(OcrVendor, OcrVendor.BizLicense, p)
s.Update(m, kit.Dict(
model.NUMBER, msg.Append("RegNum"),
model.NAME, msg.Append("Name"),
model.TYPE, msg.Append("Type"),
model.PERSON, msg.Append("Person"),
model.PERIOD, msg.Append("Period"),
model.ADDRESS, msg.Append("Address"),
model.AUTHOR, msg.Append("RegistrationAuthority"),
), m.OptionSimple(model.AUTH_UID)...)
}
}
func (s cert) List(m *ice.Message, arg ...string) {
if len(arg) == 1 {
s.Select(m, model.AUTH_UID, arg[0]).Table(func(value ice.Maps) {
switch CertStatus(kit.Int(value[model.CERT_STATUS])) {
case CertUpload:
m.PushButton(s.Verify)
case CertVerify:
m.PushButton(s.Check)
default:
m.PushButton(s.Verify)
// m.PushButton()
}
}).Action(s.Upload).Display("").DisplayCSS("")
s.Button(m, "", s.Upload)
}
}
func (s cert) Verify(m *ice.Message, arg ...string) {
if m.Option(model.VERIFY) == "000" {
verify := kit.Format("%06d", rand.Intn(10000))
s.Update(m, kit.Dict(model.VERIFY, verify), m.OptionSimple(model.AUTH_UID, model.UID)...)
m.Cmd(SmsVendor, SmsVendor.Send, m.Option(model.MOBILE), verify)
} else {
msg := s.Select(m.Spawn(), m.OptionSimple(model.AUTH_UID, model.UID)...)
if msg.Append(model.VERIFY) == m.Option(model.VERIFY) {
s.Check(m)
}
}
}
func (s cert) Check(m *ice.Message, arg ...string) {
if !m.Cmdy(RealnameVendor, RealnameVendor.Check, m.Option(model.MOBILE), m.Option(model.NUMBER), m.Option(model.NAME)).IsErr() {
s.Update(m, kit.Dict(model.STATUS, CertCheck), m.OptionSimple(model.AUTH_UID, model.UID)...)
}
}
func init() { ice.TeamCtxCmd(cert{}) }
type CertStatus int
const (
CertUpload CertStatus = iota
CertVerify
CertCheck
)
var CertStatusList = map[CertStatus]string{
CertUpload: "upload",
CertVerify: "verify",
CertCheck: "check",
}
func (s CertStatus) String() string { return CertStatusList[s] }
var OcrVendor interface {
IDCard(m *ice.Message, arg ...string)
BizLicense(m *ice.Message, arg ...string)
}
var SmsVendor interface {
Send(m *ice.Message, arg ...string)
}
var RealnameVendor interface {
Check(m *ice.Message, arg ...string)
}