From d80ed7ad783b53e66ef1725698386e29ee97b85d Mon Sep 17 00:00:00 2001 From: t-eguchi <26-t-eguchi-tmn@it-college.co.jp> Date: Wed, 14 Oct 2026 15:04:07 +0900 Subject: [PATCH] =?UTF-8?q?3=E6=AE=B5=E9=9A=8E=E7=9B=AE=E7=B5=82=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/domain/service/UpdateDepartment.java | 8 + .../service/impl/UpdateDepartmentImpl.java | 32 ++++ .../UpdateDepartmentController.java | 155 +++++++++--------- .../UpdateDepartmentResultController.java | 116 +++++++++++++ .../PageReturnAttributeKeyword.java | 1 + .../TransitionTargetPageNameKeyword.java | 7 +- .../form/UpdateDepartmentInfoForm.java | 102 ++++++------ .../resources/templates/selectDepartment.html | 4 +- .../templates/updateDepartmentInput.html | 5 +- .../updatePersonalEmployeeResult.html | 48 +++--- 10 files changed, 321 insertions(+), 157 deletions(-) create mode 100644 src/main/java/com/example/rhizome/app/domain/service/UpdateDepartment.java create mode 100644 src/main/java/com/example/rhizome/app/domain/service/impl/UpdateDepartmentImpl.java create mode 100644 src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentResultController.java 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..b121809 --- /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 updateDepertment); + +} diff --git a/src/main/java/com/example/rhizome/app/domain/service/impl/UpdateDepartmentImpl.java b/src/main/java/com/example/rhizome/app/domain/service/impl/UpdateDepartmentImpl.java new file mode 100644 index 0000000..bbc02b3 --- /dev/null +++ b/src/main/java/com/example/rhizome/app/domain/service/impl/UpdateDepartmentImpl.java @@ -0,0 +1,32 @@ +package com.example.rhizome.app.domain.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.example.rhizome.app.domain.model.Department; +import com.example.rhizome.app.domain.service.UpdateDepartment; +import com.example.rhizome.app.infra.entity.DepartmentEntity; +import com.example.rhizome.app.infra.repository.DepartmentRepository; + +@Service +@Transactional +public class UpdateDepartmentImpl implements UpdateDepartment { + + DepartmentRepository departmentRepository; + + @Autowired + public UpdateDepartmentImpl(DepartmentRepository departmentRepository) { + this.departmentRepository = departmentRepository; + } + + public void updateDepartment(Department beforeDepartment, Department updateDepertment) { + departmentRepository.save(DepartmentEntity.convertFrom(mergeDepartment(beforeDepartment,updateDepertment))); + + } + + private Department mergeDepartment(Department beforeDepartment, Department updateDepartment) { + return new Department(updateDepartment.getIdDepartment(),updateDepartment.getNmDepartment()); + } + +} 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 index c4e6ae8..6a36e2f 100644 --- a/src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentController.java +++ b/src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentController.java @@ -1,73 +1,82 @@ -//package com.example.rhizome.app.presentation.controller; -// -//import java.util.List; -//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.SearchDepartmentInfo; -//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.DepartmentForm; -//import com.example.rhizome.app.presentation.form.MessageForm; -//import com.example.rhizome.app.presentation.form.SearchConditionDepartmentForm; -//import com.example.rhizome.app.presentation.form.UpdateEmployeeInfoForm; -// -//@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; -// -// @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) { -// final String UPDATE_TARGET_ID_NOT_FOUND = "更新対象のデータが見つかりません。"; -// -// try { -// -// model.addAttribute(PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, DepartmentForm.convertFrom(searchDepartment.selectAll())); -// -// List departmentInfoList = SearchDepartmentInfo.seachBy( -// new SearchConditionDepartment(idDepartment, -// null)); -// -// if (departmentInfoList.isEmpty()) { -// model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(UPDATE_TARGET_ID_NOT_FOUND)); -// return "forward:" + TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_INFO; -// -// model.addAttribute(PageReturnAttributeKeyword.UPDATE_DEPARTMENT_INFO_FORM, UpdateDepartmentInfoForm.convertFrom(departmentInfoList.get(0))); -// } -// } -// } -//} +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.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.UpdateDepartmentInfoForm; + +@Controller +public class UpdateDepartmentController { + + // ログ出力用インスタンス + private final static Logger LOGGER = Logger.getLogger(UpdateDepartmentController.class.getName()); + // エラーメッセージ用の定数フィールド + private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!"; + + private final HttpSession httpSession; + private final SearchDepartment searchDepartment; + + @Autowired + public UpdateDepartmentController(HttpSession httpSession, SearchDepartment searchDepartment) { + this.httpSession = httpSession; + this.searchDepartment = searchDepartment; + + } + + @ModelAttribute + public SearchConditionDepartmentForm searchConditionDepartmentForm() { + return new SearchConditionDepartmentForm(); + } + + @PermissionCheck + @SessionCheck + @RequestMapping(value = "/showUpdateDepartment", method = RequestMethod.POST) + public String showUpdateDepartment(@RequestParam("idDepartment") Integer idDepartment, Model model) { + final String UPDATE_TARGET_ID_NOT_FOUND = "更新対象のデータが見つかりません。"; + + try { + + List departmentInfoList = searchDepartment.searchBy( + new SearchConditionDepartment(idDepartment, null)); + + if (departmentInfoList == null || departmentInfoList.isEmpty()) { + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, + new MessageForm(UPDATE_TARGET_ID_NOT_FOUND)); + + return "forward:" + TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_INFO_FORM_EMPTY; + } + + model.addAttribute(PageReturnAttributeKeyword.UPDATE_DEPARTMENT_FORM, + UpdateDepartmentInfoForm.convertForm(departmentInfoList.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..90ffde3 --- /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.MessageForm; +import com.example.rhizome.app.presentation.form.SearchConditionDepartmentForm; +import com.example.rhizome.app.presentation.form.UpdateDepartmentInfoForm; + +@Controller +public class UpdateDepartmentResultController { + + // ログ出力用インスタンス + private final static Logger LOGGER = Logger.getLogger(UpdateDepartmentController.class.getName()); + // エラーメッセージ用の定数フィールド + private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!"; + + private final HttpSession httpSession; + private final SearchDepartment searchDepartment; + private final UpdateDepartment updateDepartment; + + @Autowired + public UpdateDepartmentResultController(HttpSession httpSession, SearchDepartment searchDepartment, + UpdateDepartment updateDepartment) { + this.httpSession = httpSession; + this.searchDepartment = searchDepartment; + this.updateDepartment = updateDepartment; + } + + @ModelAttribute + public SearchConditionDepartmentForm searchConditionDepartmentForm() { + return new SearchConditionDepartmentForm(); + } + + @PermissionCheck + @SessionCheck + @RequestMapping(value = "/updateDepartmentResult", method = RequestMethod.POST) + public String departmentUpdateResult( + @ModelAttribute("updateDepartmentInfoForm") UpdateDepartmentInfoForm updateDepartmentInfoForm, + Model model) { + + final String NOTHING = "項目が空欄です。"; + final String DUPLICATION = "既に同名の部署が存在するか、値が変更されていません。"; + final String NO_TARGET = "更新対象のデータが見つかりません。"; + final String UPDATE_COMPLETE = "更新が完了しました。"; + + try { + + // 必須入力チェック + if (UpdateDepartmentInfoForm.hasErrorParameter(updateDepartmentInfoForm)) { + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(NOTHING)); + return TransitionTargetPageNameKeyword.UPDATE_DEPARTMENT_INPUT_HTML; + } + + List beforeList = searchDepartment.searchBy( + new SearchConditionDepartment(updateDepartmentInfoForm.getIdDepartment(), null)); + + if (beforeList == null || beforeList.isEmpty()) { + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(NO_TARGET)); + return "forward:/selectDepartment"; + } + Department beforeDepartment = beforeList.get(0); + Department updateDepartmentData = UpdateDepartmentInfoForm.convertTo(updateDepartmentInfoForm); + + if (Objects.equals(beforeDepartment.getNmDepartment(), updateDepartmentData.getNmDepartment())) { + + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(DUPLICATION)); + return TransitionTargetPageNameKeyword.UPDATE_DEPARTMENT_INPUT_HTML; + } + + List duplicationList = searchDepartment.searchBy( + new SearchConditionDepartment(null, updateDepartmentData.getNmDepartment())); + + if (duplicationList != null && !duplicationList.isEmpty()) { + + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(DUPLICATION)); + model.addAttribute(PageReturnAttributeKeyword.UPDATE_DEPARTMENT_INFO_FORM, updateDepartmentInfoForm); + return TransitionTargetPageNameKeyword.UPDATE_DEPARTMENT_INPUT_HTML; + + } + + // 更新を実行 ➔ forward + updateDepartment.updateDepartment(beforeDepartment, updateDepartmentData); + + model.addAttribute(PageReturnAttributeKeyword.MESSAGE_INFO, new MessageForm(UPDATE_COMPLETE)); + return "forward:/selectDepartment"; + + } catch ( + + Exception e) { + httpSession.invalidate(); + e.printStackTrace(); + LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e); + return TransitionTargetPageNameKeyword.ERROR_HTML; + } + } +} \ No newline at end of file diff --git a/src/main/java/com/example/rhizome/app/presentation/controller/pageproperty/PageReturnAttributeKeyword.java b/src/main/java/com/example/rhizome/app/presentation/controller/pageproperty/PageReturnAttributeKeyword.java index 0d55527..4c302da 100644 --- a/src/main/java/com/example/rhizome/app/presentation/controller/pageproperty/PageReturnAttributeKeyword.java +++ b/src/main/java/com/example/rhizome/app/presentation/controller/pageproperty/PageReturnAttributeKeyword.java @@ -15,5 +15,6 @@ public class PageReturnAttributeKeyword { public static final String LOGIN_INFO_FORM = "loginInfoForm"; public static final String UPDATE_PERSONAL_EMPLOYEE_USER_FORM = "updatePersonalEmployeeUserForm"; public static final String EMPLOYEE_INFO_FORM_LIST = "employeeInfoFormList"; + public static final String UPDATE_DEPARTMENT_FORM = "updateDepartmentForm"; } 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 a109883..e3a9354 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 @@ -25,6 +25,7 @@ public class TransitionTargetPageNameKeyword { public static final String INSERT_EMPLOYEE_RESULT_HTML = "insertEmployeeResult"; public static final String INSERT_DEPARTMENT_RESULT_HTML = "insertDepartmentResult"; public static final String UPDATE_EMPLOYEE_INPUT_HTML = "updateEmployeeInput"; + public static final String UPDATE_DEPARTMENT_INPUT_HTML = "updateDepartmentInput"; public static final String ERROR_HTML = "error"; @@ -55,10 +56,11 @@ public class TransitionTargetPageNameKeyword { public static final String INSERT_DEPARTMENT_CONFIRM = "/insertDepartmentConfirm"; public static final String INSERT_DEPARTMENT = "/insertDepartment"; public static final String SELECT_DEPARTMENT_INFO = "/selectDepartment"; - public static final String SELECT_DEPARTMENT_INFO_FORM_EMPTY = "/selectAll"; public static final String SHOW_UPDATE_DEPARTMENT = "/showUpdateDepartment"; public static final String UPDATE_DEPARTMENT_RESULT = "/updateDepartmentResult"; - + public static final String SELECT_DEPARTMENT_INFO_FORM_EMPTY = "/selectDepartmentAll"; + + // HTML // Controller @@ -90,6 +92,7 @@ public class TransitionTargetPageNameKeyword { INSERT_DEPARTMENT, INSERT_DEPARTMENT_CONFIRM, SELECT_DEPARTMENT_INFO, + SELECT_DEPARTMENT_INFO_FORM_EMPTY, SHOW_UPDATE_DEPARTMENT, UPDATE_DEPARTMENT_RESULT ); diff --git a/src/main/java/com/example/rhizome/app/presentation/form/UpdateDepartmentInfoForm.java b/src/main/java/com/example/rhizome/app/presentation/form/UpdateDepartmentInfoForm.java index ec4192d..94ea94d 100644 --- a/src/main/java/com/example/rhizome/app/presentation/form/UpdateDepartmentInfoForm.java +++ b/src/main/java/com/example/rhizome/app/presentation/form/UpdateDepartmentInfoForm.java @@ -1,54 +1,48 @@ -//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 UpdateDepartmentInfoForm { -// -// private Integer idDepartment; -// -// private String nmDepartment; -// -// public static UpdateDepartmentInfoForm convertForm(Department department) { -// return new UpdateDepartmentInfoForm( -// department.getIdDepartment(), -// department.getNmDepartment()); -// -// } -// -// public static List convertForm(List departmentList) { -// return departmentList.stream().map(UpdateDepartmentInfoForm::convertFrom).toList(); -// } -// -// public static Department convertTo(UpdateDepartmentInfoForm updateDepartmentInfoForm) { -// return new Department( -// updateDepartmentInfoForm.getIdDepartment(), -// updateDepartmentInfoForm.getNmDepartment()); -// } -// -// public static boolean hasErrorParameter(UpdateDepartmentInfoForm updateDepartmentInfoForm) { -// -// boolean errorFlag = !isNullOrBlank(updateDepartmentInfoForm.getNmDepartment()); -// -// if (!isNullOrBlank(updateDepartmentInfoForm.getNmDepartment())) { -// errorFlag = true; -// } -// -// return errorFlag; -// } -// -// private static boolean isNullOrBlank(String str) { -// if (null == str) { -// return true; -// } -// return str.isBlank(); -// } -//} +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 UpdateDepartmentInfoForm { + + private Integer idDepartment; + + private String nmDepartment; + + public static UpdateDepartmentInfoForm convertForm(Department department) { + return new UpdateDepartmentInfoForm( + department.getIdDepartment(), + department.getNmDepartment()); + + } + + public static List convertForm(List departmentList) { + return departmentList.stream().map(UpdateDepartmentInfoForm::convertForm).toList(); + } + + public static Department convertTo(UpdateDepartmentInfoForm updateDepartmentInfoForm) { + return new Department( + updateDepartmentInfoForm.getIdDepartment(), + updateDepartmentInfoForm.getNmDepartment()); + } + + public static boolean hasErrorParameter(UpdateDepartmentInfoForm updateDepartmentInfoForm) { + + return isNullOrBlank(updateDepartmentInfoForm.getNmDepartment()); + } + + private static boolean isNullOrBlank(String str) { + if (null == str) { + return true; + } + return str.isBlank(); + } +} diff --git a/src/main/resources/templates/selectDepartment.html b/src/main/resources/templates/selectDepartment.html index 47aa19c..1924edf 100644 --- a/src/main/resources/templates/selectDepartment.html +++ b/src/main/resources/templates/selectDepartment.html @@ -78,8 +78,7 @@ -
- +
@@ -89,6 +88,7 @@ + diff --git a/src/main/resources/templates/updateDepartmentInput.html b/src/main/resources/templates/updateDepartmentInput.html index 1c241dd..e9b8382 100644 --- a/src/main/resources/templates/updateDepartmentInput.html +++ b/src/main/resources/templates/updateDepartmentInput.html @@ -15,7 +15,7 @@

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

@@ -49,13 +49,14 @@ + 一覧に戻る - - - - 更新完了 + + + + + + + 更新完了 -

更新が完了しました

-
-戻る +

更新が完了しました

+
+ 戻る \ No newline at end of file