diff --git a/data/invoice.pdf b/data/invoice.pdf new file mode 100644 index 0000000..65dde03 Binary files /dev/null and b/data/invoice.pdf differ diff --git a/pkg/service/bundle/bundleMetrics.go b/pkg/service/bundle/bundleMetrics.go index 6c6e9a2..d5b93f2 100644 --- a/pkg/service/bundle/bundleMetrics.go +++ b/pkg/service/bundle/bundleMetrics.go @@ -394,8 +394,8 @@ func MetricsBalanceDetailExport(ctx *gin.Context) { MonthlyNewIncreaseVideoNumber int32 BundleVideoConsumptionNumber int32 IncreaseVideoConsumptionNumber int32 - BundleVideoUsedPrice float32 - IncreaseVideoUsedPrice float32 + BundleVideoUsedPrice decimal.Decimal + IncreaseVideoUsedPrice decimal.Decimal } items := lo.Map(resp.Data, func(item *bundle.BundleBalanceExportItem, _ int) itemStruct { payTime, _ := time.Parse(time.DateTime, item.PayTime) @@ -418,8 +418,8 @@ func MetricsBalanceDetailExport(ctx *gin.Context) { MonthlyNewIncreaseVideoNumber: item.MonthlyIncreaseVideoNumber, BundleVideoConsumptionNumber: item.BundleVideoConsumptionNumber, IncreaseVideoConsumptionNumber: item.IncreaseVideoConsumptionNumber, - BundleVideoUsedPrice: float32(item.BundleVideoConsumptionNumber) * item.BundleVideoUnitPrice, - IncreaseVideoUsedPrice: float32(item.IncreaseVideoConsumptionNumber) * item.IncreaseVideoUnitPrice, + BundleVideoUsedPrice: decimal.NewFromInt32(item.BundleVideoConsumptionNumber).Mul(decimal.NewFromFloat(float64(item.BundleVideoUnitPrice))), + IncreaseVideoUsedPrice: decimal.NewFromInt32(item.IncreaseVideoConsumptionNumber).Mul(decimal.NewFromFloat(float64(item.IncreaseVideoUnitPrice))), } }) @@ -432,8 +432,8 @@ func MetricsBalanceDetailExport(ctx *gin.Context) { sumTotal := decimal.Zero for _, i := range items { - sumBundle = sumBundle.Add(decimal.NewFromFloat(float64(i.BundleVideoUsedPrice))) - sumIncrease = sumIncrease.Add(decimal.NewFromFloat(float64(i.IncreaseVideoUsedPrice))) + sumBundle = sumBundle.Add(i.BundleVideoUsedPrice) + sumIncrease = sumIncrease.Add(i.IncreaseVideoUsedPrice) } sumTotal = sumBundle.Add(sumIncrease) @@ -644,6 +644,12 @@ func exportStructToExcel[T any](data []T, headers []string, filename string, exp var cellValue any switch field.Kind() { + case reflect.Struct: + if field.Type() == reflect.TypeOf(decimal.Decimal{}) { + cellValue = "$" + field.Interface().(decimal.Decimal).StringFixed(2) + } else { + cellValue = field.Interface() + } case reflect.Float32, reflect.Float64: cellValue = fmt.Sprintf("$%.2f", field.Float()) // 保留两位小数 default: