fadd
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user