diff --git a/app/main/api/internal/logic/agent/createwhitelistorderlogic.go b/app/main/api/internal/logic/agent/createwhitelistorderlogic.go index 8846795..508b785 100644 --- a/app/main/api/internal/logic/agent/createwhitelistorderlogic.go +++ b/app/main/api/internal/logic/agent/createwhitelistorderlogic.go @@ -37,8 +37,8 @@ func (l *CreateWhitelistOrderLogic) CreateWhitelistOrder(req *types.CreateWhitel return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取用户信息失败, %v", err) } - // 1. 获取代理信息并验证是否为钻石代理 - agent, err := l.svcCtx.AgentModel.FindOneByUserId(l.ctx, userID) + // 1. 获取代理信息并验证(任意等级代理均可操作白名单) + _, err = l.svcCtx.AgentModel.FindOneByUserId(l.ctx, userID) if err != nil { if errors.Is(err, model.ErrNotFound) { return nil, errors.Wrapf(xerr.NewErrMsg("您不是代理"), "") @@ -46,11 +46,6 @@ func (l *CreateWhitelistOrderLogic) CreateWhitelistOrder(req *types.CreateWhitel return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询代理信息失败, %v", err) } - // 只有钻石代理可以操作 - if agent.Level != 3 { - return nil, errors.Wrapf(xerr.NewErrMsg("只有钻石代理可以操作白名单"), "") - } - // 2. 验证参数 if req.IdCard == "" { return nil, errors.Wrapf(xerr.NewErrMsg("身份证号不能为空"), "") diff --git a/app/main/api/internal/logic/agent/offlinefeaturelogic.go b/app/main/api/internal/logic/agent/offlinefeaturelogic.go index 3ec3422..5ab6032 100644 --- a/app/main/api/internal/logic/agent/offlinefeaturelogic.go +++ b/app/main/api/internal/logic/agent/offlinefeaturelogic.go @@ -38,8 +38,8 @@ func (l *OfflineFeatureLogic) OfflineFeature(req *types.OfflineFeatureReq) (resp return nil, err } - // 2. 获取用户ID并验证代理权限 - userID, err := l.verifyDiamondAgent() + // 2. 获取用户ID并验证代理权限(任意等级代理均可下架) + userID, err := l.verifyAgent() if err != nil { return nil, err } @@ -90,14 +90,14 @@ func (l *OfflineFeatureLogic) validateRequest(req *types.OfflineFeatureReq) erro return nil } -// verifyDiamondAgent 验证是否为钻石代理并返回用户ID -func (l *OfflineFeatureLogic) verifyDiamondAgent() (string, error) { +// verifyAgent 验证是否为代理并返回用户ID(任意等级代理均可下架) +func (l *OfflineFeatureLogic) verifyAgent() (string, error) { userID, err := ctxdata.GetUidFromCtx(l.ctx) if err != nil { return "", errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取用户信息失败, %v", err) } - agent, err := l.svcCtx.AgentModel.FindOneByUserId(l.ctx, userID) + _, err = l.svcCtx.AgentModel.FindOneByUserId(l.ctx, userID) if err != nil { if errors.Is(err, model.ErrNotFound) { return "", errors.Wrapf(xerr.NewErrMsg("您不是代理"), "") @@ -105,10 +105,6 @@ func (l *OfflineFeatureLogic) verifyDiamondAgent() (string, error) { return "", errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询代理信息失败, %v", err) } - if agent.Level != 3 { - return "", errors.Wrapf(xerr.NewErrMsg("只有钻石代理可以操作白名单下架"), "") - } - return userID, nil } diff --git a/app/main/api/internal/logic/query/query_common.go b/app/main/api/internal/logic/query/query_common.go index 9df0fb4..b6313c7 100644 --- a/app/main/api/internal/logic/query/query_common.go +++ b/app/main/api/internal/logic/query/query_common.go @@ -53,6 +53,25 @@ func ProcessQueryParams(QueryParams string, target *map[string]interface{}, key return nil } +// ensureQueryParamsIDCard 确保 target 中 id_card 非空,缺则用 fallbackId 填充(同一次报告多次进入分数一致) +func ensureQueryParamsIDCard(target *map[string]interface{}, fallbackId string) { + if target == nil { + return + } + if *target == nil { + *target = make(map[string]interface{}) + } + v, ok := (*target)["id_card"] + if !ok { + (*target)["id_card"] = fallbackId + return + } + s, _ := v.(string) + if s == "" { + (*target)["id_card"] = fallbackId + } +} + func UpdateFeatureAndProductFeature(ctx context.Context, svcCtx *svc.ServiceContext, productID string, target *[]types.QueryItem) error { for i := len(*target) - 1; i >= 0; i-- { queryItem := &(*target)[i] @@ -103,6 +122,8 @@ func BuildEncryptedQuery(ctx context.Context, svcCtx *svc.ServiceContext, queryM if processParamsErr != nil { return "", errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "报告查询, 报告参数处理失败: %v", processParamsErr) } + // 保证 query_params 中始终有 id_card,供前端评分 ±10 等逻辑使用(代理/自己查看报告等模式) + ensureQueryParamsIDCard(&query.QueryParams, "fallback_"+queryModel.Id) processErr := ProcessQueryData(queryModel.QueryData, &query.QueryData, key) if processErr != nil { return "", errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "报告查询, 报告结果处理失败: %v", processErr) diff --git a/app/main/api/internal/logic/query/querysharedetaillogic.go b/app/main/api/internal/logic/query/querysharedetaillogic.go index d8fe5ab..6808486 100644 --- a/app/main/api/internal/logic/query/querysharedetaillogic.go +++ b/app/main/api/internal/logic/query/querysharedetaillogic.go @@ -95,6 +95,8 @@ func (l *QueryShareDetailLogic) QueryShareDetail(req *types.QueryShareDetailReq) if processParamsErr != nil { return "", errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "报告查询, 报告参数处理失败: %v", processParamsErr) } + // 保证分享报告也有 id_card,供前端评分 ±10 使用 + ensureQueryParamsIDCard(&query.QueryParams, "fallback_"+queryModel.Id) processErr := ProcessQueryData(queryModel.QueryData, &query.QueryData, key) if processErr != nil { return "", errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "报告查询, 报告结果处理失败: %v", processErr)