package kr.itn.itnhub.process; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface ProcessItemMapper { /** * 순번 오름차순, keyword는 사이트명/게시물제목 LIKE. status는 null=전체, * "DONE"=처리완료, "PENDING"=그 외(null/빈/미처리)만. */ List findPage(@Param("orgId") Long orgId, @Param("keyword") String keyword, @Param("status") String status, @Param("offset") int offset, @Param("limit") int limit); /** keyword/status로 필터링된 건수 - 필터별 페이지 경계 계산용(현재 응답의 total과는 별개). */ int countByOrg(@Param("orgId") Long orgId, @Param("keyword") String keyword, @Param("status") String status); /** 다운로드/재업로드 판정용으로 페이징 없이 순번순 전체를 읽는다. */ List findAllByOrg(@Param("orgId") Long orgId); /** 이미 저장된 순번 전체 - ImportService가 신규/갱신 집계를 메모리에서 판단하기 위함. */ List findSeqsByOrg(@Param("orgId") Long orgId); ProcessItem findById(@Param("orgId") Long orgId, @Param("id") Long id); /** * 엑셀 재업로드 1행 반영. (org_id, seq) 충돌 시 조사원+권리확인 영역(계약서 유무 제외)은 * 항상 덮어쓰고, 계약서 유무와 권리처리 영역은 web_edited_at이 null일 때만 덮어쓴다 - * 정책 세부는 XML 주석 참고. */ int upsertFromFile(ProcessItem item); /** 권리처리 상세의 [처리등록]/[수정] 저장. web_edited_at을 찍고, 처리완료 최초 도달 시각을 processed_at에 남긴다. */ int updateProcessing(@Param("orgId") Long orgId, @Param("id") Long id, @Param("contractDocs") String contractDocs, @Param("judgedKoglType") String judgedKoglType, @Param("judgedAiType") String judgedAiType, @Param("finalOpinion") String finalOpinion, @Param("judgmentBasis") String judgmentBasis, @Param("processStatus") String processStatus); int deleteById(@Param("orgId") Long orgId, @Param("id") Long id); /** 기관 삭제 캐스케이드 외에는 아직 쓰이지 않지만, 저장 비용이 낮아 함께 둔다(review_item과 동일 관례). */ int deleteByOrg(@Param("orgId") Long orgId); /** 검색어/상태 필터와 무관한 기관 전체 진행률 - 목록 헤더와 기관 상세 통계 카드가 함께 쓴다. */ ProcessStats stats(@Param("orgId") Long orgId); }