feat: sam_stat P2 도메인 + 통계 API + 대시보드 전환 (Phase 4)
- 4.1: stat_project_monthly + ProjectStatService (건설/프로젝트 월간) - 4.2: stat_system_daily + SystemStatService (API/감사/FCM/파일/결재) - 4.3: stat_events, stat_snapshots + StatEventService + StatEventObserver - 4.4: StatController (summary/daily/monthly/alerts) + StatQueryService + FormRequest 3개 + routes/stats.php - 4.5: DashboardService sam_stat 우선 조회 + 원본 DB 폴백 패턴 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Models\Stats\Monthly\StatFinanceMonthly;
|
||||
use App\Models\Stats\Monthly\StatSalesMonthly;
|
||||
use App\Models\Tenants\Approval;
|
||||
use App\Models\Tenants\ApprovalStep;
|
||||
use App\Models\Tenants\Attendance;
|
||||
@@ -114,23 +116,36 @@ private function getTodaySummary(int $tenantId, Carbon $today): array
|
||||
}
|
||||
|
||||
/**
|
||||
* 재무 요약 데이터
|
||||
* 재무 요약 데이터 (sam_stat 우선, 폴백: 원본 DB)
|
||||
*/
|
||||
private function getFinanceSummary(int $tenantId, Carbon $startOfMonth, Carbon $endOfMonth): array
|
||||
{
|
||||
// 월간 입금 합계
|
||||
// sam_stat 월간 데이터 시도
|
||||
$monthly = StatFinanceMonthly::where('tenant_id', $tenantId)
|
||||
->where('stat_year', $startOfMonth->year)
|
||||
->where('stat_month', $startOfMonth->month)
|
||||
->first();
|
||||
|
||||
if ($monthly) {
|
||||
return [
|
||||
'monthly_deposit' => (float) $monthly->deposit_amount,
|
||||
'monthly_withdrawal' => (float) $monthly->withdrawal_amount,
|
||||
'balance' => (float) ($monthly->deposit_amount - $monthly->withdrawal_amount),
|
||||
'source' => 'sam_stat',
|
||||
];
|
||||
}
|
||||
|
||||
// 폴백: 원본 DB 실시간 집계
|
||||
$monthlyDeposit = Deposit::query()
|
||||
->where('tenant_id', $tenantId)
|
||||
->whereBetween('deposit_date', [$startOfMonth, $endOfMonth])
|
||||
->sum('amount');
|
||||
|
||||
// 월간 출금 합계
|
||||
$monthlyWithdrawal = Withdrawal::query()
|
||||
->where('tenant_id', $tenantId)
|
||||
->whereBetween('withdrawal_date', [$startOfMonth, $endOfMonth])
|
||||
->sum('amount');
|
||||
|
||||
// 현재 잔액 (전체 입금 - 전체 출금)
|
||||
$totalDeposits = Deposit::query()
|
||||
->where('tenant_id', $tenantId)
|
||||
->sum('amount');
|
||||
@@ -145,21 +160,35 @@ private function getFinanceSummary(int $tenantId, Carbon $startOfMonth, Carbon $
|
||||
'monthly_deposit' => (float) $monthlyDeposit,
|
||||
'monthly_withdrawal' => (float) $monthlyWithdrawal,
|
||||
'balance' => (float) $balance,
|
||||
'source' => 'samdb',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 매출/매입 요약 데이터
|
||||
* 매출/매입 요약 데이터 (sam_stat 우선, 폴백: 원본 DB)
|
||||
*/
|
||||
private function getSalesSummary(int $tenantId, Carbon $startOfMonth, Carbon $endOfMonth): array
|
||||
{
|
||||
// 월간 매출 합계
|
||||
// sam_stat 월간 데이터 시도
|
||||
$monthly = StatSalesMonthly::where('tenant_id', $tenantId)
|
||||
->where('stat_year', $startOfMonth->year)
|
||||
->where('stat_month', $startOfMonth->month)
|
||||
->first();
|
||||
|
||||
if ($monthly) {
|
||||
return [
|
||||
'monthly_sales' => (float) $monthly->sales_amount,
|
||||
'monthly_purchases' => 0,
|
||||
'source' => 'sam_stat',
|
||||
];
|
||||
}
|
||||
|
||||
// 폴백: 원본 DB 실시간 집계
|
||||
$monthlySales = Sale::query()
|
||||
->where('tenant_id', $tenantId)
|
||||
->whereBetween('sale_date', [$startOfMonth, $endOfMonth])
|
||||
->sum('total_amount');
|
||||
|
||||
// 월간 매입 합계
|
||||
$monthlyPurchases = Purchase::query()
|
||||
->where('tenant_id', $tenantId)
|
||||
->whereBetween('purchase_date', [$startOfMonth, $endOfMonth])
|
||||
@@ -168,6 +197,7 @@ private function getSalesSummary(int $tenantId, Carbon $startOfMonth, Carbon $en
|
||||
return [
|
||||
'monthly_sales' => (float) $monthlySales,
|
||||
'monthly_purchases' => (float) $monthlyPurchases,
|
||||
'source' => 'samdb',
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user