This commit is contained in:
2026-04-18 12:05:21 +08:00
parent 55fcaf62dc
commit 957976db31
21 changed files with 331 additions and 140 deletions

View File

@@ -2,12 +2,15 @@ package admin_role
import (
"context"
"strings"
"sync"
"time"
"bdrp-server/app/main/api/internal/svc"
"bdrp-server/app/main/api/internal/types"
"bdrp-server/app/main/model"
"github.com/Masterminds/squirrel"
"github.com/samber/lo"
"github.com/zeromicro/go-zero/core/logx"
"github.com/zeromicro/go-zero/core/mr"
@@ -34,15 +37,7 @@ func (l *GetRoleListLogic) GetRoleList(req *types.GetRoleListReq) (resp *types.G
// 构建查询条件
builder := l.svcCtx.AdminRoleModel.SelectBuilder()
if len(req.Name) > 0 {
builder = builder.Where("role_name LIKE ?", "%"+req.Name+"%")
}
if len(req.Code) > 0 {
builder = builder.Where("role_code LIKE ?", "%"+req.Code+"%")
}
if req.Status != -1 {
builder = builder.Where("status = ?", req.Status)
}
builder = applyRoleListFilters(builder, req)
// 设置分页
offset := (req.Page - 1) * req.PageSize
@@ -73,15 +68,7 @@ func (l *GetRoleListLogic) GetRoleList(req *types.GetRoleListReq) (resp *types.G
mutex.Unlock()
} else if taskType == 2 {
countBuilder := l.svcCtx.AdminRoleModel.SelectBuilder()
if len(req.Name) > 0 {
countBuilder = countBuilder.Where("role_name LIKE ?", "%"+req.Name+"%")
}
if len(req.Code) > 0 {
countBuilder = countBuilder.Where("role_code LIKE ?", "%"+req.Code+"%")
}
if req.Status != -1 {
countBuilder = countBuilder.Where("status = ?", req.Status)
}
countBuilder = applyRoleListFilters(countBuilder, req)
count, err := l.svcCtx.AdminRoleModel.FindCount(l.ctx, countBuilder, "id")
if err != nil {
@@ -146,3 +133,56 @@ func (l *GetRoleListLogic) GetRoleList(req *types.GetRoleListReq) (resp *types.G
return resp, nil
}
func applyRoleListFilters(builder squirrel.SelectBuilder, req *types.GetRoleListReq) squirrel.SelectBuilder {
roleName := strings.TrimSpace(req.RoleName)
if roleName == "" {
roleName = strings.TrimSpace(req.Name)
}
if roleName != "" {
builder = builder.Where("role_name LIKE ?", "%"+roleName+"%")
}
roleCode := strings.TrimSpace(req.RoleCode)
if roleCode == "" {
roleCode = strings.TrimSpace(req.Code)
}
if roleCode != "" {
builder = builder.Where("role_code LIKE ?", "%"+roleCode+"%")
}
description := strings.TrimSpace(req.Description)
if description != "" {
builder = builder.Where("description LIKE ?", "%"+description+"%")
}
if req.Status != -1 {
builder = builder.Where("status = ?", req.Status)
}
if startTime, ok := parseRoleListTime(req.StartTime, false); ok {
builder = builder.Where("create_time >= ?", startTime)
}
if endTime, ok := parseRoleListTime(req.EndTime, true); ok {
builder = builder.Where("create_time <= ?", endTime)
}
return builder
}
func parseRoleListTime(raw string, isEnd bool) (time.Time, bool) {
raw = strings.TrimSpace(raw)
if raw == "" {
return time.Time{}, false
}
for _, layout := range []string{"2006-01-02 15:04:05", "2006-01-02", time.RFC3339} {
if t, err := time.Parse(layout, raw); err == nil {
if layout == "2006-01-02" && isEnd {
t = t.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
}
return t, true
}
}
return time.Time{}, false
}