This commit is contained in:
Mrx
2026-01-30 11:39:28 +08:00
parent c64b22ab05
commit 76784c3c1b
19 changed files with 717 additions and 46 deletions

View File

@@ -2,6 +2,7 @@ package admin_order
import (
"context"
"encoding/hex"
"sync"
"tyc-server/app/main/api/internal/svc"
@@ -9,6 +10,7 @@ import (
"tyc-server/app/main/model"
"tyc-server/common/globalkey"
"tyc-server/common/xerr"
"tyc-server/pkg/lzkit/crypto"
"github.com/Masterminds/squirrel"
"github.com/pkg/errors"
@@ -77,6 +79,67 @@ func (l *AdminGetOrderListLogic) AdminGetOrderList(req *types.AdminGetOrderListR
builder = builder.Where("refund_time <= ?", req.RefundTimeEnd)
}
// 按被查询人姓名/身份证/手机号过滤:通过 query_user_record 表加密匹配得到 order_id 列表
if req.QueriedName != "" || req.QueriedIdCard != "" || req.QueriedMobile != "" {
key, err := hex.DecodeString(l.svcCtx.Config.Encrypt.SecretKey)
if err != nil {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.REUQEST_PARAM_ERROR), "AdminGetOrderList, 解密密钥无效 err: %v", err)
}
secretKey := l.svcCtx.Config.Encrypt.SecretKey
var orConds []squirrel.Eq
if req.QueriedName != "" {
encName, err := crypto.AesEcbEncrypt([]byte(req.QueriedName), key)
if err != nil {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.REUQEST_PARAM_ERROR), "AdminGetOrderList, 姓名加密失败 err: %v", err)
}
orConds = append(orConds, squirrel.Eq{"name": encName})
}
if req.QueriedIdCard != "" {
encIdCard, err := crypto.EncryptIDCard(req.QueriedIdCard, key)
if err != nil {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.REUQEST_PARAM_ERROR), "AdminGetOrderList, 身份证加密失败 err: %v", err)
}
orConds = append(orConds, squirrel.Eq{"id_card": encIdCard})
}
if req.QueriedMobile != "" {
encMobile, err := crypto.EncryptMobile(req.QueriedMobile, secretKey)
if err != nil {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.REUQEST_PARAM_ERROR), "AdminGetOrderList, 手机号加密失败 err: %v", err)
}
orConds = append(orConds, squirrel.Eq{"mobile": encMobile})
}
if len(orConds) == 0 {
return &types.AdminGetOrderListResp{Total: 0, Items: []types.OrderListItem{}}, nil
}
qb := l.svcCtx.QueryUserRecordModel.SelectBuilder().
Columns("order_id").
Where(squirrel.Gt{"order_id": 0})
// squirrel Or 需要多个 predicate用 Or 拼接
var orPred squirrel.Or
for _, eq := range orConds {
orPred = append(orPred, eq)
}
qb = qb.Where(orPred)
records, err := l.svcCtx.QueryUserRecordModel.FindAll(l.ctx, qb, "id DESC")
if err != nil && !errors.Is(err, model.ErrNotFound) {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetOrderList, 查询被查询人记录失败 err: %v", err)
}
orderIdSet := make(map[int64]struct{})
for _, rec := range records {
if rec.OrderId > 0 {
orderIdSet[rec.OrderId] = struct{}{}
}
}
if len(orderIdSet) == 0 {
return &types.AdminGetOrderListResp{Total: 0, Items: []types.OrderListItem{}}, nil
}
orderIds := make([]int64, 0, len(orderIdSet))
for id := range orderIdSet {
orderIds = append(orderIds, id)
}
builder = builder.Where(squirrel.Eq{"id": orderIds})
}
// 并发获取总数和列表
var total int64
var orders []*model.Order