From e140f668d3c1b171aa61a9848904cd3cf951f9cc Mon Sep 17 00:00:00 2001 From: h-seya <2026_04_00278@it-college.co.jp> Date: Thu, 10 Sep 2026 16:50:19 +0900 Subject: [PATCH] =?UTF-8?q?[EDIT]:=E7=AC=AC=E4=BA=8C=E6=AE=B5=E9=9A=8E(?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=E5=89=8A=E9=99=A4=E6=A9=9F=E8=83=BD)?= =?UTF-8?q?=E3=81=BE=E3=81=A7=E5=AE=9F=E8=A3=85=E5=AE=8C=E4=BA=86=E3=81=97?= =?UTF-8?q?=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aop/aspect/PermissionCheckAspect.java | 11 +-- .../service/impl/DeleteDepartmentImpl.java | 16 +++-- .../DeleteDepartmentController.java | 70 ++++++++++++++++++- .../SelectDepartmentController.java | 33 ++++----- .../controller/SelectEmployeeController.java | 2 + .../TransitionTargetPageNameKeyword.java | 7 +- src/main/resources/templates/menu.html | 8 +-- 7 files changed, 111 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/example/rhizome/aop/aspect/PermissionCheckAspect.java b/src/main/java/com/example/rhizome/aop/aspect/PermissionCheckAspect.java index ce416f9..ba5ec86 100644 --- a/src/main/java/com/example/rhizome/aop/aspect/PermissionCheckAspect.java +++ b/src/main/java/com/example/rhizome/aop/aspect/PermissionCheckAspect.java @@ -1,16 +1,17 @@ package com.example.rhizome.aop.aspect; -import com.example.rhizome.app.presentation.controller.pageproperty.SessionKeyword; -import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; -import com.example.rhizome.app.presentation.form.LoginUserForm; -import com.example.rhizome.exception.InsufficientPermissionException; +import javax.servlet.http.HttpServletRequest; + import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.servlet.http.HttpServletRequest; +import com.example.rhizome.app.presentation.controller.pageproperty.SessionKeyword; +import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; +import com.example.rhizome.app.presentation.form.LoginUserForm; +import com.example.rhizome.exception.InsufficientPermissionException; /** * 権限チェック用のAOP diff --git a/src/main/java/com/example/rhizome/app/domain/service/impl/DeleteDepartmentImpl.java b/src/main/java/com/example/rhizome/app/domain/service/impl/DeleteDepartmentImpl.java index b7709a3..429638c 100644 --- a/src/main/java/com/example/rhizome/app/domain/service/impl/DeleteDepartmentImpl.java +++ b/src/main/java/com/example/rhizome/app/domain/service/impl/DeleteDepartmentImpl.java @@ -9,16 +9,18 @@ import com.example.rhizome.app.infra.repository.DepartmentRepository; @Service @Transactional -public class DeleteDepartmentImpl implements DeleteDepartment{ - +public class DeleteDepartmentImpl implements DeleteDepartment { + DepartmentRepository departmentRepository; - + @Autowired - public DeleteDepartmentImpl() { - - - + public DeleteDepartmentImpl(DepartmentRepository departmentRepository) { + this.departmentRepository = departmentRepository; } + + public void deleteDepartment(Integer idDepartment) { + departmentRepository.deleteById(idDepartment); + } } diff --git a/src/main/java/com/example/rhizome/app/presentation/controller/DeleteDepartmentController.java b/src/main/java/com/example/rhizome/app/presentation/controller/DeleteDepartmentController.java index 71f8b0d..da6a4f0 100644 --- a/src/main/java/com/example/rhizome/app/presentation/controller/DeleteDepartmentController.java +++ b/src/main/java/com/example/rhizome/app/presentation/controller/DeleteDepartmentController.java @@ -1,10 +1,76 @@ package com.example.rhizome.app.presentation.controller; +import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.*; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import javax.servlet.http.HttpSession; + import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +import com.example.rhizome.aop.aspect.PermissionCheck; +import com.example.rhizome.aop.aspect.SessionCheck; +import com.example.rhizome.app.domain.model.LoginUser; +import com.example.rhizome.app.domain.service.DeleteDepartment; +import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword; +import com.example.rhizome.app.presentation.controller.pageproperty.SessionKeyword; +import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; +import com.example.rhizome.app.presentation.form.LoginUserForm; +import com.example.rhizome.app.presentation.form.MessageForm; @Controller public class DeleteDepartmentController { - - + private final static Logger LOGGER = Logger.getLogger(DeleteDepartmentController.class.getName()); + + private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!"; + + HttpSession httpSession; + DeleteDepartment deleteDepartment; + + public DeleteDepartmentController(DeleteDepartment deleteDepartment, HttpSession httpSession) { + this.httpSession = httpSession; + this.deleteDepartment = deleteDepartment; + } + + @PermissionCheck + @SessionCheck + @RequestMapping(value = DELETE_DEPARTMENT, method = RequestMethod.POST) + public String deleteDepartment(@RequestParam("idDepartment") Integer idDepartment, Model model) { + + try { + + deleteExec( + model, + idDepartment, + LoginUserForm.convertTo((LoginUserForm) httpSession.getAttribute(SessionKeyword.LOGIN_USER))); + + return "forward:" + TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_FORM_EMPTY; + + } catch (Exception e) { + // ログイン情報の破棄 + httpSession.invalidate(); + + e.printStackTrace(); + // エラーログ出力 + LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e); + // エラー画面遷移 + return TransitionTargetPageNameKeyword.ERROR_HTML; + } + } + + private void deleteExec(Model model, Integer idDepartment, LoginUser loginUser) { + + final String DELETE_COMPLETE = "削除しました。"; + + deleteDepartment.deleteDepartment(idDepartment); + + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_INFO, new MessageForm(DELETE_COMPLETE)); + + } } diff --git a/src/main/java/com/example/rhizome/app/presentation/controller/SelectDepartmentController.java b/src/main/java/com/example/rhizome/app/presentation/controller/SelectDepartmentController.java index 255df05..ef3091a 100644 --- a/src/main/java/com/example/rhizome/app/presentation/controller/SelectDepartmentController.java +++ b/src/main/java/com/example/rhizome/app/presentation/controller/SelectDepartmentController.java @@ -80,20 +80,21 @@ public class SelectDepartmentController { } } -// @PermissionCheck -// @SessionCheck -// @RequestMapping(value = TransitionTargetPageNameKeyword.SELECT_DEPARTMENT, -// method = RequestMethod.POST) -// public String select(Model model) { -// -// // 検索条件を元に検索を実施 -// model.addAttribute(PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, -// DepartmentForm.convertFrom( -// searchDepartment.searchBy( -// SearchConditionDepartmentForm.convertTo( -// searchConditionDepartmentForm())))); -// -// // 検索ページに遷移 -// return TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_HTML; -// } + // 管理者メニューから部署検索画面へ遷移する際に使用する + @PermissionCheck + @SessionCheck + @RequestMapping(value = TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_FORM_EMPTY, + method = RequestMethod.POST) + public String select(Model model) { + + // 検索条件を元に検索を実施 + model.addAttribute(PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, + DepartmentForm.convertFrom( + searchDepartment.searchBy( + SearchConditionDepartmentForm.convertTo( + searchConditionDepartmentForm())))); + + // 検索ページに遷移 + return TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_HTML; + } } diff --git a/src/main/java/com/example/rhizome/app/presentation/controller/SelectEmployeeController.java b/src/main/java/com/example/rhizome/app/presentation/controller/SelectEmployeeController.java index 06257e3..a4eb106 100644 --- a/src/main/java/com/example/rhizome/app/presentation/controller/SelectEmployeeController.java +++ b/src/main/java/com/example/rhizome/app/presentation/controller/SelectEmployeeController.java @@ -30,6 +30,7 @@ public class SelectEmployeeController { // ログ出力用インスタンス private final static Logger LOGGER = Logger.getLogger(SelectEmployeeController.class.getName()); + // エラーメッセージ用の定数フィールド private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!"; @@ -51,6 +52,7 @@ public class SelectEmployeeController { /** * 社員検索画面表示処理コントローラ + * 管理者メニューから社員検索画面へ遷移する際に使用する * * @param searchConditionEmployeeForm 検索画面のフォーム * @param model ビューにデータを渡すためのコンテナ diff --git a/src/main/java/com/example/rhizome/app/presentation/controller/pageproperty/TransitionTargetPageNameKeyword.java b/src/main/java/com/example/rhizome/app/presentation/controller/pageproperty/TransitionTargetPageNameKeyword.java index 6b1d539..753d864 100644 --- a/src/main/java/com/example/rhizome/app/presentation/controller/pageproperty/TransitionTargetPageNameKeyword.java +++ b/src/main/java/com/example/rhizome/app/presentation/controller/pageproperty/TransitionTargetPageNameKeyword.java @@ -51,7 +51,7 @@ public class TransitionTargetPageNameKeyword { public static final String INSERT_EMPLOYEE_CONFIRM = "/insertEmployeeConfirm"; public static final String INSERT_EMPLOYEE = "/insertEmployee"; public static final String SELECT_EMPLOYEE_INFO = "/selectEmployeeInfo"; - public static final String SELECT_EMPLOYEE_INFO_FORM_EMPTY = "/selectAll"; + public static final String SELECT_EMPLOYEE_INFO_FORM_EMPTY = "/employeeSelectAll"; public static final String SHOW_UPDATE_EMPLOYEE = "/showUpdateEmployee"; public static final String UPDATE_EMPLOYEE_RESULT = "/updateEmployeeResult"; @@ -61,6 +61,7 @@ public class TransitionTargetPageNameKeyword { public static final String INSERT_DEPARTMENT_CONFIRM = "/insertDepartmentConfirm"; public static final String INSERT_DEPARTMENT = "/insertDepartment"; public static final String SELECT_DEPARTMENT = "/selectDepartment"; + public static final String SELECT_DEPARTMENT_FORM_EMPTY = "/departmentSelectAll"; public static final String SHOW_UPDATE_DEPARTMENT = "/showUpdateDepartment"; public static final String UPDATE_DEPARTMENT_RESULT = "/updateDepartmentResult"; @@ -90,7 +91,9 @@ public class TransitionTargetPageNameKeyword { SHOW_UPDATE_EMPLOYEE, UPDATE_EMPLOYEE_RESULT, SELECT_DEPARTMENT, - INSERT_DEPARTMENT_INPUT + INSERT_DEPARTMENT_INPUT, + SELECT_DEPARTMENT_FORM_EMPTY, + DELETE_DEPARTMENT ); } diff --git a/src/main/resources/templates/menu.html b/src/main/resources/templates/menu.html index f174f78..c6497a1 100644 --- a/src/main/resources/templates/menu.html +++ b/src/main/resources/templates/menu.html @@ -57,13 +57,13 @@ function selectEmployeeSubmit() { const form = document.createElement('form'); form.setAttribute('method', 'post'); - form.setAttribute('action', 'selectEmployeeInfo'); + form.setAttribute('action', 'employeeSelectAll'); // 動的送信用のHidden // 動的にFormを作成する場合は何かしら送信しないと、正しく動作しない const inputField = document.createElement("input"); inputField.setAttribute("type", "hidden"); - inputField.setAttribute("value", "selectEmployeeInfo"); + inputField.setAttribute("value", "employeeSelectAll"); form.appendChild(inputField); @@ -77,13 +77,13 @@ function selectDepartmentSubmit() { const form = document.createElement('form'); form.setAttribute('method', 'post'); - form.setAttribute('action', 'selectDepartment'); + form.setAttribute('action', 'departmentSelectAll'); // 動的送信用のHidden // 動的にFormを作成する場合は何かしら送信しないと、正しく動作しない const inputField = document.createElement("input"); inputField.setAttribute("type", "hidden"); - inputField.setAttribute("value", "selectDepartment"); + inputField.setAttribute("value", "departmentSelectAll"); form.appendChild(inputField);