feat: 다수 기능 개선 - 순찰, 출근, 작업분석, 모바일 UI 등
- 순찰/점검 기능 개선 (zone-detail 페이지 추가) - 출근/근태 시스템 개선 (연차 조회, 근무현황) - 작업분석 대분류 그룹화 및 마이그레이션 스크립트 - 모바일 네비게이션 UI 추가 - NAS 배포 도구 및 문서 추가 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,774 @@
|
||||
-- MariaDB dump 10.19 Distrib 10.9.8-MariaDB, for debian-linux-gnu (aarch64)
|
||||
--
|
||||
-- Host: localhost Database: hyungi_dev
|
||||
-- ------------------------------------------------------
|
||||
-- Server version 10.9.8-MariaDB-1:10.9.8+maria~ubu2204
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||
/*!40101 SET NAMES utf8mb4 */;
|
||||
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
||||
/*!40103 SET TIME_ZONE='+00:00' */;
|
||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||
|
||||
--
|
||||
-- Table structure for table `daily_work_reports`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `daily_work_reports`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `daily_work_reports` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`report_date` date NOT NULL COMMENT '작업 날짜',
|
||||
`worker_id` int(11) NOT NULL COMMENT '작업자 ID',
|
||||
`project_id` int(11) NOT NULL COMMENT '프로젝트 ID',
|
||||
`work_type_id` int(11) NOT NULL COMMENT '작업 유형 ID',
|
||||
`work_status_id` int(11) DEFAULT 1 COMMENT '업무 상태 ID (1:정규, 2:에러)',
|
||||
`error_type_id` int(11) DEFAULT NULL COMMENT '에러 유형 ID (에러일 때만)',
|
||||
`work_hours` decimal(4,2) NOT NULL COMMENT '작업 시간',
|
||||
`created_at` timestamp NOT NULL DEFAULT current_timestamp(),
|
||||
`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
|
||||
`created_by` int(11) NOT NULL DEFAULT 1 COMMENT '작성자 user_id',
|
||||
`updated_by` int(11) DEFAULT NULL COMMENT '수정자 user_id',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_report_date` (`report_date`),
|
||||
KEY `idx_worker_date` (`worker_id`,`report_date`),
|
||||
KEY `idx_project_date` (`project_id`,`report_date`),
|
||||
KEY `idx_work_type` (`work_type_id`),
|
||||
KEY `idx_work_status` (`work_status_id`),
|
||||
KEY `idx_error_type` (`error_type_id`),
|
||||
KEY `idx_created_by` (`created_by`),
|
||||
KEY `idx_date_worker_creator` (`report_date`,`worker_id`,`created_by`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=741 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Dumping data for table `daily_work_reports`
|
||||
--
|
||||
|
||||
LOCK TABLES `daily_work_reports` WRITE;
|
||||
/*!40000 ALTER TABLE `daily_work_reports` DISABLE KEYS */;
|
||||
INSERT INTO `daily_work_reports` VALUES
|
||||
(14,'2025-06-02',1,4,3,1,NULL,8.00,'2025-06-16 05:10:23','2025-06-16 05:10:23',1,NULL),
|
||||
(15,'2025-06-02',3,4,3,1,NULL,8.00,'2025-06-16 05:10:23','2025-06-16 05:10:23',1,NULL),
|
||||
(16,'2025-06-02',4,4,3,1,NULL,8.00,'2025-06-16 05:10:23','2025-06-16 05:10:23',1,NULL),
|
||||
(17,'2025-06-02',6,4,3,1,NULL,8.00,'2025-06-16 05:10:23','2025-06-16 05:10:23',1,NULL),
|
||||
(18,'2025-06-02',7,4,3,1,NULL,8.00,'2025-06-16 05:10:23','2025-06-16 05:10:23',1,NULL),
|
||||
(19,'2025-06-02',9,4,3,1,NULL,8.00,'2025-06-16 05:10:23','2025-06-16 05:10:23',1,NULL),
|
||||
(20,'2025-06-02',2,3,2,1,NULL,8.00,'2025-06-16 05:10:47','2025-06-16 05:10:47',1,NULL),
|
||||
(21,'2025-06-04',1,4,3,1,NULL,8.00,'2025-06-16 05:11:37','2025-06-16 05:11:37',1,NULL),
|
||||
(22,'2025-06-04',3,4,3,1,NULL,8.00,'2025-06-16 05:11:37','2025-06-16 05:11:37',1,NULL),
|
||||
(23,'2025-06-04',5,4,3,1,NULL,8.00,'2025-06-16 05:11:37','2025-06-16 05:11:37',1,NULL),
|
||||
(24,'2025-06-04',7,4,3,1,NULL,8.00,'2025-06-16 05:11:37','2025-06-16 05:11:37',1,NULL),
|
||||
(25,'2025-06-04',9,4,3,1,NULL,8.00,'2025-06-16 05:11:37','2025-06-16 05:11:37',1,NULL),
|
||||
(26,'2025-06-04',10,4,3,1,NULL,8.00,'2025-06-16 05:11:37','2025-06-16 05:11:37',1,NULL),
|
||||
(27,'2025-06-04',2,3,2,1,NULL,8.00,'2025-06-16 05:12:07','2025-06-16 05:12:07',1,NULL),
|
||||
(28,'2025-06-04',6,3,2,1,NULL,8.00,'2025-06-16 05:12:07','2025-06-16 05:12:07',1,NULL),
|
||||
(29,'2025-06-04',8,3,2,1,NULL,8.00,'2025-06-16 05:12:07','2025-06-16 05:12:07',1,NULL),
|
||||
(30,'2025-06-05',1,4,3,2,1,8.00,'2025-06-16 05:12:57','2025-06-16 05:12:57',1,NULL),
|
||||
(31,'2025-06-05',3,4,3,2,1,8.00,'2025-06-16 05:12:57','2025-06-16 05:12:57',1,NULL),
|
||||
(32,'2025-06-05',4,4,3,2,1,8.00,'2025-06-16 05:12:57','2025-06-16 05:12:57',1,NULL),
|
||||
(33,'2025-06-05',7,4,3,2,1,8.00,'2025-06-16 05:12:57','2025-06-16 05:12:57',1,NULL),
|
||||
(34,'2025-06-05',10,4,3,2,1,8.00,'2025-06-16 05:12:57','2025-06-16 05:12:57',1,NULL),
|
||||
(35,'2025-06-05',9,4,3,2,1,8.00,'2025-06-16 05:12:57','2025-06-16 05:12:57',1,NULL),
|
||||
(36,'2025-06-05',2,3,2,1,NULL,8.00,'2025-06-16 05:13:56','2025-06-16 05:13:56',1,NULL),
|
||||
(37,'2025-06-05',5,3,2,1,NULL,8.00,'2025-06-16 05:13:56','2025-06-16 05:13:56',1,NULL),
|
||||
(38,'2025-06-05',6,3,2,1,NULL,8.00,'2025-06-16 05:13:56','2025-06-16 05:13:56',1,NULL),
|
||||
(39,'2025-06-05',8,3,2,1,NULL,8.00,'2025-06-16 05:13:56','2025-06-16 05:13:56',1,NULL),
|
||||
(40,'2025-06-16',5,3,2,1,NULL,8.00,'2025-06-16 06:12:01','2025-06-16 06:12:01',5,NULL),
|
||||
(43,'2025-06-16',2,3,2,1,NULL,8.00,'2025-06-16 06:12:01','2025-06-16 06:12:01',5,NULL),
|
||||
(44,'2025-06-16',6,3,2,2,4,4.00,'2025-06-16 06:13:02','2025-06-16 06:13:02',5,NULL),
|
||||
(45,'2025-06-16',6,3,2,1,NULL,4.00,'2025-06-16 06:13:50','2025-06-16 06:13:50',5,NULL),
|
||||
(46,'2025-06-16',8,3,2,2,4,4.00,'2025-06-16 06:15:22','2025-06-16 06:15:22',5,NULL),
|
||||
(47,'2025-06-16',8,3,2,1,NULL,4.00,'2025-06-16 06:15:22','2025-06-16 06:15:22',5,NULL),
|
||||
(48,'2025-06-16',4,4,3,2,1,8.00,'2025-06-16 06:46:44','2025-06-16 06:46:44',3,NULL),
|
||||
(50,'2025-06-16',1,4,3,2,1,8.00,'2025-06-16 06:46:44','2025-06-16 06:46:44',3,NULL),
|
||||
(51,'2025-06-16',9,4,3,1,NULL,8.00,'2025-06-16 06:48:29','2025-06-16 06:48:29',3,NULL),
|
||||
(52,'2025-06-16',10,4,3,1,NULL,6.00,'2025-06-16 06:50:09','2025-06-16 06:50:09',6,NULL),
|
||||
(53,'2025-06-16',10,4,3,2,1,2.00,'2025-06-16 06:50:09','2025-06-16 06:50:09',6,NULL),
|
||||
(54,'2025-06-16',3,4,3,1,NULL,6.00,'2025-06-16 06:50:09','2025-06-16 06:50:09',6,NULL),
|
||||
(55,'2025-06-16',3,4,3,2,1,2.00,'2025-06-16 06:50:09','2025-06-16 06:50:09',6,NULL),
|
||||
(56,'2025-06-17',2,3,2,1,NULL,8.00,'2025-06-17 08:23:41','2025-06-17 08:23:41',5,NULL),
|
||||
(57,'2025-06-17',2,3,2,1,NULL,2.00,'2025-06-17 08:23:41','2025-06-17 08:23:41',5,NULL),
|
||||
(58,'2025-06-17',5,3,2,1,NULL,8.00,'2025-06-17 08:23:41','2025-06-17 08:23:41',5,NULL),
|
||||
(59,'2025-06-17',5,3,2,1,NULL,2.00,'2025-06-17 08:23:41','2025-06-17 08:23:41',5,NULL),
|
||||
(60,'2025-06-17',6,3,2,1,NULL,8.00,'2025-06-17 08:24:33','2025-06-17 08:24:33',5,NULL),
|
||||
(61,'2025-06-17',6,3,2,2,4,2.00,'2025-06-17 08:24:33','2025-06-17 08:24:33',5,NULL),
|
||||
(62,'2025-06-17',8,3,2,1,NULL,8.00,'2025-06-17 08:24:33','2025-06-17 08:24:33',5,NULL),
|
||||
(63,'2025-06-17',8,3,2,2,4,2.00,'2025-06-17 08:24:33','2025-06-17 08:24:33',5,NULL),
|
||||
(65,'2025-06-17',9,4,3,2,1,4.00,'2025-06-17 08:25:24','2025-06-17 08:25:24',3,NULL),
|
||||
(66,'2025-06-17',1,4,3,2,1,4.00,'2025-06-17 08:27:06','2025-06-17 08:27:06',3,NULL),
|
||||
(67,'2025-06-17',4,4,3,2,1,4.00,'2025-06-17 08:27:06','2025-06-17 08:27:06',3,NULL),
|
||||
(68,'2025-06-17',1,4,3,1,NULL,4.00,'2025-06-17 08:31:06','2025-06-17 08:31:06',3,NULL),
|
||||
(69,'2025-06-17',9,4,3,1,NULL,4.00,'2025-06-17 08:31:06','2025-06-17 08:31:06',3,NULL),
|
||||
(70,'2025-06-17',4,4,3,1,NULL,4.00,'2025-06-17 08:31:06','2025-06-17 08:31:06',3,NULL),
|
||||
(71,'2025-06-17',9,4,3,1,NULL,2.00,'2025-06-17 08:33:06','2025-06-17 08:33:06',3,NULL),
|
||||
(72,'2025-06-17',4,4,3,1,NULL,2.00,'2025-06-17 08:33:06','2025-06-17 08:33:06',3,NULL),
|
||||
(73,'2025-06-17',1,4,3,1,NULL,2.00,'2025-06-17 08:33:06','2025-06-17 08:33:06',3,NULL),
|
||||
(74,'2025-06-17',10,4,3,1,NULL,8.00,'2025-06-17 08:34:11','2025-06-17 08:34:11',6,NULL),
|
||||
(75,'2025-06-17',10,4,3,2,1,2.00,'2025-06-17 08:34:11','2025-06-17 08:34:11',6,NULL),
|
||||
(76,'2025-06-17',3,4,3,1,NULL,8.00,'2025-06-17 08:34:11','2025-06-17 08:34:11',6,NULL),
|
||||
(77,'2025-06-17',3,4,3,2,1,2.00,'2025-06-17 08:34:11','2025-06-17 08:34:11',6,NULL),
|
||||
(78,'2025-06-18',6,3,2,1,NULL,8.00,'2025-06-18 08:40:27','2025-06-18 08:40:27',5,NULL),
|
||||
(79,'2025-06-18',2,3,2,1,NULL,8.00,'2025-06-18 08:40:27','2025-06-18 08:40:27',5,NULL),
|
||||
(80,'2025-06-18',8,3,2,1,NULL,8.00,'2025-06-18 08:40:27','2025-06-18 08:40:27',5,NULL),
|
||||
(81,'2025-06-18',2,3,2,1,NULL,2.00,'2025-06-18 08:41:02','2025-06-18 08:41:02',5,NULL),
|
||||
(82,'2025-06-18',6,3,2,1,NULL,2.00,'2025-06-18 08:41:03','2025-06-18 08:41:03',5,NULL),
|
||||
(83,'2025-06-18',8,3,2,1,NULL,2.00,'2025-06-18 08:41:03','2025-06-18 08:41:03',5,NULL),
|
||||
(84,'2025-06-18',5,4,3,1,NULL,8.00,'2025-06-18 08:41:45','2025-06-18 08:41:45',5,NULL),
|
||||
(85,'2025-06-18',5,4,3,1,NULL,2.00,'2025-06-18 08:41:45','2025-06-18 08:41:45',5,NULL),
|
||||
(86,'2025-06-18',10,4,3,1,NULL,9.00,'2025-06-18 08:47:55','2025-06-18 08:47:55',6,NULL),
|
||||
(87,'2025-06-18',10,4,3,2,1,1.00,'2025-06-18 08:47:55','2025-06-18 08:47:55',6,NULL),
|
||||
(88,'2025-06-18',3,4,3,1,NULL,9.00,'2025-06-18 08:47:55','2025-06-18 08:47:55',6,NULL),
|
||||
(89,'2025-06-18',3,4,3,2,1,1.00,'2025-06-18 08:47:55','2025-06-18 08:47:55',6,NULL),
|
||||
(90,'2025-06-18',4,4,3,2,1,4.00,'2025-06-18 08:50:19','2025-06-18 08:50:19',3,NULL),
|
||||
(91,'2025-06-18',4,4,3,1,NULL,6.00,'2025-06-18 08:50:19','2025-06-18 08:50:19',3,NULL),
|
||||
(92,'2025-06-18',9,4,3,2,1,4.00,'2025-06-18 08:50:19','2025-06-18 08:50:19',3,NULL),
|
||||
(93,'2025-06-18',9,4,3,1,NULL,6.00,'2025-06-18 08:50:19','2025-06-18 08:50:19',3,NULL),
|
||||
(94,'2025-06-18',1,4,3,2,1,4.00,'2025-06-18 08:50:19','2025-06-18 08:50:19',3,NULL),
|
||||
(95,'2025-06-18',1,4,3,1,NULL,6.00,'2025-06-18 08:50:19','2025-06-18 08:50:19',3,NULL),
|
||||
(96,'2025-06-18',7,4,3,2,1,4.00,'2025-06-18 09:00:17','2025-06-18 09:00:17',3,NULL),
|
||||
(97,'2025-06-18',7,4,3,1,NULL,6.00,'2025-06-18 09:00:17','2025-06-18 09:00:17',3,NULL),
|
||||
(98,'2025-06-19',8,3,2,1,NULL,8.00,'2025-06-19 06:37:59','2025-06-19 06:37:59',5,NULL),
|
||||
(99,'2025-06-19',2,3,2,1,NULL,8.00,'2025-06-19 06:37:59','2025-06-19 06:37:59',5,NULL),
|
||||
(100,'2025-06-19',10,4,3,1,NULL,8.00,'2025-06-19 06:59:36','2025-06-19 06:59:36',6,NULL),
|
||||
(101,'2025-06-19',3,4,3,1,NULL,8.00,'2025-06-19 06:59:36','2025-06-19 06:59:36',6,NULL),
|
||||
(102,'2025-06-19',5,4,3,1,NULL,8.00,'2025-06-19 06:59:36','2025-06-19 06:59:36',6,NULL),
|
||||
(103,'2025-06-19',9,4,3,1,NULL,6.00,'2025-06-19 07:01:02','2025-06-19 07:01:02',3,NULL),
|
||||
(104,'2025-06-19',9,4,3,2,1,2.00,'2025-06-19 07:01:02','2025-06-19 07:01:02',3,NULL),
|
||||
(105,'2025-06-19',4,4,3,1,NULL,6.00,'2025-06-19 07:01:02','2025-06-19 07:01:02',3,NULL),
|
||||
(106,'2025-06-19',4,4,3,2,1,2.00,'2025-06-19 07:01:02','2025-06-19 07:01:02',3,NULL),
|
||||
(107,'2025-06-19',1,4,3,1,NULL,6.00,'2025-06-19 07:01:02','2025-06-19 07:01:02',3,NULL),
|
||||
(108,'2025-06-19',1,4,3,2,1,2.00,'2025-06-19 07:01:02','2025-06-19 07:01:02',3,NULL),
|
||||
(109,'2025-06-19',7,4,3,1,NULL,6.00,'2025-06-19 07:01:02','2025-06-19 07:01:02',3,NULL),
|
||||
(110,'2025-06-19',7,4,3,2,1,2.00,'2025-06-19 07:01:02','2025-06-19 07:01:02',3,NULL),
|
||||
(111,'2025-06-19',6,4,3,1,NULL,6.00,'2025-06-19 07:01:02','2025-06-19 07:01:02',3,NULL),
|
||||
(112,'2025-06-19',6,4,3,2,1,2.00,'2025-06-19 07:01:02','2025-06-19 07:01:02',3,NULL),
|
||||
(113,'2025-06-20',9,4,3,2,1,2.00,'2025-06-20 06:44:01','2025-06-20 06:44:01',3,NULL),
|
||||
(114,'2025-06-20',9,4,3,1,NULL,6.00,'2025-06-20 06:44:01','2025-06-20 06:44:01',3,NULL),
|
||||
(115,'2025-06-20',4,4,3,2,1,2.00,'2025-06-20 06:44:01','2025-06-20 06:44:01',3,NULL),
|
||||
(116,'2025-06-20',4,4,3,1,NULL,6.00,'2025-06-20 06:44:01','2025-06-20 06:44:01',3,NULL),
|
||||
(117,'2025-06-20',7,4,3,2,1,2.00,'2025-06-20 06:44:01','2025-06-20 06:44:01',3,NULL),
|
||||
(118,'2025-06-20',7,4,3,1,NULL,6.00,'2025-06-20 06:44:01','2025-06-20 06:44:01',3,NULL),
|
||||
(119,'2025-06-20',6,4,3,2,1,2.00,'2025-06-20 06:44:02','2025-06-20 06:44:02',3,NULL),
|
||||
(120,'2025-06-20',6,4,3,1,NULL,6.00,'2025-06-20 06:44:02','2025-06-20 06:44:02',3,NULL),
|
||||
(121,'2025-06-20',1,4,3,2,1,2.00,'2025-06-20 06:44:02','2025-06-20 06:44:02',3,NULL),
|
||||
(122,'2025-06-20',1,4,3,1,NULL,6.00,'2025-06-20 06:44:02','2025-06-20 06:44:02',3,NULL),
|
||||
(123,'2025-06-20',5,4,3,2,1,2.00,'2025-06-20 06:44:02','2025-06-20 06:44:02',3,NULL),
|
||||
(124,'2025-06-20',5,4,3,1,NULL,6.00,'2025-06-20 06:44:02','2025-06-20 06:44:02',3,NULL),
|
||||
(125,'2025-06-20',10,4,3,1,NULL,8.00,'2025-06-20 06:45:30','2025-06-20 06:45:30',6,NULL),
|
||||
(126,'2025-06-20',3,4,3,1,NULL,8.00,'2025-06-20 06:45:31','2025-06-20 06:45:31',6,NULL),
|
||||
(127,'2025-06-23',10,4,3,1,NULL,8.00,'2025-06-23 06:42:58','2025-06-23 06:42:58',6,NULL),
|
||||
(128,'2025-06-23',3,4,3,1,NULL,8.00,'2025-06-23 06:42:58','2025-06-23 06:42:58',6,NULL),
|
||||
(129,'2025-06-23',5,4,3,2,1,2.00,'2025-06-23 06:51:28','2025-06-23 06:51:28',3,NULL),
|
||||
(130,'2025-06-23',5,4,3,1,NULL,6.00,'2025-06-23 06:51:28','2025-06-23 06:51:28',3,NULL),
|
||||
(131,'2025-06-23',1,4,3,2,1,2.00,'2025-06-23 06:51:28','2025-06-23 06:51:28',3,NULL),
|
||||
(132,'2025-06-23',1,4,3,1,NULL,6.00,'2025-06-23 06:51:28','2025-06-23 06:51:28',3,NULL),
|
||||
(133,'2025-06-23',9,4,3,2,1,2.00,'2025-06-23 06:51:28','2025-06-23 06:51:28',3,NULL),
|
||||
(134,'2025-06-23',9,4,3,1,NULL,6.00,'2025-06-23 06:51:28','2025-06-23 06:51:28',3,NULL),
|
||||
(135,'2025-06-23',4,4,3,2,1,2.00,'2025-06-23 06:51:28','2025-06-23 06:51:28',3,NULL),
|
||||
(136,'2025-06-23',4,4,3,1,NULL,6.00,'2025-06-23 06:51:28','2025-06-23 06:51:28',3,NULL),
|
||||
(137,'2025-06-23',7,4,3,2,1,2.00,'2025-06-23 06:51:28','2025-06-23 06:51:28',3,NULL),
|
||||
(138,'2025-06-23',7,4,3,1,NULL,6.00,'2025-06-23 06:51:28','2025-06-23 06:51:28',3,NULL),
|
||||
(139,'2025-06-23',6,4,3,2,1,2.00,'2025-06-23 06:51:28','2025-06-23 06:51:28',3,NULL),
|
||||
(140,'2025-06-23',6,4,3,1,NULL,6.00,'2025-06-23 06:51:28','2025-06-23 06:51:28',3,NULL),
|
||||
(141,'2025-06-24',10,4,3,1,NULL,12.00,'2025-06-24 11:10:32','2025-06-24 11:10:32',6,NULL),
|
||||
(142,'2025-06-24',3,4,3,1,NULL,12.00,'2025-06-24 11:10:32','2025-06-24 11:10:32',6,NULL),
|
||||
(143,'2025-06-24',9,4,3,2,1,2.00,'2025-06-24 11:11:00','2025-06-24 11:11:00',3,NULL),
|
||||
(144,'2025-06-24',9,4,3,1,NULL,10.00,'2025-06-24 11:11:00','2025-06-24 11:11:00',3,NULL),
|
||||
(145,'2025-06-24',5,4,3,2,1,2.00,'2025-06-24 11:11:00','2025-06-24 11:11:00',3,NULL),
|
||||
(146,'2025-06-24',5,4,3,1,NULL,10.00,'2025-06-24 11:11:00','2025-06-24 11:11:00',3,NULL),
|
||||
(147,'2025-06-24',4,4,3,2,1,2.00,'2025-06-24 11:11:00','2025-06-24 11:11:00',3,NULL),
|
||||
(148,'2025-06-24',4,4,3,1,NULL,10.00,'2025-06-24 11:11:00','2025-06-24 11:11:00',3,NULL),
|
||||
(149,'2025-06-24',7,4,3,2,1,2.00,'2025-06-24 11:11:00','2025-06-24 11:11:00',3,NULL),
|
||||
(150,'2025-06-24',7,4,3,1,NULL,10.00,'2025-06-24 11:11:00','2025-06-24 11:11:00',3,NULL),
|
||||
(151,'2025-06-24',6,4,3,2,1,2.00,'2025-06-24 11:11:00','2025-06-24 11:11:00',3,NULL),
|
||||
(152,'2025-06-24',6,4,3,1,NULL,10.00,'2025-06-24 11:11:00','2025-06-24 11:11:00',3,NULL),
|
||||
(153,'2025-06-24',1,4,3,2,1,2.00,'2025-06-24 11:11:00','2025-06-24 11:11:00',3,NULL),
|
||||
(154,'2025-06-24',1,4,3,1,NULL,10.00,'2025-06-24 11:11:00','2025-06-24 11:11:00',3,NULL),
|
||||
(155,'2025-06-24',8,3,2,1,NULL,8.00,'2025-06-24 11:11:05','2025-06-24 11:11:05',5,NULL),
|
||||
(156,'2025-06-24',8,3,2,1,NULL,4.00,'2025-06-24 11:11:05','2025-06-24 11:11:05',5,NULL),
|
||||
(157,'2025-06-24',2,3,2,1,NULL,8.00,'2025-06-24 11:11:05','2025-06-24 11:11:05',5,NULL),
|
||||
(158,'2025-06-24',2,3,2,1,NULL,4.00,'2025-06-24 11:11:05','2025-06-24 11:11:05',5,NULL),
|
||||
(159,'2025-06-25',2,3,2,1,NULL,8.00,'2025-06-25 11:08:04','2025-06-25 11:08:04',5,NULL),
|
||||
(160,'2025-06-25',2,3,2,1,NULL,4.00,'2025-06-25 11:08:04','2025-06-25 11:08:04',5,NULL),
|
||||
(161,'2025-06-25',8,3,2,1,NULL,8.00,'2025-06-25 11:08:05','2025-06-25 11:08:05',5,NULL),
|
||||
(162,'2025-06-25',8,3,2,1,NULL,4.00,'2025-06-25 11:08:05','2025-06-25 11:08:05',5,NULL),
|
||||
(163,'2025-06-25',10,4,3,1,NULL,12.00,'2025-06-25 11:11:30','2025-06-25 11:11:30',6,NULL),
|
||||
(164,'2025-06-25',9,4,3,1,NULL,12.00,'2025-06-25 11:11:30','2025-06-25 11:11:30',6,NULL),
|
||||
(165,'2025-06-25',3,4,3,1,NULL,12.00,'2025-06-25 11:11:30','2025-06-25 11:11:30',6,NULL),
|
||||
(166,'2025-06-25',6,4,3,1,NULL,12.00,'2025-06-25 11:11:30','2025-06-25 11:11:30',6,NULL),
|
||||
(167,'2025-06-26',10,4,3,1,NULL,12.00,'2025-06-26 10:29:38','2025-06-26 10:29:38',3,NULL),
|
||||
(168,'2025-06-26',5,4,3,1,NULL,12.00,'2025-06-26 10:29:38','2025-06-26 10:29:38',3,NULL),
|
||||
(169,'2025-06-26',7,4,3,1,NULL,12.00,'2025-06-26 10:29:38','2025-06-26 10:29:38',3,NULL),
|
||||
(170,'2025-06-26',1,4,3,1,NULL,12.00,'2025-06-26 10:29:38','2025-06-26 10:29:38',3,NULL),
|
||||
(171,'2025-06-26',4,4,3,1,NULL,12.00,'2025-06-26 10:29:38','2025-06-26 10:29:38',3,NULL),
|
||||
(172,'2025-06-26',8,3,2,1,NULL,8.00,'2025-06-26 11:11:31','2025-06-26 11:11:31',5,NULL),
|
||||
(173,'2025-06-26',8,3,2,1,NULL,4.00,'2025-06-26 11:11:31','2025-06-26 11:11:31',5,NULL),
|
||||
(174,'2025-06-26',2,3,2,1,NULL,8.00,'2025-06-26 11:11:32','2025-06-26 11:11:32',5,NULL),
|
||||
(175,'2025-06-26',2,3,2,1,NULL,4.00,'2025-06-26 11:11:32','2025-06-26 11:11:32',5,NULL),
|
||||
(176,'2025-06-26',9,3,2,1,NULL,8.00,'2025-06-26 11:11:32','2025-06-26 11:11:32',5,NULL),
|
||||
(177,'2025-06-26',9,3,2,1,NULL,4.00,'2025-06-26 11:11:32','2025-06-26 11:11:32',5,NULL),
|
||||
(178,'2025-06-26',3,3,2,1,NULL,12.00,'2025-06-26 11:19:34','2025-06-26 11:19:34',6,NULL),
|
||||
(179,'2025-06-26',6,3,2,1,NULL,12.00,'2025-06-26 11:19:34','2025-06-26 11:19:34',6,NULL),
|
||||
(182,'2025-06-27',2,3,2,1,NULL,4.00,'2025-06-27 01:54:40','2025-06-27 01:54:40',5,NULL),
|
||||
(183,'2025-06-27',9,4,3,1,NULL,8.00,'2025-06-27 06:47:43','2025-06-27 06:47:43',3,NULL),
|
||||
(184,'2025-06-27',10,4,3,1,NULL,8.00,'2025-06-27 06:47:43','2025-06-27 06:47:43',3,NULL),
|
||||
(185,'2025-06-27',7,4,3,1,NULL,8.00,'2025-06-27 06:47:43','2025-06-27 06:47:43',3,NULL),
|
||||
(186,'2025-06-27',5,4,3,1,NULL,8.00,'2025-06-27 06:47:43','2025-06-27 06:47:43',3,NULL),
|
||||
(187,'2025-06-27',4,4,3,1,NULL,8.00,'2025-06-27 06:47:43','2025-06-27 06:47:43',3,NULL),
|
||||
(188,'2025-06-27',1,4,3,1,NULL,8.00,'2025-06-27 06:47:43','2025-06-27 06:47:43',3,NULL),
|
||||
(189,'2025-06-27',3,3,2,1,NULL,8.00,'2025-06-27 06:49:08','2025-06-27 06:49:08',6,NULL),
|
||||
(191,'2025-06-27',6,3,2,1,NULL,4.00,'2025-06-27 06:58:46','2025-06-27 06:58:46',6,NULL),
|
||||
(192,'2025-06-27',8,3,2,1,NULL,6.00,'2025-06-27 07:00:10','2025-06-27 07:00:10',5,NULL),
|
||||
(193,'2025-06-30',6,3,2,2,4,2.00,'2025-07-05 01:37:29','2025-07-05 01:37:29',3,NULL),
|
||||
(194,'2025-06-30',6,3,2,1,NULL,2.00,'2025-07-05 01:37:29','2025-07-07 04:15:25',3,3),
|
||||
(195,'2025-06-30',2,3,2,1,NULL,4.00,'2025-07-05 01:38:19','2025-07-07 04:15:40',3,3),
|
||||
(196,'2025-06-30',3,3,2,1,NULL,8.00,'2025-07-05 01:38:19','2025-07-05 01:38:19',3,NULL),
|
||||
(197,'2025-06-30',8,3,2,1,NULL,6.00,'2025-07-05 01:38:19','2025-07-07 04:15:02',3,3),
|
||||
(198,'2025-07-01',3,3,2,1,NULL,10.00,'2025-07-05 01:39:21','2025-07-05 01:39:21',3,NULL),
|
||||
(199,'2025-07-01',2,3,2,1,NULL,10.00,'2025-07-05 01:39:21','2025-07-05 01:39:21',3,NULL),
|
||||
(200,'2025-07-01',6,3,2,1,NULL,10.00,'2025-07-05 01:39:21','2025-07-05 01:39:21',3,NULL),
|
||||
(201,'2025-07-01',8,3,2,1,NULL,10.00,'2025-07-05 01:39:21','2025-07-05 01:39:21',3,NULL),
|
||||
(202,'2025-07-01',10,3,2,1,NULL,10.00,'2025-07-05 01:39:21','2025-07-05 01:39:21',3,NULL),
|
||||
(203,'2025-07-01',9,3,2,1,NULL,10.00,'2025-07-05 01:39:21','2025-07-05 01:39:21',3,NULL),
|
||||
(204,'2025-07-01',2,3,2,1,NULL,2.00,'2025-07-05 01:39:48','2025-07-05 01:42:08',3,3),
|
||||
(205,'2025-07-01',3,3,2,1,NULL,2.00,'2025-07-05 01:39:48','2025-07-05 01:42:02',3,3),
|
||||
(206,'2025-07-01',6,3,2,1,NULL,2.00,'2025-07-05 01:39:48','2025-07-05 01:41:56',3,3),
|
||||
(207,'2025-07-01',8,3,2,1,NULL,2.00,'2025-07-05 01:39:48','2025-07-05 01:41:48',3,3),
|
||||
(208,'2025-07-01',9,3,2,2,4,2.00,'2025-07-05 01:40:10','2025-07-05 01:40:10',3,NULL),
|
||||
(209,'2025-07-01',10,3,2,2,4,2.00,'2025-07-05 01:40:10','2025-07-05 01:40:10',3,NULL),
|
||||
(210,'2025-07-01',7,4,3,1,NULL,5.00,'2025-07-05 01:42:57','2025-07-05 01:42:57',3,NULL),
|
||||
(211,'2025-07-01',7,4,3,2,2,3.00,'2025-07-05 01:42:57','2025-07-05 01:42:57',3,NULL),
|
||||
(212,'2025-07-01',5,4,3,1,NULL,8.00,'2025-07-05 01:42:57','2025-07-07 04:21:24',3,3),
|
||||
(213,'2025-07-01',5,4,3,2,2,4.00,'2025-07-05 01:42:57','2025-07-07 04:21:10',3,3),
|
||||
(214,'2025-07-01',4,4,3,1,NULL,8.00,'2025-07-05 01:42:57','2025-07-07 04:21:41',3,3),
|
||||
(215,'2025-07-01',4,4,3,2,2,4.00,'2025-07-05 01:42:57','2025-07-07 04:21:32',3,3),
|
||||
(216,'2025-07-01',1,4,3,1,NULL,5.00,'2025-07-05 01:42:57','2025-07-05 01:42:57',3,NULL),
|
||||
(217,'2025-07-01',1,4,3,2,2,3.00,'2025-07-05 01:42:57','2025-07-05 01:42:57',3,NULL),
|
||||
(218,'2025-07-02',2,3,2,1,NULL,10.00,'2025-07-05 01:43:36','2025-07-05 01:43:36',3,NULL),
|
||||
(219,'2025-07-02',3,3,2,1,NULL,10.00,'2025-07-05 01:43:36','2025-07-05 01:43:36',3,NULL),
|
||||
(220,'2025-07-02',10,3,2,1,NULL,10.00,'2025-07-05 01:43:36','2025-07-05 01:43:36',3,NULL),
|
||||
(221,'2025-07-02',9,3,2,1,NULL,10.00,'2025-07-05 01:43:36','2025-07-05 01:43:36',3,NULL),
|
||||
(222,'2025-07-02',8,3,2,1,NULL,10.00,'2025-07-05 01:43:36','2025-07-05 01:43:36',3,NULL),
|
||||
(223,'2025-07-02',6,3,2,1,NULL,10.00,'2025-07-05 01:43:36','2025-07-05 01:43:36',3,NULL),
|
||||
(224,'2025-07-02',7,3,2,1,NULL,10.00,'2025-07-05 01:43:36','2025-07-05 01:43:36',3,NULL),
|
||||
(225,'2025-07-02',5,4,3,2,2,4.00,'2025-07-05 01:44:11','2025-07-05 01:44:11',3,NULL),
|
||||
(226,'2025-07-02',5,4,3,1,NULL,6.00,'2025-07-05 01:44:11','2025-07-05 01:44:54',3,3),
|
||||
(227,'2025-07-02',4,4,3,2,2,4.00,'2025-07-05 01:44:11','2025-07-05 01:44:11',3,NULL),
|
||||
(228,'2025-07-02',4,4,3,1,NULL,6.00,'2025-07-05 01:44:11','2025-07-05 01:44:59',3,3),
|
||||
(229,'2025-07-02',1,4,3,2,2,4.00,'2025-07-05 01:44:11','2025-07-05 01:44:11',3,NULL),
|
||||
(230,'2025-07-02',1,4,3,1,NULL,6.00,'2025-07-05 01:44:11','2025-07-05 01:45:05',3,3),
|
||||
(231,'2025-07-03',2,3,2,1,NULL,10.00,'2025-07-05 01:45:44','2025-07-05 01:45:44',3,NULL),
|
||||
(232,'2025-07-03',6,3,2,1,NULL,10.00,'2025-07-05 01:45:45','2025-07-05 01:45:45',3,NULL),
|
||||
(233,'2025-07-03',9,3,2,1,NULL,10.00,'2025-07-05 01:45:45','2025-07-05 01:45:45',3,NULL),
|
||||
(234,'2025-07-03',8,3,2,1,NULL,10.00,'2025-07-05 01:45:45','2025-07-05 01:45:45',3,NULL),
|
||||
(235,'2025-07-03',7,4,3,1,NULL,10.00,'2025-07-05 01:46:07','2025-07-05 01:46:07',3,NULL),
|
||||
(236,'2025-07-03',1,4,3,1,NULL,10.00,'2025-07-05 01:46:07','2025-07-05 01:46:07',3,NULL),
|
||||
(237,'2025-07-03',3,4,3,1,NULL,10.00,'2025-07-05 01:46:08','2025-07-05 01:46:08',3,NULL),
|
||||
(238,'2025-07-03',4,4,3,1,NULL,10.00,'2025-07-05 01:46:08','2025-07-05 01:46:08',3,NULL),
|
||||
(239,'2025-07-03',5,4,3,1,NULL,10.00,'2025-07-05 01:46:08','2025-07-05 01:46:08',3,NULL),
|
||||
(240,'2025-07-03',10,4,3,1,NULL,10.00,'2025-07-05 01:46:08','2025-07-05 01:46:08',3,NULL),
|
||||
(241,'2025-07-04',10,4,3,2,2,2.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(242,'2025-07-04',10,4,3,1,NULL,6.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(243,'2025-07-04',5,4,3,2,2,2.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(244,'2025-07-04',5,4,3,1,NULL,6.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(245,'2025-07-04',4,4,3,2,2,2.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(246,'2025-07-04',4,4,3,1,NULL,6.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(247,'2025-07-04',9,4,3,2,2,2.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(248,'2025-07-04',9,4,3,1,NULL,6.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(249,'2025-07-04',8,4,3,2,2,2.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(250,'2025-07-04',8,4,3,1,NULL,6.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(251,'2025-07-04',3,4,3,2,2,2.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(252,'2025-07-04',3,4,3,1,NULL,6.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(253,'2025-07-04',2,4,3,2,2,2.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(254,'2025-07-04',2,4,3,1,NULL,6.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(255,'2025-07-04',7,4,3,2,2,2.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(256,'2025-07-04',7,4,3,1,NULL,6.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(257,'2025-07-04',6,4,3,2,2,2.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(258,'2025-07-04',6,4,3,1,NULL,6.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(259,'2025-07-04',1,4,3,2,2,2.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(260,'2025-07-04',1,4,3,1,NULL,6.00,'2025-07-05 01:51:47','2025-07-05 01:51:47',3,NULL),
|
||||
(261,'2025-07-05',8,4,2,1,NULL,8.00,'2025-07-05 05:36:38','2025-07-05 05:36:38',5,NULL),
|
||||
(262,'2025-07-05',5,4,2,1,NULL,8.00,'2025-07-05 05:36:38','2025-07-05 05:36:38',5,NULL),
|
||||
(263,'2025-07-05',4,4,2,1,NULL,8.00,'2025-07-05 05:36:39','2025-07-05 05:36:39',5,NULL),
|
||||
(264,'2025-07-05',3,4,2,1,NULL,8.00,'2025-07-05 05:36:39','2025-07-05 05:36:39',5,NULL),
|
||||
(265,'2025-07-05',2,4,2,1,NULL,8.00,'2025-07-05 05:36:39','2025-07-05 05:36:39',5,NULL),
|
||||
(266,'2025-07-05',1,4,2,1,NULL,8.00,'2025-07-05 05:36:39','2025-07-05 05:36:39',5,NULL),
|
||||
(267,'2025-07-06',10,4,3,1,NULL,8.00,'2025-07-06 05:34:32','2025-07-06 05:46:08',5,3),
|
||||
(268,'2025-07-06',9,4,3,1,NULL,8.00,'2025-07-06 05:34:32','2025-07-06 05:46:16',5,3),
|
||||
(269,'2025-07-06',7,4,3,1,NULL,8.00,'2025-07-06 05:34:32','2025-07-06 05:46:22',5,3),
|
||||
(270,'2025-07-06',6,4,3,1,NULL,8.00,'2025-07-06 05:34:32','2025-07-06 05:46:27',5,3),
|
||||
(271,'2025-07-06',4,4,3,1,NULL,8.00,'2025-07-06 05:34:32','2025-07-06 05:46:33',5,3),
|
||||
(272,'2025-07-06',3,4,3,1,NULL,8.00,'2025-07-06 05:34:32','2025-07-06 05:46:39',5,3),
|
||||
(273,'2025-07-06',2,4,3,1,NULL,8.00,'2025-07-06 05:34:32','2025-07-06 05:46:44',5,3),
|
||||
(274,'2025-07-06',1,4,3,1,NULL,8.00,'2025-07-06 05:34:32','2025-07-06 05:46:49',5,3),
|
||||
(275,'2025-07-07',10,4,3,1,NULL,8.00,'2025-07-07 06:49:31','2025-07-07 06:49:31',6,NULL),
|
||||
(276,'2025-07-07',9,4,3,1,NULL,8.00,'2025-07-07 06:49:31','2025-07-07 06:49:31',6,NULL),
|
||||
(277,'2025-07-07',8,4,3,1,NULL,8.00,'2025-07-07 06:49:31','2025-07-07 06:49:31',6,NULL),
|
||||
(278,'2025-07-07',7,4,3,1,NULL,8.00,'2025-07-07 06:49:31','2025-07-07 06:49:31',6,NULL),
|
||||
(279,'2025-07-07',3,4,3,1,NULL,8.00,'2025-07-07 06:49:31','2025-07-07 06:49:31',6,NULL),
|
||||
(280,'2025-07-07',4,4,3,1,NULL,8.00,'2025-07-07 06:49:31','2025-07-07 06:49:31',6,NULL),
|
||||
(281,'2025-07-07',5,4,3,1,NULL,8.00,'2025-07-07 06:49:31','2025-07-07 06:49:31',6,NULL),
|
||||
(282,'2025-07-07',6,4,3,1,NULL,8.00,'2025-07-07 06:49:31','2025-07-07 06:49:31',6,NULL),
|
||||
(283,'2025-07-07',2,4,3,1,NULL,8.00,'2025-07-07 06:49:31','2025-07-07 06:49:31',6,NULL),
|
||||
(284,'2025-07-07',1,4,3,1,NULL,8.00,'2025-07-07 06:49:31','2025-07-07 06:49:31',6,NULL),
|
||||
(285,'2025-07-08',10,4,3,1,NULL,8.00,'2025-07-08 06:36:57','2025-07-08 06:36:57',3,NULL),
|
||||
(286,'2025-07-08',9,4,3,1,NULL,8.00,'2025-07-08 06:36:58','2025-07-08 06:36:58',3,NULL),
|
||||
(287,'2025-07-08',8,4,3,1,NULL,8.00,'2025-07-08 06:36:58','2025-07-08 06:36:58',3,NULL),
|
||||
(288,'2025-07-08',7,4,3,1,NULL,8.00,'2025-07-08 06:36:58','2025-07-08 06:36:58',3,NULL),
|
||||
(289,'2025-07-08',6,4,3,1,NULL,8.00,'2025-07-08 06:36:58','2025-07-08 06:36:58',3,NULL),
|
||||
(290,'2025-07-08',1,4,3,1,NULL,8.00,'2025-07-08 06:36:58','2025-07-08 06:36:58',3,NULL),
|
||||
(291,'2025-07-08',2,4,3,1,NULL,8.00,'2025-07-08 06:36:58','2025-07-08 06:36:58',3,NULL),
|
||||
(292,'2025-07-08',3,4,3,1,NULL,8.00,'2025-07-08 06:36:58','2025-07-08 06:36:58',3,NULL),
|
||||
(293,'2025-07-08',5,4,3,1,NULL,8.00,'2025-07-08 06:36:58','2025-07-08 06:36:58',3,NULL),
|
||||
(294,'2025-07-08',4,4,3,1,NULL,8.00,'2025-07-08 06:36:58','2025-07-08 06:36:58',3,NULL),
|
||||
(295,'2025-07-09',10,4,3,1,NULL,8.00,'2025-07-09 22:08:40','2025-07-09 22:08:40',5,NULL),
|
||||
(296,'2025-07-09',9,4,3,1,NULL,8.00,'2025-07-09 22:08:40','2025-07-09 22:08:40',5,NULL),
|
||||
(297,'2025-07-09',8,4,3,1,NULL,8.00,'2025-07-09 22:08:40','2025-07-09 22:08:40',5,NULL),
|
||||
(298,'2025-07-09',7,4,3,1,NULL,8.00,'2025-07-09 22:08:41','2025-07-09 22:08:41',5,NULL),
|
||||
(299,'2025-07-09',6,4,3,1,NULL,8.00,'2025-07-09 22:08:41','2025-07-09 22:08:41',5,NULL),
|
||||
(300,'2025-07-09',2,4,3,1,NULL,8.00,'2025-07-09 22:08:41','2025-07-09 22:08:41',5,NULL),
|
||||
(301,'2025-07-09',3,4,3,1,NULL,8.00,'2025-07-09 22:08:42','2025-07-09 22:08:42',5,NULL),
|
||||
(302,'2025-07-09',4,4,3,1,NULL,8.00,'2025-07-09 22:08:42','2025-07-09 22:08:42',5,NULL),
|
||||
(303,'2025-07-09',5,4,3,1,NULL,8.00,'2025-07-09 22:08:42','2025-07-09 22:08:42',5,NULL),
|
||||
(304,'2025-07-09',1,4,3,1,NULL,4.00,'2025-07-09 22:09:10','2025-07-09 22:09:10',5,NULL),
|
||||
(305,'2025-07-10',9,4,3,1,NULL,8.00,'2025-07-10 06:33:58','2025-07-10 06:33:58',3,NULL),
|
||||
(306,'2025-07-10',8,4,3,1,NULL,8.00,'2025-07-10 06:33:58','2025-07-10 06:33:58',3,NULL),
|
||||
(307,'2025-07-10',5,4,3,1,NULL,8.00,'2025-07-10 06:33:58','2025-07-10 06:33:58',3,NULL),
|
||||
(308,'2025-07-10',6,4,3,1,NULL,8.00,'2025-07-10 06:33:59','2025-07-10 06:33:59',3,NULL),
|
||||
(309,'2025-07-10',2,4,3,1,NULL,8.00,'2025-07-10 06:33:59','2025-07-10 06:33:59',3,NULL),
|
||||
(310,'2025-07-10',3,4,3,1,NULL,8.00,'2025-07-10 06:33:59','2025-07-10 06:33:59',3,NULL),
|
||||
(311,'2025-07-10',4,4,3,1,NULL,8.00,'2025-07-10 06:33:59','2025-07-10 06:33:59',3,NULL),
|
||||
(312,'2025-07-10',1,4,3,1,NULL,8.00,'2025-07-10 06:33:59','2025-07-10 06:33:59',3,NULL),
|
||||
(313,'2025-07-10',7,4,3,1,NULL,8.00,'2025-07-10 06:33:59','2025-07-10 06:33:59',3,NULL),
|
||||
(314,'2025-07-10',10,4,3,1,NULL,8.00,'2025-07-10 06:33:59','2025-07-10 06:33:59',3,NULL),
|
||||
(315,'2025-07-12',9,4,3,1,NULL,8.00,'2025-07-12 05:41:30','2025-07-12 05:41:30',3,NULL),
|
||||
(316,'2025-07-12',8,4,3,1,NULL,8.00,'2025-07-12 05:41:30','2025-07-12 05:41:30',3,NULL),
|
||||
(317,'2025-07-12',6,4,3,1,NULL,8.00,'2025-07-12 05:41:30','2025-07-12 05:41:30',3,NULL),
|
||||
(318,'2025-07-12',5,4,3,1,NULL,8.00,'2025-07-12 05:41:30','2025-07-12 05:41:30',3,NULL),
|
||||
(319,'2025-07-12',4,4,3,1,NULL,8.00,'2025-07-12 05:41:30','2025-07-12 05:41:30',3,NULL),
|
||||
(320,'2025-07-12',2,4,3,1,NULL,8.00,'2025-07-12 05:41:30','2025-07-12 05:41:30',3,NULL),
|
||||
(321,'2025-07-12',1,4,3,1,NULL,8.00,'2025-07-12 05:41:30','2025-07-12 05:41:30',3,NULL),
|
||||
(322,'2025-07-14',8,4,3,1,NULL,6.00,'2025-07-14 06:46:30','2025-07-14 06:46:30',3,NULL),
|
||||
(323,'2025-07-14',10,4,3,1,NULL,8.00,'2025-07-14 06:46:57','2025-07-14 06:46:57',3,NULL),
|
||||
(324,'2025-07-14',9,4,3,1,NULL,8.00,'2025-07-14 06:46:57','2025-07-14 06:46:57',3,NULL),
|
||||
(325,'2025-07-14',7,4,3,1,NULL,8.00,'2025-07-14 06:46:57','2025-07-14 06:46:57',3,NULL),
|
||||
(326,'2025-07-14',6,4,3,1,NULL,8.00,'2025-07-14 06:46:57','2025-07-14 06:46:57',3,NULL),
|
||||
(327,'2025-07-14',1,4,3,1,NULL,8.00,'2025-07-14 06:46:57','2025-07-14 06:46:57',3,NULL),
|
||||
(328,'2025-07-14',2,4,3,1,NULL,8.00,'2025-07-14 06:46:57','2025-07-14 06:46:57',3,NULL),
|
||||
(329,'2025-07-14',3,4,3,1,NULL,8.00,'2025-07-14 06:46:57','2025-07-14 06:46:57',3,NULL),
|
||||
(330,'2025-07-14',4,4,3,1,NULL,8.00,'2025-07-14 06:46:57','2025-07-14 06:46:57',3,NULL),
|
||||
(331,'2025-07-15',3,3,2,1,NULL,8.00,'2025-07-15 05:57:06','2025-07-15 05:57:06',5,NULL),
|
||||
(332,'2025-07-15',9,3,2,1,NULL,8.00,'2025-07-15 05:57:06','2025-07-15 05:57:06',5,NULL),
|
||||
(333,'2025-07-15',5,3,2,2,4,4.00,'2025-07-15 05:57:47','2025-07-15 05:57:47',5,NULL),
|
||||
(334,'2025-07-15',5,4,3,1,NULL,4.00,'2025-07-15 05:57:47','2025-07-15 05:57:47',5,NULL),
|
||||
(335,'2025-07-15',10,4,3,1,NULL,8.00,'2025-07-15 05:58:19','2025-07-15 05:58:19',5,NULL),
|
||||
(336,'2025-07-15',8,4,3,1,NULL,8.00,'2025-07-15 05:58:19','2025-07-15 05:58:19',5,NULL),
|
||||
(337,'2025-07-15',7,4,3,1,NULL,8.00,'2025-07-15 05:58:19','2025-07-15 05:58:19',5,NULL),
|
||||
(338,'2025-07-15',6,4,3,1,NULL,8.00,'2025-07-15 05:58:19','2025-07-15 05:58:19',5,NULL),
|
||||
(339,'2025-07-15',2,4,3,1,NULL,8.00,'2025-07-15 05:58:19','2025-07-15 05:58:19',5,NULL),
|
||||
(340,'2025-07-15',1,4,3,1,NULL,8.00,'2025-07-15 05:58:19','2025-07-15 05:58:19',5,NULL),
|
||||
(341,'2025-07-14',5,4,3,1,NULL,8.00,'2025-07-15 06:57:26','2025-07-15 06:57:26',3,NULL),
|
||||
(342,'2025-07-16',4,4,3,1,NULL,2.00,'2025-07-16 06:46:46','2025-07-16 06:46:46',5,NULL),
|
||||
(343,'2025-07-16',4,3,2,1,NULL,4.00,'2025-07-16 06:46:46','2025-07-16 06:46:46',5,NULL),
|
||||
(344,'2025-07-16',4,3,2,1,NULL,2.00,'2025-07-16 06:46:46','2025-07-16 06:46:46',5,NULL),
|
||||
(345,'2025-07-16',5,4,3,1,NULL,2.00,'2025-07-16 06:46:46','2025-07-16 06:46:46',5,NULL),
|
||||
(346,'2025-07-16',5,3,2,1,NULL,4.00,'2025-07-16 06:46:46','2025-07-16 06:46:46',5,NULL),
|
||||
(347,'2025-07-16',5,3,2,1,NULL,2.00,'2025-07-16 06:46:46','2025-07-16 06:46:46',5,NULL),
|
||||
(348,'2025-07-16',10,4,3,1,NULL,2.00,'2025-07-16 06:47:53','2025-07-16 06:47:53',5,NULL),
|
||||
(349,'2025-07-16',10,3,2,1,NULL,4.00,'2025-07-16 06:47:53','2025-07-16 06:47:53',5,NULL),
|
||||
(350,'2025-07-16',10,3,2,1,NULL,2.00,'2025-07-16 06:47:53','2025-07-16 06:47:53',5,NULL),
|
||||
(351,'2025-07-16',6,4,3,1,NULL,2.00,'2025-07-16 06:47:53','2025-07-16 06:47:53',5,NULL),
|
||||
(352,'2025-07-16',6,3,2,1,NULL,4.00,'2025-07-16 06:47:53','2025-07-16 06:47:53',5,NULL),
|
||||
(353,'2025-07-16',6,3,2,1,NULL,2.00,'2025-07-16 06:47:53','2025-07-16 06:47:53',5,NULL),
|
||||
(354,'2025-07-16',9,3,2,1,NULL,8.00,'2025-07-16 06:48:32','2025-07-16 06:48:32',5,NULL),
|
||||
(355,'2025-07-16',8,3,2,1,NULL,8.00,'2025-07-16 06:48:32','2025-07-16 06:48:32',5,NULL),
|
||||
(356,'2025-07-16',3,3,2,1,NULL,8.00,'2025-07-16 06:48:32','2025-07-16 06:48:32',5,NULL),
|
||||
(357,'2025-07-16',2,3,2,1,NULL,8.00,'2025-07-16 06:48:32','2025-07-16 06:48:32',5,NULL),
|
||||
(358,'2025-07-16',1,4,3,1,NULL,8.00,'2025-07-16 06:51:31','2025-07-16 06:51:31',3,NULL),
|
||||
(359,'2025-07-16',7,4,3,1,NULL,8.00,'2025-07-16 06:51:31','2025-07-16 06:51:31',3,NULL),
|
||||
(360,'2025-07-17',1,3,3,1,NULL,8.00,'2025-07-17 06:45:22','2025-07-17 06:45:22',3,NULL),
|
||||
(361,'2025-07-17',5,3,2,1,NULL,4.00,'2025-07-17 06:46:48','2025-07-17 06:46:48',5,NULL),
|
||||
(362,'2025-07-17',5,3,2,2,4,4.00,'2025-07-17 06:46:48','2025-07-17 06:46:48',5,NULL),
|
||||
(363,'2025-07-17',4,3,2,1,NULL,4.00,'2025-07-17 06:46:48','2025-07-17 06:46:48',5,NULL),
|
||||
(364,'2025-07-17',4,3,2,2,4,4.00,'2025-07-17 06:46:48','2025-07-17 06:46:48',5,NULL),
|
||||
(365,'2025-07-17',2,3,2,1,NULL,4.00,'2025-07-17 06:46:48','2025-07-17 06:46:48',5,NULL),
|
||||
(366,'2025-07-17',2,3,2,2,4,4.00,'2025-07-17 06:46:48','2025-07-17 06:46:48',5,NULL),
|
||||
(367,'2025-07-17',10,3,2,1,NULL,8.00,'2025-07-17 06:47:19','2025-07-17 06:47:19',5,NULL),
|
||||
(368,'2025-07-17',9,3,2,1,NULL,8.00,'2025-07-17 06:47:19','2025-07-17 06:47:19',5,NULL),
|
||||
(369,'2025-07-17',8,3,2,1,NULL,8.00,'2025-07-17 06:47:19','2025-07-17 06:47:19',5,NULL),
|
||||
(370,'2025-07-17',7,3,2,1,NULL,8.00,'2025-07-17 06:47:19','2025-07-17 06:47:19',5,NULL),
|
||||
(371,'2025-07-17',6,3,2,1,NULL,8.00,'2025-07-17 06:47:19','2025-07-17 06:47:19',5,NULL),
|
||||
(372,'2025-07-17',3,3,2,1,NULL,8.00,'2025-07-17 06:47:19','2025-07-17 06:47:19',5,NULL),
|
||||
(373,'2025-07-18',7,4,3,2,1,2.00,'2025-07-18 05:54:47','2025-07-18 05:54:47',3,NULL),
|
||||
(374,'2025-07-18',1,4,3,2,1,2.00,'2025-07-18 05:54:48','2025-07-18 05:54:48',3,NULL),
|
||||
(376,'2025-07-18',5,4,3,1,NULL,2.00,'2025-07-18 05:58:33','2025-07-18 05:58:33',3,NULL),
|
||||
(377,'2025-07-18',5,3,2,1,NULL,6.00,'2025-07-18 05:58:33','2025-07-18 05:58:33',3,NULL),
|
||||
(378,'2025-07-18',7,3,2,1,NULL,6.00,'2025-07-18 05:59:42','2025-07-18 05:59:42',3,NULL),
|
||||
(379,'2025-07-18',1,3,3,1,NULL,6.00,'2025-07-18 06:00:15','2025-07-18 06:00:15',3,NULL),
|
||||
(380,'2025-07-18',10,3,2,1,NULL,8.00,'2025-07-18 06:36:13','2025-07-18 06:36:13',5,NULL),
|
||||
(381,'2025-07-18',9,3,2,1,NULL,8.00,'2025-07-18 06:36:13','2025-07-18 06:36:13',5,NULL),
|
||||
(382,'2025-07-18',8,3,2,1,NULL,8.00,'2025-07-18 06:36:13','2025-07-18 06:36:13',5,NULL),
|
||||
(383,'2025-07-18',6,3,2,1,NULL,8.00,'2025-07-18 06:36:13','2025-07-18 06:36:13',5,NULL),
|
||||
(384,'2025-07-18',4,3,2,1,NULL,8.00,'2025-07-18 06:36:13','2025-07-18 06:36:13',5,NULL),
|
||||
(385,'2025-07-18',3,3,2,1,NULL,8.00,'2025-07-18 06:36:13','2025-07-18 06:36:13',5,NULL),
|
||||
(386,'2025-07-18',2,3,2,1,NULL,8.00,'2025-07-18 06:36:13','2025-07-18 06:36:13',5,NULL),
|
||||
(387,'2025-07-21',5,4,3,2,1,4.00,'2025-07-21 06:40:08','2025-07-21 06:40:08',5,NULL),
|
||||
(388,'2025-07-21',5,3,2,1,NULL,4.00,'2025-07-21 06:40:08','2025-07-21 06:40:08',5,NULL),
|
||||
(389,'2025-07-21',4,4,3,2,1,4.00,'2025-07-21 06:40:08','2025-07-21 06:40:08',5,NULL),
|
||||
(390,'2025-07-21',4,3,2,1,NULL,4.00,'2025-07-21 06:40:08','2025-07-21 06:40:08',5,NULL),
|
||||
(391,'2025-07-21',10,3,2,1,NULL,6.00,'2025-07-21 06:40:32','2025-07-22 06:58:42',5,3),
|
||||
(392,'2025-07-21',9,3,2,1,NULL,8.00,'2025-07-21 06:40:32','2025-07-21 06:40:32',5,NULL),
|
||||
(393,'2025-07-21',8,3,2,1,NULL,8.00,'2025-07-21 06:40:32','2025-07-21 06:40:32',5,NULL),
|
||||
(394,'2025-07-21',7,3,2,1,NULL,8.00,'2025-07-21 06:40:32','2025-07-21 06:40:32',5,NULL),
|
||||
(395,'2025-07-21',6,3,2,1,NULL,8.00,'2025-07-21 06:40:32','2025-07-21 06:40:32',5,NULL),
|
||||
(396,'2025-07-21',3,3,2,1,NULL,8.00,'2025-07-21 06:40:32','2025-07-21 06:40:32',5,NULL),
|
||||
(397,'2025-07-21',2,3,2,1,NULL,8.00,'2025-07-21 06:40:32','2025-07-21 06:40:32',5,NULL),
|
||||
(398,'2025-07-21',1,3,3,1,NULL,8.00,'2025-07-21 06:53:37','2025-07-21 06:53:37',3,NULL),
|
||||
(399,'2025-07-22',10,3,2,1,NULL,8.00,'2025-07-22 06:45:47','2025-07-22 06:45:47',5,NULL),
|
||||
(400,'2025-07-22',9,3,2,1,NULL,8.00,'2025-07-22 06:45:48','2025-07-22 06:45:48',5,NULL),
|
||||
(401,'2025-07-22',8,3,2,1,NULL,8.00,'2025-07-22 06:45:48','2025-07-22 06:45:48',5,NULL),
|
||||
(402,'2025-07-22',7,3,2,1,NULL,8.00,'2025-07-22 06:45:48','2025-07-22 06:45:48',5,NULL),
|
||||
(403,'2025-07-22',6,3,2,1,NULL,8.00,'2025-07-22 06:45:48','2025-07-22 06:45:48',5,NULL),
|
||||
(404,'2025-07-22',4,3,2,1,NULL,8.00,'2025-07-22 06:45:48','2025-07-22 06:45:48',5,NULL),
|
||||
(405,'2025-07-22',3,3,2,1,NULL,8.00,'2025-07-22 06:45:48','2025-07-22 06:45:48',5,NULL),
|
||||
(406,'2025-07-22',2,4,3,2,1,8.00,'2025-07-22 06:46:11','2025-07-22 06:46:11',5,NULL),
|
||||
(407,'2025-07-22',5,3,3,1,NULL,8.00,'2025-07-22 06:46:11','2025-07-22 06:46:11',3,NULL),
|
||||
(408,'2025-07-22',1,3,3,1,NULL,8.00,'2025-07-22 06:46:11','2025-07-22 06:46:11',3,NULL),
|
||||
(409,'2025-07-23',4,3,3,1,NULL,8.00,'2025-07-23 06:45:06','2025-07-23 06:45:06',5,NULL),
|
||||
(410,'2025-07-23',5,3,3,1,NULL,8.00,'2025-07-23 06:45:28','2025-07-23 06:45:28',3,NULL),
|
||||
(411,'2025-07-23',1,3,3,1,NULL,8.00,'2025-07-23 06:45:28','2025-07-23 06:45:28',3,NULL),
|
||||
(412,'2025-07-23',10,3,2,1,NULL,8.00,'2025-07-23 06:45:30','2025-07-23 06:45:30',5,NULL),
|
||||
(413,'2025-07-23',9,3,2,1,NULL,8.00,'2025-07-23 06:45:30','2025-07-23 06:45:30',5,NULL),
|
||||
(414,'2025-07-23',7,3,2,1,NULL,8.00,'2025-07-23 06:45:30','2025-07-23 06:45:30',5,NULL),
|
||||
(415,'2025-07-23',6,3,2,1,NULL,8.00,'2025-07-23 06:45:30','2025-07-23 06:45:30',5,NULL),
|
||||
(416,'2025-07-23',3,3,2,1,NULL,8.00,'2025-07-23 06:45:30','2025-07-23 06:45:30',5,NULL),
|
||||
(417,'2025-07-23',2,3,2,1,NULL,8.00,'2025-07-23 06:45:30','2025-07-23 06:45:30',5,NULL),
|
||||
(418,'2025-07-24',4,3,3,1,NULL,8.00,'2025-07-24 06:36:55','2025-07-24 06:36:55',5,NULL),
|
||||
(419,'2025-07-24',10,3,2,1,NULL,8.00,'2025-07-24 06:37:18','2025-07-24 06:37:18',5,NULL),
|
||||
(420,'2025-07-24',9,3,2,1,NULL,8.00,'2025-07-24 06:37:18','2025-07-24 06:37:18',5,NULL),
|
||||
(421,'2025-07-24',7,3,2,1,NULL,8.00,'2025-07-24 06:37:18','2025-07-24 06:37:18',5,NULL),
|
||||
(422,'2025-07-24',6,3,2,1,NULL,8.00,'2025-07-24 06:37:18','2025-07-24 06:37:18',5,NULL),
|
||||
(423,'2025-07-24',3,3,2,1,NULL,8.00,'2025-07-24 06:37:18','2025-07-24 06:37:18',5,NULL),
|
||||
(424,'2025-07-24',2,3,2,1,NULL,8.00,'2025-07-24 06:37:18','2025-07-24 06:37:18',5,NULL),
|
||||
(425,'2025-07-24',5,3,3,1,NULL,8.00,'2025-07-24 06:47:04','2025-07-24 06:47:04',3,NULL),
|
||||
(426,'2025-07-24',1,3,3,1,NULL,8.00,'2025-07-24 06:47:04','2025-07-24 06:47:04',3,NULL),
|
||||
(427,'2025-07-25',4,3,3,1,NULL,8.00,'2025-07-25 06:44:23','2025-07-25 06:44:23',5,NULL),
|
||||
(428,'2025-07-25',10,3,2,1,NULL,8.00,'2025-07-25 06:45:15','2025-07-25 06:45:15',5,NULL),
|
||||
(429,'2025-07-25',9,3,2,1,NULL,8.00,'2025-07-25 06:45:15','2025-07-25 06:45:15',5,NULL),
|
||||
(430,'2025-07-25',8,3,2,1,NULL,8.00,'2025-07-25 06:45:15','2025-07-25 06:45:15',5,NULL),
|
||||
(431,'2025-07-25',6,3,2,1,NULL,8.00,'2025-07-25 06:45:15','2025-07-25 06:45:15',5,NULL),
|
||||
(432,'2025-07-25',3,3,2,1,NULL,8.00,'2025-07-25 06:45:15','2025-07-25 06:45:15',5,NULL),
|
||||
(433,'2025-07-25',2,3,2,1,NULL,8.00,'2025-07-25 06:45:15','2025-07-25 06:45:15',5,NULL),
|
||||
(434,'2025-07-25',5,4,3,1,NULL,8.00,'2025-07-25 06:45:18','2025-07-25 06:45:18',3,NULL),
|
||||
(435,'2025-07-25',7,4,3,1,NULL,8.00,'2025-07-25 06:45:19','2025-07-25 06:45:19',3,NULL),
|
||||
(436,'2025-07-25',1,4,3,1,NULL,8.00,'2025-07-25 06:45:19','2025-07-25 06:45:19',3,NULL),
|
||||
(437,'2025-07-28',5,3,3,1,NULL,8.00,'2025-07-28 06:30:39','2025-07-28 06:30:39',3,NULL),
|
||||
(438,'2025-07-28',4,3,3,1,NULL,8.00,'2025-07-28 06:30:39','2025-07-28 06:30:39',3,NULL),
|
||||
(439,'2025-07-28',1,3,3,1,NULL,8.00,'2025-07-28 06:30:39','2025-07-28 06:30:39',3,NULL),
|
||||
(440,'2025-07-28',2,5,2,1,NULL,4.00,'2025-07-28 06:33:08','2025-07-28 06:33:08',5,NULL),
|
||||
(441,'2025-07-28',2,3,2,1,NULL,4.00,'2025-07-28 06:33:08','2025-07-28 06:33:08',5,NULL),
|
||||
(442,'2025-07-28',10,3,2,1,NULL,8.00,'2025-07-28 06:33:34','2025-07-28 06:33:34',5,NULL),
|
||||
(443,'2025-07-28',9,3,2,1,NULL,8.00,'2025-07-28 06:33:34','2025-07-28 06:33:34',5,NULL),
|
||||
(444,'2025-07-28',8,3,2,1,NULL,8.00,'2025-07-28 06:33:34','2025-07-28 06:33:34',5,NULL),
|
||||
(445,'2025-07-28',7,3,2,1,NULL,8.00,'2025-07-28 06:33:34','2025-07-28 06:33:34',5,NULL),
|
||||
(446,'2025-07-28',6,3,2,1,NULL,8.00,'2025-07-28 06:33:34','2025-07-28 06:33:34',5,NULL),
|
||||
(447,'2025-07-28',3,3,2,1,NULL,8.00,'2025-07-28 06:33:34','2025-07-28 06:33:34',5,NULL),
|
||||
(448,'2025-07-29',5,3,3,1,NULL,8.00,'2025-07-29 06:39:13','2025-07-29 06:39:13',3,NULL),
|
||||
(449,'2025-07-29',4,3,3,1,NULL,8.00,'2025-07-29 06:39:13','2025-07-29 06:39:13',3,NULL),
|
||||
(450,'2025-07-29',1,3,3,1,NULL,8.00,'2025-07-29 06:39:13','2025-07-29 06:39:13',3,NULL),
|
||||
(451,'2025-07-30',5,3,3,1,NULL,8.00,'2025-07-30 06:50:30','2025-07-30 06:50:30',3,NULL),
|
||||
(452,'2025-07-30',4,3,3,1,NULL,8.00,'2025-07-30 06:50:30','2025-07-30 06:50:30',3,NULL),
|
||||
(453,'2025-07-30',1,3,3,1,NULL,8.00,'2025-07-30 06:50:30','2025-07-30 06:50:30',3,NULL),
|
||||
(454,'2025-07-30',10,3,2,1,NULL,8.00,'2025-07-30 06:52:16','2025-07-30 06:52:16',5,NULL),
|
||||
(455,'2025-07-30',9,3,2,1,NULL,8.00,'2025-07-30 06:52:16','2025-07-30 06:52:16',5,NULL),
|
||||
(456,'2025-07-30',8,3,2,1,NULL,8.00,'2025-07-30 06:52:16','2025-07-30 06:52:16',5,NULL),
|
||||
(457,'2025-07-30',7,3,2,1,NULL,8.00,'2025-07-30 06:52:16','2025-07-30 06:52:16',5,NULL),
|
||||
(458,'2025-07-30',6,3,2,1,NULL,8.00,'2025-07-30 06:52:16','2025-07-30 06:52:16',5,NULL),
|
||||
(459,'2025-07-30',3,3,2,1,NULL,8.00,'2025-07-30 06:52:16','2025-07-30 06:52:16',5,NULL),
|
||||
(460,'2025-07-30',2,3,2,1,NULL,8.00,'2025-07-30 06:52:16','2025-07-30 06:52:16',5,NULL),
|
||||
(461,'2025-07-31',1,3,3,1,NULL,4.00,'2025-07-31 06:42:56','2025-07-31 06:42:56',5,NULL),
|
||||
(462,'2025-07-31',4,3,3,1,NULL,4.00,'2025-07-31 06:43:32','2025-07-31 06:43:32',5,NULL),
|
||||
(463,'2025-07-31',4,3,2,1,NULL,4.00,'2025-07-31 06:43:32','2025-07-31 06:43:32',5,NULL),
|
||||
(464,'2025-07-31',5,3,3,1,NULL,4.00,'2025-07-31 06:43:32','2025-07-31 06:43:32',5,NULL),
|
||||
(465,'2025-07-31',5,3,2,1,NULL,4.00,'2025-07-31 06:43:32','2025-07-31 06:43:32',5,NULL),
|
||||
(466,'2025-07-31',10,3,2,1,NULL,8.00,'2025-07-31 06:44:00','2025-07-31 06:44:00',5,NULL),
|
||||
(467,'2025-07-31',9,3,2,1,NULL,8.00,'2025-07-31 06:44:00','2025-07-31 06:44:00',5,NULL),
|
||||
(468,'2025-07-31',8,3,2,1,NULL,8.00,'2025-07-31 06:44:00','2025-07-31 06:44:00',5,NULL),
|
||||
(469,'2025-07-31',7,3,2,1,NULL,8.00,'2025-07-31 06:44:00','2025-07-31 06:44:00',5,NULL),
|
||||
(470,'2025-07-31',6,3,2,1,NULL,8.00,'2025-07-31 06:44:00','2025-07-31 06:44:00',5,NULL),
|
||||
(471,'2025-07-31',3,3,2,1,NULL,8.00,'2025-07-31 06:44:00','2025-07-31 06:44:00',5,NULL),
|
||||
(472,'2025-07-31',2,3,2,1,NULL,8.00,'2025-07-31 06:44:00','2025-07-31 06:44:00',5,NULL),
|
||||
(473,'2025-07-11',10,3,2,1,NULL,8.00,'2025-07-31 22:24:47','2025-07-31 22:24:47',3,NULL),
|
||||
(474,'2025-07-11',5,3,2,1,NULL,8.00,'2025-07-31 22:24:47','2025-07-31 22:24:47',3,NULL),
|
||||
(475,'2025-07-11',4,3,2,1,NULL,8.00,'2025-07-31 22:24:47','2025-07-31 22:24:47',3,NULL),
|
||||
(476,'2025-07-11',9,3,2,1,NULL,8.00,'2025-07-31 22:24:47','2025-07-31 22:24:47',3,NULL),
|
||||
(477,'2025-07-11',8,3,2,1,NULL,8.00,'2025-07-31 22:24:47','2025-07-31 22:24:47',3,NULL),
|
||||
(478,'2025-07-11',3,3,2,1,NULL,8.00,'2025-07-31 22:24:47','2025-07-31 22:24:47',3,NULL),
|
||||
(479,'2025-07-11',2,3,2,1,NULL,8.00,'2025-07-31 22:24:47','2025-07-31 22:24:47',3,NULL),
|
||||
(480,'2025-07-11',7,3,2,1,NULL,8.00,'2025-07-31 22:24:47','2025-07-31 22:24:47',3,NULL),
|
||||
(481,'2025-07-11',6,3,2,1,NULL,8.00,'2025-07-31 22:24:47','2025-07-31 22:24:47',3,NULL),
|
||||
(482,'2025-07-11',1,3,2,1,NULL,8.00,'2025-07-31 22:24:47','2025-07-31 22:24:47',3,NULL),
|
||||
(483,'2025-08-01',10,3,2,1,NULL,8.00,'2025-08-01 04:57:47','2025-08-01 04:57:47',5,NULL),
|
||||
(484,'2025-08-01',9,3,2,1,NULL,8.00,'2025-08-01 04:57:47','2025-08-01 04:57:47',5,NULL),
|
||||
(485,'2025-08-01',8,3,2,1,NULL,8.00,'2025-08-01 04:57:47','2025-08-01 04:57:47',5,NULL),
|
||||
(486,'2025-08-01',7,3,2,1,NULL,8.00,'2025-08-01 04:57:47','2025-08-01 04:57:47',5,NULL),
|
||||
(487,'2025-08-01',6,3,2,1,NULL,8.00,'2025-08-01 04:57:47','2025-08-01 04:57:47',5,NULL),
|
||||
(488,'2025-08-01',3,3,2,1,NULL,8.00,'2025-08-01 04:57:47','2025-08-01 04:57:47',5,NULL),
|
||||
(489,'2025-08-01',2,3,2,1,NULL,8.00,'2025-08-01 04:57:48','2025-08-01 04:57:48',5,NULL),
|
||||
(490,'2025-08-01',4,3,3,1,NULL,4.00,'2025-08-01 05:02:28','2025-08-01 05:02:28',3,NULL),
|
||||
(491,'2025-08-01',4,5,1,1,NULL,4.00,'2025-08-01 05:02:28','2025-08-01 05:02:28',3,NULL),
|
||||
(492,'2025-08-01',5,3,3,1,NULL,4.00,'2025-08-01 05:02:28','2025-08-01 05:02:28',3,NULL),
|
||||
(493,'2025-08-01',5,5,1,1,NULL,4.00,'2025-08-01 05:02:28','2025-08-01 05:02:28',3,NULL),
|
||||
(494,'2025-08-07',9,3,2,2,4,4.00,'2025-08-07 06:42:39','2025-08-07 06:42:39',5,NULL),
|
||||
(495,'2025-08-07',9,3,2,1,NULL,4.00,'2025-08-07 06:42:39','2025-08-07 06:42:39',5,NULL),
|
||||
(496,'2025-08-07',7,3,2,2,4,4.00,'2025-08-07 06:42:39','2025-08-07 06:42:39',5,NULL),
|
||||
(497,'2025-08-07',7,3,2,1,NULL,4.00,'2025-08-07 06:42:39','2025-08-07 06:42:39',5,NULL),
|
||||
(498,'2025-08-07',10,5,2,1,NULL,8.00,'2025-08-07 06:43:14','2025-08-07 06:43:14',5,NULL),
|
||||
(499,'2025-08-07',4,5,2,1,NULL,8.00,'2025-08-07 06:43:15','2025-08-07 06:43:15',5,NULL),
|
||||
(500,'2025-08-07',2,5,2,1,NULL,8.00,'2025-08-07 06:43:15','2025-08-07 06:43:15',5,NULL),
|
||||
(501,'2025-08-07',6,3,2,1,NULL,8.00,'2025-08-07 06:43:39','2025-08-07 06:43:39',5,NULL),
|
||||
(502,'2025-08-07',3,3,2,1,NULL,8.00,'2025-08-07 06:43:39','2025-08-07 06:43:39',5,NULL),
|
||||
(503,'2025-08-07',8,3,2,1,NULL,8.00,'2025-08-07 06:43:39','2025-08-07 06:43:39',5,NULL),
|
||||
(504,'2025-08-07',1,3,3,1,NULL,8.00,'2025-08-07 06:43:52','2025-08-07 06:43:52',3,NULL),
|
||||
(505,'2025-08-08',1,3,3,1,NULL,8.00,'2025-08-08 06:45:20','2025-08-08 06:45:20',3,NULL),
|
||||
(506,'2025-08-08',10,5,2,1,NULL,8.00,'2025-08-08 06:58:42','2025-08-08 06:58:42',5,NULL),
|
||||
(507,'2025-08-08',2,5,2,1,NULL,8.00,'2025-08-08 06:58:42','2025-08-08 06:58:42',5,NULL),
|
||||
(508,'2025-08-08',9,3,2,1,NULL,8.00,'2025-08-08 06:59:18','2025-08-08 06:59:18',5,NULL),
|
||||
(509,'2025-08-08',8,3,2,1,NULL,8.00,'2025-08-08 06:59:19','2025-08-08 06:59:19',5,NULL),
|
||||
(510,'2025-08-08',3,3,2,1,NULL,8.00,'2025-08-08 06:59:19','2025-08-08 06:59:19',5,NULL),
|
||||
(511,'2025-08-08',4,3,2,1,NULL,8.00,'2025-08-08 06:59:19','2025-08-08 06:59:19',5,NULL),
|
||||
(512,'2025-08-08',6,3,2,1,NULL,8.00,'2025-08-08 06:59:19','2025-08-08 06:59:19',5,NULL),
|
||||
(513,'2025-08-11',1,3,3,1,NULL,8.00,'2025-08-11 06:27:37','2025-08-11 06:27:37',3,NULL),
|
||||
(514,'2025-08-11',1,3,3,1,NULL,8.00,'2025-08-11 06:27:37','2025-08-11 06:27:37',3,NULL),
|
||||
(515,'2025-08-11',10,5,2,1,NULL,8.00,'2025-08-11 06:46:23','2025-08-11 06:46:23',5,NULL),
|
||||
(516,'2025-08-11',2,5,2,1,NULL,8.00,'2025-08-11 06:46:23','2025-08-11 06:46:23',5,NULL),
|
||||
(517,'2025-08-11',8,3,2,1,NULL,8.00,'2025-08-11 06:46:49','2025-08-11 06:46:49',5,NULL),
|
||||
(518,'2025-08-11',7,3,2,1,NULL,8.00,'2025-08-11 06:46:49','2025-08-11 06:46:49',5,NULL),
|
||||
(519,'2025-08-11',6,3,2,1,NULL,8.00,'2025-08-11 06:46:50','2025-08-11 06:46:50',5,NULL),
|
||||
(520,'2025-08-11',5,3,2,1,NULL,8.00,'2025-08-11 06:46:50','2025-08-11 06:46:50',5,NULL),
|
||||
(521,'2025-08-11',4,3,2,1,NULL,8.00,'2025-08-11 06:46:50','2025-08-11 06:46:50',5,NULL),
|
||||
(522,'2025-08-11',3,3,2,1,NULL,8.00,'2025-08-11 06:46:50','2025-08-11 06:46:50',5,NULL),
|
||||
(523,'2025-08-12',10,3,2,1,NULL,8.00,'2025-08-12 06:47:24','2025-08-12 06:47:24',3,NULL),
|
||||
(524,'2025-08-12',9,3,2,1,NULL,8.00,'2025-08-12 06:47:24','2025-08-12 06:47:24',3,NULL),
|
||||
(525,'2025-08-12',8,3,2,1,NULL,8.00,'2025-08-12 06:47:24','2025-08-12 06:47:24',3,NULL),
|
||||
(526,'2025-08-12',7,3,2,1,NULL,8.00,'2025-08-12 06:47:24','2025-08-12 06:47:24',3,NULL),
|
||||
(527,'2025-08-12',5,3,2,1,NULL,8.00,'2025-08-12 06:47:24','2025-08-12 06:47:24',3,NULL),
|
||||
(528,'2025-08-12',4,3,2,1,NULL,8.00,'2025-08-12 06:47:24','2025-08-12 06:47:24',3,NULL),
|
||||
(529,'2025-08-12',3,3,2,1,NULL,8.00,'2025-08-12 06:47:24','2025-08-12 06:47:24',3,NULL),
|
||||
(530,'2025-08-12',1,3,2,1,NULL,8.00,'2025-08-12 06:47:24','2025-08-12 06:47:24',3,NULL),
|
||||
(531,'2025-08-13',1,3,3,1,NULL,8.00,'2025-08-13 06:31:32','2025-08-13 06:31:32',3,NULL),
|
||||
(532,'2025-08-13',2,3,2,1,NULL,4.00,'2025-08-13 06:36:13','2025-08-13 06:36:13',5,NULL),
|
||||
(533,'2025-08-13',2,5,2,1,NULL,4.00,'2025-08-13 06:36:13','2025-08-13 06:36:13',5,NULL),
|
||||
(534,'2025-08-13',9,3,2,1,NULL,8.00,'2025-08-13 06:36:48','2025-08-13 06:36:48',5,NULL),
|
||||
(535,'2025-08-13',8,3,2,1,NULL,8.00,'2025-08-13 06:36:48','2025-08-13 06:36:48',5,NULL),
|
||||
(536,'2025-08-13',7,3,2,1,NULL,8.00,'2025-08-13 06:36:48','2025-08-13 06:36:48',5,NULL),
|
||||
(537,'2025-08-13',6,3,2,1,NULL,8.00,'2025-08-13 06:36:48','2025-08-13 06:36:48',5,NULL),
|
||||
(538,'2025-08-13',5,3,2,1,NULL,8.00,'2025-08-13 06:36:48','2025-08-13 06:36:48',5,NULL),
|
||||
(539,'2025-08-13',4,3,2,1,NULL,8.00,'2025-08-13 06:36:48','2025-08-13 06:36:48',5,NULL),
|
||||
(540,'2025-08-13',3,3,2,1,NULL,8.00,'2025-08-13 06:36:48','2025-08-13 06:36:48',5,NULL),
|
||||
(541,'2025-08-13',10,5,2,1,NULL,8.00,'2025-08-13 06:37:19','2025-08-13 06:37:19',5,NULL),
|
||||
(542,'2025-08-14',1,3,3,2,1,4.00,'2025-08-14 06:35:27','2025-08-14 06:35:27',3,NULL),
|
||||
(543,'2025-08-14',1,3,3,1,NULL,4.00,'2025-08-14 06:35:27','2025-08-14 06:35:27',3,NULL),
|
||||
(544,'2025-08-14',10,5,2,1,NULL,4.00,'2025-08-14 06:39:03','2025-08-14 06:39:03',5,NULL),
|
||||
(545,'2025-08-14',10,5,3,1,NULL,4.00,'2025-08-14 06:39:03','2025-08-14 06:39:03',5,NULL),
|
||||
(546,'2025-08-14',2,5,2,1,NULL,2.00,'2025-08-14 06:39:44','2025-08-14 06:39:44',5,NULL),
|
||||
(547,'2025-08-14',2,3,2,1,NULL,6.00,'2025-08-14 06:39:44','2025-08-14 06:39:44',5,NULL),
|
||||
(548,'2025-08-14',9,3,2,1,NULL,8.00,'2025-08-14 06:40:10','2025-08-14 06:40:10',5,NULL),
|
||||
(549,'2025-08-14',8,3,2,1,NULL,8.00,'2025-08-14 06:40:10','2025-08-14 06:40:10',5,NULL),
|
||||
(550,'2025-08-14',7,3,2,1,NULL,8.00,'2025-08-14 06:40:10','2025-08-14 06:40:10',5,NULL),
|
||||
(551,'2025-08-14',6,3,2,1,NULL,8.00,'2025-08-14 06:40:10','2025-08-14 06:40:10',5,NULL),
|
||||
(552,'2025-08-14',5,3,2,1,NULL,8.00,'2025-08-14 06:40:10','2025-08-14 06:40:10',5,NULL),
|
||||
(553,'2025-08-14',4,3,2,1,NULL,8.00,'2025-08-14 06:40:10','2025-08-14 06:40:10',5,NULL),
|
||||
(554,'2025-08-18',2,3,2,1,NULL,8.00,'2025-08-18 06:21:36','2025-08-18 06:21:36',5,NULL),
|
||||
(555,'2025-08-18',8,3,2,1,NULL,8.00,'2025-08-18 06:21:36','2025-08-18 06:21:36',5,NULL),
|
||||
(556,'2025-08-18',4,3,2,1,NULL,8.00,'2025-08-18 06:22:01','2025-08-18 06:22:01',5,NULL),
|
||||
(557,'2025-08-18',10,5,3,1,NULL,6.00,'2025-08-18 06:22:53','2025-08-18 06:22:53',5,NULL),
|
||||
(558,'2025-08-18',10,3,2,1,NULL,2.00,'2025-08-18 06:22:53','2025-08-18 06:22:53',5,NULL),
|
||||
(559,'2025-08-18',9,3,2,1,NULL,4.00,'2025-08-18 06:23:34','2025-08-18 06:23:34',5,NULL),
|
||||
(560,'2025-08-18',9,3,3,1,NULL,4.00,'2025-08-18 06:23:34','2025-08-18 06:23:34',5,NULL),
|
||||
(561,'2025-08-18',5,3,3,2,1,4.00,'2025-08-18 06:41:24','2025-08-18 06:41:24',3,NULL),
|
||||
(562,'2025-08-18',1,3,3,2,1,4.00,'2025-08-18 06:41:24','2025-08-18 06:41:24',3,NULL),
|
||||
(563,'2025-08-18',7,3,3,2,1,4.00,'2025-08-18 06:41:24','2025-08-18 06:41:24',3,NULL),
|
||||
(564,'2025-08-18',7,3,3,1,NULL,4.00,'2025-08-18 06:43:10','2025-08-18 06:43:10',3,NULL),
|
||||
(565,'2025-08-18',5,3,3,1,NULL,4.00,'2025-08-18 06:43:10','2025-08-18 06:43:10',3,NULL),
|
||||
(566,'2025-08-18',1,3,3,1,NULL,4.00,'2025-08-18 06:43:10','2025-08-18 06:43:10',3,NULL),
|
||||
(567,'2025-08-18',6,3,3,1,NULL,8.00,'2025-08-18 06:43:35','2025-08-18 06:43:35',6,NULL),
|
||||
(568,'2025-08-18',3,3,3,1,NULL,8.00,'2025-08-18 06:43:35','2025-08-18 06:43:35',6,NULL),
|
||||
(569,'2025-08-19',1,3,3,1,NULL,6.00,'2025-08-19 08:02:49','2025-08-19 08:02:49',5,NULL),
|
||||
(570,'2025-08-19',3,3,3,1,NULL,10.00,'2025-08-19 08:03:30','2025-08-19 08:03:30',5,NULL),
|
||||
(571,'2025-08-19',6,3,3,1,NULL,10.00,'2025-08-19 08:03:30','2025-08-19 08:03:30',5,NULL),
|
||||
(572,'2025-08-19',7,3,3,1,NULL,10.00,'2025-08-19 08:03:30','2025-08-19 08:03:30',5,NULL),
|
||||
(573,'2025-08-19',9,3,3,1,NULL,10.00,'2025-08-19 08:03:30','2025-08-19 08:03:30',5,NULL),
|
||||
(574,'2025-08-19',10,3,2,1,NULL,10.00,'2025-08-19 08:04:05','2025-08-19 08:04:05',5,NULL),
|
||||
(575,'2025-08-19',8,3,2,1,NULL,10.00,'2025-08-19 08:04:05','2025-08-19 08:04:05',5,NULL),
|
||||
(576,'2025-08-19',5,3,2,1,NULL,10.00,'2025-08-19 08:04:05','2025-08-19 08:04:05',5,NULL),
|
||||
(577,'2025-08-19',4,3,2,1,NULL,10.00,'2025-08-19 08:04:05','2025-08-19 08:04:05',5,NULL),
|
||||
(578,'2025-08-19',2,3,2,1,NULL,10.00,'2025-08-19 08:04:05','2025-08-19 08:04:05',5,NULL),
|
||||
(579,'2025-08-19',3,3,3,1,NULL,10.00,'2025-08-19 08:36:51','2025-08-19 08:36:51',6,NULL),
|
||||
(580,'2025-08-19',7,3,3,1,NULL,10.00,'2025-08-19 08:36:51','2025-08-19 08:36:51',6,NULL),
|
||||
(581,'2025-08-19',6,3,3,1,NULL,10.00,'2025-08-19 08:36:51','2025-08-19 08:36:51',6,NULL),
|
||||
(582,'2025-08-20',2,3,2,1,NULL,8.00,'2025-08-20 06:19:36','2025-08-20 06:19:36',5,NULL),
|
||||
(583,'2025-08-20',5,3,1,1,NULL,2.00,'2025-08-20 06:21:28','2025-08-20 06:21:28',5,NULL),
|
||||
(584,'2025-08-20',5,3,2,1,NULL,6.00,'2025-08-20 06:21:28','2025-08-20 06:21:28',5,NULL),
|
||||
(585,'2025-08-20',4,3,1,1,NULL,2.00,'2025-08-20 06:21:28','2025-08-20 06:21:28',5,NULL),
|
||||
(586,'2025-08-20',4,3,2,1,NULL,6.00,'2025-08-20 06:21:28','2025-08-20 06:21:28',5,NULL),
|
||||
(587,'2025-08-20',6,3,3,1,NULL,4.00,'2025-08-20 06:43:46','2025-08-20 06:43:46',3,NULL),
|
||||
(588,'2025-08-20',10,3,3,1,NULL,8.00,'2025-08-20 06:44:23','2025-08-20 06:44:23',3,NULL),
|
||||
(589,'2025-08-20',9,3,3,1,NULL,8.00,'2025-08-20 06:44:23','2025-08-20 06:44:23',3,NULL),
|
||||
(590,'2025-08-20',8,3,3,1,NULL,8.00,'2025-08-20 06:44:23','2025-08-20 06:44:23',3,NULL),
|
||||
(591,'2025-08-20',7,3,3,1,NULL,8.00,'2025-08-20 06:44:24','2025-08-20 06:44:24',3,NULL),
|
||||
(592,'2025-08-20',3,3,3,1,NULL,8.00,'2025-08-20 06:44:24','2025-08-20 06:44:24',3,NULL),
|
||||
(593,'2025-08-20',1,3,3,1,NULL,8.00,'2025-08-20 06:44:24','2025-08-20 06:44:24',3,NULL),
|
||||
(594,'2025-08-20',10,3,3,1,NULL,8.00,'2025-08-20 06:44:26','2025-08-20 06:44:26',6,NULL),
|
||||
(595,'2025-08-20',3,3,3,1,NULL,8.00,'2025-08-20 06:44:26','2025-08-20 06:44:26',6,NULL),
|
||||
(596,'2025-08-21',7,3,3,1,NULL,8.00,'2025-08-21 06:30:36','2025-08-21 06:30:36',3,NULL),
|
||||
(597,'2025-08-21',1,3,3,1,NULL,8.00,'2025-08-21 06:30:36','2025-08-21 06:30:36',3,NULL),
|
||||
(598,'2025-08-21',1,3,3,1,NULL,8.00,'2025-08-21 07:50:38','2025-08-21 07:50:38',5,NULL),
|
||||
(599,'2025-08-21',7,3,3,1,NULL,8.00,'2025-08-21 07:50:38','2025-08-21 07:50:38',5,NULL),
|
||||
(600,'2025-08-21',10,3,3,1,NULL,8.00,'2025-08-21 07:51:23','2025-08-21 07:51:23',5,NULL),
|
||||
(601,'2025-08-21',10,3,3,1,NULL,2.00,'2025-08-21 07:51:23','2025-08-21 07:51:23',5,NULL),
|
||||
(602,'2025-08-21',9,3,3,1,NULL,8.00,'2025-08-21 07:51:23','2025-08-21 07:51:23',5,NULL),
|
||||
(603,'2025-08-21',9,3,3,1,NULL,2.00,'2025-08-21 07:51:23','2025-08-21 07:51:23',5,NULL),
|
||||
(604,'2025-08-21',6,3,3,1,NULL,8.00,'2025-08-21 07:51:23','2025-08-21 07:51:23',5,NULL),
|
||||
(605,'2025-08-21',6,3,3,1,NULL,2.00,'2025-08-21 07:51:23','2025-08-21 07:51:23',5,NULL),
|
||||
(606,'2025-08-21',3,3,3,1,NULL,8.00,'2025-08-21 07:51:23','2025-08-21 07:51:23',5,NULL),
|
||||
(607,'2025-08-21',3,3,3,1,NULL,2.00,'2025-08-21 07:51:23','2025-08-21 07:51:23',5,NULL),
|
||||
(608,'2025-08-21',2,3,2,1,NULL,8.00,'2025-08-21 07:54:46','2025-08-21 07:54:46',5,NULL),
|
||||
(609,'2025-08-21',2,5,2,1,NULL,2.00,'2025-08-21 07:54:46','2025-08-21 07:54:46',5,NULL),
|
||||
(610,'2025-08-21',8,3,3,1,NULL,4.00,'2025-08-21 07:55:25','2025-08-21 07:55:25',5,NULL),
|
||||
(611,'2025-08-21',8,3,2,1,NULL,6.00,'2025-08-21 07:55:25','2025-08-21 07:55:25',5,NULL),
|
||||
(612,'2025-08-21',6,3,3,1,NULL,10.00,'2025-08-21 08:24:50','2025-08-21 08:24:50',6,NULL),
|
||||
(613,'2025-08-21',3,3,3,1,NULL,10.00,'2025-08-21 08:24:50','2025-08-21 08:24:50',6,NULL),
|
||||
(614,'2025-08-22',2,3,2,1,NULL,8.00,'2025-08-22 06:21:15','2025-08-22 06:21:15',5,NULL),
|
||||
(615,'2025-08-22',8,3,2,1,NULL,4.00,'2025-08-22 06:23:12','2025-08-22 06:23:12',5,NULL),
|
||||
(616,'2025-08-22',8,3,3,1,NULL,4.00,'2025-08-22 06:23:12','2025-08-22 06:23:12',5,NULL),
|
||||
(617,'2025-08-22',5,3,3,1,NULL,8.00,'2025-08-22 06:23:55','2025-08-22 06:23:55',5,NULL),
|
||||
(618,'2025-08-22',6,3,2,1,NULL,4.00,'2025-08-22 06:27:43','2025-08-22 06:27:43',3,NULL),
|
||||
(619,'2025-08-22',10,3,3,1,NULL,8.00,'2025-08-22 06:28:15','2025-08-22 06:28:15',3,NULL),
|
||||
(620,'2025-08-22',9,3,3,1,NULL,8.00,'2025-08-22 06:28:15','2025-08-22 06:28:15',3,NULL),
|
||||
(621,'2025-08-22',7,3,3,1,NULL,8.00,'2025-08-22 06:28:15','2025-08-22 06:28:15',3,NULL),
|
||||
(622,'2025-08-22',4,3,3,1,NULL,8.00,'2025-08-22 06:28:15','2025-08-22 06:28:15',3,NULL),
|
||||
(623,'2025-08-22',3,3,3,1,NULL,8.00,'2025-08-22 06:28:15','2025-08-22 06:28:15',3,NULL),
|
||||
(624,'2025-08-22',1,3,3,1,NULL,8.00,'2025-08-22 06:28:15','2025-08-22 06:28:15',3,NULL),
|
||||
(625,'2025-08-23',4,3,2,1,NULL,2.00,'2025-08-23 04:57:02','2025-08-23 04:57:02',5,NULL),
|
||||
(626,'2025-08-23',4,3,3,1,NULL,6.00,'2025-08-23 04:57:02','2025-08-23 04:57:02',5,NULL),
|
||||
(627,'2025-08-23',2,3,2,1,NULL,8.00,'2025-08-23 04:57:25','2025-08-23 04:57:25',5,NULL),
|
||||
(628,'2025-08-23',10,3,3,1,NULL,8.00,'2025-08-23 04:57:54','2025-08-23 04:57:54',5,NULL),
|
||||
(629,'2025-08-23',9,3,3,1,NULL,8.00,'2025-08-23 04:57:54','2025-08-23 04:57:54',5,NULL),
|
||||
(630,'2025-08-23',8,3,3,1,NULL,8.00,'2025-08-23 04:57:54','2025-08-23 04:57:54',5,NULL),
|
||||
(631,'2025-08-23',6,3,3,1,NULL,8.00,'2025-08-23 04:57:54','2025-08-23 04:57:54',5,NULL),
|
||||
(632,'2025-08-23',5,3,3,1,NULL,8.00,'2025-08-23 04:57:54','2025-08-23 04:57:54',5,NULL),
|
||||
(633,'2025-08-23',3,3,3,1,NULL,8.00,'2025-08-23 04:57:54','2025-08-23 04:57:54',5,NULL),
|
||||
(634,'2025-08-23',1,3,3,1,NULL,8.00,'2025-08-23 04:57:54','2025-08-23 04:57:54',5,NULL),
|
||||
(635,'2025-08-25',10,3,3,1,NULL,8.00,'2025-08-25 06:48:34','2025-08-25 06:48:34',3,NULL),
|
||||
(636,'2025-08-25',9,3,3,1,NULL,8.00,'2025-08-25 06:48:34','2025-08-25 06:48:34',3,NULL),
|
||||
(637,'2025-08-25',8,3,3,1,NULL,8.00,'2025-08-25 06:48:34','2025-08-25 06:48:34',3,NULL),
|
||||
(638,'2025-08-25',7,3,3,1,NULL,8.00,'2025-08-25 06:48:34','2025-08-25 06:48:34',3,NULL),
|
||||
(639,'2025-08-25',6,3,3,1,NULL,8.00,'2025-08-25 06:48:34','2025-08-25 06:48:34',3,NULL),
|
||||
(640,'2025-08-25',5,3,3,1,NULL,8.00,'2025-08-25 06:48:34','2025-08-25 06:48:34',3,NULL),
|
||||
(641,'2025-08-25',4,3,3,1,NULL,8.00,'2025-08-25 06:48:34','2025-08-25 06:48:34',3,NULL),
|
||||
(642,'2025-08-25',3,3,3,1,NULL,8.00,'2025-08-25 06:48:34','2025-08-25 06:48:34',3,NULL),
|
||||
(643,'2025-08-25',2,3,3,1,NULL,8.00,'2025-08-25 06:48:34','2025-08-25 06:48:34',3,NULL),
|
||||
(644,'2025-08-25',1,3,3,1,NULL,8.00,'2025-08-25 06:48:34','2025-08-25 06:48:34',3,NULL),
|
||||
(645,'2025-08-25',6,3,3,1,NULL,8.00,'2025-08-25 06:49:16','2025-08-25 06:49:16',6,NULL),
|
||||
(646,'2025-08-25',3,3,3,1,NULL,8.00,'2025-08-25 06:49:17','2025-08-25 06:49:17',6,NULL),
|
||||
(647,'2025-08-26',4,8,3,1,NULL,8.00,'2025-08-26 07:28:03','2025-08-26 07:28:03',5,NULL),
|
||||
(648,'2025-08-26',4,3,3,1,NULL,2.00,'2025-08-26 07:28:03','2025-08-26 07:28:03',5,NULL),
|
||||
(649,'2025-08-26',2,8,3,1,NULL,10.00,'2025-08-26 07:28:35','2025-08-26 07:28:35',5,NULL),
|
||||
(650,'2025-08-26',10,3,3,1,NULL,10.00,'2025-08-26 07:29:02','2025-08-26 07:29:02',5,NULL),
|
||||
(651,'2025-08-26',9,3,3,1,NULL,10.00,'2025-08-26 07:29:02','2025-08-26 07:29:02',5,NULL),
|
||||
(652,'2025-08-26',8,3,3,1,NULL,10.00,'2025-08-26 07:29:02','2025-08-26 07:29:02',5,NULL),
|
||||
(653,'2025-08-26',7,3,3,1,NULL,10.00,'2025-08-26 07:29:02','2025-08-26 07:29:02',5,NULL),
|
||||
(654,'2025-08-26',6,3,3,1,NULL,10.00,'2025-08-26 07:29:02','2025-08-26 07:29:02',5,NULL),
|
||||
(655,'2025-08-26',5,3,3,1,NULL,10.00,'2025-08-26 07:29:02','2025-08-26 07:29:02',5,NULL),
|
||||
(656,'2025-08-26',3,3,3,1,NULL,10.00,'2025-08-26 07:29:02','2025-08-26 07:29:02',5,NULL),
|
||||
(657,'2025-08-26',1,3,3,1,NULL,10.00,'2025-08-26 07:29:03','2025-08-26 07:29:03',5,NULL),
|
||||
(658,'2025-08-26',6,3,3,1,NULL,10.00,'2025-08-26 08:22:12','2025-08-26 08:22:12',6,NULL),
|
||||
(659,'2025-08-26',10,3,3,1,NULL,10.00,'2025-08-26 08:22:12','2025-08-26 08:22:12',6,NULL),
|
||||
(660,'2025-08-26',3,3,3,1,NULL,10.00,'2025-08-26 08:22:12','2025-08-26 08:22:12',6,NULL),
|
||||
(661,'2025-08-27',10,3,3,2,5,8.00,'2025-08-27 06:44:47','2025-08-27 06:44:47',3,NULL),
|
||||
(662,'2025-08-27',9,3,3,2,5,8.00,'2025-08-27 06:44:47','2025-08-27 06:44:47',3,NULL),
|
||||
(663,'2025-08-27',7,3,3,2,5,8.00,'2025-08-27 06:44:47','2025-08-27 06:44:47',3,NULL),
|
||||
(664,'2025-08-27',6,3,3,2,5,8.00,'2025-08-27 06:44:47','2025-08-27 06:44:47',3,NULL),
|
||||
(665,'2025-08-27',5,3,3,2,5,8.00,'2025-08-27 06:44:47','2025-08-27 06:44:47',3,NULL),
|
||||
(666,'2025-08-27',4,3,3,2,5,8.00,'2025-08-27 06:44:47','2025-08-27 06:44:47',3,NULL),
|
||||
(667,'2025-08-27',3,3,3,2,5,8.00,'2025-08-27 06:44:47','2025-08-27 06:44:47',3,NULL),
|
||||
(668,'2025-08-27',1,3,3,2,5,8.00,'2025-08-27 06:44:48','2025-08-27 06:44:48',3,NULL),
|
||||
(669,'2025-08-27',2,3,3,2,1,2.00,'2025-08-27 06:45:32','2025-08-27 06:45:32',5,NULL),
|
||||
(670,'2025-08-27',2,8,2,1,NULL,6.00,'2025-08-27 06:45:32','2025-08-27 06:45:32',5,NULL),
|
||||
(671,'2025-08-27',8,3,3,2,1,2.00,'2025-08-27 06:45:32','2025-08-27 06:45:32',5,NULL),
|
||||
(672,'2025-08-27',8,8,2,1,NULL,6.00,'2025-08-27 06:45:32','2025-08-27 06:45:32',5,NULL),
|
||||
(673,'2025-08-28',10,3,3,1,NULL,6.00,'2025-08-28 08:31:42','2025-08-28 08:31:42',6,NULL),
|
||||
(674,'2025-08-28',10,3,3,2,1,4.00,'2025-08-28 08:31:42','2025-08-28 08:31:42',6,NULL),
|
||||
(675,'2025-08-28',5,3,3,1,NULL,6.00,'2025-08-28 08:31:42','2025-08-28 08:31:42',6,NULL),
|
||||
(676,'2025-08-28',5,3,3,2,1,4.00,'2025-08-28 08:31:42','2025-08-28 08:31:42',6,NULL),
|
||||
(677,'2025-08-28',6,3,3,1,NULL,6.00,'2025-08-28 08:31:42','2025-08-28 08:31:42',6,NULL),
|
||||
(678,'2025-08-28',6,3,3,2,1,4.00,'2025-08-28 08:31:42','2025-08-28 08:31:42',6,NULL),
|
||||
(679,'2025-08-28',3,3,3,1,NULL,6.00,'2025-08-28 08:31:42','2025-08-28 08:31:42',6,NULL),
|
||||
(680,'2025-08-28',3,3,3,2,1,4.00,'2025-08-28 08:31:42','2025-08-28 08:31:42',6,NULL),
|
||||
(681,'2025-08-28',4,3,3,1,NULL,4.00,'2025-08-28 08:37:46','2025-08-28 08:37:46',5,NULL),
|
||||
(682,'2025-08-28',4,5,3,1,NULL,4.00,'2025-08-28 08:37:46','2025-08-28 08:37:46',5,NULL),
|
||||
(683,'2025-08-28',8,8,2,1,NULL,4.00,'2025-08-28 08:38:15','2025-08-28 08:38:15',5,NULL),
|
||||
(684,'2025-08-28',8,5,3,1,NULL,4.00,'2025-08-28 08:38:15','2025-08-28 08:38:15',5,NULL),
|
||||
(685,'2025-08-28',2,3,3,2,1,2.00,'2025-08-28 08:38:50','2025-08-28 08:38:50',5,NULL),
|
||||
(686,'2025-08-28',2,5,3,1,NULL,6.00,'2025-08-28 08:38:50','2025-08-28 08:38:50',5,NULL),
|
||||
(687,'2025-08-28',1,3,3,2,1,8.00,'2025-08-28 08:39:24','2025-08-28 08:39:24',5,NULL),
|
||||
(689,'2025-08-28',9,3,3,2,4,8.00,'2025-08-28 08:40:00','2025-08-28 08:40:00',5,NULL),
|
||||
(690,'2025-08-28',7,3,3,2,4,8.00,'2025-08-28 08:40:00','2025-08-28 08:40:00',5,NULL),
|
||||
(694,'2025-08-28',4,5,3,1,NULL,2.00,'2025-08-28 08:44:56','2025-08-28 08:44:56',5,NULL),
|
||||
(695,'2025-08-28',8,5,3,1,NULL,2.00,'2025-08-28 08:44:56','2025-08-28 08:44:56',5,NULL),
|
||||
(696,'2025-08-28',2,5,3,1,NULL,2.00,'2025-08-28 08:44:56','2025-08-28 08:44:56',5,NULL),
|
||||
(698,'2025-08-28',9,3,3,1,NULL,2.00,'2025-08-28 08:45:19','2025-08-28 08:45:19',5,NULL),
|
||||
(699,'2025-08-28',7,3,3,1,NULL,2.00,'2025-08-28 08:45:19','2025-08-28 08:45:19',5,NULL),
|
||||
(703,'2025-08-29',10,3,3,2,5,8.00,'2025-08-29 06:47:02','2025-08-29 06:47:02',3,NULL),
|
||||
(704,'2025-08-29',9,3,3,2,5,8.00,'2025-08-29 06:47:02','2025-08-29 06:47:02',3,NULL),
|
||||
(706,'2025-08-29',7,3,3,2,5,8.00,'2025-08-29 06:47:02','2025-08-29 06:47:02',3,NULL),
|
||||
(710,'2025-08-29',1,3,3,2,5,8.00,'2025-08-29 06:47:02','2025-08-29 06:47:02',3,NULL),
|
||||
(713,'2025-08-29',5,3,3,1,NULL,6.00,'2025-08-29 06:47:35','2025-08-29 06:47:35',6,NULL),
|
||||
(714,'2025-08-29',5,3,3,2,1,2.00,'2025-08-29 06:47:35','2025-08-29 06:47:35',6,NULL),
|
||||
(715,'2025-08-29',3,3,3,1,NULL,6.00,'2025-08-29 06:47:35','2025-08-29 06:47:35',6,NULL),
|
||||
(716,'2025-08-29',3,3,3,2,1,2.00,'2025-08-29 06:47:35','2025-08-29 06:47:35',6,NULL),
|
||||
(717,'2025-08-29',6,3,3,1,NULL,6.00,'2025-08-29 06:47:35','2025-08-29 06:47:35',6,NULL),
|
||||
(718,'2025-08-29',6,3,3,2,1,2.00,'2025-08-29 06:47:35','2025-08-29 06:47:35',6,NULL),
|
||||
(719,'2025-08-29',8,5,3,1,NULL,8.00,'2025-08-29 21:55:56','2025-08-29 21:55:56',5,NULL),
|
||||
(720,'2025-08-29',4,5,3,1,NULL,8.00,'2025-08-29 21:55:56','2025-08-29 21:55:56',5,NULL),
|
||||
(721,'2025-08-29',2,5,3,1,NULL,8.00,'2025-08-29 21:55:56','2025-08-29 21:55:56',5,NULL),
|
||||
(722,'2025-08-30',2,5,3,1,NULL,8.00,'2025-08-30 05:12:03','2025-08-30 05:12:03',5,NULL),
|
||||
(723,'2025-08-30',8,5,3,1,NULL,8.00,'2025-08-30 05:12:03','2025-08-30 05:12:03',5,NULL),
|
||||
(724,'2025-08-30',4,5,3,1,NULL,8.00,'2025-08-30 05:12:03','2025-08-30 05:12:03',5,NULL),
|
||||
(725,'2025-08-30',10,3,3,2,1,8.00,'2025-08-30 05:36:49','2025-08-30 05:36:49',3,NULL),
|
||||
(726,'2025-08-30',9,3,3,2,1,8.00,'2025-08-30 05:36:49','2025-08-30 05:36:49',3,NULL),
|
||||
(727,'2025-08-30',7,3,3,2,1,8.00,'2025-08-30 05:36:49','2025-08-30 05:36:49',3,NULL),
|
||||
(728,'2025-08-30',6,3,3,2,1,8.00,'2025-08-30 05:36:49','2025-08-30 05:36:49',3,NULL),
|
||||
(729,'2025-08-30',5,3,3,2,1,8.00,'2025-08-30 05:36:49','2025-08-30 05:36:49',3,NULL),
|
||||
(730,'2025-08-30',3,3,3,2,1,8.00,'2025-08-30 05:36:49','2025-08-30 05:36:49',3,NULL),
|
||||
(731,'2025-08-30',1,3,3,2,1,8.00,'2025-08-30 05:36:49','2025-08-30 05:36:49',3,NULL),
|
||||
(732,'2025-09-01',7,3,3,1,NULL,8.00,'2025-09-01 06:18:28','2025-09-01 06:18:28',3,NULL),
|
||||
(733,'2025-09-01',9,3,3,1,NULL,8.00,'2025-09-01 06:18:28','2025-09-01 06:18:28',3,NULL),
|
||||
(734,'2025-09-01',10,3,3,2,5,4.00,'2025-09-01 06:19:11','2025-09-01 06:19:11',3,NULL),
|
||||
(735,'2025-09-01',3,3,3,2,5,4.00,'2025-09-01 06:19:11','2025-09-01 06:19:11',3,NULL),
|
||||
(736,'2025-09-01',1,3,3,2,5,4.00,'2025-09-01 06:19:11','2025-09-01 06:19:11',3,NULL),
|
||||
(737,'2025-09-01',10,3,3,1,NULL,4.00,'2025-09-01 06:19:35','2025-09-01 06:19:35',3,NULL),
|
||||
(738,'2025-09-01',3,3,3,1,NULL,4.00,'2025-09-01 06:19:35','2025-09-01 06:19:35',3,NULL),
|
||||
(739,'2025-09-01',1,3,3,1,NULL,4.00,'2025-09-01 06:19:35','2025-09-01 06:19:35',3,NULL),
|
||||
(740,'2025-09-01',5,3,3,2,1,8.00,'2025-09-01 06:20:03','2025-09-01 06:20:03',3,NULL);
|
||||
/*!40000 ALTER TABLE `daily_work_reports` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||
|
||||
-- Dump completed on 2025-09-01 23:19:44
|
||||
2563
deploy/tkfb-package/api.hyungi.net/db_archive/hyungi.sql
Normal file
2563
deploy/tkfb-package/api.hyungi.net/db_archive/hyungi.sql
Normal file
File diff suppressed because it is too large
Load Diff
2563
deploy/tkfb-package/api.hyungi.net/db_archive/hyungi_fixed.sql
Normal file
2563
deploy/tkfb-package/api.hyungi.net/db_archive/hyungi_fixed.sql
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,359 @@
|
||||
-- 근로 및 휴가 관리를 위한 테이블 확장
|
||||
-- 작성일: 2025-11-03
|
||||
|
||||
-- 1. 근로 유형 테이블 생성
|
||||
CREATE TABLE IF NOT EXISTS work_attendance_types (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
type_code VARCHAR(20) NOT NULL UNIQUE COMMENT '근로 유형 코드',
|
||||
type_name VARCHAR(50) NOT NULL COMMENT '근로 유형명',
|
||||
description TEXT COMMENT '설명',
|
||||
is_active BOOLEAN DEFAULT TRUE COMMENT '활성 상태',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) COMMENT='근로 유형 관리 테이블';
|
||||
|
||||
-- 2. 휴가 유형 테이블 생성
|
||||
CREATE TABLE IF NOT EXISTS vacation_types (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
type_code VARCHAR(20) NOT NULL UNIQUE COMMENT '휴가 유형 코드',
|
||||
type_name VARCHAR(50) NOT NULL COMMENT '휴가 유형명',
|
||||
hours_deduction DECIMAL(4,2) NOT NULL COMMENT '차감 시간',
|
||||
description TEXT COMMENT '설명',
|
||||
is_active BOOLEAN DEFAULT TRUE COMMENT '활성 상태',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) COMMENT='휴가 유형 관리 테이블';
|
||||
|
||||
-- 3. 일일 근태 기록 테이블 생성
|
||||
CREATE TABLE IF NOT EXISTS daily_attendance_records (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
record_date DATE NOT NULL COMMENT '기록 날짜',
|
||||
worker_id INT NOT NULL COMMENT '작업자 ID',
|
||||
total_work_hours DECIMAL(4,2) DEFAULT 0 COMMENT '총 작업 시간',
|
||||
attendance_type_id INT COMMENT '근로 유형 ID',
|
||||
vacation_type_id INT NULL COMMENT '휴가 유형 ID',
|
||||
is_vacation_processed BOOLEAN DEFAULT FALSE COMMENT '휴가 처리 여부',
|
||||
overtime_approved BOOLEAN DEFAULT FALSE COMMENT '초과근무 승인 여부',
|
||||
overtime_approved_by INT NULL COMMENT '초과근무 승인자 ID',
|
||||
overtime_approved_at TIMESTAMP NULL COMMENT '초과근무 승인 시간',
|
||||
status ENUM('incomplete', 'partial', 'complete', 'overtime', 'vacation', 'error') DEFAULT 'incomplete' COMMENT '상태',
|
||||
notes TEXT COMMENT '비고',
|
||||
created_by INT NOT NULL COMMENT '생성자 ID',
|
||||
updated_by INT NULL COMMENT '수정자 ID',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
|
||||
-- 외래키 제약조건
|
||||
FOREIGN KEY (worker_id) REFERENCES workers(worker_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (attendance_type_id) REFERENCES work_attendance_types(id),
|
||||
FOREIGN KEY (vacation_type_id) REFERENCES vacation_types(id),
|
||||
FOREIGN KEY (overtime_approved_by) REFERENCES users(user_id),
|
||||
FOREIGN KEY (created_by) REFERENCES users(user_id),
|
||||
FOREIGN KEY (updated_by) REFERENCES users(user_id),
|
||||
|
||||
-- 유니크 제약조건 (작업자별 날짜별 하나의 기록)
|
||||
UNIQUE KEY unique_worker_date (worker_id, record_date),
|
||||
|
||||
-- 인덱스
|
||||
INDEX idx_record_date (record_date),
|
||||
INDEX idx_worker_date (worker_id, record_date),
|
||||
INDEX idx_status (status)
|
||||
) COMMENT='일일 근태 기록 테이블';
|
||||
|
||||
-- 4. 휴가 잔여 관리 테이블 생성
|
||||
CREATE TABLE IF NOT EXISTS worker_vacation_balance (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
worker_id INT NOT NULL COMMENT '작업자 ID',
|
||||
year YEAR NOT NULL COMMENT '연도',
|
||||
total_annual_leave DECIMAL(4,2) DEFAULT 15.0 COMMENT '연간 총 연차 (일)',
|
||||
used_annual_leave DECIMAL(4,2) DEFAULT 0 COMMENT '사용한 연차 (일)',
|
||||
remaining_annual_leave DECIMAL(4,2) GENERATED ALWAYS AS (total_annual_leave - used_annual_leave) STORED COMMENT '잔여 연차 (일)',
|
||||
notes TEXT COMMENT '비고',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
|
||||
-- 외래키 제약조건
|
||||
FOREIGN KEY (worker_id) REFERENCES workers(worker_id) ON DELETE CASCADE,
|
||||
|
||||
-- 유니크 제약조건 (작업자별 연도별 하나의 기록)
|
||||
UNIQUE KEY unique_worker_year (worker_id, year),
|
||||
|
||||
-- 인덱스
|
||||
INDEX idx_worker_year (worker_id, year)
|
||||
) COMMENT='작업자별 휴가 잔여 관리 테이블';
|
||||
|
||||
-- 5. 기본 데이터 삽입
|
||||
|
||||
-- 근로 유형 기본 데이터
|
||||
INSERT INTO work_attendance_types (type_code, type_name, description) VALUES
|
||||
('REGULAR', '정시근로', '8시간 정규 근무'),
|
||||
('OVERTIME', '연장근로', '8시간 초과 근무'),
|
||||
('PARTIAL', '부분근로', '8시간 미만 근무'),
|
||||
('VACATION', '휴가근로', '휴가와 함께하는 부분 근무')
|
||||
ON DUPLICATE KEY UPDATE
|
||||
type_name = VALUES(type_name),
|
||||
description = VALUES(description);
|
||||
|
||||
-- 휴가 유형 기본 데이터
|
||||
INSERT INTO vacation_types (type_code, type_name, hours_deduction, description) VALUES
|
||||
('ANNUAL_FULL', '연차', 8.0, '하루 전체 연차'),
|
||||
('ANNUAL_HALF', '반차', 4.0, '반일 연차'),
|
||||
('ANNUAL_QUARTER', '반반차', 2.0, '1/4일 연차'),
|
||||
('SICK_FULL', '병가', 8.0, '하루 전체 병가'),
|
||||
('SICK_HALF', '반일병가', 4.0, '반일 병가'),
|
||||
('PERSONAL_FULL', '개인사유', 8.0, '개인사유로 인한 휴가'),
|
||||
('PERSONAL_HALF', '반일개인사유', 4.0, '반일 개인사유 휴가')
|
||||
ON DUPLICATE KEY UPDATE
|
||||
type_name = VALUES(type_name),
|
||||
hours_deduction = VALUES(hours_deduction),
|
||||
description = VALUES(description);
|
||||
|
||||
-- 6. daily_work_reports 테이블에 근태 기록 연결 컬럼 추가
|
||||
ALTER TABLE daily_work_reports
|
||||
ADD COLUMN attendance_record_id INT NULL COMMENT '근태 기록 ID' AFTER updated_by,
|
||||
ADD INDEX idx_attendance_record (attendance_record_id);
|
||||
|
||||
-- 외래키 제약조건 추가 (나중에 데이터 정리 후)
|
||||
-- ALTER TABLE daily_work_reports
|
||||
-- ADD FOREIGN KEY (attendance_record_id) REFERENCES daily_attendance_records(id);
|
||||
|
||||
-- 7. 휴가 전용 작업 유형 추가 (work_types 테이블에)
|
||||
INSERT INTO work_types (name, description, is_active) VALUES
|
||||
('휴가', '연차, 반차, 병가 등 휴가 처리용', TRUE)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
description = VALUES(description),
|
||||
is_active = VALUES(is_active);
|
||||
|
||||
-- 8. 뷰 생성 - 일일 근태 현황 조회용
|
||||
CREATE OR REPLACE VIEW v_daily_attendance_summary AS
|
||||
SELECT
|
||||
dar.id,
|
||||
dar.record_date,
|
||||
dar.worker_id,
|
||||
w.worker_name,
|
||||
w.job_type,
|
||||
dar.total_work_hours,
|
||||
wat.type_name as attendance_type,
|
||||
vt.type_name as vacation_type,
|
||||
dar.is_vacation_processed,
|
||||
dar.overtime_approved,
|
||||
dar.status,
|
||||
CASE
|
||||
WHEN dar.status = 'incomplete' THEN '미입력'
|
||||
WHEN dar.status = 'partial' THEN '부분입력'
|
||||
WHEN dar.status = 'complete' THEN '정시근로'
|
||||
WHEN dar.status = 'overtime' THEN '연장근로'
|
||||
WHEN dar.status = 'vacation' THEN '휴가'
|
||||
WHEN dar.status = 'error' THEN '오류'
|
||||
ELSE '알수없음'
|
||||
END as status_text,
|
||||
dar.notes,
|
||||
dar.created_at,
|
||||
dar.updated_at
|
||||
FROM daily_attendance_records dar
|
||||
LEFT JOIN workers w ON dar.worker_id = w.worker_id
|
||||
LEFT JOIN work_attendance_types wat ON dar.attendance_type_id = wat.id
|
||||
LEFT JOIN vacation_types vt ON dar.vacation_type_id = vt.id
|
||||
ORDER BY dar.record_date DESC, w.worker_name;
|
||||
|
||||
-- 9. 트리거 생성 - daily_work_reports 변경 시 근태 기록 자동 업데이트
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE TRIGGER tr_update_attendance_on_work_report
|
||||
AFTER INSERT ON daily_work_reports
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
DECLARE total_hours DECIMAL(4,2);
|
||||
DECLARE attendance_type INT;
|
||||
DECLARE vacation_type INT;
|
||||
DECLARE record_status VARCHAR(20);
|
||||
DECLARE existing_record_id INT;
|
||||
|
||||
-- 해당 작업자의 해당 날짜 총 작업시간 계산
|
||||
SELECT COALESCE(SUM(work_hours), 0) INTO total_hours
|
||||
FROM daily_work_reports
|
||||
WHERE worker_id = NEW.worker_id
|
||||
AND report_date = NEW.report_date;
|
||||
|
||||
-- 휴가 처리 여부 확인 (work_type_id가 휴가용인지)
|
||||
SELECT id INTO vacation_type
|
||||
FROM vacation_types
|
||||
WHERE (total_hours = 0 AND type_code = 'ANNUAL_FULL')
|
||||
OR (total_hours = 4 AND type_code = 'ANNUAL_HALF')
|
||||
OR (total_hours = 6 AND type_code = 'ANNUAL_QUARTER')
|
||||
LIMIT 1;
|
||||
|
||||
-- 근로 유형 결정
|
||||
IF total_hours = 0 THEN
|
||||
SELECT id INTO attendance_type FROM work_attendance_types WHERE type_code = 'PARTIAL';
|
||||
SET record_status = 'incomplete';
|
||||
ELSEIF total_hours < 8 THEN
|
||||
SELECT id INTO attendance_type FROM work_attendance_types WHERE type_code = 'PARTIAL';
|
||||
SET record_status = 'partial';
|
||||
ELSEIF total_hours = 8 THEN
|
||||
SELECT id INTO attendance_type FROM work_attendance_types WHERE type_code = 'REGULAR';
|
||||
SET record_status = 'complete';
|
||||
ELSE
|
||||
SELECT id INTO attendance_type FROM work_attendance_types WHERE type_code = 'OVERTIME';
|
||||
SET record_status = 'overtime';
|
||||
END IF;
|
||||
|
||||
-- 휴가 처리된 경우 상태 조정
|
||||
IF vacation_type IS NOT NULL THEN
|
||||
SET record_status = 'vacation';
|
||||
END IF;
|
||||
|
||||
-- 기존 근태 기록 확인
|
||||
SELECT id INTO existing_record_id
|
||||
FROM daily_attendance_records
|
||||
WHERE worker_id = NEW.worker_id AND record_date = NEW.report_date;
|
||||
|
||||
-- 근태 기록 업데이트 또는 생성
|
||||
IF existing_record_id IS NOT NULL THEN
|
||||
UPDATE daily_attendance_records
|
||||
SET
|
||||
total_work_hours = total_hours,
|
||||
attendance_type_id = attendance_type,
|
||||
vacation_type_id = vacation_type,
|
||||
is_vacation_processed = (vacation_type IS NOT NULL),
|
||||
status = record_status,
|
||||
updated_by = NEW.created_by,
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = existing_record_id;
|
||||
ELSE
|
||||
INSERT INTO daily_attendance_records (
|
||||
record_date, worker_id, total_work_hours, attendance_type_id,
|
||||
vacation_type_id, is_vacation_processed, status, created_by
|
||||
) VALUES (
|
||||
NEW.report_date, NEW.worker_id, total_hours, attendance_type,
|
||||
vacation_type, (vacation_type IS NOT NULL), record_status, NEW.created_by
|
||||
);
|
||||
END IF;
|
||||
END//
|
||||
|
||||
DELIMITER ;
|
||||
|
||||
-- 10. 기존 데이터 마이그레이션을 위한 프로시저
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE PROCEDURE sp_migrate_existing_work_reports()
|
||||
BEGIN
|
||||
DECLARE done INT DEFAULT FALSE;
|
||||
DECLARE v_worker_id INT;
|
||||
DECLARE v_report_date DATE;
|
||||
DECLARE cur CURSOR FOR
|
||||
SELECT DISTINCT worker_id, report_date
|
||||
FROM daily_work_reports
|
||||
ORDER BY report_date DESC, worker_id;
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
||||
|
||||
OPEN cur;
|
||||
|
||||
read_loop: LOOP
|
||||
FETCH cur INTO v_worker_id, v_report_date;
|
||||
IF done THEN
|
||||
LEAVE read_loop;
|
||||
END IF;
|
||||
|
||||
-- 각 작업자별 날짜별로 근태 기록 생성/업데이트
|
||||
CALL sp_update_attendance_record(v_worker_id, v_report_date);
|
||||
END LOOP;
|
||||
|
||||
CLOSE cur;
|
||||
END//
|
||||
|
||||
CREATE OR REPLACE PROCEDURE sp_update_attendance_record(
|
||||
IN p_worker_id INT,
|
||||
IN p_report_date DATE
|
||||
)
|
||||
BEGIN
|
||||
DECLARE total_hours DECIMAL(4,2);
|
||||
DECLARE attendance_type INT;
|
||||
DECLARE vacation_type INT;
|
||||
DECLARE record_status VARCHAR(20);
|
||||
DECLARE existing_record_id INT;
|
||||
DECLARE has_vacation_work INT DEFAULT 0;
|
||||
|
||||
-- 해당 작업자의 해당 날짜 총 작업시간 계산
|
||||
SELECT COALESCE(SUM(work_hours), 0) INTO total_hours
|
||||
FROM daily_work_reports
|
||||
WHERE worker_id = p_worker_id
|
||||
AND report_date = p_report_date;
|
||||
|
||||
-- 휴가 관련 작업이 있는지 확인 (work_type_id = 999 또는 휴가 관련)
|
||||
SELECT COUNT(*) INTO has_vacation_work
|
||||
FROM daily_work_reports dwr
|
||||
JOIN work_types wt ON dwr.work_type_id = wt.id
|
||||
WHERE dwr.worker_id = p_worker_id
|
||||
AND dwr.report_date = p_report_date
|
||||
AND (wt.name LIKE '%휴가%' OR wt.name LIKE '%연차%' OR wt.name LIKE '%반차%');
|
||||
|
||||
-- 휴가 유형 결정
|
||||
IF has_vacation_work > 0 THEN
|
||||
IF total_hours = 0 THEN
|
||||
SELECT id INTO vacation_type FROM vacation_types WHERE type_code = 'ANNUAL_FULL' LIMIT 1;
|
||||
ELSEIF total_hours = 4 THEN
|
||||
SELECT id INTO vacation_type FROM vacation_types WHERE type_code = 'ANNUAL_HALF' LIMIT 1;
|
||||
ELSEIF total_hours = 6 THEN
|
||||
SELECT id INTO vacation_type FROM vacation_types WHERE type_code = 'ANNUAL_QUARTER' LIMIT 1;
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
-- 근로 유형 및 상태 결정
|
||||
IF vacation_type IS NOT NULL THEN
|
||||
SELECT id INTO attendance_type FROM work_attendance_types WHERE type_code = 'VACATION';
|
||||
SET record_status = 'vacation';
|
||||
ELSEIF total_hours = 0 THEN
|
||||
SELECT id INTO attendance_type FROM work_attendance_types WHERE type_code = 'PARTIAL';
|
||||
SET record_status = 'incomplete';
|
||||
ELSEIF total_hours < 8 THEN
|
||||
SELECT id INTO attendance_type FROM work_attendance_types WHERE type_code = 'PARTIAL';
|
||||
SET record_status = 'partial';
|
||||
ELSEIF total_hours = 8 THEN
|
||||
SELECT id INTO attendance_type FROM work_attendance_types WHERE type_code = 'REGULAR';
|
||||
SET record_status = 'complete';
|
||||
ELSE
|
||||
SELECT id INTO attendance_type FROM work_attendance_types WHERE type_code = 'OVERTIME';
|
||||
SET record_status = 'overtime';
|
||||
END IF;
|
||||
|
||||
-- 기존 근태 기록 확인
|
||||
SELECT id INTO existing_record_id
|
||||
FROM daily_attendance_records
|
||||
WHERE worker_id = p_worker_id AND record_date = p_report_date;
|
||||
|
||||
-- 근태 기록 업데이트 또는 생성
|
||||
IF existing_record_id IS NOT NULL THEN
|
||||
UPDATE daily_attendance_records
|
||||
SET
|
||||
total_work_hours = total_hours,
|
||||
attendance_type_id = attendance_type,
|
||||
vacation_type_id = vacation_type,
|
||||
is_vacation_processed = (vacation_type IS NOT NULL),
|
||||
status = record_status,
|
||||
updated_by = 1,
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = existing_record_id;
|
||||
ELSE
|
||||
INSERT INTO daily_attendance_records (
|
||||
record_date, worker_id, total_work_hours, attendance_type_id,
|
||||
vacation_type_id, is_vacation_processed, status, created_by
|
||||
) VALUES (
|
||||
p_report_date, p_worker_id, total_hours, attendance_type,
|
||||
vacation_type, (vacation_type IS NOT NULL), record_status, 1
|
||||
);
|
||||
END IF;
|
||||
END//
|
||||
|
||||
DELIMITER ;
|
||||
|
||||
-- 11. 권한 및 인덱스 최적화
|
||||
-- 추가 인덱스 생성
|
||||
CREATE INDEX idx_daily_work_reports_worker_date ON daily_work_reports(worker_id, report_date);
|
||||
CREATE INDEX idx_daily_work_reports_work_type ON daily_work_reports(work_type_id);
|
||||
|
||||
-- 마이그레이션 실행 (주석 해제하여 실행)
|
||||
-- CALL sp_migrate_existing_work_reports();
|
||||
|
||||
-- 완료 메시지
|
||||
SELECT 'DB 확장 완료: 근로 및 휴가 관리 시스템이 성공적으로 구축되었습니다.' as message;
|
||||
@@ -0,0 +1,143 @@
|
||||
-- 근태 관리 시스템 테이블 추가
|
||||
-- 작성일: 2025-11-03
|
||||
-- 설명: 근로 유형, 휴가 유형, 일일 근태 기록, 휴가 잔여 관리 테이블
|
||||
|
||||
-- 1. 근로 유형 테이블 생성
|
||||
CREATE TABLE IF NOT EXISTS `work_attendance_types` (
|
||||
`id` INT PRIMARY KEY AUTO_INCREMENT,
|
||||
`type_code` VARCHAR(20) NOT NULL UNIQUE COMMENT '근로 유형 코드',
|
||||
`type_name` VARCHAR(50) NOT NULL COMMENT '근로 유형명',
|
||||
`description` TEXT COMMENT '설명',
|
||||
`is_active` BOOLEAN DEFAULT TRUE COMMENT '활성 상태',
|
||||
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='근로 유형 관리 테이블';
|
||||
|
||||
-- 2. 휴가 유형 테이블 생성
|
||||
CREATE TABLE IF NOT EXISTS `vacation_types` (
|
||||
`id` INT PRIMARY KEY AUTO_INCREMENT,
|
||||
`type_code` VARCHAR(20) NOT NULL UNIQUE COMMENT '휴가 유형 코드',
|
||||
`type_name` VARCHAR(50) NOT NULL COMMENT '휴가 유형명',
|
||||
`hours_deduction` DECIMAL(4,2) NOT NULL COMMENT '차감 시간',
|
||||
`description` TEXT COMMENT '설명',
|
||||
`is_active` BOOLEAN DEFAULT TRUE COMMENT '활성 상태',
|
||||
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='휴가 유형 관리 테이블';
|
||||
|
||||
-- 3. 일일 근태 기록 테이블 생성
|
||||
CREATE TABLE IF NOT EXISTS `daily_attendance_records` (
|
||||
`id` INT PRIMARY KEY AUTO_INCREMENT,
|
||||
`record_date` DATE NOT NULL COMMENT '기록 날짜',
|
||||
`worker_id` INT NOT NULL COMMENT '작업자 ID',
|
||||
`total_work_hours` DECIMAL(4,2) DEFAULT 0 COMMENT '총 작업 시간',
|
||||
`attendance_type_id` INT COMMENT '근로 유형 ID',
|
||||
`vacation_type_id` INT NULL COMMENT '휴가 유형 ID',
|
||||
`is_vacation_processed` BOOLEAN DEFAULT FALSE COMMENT '휴가 처리 여부',
|
||||
`overtime_approved` BOOLEAN DEFAULT FALSE COMMENT '초과근무 승인 여부',
|
||||
`overtime_approved_by` INT NULL COMMENT '초과근무 승인자 ID',
|
||||
`overtime_approved_at` TIMESTAMP NULL COMMENT '초과근무 승인 시간',
|
||||
`status` ENUM('incomplete', 'partial', 'complete', 'overtime', 'vacation', 'error') DEFAULT 'incomplete' COMMENT '상태',
|
||||
`notes` TEXT COMMENT '비고',
|
||||
`created_by` INT NOT NULL DEFAULT 1 COMMENT '생성자 ID',
|
||||
`updated_by` INT NULL COMMENT '수정자 ID',
|
||||
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
|
||||
-- 인덱스
|
||||
UNIQUE KEY `unique_worker_date` (`worker_id`, `record_date`),
|
||||
INDEX `idx_record_date` (`record_date`),
|
||||
INDEX `idx_worker_date` (`worker_id`, `record_date`),
|
||||
INDEX `idx_status` (`status`),
|
||||
|
||||
-- 외래키 (기존 테이블과의 관계)
|
||||
FOREIGN KEY (`worker_id`) REFERENCES `workers`(`worker_id`) ON DELETE CASCADE,
|
||||
FOREIGN KEY (`attendance_type_id`) REFERENCES `work_attendance_types`(`id`),
|
||||
FOREIGN KEY (`vacation_type_id`) REFERENCES `vacation_types`(`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='일일 근태 기록 테이블';
|
||||
|
||||
-- 4. 작업자 휴가 잔여 관리 테이블 생성
|
||||
CREATE TABLE IF NOT EXISTS `worker_vacation_balance` (
|
||||
`id` INT PRIMARY KEY AUTO_INCREMENT,
|
||||
`worker_id` INT NOT NULL COMMENT '작업자 ID',
|
||||
`year` YEAR NOT NULL COMMENT '연도',
|
||||
`total_annual_leave` DECIMAL(4,2) DEFAULT 15.0 COMMENT '연간 총 연차 (일)',
|
||||
`used_annual_leave` DECIMAL(4,2) DEFAULT 0 COMMENT '사용한 연차 (일)',
|
||||
`remaining_annual_leave` DECIMAL(4,2) GENERATED ALWAYS AS (`total_annual_leave` - `used_annual_leave`) STORED COMMENT '잔여 연차 (일)',
|
||||
`notes` TEXT COMMENT '비고',
|
||||
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
|
||||
-- 인덱스
|
||||
UNIQUE KEY `unique_worker_year` (`worker_id`, `year`),
|
||||
INDEX `idx_worker_year` (`worker_id`, `year`),
|
||||
|
||||
-- 외래키
|
||||
FOREIGN KEY (`worker_id`) REFERENCES `workers`(`worker_id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='작업자별 휴가 잔여 관리 테이블';
|
||||
|
||||
-- 5. daily_work_reports 테이블에 근태 기록 연결 컬럼 추가
|
||||
ALTER TABLE `daily_work_reports`
|
||||
ADD COLUMN IF NOT EXISTS `attendance_record_id` INT NULL COMMENT '근태 기록 ID' AFTER `updated_by`;
|
||||
|
||||
-- 인덱스 추가
|
||||
CREATE INDEX IF NOT EXISTS `idx_attendance_record` ON `daily_work_reports`(`attendance_record_id`);
|
||||
CREATE INDEX IF NOT EXISTS `idx_daily_work_reports_worker_date` ON `daily_work_reports`(`worker_id`, `report_date`);
|
||||
|
||||
-- 6. 기본 데이터 삽입
|
||||
|
||||
-- 근로 유형 기본 데이터
|
||||
INSERT IGNORE INTO `work_attendance_types` (`type_code`, `type_name`, `description`) VALUES
|
||||
('REGULAR', '정시근로', '8시간 정규 근무'),
|
||||
('OVERTIME', '연장근로', '8시간 초과 근무'),
|
||||
('PARTIAL', '부분근로', '8시간 미만 근무'),
|
||||
('VACATION', '휴가근로', '휴가와 함께하는 부분 근무');
|
||||
|
||||
-- 휴가 유형 기본 데이터
|
||||
INSERT IGNORE INTO `vacation_types` (`type_code`, `type_name`, `hours_deduction`, `description`) VALUES
|
||||
('ANNUAL_FULL', '연차', 8.0, '하루 전체 연차'),
|
||||
('ANNUAL_HALF', '반차', 4.0, '반일 연차'),
|
||||
('ANNUAL_QUARTER', '반반차', 2.0, '1/4일 연차'),
|
||||
('SICK_FULL', '병가', 8.0, '하루 전체 병가'),
|
||||
('SICK_HALF', '반일병가', 4.0, '반일 병가'),
|
||||
('PERSONAL_FULL', '개인사유', 8.0, '개인사유로 인한 휴가'),
|
||||
('PERSONAL_HALF', '반일개인사유', 4.0, '반일 개인사유 휴가');
|
||||
|
||||
-- 7. 휴가 전용 작업 유형 추가 (이미 있으면 무시)
|
||||
INSERT IGNORE INTO `work_types` (`name`, `description`, `is_active`) VALUES
|
||||
('휴가', '연차, 반차, 병가 등 휴가 처리용', TRUE);
|
||||
|
||||
-- 8. 뷰 생성 - 일일 근태 현황 조회용
|
||||
CREATE OR REPLACE VIEW `v_daily_attendance_summary` AS
|
||||
SELECT
|
||||
dar.id,
|
||||
dar.record_date,
|
||||
dar.worker_id,
|
||||
w.worker_name,
|
||||
w.job_type,
|
||||
dar.total_work_hours,
|
||||
wat.type_name as attendance_type,
|
||||
vt.type_name as vacation_type,
|
||||
dar.is_vacation_processed,
|
||||
dar.overtime_approved,
|
||||
dar.status,
|
||||
CASE
|
||||
WHEN dar.status = 'incomplete' THEN '미입력'
|
||||
WHEN dar.status = 'partial' THEN '부분입력'
|
||||
WHEN dar.status = 'complete' THEN '정시근로'
|
||||
WHEN dar.status = 'overtime' THEN '연장근로'
|
||||
WHEN dar.status = 'vacation' THEN '휴가'
|
||||
WHEN dar.status = 'error' THEN '오류'
|
||||
ELSE '알수없음'
|
||||
END as status_text,
|
||||
dar.notes,
|
||||
dar.created_at,
|
||||
dar.updated_at
|
||||
FROM daily_attendance_records dar
|
||||
LEFT JOIN workers w ON dar.worker_id = w.worker_id
|
||||
LEFT JOIN work_attendance_types wat ON dar.attendance_type_id = wat.id
|
||||
LEFT JOIN vacation_types vt ON dar.vacation_type_id = vt.id
|
||||
ORDER BY dar.record_date DESC, w.worker_name;
|
||||
|
||||
-- 완료 메시지
|
||||
SELECT '✅ 근태 관리 시스템 테이블이 성공적으로 생성되었습니다.' as message;
|
||||
@@ -0,0 +1,16 @@
|
||||
-- 006_add_description_column.sql
|
||||
-- daily_work_reports 테이블에 description 컬럼 추가
|
||||
|
||||
-- description 컬럼 추가 (이미 존재하는 경우 무시)
|
||||
SET @sql = (SELECT IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE table_name = 'daily_work_reports'
|
||||
AND table_schema = 'hyungi'
|
||||
AND column_name = 'description') = 0,
|
||||
'ALTER TABLE daily_work_reports ADD COLUMN description TEXT COMMENT ''작업 설명'' AFTER work_hours',
|
||||
'SELECT ''description column already exists'' as message'
|
||||
));
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
@@ -0,0 +1,249 @@
|
||||
-- 007_create_monthly_worker_status.sql
|
||||
-- 월별 작업자 상태 집계 테이블 생성
|
||||
|
||||
-- 월별 작업자 상태 집계 테이블
|
||||
CREATE TABLE IF NOT EXISTS monthly_worker_status (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
year INT NOT NULL COMMENT '연도',
|
||||
month INT NOT NULL COMMENT '월 (1-12)',
|
||||
worker_id INT NOT NULL COMMENT '작업자 ID',
|
||||
date DATE NOT NULL COMMENT '날짜',
|
||||
|
||||
-- 작업 시간 정보
|
||||
total_work_hours DECIMAL(5,2) DEFAULT 0.00 COMMENT '총 작업시간',
|
||||
actual_work_hours DECIMAL(5,2) DEFAULT 0.00 COMMENT '실제 작업시간 (휴가 제외)',
|
||||
vacation_hours DECIMAL(5,2) DEFAULT 0.00 COMMENT '휴가 시간',
|
||||
|
||||
-- 작업 건수
|
||||
total_work_count INT DEFAULT 0 COMMENT '총 작업 건수',
|
||||
regular_work_count INT DEFAULT 0 COMMENT '정규 작업 건수',
|
||||
error_work_count INT DEFAULT 0 COMMENT '오류 작업 건수',
|
||||
|
||||
-- 상태 정보
|
||||
work_status ENUM(
|
||||
'incomplete', -- 미입력 (0시간)
|
||||
'partial', -- 부분입력 (8시간 미만)
|
||||
'complete', -- 정시근로 (8시간)
|
||||
'overtime', -- 연장근로 (8시간 초과)
|
||||
'vacation-full', -- 연차 (8시간)
|
||||
'vacation-half', -- 반차 (4시간)
|
||||
'vacation-quarter',-- 반반차 (2시간)
|
||||
'vacation-half-half', -- 조퇴 (6시간)
|
||||
'error', -- 오류 발생
|
||||
'overtime-warning' -- 초과근무 확인필요 (12시간 초과)
|
||||
) NOT NULL DEFAULT 'incomplete' COMMENT '작업 상태',
|
||||
|
||||
has_vacation BOOLEAN DEFAULT FALSE COMMENT '휴가 여부',
|
||||
has_error BOOLEAN DEFAULT FALSE COMMENT '오류 여부',
|
||||
has_issues BOOLEAN DEFAULT FALSE COMMENT '문제 여부 (미입력/부분입력)',
|
||||
|
||||
-- 메타 정보
|
||||
last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '마지막 업데이트 시간',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
-- 인덱스
|
||||
UNIQUE KEY unique_worker_date (worker_id, date),
|
||||
KEY idx_year_month (year, month),
|
||||
KEY idx_worker_year_month (worker_id, year, month),
|
||||
KEY idx_status (work_status),
|
||||
KEY idx_has_issues (has_issues),
|
||||
KEY idx_has_error (has_error),
|
||||
|
||||
-- 외래키
|
||||
FOREIGN KEY (worker_id) REFERENCES workers(worker_id) ON DELETE CASCADE
|
||||
) COMMENT='월별 작업자 상태 집계 테이블';
|
||||
|
||||
-- 월별 집계 요약 테이블 (캘린더 최적화용)
|
||||
CREATE TABLE IF NOT EXISTS monthly_summary (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
year INT NOT NULL COMMENT '연도',
|
||||
month INT NOT NULL COMMENT '월 (1-12)',
|
||||
date DATE NOT NULL COMMENT '날짜',
|
||||
|
||||
-- 작업자 수
|
||||
total_workers INT DEFAULT 0 COMMENT '총 작업자 수',
|
||||
working_workers INT DEFAULT 0 COMMENT '작업한 작업자 수',
|
||||
|
||||
-- 상태별 작업자 수
|
||||
incomplete_workers INT DEFAULT 0 COMMENT '미입력 작업자 수',
|
||||
partial_workers INT DEFAULT 0 COMMENT '부분입력 작업자 수',
|
||||
complete_workers INT DEFAULT 0 COMMENT '완료 작업자 수',
|
||||
overtime_workers INT DEFAULT 0 COMMENT '연장근로 작업자 수',
|
||||
vacation_workers INT DEFAULT 0 COMMENT '휴가 작업자 수',
|
||||
error_workers INT DEFAULT 0 COMMENT '오류 작업자 수',
|
||||
|
||||
-- 집계 정보
|
||||
total_work_hours DECIMAL(8,2) DEFAULT 0.00 COMMENT '총 작업시간',
|
||||
total_work_count INT DEFAULT 0 COMMENT '총 작업 건수',
|
||||
total_error_count INT DEFAULT 0 COMMENT '총 오류 건수',
|
||||
|
||||
-- 상태 플래그 (캘린더 표시용)
|
||||
has_issues BOOLEAN DEFAULT FALSE COMMENT '문제 있음 (미입력/부분입력)',
|
||||
has_errors BOOLEAN DEFAULT FALSE COMMENT '오류 있음',
|
||||
|
||||
-- 메타 정보
|
||||
last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
-- 인덱스
|
||||
UNIQUE KEY unique_date (date),
|
||||
KEY idx_year_month (year, month),
|
||||
KEY idx_has_issues (has_issues),
|
||||
KEY idx_has_errors (has_errors)
|
||||
) COMMENT='월별 일자별 요약 테이블 (캘린더 최적화용)';
|
||||
|
||||
-- 집계 데이터 업데이트 함수
|
||||
DELIMITER $$
|
||||
|
||||
CREATE OR REPLACE PROCEDURE UpdateMonthlyWorkerStatus(
|
||||
IN p_date DATE,
|
||||
IN p_worker_id INT
|
||||
)
|
||||
BEGIN
|
||||
DECLARE v_year INT;
|
||||
DECLARE v_month INT;
|
||||
DECLARE v_total_hours DECIMAL(5,2);
|
||||
DECLARE v_actual_hours DECIMAL(5,2);
|
||||
DECLARE v_vacation_hours DECIMAL(5,2);
|
||||
DECLARE v_total_count INT;
|
||||
DECLARE v_regular_count INT;
|
||||
DECLARE v_error_count INT;
|
||||
DECLARE v_has_vacation BOOLEAN;
|
||||
DECLARE v_has_error BOOLEAN;
|
||||
DECLARE v_has_issues BOOLEAN;
|
||||
DECLARE v_status VARCHAR(20);
|
||||
|
||||
-- 연도, 월 추출
|
||||
SET v_year = YEAR(p_date);
|
||||
SET v_month = MONTH(p_date);
|
||||
|
||||
-- 해당 날짜의 작업자 데이터 집계
|
||||
SELECT
|
||||
COALESCE(SUM(work_hours), 0),
|
||||
COALESCE(SUM(CASE WHEN project_id != 13 THEN work_hours ELSE 0 END), 0),
|
||||
COALESCE(SUM(CASE WHEN project_id = 13 THEN work_hours ELSE 0 END), 0),
|
||||
COUNT(*),
|
||||
COUNT(CASE WHEN project_id != 13 AND work_status_id != 2 THEN 1 END),
|
||||
COUNT(CASE WHEN work_status_id = 2 THEN 1 END),
|
||||
MAX(CASE WHEN project_id = 13 THEN 1 ELSE 0 END),
|
||||
MAX(CASE WHEN work_status_id = 2 THEN 1 ELSE 0 END)
|
||||
INTO
|
||||
v_total_hours, v_actual_hours, v_vacation_hours,
|
||||
v_total_count, v_regular_count, v_error_count,
|
||||
v_has_vacation, v_has_error
|
||||
FROM daily_work_reports
|
||||
WHERE report_date = p_date AND worker_id = p_worker_id;
|
||||
|
||||
-- 상태 결정 로직
|
||||
IF v_has_error THEN
|
||||
SET v_status = 'error';
|
||||
SET v_has_issues = FALSE;
|
||||
ELSEIF v_total_hours > 12 THEN
|
||||
SET v_status = 'overtime-warning';
|
||||
SET v_has_issues = TRUE;
|
||||
ELSEIF v_has_vacation AND v_vacation_hours > 0 THEN
|
||||
-- 휴가 상태 결정
|
||||
CASE v_vacation_hours
|
||||
WHEN 8 THEN SET v_status = 'vacation-full';
|
||||
WHEN 6 THEN SET v_status = 'vacation-half-half';
|
||||
WHEN 4 THEN SET v_status = 'vacation-half';
|
||||
WHEN 2 THEN SET v_status = 'vacation-quarter';
|
||||
ELSE SET v_status = 'vacation-full';
|
||||
END CASE;
|
||||
SET v_has_issues = FALSE;
|
||||
ELSEIF v_total_hours > 8 THEN
|
||||
SET v_status = 'overtime';
|
||||
SET v_has_issues = FALSE;
|
||||
ELSEIF v_total_hours = 8 THEN
|
||||
SET v_status = 'complete';
|
||||
SET v_has_issues = FALSE;
|
||||
ELSEIF v_total_hours > 0 THEN
|
||||
SET v_status = 'partial';
|
||||
SET v_has_issues = TRUE;
|
||||
ELSE
|
||||
SET v_status = 'incomplete';
|
||||
SET v_has_issues = TRUE;
|
||||
END IF;
|
||||
|
||||
-- 데이터 업서트
|
||||
INSERT INTO monthly_worker_status (
|
||||
year, month, worker_id, date,
|
||||
total_work_hours, actual_work_hours, vacation_hours,
|
||||
total_work_count, regular_work_count, error_work_count,
|
||||
work_status, has_vacation, has_error, has_issues
|
||||
) VALUES (
|
||||
v_year, v_month, p_worker_id, p_date,
|
||||
v_total_hours, v_actual_hours, v_vacation_hours,
|
||||
v_total_count, v_regular_count, v_error_count,
|
||||
v_status, v_has_vacation, v_has_error, v_has_issues
|
||||
) ON DUPLICATE KEY UPDATE
|
||||
total_work_hours = v_total_hours,
|
||||
actual_work_hours = v_actual_hours,
|
||||
vacation_hours = v_vacation_hours,
|
||||
total_work_count = v_total_count,
|
||||
regular_work_count = v_regular_count,
|
||||
error_work_count = v_error_count,
|
||||
work_status = v_status,
|
||||
has_vacation = v_has_vacation,
|
||||
has_error = v_has_error,
|
||||
has_issues = v_has_issues,
|
||||
last_updated = CURRENT_TIMESTAMP;
|
||||
|
||||
-- 일별 요약도 업데이트
|
||||
CALL UpdateDailySummary(p_date);
|
||||
END$$
|
||||
|
||||
-- 일별 요약 업데이트 함수
|
||||
CREATE OR REPLACE PROCEDURE UpdateDailySummary(
|
||||
IN p_date DATE
|
||||
)
|
||||
BEGIN
|
||||
DECLARE v_year INT;
|
||||
DECLARE v_month INT;
|
||||
|
||||
SET v_year = YEAR(p_date);
|
||||
SET v_month = MONTH(p_date);
|
||||
|
||||
INSERT INTO monthly_summary (
|
||||
year, month, date,
|
||||
total_workers, working_workers,
|
||||
incomplete_workers, partial_workers, complete_workers,
|
||||
overtime_workers, vacation_workers, error_workers,
|
||||
total_work_hours, total_work_count, total_error_count,
|
||||
has_issues, has_errors
|
||||
)
|
||||
SELECT
|
||||
v_year, v_month, p_date,
|
||||
COUNT(*) as total_workers,
|
||||
COUNT(CASE WHEN work_status != 'incomplete' THEN 1 END) as working_workers,
|
||||
COUNT(CASE WHEN work_status = 'incomplete' THEN 1 END) as incomplete_workers,
|
||||
COUNT(CASE WHEN work_status = 'partial' THEN 1 END) as partial_workers,
|
||||
COUNT(CASE WHEN work_status IN ('complete') THEN 1 END) as complete_workers,
|
||||
COUNT(CASE WHEN work_status = 'overtime' THEN 1 END) as overtime_workers,
|
||||
COUNT(CASE WHEN work_status LIKE 'vacation%' THEN 1 END) as vacation_workers,
|
||||
COUNT(CASE WHEN work_status = 'error' THEN 1 END) as error_workers,
|
||||
SUM(total_work_hours) as total_work_hours,
|
||||
SUM(total_work_count) as total_work_count,
|
||||
SUM(error_work_count) as total_error_count,
|
||||
MAX(has_issues) as has_issues,
|
||||
MAX(has_error) as has_errors
|
||||
FROM monthly_worker_status
|
||||
WHERE date = p_date
|
||||
ON DUPLICATE KEY UPDATE
|
||||
total_workers = VALUES(total_workers),
|
||||
working_workers = VALUES(working_workers),
|
||||
incomplete_workers = VALUES(incomplete_workers),
|
||||
partial_workers = VALUES(partial_workers),
|
||||
complete_workers = VALUES(complete_workers),
|
||||
overtime_workers = VALUES(overtime_workers),
|
||||
vacation_workers = VALUES(vacation_workers),
|
||||
error_workers = VALUES(error_workers),
|
||||
total_work_hours = VALUES(total_work_hours),
|
||||
total_work_count = VALUES(total_work_count),
|
||||
total_error_count = VALUES(total_error_count),
|
||||
has_issues = VALUES(has_issues),
|
||||
has_errors = VALUES(has_errors),
|
||||
last_updated = CURRENT_TIMESTAMP;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,36 @@
|
||||
-- 008_create_update_triggers.sql
|
||||
-- 작업보고서 변경 시 월별 집계 자동 업데이트 트리거
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
-- 작업보고서 INSERT 트리거
|
||||
CREATE OR REPLACE TRIGGER tr_daily_work_reports_insert
|
||||
AFTER INSERT ON daily_work_reports
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
CALL UpdateMonthlyWorkerStatus(NEW.report_date, NEW.worker_id);
|
||||
END$$
|
||||
|
||||
-- 작업보고서 UPDATE 트리거
|
||||
CREATE OR REPLACE TRIGGER tr_daily_work_reports_update
|
||||
AFTER UPDATE ON daily_work_reports
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
-- 기존 날짜 업데이트
|
||||
CALL UpdateMonthlyWorkerStatus(OLD.report_date, OLD.worker_id);
|
||||
|
||||
-- 새 날짜가 다르면 새 날짜도 업데이트
|
||||
IF OLD.report_date != NEW.report_date OR OLD.worker_id != NEW.worker_id THEN
|
||||
CALL UpdateMonthlyWorkerStatus(NEW.report_date, NEW.worker_id);
|
||||
END IF;
|
||||
END$$
|
||||
|
||||
-- 작업보고서 DELETE 트리거
|
||||
CREATE OR REPLACE TRIGGER tr_daily_work_reports_delete
|
||||
AFTER DELETE ON daily_work_reports
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
CALL UpdateMonthlyWorkerStatus(OLD.report_date, OLD.worker_id);
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,67 @@
|
||||
-- 009_add_overtime_warning_columns.sql
|
||||
-- monthly_summary 테이블에 12시간 초과(확인필요) 상태 컬럼 추가
|
||||
|
||||
-- monthly_summary 테이블에 컬럼 추가
|
||||
ALTER TABLE monthly_summary
|
||||
ADD COLUMN overtime_warning_workers INT DEFAULT 0 COMMENT '확인필요(12시간초과) 작업자 수' AFTER error_workers,
|
||||
ADD COLUMN has_overtime_warning BOOLEAN DEFAULT FALSE COMMENT '확인필요 상태 있음' AFTER has_errors;
|
||||
|
||||
-- UpdateDailySummary 프로시저 업데이트
|
||||
DROP PROCEDURE IF EXISTS UpdateDailySummary;
|
||||
DELIMITER //
|
||||
CREATE PROCEDURE UpdateDailySummary(
|
||||
IN p_date DATE
|
||||
)
|
||||
BEGIN
|
||||
DECLARE v_year INT;
|
||||
DECLARE v_month INT;
|
||||
|
||||
SET v_year = YEAR(p_date);
|
||||
SET v_month = MONTH(p_date);
|
||||
|
||||
INSERT INTO monthly_summary (
|
||||
year, month, date,
|
||||
total_workers, working_workers,
|
||||
incomplete_workers, partial_workers, complete_workers,
|
||||
overtime_workers, vacation_workers, error_workers, overtime_warning_workers,
|
||||
total_work_hours, total_work_count, total_error_count,
|
||||
has_issues, has_errors, has_overtime_warning
|
||||
)
|
||||
SELECT
|
||||
v_year, v_month, p_date,
|
||||
COUNT(*) as total_workers,
|
||||
COUNT(CASE WHEN work_status != 'incomplete' THEN 1 END) as working_workers,
|
||||
COUNT(CASE WHEN work_status = 'incomplete' THEN 1 END) as incomplete_workers,
|
||||
COUNT(CASE WHEN work_status = 'partial' THEN 1 END) as partial_workers,
|
||||
COUNT(CASE WHEN work_status IN ('complete', 'overtime', 'vacation-full', 'vacation-half', 'vacation-quarter', 'vacation-half-half') THEN 1 END) as complete_workers,
|
||||
COUNT(CASE WHEN work_status = 'overtime' THEN 1 END) as overtime_workers,
|
||||
COUNT(CASE WHEN work_status LIKE 'vacation%' THEN 1 END) as vacation_workers,
|
||||
COUNT(CASE WHEN work_status = 'error' THEN 1 END) as error_workers,
|
||||
COUNT(CASE WHEN work_status = 'overtime-warning' THEN 1 END) as overtime_warning_workers,
|
||||
SUM(total_work_hours) as total_work_hours,
|
||||
SUM(total_work_count) as total_work_count,
|
||||
SUM(error_work_count) as total_error_count,
|
||||
MAX(has_issues) as has_issues,
|
||||
MAX(has_error) as has_errors,
|
||||
MAX(CASE WHEN work_status = 'overtime-warning' THEN 1 ELSE 0 END) as has_overtime_warning
|
||||
FROM monthly_worker_status
|
||||
WHERE date = p_date
|
||||
ON DUPLICATE KEY UPDATE
|
||||
total_workers = VALUES(total_workers),
|
||||
working_workers = VALUES(working_workers),
|
||||
incomplete_workers = VALUES(incomplete_workers),
|
||||
partial_workers = VALUES(partial_workers),
|
||||
complete_workers = VALUES(complete_workers),
|
||||
overtime_workers = VALUES(overtime_workers),
|
||||
vacation_workers = VALUES(vacation_workers),
|
||||
error_workers = VALUES(error_workers),
|
||||
overtime_warning_workers = VALUES(overtime_warning_workers),
|
||||
total_work_hours = VALUES(total_work_hours),
|
||||
total_work_count = VALUES(total_work_count),
|
||||
total_error_count = VALUES(total_error_count),
|
||||
has_issues = VALUES(has_issues),
|
||||
has_errors = VALUES(has_errors),
|
||||
has_overtime_warning = VALUES(has_overtime_warning),
|
||||
last_updated = CURRENT_TIMESTAMP;
|
||||
END //
|
||||
DELIMITER ;
|
||||
@@ -0,0 +1,72 @@
|
||||
-- 009_fix_duplicate_monthly_status.sql
|
||||
-- monthly_worker_status 테이블의 중복 데이터 정리
|
||||
|
||||
-- 1. 중복 데이터 확인 (디버깅용)
|
||||
-- SELECT worker_id, date, COUNT(*) as cnt
|
||||
-- FROM monthly_worker_status
|
||||
-- GROUP BY worker_id, date
|
||||
-- HAVING cnt > 1;
|
||||
|
||||
-- 2. 중복 데이터 정리: 같은 worker_id, date에 대해 최신 데이터만 남기고 나머지 삭제
|
||||
DELETE mws1 FROM monthly_worker_status mws1
|
||||
INNER JOIN (
|
||||
SELECT
|
||||
worker_id,
|
||||
date,
|
||||
MAX(id) as keep_id
|
||||
FROM monthly_worker_status
|
||||
GROUP BY worker_id, date
|
||||
) mws2 ON mws1.worker_id = mws2.worker_id
|
||||
AND mws1.date = mws2.date
|
||||
AND mws1.id < mws2.keep_id;
|
||||
|
||||
-- 3. 중복 제거 후 데이터 재집계 (선택사항)
|
||||
-- 만약 합산이 필요하다면 다음 프로시저를 실행
|
||||
DELIMITER $$
|
||||
|
||||
CREATE OR REPLACE PROCEDURE ConsolidateDuplicateMonthlyStatus()
|
||||
BEGIN
|
||||
DECLARE done INT DEFAULT FALSE;
|
||||
DECLARE v_worker_id INT;
|
||||
DECLARE v_date DATE;
|
||||
|
||||
-- 중복이 있는 worker_id, date 조합 찾기
|
||||
DECLARE cur CURSOR FOR
|
||||
SELECT worker_id, date
|
||||
FROM monthly_worker_status
|
||||
GROUP BY worker_id, date
|
||||
HAVING COUNT(*) > 1;
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
||||
|
||||
OPEN cur;
|
||||
|
||||
read_loop: LOOP
|
||||
FETCH cur INTO v_worker_id, v_date;
|
||||
IF done THEN
|
||||
LEAVE read_loop;
|
||||
END IF;
|
||||
|
||||
-- 해당 작업자의 해당 날짜 데이터를 재계산하여 업데이트
|
||||
CALL UpdateMonthlyWorkerStatus(v_date, v_worker_id);
|
||||
END LOOP;
|
||||
|
||||
CLOSE cur;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
||||
-- 4. 프로시저 실행하여 중복 데이터 통합
|
||||
-- CALL ConsolidateDuplicateMonthlyStatus();
|
||||
|
||||
-- 5. 확인: 중복이 남아있는지 체크
|
||||
SELECT
|
||||
'중복 체크 완료' as message,
|
||||
COUNT(*) as remaining_duplicates
|
||||
FROM (
|
||||
SELECT worker_id, date, COUNT(*) as cnt
|
||||
FROM monthly_worker_status
|
||||
GROUP BY worker_id, date
|
||||
HAVING cnt > 1
|
||||
) duplicates;
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
-- 010_add_project_status.sql
|
||||
-- 프로젝트 테이블에 활성화/비활성화 상태 필드 추가
|
||||
|
||||
-- 프로젝트 상태 필드 추가
|
||||
ALTER TABLE projects
|
||||
ADD COLUMN is_active BOOLEAN DEFAULT TRUE COMMENT '프로젝트 활성화 상태 (TRUE: 활성, FALSE: 비활성)';
|
||||
|
||||
-- 프로젝트 완료일 필드 추가 (납품일)
|
||||
ALTER TABLE projects
|
||||
ADD COLUMN completed_date DATE NULL COMMENT '프로젝트 완료일 (납품일)';
|
||||
|
||||
-- 프로젝트 상태 필드 추가 (진행상태)
|
||||
ALTER TABLE projects
|
||||
ADD COLUMN project_status ENUM('planning', 'active', 'completed', 'cancelled') DEFAULT 'active' COMMENT '프로젝트 진행 상태';
|
||||
|
||||
-- 기존 프로젝트들을 모두 활성 상태로 설정
|
||||
UPDATE projects SET is_active = TRUE WHERE is_active IS NULL;
|
||||
|
||||
-- 인덱스 추가 (성능 최적화)
|
||||
CREATE INDEX idx_projects_is_active ON projects(is_active);
|
||||
CREATE INDEX idx_projects_status ON projects(project_status);
|
||||
CREATE INDEX idx_projects_completed_date ON projects(completed_date);
|
||||
@@ -0,0 +1,30 @@
|
||||
-- 011_add_worker_status.sql
|
||||
-- workers 테이블에 추가 정보 필드 추가
|
||||
|
||||
-- 작업자 상태 필드 수정 (기존 text에서 ENUM으로)
|
||||
ALTER TABLE workers
|
||||
MODIFY COLUMN status ENUM('active', 'inactive') DEFAULT 'active' COMMENT '작업자 상태 (active: 활성, inactive: 비활성)';
|
||||
|
||||
-- 작업자 추가 정보 필드들 추가
|
||||
ALTER TABLE workers
|
||||
ADD COLUMN phone_number VARCHAR(20) NULL COMMENT '전화번호';
|
||||
|
||||
ALTER TABLE workers
|
||||
ADD COLUMN email VARCHAR(100) NULL COMMENT '이메일';
|
||||
|
||||
ALTER TABLE workers
|
||||
ADD COLUMN hire_date DATE NULL COMMENT '입사일';
|
||||
|
||||
ALTER TABLE workers
|
||||
ADD COLUMN department VARCHAR(100) NULL COMMENT '부서';
|
||||
|
||||
ALTER TABLE workers
|
||||
ADD COLUMN notes TEXT NULL COMMENT '비고';
|
||||
|
||||
-- 기존 작업자들을 모두 활성 상태로 설정
|
||||
UPDATE workers SET status = 'active' WHERE status IS NULL;
|
||||
|
||||
-- 인덱스 추가 (성능 최적화)
|
||||
CREATE INDEX idx_workers_status ON workers(status);
|
||||
CREATE INDEX idx_workers_job_type ON workers(job_type);
|
||||
CREATE INDEX idx_workers_hire_date ON workers(hire_date);
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,115 @@
|
||||
-- migrations/002_add_master_tables.sql
|
||||
-- 기존 daily_work_reports 테이블을 유지하면서 필요한 마스터 테이블들만 추가
|
||||
|
||||
-- 1. 작업 유형 테이블 생성
|
||||
CREATE TABLE IF NOT EXISTS work_types (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
name VARCHAR(100) NOT NULL COMMENT '작업 유형명',
|
||||
description TEXT COMMENT '작업 유형 설명',
|
||||
category VARCHAR(50) COMMENT '작업 카테고리',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- 2. 업무 상태 유형 테이블 생성
|
||||
CREATE TABLE IF NOT EXISTS work_status_types (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
name VARCHAR(50) NOT NULL COMMENT '상태명',
|
||||
description TEXT COMMENT '상태 설명',
|
||||
is_error BOOLEAN DEFAULT FALSE COMMENT '에러 상태 여부',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- 3. 에러 유형 테이블 생성
|
||||
CREATE TABLE IF NOT EXISTS error_types (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
name VARCHAR(100) NOT NULL COMMENT '에러 유형명',
|
||||
description TEXT COMMENT '에러 설명',
|
||||
severity ENUM('low', 'medium', 'high', 'critical') DEFAULT 'medium' COMMENT '심각도',
|
||||
solution_guide TEXT COMMENT '해결 가이드',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- 4. 감사 로그 테이블 생성 (누적입력 추적용)
|
||||
CREATE TABLE IF NOT EXISTS work_report_audit_log (
|
||||
log_id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
action ENUM('ADD_ACCUMULATE', 'DELETE_SINGLE', 'UPDATE', 'DELETE', 'CREATE', 'DELETE_BATCH') NOT NULL COMMENT '작업 유형',
|
||||
report_id INT NULL COMMENT '관련 보고서 ID',
|
||||
old_values JSON NULL COMMENT '변경 전 값',
|
||||
new_values JSON NULL COMMENT '변경 후 값',
|
||||
changed_by INT NOT NULL COMMENT '변경자 ID',
|
||||
change_reason VARCHAR(500) COMMENT '변경 사유',
|
||||
ip_address VARCHAR(45) COMMENT 'IP 주소',
|
||||
user_agent TEXT COMMENT '사용자 에이전트',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '변경 시간',
|
||||
|
||||
INDEX idx_action_date (action, created_at),
|
||||
INDEX idx_changed_by (changed_by),
|
||||
INDEX idx_report_id (report_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- 5. 기존 daily_work_reports 테이블에 누적입력을 위한 인덱스만 추가
|
||||
ALTER TABLE daily_work_reports
|
||||
ADD INDEX IF NOT EXISTS idx_created_by (created_by),
|
||||
ADD INDEX IF NOT EXISTS idx_date_worker_creator (report_date, worker_id, created_by);
|
||||
|
||||
-- 6. 기본 데이터 삽입 (기존 데이터와 호환되도록)
|
||||
|
||||
-- 업무 상태 유형 기본 데이터
|
||||
INSERT IGNORE INTO work_status_types (id, name, description, is_error) VALUES
|
||||
(1, '정규', '정상적으로 완료된 작업', FALSE),
|
||||
(2, '에러', '오류가 발생한 작업', TRUE);
|
||||
|
||||
-- 작업 유형 기본 데이터 (기존 데이터의 work_type_id=1과 호환)
|
||||
INSERT IGNORE INTO work_types (id, name, description, category) VALUES
|
||||
(1, '일반작업', '기본 작업 유형', '생산관리'),
|
||||
(2, '생산', '제품 생산 작업', '생산관리'),
|
||||
(3, '품질검사', '제품 품질 검사', '품질관리'),
|
||||
(4, '안전점검', '안전 상태 점검', '안전관리'),
|
||||
(5, '자재입고', '원자재 입고 작업', '구매관리'),
|
||||
(6, '설비점검', '생산 설비 점검', '설비관리'),
|
||||
(7, '재고관리', '재고 현황 관리', '창고관리'),
|
||||
(8, '포장', '제품 포장 작업', '생산관리'),
|
||||
(9, '출하', '제품 출하 작업', '물류관리');
|
||||
|
||||
-- 에러 유형 기본 데이터
|
||||
INSERT IGNORE INTO error_types (id, name, description, severity, solution_guide) VALUES
|
||||
(1, '설비고장', '생산 설비 고장', 'high', '즉시 설비팀에 연락하여 수리 요청'),
|
||||
(2, '자재부족', '필요 자재 부족', 'medium', '구매팀에 긴급 주문 요청'),
|
||||
(3, '품질불량', '제품 품질 기준 미달', 'high', '품질팀에 즉시 보고 및 생산 중단'),
|
||||
(4, '안전사고', '작업 중 안전사고 발생', 'critical', '즉시 작업 중단 및 안전팀 신고'),
|
||||
(5, '시스템오류', 'IT 시스템 오류', 'medium', 'IT팀에 장애 신고');
|
||||
|
||||
-- 7. 기존 데이터 호환성을 위한 뷰 생성
|
||||
CREATE OR REPLACE VIEW v_daily_reports_with_names AS
|
||||
SELECT
|
||||
dwr.id,
|
||||
dwr.report_date,
|
||||
dwr.worker_id,
|
||||
w.worker_name,
|
||||
dwr.project_id,
|
||||
p.project_name,
|
||||
dwr.work_type_id,
|
||||
COALESCE(wt.name, '일반작업') as work_type_name,
|
||||
COALESCE(wt.category, '생산관리') as work_category,
|
||||
dwr.work_status_id,
|
||||
COALESCE(wst.name, '정규') as work_status_name,
|
||||
COALESCE(wst.is_error, FALSE) as is_error,
|
||||
dwr.error_type_id,
|
||||
et.name as error_type_name,
|
||||
et.severity as error_severity,
|
||||
dwr.work_hours,
|
||||
dwr.created_by,
|
||||
u.name as created_by_name,
|
||||
dwr.created_at,
|
||||
dwr.updated_at
|
||||
FROM daily_work_reports dwr
|
||||
LEFT JOIN Workers w ON dwr.worker_id = w.worker_id
|
||||
LEFT JOIN Projects p ON dwr.project_id = p.project_id
|
||||
LEFT JOIN work_types wt ON dwr.work_type_id = wt.id
|
||||
LEFT JOIN work_status_types wst ON dwr.work_status_id = wst.id
|
||||
LEFT JOIN error_types et ON dwr.error_type_id = et.id
|
||||
LEFT JOIN Users u ON dwr.created_by = u.user_id;
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,56 @@
|
||||
-- migrations/003_normalize_table_names.sql
|
||||
-- 모든 테이블명을 snake_case로 변경하여 룰 준수
|
||||
|
||||
-- 기존 PascalCase 테이블들을 snake_case로 변경
|
||||
|
||||
-- 1. Users -> users
|
||||
RENAME TABLE Users TO users;
|
||||
|
||||
-- 2. CuttingPlan -> cutting_plan
|
||||
RENAME TABLE CuttingPlan TO cutting_plan;
|
||||
|
||||
-- 3. DailyIssueReports -> daily_issue_reports
|
||||
RENAME TABLE DailyIssueReports TO daily_issue_reports;
|
||||
|
||||
-- 4. EquipmentList -> equipment_list
|
||||
RENAME TABLE EquipmentList TO equipment_list;
|
||||
|
||||
-- 5. FactoryInfo -> factory_info
|
||||
RENAME TABLE FactoryInfo TO factory_info;
|
||||
|
||||
-- 6. IssueTypes -> issue_types
|
||||
RENAME TABLE IssueTypes TO issue_types;
|
||||
|
||||
-- 7. PipeSpecs -> pipe_specs
|
||||
RENAME TABLE PipeSpecs TO pipe_specs;
|
||||
|
||||
-- 8. Processes -> processes (이미 소문자이지만 통일성 위해)
|
||||
-- RENAME TABLE Processes TO processes; -- 이미 소문자면 스킵
|
||||
|
||||
-- 9. Projects -> projects
|
||||
RENAME TABLE Projects TO projects;
|
||||
|
||||
-- 10. Tasks -> tasks
|
||||
RENAME TABLE Tasks TO tasks;
|
||||
|
||||
-- 11. WorkReports -> work_reports
|
||||
RENAME TABLE WorkReports TO work_reports;
|
||||
|
||||
-- 12. Workers -> workers
|
||||
RENAME TABLE Workers TO workers;
|
||||
|
||||
-- 이미 snake_case인 테이블들은 그대로 유지:
|
||||
-- activity_logs
|
||||
-- daily_work_reports
|
||||
-- daily_worker_summary
|
||||
-- error_types
|
||||
-- login_logs
|
||||
-- password_change_logs
|
||||
-- uploaded_documents
|
||||
-- work_report_audit_log
|
||||
-- work_status_types
|
||||
-- work_types
|
||||
-- worker_groups
|
||||
|
||||
-- 변경 완료 로그
|
||||
SELECT 'Table names normalized to snake_case according to project rules' as migration_status;
|
||||
@@ -0,0 +1,45 @@
|
||||
-- hyungi 계정을 시스템 권한으로 업데이트
|
||||
-- 실행 날짜: 2025-01-XX
|
||||
|
||||
-- hyungi 계정의 role을 system으로 변경
|
||||
UPDATE Users
|
||||
SET
|
||||
role = 'system',
|
||||
access_level = 'system',
|
||||
name = '시스템 관리자',
|
||||
updated_at = NOW()
|
||||
WHERE username = 'hyungi';
|
||||
|
||||
-- 변경 결과 확인
|
||||
SELECT
|
||||
user_id,
|
||||
username,
|
||||
name,
|
||||
role,
|
||||
access_level,
|
||||
is_active,
|
||||
updated_at
|
||||
FROM Users
|
||||
WHERE username = 'hyungi';
|
||||
|
||||
-- 시스템 권한 확인을 위한 쿼리
|
||||
SELECT
|
||||
username,
|
||||
name,
|
||||
role,
|
||||
access_level,
|
||||
CASE
|
||||
WHEN role = 'system' THEN '✅ 시스템 관리자'
|
||||
WHEN role = 'admin' THEN '🔧 관리자'
|
||||
WHEN role = 'leader' THEN '👨🏫 그룹장'
|
||||
ELSE '👤 일반 사용자'
|
||||
END as permission_level
|
||||
FROM Users
|
||||
ORDER BY
|
||||
CASE role
|
||||
WHEN 'system' THEN 1
|
||||
WHEN 'admin' THEN 2
|
||||
WHEN 'leader' THEN 3
|
||||
ELSE 4
|
||||
END,
|
||||
username;
|
||||
Reference in New Issue
Block a user