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 }