添加过滤参数支持

This commit is contained in:
lzh 2025-06-13 13:54:58 +08:00
parent a631cccb13
commit 5f2c9f0f64

View File

@ -8,6 +8,8 @@ import (
"micro-bundle/pkg/app" "micro-bundle/pkg/app"
commonErr "micro-bundle/pkg/err" commonErr "micro-bundle/pkg/err"
"micro-bundle/pkg/msg" "micro-bundle/pkg/msg"
"micro-bundle/pkg/utils"
"strings"
"time" "time"
"gorm.io/gorm" "gorm.io/gorm"
@ -391,64 +393,124 @@ func AddBundleExtendRecord(data model.BundleExtensionRecords) error {
} }
func GetBundleExtendRecordList(req *bundle.BundleExtendRecordsListRequest) (data []model.BundleExtendRecordItemPo, total int64, err error) { func GetBundleExtendRecordList(req *bundle.BundleExtendRecordsListRequest) (data []model.BundleExtendRecordItemPo, total int64, err error) {
var berConditions []string
var berArgs []any
var bovaConditions []string
var bovaArgs []any
// 动态条件拼接示例
if req.User != "" {
if utils.IsPhoneNumber(req.User) {
berConditions = append(berConditions, "u.tel_num = ?")
berArgs = append(berArgs, req.User)
} else {
berConditions = append(berConditions, "u.nickname LIKE ?")
berArgs = append(berArgs, "%"+req.User+"%")
}
}
if req.Operator != "" {
if utils.IsPhoneNumber(req.Operator) {
berConditions = append(berConditions, "operator_phone_number = ?")
berArgs = append(berArgs, "%"+req.User+"%")
} else {
berConditions = append(berConditions, "operator_name LIKE ?")
berArgs = append(berArgs, "%"+req.User+"%")
}
}
if req.Type != 0 {
switch req.Type {
case 1: // 手动创建
{
bovaConditions = append(berConditions, "bova_uuid IS NULL")
}
case 2: // 自行购买
{
berConditions = append(berConditions, "operator_name IS NULL")
}
}
}
if req.AssociatedOrderNumber != "" {
bovaConditions = append(bovaConditions, "order_uuid LIKE ?")
bovaArgs = append(bovaArgs, "%"+req.AssociatedOrderNumber+"%")
}
if req.StartTime != 0 {
berConditions = append(berConditions, "ber.created_at >= ?")
berArgs = append(berArgs, time.UnixMilli(int64(req.StartTime)))
bovaConditions = append(bovaConditions, "bova.created_at >= ?")
bovaArgs = append(bovaArgs, time.UnixMilli(int64(req.StartTime)))
}
if req.EndTime != 0 {
berConditions = append(berConditions, "ber.created_at <= ?")
berArgs = append(berArgs, time.UnixMilli(int64(req.EndTime)))
bovaConditions = append(bovaConditions, "bova.created_at <= ?")
bovaArgs = append(bovaArgs, time.UnixMilli(int64(req.EndTime)))
}
berCWhereClause := ""
if len(berConditions) > 0 {
berCWhereClause = " WHERE " + strings.Join(berConditions, " AND ")
}
bovaCWhereClause := ""
if len(berConditions) > 0 {
bovaCWhereClause = " WHERE " + strings.Join(bovaConditions, " AND ")
}
// 拼接数据查询SQL
sql := ` sql := `
SELECT SELECT
u.nickname AS user_name, u.nickname AS user_name,
u.tel_num AS user_phone_number, u.tel_num AS user_phone_number,
bova.num AS service_num, bova.num AS service_num,
bova.service_type AS service_type, bova.service_type AS service_type,
bova.order_uuid, bova.order_uuid,
bova.uuid AS bova_uuid, bova.uuid AS bova_uuid,
NULL AS account_additional, NULL AS account_additional,
NULL AS images_additional, NULL AS images_additional,
NULL AS data_additional, NULL AS data_additional,
NULL AS video_additional, NULL AS video_additional,
NULL AS operator_name, NULL AS operator_name,
NULL AS operator_phone_number, NULL AS operator_phone_number,
bova.created_at bova.created_at as created_at
FROM FROM
fiee_bundle.bundle_order_value_add AS bova fiee_bundle.bundle_order_value_add AS bova
` + "LEFT JOIN `micro-account`.`user` u ON u.id = bova.customer_id" + ` LEFT JOIN ` + "`micro-account`.`user`" + ` u ON u.id = bova.customer_id
` + bovaCWhereClause + `
UNION ALL UNION ALL
SELECT SELECT
u.nickname AS user_name, u.nickname AS user_name,
u.tel_num AS user_phone_number, u.tel_num AS user_phone_number,
NULL AS service_num, NULL AS service_num,
NULL AS service_type, NULL AS service_type,
NULL AS order_uuid, NULL AS order_uuid,
NULL AS bova_uuid, NULL AS bova_uuid,
ber.account_additional, ber.account_additional,
ber.images_additional, ber.images_additional,
ber.data_additional, ber.data_additional,
ber.video_additional, ber.video_additional,
ber.operator_name, ber.operator_name,
ber.operator_phone_number, ber.operator_phone_number,
ber.created_at ber.created_at as created_at
FROM FROM
fiee_bundle.bundle_extension_records ber fiee_bundle.bundle_extension_records ber
` + "LEFT JOIN `micro-account`.`user` u ON u.id = ber.user_id" + ` LEFT JOIN ` + "`micro-account`.`user`" + ` u ON u.id = ber.user_id
ORDER BY created_at DESC ` + berCWhereClause + `
LIMIT ? OFFSET ?; ORDER BY created_at DESC
LIMIT ? OFFSET ?;
` `
// 拼接总数查询SQL
countSql := ` countSql := `
SELECT COUNT(*) AS total_count FROM ( SELECT COUNT(*) AS total_count FROM (
SELECT bova.created_at SELECT bova.created_at as created_at
FROM fiee_bundle.bundle_order_value_add AS bova FROM fiee_bundle.bundle_order_value_add AS bova
` + "LEFT JOIN `micro-account`.`user` u ON u.id = bova.customer_id" + ` LEFT JOIN ` + "`micro-account`.`user`" + ` u ON u.id = bova.customer_id
` + bovaCWhereClause + `
UNION ALL UNION ALL
SELECT ber.created_at SELECT ber.created_at as created_at
FROM fiee_bundle.bundle_extension_records ber FROM fiee_bundle.bundle_extension_records ber
` + "LEFT JOIN `micro-account`.`user` u ON u.id = ber.user_id" + ` LEFT JOIN ` + "`micro-account`.`user`" + ` u ON u.id = ber.user_id
` + berCWhereClause + `
) AS total_table; ) AS total_table;
` `
// 查询总数
err = app.ModuleClients.BundleDB.Raw(countSql).Scan(&total).Error
if err != nil {
return nil, 0, err
}
if req.Page == 0 { if req.Page == 0 {
req.Page = 1 req.Page = 1
} }
@ -457,8 +519,15 @@ func GetBundleExtendRecordList(req *bundle.BundleExtendRecordsListRequest) (data
} }
offset := (req.Page - 1) * req.PageSize offset := (req.Page - 1) * req.PageSize
// 查询总数
err = app.ModuleClients.BundleDB.Raw(countSql, append(bovaArgs, berArgs...)...).Scan(&total).Error
if err != nil {
return nil, 0, err
}
// 查询数据 // 查询数据
err = app.ModuleClients.BundleDB.Raw(sql, req.PageSize, offset).Scan(&data).Error argsWithPage := append(append(bovaArgs, berArgs...), req.PageSize, offset)
err = app.ModuleClients.BundleDB.Raw(sql, argsWithPage...).Scan(&data).Error
return return
} }
@ -473,7 +542,7 @@ func GetBundleBalance(req *bundle.GetBundleBalanceReq) (data []model.BundleBalan
if req.PageSize != 0 && req.Page != 0 { if req.PageSize != 0 && req.Page != 0 {
subQuery = subQuery.Limit(int(req.PageSize)).Offset(int(req.Page-1) * int(req.PageSize)) subQuery = subQuery.Limit(int(req.PageSize)).Offset(int(req.Page-1) * int(req.PageSize))
} }
app.ModuleClients.BundleDB.Table("fiee_bundle.bundle_order_records AS bor"). session := app.ModuleClients.BundleDB.Table("fiee_bundle.bundle_order_records AS bor").
Select(` Select(`
bor.customer_id as user_id, bor.customer_id as user_id,
u.nickname as user_name, u.nickname as user_name,
@ -500,8 +569,19 @@ func GetBundleBalance(req *bundle.GetBundleBalanceReq) (data []model.BundleBalan
Joins("LEFT JOIN `micro-account`.`user` u ON u.id = bor.customer_id"). Joins("LEFT JOIN `micro-account`.`user` u ON u.id = bor.customer_id").
Joins("LEFT JOIN fiee_bundle.cast_media_account cma ON cma.artist_uuid = u.id"). Joins("LEFT JOIN fiee_bundle.cast_media_account cma ON cma.artist_uuid = u.id").
Joins("LEFT JOIN fiee_bundle.bundle_extension_records ber ON ber.user_id = bor.customer_id"). Joins("LEFT JOIN fiee_bundle.bundle_extension_records ber ON ber.user_id = bor.customer_id").
Where("bor.customer_id != ?", ""). Where("bor.customer_id != ?", "")
// Where("") if req.BundleName != "" {
Scan(&data) session.Where("bor.bundle_name like ?", "%"+req.BundleName+"%")
}
if req.UserName != "" {
session.Where("u.nickname like ?", "%"+req.UserName+"%")
}
if req.ExpiredTimeStart != 0 {
session.Where("bor.expiration_time >= ?", req.ExpiredTimeStart)
}
if req.ExpiredTimeEnd != 0 {
session.Where("bor.expiration_time <= ?", req.ExpiredTimeEnd)
}
err = session.Scan(&data).Error
return return
} }