feat: v2.2.0 - 중복 카드 문제 해결 및 삭제 기능 개선
### 주요 변경사항 1. 작업 현황 모달 중복 카드 문제 근본 해결 - monthlyStatusModel.getDailyWorkerStatus() 리팩토링 - 집계 테이블 대신 daily_work_reports에서 직접 조회 - GROUP BY로 작업자별 1개 카드 보장 2. 삭제 권한 강화 - 작업보고서 삭제는 그룹장/시스템/관리자만 가능 - 권한 없는 사용자는 403 에러 반환 3. 작업 입력 UI 개선 - 작업 항목 삭제 버튼 스타일 개선 (이모지 + 빨간색) - 삭제 버튼 호버 효과 추가 4. 작업 현황 모달에 삭제 기능 추가 - 관리자/그룹장만 삭제 버튼 표시 - 작업자의 해당 날짜 전체 작업 삭제 가능 5. 시놀로지 배포 스크립트 추가 - update.sh: DB 보존하면서 코드만 업데이트 - 안전한 배포 절차 자동화
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user