package logic
import (
MC "app.yhyue.com/moapp/jybase/common"
IC "bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXCore/rpc/init"
"bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXCore/rpc/util"
"context"
"fmt"
"strings"
"bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXCore/rpc/internal/svc"
"bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXCore/rpc/type/bxcore"
"github.com/zeromicro/go-zero/core/logx"
)
type SearchLimitLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewSearchLimitLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SearchLimitLogic {
return &SearchLimitLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
// SearchLimit 标讯搜索限制内容
func (l *SearchLimitLogic) SearchLimit(in *bxcore.SearchLimitReq) (*bxcore.SearchLimitResp, error) {
if in.UserId == "" || !util.IsCanLogin(in.UserId) {
return &bxcore.SearchLimitResp{
Data: fmt.Sprintf("需要登录!"),
}, nil
}
status := MC.If(IC.C.LimitSearchText.Flag, "打开", "关闭").(string)
if in.SearchType == "update" {
var isInit bool
if in.Flag == -2 { //重置
status = "重置"
isInit = true
} else if in.Flag == -1 && IC.C.LimitSearchText.Flag { //关闭
status = "关闭"
IC.C.LimitSearchText.Flag = false
util.LimitSearchClear()
} else if in.Flag == 1 && !IC.C.LimitSearchText.Flag { //打开
status = "打开"
IC.C.LimitSearchText.Flag = true
isInit = true
} else {
if IC.C.LimitSearchText.Flag {
status = "打开"
} else {
status = "关闭"
}
}
if IC.C.LimitSearchText.Flag {
//并发总量
if (in.Count > 0 || in.Count == -1 || in.Count == -2) && int(in.Count) != IC.C.LimitSearchText.Count {
IC.C.LimitSearchText.Count = int(in.Count)
isInit = true
}
//验证字段
if in.LimitItems != "" {
IC.C.LimitSearchText.LimitItems = strings.Split(in.LimitItems, ",")
isInit = true
}
//两次请求间隔时间
if in.TimeOut > 0 || in.TimeOut == -1 {
IC.C.LimitSearchText.TimeOut = int(in.TimeOut)
}
//免费用户 单独通道占比
if in.Percentage > 0 {
IC.C.LimitSearchText.Percentage = int(in.Percentage)
}
//未登录用户 单独通道占比
if in.NoLogin > 0 {
IC.C.LimitSearchText.NoLogin = int(in.NoLogin)
}
//付费用户 保留通道数
if in.ForPayer > 0 {
IC.C.LimitSearchText.ForPayer = int(in.ForPayer)
}
if isInit {
util.LimitSearchInit()
}
}
}
return &bxcore.SearchLimitResp{
Data: fmt.Sprint("" + fmt.Sprintf(IC.C.LimitSearchText.Msg, status, IC.C.LimitSearchText.Count, IC.C.LimitSearchText.TimeOut, IC.C.LimitSearchText.Percentage, IC.C.LimitSearchText.NoLogin, IC.C.LimitSearchText.ForPayer, strings.Join(IC.C.LimitSearchText.LimitItems, ","))),
}, nil
}