From 6a60c5a85f15671e9cd1a9653ee61bb3f3fb79ca Mon Sep 17 00:00:00 2001 From: s-choi Date: Thu, 10 Sep 2026 16:05:05 +0900 Subject: [PATCH] =?UTF-8?q?[ADD]=20=E9=83=A8=E7=BD=B2=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=E3=81=AE=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/domain/service/UpdateDepartment.java | 8 ++ .../UpdateDepartmentController.java | 83 +++++++++++++ .../UpdateDepartmentResultController.java | 116 ++++++++++++++++++ .../form/UpdateDepartmentForm.java | 53 ++++++++ .../templates/updateDepartmentInput.html | 83 +++++++++++++ .../updatePersonalDepartmentResult.html | 37 ++++++ 6 files changed, 380 insertions(+) create mode 100644 src/main/java/com/example/rhizome/app/domain/service/UpdateDepartment.java create mode 100644 src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentController.java create mode 100644 src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentResultController.java create mode 100644 src/main/java/com/example/rhizome/app/presentation/form/UpdateDepartmentForm.java create mode 100644 src/main/resources/templates/updateDepartmentInput.html create mode 100644 src/main/resources/templates/updatePersonalDepartmentResult.html diff --git a/src/main/java/com/example/rhizome/app/domain/service/UpdateDepartment.java b/src/main/java/com/example/rhizome/app/domain/service/UpdateDepartment.java new file mode 100644 index 0000000..c775568 --- /dev/null +++ b/src/main/java/com/example/rhizome/app/domain/service/UpdateDepartment.java @@ -0,0 +1,8 @@ +package com.example.rhizome.app.domain.service; + +import com.example.rhizome.app.domain.model.Department; + +public interface UpdateDepartment { + void updateDepartment(Department beforeDepartment, Department updateDepartment); + +} diff --git a/src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentController.java b/src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentController.java new file mode 100644 index 0000000..256cb27 --- /dev/null +++ b/src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentController.java @@ -0,0 +1,83 @@ +package com.example.rhizome.app.presentation.controller; + +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.ModelAttribute; +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.Department; +import com.example.rhizome.app.domain.model.SearchConditionDepartment; +import com.example.rhizome.app.domain.service.SearchDepartment; +import com.example.rhizome.app.domain.service.SearchEmployeeInfo; +import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword; +import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; +import com.example.rhizome.app.presentation.form.MessageForm; +import com.example.rhizome.app.presentation.form.SearchConditionDepartmentForm; +import com.example.rhizome.app.presentation.form.UpdateDepartmentForm; + +@Controller +public class UpdateDepartmentController { + + private final static Logger LOGGER = Logger.getLogger(UpdateDepartmentController.class.getName()); + private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!"; + + HttpSession httpSession; + SearchDepartment searchDepartment; + SearchEmployeeInfo searchEmployeeInfo; + + @Autowired + public UpdateDepartmentController(HttpSession httpSession, SearchDepartment searchDepartment) { + this.httpSession = httpSession; + this.searchDepartment = searchDepartment; + } + + @ModelAttribute + public SearchConditionDepartmentForm searchConditionDepartmentForm() { + return new SearchConditionDepartmentForm(); + } + + @PermissionCheck + @SessionCheck + @RequestMapping(value = TransitionTargetPageNameKeyword.SHOW_UPDATE_DEPARTMENT, method = RequestMethod.POST) + public String showUpdateDepartment(@RequestParam("idDepartment") Integer idDepartment, Model model) { + LOGGER.info("showUpdateDepartment 실행"); + final String NO_TARGET = "更新対象のデータが見つかりません。"; + + try { + + List departmentList = searchDepartment.searchByDepartmentId( + new SearchConditionDepartment(idDepartment, + null)); + + if (departmentList.isEmpty()) { + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(NO_TARGET)); + return "forward:" + TransitionTargetPageNameKeyword.SELECT_DEPARTMENT; + } + + model.addAttribute(PageReturnAttributeKeyword.UPDATE_DEPARTMENT_FORM, + UpdateDepartmentForm.convertFrom(departmentList.get(0))); + + return TransitionTargetPageNameKeyword.UPDATE_DEPARTMENT_INPUT_HTML; + + } catch (Exception e) { + httpSession.invalidate(); + + e.printStackTrace(); + + LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e); + return TransitionTargetPageNameKeyword.ERROR_HTML; + + } + } +} diff --git a/src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentResultController.java b/src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentResultController.java new file mode 100644 index 0000000..089cbea --- /dev/null +++ b/src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentResultController.java @@ -0,0 +1,116 @@ +package com.example.rhizome.app.presentation.controller; + +import java.util.List; +import java.util.Objects; +import java.util.logging.Level; +import java.util.logging.Logger; + +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import com.example.rhizome.aop.aspect.PermissionCheck; +import com.example.rhizome.aop.aspect.SessionCheck; +import com.example.rhizome.app.domain.model.Department; +import com.example.rhizome.app.domain.model.SearchConditionDepartment; +import com.example.rhizome.app.domain.service.SearchDepartment; +import com.example.rhizome.app.domain.service.UpdateDepartment; +import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword; +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; +import com.example.rhizome.app.presentation.form.UpdateDepartmentForm; +import com.example.rhizome.app.presentation.form.UpdateEmployeeInfoForm; + +@Controller +public class UpdateDepartmentResultController { + + private final static Logger LOGGER = Logger.getLogger(UpdateEmployeeController.class.getName()); + private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!"; + + HttpSession httpSession; + SearchDepartment searchDepartment; + UpdateDepartment updateDepartment; + + @Autowired + public UpdateDepartmentResultController(HttpSession httpSession, SearchDepartment searchDepartment, + UpdateDepartment updateDepartment) { + this.httpSession = httpSession; + this.searchDepartment = searchDepartment; + this.updateDepartment = updateDepartment; + } + + private static boolean checkDuplicateDepartmentName(List departmentList, + UpdateDepartmentForm updateDepartmentForm) { + if (!departmentList.isEmpty()) { + return Objects.equals(departmentList.get(0).getNmDepartment(), updateDepartmentForm.getNmDepartment()); + } + return true; + } + + @PermissionCheck + @SessionCheck + @RequestMapping(value = TransitionTargetPageNameKeyword.UPDATE_DEPARTMENT_RESULT, method = RequestMethod.POST) + public String departmentUpdateResult(@ModelAttribute UpdateDepartmentForm updateDepartmentForm, Model model) { + + final String DUPLICATION = "既に同名の部署が存在するか、値が変更されていません。"; + final String NOTHING = "項目が空欄です。"; + + final String UPDATE_COMPLETE = "更新が完了しました。"; + + try { + + List departmentList = searchDepartment + .searchByDepartmentId(new SearchConditionDepartment(updateDepartmentForm.getIdDepartment(), null)); + + if (checkDuplicateDepartmentName(departmentList, updateDepartmentForm)) { + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(DUPLICATION)); + model.addAttribute(PageReturnAttributeKeyword.UPDATE_DEPARTMENT_FORM, updateDepartmentForm); + + return TransitionTargetPageNameKeyword.UPDATE_DEPARTMENT_INPUT_HTML; + } + + if (!UpdateDepartmentForm.hasErrorParameter(updateDepartmentForm)) { + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(NOTHING)); + model.addAttribute(PageReturnAttributeKeyword.UPDATE_DEPARTMENT_FORM, updateDepartmentForm); + + return TransitionTargetPageNameKeyword.UPDATE_DEPARTMENT_INPUT_HTML; + } + + List beforeDepartment = searchDepartment + .searchByDepartmentId(new SearchConditionDepartment(updateDepartmentForm.getIdDepartment(), null)); + + updateDepartment.updateDepartment(beforeDepartment.get(0), + UpdateDepartmentForm.convertTo(updateDepartmentForm)); + + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_INFO, new MessageForm(UPDATE_COMPLETE)); + + return "forward:" + TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_INFO_FORM_EMPTY; + + } catch (Exception e) { + httpSession.invalidate(); + + e.printStackTrace(); + LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e); + return TransitionTargetPageNameKeyword.ERROR_HTML; + } + + } + + private boolean isUpdateTargetLoginUserAdminToNormal(UpdateEmployeeInfoForm updateEmployeeInfoForm, + LoginUserForm loginUserForm) { + + if (!Objects.equals(updateEmployeeInfoForm.getIdEmployee(), loginUserForm.getIdEmployee())) { + return false; + } + + return updateEmployeeInfoForm.getAdminAuth().equals(0); + + } + +} diff --git a/src/main/java/com/example/rhizome/app/presentation/form/UpdateDepartmentForm.java b/src/main/java/com/example/rhizome/app/presentation/form/UpdateDepartmentForm.java new file mode 100644 index 0000000..6930536 --- /dev/null +++ b/src/main/java/com/example/rhizome/app/presentation/form/UpdateDepartmentForm.java @@ -0,0 +1,53 @@ +package com.example.rhizome.app.presentation.form; + +import java.util.List; + +import com.example.rhizome.app.domain.model.Department; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UpdateDepartmentForm { + + private Integer idDepartment; + private String nmDepartment; + + public static UpdateDepartmentForm convertFrom(Department department) { + return new UpdateDepartmentForm( + department.getIdDepartment(), + department.getNmDepartment()); + } + + public static List convertFrom(List departmentList) { + return departmentList.stream().map(UpdateDepartmentForm::convertFrom).toList(); + } + + public static Department convertTo(UpdateDepartmentForm updateDepartmentForm) { + return new Department( + updateDepartmentForm.getIdDepartment(), + updateDepartmentForm.getNmDepartment()); + } + + public static boolean hasErrorParameter(UpdateDepartmentForm updateDepartmentForm) { + + boolean errorFlag = !isNullOrBlank(updateDepartmentForm.getNmDepartment()); + + if (!isNullOrBlank(updateDepartmentForm.getNmDepartment())) { + errorFlag = true; + } + + return errorFlag; + } + + private static boolean isNullOrBlank(String str) { + if (null == str) { + return true; + } + return str.isBlank(); + } + +} diff --git a/src/main/resources/templates/updateDepartmentInput.html b/src/main/resources/templates/updateDepartmentInput.html new file mode 100644 index 0000000..b53fb17 --- /dev/null +++ b/src/main/resources/templates/updateDepartmentInput.html @@ -0,0 +1,83 @@ + + + + + + + + + + 部署情報更新 + + + +

+ 部署情報更新    +
+ ログイン者名: + +
+

+
+
+ +
+ + + + + + + + + + + + +
部署ID + +
部署名 + +
+ +
+
+一覧に戻る + + + + \ No newline at end of file diff --git a/src/main/resources/templates/updatePersonalDepartmentResult.html b/src/main/resources/templates/updatePersonalDepartmentResult.html new file mode 100644 index 0000000..41e9221 --- /dev/null +++ b/src/main/resources/templates/updatePersonalDepartmentResult.html @@ -0,0 +1,37 @@ + + + + + + + + + + 更新完了 + + + +

更新が完了しました

+
+戻る + + + + + \ No newline at end of file