Files
edu/admin/bbs/notification_send.php
T

109 lines
3.8 KiB
PHP

<?php
require __DIR__ . '/../../bbs/db_conn.php';
header('Content-Type: application/json; charset=utf-8');
// PDO 연결 생성
$pdo = db_conn();
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
echo json_encode(['success' => false, 'message' => '잘못된 요청입니다.']);
exit;
}
$code = isset($_POST['code']) ? trim($_POST['code']) : '';
$endDate = isset($_POST['end_date']) ? trim($_POST['end_date']) : '';
$action = isset($_POST['action']) ? trim($_POST['action']) : 'count'; // 'count' 또는 'send'
if ($code === '' || !in_array($code, ['100', '200', '900'])) {
echo json_encode(['success' => false, 'message' => '잘못된 코드입니다.']);
exit;
}
//$typeCode = 'AL100' . str_pad($code, 3, '0', STR_PAD_LEFT) . '0';
$typeCode = 'AL100' . $code;
try {
// 대상 사용자 조회
if ($code === '100') {
// 미수료자: 법정교육 콘텐츠를 수강해야 하지만 학습 이력이 없는 사용자
$userStmt = $pdo->prepare("
SELECT u.member_id, u.name, u.sys_comp_code
FROM edu_contents a
CROSS JOIN edu_users u
WHERE a.category_code = 'CA10003' -- 법정교육 카테고리
AND a.base_year = YEAR(NOW()) -- 기준년도
AND a.is_active = '1' -- 콘텐츠 활성 여부
AND NOT EXISTS (
SELECT 1 FROM edu_learning_histories b
WHERE b.content_id = a.content_id -- 콘텐츠ID
AND b.member_id = u.member_id -- 사용자ID
AND b.sys_comp_code = u.sys_comp_code -- 사영여부
AND b.completed_at is not null -- 학습완료일시
)
GROUP BY u.member_id, u.name, u.sys_comp_code
");
} else {
// 법정교육 안내 및 전체 공지: 활성 사용자
$userStmt = $pdo->prepare("
SELECT member_id, name, sys_comp_code
FROM edu_users
WHERE (end_date IS NULL OR end_date > CURDATE())
");
}
$userStmt->execute();
$users = $userStmt->fetchAll(PDO::FETCH_ASSOC);
$userCount = count($users);
// 대상자 수만 반환하는 경우
if ($action === 'count') {
echo json_encode(['success' => true, 'count' => $userCount]);
exit;
}
// 실제 알람 발송
$pdo->beginTransaction();
// 법정교육 기간 정보 조회 (메시지 치환용)
$periodStmt = $pdo->prepare("SELECT start_date, end_date FROM edu_contents WHERE category_code = 'CA10003' AND base_year = YEAR(NOW()) LIMIT 1");
$periodStmt->execute();
$period = $periodStmt->fetch(PDO::FETCH_ASSOC);
$startDate = $period['start_date'] ?? '';
$periodEndDate = $period['end_date'] ?? '';
// 기본 메시지 조회
$msgStmt = $pdo->prepare("SELECT desc01 FROM edu_codes WHERE group_code = 'AL100' AND code = :code");
$msgStmt->execute([':code' => $code]);
$baseMessage = $msgStmt->fetchColumn();
foreach ($users as $user) {
// seq 최대값 +1
$seqStmt = $pdo->prepare("SELECT COALESCE(MAX(seq), 0) + 1 FROM edu_notifications WHERE member_id = :mid");
$seqStmt->execute([':mid' => $user['member_id']]);
$seq = $seqStmt->fetchColumn();
// 메시지 치환
$message = str_replace(
['{학습자명}', '{시작일}', '{종료일}'],
[$user['name'], $startDate, $periodEndDate],
$baseMessage
);
// 알람 저장
$insStmt = $pdo->prepare("INSERT INTO edu_notifications (member_id, corp_code, seq, type_code, message, sent_at, end_date) VALUES (:mid, :corp, :seq, :type, :msg, NOW(), :end)");
$insStmt->execute([
':mid' => $user['member_id'],
':corp' => $user['sys_comp_code'],
':seq' => $seq,
':type' => $typeCode,
':msg' => $message,
':end' => $endDate
]);
}
$pdo->commit();
echo json_encode(['success' => true, 'count' => $userCount]);
} catch (PDOException $e) {
$pdo->rollBack();
echo json_encode(['success' => false, 'message' => 'DB 에러: ' . $e->getMessage()]);
}
exit;