package agent import ( "context" "strings" "github.com/pkg/errors" "github.com/zeromicro/go-zero/core/logx" "qnc-server/app/main/api/internal/svc" "qnc-server/app/main/api/internal/types" "qnc-server/app/main/model" "qnc-server/common/xerr" ) type CheckFeatureWhitelistStatusLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewCheckFeatureWhitelistStatusLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CheckFeatureWhitelistStatusLogic { return &CheckFeatureWhitelistStatusLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *CheckFeatureWhitelistStatusLogic) CheckFeatureWhitelistStatus(req *types.CheckFeatureWhitelistStatusReq) (resp *types.CheckFeatureWhitelistStatusResp, err error) { if req.IdCard == "" { return nil, errors.Wrapf(xerr.NewErrMsg("身份证号不能为空"), "") } if req.FeatureApiId == "" { return nil, errors.Wrapf(xerr.NewErrMsg("模块API标识不能为空"), "") } mainApiId := req.FeatureApiId if idx := strings.Index(req.FeatureApiId, "_"); idx > 0 { mainApiId = req.FeatureApiId[:idx] } feature, err := l.svcCtx.FeatureModel.FindOneByApiId(l.ctx, mainApiId) if err != nil { if errors.Is(err, model.ErrNotFound) { return nil, errors.Wrapf(xerr.NewErrMsg("模块不存在"), "") } return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询模块信息失败, %v", err) } whitelistBuilder := l.svcCtx.UserFeatureWhitelistModel.SelectBuilder(). Where("id_card = ? AND feature_api_id = ? AND status = ?", req.IdCard, mainApiId, 1) whitelists, err := l.svcCtx.UserFeatureWhitelistModel.FindAll(l.ctx, whitelistBuilder, "") if err != nil { return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询白名单记录失败, %v", err) } isWhitelisted := len(whitelists) > 0 dataDeleted := false if req.QueryId != "" { containsFeature, err := l.svcCtx.WhitelistService.CheckQueryDataContainsFeature(l.ctx, req.QueryId, req.FeatureApiId) if err != nil { logx.Errorf("检查报告数据是否包含模块失败:%v", err) dataDeleted = true } else { dataDeleted = !containsFeature } } else { dataDeleted = true } return &types.CheckFeatureWhitelistStatusResp{ IsWhitelisted: isWhitelisted, WhitelistPrice: feature.WhitelistPrice, FeatureId: feature.Id, DataDeleted: dataDeleted, }, nil }