From 5fa4b73ddd5a40f4c9501dc8b0cb6be725406a4c Mon Sep 17 00:00:00 2001 From: Kurt92 Date: Fri, 12 Dec 2025 17:49:10 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20=EA=B3=84=EB=8F=84=20=EB=B0=9C?= =?UTF-8?q?=EC=86=A1=EB=8C=80=EC=83=81,=20=EA=B3=84=EB=8F=84=ED=98=84?= =?UTF-8?q?=ED=99=A9=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/GuideSendTargetController.java | 51 ++++++++++++++ .../sendTarget/dto/GuideSendTargetDto.java | 69 +++++++++++++++++++ .../GuideSendTargetQueryDslRepository.java | 57 +++++++++++++++ .../service/GuideSendTargetService.java | 9 +++ .../impl/GuideSendTargetServiceImpl.java | 57 +++++++++++++++ .../status/dto/PreNoticeStatusDto.java | 37 ++++++++++ .../status/preNoticeStatusDetail_popup.jsp | 16 +++++ 7 files changed, 296 insertions(+) create mode 100644 src/main/java/go/kr/project/biz/post/guide/sendTarget/controller/GuideSendTargetController.java create mode 100644 src/main/java/go/kr/project/biz/post/guide/sendTarget/dto/GuideSendTargetDto.java create mode 100644 src/main/java/go/kr/project/biz/post/guide/sendTarget/repository/GuideSendTargetQueryDslRepository.java create mode 100644 src/main/java/go/kr/project/biz/post/guide/sendTarget/service/GuideSendTargetService.java create mode 100644 src/main/java/go/kr/project/biz/post/guide/sendTarget/service/impl/GuideSendTargetServiceImpl.java create mode 100644 src/main/java/go/kr/project/biz/post/preNotice/status/dto/PreNoticeStatusDto.java create mode 100644 src/main/webapp/WEB-INF/views/biz/post/preNotice/status/preNoticeStatusDetail_popup.jsp diff --git a/src/main/java/go/kr/project/biz/post/guide/sendTarget/controller/GuideSendTargetController.java b/src/main/java/go/kr/project/biz/post/guide/sendTarget/controller/GuideSendTargetController.java new file mode 100644 index 0000000..eca6497 --- /dev/null +++ b/src/main/java/go/kr/project/biz/post/guide/sendTarget/controller/GuideSendTargetController.java @@ -0,0 +1,51 @@ +package go.kr.project.biz.post.guide.sendTarget.controller; + +import egovframework.constant.TilesConstants; +import egovframework.util.ApiResponseUtil; +import go.kr.project.biz.post.guide.sendTarget.dto.GuideSendTargetDto; +import go.kr.project.biz.post.guide.sendTarget.service.GuideSendTargetService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; + +import java.util.List; + +@Controller +@RequiredArgsConstructor +public class GuideSendTargetController { + + private final GuideSendTargetService guideSendTargetService; + + + /** + * 발송/반송 > 계도장 > 계도장 대상 목록 페이지 + * @return 뷰 경로 + */ + @GetMapping("post/guide/sendTarget/guideSendTarget.do") + public String guideSendTargetView() { + + return "biz/post/guide/sendTarget/guideSendTarget" + TilesConstants.BASE; + } + + + + + @PostMapping("/post/guide/sendTarget/sendTargetList.ajax") + public ResponseEntity getGuideSendTargetListAjax(@ModelAttribute GuideSendTargetDto.Request.Search dto) { + + // 총 게시물 수 조회 + int totalCount = 0; + dto.setTotalCount(totalCount); + + // 페이징 처리를 위한 설정 + dto.setPagingYn("N"); + + // 리스트 조회 + List result = guideSendTargetService.findPreNoticeSendTarget(dto); + + return ApiResponseUtil.successWithGrid(result, dto); + } +} diff --git a/src/main/java/go/kr/project/biz/post/guide/sendTarget/dto/GuideSendTargetDto.java b/src/main/java/go/kr/project/biz/post/guide/sendTarget/dto/GuideSendTargetDto.java new file mode 100644 index 0000000..397f5fa --- /dev/null +++ b/src/main/java/go/kr/project/biz/post/guide/sendTarget/dto/GuideSendTargetDto.java @@ -0,0 +1,69 @@ +package go.kr.project.biz.post.guide.sendTarget.dto; + +import go.kr.project.domain.entity.CpAnswer; +import go.kr.project.domain.entity.CpMain; +import go.kr.project.domain.entity.CpOwner; +import go.kr.project.system.common.model.PagingVO; +import go.kr.project.vo.CpAnswerVO; +import go.kr.project.vo.CpMainVO; +import go.kr.project.vo.CpOwnerVO; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +public class GuideSendTargetDto { + + public static class Request { + + @Getter + @Setter + public static class Search extends PagingVO { + private String mmSggcode; + private String searchLawgb; + } + + } + + public static class Response { + + + @Getter + @Setter + public static class GuideSendTargetEntities { + private CpMain cpMain; + private CpAnswer cpAnswer; + private CpOwner cpOwner; + private String vlId; + } + + @Getter + @Setter + @Builder + public static class GuideSendTarget { + private CpMainVO cpMain; + private CpAnswerVO cpAnswer; + private CpOwnerVO cpOwner; + private String vlId; + } + @Getter + @Setter + @Builder + public static class GuideSendTargetFlat { + + private String mmDlgb; + private String asBbsNo; + private String asJsdate; + private String mmSgnm; + private String mmSgtel; + private String vlId; + private String mmDate; + private String mmCarno; + private String omName; + private String omNogb; + private String omJno; + private String mmSgpos; + private String mmCode; + + } + } +} diff --git a/src/main/java/go/kr/project/biz/post/guide/sendTarget/repository/GuideSendTargetQueryDslRepository.java b/src/main/java/go/kr/project/biz/post/guide/sendTarget/repository/GuideSendTargetQueryDslRepository.java new file mode 100644 index 0000000..6f90cb9 --- /dev/null +++ b/src/main/java/go/kr/project/biz/post/guide/sendTarget/repository/GuideSendTargetQueryDslRepository.java @@ -0,0 +1,57 @@ +package go.kr.project.biz.post.guide.sendTarget.repository; + +import com.querydsl.core.types.Projections; +import com.querydsl.jpa.impl.JPAQueryFactory; +import go.kr.project.biz.post.guide.sendTarget.dto.GuideSendTargetDto; +import go.kr.project.vo.code.MmStateEnum; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +import static go.kr.project.domain.entity.QCpAnswer.cpAnswer; +import static go.kr.project.domain.entity.QCpInstruct.cpInstruct; +import static go.kr.project.domain.entity.QCpMain.cpMain; +import static go.kr.project.domain.entity.QCpOwner.cpOwner; +import static go.kr.project.domain.entity.QCpUser.cpUser; +import static go.kr.project.domain.entity.QCpViolation.cpViolation; + +@Repository +@RequiredArgsConstructor +public class GuideSendTargetQueryDslRepository { + + private final JPAQueryFactory queryFactory; + + + + public List findGuideSendTarget(GuideSendTargetDto.Request.Search dto) { + + + List result = queryFactory + .select( + Projections.fields( + GuideSendTargetDto.Response.GuideSendTargetEntities.class, + cpMain, + cpAnswer, + cpOwner, + cpViolation.vlId + ) + ) + .from(cpMain) + .leftJoin(cpAnswer).on(cpMain.mmCode.eq(cpAnswer.asMmcode)) + .leftJoin(cpInstruct).on(cpMain.mmCode.eq(cpInstruct.itMmcode)) + .leftJoin(cpOwner).on(cpMain.mmOmcode.eq(cpOwner.omCode)) + .innerJoin(cpViolation).on( + cpMain.mmLawgb.eq(cpViolation.id.vlCode), + cpMain.mmSggcode.eq(cpViolation.id.vlSggcode)) + .where( + cpMain.mmState.eq(MmStateEnum.GUIDANCE.getCode()), + cpMain.mmLawgb.eq(dto.getSearchLawgb()) + ) + .orderBy(cpMain.mmCarno.asc(), cpMain.mmDate.asc(), cpMain.mmTime.asc()) + .fetch(); + + return result; + } + +} diff --git a/src/main/java/go/kr/project/biz/post/guide/sendTarget/service/GuideSendTargetService.java b/src/main/java/go/kr/project/biz/post/guide/sendTarget/service/GuideSendTargetService.java new file mode 100644 index 0000000..8c62f13 --- /dev/null +++ b/src/main/java/go/kr/project/biz/post/guide/sendTarget/service/GuideSendTargetService.java @@ -0,0 +1,9 @@ +package go.kr.project.biz.post.guide.sendTarget.service; + +import go.kr.project.biz.post.guide.sendTarget.dto.GuideSendTargetDto; + +import java.util.List; + +public interface GuideSendTargetService { + List findPreNoticeSendTarget(GuideSendTargetDto.Request.Search dto); +} diff --git a/src/main/java/go/kr/project/biz/post/guide/sendTarget/service/impl/GuideSendTargetServiceImpl.java b/src/main/java/go/kr/project/biz/post/guide/sendTarget/service/impl/GuideSendTargetServiceImpl.java new file mode 100644 index 0000000..09d4bb3 --- /dev/null +++ b/src/main/java/go/kr/project/biz/post/guide/sendTarget/service/impl/GuideSendTargetServiceImpl.java @@ -0,0 +1,57 @@ +package go.kr.project.biz.post.guide.sendTarget.service.impl; + +import go.kr.project.biz.post.guide.sendTarget.dto.GuideSendTargetDto; +import go.kr.project.biz.post.guide.sendTarget.repository.GuideSendTargetQueryDslRepository; +import go.kr.project.biz.post.guide.sendTarget.service.GuideSendTargetService; +import go.kr.project.vo.CpAnswerVO; +import go.kr.project.vo.CpMainVO; +import go.kr.project.vo.CpOwnerVO; +import go.kr.project.vo.code.MmDlgbEnum; +import go.kr.project.vo.mapper.EntityVoMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class GuideSendTargetServiceImpl implements GuideSendTargetService { + + private final EntityVoMapper mapper; + private final GuideSendTargetQueryDslRepository guideSendTargetQueryDslRepository; + + @Override + public List findPreNoticeSendTarget(GuideSendTargetDto.Request.Search dto) { + + List list = guideSendTargetQueryDslRepository.findGuideSendTarget(dto); + + List result = + list.stream() + .map(e -> { + CpMainVO cpMainVO = mapper.toCpMainVO(e.getCpMain()); + CpAnswerVO cpAnswerVO = mapper.toCpAnswerVO(e.getCpAnswer()); + CpOwnerVO cpOwnerVO = mapper.toCpOwnerVO(e.getCpOwner()); + + return GuideSendTargetDto.Response.GuideSendTargetFlat.builder() + // 평탄화 필드 + .mmDlgb(MmDlgbEnum.getDescByCode(cpMainVO.getMmDlgb())) + .asBbsNo(cpMainVO.getMmBdcode()) + .asJsdate(cpAnswerVO.getAsJsdate()) + .mmSgnm(cpMainVO.getMmSgnm()) + .mmSgtel(cpMainVO.getMmSgtel()) + .vlId(e.getVlId()) + .mmDate(cpMainVO.getMmDate()) + .mmCarno(cpMainVO.getMmCarno()) + .omName(cpOwnerVO.getOmName()) + .omNogb(cpOwnerVO.getOmNOGb()) + .omJno(cpOwnerVO.getOmJno()) + .mmSgpos(cpMainVO.getMmSgpos()) + .mmCode(cpMainVO.getMmCode()) + .build(); + }) + .collect(Collectors.toList()); + + return result; + } +} diff --git a/src/main/java/go/kr/project/biz/post/preNotice/status/dto/PreNoticeStatusDto.java b/src/main/java/go/kr/project/biz/post/preNotice/status/dto/PreNoticeStatusDto.java new file mode 100644 index 0000000..c1b5eb4 --- /dev/null +++ b/src/main/java/go/kr/project/biz/post/preNotice/status/dto/PreNoticeStatusDto.java @@ -0,0 +1,37 @@ +package go.kr.project.biz.post.preNotice.status.dto; + +import go.kr.project.system.common.model.PagingVO; +import lombok.Getter; +import lombok.Setter; + +public class PreNoticeStatusDto { + + public static class Request { + + @Getter + @Setter + public static class Search extends PagingVO { + private String mmSggcode; + + } + + + } + + + + + + + + public static class Response { + + @Getter + @Setter + public static class DailyStatus { + + } + + + } +} diff --git a/src/main/webapp/WEB-INF/views/biz/post/preNotice/status/preNoticeStatusDetail_popup.jsp b/src/main/webapp/WEB-INF/views/biz/post/preNotice/status/preNoticeStatusDetail_popup.jsp new file mode 100644 index 0000000..b6151eb --- /dev/null +++ b/src/main/webapp/WEB-INF/views/biz/post/preNotice/status/preNoticeStatusDetail_popup.jsp @@ -0,0 +1,16 @@ +<%-- + Created by IntelliJ IDEA. + User: kurt + Date: 2025. 12. 12. + Time: 오후 3:56 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Title + + + + +