diff --git a/internal/dao/bundleDao.go b/internal/dao/bundleDao.go
index d6fcf90..1b1e9bf 100644
--- a/internal/dao/bundleDao.go
+++ b/internal/dao/bundleDao.go
@@ -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
 }
diff --git a/internal/logic/bundleLogic.go b/internal/logic/bundleLogic.go
index 9447e66..e5f81e1 100644
--- a/internal/logic/bundleLogic.go
+++ b/internal/logic/bundleLogic.go
@@ -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
+				if err = dao.TxCreateBundleLang(tx, bundleLang); err != nil {
+					return res, errors.New("创建套餐信息失败")
 				}
-				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)
diff --git a/internal/logic/valueAddBundleLogic.go b/internal/logic/valueAddBundleLogic.go
index 5d350e2..553bc0c 100644
--- a/internal/logic/valueAddBundleLogic.go
+++ b/internal/logic/valueAddBundleLogic.go
@@ -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,13 +301,25 @@ func SaveValueAddService(in *bundle.ValueAddServiceLang) (res *bundle.SaveRespon
 		if err := dao.UpdateValueAddServiceLang(tx, updateLangService); err != nil {
 			return res, errors.New("更新增值服务失败")
 		}
+		data, err := dao.GetBundleToValueAddServiceByValueUid(in.Uuid)
+		if err != nil {
+			return res, errors.New("获取套餐信息失败")
+		}
+		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.CancelNum = cancelNum
 		res.Msg = "保存成功"
 	}
-	if res.CancelNum > 0 {
-		res.Msg = "币种已修改,已取消关联部分套餐"
-	}
 	return
 }
 
diff --git a/internal/model/bundle.go b/internal/model/bundle.go
index 6b1138b..85e8334 100644
--- a/internal/model/bundle.go
+++ b/internal/model/bundle.go
@@ -35,7 +35,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
diff --git a/internal/model/valueAdd_bundle.go b/internal/model/valueAdd_bundle.go
index e0874f0..e0553ee 100644
--- a/internal/model/valueAdd_bundle.go
+++ b/internal/model/valueAdd_bundle.go
@@ -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"`
diff --git a/pkg/msg/msg.go b/pkg/msg/msg.go
index 0980870..fb80c42 100644
--- a/pkg/msg/msg.go
+++ b/pkg/msg/msg.go
@@ -15,7 +15,7 @@ const (
 	ZH_TW = "zh-TW" //繁体中文
 	EN    = "EN"    //英文
 	DE_DE = "de-DE" //德语
-	JS_JP = "js-JP" //日语
+	JA_JP = "ja-JP" //日语
 )
 
 const (