하석형 하석형 04-24
250424 하석형 메뉴만족도등록, 상세조회(응답여부) 추가
@8e2363f15d1fabb25ae7fdf80c6f2aa6e5ce76dd
src/main/java/com/takensoft/cms/menu/dao/MenuDgstfnDAO.java
--- src/main/java/com/takensoft/cms/menu/dao/MenuDgstfnDAO.java
+++ src/main/java/com/takensoft/cms/menu/dao/MenuDgstfnDAO.java
@@ -14,6 +14,7 @@
  * @modification
  *     since    |    author    | description
  *  2025.04.23  |    하석형     | 최초 등록
+ *  2025.04.23  |    하석형     | findMenuDgstfnByMenuId 추가
  *
  * 메뉴별 만족도 관련 DAO
  */
@@ -37,6 +38,14 @@
 
     /**
      * @param menuDgstfnVO - 메뉴 만족도 정보
+     * @return MenuDgstfnVO - 메뉴별 만족도 정보
+     *
+     * 메뉴별 만족도 상세 조회
+     */
+    MenuDgstfnVO findMenuDgstfnByMenuId(MenuDgstfnVO menuDgstfnVO);
+
+    /**
+     * @param menuDgstfnVO - 메뉴 만족도 정보
      * @return int - 등록 결과
      *
      * 메뉴별 만족도 등록
src/main/java/com/takensoft/cms/menu/service/Impl/MenuDgstfnServiceImpl.java
--- src/main/java/com/takensoft/cms/menu/service/Impl/MenuDgstfnServiceImpl.java
+++ src/main/java/com/takensoft/cms/menu/service/Impl/MenuDgstfnServiceImpl.java
@@ -15,7 +15,9 @@
 import com.takensoft.common.exception.CustomNotFoundException;
 import com.takensoft.common.exception.CustomUpdateFailException;
 import com.takensoft.common.idgen.service.IdgenService;
+import com.takensoft.common.util.HttpRequestUtil;
 import com.takensoft.common.util.JWTUtil;
+import jakarta.servlet.http.HttpServletRequest;
 import lombok.RequiredArgsConstructor;
 import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
 import org.springframework.cache.annotation.CacheEvict;
@@ -31,6 +33,7 @@
  * @modification
  *     since    |    author    | description
  *  2025.04.23  |    하석형     | 최초 등록
+ *  2025.04.23  |    하석형     | findMenuDgstfnByMenuId 추가
  *
  * EgovAbstractServiceImpl - 전자정부 프레임워크에서 제공하는 추상 서비스 구현 클래스
  * MenuDgstfnService - 메뉴별 만족도 서비스 인터페이스
@@ -44,6 +47,7 @@
     private final IdgenService menuDgstfnIdgn;
     private final MenuDgstfnDAO menuDgstfnDAO;
     private final JWTUtil jwtUtil;
+    private final HttpRequestUtil httpRequestUtil;
 
     /**
      * @param
@@ -88,6 +92,32 @@
 
     /**
      * @param menuDgstfnVO - 메뉴 만족도 정보
+     * @param req - HTTP 요청 객체
+     * @return MenuDgstfnVO - 메뉴별 만족도 정보
+     * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
+     *
+     * 메뉴별 만족도 상세 조회
+     */
+    @Override
+    public MenuDgstfnVO findMenuDgstfnByMenuId(MenuDgstfnVO menuDgstfnVO, HttpServletRequest req) {
+        try {
+            // 아이피 정보
+            String ipAdrs = httpRequestUtil.getIp(req);
+            menuDgstfnVO.setRegIp(ipAdrs);
+
+            MenuDgstfnVO result = menuDgstfnDAO.findMenuDgstfnByMenuId(menuDgstfnVO);
+            return result;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
+        }
+    }
+
+    /**
+     * @param menuDgstfnVO - 메뉴 만족도 정보
+     * @param req - HTTP 요청 객체
      * @return int - 등록 결과
      * @throws CustomInsertFailException - 등록 실패 예외 발생 시
      * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
@@ -97,9 +127,13 @@
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int saveMenuDgstfn(MenuDgstfnVO menuDgstfnVO) {
+    public int saveMenuDgstfn(MenuDgstfnVO menuDgstfnVO, HttpServletRequest req) {
         int result = 0;
         try {
+            // 아이피 정보
+            String ipAdrs = httpRequestUtil.getIp(req);
+            menuDgstfnVO.setRegIp(ipAdrs);
+
             // 메뉴별 만족도 아이디 생성
             String menuDgstfnId = menuDgstfnIdgn.getNextStringId();
             menuDgstfnVO.setMenuDgstfnId(menuDgstfnId);
src/main/java/com/takensoft/cms/menu/service/MenuDgstfnService.java
--- src/main/java/com/takensoft/cms/menu/service/MenuDgstfnService.java
+++ src/main/java/com/takensoft/cms/menu/service/MenuDgstfnService.java
@@ -2,6 +2,7 @@
 
 import com.takensoft.cms.author.vo.AuthorVO;
 import com.takensoft.cms.menu.vo.MenuDgstfnVO;
+import jakarta.servlet.http.HttpServletRequest;
 
 import java.util.HashMap;
 import java.util.List;
@@ -12,6 +13,7 @@
  * @modification
  *     since    |    author    | description
  *  2025.04.23  |    하석형     | 최초 등록
+ *  2025.04.23  |    하석형     | findMenuDgstfnByMenuId 추가
  *
  * 메뉴별 만족도 관련 인터페이스
  */
@@ -34,9 +36,19 @@
 
     /**
      * @param menuDgstfnVO - 메뉴 만족도 정보
+     * @param req - HTTP 요청 객체
+     * @return MenuDgstfnVO - 메뉴별 만족도 정보
+     *
+     * 메뉴별 만족도 상세 조회
+     */
+    MenuDgstfnVO findMenuDgstfnByMenuId(MenuDgstfnVO menuDgstfnVO, HttpServletRequest req);
+
+    /**
+     * @param menuDgstfnVO - 메뉴 만족도 정보
+     * @param req - HTTP 요청 객체
      * @return int - 등록 결과
      *
      * 메뉴별 만족도 등록
      */
-    int saveMenuDgstfn(MenuDgstfnVO menuDgstfnVO);
+    int saveMenuDgstfn(MenuDgstfnVO menuDgstfnVO, HttpServletRequest req);
 }
(파일 끝에 줄바꿈 문자 없음)
src/main/java/com/takensoft/cms/menu/web/MenuDgstfnController.java
--- src/main/java/com/takensoft/cms/menu/web/MenuDgstfnController.java
+++ src/main/java/com/takensoft/cms/menu/web/MenuDgstfnController.java
@@ -5,6 +5,7 @@
 import com.takensoft.cms.menu.vo.MenuDgstfnVO;
 import com.takensoft.common.message.MessageCode;
 import com.takensoft.common.util.ResponseUtil;
+import jakarta.servlet.http.HttpServletRequest;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
@@ -18,6 +19,7 @@
  * @modification
  *     since    |    author    | description
  *  2025.04.23  |    하석형     | 최초 등록
+ *  2025.04.23  |    하석형     | findByMenuId 추가
  *
  * 메뉴별 만족도 관련 Controller
  */
@@ -44,7 +46,7 @@
     }
 
     /**
-     * @param
+     * @param menuDgstfnVO - 메뉴별 만족도 정보
      * @return ResponseEntity - 메뉴별 만족도 목록 조회 결과를 포함하는 ResponseEntity
      *
      * 메뉴별 만족도 목록 조회
@@ -59,14 +61,29 @@
 
     /**
      * @param menuDgstfnVO - 메뉴별 만족도 정보
+     * @param req - HTTP 요청 객체
+     * @return ResponseEntity - 메뉴별 만족도 목록 조회 결과를 포함하는 ResponseEntity
+     *
+     * 메뉴별 만족도 상세 조회
+     */
+    @PostMapping(value = "/findByMenuId.json")
+    public ResponseEntity<?> findByMenuId(@RequestBody MenuDgstfnVO menuDgstfnVO, HttpServletRequest req) {
+        MenuDgstfnVO result = menuDgstfnService.findMenuDgstfnByMenuId(menuDgstfnVO, req);
+
+        // 응답 처리
+        return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
+    }
+
+    /**
+     * @param menuDgstfnVO - 메뉴별 만족도 정보
      * @return ResponseEntity - 메뉴별 만족도 등록 결과를 포함하는 ResponseEntity
      *
      * 메뉴별 만족도 등록
      */
     @PostMapping(value = "/saveProc.json")
-    public ResponseEntity<?> saveProc(@RequestBody MenuDgstfnVO menuDgstfnVO) {
+    public ResponseEntity<?> saveProc(@RequestBody MenuDgstfnVO menuDgstfnVO, HttpServletRequest req) {
         // 메뉴별 만족도 등록
-        int result = menuDgstfnService.saveMenuDgstfn(menuDgstfnVO);
+        int result = menuDgstfnService.saveMenuDgstfn(menuDgstfnVO, req);
 
         // 응답 처리
         return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
src/main/resources/mybatis/mapper/menu/menuDgstfn-SQL.xml
--- src/main/resources/mybatis/mapper/menu/menuDgstfn-SQL.xml
+++ src/main/resources/mybatis/mapper/menu/menuDgstfn-SQL.xml
@@ -10,6 +10,23 @@
     ========================================================================================================
 -->
 <mapper namespace="com.takensoft.cms.menu.dao.MenuDgstfnDAO">
+    <sql id="selectMenuDgstfn">
+        SELECT
+            md.menu_dgstfn_id
+            , md.menu_id
+            , md.rspns_five
+            , md.rspns_four
+            , md.rspns_three
+            , md.rspns_two
+            , md.rspns_one
+            , md.opnn
+            , md.reg_ip
+            , md.rgtr
+            , TO_CHAR(md.reg_dt, 'YYYY-MM-DD HH24:MI') AS reg_dt
+        FROM
+            menu_dgstfn md
+    </sql>
+
     <!--
         작 성 자 : 하석형
         작 성 일 : 2025.04.23
@@ -46,25 +63,31 @@
         내   용 : 메뉴별 만족도 목록 조회
     -->
     <select id="findAllMenuDgstfnByMenuId" parameterType="MenuDgstfnVO" resultType="MenuDgstfnVO">
-        SELECT
-            md.menu_dgstfn_id
-             , md.menu_id
-             , md.rspns_five
-             , md.rspns_four
-             , md.rspns_three
-             , md.rspns_two
-             , md.rspns_one
-             , md.opnn
-             , md.reg_ip
-             , md.rgtr
-             , TO_CHAR(md.reg_dt, 'YYYY-MM-DD HH24:MI') AS reg_dt
-        FROM
-            menu_dgstfn md
+        <include refid="selectMenuDgstfn" />
         WHERE
             1 = 1
         <if test ="menuId != null and menuId != ''">
             AND md.menu_id = #{menuId}
         </if>
+        ORDER BY
+            md.reg_dt DESC
+    </select>
+
+    <!--
+        작 성 자 : 하석형
+        작 성 일 : 2025.04.24
+        내   용 : 메뉴별 만족도 상세 조회
+    -->
+    <select id="findMenuDgstfnByMenuId" parameterType="MenuDgstfnVO" resultType="MenuDgstfnVO">
+        <include refid="selectMenuDgstfn" />
+        WHERE
+            1 = 1
+        <if test ="menuId != null and menuId != ''">
+            AND md.menu_id = #{menuId}
+        </if>
+        <if test ="regIp != null and regIp != ''">
+            AND md.reg_ip = #{regIp}
+        </if>
     </select>
 
     <!--
Add a comment
List