fix
This commit is contained in:
117
app/main/api/internal/logic/agent/getwhitelistlistlogic.go
Normal file
117
app/main/api/internal/logic/agent/getwhitelistlistlogic.go
Normal file
@@ -0,0 +1,117 @@
|
||||
package agent
|
||||
|
||||
import (
|
||||
"context"
|
||||
"ycc-server/app/main/model"
|
||||
"ycc-server/common/ctxdata"
|
||||
"ycc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"ycc-server/app/main/api/internal/svc"
|
||||
"ycc-server/app/main/api/internal/types"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type GetWhitelistListLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewGetWhitelistListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetWhitelistListLogic {
|
||||
return &GetWhitelistListLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *GetWhitelistListLogic) GetWhitelistList(req *types.GetWhitelistListReq) (resp *types.GetWhitelistListResp, err error) {
|
||||
userID, err := ctxdata.GetUidFromCtx(l.ctx)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取用户信息失败, %v", err)
|
||||
}
|
||||
|
||||
// 1. 验证是否为代理(查询白名单列表需要是代理)
|
||||
_, err = l.svcCtx.AgentModel.FindOneByUserId(l.ctx, userID)
|
||||
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)
|
||||
}
|
||||
|
||||
// 2. 构建查询条件
|
||||
// 注意:系统会自动处理del_state,不需要手动添加
|
||||
builder := l.svcCtx.UserFeatureWhitelistModel.SelectBuilder().
|
||||
Where("user_id = ?", userID)
|
||||
|
||||
// 如果指定了身份证号,添加筛选条件
|
||||
if req.IdCard != "" {
|
||||
builder = builder.Where("id_card = ?", req.IdCard)
|
||||
}
|
||||
|
||||
// 3. 分页查询
|
||||
total, err := l.svcCtx.UserFeatureWhitelistModel.FindCount(l.ctx, builder, "id")
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询总数失败, %v", err)
|
||||
}
|
||||
|
||||
whitelists, err := l.svcCtx.UserFeatureWhitelistModel.FindPageListByPage(l.ctx, builder, req.Page, req.PageSize, "create_time DESC")
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询白名单列表失败, %v", err)
|
||||
}
|
||||
|
||||
// 4. 组装响应
|
||||
list := make([]types.WhitelistItem, 0, len(whitelists))
|
||||
for _, w := range whitelists {
|
||||
statusText := "生效"
|
||||
if w.Status == 2 {
|
||||
statusText = "已失效"
|
||||
}
|
||||
|
||||
list = append(list, types.WhitelistItem{
|
||||
Id: w.Id,
|
||||
IdCard: w.IdCard,
|
||||
FeatureId: w.FeatureId,
|
||||
FeatureApiId: w.FeatureApiId,
|
||||
FeatureName: "", // 需要从feature表查询,或者冗余存储
|
||||
Amount: w.Amount,
|
||||
Status: w.Status,
|
||||
StatusText: statusText,
|
||||
CreateTime: w.CreateTime.Format("2006-01-02 15:04:05"),
|
||||
})
|
||||
}
|
||||
|
||||
// 5. 查询feature名称(批量查询优化)
|
||||
if len(list) > 0 {
|
||||
featureIds := make([]string, 0, len(list))
|
||||
featureMap := make(map[string]string) // feature_id -> feature_name
|
||||
for _, item := range list {
|
||||
featureIds = append(featureIds, item.FeatureId)
|
||||
}
|
||||
|
||||
// 批量查询feature
|
||||
for _, featureId := range featureIds {
|
||||
feature, err := l.svcCtx.FeatureModel.FindOne(l.ctx, featureId)
|
||||
if err == nil {
|
||||
featureMap[featureId] = feature.Name
|
||||
}
|
||||
}
|
||||
|
||||
// 填充feature名称
|
||||
for i := range list {
|
||||
if name, ok := featureMap[list[i].FeatureId]; ok {
|
||||
list[i].FeatureName = name
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return &types.GetWhitelistListResp{
|
||||
Total: total,
|
||||
List: list,
|
||||
}, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user