190 lines
5.8 KiB
Go
190 lines
5.8 KiB
Go
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
|
||
}
|