Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"cache.go",
"geetest.go",
"param.go",
"payShield.go",
"question.go",
"risk.go",
],
importpath = "go-common/app/service/openplatform/anti-fraud/model",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = ["//library/time:go_default_library"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,76 @@
package model
import (
"fmt"
"time"
)
//缓存key
const (
//RedisSalesLimitKey 售卖时间限制,mid:SALESLIMIT:ANTI
RedisSalesLimitKey = "%d:SALESLIMIT:ANTI"
//RedisIPChangeKey 用户ip变更mid:IPCHANGELIMIT:ANTI
RedisIPChangeKey = "%d:IPCHANGELIMIT:ANTI"
//RedisCreateMIDLimitKey 同一mid下单次数限制,mid:itemId:MID:CREATELIMIT:ANTI
RedisCreateMIDLimitKey = "%d:%d:MID:CREATELIMIT:ANTI"
//RedisCreateIPLimitKey 同一mid下单次数限制,ip:itemId:IP:CREATELIMIT:ANTI
RedisCreateIPLimitKey = "%s|%d:IP:CREATELIMIT:ANTI"
//RedisUserVoucherKey 用户凭证keymid:voucher:voucherType:VOUCHER:ANTI
RedisUserVoucherKey = "%d:%s:%d:VOUCHER:ANTI"
RedisUserVoucherKeyTimeOut = 600
//RedisGeetestCountKey 拉起极验的总数
RedisGeetestCountKey = "%d:ANTI:GEETEST:COUNT"
RedisGeetestCountKeyTimeOut = 3600
//RedisMIDBlackKey mid黑名单key
RedisMIDBlackKey = "ANTI:MID:BLACK:%d:%d"
//RedisIPBlackKey ip黑名单key
RedisIPBlackKey = "ANTI:IP:BLACK:%d:%s"
)
//GetSalesLimitKey 获取售卖时间限制key
func GetSalesLimitKey(mid int64) (key string) {
return fmt.Sprintf(RedisSalesLimitKey, mid)
}
//GetIPChangeKey 获取用户ip变更key
func GetIPChangeKey(mid int64) (key string) {
return fmt.Sprintf(RedisIPChangeKey, mid)
}
//GetCreateMIDLimitKey 获取mid创单限制key
func GetCreateMIDLimitKey(mid int64, itemID int64) (key string) {
return fmt.Sprintf(RedisCreateMIDLimitKey, mid, itemID)
}
//GetCreateIPLimitKey 获取ip创单限制key
func GetCreateIPLimitKey(ip string, itemID int64) (key string) {
return fmt.Sprintf(RedisCreateIPLimitKey, ip, itemID)
}
//GetUserVoucherKey 获取用户凭证key
func GetUserVoucherKey(mid int64, voucher string, voucherType int64) (key string) {
return fmt.Sprintf(RedisUserVoucherKey, mid, voucher, voucherType)
}
//GetGeetestCountKey 获取极验总数key
func GetGeetestCountKey() (key string) {
current := time.Now().Unix()
return fmt.Sprintf(RedisGeetestCountKey, current/RedisGeetestCountKeyTimeOut)
}
//GetMIDBlackKey 获取mid黑名单key
func GetMIDBlackKey(customerId int64, mid int64) (key string) {
return fmt.Sprintf(RedisMIDBlackKey, customerId, mid)
}
//GetIPBlackKey 获取mid黑名单key
func GetIPBlackKey(customerId int64, clientIP string) (key string) {
return fmt.Sprintf(RedisIPBlackKey, customerId, clientIP)
}

View File

@@ -0,0 +1,8 @@
package model
const (
//GeetestCaptchaID 极验的id
GeetestCaptchaID = "3378262dc41a29fef92707dc5709d53d"
//GeetestPrivateKey 极验的key
GeetestPrivateKey = "de7f98dec5551fa0cca52c51b09bd1f1"
)

View File

@@ -0,0 +1,157 @@
package model
// ArgGetQusBank 题库
type ArgGetQusBank struct {
QsBId int64 `form:"qb_id" validate:"required"`
Stat int64 `form:"idel" validate:"min=0"`
}
// ArgAddQusBank 添加题库
type ArgAddQusBank struct {
QBName string `json:"qb_name" validate:"required"`
CdTime int64 `json:"cd_time" validate:"required,min=1,gte=1"`
MaxRetryTime int64 `json:"max_retry_time" validate:"required,min=1,gte=1"`
}
// ArgBaseBank 基本题库
type ArgBaseBank struct {
QsBId int64 `json:"qb_id" validate:"required"`
}
// ArgUpdateQusBank 更新题库
type ArgUpdateQusBank struct {
QsBId int64 `json:"qb_id" validate:"required"`
QBName string `json:"qb_name"`
CdTime int64 `json:"cd_time" validate:"min=1,gte=1"`
MaxRetryTime int64 `json:"max_retry_time" validate:"min=1,gte=1"`
}
// ArgPage 分页
type ArgPage struct {
PageNo int `form:"page" validate:"required,min=1,gte=1"`
PageSize int `form:"page_size" validate:"required,min=1,gte=1"`
}
// ArgBankList 题库列表
type ArgBankList struct {
ArgPage
Name string `form:"key"`
}
// ArgGetQus 题目
type ArgGetQus struct {
QsID int64 `form:"qid" validate:"required"`
Stat int64 `form:"status" validate:"min=0"`
}
// ArgBaseQus 基本题目信息
type ArgBaseQus struct {
Type int8 `json:"question_type" validate:"required,min=1,max=4"`
AnType int8 `json:"answer_type" validate:"required,min=1,max=4"`
Name string `json:"question_name" validate:"required,min=1,gte=1"`
BId int64 `json:"qb_id" validate:"required,min=1,gte=1"`
Dif int8 `json:"difficulty" validate:"required,min=1,max=3"`
Answer []Answer `json:"answer" validate:"required"`
}
// ArgAddQus 添加题目
type ArgAddQus struct {
ArgBaseQus
QsID string `json:"qid" validate:""`
}
// ArgUpdateQus 更新题目
type ArgUpdateQus struct {
ArgBaseQus
QsID int64 `json:"qid" validate:"required"`
}
// ArgQusList 题目列表
type ArgQusList struct {
ArgPage
QsBId int64 `form:"qb_id" validate:""`
}
// AddQus 添加题目
type AddQus struct {
QsID int64 `json:"qid" validate:""`
Type int8 `json:"question_type" validate:"required"`
AnType int8 `json:"answer_type" validate:"required,min=1,max=4"`
Name string `json:"question_name" validate:"required,min=1,gte=1"`
BId int64 `json:"qb_id" validate:"required,min=1,gte=1"`
Dif int8 `json:"difficulty" validate:"required,min=1,gte=1"`
Answers []Answer
}
// ArgQuestionBankBind 关联题库/修改关联
type ArgQuestionBankBind struct {
QsBId int64 `json:"qb_id" form:"qb_id" validate:"required"`
Source int8 `json:"source" validate:"required"`
TargetItemType int8 `json:"target_item_type" validate:"required"`
UseInTime int64 `json:"use_in_time" validate:"required"`
TargetItems string `json:"target_items" validate:"required"`
}
// ArgQuestionBankBinds to do
type ArgQuestionBankBinds struct {
BandBinds []ArgQuestionBankBind `json:"bind_info" validate:"required"`
}
// ArgQuestionBankBindToDb to do
type ArgQuestionBankBindToDb struct {
QsBId int64
Source int8
TargetItemType int8
UseInTime int64
TargetItems []string
}
// ArgQuestionBankUnbind 关联题库/修改关联
type ArgQuestionBankUnbind struct {
TargetItems []int64 `json:"target_items" validate:"required"`
TargetItemType int8 `json:"target_item_type" validate:"required"`
Source int8 `json:"source" validate:"required"`
}
// ArgGetBankBind 查询关联题库信息
type ArgGetBankBind struct {
TargetItems []string `json:"target_items" validate:"required"`
TargetItemType int8 `json:"target_item_type" validate:"required"`
Source int8 `json:"source" validate:"required"`
}
// ArgGetQuestion 随机获取一道题
type ArgGetQuestion struct {
UID string `form:"uid" json:"uid" validate:"required"`
TargetItem string `form:"target_item" json:"target_item" validate:"required"`
TargetItemType int8 `form:"target_item_type" json:"target_item_type" validate:"required"`
Source int8 `form:"source" json:"source" validate:"required"`
Platform int8 `form:"platform" json:"platform" validate:"required"`
ComponentID int `form:"component_id" json:"component_id" validate:"required"`
}
// ArgGetBindItems 绑定
type ArgGetBindItems struct {
ArgPage
QsBId int64 `form:"qb_id" validate:"required"`
}
// ArgBankSearch 搜索
type ArgBankSearch struct {
Name string `form:"name" validate:"required"`
}
// ArgCheckAnswer 答案检查
type ArgCheckAnswer struct {
ArgGetQuestion
QsID int64 `json:"qid" validate:"required"`
Answers []int64 `json:"answers"`
X int `json:"x"`
Y int `json:"y"`
}
// ArgCheckQus 题库检查
type ArgCheckQus struct {
QusIDs []int64 `json:"ids"`
Cnt int `json:"cnt"`
}

View File

@@ -0,0 +1,19 @@
package model
// IPListDetail .
type IPListDetail struct {
IP string
Num int64
}
// UIDListDetail .
type UIDListDetail struct {
UID string
Num int64
}
// ListDetail .
type ListDetail struct {
IP string
UID string
}

View File

@@ -0,0 +1,134 @@
package model
import (
"database/sql"
"go-common/library/time"
)
// 常量
const (
DeledStatus = 1 // 已删除
PAGESIZE = 20 // 每页条数
STARTINDEX = 20 // 开始页码
MULTIPLECHOICE = 2 //多选
)
// Question 题目返回数据
type Question struct {
QsID int64 `json:"qid"`
QsType int8 `json:"question_type"`
AnswerType int8 `json:"answer_type"`
QsName string `json:"question_name"`
QsDif int8 `json:"difficulty"`
QsBId int64 `json:"qb_id"`
IsDeleted uint8 `json:"is_deleted"`
//Ctime string `json:"ctime"`
//Mtime string `json:"mtime"`
}
// GetQuestionItem 获取题目接口返回数据
type GetQuestionItem struct {
*Question
Answers []*Answer `json:"answers"`
QuestBkPic *QuestBkPic `json:"qspic"`
AllCnt int64 `json:"total"`
AnTime int64 `json:"answer_cnt"`
}
// QuestBkPic 坐标
type QuestBkPic struct {
X int `json:"x"`
Y int `json:"y"`
Src string `json:"src"`
}
// QuestionAll 题目所有
type QuestionAll struct {
Question
AnswersList []*Answer `json:"answers"`
}
//QuestionBank stuct
type QuestionBank struct {
//ID int64 `json:"id"`
QsBId int64 `json:"qb_id"`
QBName string `json:"qb_name"`
CdTime int64 `json:"cd_time"`
MaxRetryTime int64 `json:"max_retry_time"`
IsDeleted int8 `json:"is_deleted"`
}
// QusBankSt 返回
type QusBankSt struct {
QuestionBank
ID int64 `json:"id"`
TotalCnt int64 `json:"total_cnt"`
EasyCnt int64 `json:"easy_cnt"`
NormalCnt int64 `json:"normal_cnt"`
HardCnt int64 `json:"hard_cnt"`
}
// QusBankCnt 统计类
type QusBankCnt struct {
ID int64 `json:"id"`
TotalCnt int64 `json:"total_cnt"`
EasyCnt sql.NullInt64 `json:"easy_cnt"`
NormalCnt sql.NullInt64 `json:"normal_cnt"`
HardCnt sql.NullInt64 `json:"hard_cnt"`
}
//Answer stuct
type Answer struct {
QsID int64 `json:"qid"`
AnswerContent string `json:"answer_content"`
IsCorrect int8 `json:"is_correct"`
AnswerID int64 `json:"answer_id"`
}
// AnswerAdd add
type AnswerAdd struct {
Answer
}
// AddReturn return
type AddReturn struct {
ID int64 `json:"id"`
}
// Page page
type Page struct {
Total int64 `json:"total"`
PageNo int `json:"page_no" default:"1"`
PageSize int `json:"page_size" default:"20"`
}
// QuestionBankBind 绑定题库字段
type QuestionBankBind struct {
ID int64 `json:"id"`
TargetItem string `json:"target_item" validate:"required"`
TargetItemType int8 `json:"target_item_type" validate:"required"`
QsBId int64 `json:"bank_id" validate:"required"`
UseInTime int64 `json:"use_in_time" validate:"required"`
Source int8 `json:"source" validate:"required"`
IsDeleted int8 `json:"is_deleted"`
Ctime time.Time `json:"ctime"`
Mtime time.Time `json:"mtime"`
QuestionBank *QuestionBank `json:"question_bank,omitempty"`
}
// RespList 返回
type RespList struct {
Page
Items interface{} `json:"items"`
}
// AddLog log
type AddLog struct {
UID string
QsID int64
Platform int8
Source int8
Ids string
IsCorrect int8
}

View File

@@ -0,0 +1,120 @@
package model
//风险常量
const (
//ServerOutage 服务不可用
ServerOutage = 0
//ServerNormal 服务正常
ServerNormal = 1
//RankNormal 正常
RankNormal = 0
//RankAbnormal 不正常
RankAbnormal = 1
//RankDoubt 可疑
RankDoubt = 2
//MethodPass 通过
MethodPass = 0
//MethodBan 禁止
MethodBan = 1
//MethodGeetest 极验
MethodGeetest = 2
//MethodQuestion 答题
MethodQuestion = 3
//VoucherTypePull 凭证拉起
VoucherTypePull = 1
//VoucherTypeCheck 凭证验证
VoucherTypeCheck = 2
CheckPass = "验证通过"
CheckSaleErr = "未到售卖时间"
CheckMidEnough = "mid下单次数达到上限"
CheckIPEnough = "IP下单次数达到上限"
CheckIPChange = "用户网络环境变更"
RiskLevelSuperHigh = 1
RiskLevelHigh = 2
RiskLevelMiddle = 3
RiskLevelLight = 4
RiskLevelNormal = 5
)
// DeviceInfo 设备信息
type DeviceInfo struct {
UA string `json:"ua"`
Info string `json:"info"`
Type string `json:"type"`
Platform string `json:"platform"`
Build string `json:"build"`
}
// ItemInfo 商品
type ItemInfo struct {
ID int64 `json:"id"`
Name string `json:"name"`
SaleTime int64 `json:"saleTime"`
Count int64 `json:"count"`
Money int64 `json:"money"`
}
// BuyerInfo 购买人
type BuyerInfo struct {
ID int64 `json:"id"`
Name string `json:"name"`
PersonalID string `json:"personalId"`
IDCardFront string `json:"idCardFront"`
IDCardBack string `json:"idCardBack"`
}
// AddrInfo 收货地址
type AddrInfo struct {
ID int64 `json:"id"`
Name string `json:"name"`
Phone string `json:"phone"`
ProvID int64 `json:"provId"`
Prov string `json:"prov"`
CityID int64 `json:"cityId"`
City string `json:"city"`
AreaID int64 `json:"areaId"`
Area string `json:"area"`
Addr string `json:"addr"`
}
// ShieldData .
type ShieldData struct {
CustomerID int64 `json:"customerId"`
UID string `json:"uid"`
TraceID string `json:"traceId"`
Timestamp int64 `json:"timestamp"`
UserClientIp string `json:"userClientIp"`
DeviceID string `json:"deviceId"`
SourceIP string `json:"sourceIp"`
InterfaceName string `json:"interfaceName"`
PayChannel string `json:"payChannel"`
ReqData *ReqData `json:"reqData"`
ExtShield *ExtShield `json:"extShield"`
}
// ReqData 业务方信息
type ReqData struct {
ItemID []int64 `json:"itemId"`
AddrID int64 `json:"addrId"`
BuyerID int64 `json:"buyerId"`
}
// ExtShield .
type ExtShield struct {
OrderID int64 `json:"orderId"`
RiskLevel int64 `json:"riskLevel"`
ShieldResult int64 `json:"shieldResult"`
ShieldMsg string `json:"shieldMsg"`
Source string `json:"source"`
}
// ShieldIPList .
type ShieldIPList struct {
IP string `json:"ip"`
Num string `json:"num"`
}