136 lines
4.1 KiB
Markdown
136 lines
4.1 KiB
Markdown
|
|
# 利润统计API成本计入说明
|
|||
|
|
|
|||
|
|
## 修改内容
|
|||
|
|
|
|||
|
|
在后台统计面板的利润统计部分,将API调用成本计入成本计算中。
|
|||
|
|
|
|||
|
|
## 修改位置
|
|||
|
|
|
|||
|
|
文件:`ycc-proxy-server/app/main/api/internal/logic/admin_dashboard/admingetdashboardstatisticslogic.go`
|
|||
|
|
|
|||
|
|
方法:`calculateProfitStatistics`
|
|||
|
|
|
|||
|
|
## 修改详情
|
|||
|
|
|
|||
|
|
### 1. 今日利润计算
|
|||
|
|
|
|||
|
|
**修改前:**
|
|||
|
|
```go
|
|||
|
|
// 今日利润 = 营收 - 佣金 - 返利 - 税务成本 + 提现收税
|
|||
|
|
stats.TodayProfit = todayRevenue - todayCommission - todayRebate - todayCompanyTax + todayTaxIncome
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**修改后:**
|
|||
|
|
```go
|
|||
|
|
// 今日API调用成本
|
|||
|
|
todayApiCost := 0.0
|
|||
|
|
if l.svcCtx.TianyuanapiCallLogService != nil {
|
|||
|
|
todayApiStats, err := l.svcCtx.TianyuanapiCallLogService.GetStatistics(l.ctx, service.StatisticsFilter{
|
|||
|
|
StartDate: todayStart,
|
|||
|
|
EndDate: todayEnd,
|
|||
|
|
})
|
|||
|
|
if err != nil {
|
|||
|
|
logx.Errorf("获取今日API调用成本失败: %v", err)
|
|||
|
|
} else {
|
|||
|
|
todayApiCost = todayApiStats.TotalCost
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// 今日利润 = 营收 - 佣金 - 返利 - 税务成本 - API调用成本 + 提现收税
|
|||
|
|
stats.TodayProfit = todayRevenue - todayCommission - todayRebate - todayCompanyTax - todayApiCost + todayTaxIncome
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 当月利润计算
|
|||
|
|
|
|||
|
|
**修改前:**
|
|||
|
|
```go
|
|||
|
|
// 当月利润
|
|||
|
|
stats.MonthProfit = monthRevenue - monthCommission - monthRebate - monthCompanyTax + monthTaxIncome
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**修改后:**
|
|||
|
|
```go
|
|||
|
|
// 当月API调用成本
|
|||
|
|
monthApiCost := 0.0
|
|||
|
|
if l.svcCtx.TianyuanapiCallLogService != nil {
|
|||
|
|
monthApiStats, err := l.svcCtx.TianyuanapiCallLogService.GetStatistics(l.ctx, service.StatisticsFilter{
|
|||
|
|
StartDate: monthStart,
|
|||
|
|
EndDate: monthEnd,
|
|||
|
|
})
|
|||
|
|
if err != nil {
|
|||
|
|
logx.Errorf("获取当月API调用成本失败: %v", err)
|
|||
|
|
} else {
|
|||
|
|
monthApiCost = monthApiStats.TotalCost
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// 当月利润
|
|||
|
|
stats.MonthProfit = monthRevenue - monthCommission - monthRebate - monthCompanyTax - monthApiCost + monthTaxIncome
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 总利润计算
|
|||
|
|
|
|||
|
|
**修改前:**
|
|||
|
|
```go
|
|||
|
|
// 总利润
|
|||
|
|
stats.TotalProfit = totalRevenue - totalCommission - totalRebate - totalCompanyTax + totalTaxIncome
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**修改后:**
|
|||
|
|
```go
|
|||
|
|
// 总API调用成本
|
|||
|
|
totalApiCost := 0.0
|
|||
|
|
if l.svcCtx.TianyuanapiCallLogService != nil {
|
|||
|
|
totalApiStats, err := l.svcCtx.TianyuanapiCallLogService.GetStatistics(l.ctx, service.StatisticsFilter{})
|
|||
|
|
if err != nil {
|
|||
|
|
logx.Errorf("获取总API调用成本失败: %v", err)
|
|||
|
|
} else {
|
|||
|
|
totalApiCost = totalApiStats.TotalCost
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// 总利润
|
|||
|
|
stats.TotalProfit = totalRevenue - totalCommission - totalRebate - totalCompanyTax - totalApiCost + totalTaxIncome
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 利润计算公式
|
|||
|
|
|
|||
|
|
修改后的利润计算公式为:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
利润 = 营收 - 佣金 - 返利 - 税务成本 - API调用成本 + 提现收税
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
其中:
|
|||
|
|
- **营收**:订单金额总和(status = 'paid')
|
|||
|
|
- **佣金**:代理佣金总和(status != 3)
|
|||
|
|
- **返利**:代理返利总和(status != 3)
|
|||
|
|
- **税务成本**:订单金额的 6%
|
|||
|
|
- **API调用成本**:天元API成功调用的成本总和(从 `tianyuanapi_call_log` 表统计)
|
|||
|
|
- **提现收税**:代理提现税总和(tax_status = 2)
|
|||
|
|
|
|||
|
|
## API调用成本统计说明
|
|||
|
|
|
|||
|
|
API调用成本通过 `TianyuanapiCallLogService.GetStatistics` 方法获取:
|
|||
|
|
|
|||
|
|
1. **今日API调用成本**:统计 `call_time >= todayStart AND call_time < todayEnd` 的成功调用成本
|
|||
|
|
2. **当月API调用成本**:统计 `call_time >= monthStart AND call_time < monthEnd` 的成功调用成本
|
|||
|
|
3. **总API调用成本**:统计所有成功调用的成本
|
|||
|
|
|
|||
|
|
**注意**:只有成功调用(`call_status = 1`)才会计入成本,失败调用不计成本。
|
|||
|
|
|
|||
|
|
## 错误处理
|
|||
|
|
|
|||
|
|
如果获取API调用成本失败,会记录错误日志,但不会影响利润计算(API成本默认为0),确保统计功能的稳定性。
|
|||
|
|
|
|||
|
|
## 依赖项
|
|||
|
|
|
|||
|
|
- `TianyuanapiCallLogService`:需要在 `servicecontext.go` 中初始化
|
|||
|
|
- `tianyuanapi_call_log` 表:需要已创建并包含调用记录数据
|
|||
|
|
|
|||
|
|
## 验证
|
|||
|
|
|
|||
|
|
修改完成后,可以通过以下方式验证:
|
|||
|
|
|
|||
|
|
1. 查看后台统计面板的利润统计数据
|
|||
|
|
2. 检查日志,确认API调用成本是否正确获取
|
|||
|
|
3. 对比修改前后的利润数据,确认API成本已正确计入
|
|||
|
|
|