diff --git a/internal/dao/bundleDao.go b/internal/dao/bundleDao.go index 2cfb36a..b47146d 100644 --- a/internal/dao/bundleDao.go +++ b/internal/dao/bundleDao.go @@ -276,6 +276,7 @@ func BundleDetailV2(req *bundle.BundleDetailRequest) (res *bundle.BundleDetailRe if err != nil { return res, commonErr.ReturnError(err, msg.ErrorGetBundleInfo, "获取增值服务信息失败: ") } + //if valueAddService.IsDisplay{} ValueAddServiceLang := &bundle.ValueAddServiceLang{ Uuid: valueAddDeatilData.UUID, ServiceName: valueAddDeatilData.ServiceName, diff --git a/internal/logic/bundleLogic.go b/internal/logic/bundleLogic.go index a75df87..0fb18ca 100644 --- a/internal/logic/bundleLogic.go +++ b/internal/logic/bundleLogic.go @@ -80,7 +80,6 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) Language: req.Language, } if req.Uuid == "" && req.Language != msg.ZH_CN { - res.Msg = "请先创建中文版本套餐" return res, errors.New("请先创建中文版本套餐") } var existValueService = make(map[string]string) @@ -100,7 +99,6 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) if req.Language == msg.ZH_CN && req.SelectValueAddService != nil && len(req.SelectValueAddService) > 0 { for _, v := range req.SelectValueAddService { detail, checkErr := dao.ValueAddServiceDetailByUuidAndLanguage(v.ValueAddUuid, req.Language) - fmt.Println("detail", detail) if checkErr != nil { if checkErr == gorm.ErrRecordNotFound { return res, errors.New(fmt.Sprintf("所选增值服务[%s]%s版不存在,请先创建对应增值套餐", v.ServiceName, req.Language)) @@ -110,13 +108,16 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) } if detail.PriceType != req.PriceType { if req.Uuid == "" { + //中文套餐创建时,币种不一致直接返回错误 return res, errors.New(fmt.Sprintf("所选增值服务[%s]%s币种与套餐币种不一致", detail.ServiceName, req.Language)) } else { + //更新时,判断是否已存在,存在则取消关联 _, ok := existValueService[v.ValueAddUuid] if ok { cancelValueAddService[v.ValueAddUuid] = detail.ServiceName continue } else { + //币种不一致,新加币种时返回错误 return res, errors.New(fmt.Sprintf("所选增值服务[%s]%s币种与套餐币种不一致", detail.ServiceName, req.Language)) } @@ -151,14 +152,6 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) } } if req.Language == msg.ZH_CN { - if len(cancelValueAddService) > 0 { - cancel := "以下增值服务:" - for _, v := range cancelValueAddService { - cancel += fmt.Sprintf("[%s]%s", v, req.Language) - } - cancel += "版币种与套餐币种不一致" - return res, errors.New(cancel) - } bundleProfile.UUID = utils.GetUUID() if err = dao.TxCreateBundle(tx, bundleProfile); err != nil { return res, errors.New("保存中文语言套餐失败: " + err.Error()) @@ -184,6 +177,7 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) count := 0 if valueUuid != nil && len(valueUuid) > 0 { for _, v := range valueUuid { + //可以改成批量获取 valueDetail, err2 := dao.ValueAddServiceDetailByUuidAndLanguage(v, req.Language) if err2 != nil { return res, err2 @@ -206,8 +200,13 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) } else { return } - } else { - // 已存在,进行更新 + } else { // 已存在,进行更新 + + // 更新前保存历史记录 + // if err = dao.CreateBundleProfileHistory(tx,req.Uuid); err != nil { + // return res, errors.New("保存套餐历史记录失败: " + err.Error()) + // } + if req.Language == msg.ZH_CN { if len(cancelValueAddService) > 0 { cancel := "以下增值服务:" @@ -238,6 +237,39 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) tx.Rollback() return res, err } + } else { + //更新其他语言时 先获取所有关联增值服务,判断币种是否一致,不一致则取消关联 + valueAddService, err := dao.GetBundleToValueAddServiceByBundleUuid(req.Uuid) + if err != nil { + return res, err + } + cancelValueService := make(map[string]string) + for _, v := range valueAddService { + detail, checkErr := dao.ValueAddServiceDetailByUuidAndLanguage(v.ValueUid, req.Language) + if checkErr != nil { + if checkErr == gorm.ErrRecordNotFound { + continue + } else { + return res, checkErr + } + } + if detail.PriceType != req.PriceType { + cancelValueService[v.ValueUid] = detail.ServiceName + continue + } + } + if int64(len(cancelValueService)) > 0 { + cancel := "以下增值服务:" + for k, v := range cancelValueService { + cancel += fmt.Sprintf("[%s]%s", v, req.Language) + if err = tx.Where("bundle_uuid = ? AND value_uid = ?", req.Uuid, k).Delete(&model.BundleToValueAddService{}).Error; err != nil { + return res, errors.New("删除套餐与增值服务关联失败: " + err.Error()) + } + } + cancel += "版币种与套餐币种不一致,已取消相关关联" + res.Msg = "保存成功 " + cancel + res.CancelNum = int64(len(cancelValueService)) + } } updateBundleLang := map[string]interface{}{ "name": req.Name, @@ -248,39 +280,7 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) if err = dao.TxUpdateBundleLang(tx, req.Uuid, req.Language, updateBundleLang); err != nil { return res, err } - //更新时 先获取所有关联增值服务,判断币种是否一致,不一致则取消关联 - valueAddService, err := dao.GetBundleToValueAddServiceByBundleUuid(req.Uuid) - if err != nil { - return res, err - } - cancelValueService := make(map[string]string) - for _, v := range valueAddService { - detail, checkErr := dao.ValueAddServiceDetailByUuidAndLanguage(v.ValueUid, req.Language) - if checkErr != nil { - if checkErr == gorm.ErrRecordNotFound { - continue - } else { - return res, checkErr - } - } - if detail.PriceType != req.PriceType { - cancelValueService[v.ValueUid] = detail.ServiceName - continue - } - } - if int64(len(cancelValueService)) > 0 { - cancel := "以下增值服务:" - for k, v := range cancelValueService { - cancel += fmt.Sprintf("[%s]%s", v, req.Language) - if err = tx.Where("bundle_uuid = ? AND value_uid = ?", req.Uuid, k).Delete(&model.BundleToValueAddService{}).Error; err != nil { - return res, errors.New("删除套餐与增值服务关联失败: " + err.Error()) - } - } - cancel += "版币种与套餐币种不一致,已取消相关关联" - res.Msg = "保存成功 " + cancel - res.CancelNum = int64(len(cancelValueService)) - } res.Uuid = req.Uuid if res.Msg == "" { res.Msg = "保存成功" @@ -297,11 +297,11 @@ func BundleListV2(req *bundle.BundleListRequest) (res *bundle.BundleListResponse func BundleDetailV2(req *bundle.BundleDetailRequest) (res *bundle.BundleDetailResponseV2, err error) { res = new(bundle.BundleDetailResponseV2) if req.Uuid == "" { - res.Msg = "uuid不能为空" + res.Msg = "" return res, errors.New("uuid不能为空") } if req.Language == "" { - res.Msg = "language不能为空" + res.Msg = "" return res, errors.New("language不能为空") } res, err = dao.BundleDetailV2(req) @@ -314,8 +314,8 @@ func BundleDetailV2(req *bundle.BundleDetailRequest) (res *bundle.BundleDetailRe func HandShelf(req *bundle.HandShelfRequest) (res *bundle.CommonResponse, err error) { res = new(bundle.CommonResponse) if req.ShelfStatus != 1 && req.ShelfStatus != 2 { - res.Msg = "非法的上下架状态" - return res, errors.New("非法的上下架状态") + res.Msg = "" + return res, errors.New("无效的上下架状态") } res, err = dao.HandShelf(req.Uuid, req.ShelfStatus) return diff --git a/internal/model/bundle.go b/internal/model/bundle.go index 99807bb..7b04afc 100644 --- a/internal/model/bundle.go +++ b/internal/model/bundle.go @@ -10,7 +10,7 @@ type BundleProfile struct { UUID string `json:"uuid" gorm:"column:uuid;type:varchar(1024);comment:套餐UUID"` Name string `json:"name" gorm:"column:name;type:varchar(2048);comment:套餐名称"` Price float32 `json:"price" gorm:"column:price;type:decimal(12,2);comment:套餐价格"` - PriceType int64 `json:"priceType" gorm:"column:price_type;type:int;comment:套餐价格类型 1:人民币 2:美元"` + PriceType int64 `json:"priceType" gorm:"column:price_type;type:int;comment:套餐类型 1:人民币 2:美元"` Contract string `json:"contract" gorm:"type:varchar(1024);comment:合同"` ContractDuration int `json:"contractDuration" gorm:"column:contract_duration;type:int;comment:合同有效时长"` Content string `json:"content" gorm:"column:content;type:text;comment:套餐内容"` @@ -18,19 +18,19 @@ type BundleProfile struct { Language string `json:"language" gorm:"column:language;type:varchar(32);comment:套餐语言 zh-CN EN"` BundleCommonUid string `json:"bundleCommonUid" gorm:"column:bundle_common_uid;type:varchar(1024);comment:套餐公共ID"` - Sort int64 `json:"sort" gorm:"column:sort;type:int;comment:套餐排序"` //数字越小越靠前,同大小后创建优先 - ShelfStatus int64 `json:"shelfStatus" gorm:"column:shelf_status;type:int;default:2;comment:上架状态 1:上架 2:下架"` - BgImg1 string `json:"bgImg1" gorm:"column:bg_img1;type:varchar(1024);comment:背景图-首页"` - BgImg2 string `json:"bgImg2" gorm:"column:bg_img2;type:varchar(1024);comment:背景图-我的"` - //SelectAddService BundleSelectAddServicess `json:"selectAddService" gorm:"column:select_add_service;type:json;comment:已选增值服务"` - BundleProfileLang []BundleProfileLang `gorm:"foreignKey:UUID;references:UUID" json:"bundleProfileLang"` + Sort int64 `json:"sort" gorm:"column:sort;type:int;comment:套餐排序"` //数字越小越靠前,同大小后创建优先 + ShelfStatus int64 `json:"shelfStatus" gorm:"column:shelf_status;type:int;default:2;comment:上架状态 1:上架 2:下架"` + BgImg1 string `json:"bgImg1" gorm:"column:bg_img1;type:varchar(1024);comment:背景图-首页"` + BgImg2 string `json:"bgImg2" gorm:"column:bg_img2;type:varchar(1024);comment:背景图-我的"` + BundleToValueAddService []BundleToValueAddService `gorm:"foreignKey:BundleUuid;references:UUID" json:"bundleToValueAddService"` + BundleProfileLang []BundleProfileLang `gorm:"foreignKey:UUID;references:UUID" json:"bundleProfileLang"` } type BundleProfileLang 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"` Name string `json:"name" gorm:"column:name;type:varchar(2048);comment:套餐名称"` Price float32 `json:"price" gorm:"column:price;type:decimal(12,2);comment:套餐价格"` - PriceType int64 `json:"priceType" gorm:"column:price_type;type:int;comment:套餐价格类型 1:人民币 2:美元"` + PriceType int64 `json:"priceType" gorm:"column:price_type;type:int;comment:套餐类型 1:人民币 2:美元"` Content string `json:"content" gorm:"column:content;type:text;comment:套餐内容"` Language string `json:"language" gorm:"column:language;type:varchar(32);comment:套餐语言 zh-CN zh-TW EN de-DE js-JP(中繁英德日)"` CreatedAt int64 `gorm:"column:created_at;autoCreateTime"` @@ -49,27 +49,16 @@ type BundleToValueAddService struct { DeletedAt soft_delete.DeletedAt } -// type BundleSelectAddServicess []*BundleSelectAddService -// type BundleSelectAddService struct { -// ValueUid string `json:"valueUid" gorm:"column:value_uid;type:varchar(1024);comment:增值服务UUID"` -// ServiceName string `json:"serviceName" gorm:"column:service_name;type:varchar(1024);comment:增值服务名称"` -// IsDisplay bool `json:"isDisplay" gorm:"column:is_display;type:tinyint(1);comment:是否显示 0:不显示 1:显示"` -// } +// 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 BundleProfile `gorm:"foreignKey:Uuid;references:UUID" json:"bundleProfile"` + CreatedAt int64 `gorm:"column:created_at;autoCreateTime"` + UpdatedAt int64 `gorm:"column:updated_at;autoCreateTime"` + DeletedAt soft_delete.DeletedAt +} -// // 实现 driver.Valuer 接口 -// func (o BundleSelectAddServicess) Value() (driver.Value, error) { -// return json.Marshal(o) -// } - -// // 实现 sql.Scanner 接口 -// -// func (o *BundleSelectAddServicess) Scan(value interface{}) error { -// bytes, ok := value.([]byte) -// if !ok { -// return errors.New("type assertion to []byte failed") -// } -// return json.Unmarshal(bytes, o) -// } func (m *BundleProfile) TableName() string { return "bundle_profile" } @@ -79,3 +68,6 @@ func (m *BundleProfileLang) TableName() string { func (m *BundleToValueAddService) TableName() string { return "bundle_to_value_add_service" } +func (m *BundleProfileHistory) TableName() string { + return "bundle_profile_history" +} diff --git a/internal/model/valueAdd_bundle.go b/internal/model/valueAdd_bundle.go index e21286e..7fc496f 100644 --- a/internal/model/valueAdd_bundle.go +++ b/internal/model/valueAdd_bundle.go @@ -30,14 +30,15 @@ type ValueAddBundleProfile struct { // 新增值套餐主表 type ValueAddService 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"` - ServiceName string `json:"serviceName" gorm:"column:service_name;type:varchar(1024);comment:增值服务名称"` - ServiceType int32 `json:"serviceType" gorm:"column:service_type;type:int;comment:服务类型 1:视频 2:图文 3:数据报表 4:账号数 5:可用时长"` - ValueAddServiceLang []ValueAddServiceLang `gorm:"foreignKey:UUID;references:UUID"` - 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"` + ServiceName string `json:"serviceName" gorm:"column:service_name;type:varchar(1024);comment:增值服务名称"` + ServiceType int32 `json:"serviceType" gorm:"column:service_type;type:int;comment:服务类型 1:视频 2:图文 3:数据报表 4:账号数 5:可用时长"` + ValueAddServiceLang []ValueAddServiceLang `gorm:"foreignKey:UUID;references:UUID"` + BundleToValueAddService []BundleToValueAddService `gorm:"foreignKey:ValueUid;references:UUID"` + CreatedAt int64 `gorm:"column:created_at;autoCreateTime"` + UpdatedAt int64 `gorm:"column:updated_at;autoCreateTime"` + DeletedAt soft_delete.DeletedAt } // 新增值套餐语言表