Merge branch 'sxy' into dev
This commit is contained in:
commit
cba59941cb
@ -276,7 +276,17 @@ func TxCreateBundleLang(tx *gorm.DB, req *model.BundleProfileLang) (err error) {
|
||||
func TxUpdateBundle(tx *gorm.DB, uuid string, columns map[string]interface{}) (err error) {
|
||||
err = tx.Model(&model.BundleProfile{}).Where("uuid =?", uuid).Updates(columns).Error
|
||||
if err != nil {
|
||||
return commonErr.ReturnError(err, msg.ErrorUpdateBundleInfo, "更新套餐信息失败: ")
|
||||
return commonErr.ReturnError(err, msg.ErrorUpdateBundleInfo, "更新套餐信息失败")
|
||||
}
|
||||
return
|
||||
}
|
||||
func TxUpdateBundles(tx *gorm.DB, uuids []string, columns map[string]interface{}) (err error) {
|
||||
if len(uuids) == 0 {
|
||||
return nil
|
||||
}
|
||||
err = tx.Model(&model.BundleProfile{}).Where("uuid IN (?)", uuids).Updates(columns).Error
|
||||
if err != nil {
|
||||
return commonErr.ReturnError(err, msg.ErrorUpdateBundleInfo, "更新套餐信息失败")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
@ -87,21 +87,20 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error)
|
||||
if req.Uuid == "" && req.Language != msg.ZH_CN {
|
||||
return res, errors.New("请先创建中文版本套餐")
|
||||
}
|
||||
var existValueService = make(map[string]string)
|
||||
if req.Uuid != "" {
|
||||
valueService, existErr := dao.GetValueAddServiceUuidsByBundleUuid(req.Uuid)
|
||||
if existErr != nil {
|
||||
return res, errors.New("查询增值服务失败")
|
||||
}
|
||||
if valueService != nil && len(valueService) > 0 {
|
||||
for _, v := range valueService {
|
||||
existValueService[v] = v
|
||||
}
|
||||
}
|
||||
}
|
||||
var cancelValueAddService = make(map[string]string)
|
||||
// var existValueService = make(map[string]string)
|
||||
// if req.Uuid != "" {
|
||||
// valueService, existErr := dao.GetValueAddServiceUuidsByBundleUuid(req.Uuid)
|
||||
// if existErr != nil {
|
||||
// return res, errors.New("查询增值服务失败")
|
||||
// }
|
||||
// if valueService != nil && len(valueService) > 0 {
|
||||
// for _, v := range valueService {
|
||||
// existValueService[v] = v
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
selectService := make([]*model.BundleToValueAddService, 0)
|
||||
var selectValueAddServiceCount = make(map[int]struct{})
|
||||
var selectValueAddServiceCount = make(map[int]struct{}) //增值服务类型数量
|
||||
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)
|
||||
@ -112,23 +111,6 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error)
|
||||
return res, errors.New("查询增值服务失败")
|
||||
}
|
||||
}
|
||||
if detail.PriceType != req.PriceType {
|
||||
if req.Uuid == "" {
|
||||
//中文套餐创建时,币种不一致直接返回错误
|
||||
return res, errors.New("所选增值服务币种与套餐币种不一致")
|
||||
} else {
|
||||
//更新时,判断是否已存在,存在则取消关联
|
||||
_, ok := existValueService[v.ValueAddUuid]
|
||||
if ok {
|
||||
cancelValueAddService[v.ValueAddUuid] = detail.ServiceName
|
||||
continue
|
||||
} else {
|
||||
//币种不一致,新加币种时返回错误
|
||||
return res, errors.New("所选增值服务币种与套餐币种不一致")
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
if _, exists := selectValueAddServiceCount[int(detail.ServiceType)]; exists {
|
||||
return res, errors.New("每种增值服务类型只可选择一个")
|
||||
}
|
||||
@ -150,9 +132,6 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error)
|
||||
_, err = dao.BundleDetailByUuidAndLanguage(req.Uuid, req.Language)
|
||||
if err != nil {
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
// if req.Uuid != "" {
|
||||
// return res, errors.New("套餐不存在")
|
||||
// }
|
||||
if req.Language != msg.ZH_CN {
|
||||
_, err = dao.BundleDetailByUuidAndLanguage(req.Uuid, msg.ZH_CN)
|
||||
if err != nil {
|
||||
@ -180,36 +159,26 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error)
|
||||
return res, errors.New("保存套餐与增值服务关联失败")
|
||||
}
|
||||
}
|
||||
} else {
|
||||
bundleLang.UUID = req.Uuid
|
||||
res.Uuid = req.Uuid
|
||||
valueUuid, err1 := dao.GetValueAddServiceUuidsByBundleUuid(bundleLang.UUID)
|
||||
if err1 != nil {
|
||||
return res, err1
|
||||
}
|
||||
count := 0
|
||||
if valueUuid != nil && len(valueUuid) > 0 {
|
||||
for _, v := range valueUuid {
|
||||
//可以改成批量获取
|
||||
valueDetail, err2 := dao.ValueAddServiceDetailByUuidAndLanguage(v, req.Language)
|
||||
if err2 != nil {
|
||||
return res, errors.New("查询增值服务失败")
|
||||
}
|
||||
if valueDetail.PriceType != req.PriceType {
|
||||
if err = tx.Where("bundle_uuid =? AND value_uid =?", bundleLang.UUID, v).Delete(&model.BundleToValueAddService{}).Error; err != nil {
|
||||
return res, errors.New("删除套餐与增值服务关联失败")
|
||||
}
|
||||
count++
|
||||
}
|
||||
}
|
||||
}
|
||||
res.CancelNum = int64(count)
|
||||
}
|
||||
if err = dao.TxCreateBundleLang(tx, bundleLang); err != nil {
|
||||
return res, errors.New("创建套餐信息失败")
|
||||
}
|
||||
}
|
||||
langList := []string{msg.ZH_TW, msg.EN, msg.DE_DE, msg.JA_JP}
|
||||
for _, lang := range langList {
|
||||
otherLang := &model.BundleProfileLang{
|
||||
UUID: bundleLang.UUID,
|
||||
Name: bundleLang.Name,
|
||||
Content: bundleLang.Content,
|
||||
Price: bundleLang.Price,
|
||||
PriceType: bundleLang.PriceType,
|
||||
}
|
||||
otherLang.Language = lang
|
||||
if err = dao.TxCreateBundleLang(tx, otherLang); err != nil {
|
||||
return res, errors.New("创建套餐信息失败")
|
||||
}
|
||||
}
|
||||
res.Msg = "创建套餐信息成功"
|
||||
return res, nil
|
||||
return
|
||||
} else {
|
||||
return
|
||||
}
|
||||
@ -219,16 +188,7 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error)
|
||||
if saveErr := saveBundleHistory(tx, req.Uuid, "", 0); saveErr != nil {
|
||||
return res, saveErr
|
||||
}
|
||||
|
||||
if req.Language == msg.ZH_CN {
|
||||
if len(cancelValueAddService) > 0 {
|
||||
for _, v := range cancelValueAddService {
|
||||
if err = tx.Where("bundle_uuid = ? AND value_uid = ?", req.Uuid, v).Delete(&model.BundleToValueAddService{}).Error; err != nil {
|
||||
return res, errors.New("删除套餐与增值服务关联失败")
|
||||
}
|
||||
}
|
||||
}
|
||||
res.CancelNum = int64(len(cancelValueAddService))
|
||||
updateBundle := map[string]interface{}{
|
||||
"name": req.Name,
|
||||
"sort": req.Sort,
|
||||
@ -243,40 +203,11 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error)
|
||||
if err = dao.TxUpdateBundle(tx, req.Uuid, updateBundle); err != nil {
|
||||
return res, errors.New("更新套餐信息失败")
|
||||
}
|
||||
// 更新中间表函数
|
||||
//更新中间表函数
|
||||
if err = diffUpdateBundleToValueAddService(tx, req.Uuid, selectService); err != nil {
|
||||
tx.Rollback()
|
||||
return res, errors.New("更新套餐与增值服务关联失败")
|
||||
}
|
||||
} else {
|
||||
//更新其他语言时 先获取所有关联增值服务,判断币种是否一致,不一致则取消关联
|
||||
valueAddService, err := dao.GetBundleToValueAddServiceByBundleUuid(req.Uuid)
|
||||
if err != nil {
|
||||
return res, errors.New("查询套餐与增值服务关联失败")
|
||||
}
|
||||
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, errors.New("查询增值服务失败")
|
||||
}
|
||||
}
|
||||
if detail.PriceType != req.PriceType {
|
||||
cancelValueService[v.ValueUid] = detail.ServiceName
|
||||
continue
|
||||
}
|
||||
}
|
||||
if int64(len(cancelValueService)) > 0 {
|
||||
for k, _ := range cancelValueService {
|
||||
if err = tx.Where("bundle_uuid = ? AND value_uid = ?", req.Uuid, k).Delete(&model.BundleToValueAddService{}).Error; err != nil {
|
||||
return res, errors.New("删除套餐与增值服务关联失败")
|
||||
}
|
||||
}
|
||||
res.CancelNum = int64(len(cancelValueService))
|
||||
}
|
||||
}
|
||||
updateBundleLang := map[string]interface{}{
|
||||
"name": req.Name,
|
||||
@ -287,13 +218,9 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error)
|
||||
if err = dao.TxUpdateBundleLang(tx, req.Uuid, req.Language, updateBundleLang); err != nil {
|
||||
return res, errors.New("更新套餐信息失败")
|
||||
}
|
||||
|
||||
res.Uuid = req.Uuid
|
||||
res.Msg = "保存成功"
|
||||
}
|
||||
if res.CancelNum > 0 {
|
||||
res.Msg = "币种已修改,已取消关联部分增值服务"
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
@ -409,6 +336,22 @@ func HandleShelf(req *bundle.HandShelfRequest) (res *bundle.CommonResponse, err
|
||||
if req.ShelfStatus != 1 && req.ShelfStatus != 2 {
|
||||
return res, errors.New("状态值无效")
|
||||
}
|
||||
bundleDetailLangs, err := dao.GetBundleLangsByUuid(req.Uuid)
|
||||
if err != nil {
|
||||
return res, errors.New("查询套餐失败")
|
||||
}
|
||||
var langToPriceType = make(map[string]int64)
|
||||
for _, bundleLang := range bundleDetailLangs {
|
||||
langToPriceType[bundleLang.Language] = bundleLang.PriceType
|
||||
}
|
||||
tx := app.ModuleClients.BundleDB.Begin()
|
||||
defer func() {
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
} else {
|
||||
tx.Commit()
|
||||
}
|
||||
}()
|
||||
if req.ShelfStatus == 1 {
|
||||
valueAddUuids, err := dao.GetValueAddServiceUuidsByBundleUuid(req.Uuid)
|
||||
if err != nil {
|
||||
@ -429,6 +372,20 @@ func HandleShelf(req *bundle.HandShelfRequest) (res *bundle.CommonResponse, err
|
||||
if !isExist {
|
||||
return res, errors.New("缺失可用时长服务类型")
|
||||
}
|
||||
//校验币种
|
||||
valueAddServices, err := dao.BatchValueAddServiceDetailTx(tx, valueAddUuids)
|
||||
if err != nil {
|
||||
return res, errors.New("查询增值服务详情失败")
|
||||
}
|
||||
for _, valueAddService := range valueAddServices {
|
||||
if valueAddService.ValueAddServiceLang != nil && len(valueAddService.ValueAddServiceLang) > 0 {
|
||||
for _, lang := range valueAddService.ValueAddServiceLang {
|
||||
if langToPriceType[lang.Language] != lang.PriceType {
|
||||
return res, errors.New("所选增值服务币种与套餐币种不一致")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
res, err = dao.HandShelf(req.Uuid, req.ShelfStatus)
|
||||
|
@ -246,7 +246,7 @@ func SaveValueAddService(in *bundle.ValueAddServiceLang) (res *bundle.SaveRespon
|
||||
return res, errors.New("保存增值服务失败")
|
||||
}
|
||||
}
|
||||
langList := []string{msg.ZH_TW, msg.EN, msg.DE_DE, msg.JS_JP}
|
||||
langList := []string{msg.ZH_TW, msg.EN, msg.DE_DE, msg.JA_JP}
|
||||
for _, lang := range langList {
|
||||
otherLang := model.ValueAddServiceLang{
|
||||
UUID: valueAddServiceLang.UUID,
|
||||
@ -286,21 +286,6 @@ func SaveValueAddService(in *bundle.ValueAddServiceLang) (res *bundle.SaveRespon
|
||||
return res, errors.New("更新增值服务失败")
|
||||
}
|
||||
}
|
||||
// 查找所有与该增值服务关联的套餐,若币种不一致则取消关联并统计
|
||||
var cancelNum int64 = 0
|
||||
bundleToValueAddList, _ := dao.GetBundleToValueAddServiceByValueUid(in.Uuid)
|
||||
for _, rel := range bundleToValueAddList {
|
||||
bundleProfile, _ := dao.BundleDetailByUuidAndLanguage(rel.BundleUuid, in.Language)
|
||||
if bundleProfile != nil && bundleProfile.PriceType != in.PriceType {
|
||||
dao.DeleteBundleToValueAddService(tx, rel.BundleUuid, in.Uuid)
|
||||
cancelNum++
|
||||
}
|
||||
if err := dao.TxUpdateBundle(tx, rel.BundleUuid, map[string]interface{}{
|
||||
"updated_at": time.Now(),
|
||||
}); err != nil {
|
||||
return res, errors.New("同步更新套餐失败")
|
||||
}
|
||||
}
|
||||
//更新语言表
|
||||
updateLangService := map[string]interface{}{
|
||||
"uuid": in.Uuid,
|
||||
@ -316,12 +301,24 @@ func SaveValueAddService(in *bundle.ValueAddServiceLang) (res *bundle.SaveRespon
|
||||
if err := dao.UpdateValueAddServiceLang(tx, updateLangService); err != nil {
|
||||
return res, errors.New("更新增值服务失败")
|
||||
}
|
||||
res.Uuid = in.Uuid
|
||||
res.CancelNum = cancelNum
|
||||
res.Msg = "保存成功"
|
||||
data, err := dao.GetBundleToValueAddServiceByValueUid(in.Uuid)
|
||||
if err != nil {
|
||||
return res, errors.New("获取套餐信息失败")
|
||||
}
|
||||
if res.CancelNum > 0 {
|
||||
res.Msg = "币种已修改,已取消关联部分套餐"
|
||||
bundleUuids := []string{}
|
||||
if data != nil && len(data) > 0 {
|
||||
for _, bundle := range data {
|
||||
bundleUuids = append(bundleUuids, bundle.BundleUuid)
|
||||
}
|
||||
}
|
||||
columns := map[string]interface{}{
|
||||
"updated_at": time.Now(),
|
||||
}
|
||||
if err = dao.TxUpdateBundles(tx, bundleUuids, columns); err != nil {
|
||||
return res, errors.New("更新套餐信息失败")
|
||||
}
|
||||
res.Uuid = in.Uuid
|
||||
res.Msg = "保存成功"
|
||||
}
|
||||
return
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ type BundleProfileLang struct {
|
||||
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:美元"`
|
||||
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(中繁英德日)"`
|
||||
Language string `json:"language" gorm:"column:language;type:varchar(32);comment:套餐语言 zh-CN zh-TW EN de-DE ja-JP(中繁英德日)"`
|
||||
CreatedAt int64 `gorm:"column:created_at;autoCreateTime"`
|
||||
UpdatedAt int64 `gorm:"column:updated_at;autoCreateTime"`
|
||||
DeletedAt soft_delete.DeletedAt
|
||||
|
@ -53,7 +53,7 @@ type ValueAddServiceLang struct {
|
||||
OriginalPrice float32 `json:"originalPrice" gorm:"column:original_price;type:decimal(12,2);comment:原单价"`
|
||||
TotalPrice float32 `json:"totalPrice" gorm:"column:total_price;type:decimal(12,2);comment:增值服务总价"`
|
||||
Unit string `json:"unit" gorm:"column:unit;type:varchar(50);comment:单位 1:个 2:条 3:天 4:月 5:年"`
|
||||
Language string `json:"language" gorm:"column:language;type:varchar(32);comment:套餐语言 zh-CN zh-TW EN de-DE js-JP(中繁英德日)"`
|
||||
Language string `json:"language" gorm:"column:language;type:varchar(32);comment:套餐语言 zh-CN zh-TW EN de-DE ja-JP(中繁英德日)"`
|
||||
PriceType int64 `json:"priceType" gorm:"column:price_type;type:int;comment:币种 1:人民币 2:美元 3:日元 4:欧元"`
|
||||
Options PriceOptions `gorm:"column:options;type:json" json:"options"`
|
||||
CreatedAt int64 `gorm:"column:created_at;autoCreateTime"`
|
||||
|
@ -15,7 +15,7 @@ const (
|
||||
ZH_TW = "zh-TW" //繁体中文
|
||||
EN = "EN" //英文
|
||||
DE_DE = "de-DE" //德语
|
||||
JS_JP = "js-JP" //日语
|
||||
JA_JP = "ja-JP" //日语
|
||||
)
|
||||
|
||||
const (
|
||||
|
Loading…
Reference in New Issue
Block a user