diff --git a/app/Commands/NaverWorker.php b/app/Commands/NaverWorker.php index bf3a72e..83604af 100644 --- a/app/Commands/NaverWorker.php +++ b/app/Commands/NaverWorker.php @@ -40,16 +40,20 @@ class NaverWorker extends BaseCommand while (true) { - // 1. DB 연결 상태 체크 (더 견고하게) + // 1. DB 연결 상태 체크 try { - // connID가 없거나, 가벼운 쿼리 실행 실패 시 재연결 시도 - if ($this->db->connID === false || !$this->db->simpleQuery('SELECT 1')) { + // 연결이 없으면 재연결 시도 + if ($this->db->connID === false) { $this->db->reconnect(); CLI::write(CLI::color('🔄 Database reconnected.', 'yellow')); } } catch (\Throwable $e) { // 어떤 이유로든 에러 발생 시 재연결 시도 - $this->db->reconnect(); + try { + $this->db->reconnect(); + } catch (\Throwable $reconnectError) { + CLI::write(CLI::color('❌ Database reconnect failed: ' . $reconnectError->getMessage(), 'red')); + } } $result = $redis->brPop(['naver:raw_queue'], 30); diff --git a/app/Controllers/Results/Assign.php b/app/Controllers/Results/Assign.php index 00dc81c..4430976 100644 --- a/app/Controllers/Results/Assign.php +++ b/app/Controllers/Results/Assign.php @@ -31,6 +31,7 @@ class Assign extends BaseController { $start = (int) $this->request->getGet('start') ?: 0; $end = (int) $this->request->getGet('length') ?: 10; + $draw = (int) $this->request->getGet('draw') ?: 1; $data = [ 'bonbu' => $this->request->getGet('bonbu'), @@ -42,12 +43,18 @@ class Assign extends BaseController 'srchTxt' => $this->request->getGet('srchTxt'), ]; - $totalCount = $this->assignModel->getTotalCount($data); - - $datas = $this->assignModel->getUserList($start, $end, $data); + + // 첫 번째 행에서 total_count 추출 (없으면 0) + $totalCount = !empty($datas) ? (int)$datas[0]['total_count'] : 0; + + // 각 행에서 total_count 컬럼 제거 + foreach ($datas as &$row) { + unset($row['total_count']); + } return $this->response->setJSON(body: [ + 'draw' => $draw, 'recordsTotal' => $totalCount, 'recordsFiltered' => $totalCount, 'data' => $datas, diff --git a/app/Models/results/AssignModel.php b/app/Models/results/AssignModel.php index 7bf6f43..7afda02 100644 --- a/app/Models/results/AssignModel.php +++ b/app/Models/results/AssignModel.php @@ -99,10 +99,11 @@ class AssignModel extends Model public function getTotalCount($data) { $sql = "SELECT - COUNT(*) AS cnt + COUNT(DISTINCT b.usr_sq) AS cnt FROM result a INNER JOIN users b ON b.usr_sq = a.usr_sq - + INNER JOIN receipt d ON d.rcpt_sq = a.rcpt_sq + INNER JOIN departments c ON c.dept_sq = a.dept_sq WHERE 1=1 "; @@ -138,13 +139,13 @@ class AssignModel extends Model if (!empty($data['srchTxt'])) { if ($data['srchType'] === "1") { - $sql .= "AND usr_id like CONCAT('%', '{$data['srchTxt']}', '%' ) "; + $sql .= "AND b.usr_id like CONCAT('%', '{$data['srchTxt']}', '%' ) "; } else if ($data['srchType'] === "2") { - $sql .= "AND usr_nm like CONCAT('%', '{$data['srchTxt']}', '%' ) "; + $sql .= "AND b.usr_nm like CONCAT('%', '{$data['srchTxt']}', '%' ) "; } else { $sql .= "AND ( - usr_id like CONCAT('%', '{$data['srchTxt']}', '%' ) - OR usr_nm like CONCAT('%', '{$data['srchTxt']}', '%' ) + b.usr_id like CONCAT('%', '{$data['srchTxt']}', '%' ) + OR b.usr_nm like CONCAT('%', '{$data['srchTxt']}', '%' ) ) "; } } @@ -157,26 +158,31 @@ class AssignModel extends Model public function getUserList($start, $end, $data) { $sql = "SELECT - b.usr_nm, b.usr_id, b.usr_sq - , SUM(CASE WHEN a.rsrv_tm_hour IN ('00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24') THEN 1 ELSE 0 END) TODAY - , SUM(CASE WHEN a.rsrv_tm_ap = 'AM' AND a.rsrv_tm_hour = '09' THEN 1 ELSE 0 END) AM09 - , SUM(CASE WHEN a.rsrv_tm_ap = 'AM' AND a.rsrv_tm_hour = '10' THEN 1 ELSE 0 END) AM10 - , SUM(CASE WHEN a.rsrv_tm_ap = 'AM' AND a.rsrv_tm_hour = '11' THEN 1 ELSE 0 END) AM11 - , SUM(CASE WHEN a.rsrv_tm_ap = 'AM' AND a.rsrv_tm_hour = '12' THEN 1 ELSE 0 END) AM12 - , SUM(CASE WHEN a.rsrv_tm_ap = 'AM' AND a.rsrv_tm_hour IN ('00','01','02','03','04','05','06','07','08') THEN 1 ELSE 0 END) AMETC - , SUM(CASE WHEN a.rsrv_tm_ap = 'PM' AND a.rsrv_tm_hour IN ('01', '13') THEN 1 ELSE 0 END) PM01 - , SUM(CASE WHEN a.rsrv_tm_ap = 'PM' AND a.rsrv_tm_hour IN ('02', '14') THEN 1 ELSE 0 END) PM02 - , SUM(CASE WHEN a.rsrv_tm_ap = 'PM' AND a.rsrv_tm_hour IN ('03', '15') THEN 1 ELSE 0 END) PM03 - , SUM(CASE WHEN a.rsrv_tm_ap = 'PM' AND a.rsrv_tm_hour IN ('04', '16') THEN 1 ELSE 0 END) PM04 - , SUM(CASE WHEN a.rsrv_tm_ap = 'PM' AND a.rsrv_tm_hour IN ('05', '17') THEN 1 ELSE 0 END) PM05 - , SUM(CASE WHEN a.rsrv_tm_ap = 'PM' AND a.rsrv_tm_hour IN ('06', '18') THEN 1 ELSE 0 END) PM06 - , SUM(CASE WHEN a.rsrv_tm_ap = 'PM' AND a.rsrv_tm_hour IN ('07', '19') THEN 1 ELSE 0 END) PM07 - , SUM(CASE WHEN a.rsrv_tm_ap = 'PM' AND a.rsrv_tm_hour IN ('00','08','09','10','11','12','20','21','22','23','24') THEN 1 ELSE 0 END) PMETC - FROM result a - INNER JOIN users b ON b.usr_sq = a.usr_sq - + sub.*, + COUNT(*) OVER() as total_count + FROM ( + SELECT + b.usr_nm, b.usr_id, b.usr_sq + , SUM(CASE WHEN a.rsrv_tm_hour IN ('00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24') THEN 1 ELSE 0 END) TODAY + , SUM(CASE WHEN a.rsrv_tm_ap = 'AM' AND a.rsrv_tm_hour = '09' THEN 1 ELSE 0 END) AM09 + , SUM(CASE WHEN a.rsrv_tm_ap = 'AM' AND a.rsrv_tm_hour = '10' THEN 1 ELSE 0 END) AM10 + , SUM(CASE WHEN a.rsrv_tm_ap = 'AM' AND a.rsrv_tm_hour = '11' THEN 1 ELSE 0 END) AM11 + , SUM(CASE WHEN a.rsrv_tm_ap = 'AM' AND a.rsrv_tm_hour = '12' THEN 1 ELSE 0 END) AM12 + , SUM(CASE WHEN a.rsrv_tm_ap = 'AM' AND a.rsrv_tm_hour IN ('00','01','02','03','04','05','06','07','08') THEN 1 ELSE 0 END) AMETC + , SUM(CASE WHEN a.rsrv_tm_ap = 'PM' AND a.rsrv_tm_hour IN ('01', '13') THEN 1 ELSE 0 END) PM01 + , SUM(CASE WHEN a.rsrv_tm_ap = 'PM' AND a.rsrv_tm_hour IN ('02', '14') THEN 1 ELSE 0 END) PM02 + , SUM(CASE WHEN a.rsrv_tm_ap = 'PM' AND a.rsrv_tm_hour IN ('03', '15') THEN 1 ELSE 0 END) PM03 + , SUM(CASE WHEN a.rsrv_tm_ap = 'PM' AND a.rsrv_tm_hour IN ('04', '16') THEN 1 ELSE 0 END) PM04 + , SUM(CASE WHEN a.rsrv_tm_ap = 'PM' AND a.rsrv_tm_hour IN ('05', '17') THEN 1 ELSE 0 END) PM05 + , SUM(CASE WHEN a.rsrv_tm_ap = 'PM' AND a.rsrv_tm_hour IN ('06', '18') THEN 1 ELSE 0 END) PM06 + , SUM(CASE WHEN a.rsrv_tm_ap = 'PM' AND a.rsrv_tm_hour IN ('07', '19') THEN 1 ELSE 0 END) PM07 + , SUM(CASE WHEN a.rsrv_tm_ap = 'PM' AND a.rsrv_tm_hour IN ('00','08','09','10','11','12','20','21','22','23','24') THEN 1 ELSE 0 END) PMETC + FROM result a + INNER JOIN users b ON b.usr_sq = a.usr_sq + INNER JOIN receipt d ON d.rcpt_sq = a.rcpt_sq + INNER JOIN departments c ON c.dept_sq = a.dept_sq - WHERE 1=1 "; + WHERE 1=1 "; if (!empty($data['bonbu'])) { $sql .= "AND c.pdept_sq = {$data['bonbu']} "; @@ -210,20 +216,20 @@ class AssignModel extends Model if (!empty($data['srchTxt'])) { if ($data['srchType'] === "1") { - $sql .= "AND usr_id like CONCAT('%', '{$data['srchTxt']}', '%' ) "; + $sql .= "AND b.usr_id like CONCAT('%', '{$data['srchTxt']}', '%' ) "; } else if ($data['srchType'] === "2") { - $sql .= "AND usr_nm like CONCAT('%', '{$data['srchTxt']}', '%' ) "; + $sql .= "AND b.usr_nm like CONCAT('%', '{$data['srchTxt']}', '%' ) "; } else { $sql .= "AND ( - usr_id like CONCAT('%', '{$data['srchTxt']}', '%' ) - OR usr_nm like CONCAT('%', '{$data['srchTxt']}', '%' ) + b.usr_id like CONCAT('%', '{$data['srchTxt']}', '%' ) + OR b.usr_nm like CONCAT('%', '{$data['srchTxt']}', '%' ) ) "; } } - $sql .= "GROUP BY b.usr_id, b.usr_nm "; - - $sql .= "LIMIT {$start}, {$end}"; + $sql .= "GROUP BY b.usr_id, b.usr_nm + ) sub + LIMIT {$start}, {$end}"; $query = $this->db->query($sql); diff --git a/app/Views/pages/article/dept/lists.php b/app/Views/pages/article/dept/lists.php index d8cf303..725f41f 100644 --- a/app/Views/pages/article/dept/lists.php +++ b/app/Views/pages/article/dept/lists.php @@ -7,434 +7,370 @@ $usr_nm = session('usr_nm'); = $this->extend('layouts/main') ?> = $this->section('content') ?> + -