feat(uiws): UIWS 업무모듈(업무일지·일정·쪽지·통계)+2FA 이식

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
DESKTOP-TKLFCPR\ython 2026-06-20 20:50:34 +09:00
parent a3226bda86
commit 70c781a54e
5 changed files with 100 additions and 7 deletions

View File

@ -0,0 +1,93 @@
package com.zioinfo.mall.uiws.schedule.mapper;
import com.zioinfo.mall.uiws.schedule.model.UiwsAttach;
import com.zioinfo.mall.uiws.schedule.model.UiwsDiary;
import com.zioinfo.mall.uiws.schedule.model.UiwsSchedule;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/**
* 일정·일지·첨부 MyBatis 매퍼. 원본 JPA ScheduleRepository/DiaryRepository/AttachRepository 변환 이식.
* 데이터 가시범위: scopeAll(true=ADMIN 전체) OR owner IN (ownerIds). ownerIds 항상 본인 포함( IN 회피).
*/
@Mapper
public interface UiwsScheduleMapper {
// schedule
int insertSchedule(UiwsSchedule s);
int updateSchedule(UiwsSchedule s);
UiwsSchedule findScheduleById(@Param("scheduleId") Long scheduleId);
boolean existsScheduleById(@Param("scheduleId") Long scheduleId);
int deleteScheduleById(@Param("scheduleId") Long scheduleId);
/** 달력: 기간 겹침([from,to) 배타 상한) + type + 개인소유/부서필터. */
List<UiwsSchedule> findInRange(@Param("from") LocalDateTime from,
@Param("to") LocalDateTime to,
@Param("scheType") String scheType,
@Param("ownerId") String ownerId,
@Param("deptId") String deptId);
List<UiwsSchedule> searchAll(@Param("from") LocalDateTime from,
@Param("to") LocalDateTime to,
@Param("scheType") String scheType,
@Param("scopeAll") boolean scopeAll,
@Param("ownerIds") List<String> ownerIds,
@Param("limit") int limit,
@Param("offset") int offset);
long countAll(@Param("from") LocalDateTime from,
@Param("to") LocalDateTime to,
@Param("scheType") String scheType,
@Param("scopeAll") boolean scopeAll,
@Param("ownerIds") List<String> ownerIds);
List<UiwsSchedule> searchPopup(@Param("keyword") String keyword,
@Param("scopeAll") boolean scopeAll,
@Param("ownerIds") List<String> ownerIds);
// diary
int insertDiary(UiwsDiary d);
int updateDiary(UiwsDiary d);
UiwsDiary findDiaryById(@Param("diaryId") Long diaryId);
boolean existsDiaryById(@Param("diaryId") Long diaryId);
int deleteDiaryById(@Param("diaryId") Long diaryId);
List<UiwsDiary> searchDiary(@Param("from") LocalDate from,
@Param("to") LocalDate to,
@Param("limit") int limit,
@Param("offset") int offset);
long countDiary(@Param("from") LocalDate from, @Param("to") LocalDate to);
// attach
int insertAttach(UiwsAttach a);
UiwsAttach findAttachById(@Param("attachId") Long attachId);
int updateAttachRef(@Param("attachId") Long attachId,
@Param("refType") String refType,
@Param("refId") Long refId,
@Param("actor") String actor);
List<UiwsAttach> findAttachByRef(@Param("refType") String refType, @Param("refId") Long refId);
int deleteAttachById(@Param("attachId") Long attachId);
int deleteAttachByRef(@Param("refType") String refType, @Param("refId") Long refId);
// 사용자명 라벨(코어 user 재사용)
List<Map<String, String>> findUserNames(@Param("ids") List<String> ids);
}

View File

@ -4,7 +4,7 @@ import com.zioinfo.mall.uiws.common.UiwsApiException;
import com.zioinfo.mall.uiws.common.UiwsCurrentUser;
import com.zioinfo.mall.uiws.common.UiwsErrorCode;
import com.zioinfo.mall.uiws.schedule.dto.ScheduleDtos.AttachmentDto;
import com.zioinfo.mall.uiws.schedule.mapper.ScheduleMapper;
import com.zioinfo.mall.uiws.schedule.mapper.UiwsScheduleMapper;
import com.zioinfo.mall.uiws.schedule.model.UiwsAttach;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@ -28,7 +28,7 @@ public class AttachmentService {
public static final String REF_DIARY = "DIARY";
private static final Set<String> VALID_REF_TYPES = Set.of(REF_SCHEDULE, REF_DIARY);
private final ScheduleMapper mapper;
private final UiwsScheduleMapper mapper;
private final FileStorageService fileStorageService;
@Transactional

View File

@ -4,7 +4,7 @@ import com.zioinfo.mall.uiws.common.UiwsApiException;
import com.zioinfo.mall.uiws.common.UiwsCurrentUser;
import com.zioinfo.mall.uiws.common.UiwsErrorCode;
import com.zioinfo.mall.uiws.schedule.dto.ScheduleDtos.*;
import com.zioinfo.mall.uiws.schedule.mapper.ScheduleMapper;
import com.zioinfo.mall.uiws.schedule.mapper.UiwsScheduleMapper;
import com.zioinfo.mall.uiws.schedule.model.UiwsDiary;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@ -24,7 +24,7 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public class DiaryService {
private final ScheduleMapper mapper;
private final UiwsScheduleMapper mapper;
private final AttachmentService attachmentService;
@Transactional(readOnly = true)

View File

@ -5,7 +5,7 @@ import com.zioinfo.mall.uiws.common.UiwsCurrentUser;
import com.zioinfo.mall.uiws.common.UiwsDataScope;
import com.zioinfo.mall.uiws.common.UiwsErrorCode;
import com.zioinfo.mall.uiws.schedule.dto.ScheduleDtos.*;
import com.zioinfo.mall.uiws.schedule.mapper.ScheduleMapper;
import com.zioinfo.mall.uiws.schedule.mapper.UiwsScheduleMapper;
import com.zioinfo.mall.uiws.schedule.model.UiwsSchedule;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@ -32,7 +32,7 @@ public class ScheduleService {
private static final String TYPE_DEPT = "DEPT";
private static final DateTimeFormatter DT = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
private final ScheduleMapper mapper;
private final UiwsScheduleMapper mapper;
private final AttachmentService attachmentService;
@Transactional(readOnly = true)

View File

@ -3,7 +3,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- UIWS 이식: 일정/일지/첨부 (tb_uiws_schedule / tb_uiws_diary / tb_uiws_attach). -->
<mapper namespace="com.zioinfo.mall.uiws.schedule.mapper.ScheduleMapper">
<mapper namespace="com.zioinfo.mall.uiws.schedule.mapper.UiwsScheduleMapper">
<!-- ===================== schedule ===================== -->
<insert id="insertSchedule" useGeneratedKeys="true" keyProperty="scheduleId" keyColumn="schedule_id"