diff --git a/internal/dao/valueAddBundleDao.go b/internal/dao/valueAddBundleDao.go index 9bc0c80..4777641 100644 --- a/internal/dao/valueAddBundleDao.go +++ b/internal/dao/valueAddBundleDao.go @@ -1,6 +1,7 @@ package dao import ( + "fmt" "micro-bundle/internal/model" "micro-bundle/pb/bundle" "micro-bundle/pkg/app" @@ -157,9 +158,9 @@ func GetBundleToValueAddServiceByValueUid(valueUid string) ([]model.BundleToValu Find(&rels).Error return rels, err } -func GetValueAddServiceDetailByUuid(uuid string) (*model.ValueAddService, error) { +func GetValueAddServiceDetailByUuid(tx *gorm.DB, uuid string) (*model.ValueAddService, error) { result := &model.ValueAddService{} - err := app.ModuleClients.BundleDB.Model(&model.ValueAddService{}). + err := tx.Model(&model.ValueAddService{}). Preload("ValueAddServiceLang", "deleted_at = 0"). Where("uuid =? and deleted_at=0", uuid). First(&result).Error @@ -168,3 +169,21 @@ func GetValueAddServiceDetailByUuid(uuid string) (*model.ValueAddService, error) 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 +} diff --git a/internal/logic/bundleLogic.go b/internal/logic/bundleLogic.go index e303451..67d97d5 100644 --- a/internal/logic/bundleLogic.go +++ b/internal/logic/bundleLogic.go @@ -459,15 +459,32 @@ func saveBundleHistory(tx *gorm.DB, bundleUuid string, operator string, operator if err != nil { return errors.New("查询套餐详情失败: " + err.Error()) } - j, err := json.MarshalIndent(data, "", " ") + bundleToValueAddService := data.BundleToValueAddService + data.BundleToValueAddService = nil + var valueUuid []string + if bundleToValueAddService != nil && len(bundleToValueAddService) > 0 { + for _, v := range bundleToValueAddService { + valueUuid = append(valueUuid, v.ValueUid) + } + } + valueData, err := dao.BatchValueAddServiceDetailTx(tx, valueUuid) if err != nil { - return errors.New("json转换失败: " + err.Error()) + return errors.New("查询增值服务详情失败: " + err.Error()) + } + j, err := json.Marshal(data) + if err != nil { + return errors.New("套餐json转换失败: " + err.Error()) + } + vJ, err := json.Marshal(valueData) + if err != nil { + return errors.New("增值服务json转换失败: " + err.Error()) } history := &model.BundleProfileHistory{ - Uuid: bundleUuid, - BundleProfile: datatypes.JSON(j), - Operator: operator, - OperatorId: operatorId, + Uuid: bundleUuid, + BundleProfile: datatypes.JSON(j), + ValueAddService: datatypes.JSON(vJ), + Operator: operator, + OperatorId: operatorId, } if err := tx.Create(history).Error; err != nil { return errors.New("保存套餐历史记录失败: " + err.Error()) diff --git a/internal/logic/valueAddBundleLogic.go b/internal/logic/valueAddBundleLogic.go index ca6447b..ebc6261 100644 --- a/internal/logic/valueAddBundleLogic.go +++ b/internal/logic/valueAddBundleLogic.go @@ -258,6 +258,9 @@ func SaveValueAddService(in *bundle.ValueAddServiceLang) (res *bundle.SaveRespon } } else { // 已存在,进行更新 + if err := saveValueAddServiceHistory(tx, in.Uuid); err != nil { + return res, err + } //中文状态下,更新主表和语言表 if in.Language == msg.ZH_CN { updateService := map[string]interface{}{ @@ -294,9 +297,6 @@ func SaveValueAddService(in *bundle.ValueAddServiceLang) (res *bundle.SaveRespon if err := dao.UpdateValueAddServiceLang(tx, updateLangService); err != nil { return res, err } - if err := saveValueAddServiceHistory(tx, in.Uuid); err != nil { - return res, err - } res.Uuid = in.Uuid res.Msg = "保存成功" res.CancelNum = cancelNum @@ -412,11 +412,11 @@ func ValueAddServiceDetail(req *bundle.ValueAddServiceDetailRequest) (res *bundl func saveValueAddServiceHistory(tx *gorm.DB, uuid string) (err error) { // 保存历史记录 - data, err := dao.GetBundleDetailByUuid(uuid) + data, err := dao.GetValueAddServiceDetailByUuid(tx, uuid) if err != nil { return errors.New("查询增值服务详情失败: " + err.Error()) } - j, err := json.MarshalIndent(data, "", " ") + j, err := json.Marshal(data) if err != nil { return errors.New("json转换失败: " + err.Error()) } diff --git a/internal/model/bundle.go b/internal/model/bundle.go index 3e31c65..86217a2 100644 --- a/internal/model/bundle.go +++ b/internal/model/bundle.go @@ -52,14 +52,15 @@ type BundleToValueAddService struct { // todo套餐修改历史 type BundleProfileHistory struct { - Id int32 `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"` - Uuid string `json:"uuid" gorm:"column:uuid;type:varchar(1024);comment:UUID"` - BundleProfile datatypes.JSON `json:"bundleProfile" gorm:"column:bundle_profile;type:json;comment:套餐信息"` - Operator string `json:"operator" gorm:"column:operator;type:varchar(1024);comment:操作人"` - OperatorId uint64 `json:"operatorId" gorm:"column:operator_id;type:int;comment:操作人ID"` - CreatedAt int64 `gorm:"column:created_at;autoCreateTime"` - UpdatedAt int64 `gorm:"column:updated_at;autoCreateTime"` - DeletedAt soft_delete.DeletedAt + Id int32 `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"` + Uuid string `json:"uuid" gorm:"column:uuid;type:varchar(1024);comment:UUID"` + BundleProfile datatypes.JSON `json:"bundleProfile" gorm:"column:bundle_profile;type:json;comment:套餐信息"` + ValueAddService datatypes.JSON `json:"valueAddService" gorm:"column:value_add_service;type:json;comment:增值服务信息"` + Operator string `json:"operator" gorm:"column:operator;type:varchar(1024);comment:操作人"` + OperatorId uint64 `json:"operatorId" gorm:"column:operator_id;type:int;comment:操作人ID"` + CreatedAt int64 `gorm:"column:created_at;autoCreateTime"` + UpdatedAt int64 `gorm:"column:updated_at;autoCreateTime"` + DeletedAt soft_delete.DeletedAt } func (m *BundleProfile) TableName() string {