feat:解决冲突

This commit is contained in:
jiaji.H 2025-09-04 11:41:12 +08:00
commit e5d4e80e19
8 changed files with 1930 additions and 1798 deletions

View File

@ -115,9 +115,27 @@ func UpdateValueAddServiceLang(tx *gorm.DB, columns map[string]interface{}) (err
// 增值套餐列表 // 增值套餐列表
func ValueAddServiceList(req *bundle.ValueAddServiceListRequest) (res []*model.ValueAddService, total int64, err error) { func ValueAddServiceList(req *bundle.ValueAddServiceListRequest) (res []*model.ValueAddService, total int64, err error) {
query := app.ModuleClients.BundleDB.Model(&model.ValueAddService{}). query := app.ModuleClients.BundleDB.Model(&model.ValueAddService{}).
Where("deleted_at = 0"). Where("deleted_at = 0")
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") // 使用子查询筛选符合条件的UUID
if req.Name != "" || req.ServiceType != 0 {
subQuery := app.ModuleClients.BundleDB.Model(&model.ValueAddServiceLang{}).
Select("uuid").
Where("deleted_at = 0")
if req.Name != "" {
subQuery = subQuery.Where("service_name LIKE ?", "%"+req.Name+"%")
}
if req.ServiceType != 0 {
subQuery = subQuery.Where("service_type = ?", req.ServiceType)
}
query = query.Where("uuid IN (?)", subQuery)
}
// 预加载语言表数据
query = query.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,quota_type,quota_value,is_expired")
}) })
count := *query count := *query

View File

@ -198,6 +198,9 @@ func SaveValueAddService(in *bundle.ValueAddServiceLang) (res *bundle.SaveRespon
Language: in.Language, Language: in.Language,
PriceType: in.PriceType, PriceType: in.PriceType,
Options: options, Options: options,
QuotaType: in.QuotaType,
QuotaValue: in.QuotaValue,
IsExpired: in.IsExpired,
} }
if in.Uuid == "" && in.Language != msg.ZH_CN { if in.Uuid == "" && in.Language != msg.ZH_CN {
return res, errors.New("请先创建中文版本增值服务") return res, errors.New("请先创建中文版本增值服务")
@ -259,6 +262,9 @@ func SaveValueAddService(in *bundle.ValueAddServiceLang) (res *bundle.SaveRespon
Language: lang, Language: lang,
PriceType: valueAddServiceLang.PriceType, PriceType: valueAddServiceLang.PriceType,
Options: valueAddServiceLang.Options, Options: valueAddServiceLang.Options,
QuotaType: valueAddServiceLang.QuotaType,
QuotaValue: valueAddServiceLang.QuotaValue,
IsExpired: valueAddServiceLang.IsExpired,
} }
otherLang.Language = lang otherLang.Language = lang
if err = dao.CreateValueAddServiceLang(tx, &otherLang); err != nil { if err = dao.CreateValueAddServiceLang(tx, &otherLang); err != nil {
@ -297,6 +303,9 @@ func SaveValueAddService(in *bundle.ValueAddServiceLang) (res *bundle.SaveRespon
"price_type": in.PriceType, "price_type": in.PriceType,
"options": options, "options": options,
"language": in.Language, "language": in.Language,
"quota_type": in.QuotaType,
"quota_value": in.QuotaValue,
"is_expired": in.IsExpired,
} }
if err := dao.UpdateValueAddServiceLang(tx, updateLangService); err != nil { if err := dao.UpdateValueAddServiceLang(tx, updateLangService); err != nil {
return res, errors.New("更新增值服务失败") return res, errors.New("更新增值服务失败")
@ -331,6 +340,8 @@ func ValueAddServiceList(req *bundle.ValueAddServiceListRequest) (res *bundle.Va
return res, errors.New("查询增值服务列表失败") return res, errors.New("查询增值服务列表失败")
} }
for _, valueAddService := range list { for _, valueAddService := range list {
var quotaInfo string
var isExpired bool
serviceInfo := &bundle.ValueAddService{ serviceInfo := &bundle.ValueAddService{
Uuid: valueAddService.UUID, Uuid: valueAddService.UUID,
ServiceName: valueAddService.ServiceName, ServiceName: valueAddService.ServiceName,
@ -348,6 +359,28 @@ func ValueAddServiceList(req *bundle.ValueAddServiceListRequest) (res *bundle.Va
Language: serviceLang.Language, Language: serviceLang.Language,
CreatedAt: time.Unix(serviceLang.CreatedAt, 0).Format("2006-01-02 15:04:05"), CreatedAt: time.Unix(serviceLang.CreatedAt, 0).Format("2006-01-02 15:04:05"),
UpdatedAt: time.Unix(serviceLang.UpdatedAt, 0).Format("2006-01-02 15:04:05"), UpdatedAt: time.Unix(serviceLang.UpdatedAt, 0).Format("2006-01-02 15:04:05"),
QuotaType: serviceLang.QuotaType,
QuotaValue: serviceLang.QuotaValue,
IsExpired: serviceLang.IsExpired,
}
if serviceLangInfo.Language == "zh-CN" {
switch serviceLangInfo.QuotaType {
case 0:
quotaInfo = "不限额度"
case 1:
quotaInfo = fmt.Sprintf("每天%d个", serviceLangInfo.QuotaValue)
case 2:
quotaInfo = fmt.Sprintf("每月%d个", serviceLangInfo.QuotaValue)
case 3:
quotaInfo = fmt.Sprintf("每季度%d个", serviceLangInfo.QuotaValue)
case 4:
quotaInfo = fmt.Sprintf("每半年%d个", serviceLangInfo.QuotaValue)
case 5:
quotaInfo = fmt.Sprintf("每年%d个", serviceLangInfo.QuotaValue)
default:
quotaInfo = "不限额度"
}
isExpired = serviceLangInfo.IsExpired
} }
if len(serviceLang.Options) > 0 { if len(serviceLang.Options) > 0 {
var options []*bundle.ValueAddPriceOptions var options []*bundle.ValueAddPriceOptions
@ -377,6 +410,12 @@ func ValueAddServiceList(req *bundle.ValueAddServiceListRequest) (res *bundle.Va
serviceLangInfo.Options = options serviceLangInfo.Options = options
} }
serviceInfo.ServiceLang = append(serviceInfo.ServiceLang, serviceLangInfo) serviceInfo.ServiceLang = append(serviceInfo.ServiceLang, serviceLangInfo)
if quotaInfo != "" && serviceInfo.ServiceType != 5 {
serviceInfo.ServiceQuota = quotaInfo
serviceInfo.IsExpired = isExpired
} else {
return res, errors.New("额度信息获取错误")
}
} }
res.ValueAddServiceList = append(res.ValueAddServiceList, serviceInfo) res.ValueAddServiceList = append(res.ValueAddServiceList, serviceInfo)
} }
@ -445,6 +484,9 @@ func ValueAddServiceDetail(req *bundle.ValueAddServiceDetailRequest) (res *bundl
Options: langOptions, Options: langOptions,
CreatedAt: time.Unix(serviceLang.CreatedAt, 0).Format("2006-01-02 15:04:05"), CreatedAt: time.Unix(serviceLang.CreatedAt, 0).Format("2006-01-02 15:04:05"),
UpdatedAt: time.Unix(serviceLang.UpdatedAt, 0).Format("2006-01-02 15:04:05"), UpdatedAt: time.Unix(serviceLang.UpdatedAt, 0).Format("2006-01-02 15:04:05"),
QuotaType: serviceLang.QuotaType,
QuotaValue: serviceLang.QuotaValue,
IsExpired: serviceLang.IsExpired,
} }
serviceLangs = append(serviceLangs, serviceLangInfo) serviceLangs = append(serviceLangs, serviceLangInfo)
} }

View File

@ -52,13 +52,16 @@ type ValueAddServiceLang struct {
PriceMode int32 `json:"priceMode" gorm:"column:price_mode;type:int;comment:套餐价格类型 1:单价 2:总价"` PriceMode int32 `json:"priceMode" gorm:"column:price_mode;type:int;comment:套餐价格类型 1:单价 2:总价"`
OriginalPrice float32 `json:"originalPrice" gorm:"column:original_price;type:decimal(12,2);comment:原单价"` 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:增值服务总价"` 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:年"` Unit string `json:"unit" gorm:"column:unit;type:varchar(50);comment:单位 1:个 2:条 3:天 4:月 5:年 6:自然月 7:自然季度 8:半年 9:自然年"`
Language string `json:"language" gorm:"column:language;type:varchar(32);comment:套餐语言 zh-CN zh-TW EN de-DE ja-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:欧元"` PriceType int64 `json:"priceType" gorm:"column:price_type;type:int;comment:币种 1:人民币 2:美元 3:日元 4:欧元"`
Options PriceOptions `gorm:"column:options;type:json" json:"options"` Options PriceOptions `gorm:"column:options;type:json" json:"options"`
CreatedAt int64 `gorm:"column:created_at;autoCreateTime"` CreatedAt int64 `gorm:"column:created_at;autoCreateTime"`
UpdatedAt int64 `gorm:"column:updated_at;autoCreateTime"` UpdatedAt int64 `gorm:"column:updated_at;autoCreateTime"`
DeletedAt soft_delete.DeletedAt DeletedAt soft_delete.DeletedAt
QuotaType int32 `json:"quotaType" gorm:"column:quota_type;type:int;comment:额度类型 0:不限额度 1:每天限额度 2:每月限额度 3:每季度限额度 4:每半年限额度 5每年限额度"`
QuotaValue int32 `json:"quotaValue" gorm:"column:quota_value;type:int;comment:额度值"`
IsExpired bool `json:"isExpired" gorm:"column:is_expired;default:false;comment:是否过期作废 false:不作废 true:作废"`
} }
type ValueAddServiceHistory struct { type ValueAddServiceHistory struct {

View File

@ -512,21 +512,26 @@ message FinancialConfirmationRequest {
message ValueAddService { message ValueAddService {
string uuid = 1 [json_name = "uuid"]; string uuid = 1 [json_name = "uuid"];
string serviceName = 2 [json_name = "serviceName"]; // string serviceName = 2 [json_name = "serviceName"]; //
int32 serviceType = 3 [json_name = "serviceType"]; int32 serviceType = 3 [json_name = "serviceType"]; //
repeated ValueAddServiceLang serviceLang = 4 [json_name = "serviceLang"]; repeated ValueAddServiceLang serviceLang = 4 [json_name = "serviceLang"]; //
string serviceQuota = 5 [json_name = "serviceQuota"];//
bool isExpired = 6 [json_name = "isExpired"];//
} }
message ValueAddServiceLang { message ValueAddServiceLang {
string uuid = 1 [json_name = "uuid"]; string uuid = 1 [json_name = "uuid"];
string serviceName = 2 [json_name = "serviceName"]; // string serviceName = 2 [json_name = "serviceName"]; //
int32 serviceType = 3 [json_name = "serviceType"]; int32 serviceType = 3 [json_name = "serviceType"]; // 1: 2: 3: 4: 5:
int32 priceMode = 4 [json_name = "priceMode"]; int32 priceMode = 4 [json_name = "priceMode"]; // 1: 2:
string originalPrice = 5 [json_name = "originalPrice"]; string originalPrice = 5 [json_name = "originalPrice"];//
string unit = 6 [json_name = "unit"]; string unit = 6 [json_name = "unit"];// 1: 2: 3: 4: 5: 6: 7: 8: 9:
int64 priceType = 7 [json_name = "priceType"]; int64 priceType = 7 [json_name = "priceType"];// 1: 2: 3: 4:
string language = 8 [json_name = "language"]; string language = 8 [json_name = "language"];// zh-CN zh-TW EN de-DE ja-JP()
string createdAt = 9 [json_name = "createdAt"]; string createdAt = 9 [json_name = "createdAt"];
string updatedAt = 10 [json_name = "updatedAt"]; string updatedAt = 10 [json_name = "updatedAt"];
repeated ValueAddPriceOptions options = 12 [json_name = "options"]; repeated ValueAddPriceOptions options = 11 [json_name = "options"];
int32 quotaType = 12 [json_name = "quotaType"]; // 0 1 2 3 4 5
int32 quotaValue = 13 [json_name = "quotaValue"]; //
bool isExpired = 14 [json_name = "isExpired"]; // false true
} }
// //
message ValueAddPriceOptions { message ValueAddPriceOptions {
@ -541,8 +546,9 @@ message ValueAddPriceOptions {
message ValueAddServiceListRequest { message ValueAddServiceListRequest {
int32 page = 1 [json_name = "page"]; int32 page = 1 [json_name = "page"];
int32 pageSize = 2 [json_name = "pageSize"]; int32 pageSize = 2 [json_name = "pageSize"];
string name = 3 [json_name = "name"]; string name = 3 [json_name = "name"]; //
string language = 4 [json_name = "language"]; int32 serviceType = 4 [json_name = "serviceType"]; //
string language = 5 [json_name = "language"]; // (使)
} }
message ValueAddServiceListResponse { message ValueAddServiceListResponse {
int32 total = 1 [json_name = "total"]; int32 total = 1 [json_name = "total"];

File diff suppressed because it is too large Load Diff

View File

@ -7,8 +7,8 @@ import (
fmt "fmt" fmt "fmt"
math "math" math "math"
proto "github.com/golang/protobuf/proto" proto "github.com/golang/protobuf/proto"
_ "google.golang.org/protobuf/types/descriptorpb"
_ "github.com/mwitkow/go-proto-validators" _ "github.com/mwitkow/go-proto-validators"
_ "google.golang.org/protobuf/types/descriptorpb"
github_com_mwitkow_go_proto_validators "github.com/mwitkow/go-proto-validators" github_com_mwitkow_go_proto_validators "github.com/mwitkow/go-proto-validators"
) )

View File

@ -1,7 +1,7 @@
// Code generated by protoc-gen-go-triple. DO NOT EDIT. // Code generated by protoc-gen-go-triple. DO NOT EDIT.
// versions: // versions:
// - protoc-gen-go-triple v1.0.8 // - protoc-gen-go-triple v1.0.5
// - protoc v3.21.1 // - protoc v5.26.0
// source: pb/bundle.proto // source: pb/bundle.proto
package bundle package bundle

3
protocBundle.bat Normal file
View File

@ -0,0 +1,3 @@
@echo off
protoc -I . -I ./pb --proto_path=./pb --go_out=./pb --go-triple_out=./pb --govalidators_out=./pb ./pb/bundle.proto
.\clear.sh