최초 커밋

This commit is contained in:
root
2026-07-23 16:15:57 +09:00
commit c8f5efb6b7
14652 changed files with 4812531 additions and 0 deletions
+444
View File
@@ -0,0 +1,444 @@
<?php
header('Content-Type: application/json; charset=UTF-8');
// ------------------------------
// DB 연결
// ------------------------------
$DB_HOST = "localhost";
$DB_NAME = "egbim";
$DB_USER = "egbim";
$DB_PASS = "baron3840!!";
try {
$pdo = new PDO(
"mysql:host={$DB_HOST};dbname={$DB_NAME};charset=utf8mb4",
$DB_USER,
$DB_PASS,
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]
);
} catch (Exception $e) {
echo json_encode([
"status" => "fail",
"message" => "DB 연결 실패: " . $e->getMessage()
]);
exit;
}
// ------------------------------
// 기준 연도
// ------------------------------
// $year = date("Y");
$START_YEAR = 2025;
$year = isset($_GET['year']) ? (int)$_GET['year'] : $START_YEAR;
if ($year < $START_YEAR) $year = $START_YEAR;
$yearStart = "{$year}-01-01";
$yearEnd = "{$year}-12-31";
// ------------------------------
// 연간 누적 판매수
// ------------------------------
$total_copy = $pdo->query("
SELECT COALESCE(SUM(quantity), 0)
FROM sales_results
WHERE sales_date BETWEEN '{$yearStart}' AND '{$yearEnd}'
")->fetchColumn();
// ------------------------------
// 연간 매출액
// ------------------------------
$total_amount = $pdo->query("
SELECT COALESCE(SUM(total_amount), 0)
FROM sales_results
WHERE sales_date BETWEEN '{$yearStart}' AND '{$yearEnd}'
")->fetchColumn();
// ------------------------------
// 월별 판매량 (그래프용)
// ------------------------------
$monthly_rows = $pdo->query("
SELECT MONTH(sales_date) AS m, SUM(quantity) AS qty
FROM sales_results
WHERE sales_date BETWEEN '{$yearStart}' AND '{$yearEnd}'
GROUP BY MONTH(sales_date)
ORDER BY m
")->fetchAll();
$monthly = array_fill(1, 12, 0);
foreach ($monthly_rows as $row) {
$monthly[(int)$row['m']] = (int)$row['qty'];
}
// ------------------------------
// 개인별 실적
// ------------------------------
$persons = $pdo->query("
SELECT m.emp_name, SUM(r.quantity) AS qty
FROM sales_results r
JOIN sales_members m
ON TRIM(TRAILING ')' FROM SUBSTRING_INDEX(r.emp_no, '(', -1)) = m.emp_no
WHERE r.sales_date BETWEEN '{$yearStart}' AND '{$yearEnd}'
GROUP BY r.emp_no
ORDER BY qty DESC
")->fetchAll();
// ------------------------------
// 업종별 판매 현황 (설계/교육/제작/감리/시공/기타)
// ------------------------------
$biz_rows = $pdo->query("
SELECT business_type, COUNT(*) AS cnt
FROM sales_clients
GROUP BY business_type
")->fetchAll();
$industry = [
"설계" => 0,
"교육" => 0,
"제작" => 0,
"감리" => 0,
"시공" => 0,
"기타" => 0
];
foreach ($biz_rows as $b) {
if (isset($industry[$b['business_type']])) {
$industry[$b['business_type']] = (int)$b['cnt'];
}
}
// ------------------------------
// 기관별 판매 현황 (공공기관/일반기업/교육기관/기타)
// ------------------------------
$org_rows = $pdo->query("
SELECT org_type, COUNT(*) AS cnt
FROM sales_clients
GROUP BY org_type
")->fetchAll();
$institution = [
"일반기업" => 0,
"교육기관" => 0,
"공공기관" => 0,
"기타" => 0
];
foreach ($org_rows as $o) {
if (isset($institution[$o['org_type']])) {
$institution[$o['org_type']] = (int)$o['cnt'];
}
}
// ------------------------------
// 전체 업체수 (거래처 수)
// ------------------------------
$client_count = $pdo->query("
SELECT COUNT(*)
FROM sales_clients
")->fetchColumn();
// ------------------------------
// 월 목표 & 달성률
// ------------------------------
$current_month = "{$year}-" . date("m"); // 연도 고정
// $target_qty = $pdo->query("
// SELECT COALESCE(target_qty, 0)
// FROM sales_targets
// WHERE target_month = '{$current_month}'
// LIMIT 1
// ")->fetchColumn();
$target_qty = $pdo->query("
SELECT COALESCE(SUM(target_qty), 0)
FROM sales_targets
WHERE target_month = '{$current_month}'
")->fetchColumn();
$month_sales = $pdo->query("
SELECT COALESCE(SUM(quantity), 0)
FROM sales_results
WHERE DATE_FORMAT(sales_date, '%Y-%m') = '{$current_month}'
")->fetchColumn();
$target_rate = ($target_qty > 0)
? round(($month_sales / $target_qty) * 100, 1)
: 0;
// ------------------------------
// 당월 매출액
// ------------------------------
$month_sales_amount = $pdo->query("
SELECT COALESCE(SUM(total_amount), 0)
FROM sales_results
WHERE DATE_FORMAT(sales_date, '%Y-%m') = '{$current_month}'
")->fetchColumn();
// ------------------------------
// 연간 목표 수량 (1~12월 target 합)
// ------------------------------
$yearly_target_qty = $pdo->query("
SELECT COALESCE(SUM(target_qty), 0)
FROM sales_targets
WHERE LEFT(target_month, 4) = '{$year}'
")->fetchColumn();
// ------------------------------
// 연간 목표 달성률
// ------------------------------
$yearly_rate = ($yearly_target_qty > 0)
? round(($total_copy / $yearly_target_qty) * 100, 1)
: 0;
// // ------------------------------
// // 🔥 [신규] 전월 대비 증감 계산
// // ------------------------------
// $prevMonthDate = strtotime("{$year}-" . date("m") . "-01 -1 month");
// $prev_month = date("Y-m", $prevMonthDate);
// // ⬇ 전월 판매수
// $prev_copy = $pdo->query("
// SELECT COALESCE(SUM(quantity), 0)
// FROM sales_results
// WHERE DATE_FORMAT(sales_date, '%Y-%m') = '{$prev_month}'
// ")->fetchColumn();
// // ⬇ 전월 판매액
// $prev_amount = $pdo->query("
// SELECT COALESCE(SUM(total_amount), 0)
// FROM sales_results
// WHERE DATE_FORMAT(sales_date, '%Y-%m') = '{$prev_month}'
// ")->fetchColumn();
// // ⬇ 전월 연간 목표 달성률 (전월까지 총합 / 연간 목표)
// $prev_year_copy = $pdo->query("
// SELECT COALESCE(SUM(quantity), 0)
// FROM sales_results
// WHERE sales_date >= '{$year}-01-01'
// AND sales_date < '{$prev_month}-01'
// ")->fetchColumn();
// $prev_rate = ($yearly_target_qty > 0)
// ? round(($prev_year_copy / $yearly_target_qty) * 100, 1)
// : 0;
// // ------------------------------
// // 🔥 [신규] 차이 계산
// // ------------------------------
// $diff_copy = $total_copy - $prev_year_copy;
// $diff_amount = $total_amount - $prev_amount;
// $diff_rate = $yearly_rate - $prev_rate;
// ------------------------------
// 🔥 [전월 대비] 기준 월 계산
// ------------------------------
$currentYm = "{$year}-" . date('m'); // 예: 2025-12
$prevYm = date('Y-m', strtotime("{$currentYm}-01 -1 month")); // 예: 2025-11
// ------------------------------
// 🔥 이번 달 (월 기준) 판매수 / 매출
// ------------------------------
$curr_copy = $pdo->query("
SELECT COALESCE(SUM(quantity), 0)
FROM sales_results
WHERE DATE_FORMAT(sales_date, '%Y-%m') = '{$currentYm}'
")->fetchColumn();
$curr_amount = $pdo->query("
SELECT COALESCE(SUM(total_amount), 0)
FROM sales_results
WHERE DATE_FORMAT(sales_date, '%Y-%m') = '{$currentYm}'
")->fetchColumn();
// ------------------------------
// 🔥 전월 (월 기준) 판매수 / 매출
// ------------------------------
$prev_copy = $pdo->query("
SELECT COALESCE(SUM(quantity), 0)
FROM sales_results
WHERE DATE_FORMAT(sales_date, '%Y-%m') = '{$prevYm}'
")->fetchColumn();
$prev_amount = $pdo->query("
SELECT COALESCE(SUM(total_amount), 0)
FROM sales_results
WHERE DATE_FORMAT(sales_date, '%Y-%m') = '{$prevYm}'
")->fetchColumn();
// ------------------------------
// 🔥 전월 대비 증감 (⭐ 핵심)
// ------------------------------
$diff_copy = $curr_copy - $prev_copy; // 예: 166 - 228 = -62
$diff_amount = $curr_amount - $prev_amount;
// ------------------------------
// 🔥 (선택) 달성률도 "월 기준"으로 비교
// ------------------------------
$curr_rate = ($yearly_target_qty > 0)
? round(($curr_copy / $yearly_target_qty) * 100, 1)
: 0;
$prev_rate = ($yearly_target_qty > 0)
? round(($prev_copy / $yearly_target_qty) * 100, 1)
: 0;
$diff_rate = round($curr_rate - $prev_rate, 1);
// ------------------------------
// 이번 달 주차별 판매량
// ------------------------------
$weekly = [
1 => 0,
2 => 0,
3 => 0,
4 => 0,
5 => 0
];
$rows = $pdo->query("
SELECT
CEIL(DAY(sales_date) / 7) AS week_no,
SUM(quantity) AS qty
FROM sales_results
WHERE sales_date BETWEEN '{$year}-" . date("m") . "-01'
AND LAST_DAY('{$year}-" . date("m") . "-01')
GROUP BY week_no
")->fetchAll();
foreach ($rows as $r) {
$week = (int)$r['week_no'];
if ($week >= 1 && $week <= 5) {
$weekly[$week] = (int)$r['qty'];
}
}
// ------------------------------
// 🔥 개인별 연간 실적
// ------------------------------
$members = $pdo->query("
SELECT DISTINCT emp_no, emp_name, position
FROM sales_members
")->fetchAll();
// 🔥 표시 순서를 강제 지정 (네가 원하는 순서)
$order = ["J01201", "223070"]; // 권혁진, 염승호
// 🔥 필요한 사람만 필터링
$members = array_filter($members, function($m) use ($order){
return in_array($m['emp_no'], $order);
});
// 🔥 강제 순서 정렬
usort($members, function($a, $b) use ($order) {
return array_search($a['emp_no'], $order) <=> array_search($b['emp_no'], $order);
});
$individual = [];
foreach ($members as $m) {
$emp_no = $m['emp_no'];
// 월별 판매량
$rows = $pdo->query("
SELECT MONTH(sales_date) AS m, SUM(quantity) AS qty
FROM sales_results
WHERE TRIM(TRAILING ')' FROM SUBSTRING_INDEX(emp_no, '(', -1)) = '{$emp_no}'
AND sales_date BETWEEN '{$yearStart}' AND '{$yearEnd}'
GROUP BY MONTH(sales_date)
ORDER BY m
")->fetchAll();
$monthly2 = array_fill(1, 12, 0);
foreach ($rows as $r) {
$monthly2[(int)$r['m']] = (int)$r['qty'];
}
$total2 = array_sum($monthly2);
$target2 = $pdo->query("
SELECT COALESCE(SUM(target_qty), 0)
FROM sales_targets
WHERE TRIM(TRAILING ')' FROM SUBSTRING_INDEX(emp_no, '(', -1)) = '{$emp_no}'
AND LEFT(target_month, 4) = '{$year}'
")->fetchColumn();
$rate2 = ($target2 > 0)
? round(($total2 / $target2) * 100, 1)
: 0;
$individual[] = [
"emp_no" => $emp_no,
"name" => $m['emp_name'],
"position" => $m['position'],
"monthly" => array_values($monthly2),
"total" => $total2,
"target_qty" => (int)$target2,
"rate" => $rate2
];
}
// 📌 이번달 YYYY-MM 구하기
$issueMonth = date("Y-m");
// 📌 이슈 불러오기
$stmt = $pdo->prepare("
SELECT issue_text
FROM sales_month_issues
WHERE issue_month = ?
LIMIT 1
");
$stmt->execute([$issueMonth]);
$issueText = $stmt->fetchColumn() ?: "";
// ------------------------------
// 최종 JSON 출력
// ------------------------------
echo json_encode([
"status" => "ok",
"year" => $year,
"issue_text" => $issueText,
// 연간 실적
"total_copy" => (int)$total_copy,
"total_amount" => (int)$total_amount,
"yearly_target_qty" => (int)$yearly_target_qty,
"yearly_rate" => $yearly_rate,
// 월별 그래프 데이터
"monthly" => $monthly,
// 개인별 / 업종별 / 기관별
"persons" => $persons,
"industry" => $industry,
"institution" => $institution,
"client_count" => (int)$client_count,
// 이번 달 목표
"target_qty" => (int)$target_qty,
"month_sales" => (int)$month_sales,
"target_rate" => $target_rate,
"month_sales_amount" => (int)$month_sales_amount,
//증감
"diff_copy" => $diff_copy,
"diff_amount" => $diff_amount,
"diff_rate" => $diff_rate,
"weekly" => $weekly,
"individual" => $individual,
], JSON_UNESCAPED_UNICODE);
?>