micro-bundle/internal/dao/valueAddBundleDao.go
2025-06-11 14:25:15 +08:00

190 lines
5.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package dao
import (
"fmt"
"micro-bundle/internal/model"
"micro-bundle/pb/bundle"
"micro-bundle/pkg/app"
"gorm.io/gorm"
)
// 增值套餐创建
func CreateValueAddBundle(req *model.ValueAddBundleProfile) (err error) {
err = app.ModuleClients.BundleDB.Model(&model.ValueAddBundleProfile{}).Create(&req).Error
if err != nil {
return
}
return
}
// 增值套餐列表
func ValueAddBundleList(priceType int32) (valueAddBundleProfile []*model.ValueAddBundleProfile, err error) {
err = app.ModuleClients.BundleDB.Where("price_type = ?", priceType).Order("num ASC").Find(&valueAddBundleProfile).Error
if err != nil {
return
}
return
}
// 增值套餐详情
func ValueAddBundleDetail(uuid string) (valueAddBundleProfile *model.ValueAddBundleProfile, err error) {
err = app.ModuleClients.BundleDB.Where("uuid = ?", uuid).First(&valueAddBundleProfile).Error
if err != nil {
return
}
return
}
func BundleProfileDetail(uuid string) (bundleProfile *model.BundleProfile, err error) {
err = app.ModuleClients.BundleDB.Where("uuid = ?", uuid).First(&bundleProfile).Error
if err != nil {
return
}
return
}
func BundleOrderRecordsDetailByAddUid(uuid string) (bundleOrderRecords *model.BundleOrderRecords, err error) {
err = app.ModuleClients.BundleDB.Where("value_add_bundle_uuid = ?", uuid).First(&bundleOrderRecords).Error
if err != nil {
return
}
return
}
func GetBundleOrderRecordsByUserIdAndBundleUuid(userId int32, uuid string) (bundleOrderRecords *model.BundleOrderRecords, err error) {
err = app.ModuleClients.BundleDB.Where("customer_id = ? AND bundle_uuid = ?", userId, uuid).First(&bundleOrderRecords).Error
if err != nil {
return
}
return
}
func GetBundleOrderRecordsByCommonUidAndUserId(commonUid string, userId int32) (bundleOrderRecords *model.BundleOrderRecords, err error) {
err = app.ModuleClients.BundleDB.Where("bundle_common_uid = ? AND customer_id = ?", commonUid, userId).First(&bundleOrderRecords).Error
if err != nil {
return
}
return
}
// ***************************************新增值服务*****************************
// 增值套餐主表创建
func CreateValueAddService(tx *gorm.DB, req *model.ValueAddService) (err error) {
if err := tx.Model(&model.ValueAddService{}).Create(req).Error; err != nil {
return err
}
return
}
// 增值套餐语言表创建
func CreateValueAddServiceLang(tx *gorm.DB, req *model.ValueAddServiceLang) (err error) {
if err := tx.Model(&model.ValueAddServiceLang{}).Create(req).Error; err != nil {
return err
}
return
}
// 增值套餐主表更新
func UpdateValueAddService(tx *gorm.DB, columns map[string]interface{}) (err error) {
err = tx.Model(&model.ValueAddService{}).Where("uuid = ?", columns["uuid"]).Updates(columns).Error
if err != nil {
return
}
return
}
func UpdateValueAddServiceLang(tx *gorm.DB, columns map[string]interface{}) (err error) {
err = tx.Model(&model.ValueAddServiceLang{}).Where("uuid =?", columns["uuid"]).
Where("language", columns["language"]).Updates(columns).Error
if err != nil {
return
}
return
}
// 增值套餐列表
func ValueAddServiceList(req *bundle.ValueAddServiceListRequest) (res []*model.ValueAddService, total int64, err error) {
query := app.ModuleClients.BundleDB.Model(&model.ValueAddService{}).
Preload("ValueAddServiceLang", func(db *gorm.DB) *gorm.DB {
return db.Select("uuid,service_name,service_type,price_mode,original_price,unit,language,price_type,options,created_at,updated_at")
})
count := *query
if req.PageSize != 0 && req.Page != 0 {
query = query.Limit(int(req.PageSize)).Offset(int(req.Page-1) * int(req.PageSize))
}
if err = query.Find(&res).Error; err != nil {
return
}
// 统计不同uuid的数量
err = count.Select("uuid").Group("uuid").Count(&total).Error
return
}
// 增值套餐详情
func ValueAddServiceDetail(uuid string) (valueAddServiceDetail *model.ValueAddService, err error) {
var data model.ValueAddService
err = app.ModuleClients.BundleDB.Where("uuid = ?", uuid).Preload("ValueAddServiceLang").First(&data).Error
if err != nil {
return nil, err
}
return &data, nil
}
// 通过uuid和language查询增值套餐
func ValueAddServiceDetailByUuidAndLanguage(uuid string, language string) (valueAddServiceLang *model.ValueAddServiceLang, err error) {
err = app.ModuleClients.BundleDB.Where("uuid = ? AND language = ?", uuid, language).First(&valueAddServiceLang).Error
if err != nil {
return nil, err
}
return
}
// 通过增值服务UUID查询所有关联套餐
func GetBundleToValueAddServiceByValueUid(valueUid string) ([]model.BundleToValueAddService, error) {
var rels []model.BundleToValueAddService
err := app.ModuleClients.BundleDB.Model(&model.BundleToValueAddService{}).
Where("value_uid = ?", valueUid).
Find(&rels).Error
return rels, err
}
func GetValueAddServiceDetailByUuid(tx *gorm.DB, uuid string) (*model.ValueAddService, error) {
result := &model.ValueAddService{}
err := tx.Model(&model.ValueAddService{}).
Preload("ValueAddServiceLang", "deleted_at = 0").
Where("uuid =? and deleted_at=0", uuid).
First(&result).Error
return result, err
}
func CreateValueAddServiceHistory(tx *gorm.DB, req *model.ValueAddServiceHistory) error {
return tx.Model(&model.ValueAddServiceHistory{}).Create(req).Error
}
func BatchValueAddServiceDetailTx(tx *gorm.DB, uids []string) (map[string]*model.ValueAddService, error) {
if len(uids) == 0 {
return map[string]*model.ValueAddService{}, nil // 返回空 map避免 nil panic
}
var results []*model.ValueAddService
err := tx.Model(&model.ValueAddService{}).
Where("value_uid IN ? AND deleted_at = 0", uids).
Preload("ValueAddServiceLang", "deleted_at = 0").
Find(&results).Error
if err != nil {
return nil, fmt.Errorf("批量查询增值服务失败: %w", err)
}
resultMap := make(map[string]*model.ValueAddService, len(results))
for _, detail := range results {
resultMap[detail.UUID] = detail
}
return resultMap, nil
}