2段階目終了
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
package com.example.rhizome.app.domain.service;
|
||||||
|
|
||||||
|
public interface DeleteDepartment {
|
||||||
|
void deleteDepartment(Integer idDepartment);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
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.service.DeleteDepartment;
|
||||||
|
import com.example.rhizome.app.infra.repository.DepartmentRepository;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
@Transactional
|
||||||
|
public class DeleteDepartmentImpl implements DeleteDepartment {
|
||||||
|
|
||||||
|
DepartmentRepository departmentRepository;
|
||||||
|
@Autowired
|
||||||
|
public DeleteDepartmentImpl(DepartmentRepository departmentRepository) {
|
||||||
|
this.departmentRepository = departmentRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void deleteDepartment(Integer idDepartment) {
|
||||||
|
departmentRepository.deleteById(idDepartment);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,127 @@
|
|||||||
|
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.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.EmployeeInfo;
|
||||||
|
import com.example.rhizome.app.domain.model.LoginUser;
|
||||||
|
import com.example.rhizome.app.domain.model.SearchConditionEmployee;
|
||||||
|
import com.example.rhizome.app.domain.service.DeleteDepartment;
|
||||||
|
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.SessionKeyword;
|
||||||
|
import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword;
|
||||||
|
import com.example.rhizome.app.presentation.form.DepartmentForm;
|
||||||
|
import com.example.rhizome.app.presentation.form.LoginUserForm;
|
||||||
|
import com.example.rhizome.app.presentation.form.MessageForm;
|
||||||
|
import com.example.rhizome.app.presentation.form.SearchConditionDepartmentForm;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
public class DeleteDepartmentController {
|
||||||
|
|
||||||
|
private final static Logger LOGGER = Logger.getLogger(DeleteDepartmentController.class.getName());
|
||||||
|
private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!";
|
||||||
|
|
||||||
|
private final HttpSession httpSession;
|
||||||
|
private final DeleteDepartment deleteDepartment;
|
||||||
|
private final SearchDepartment searchDepartment;
|
||||||
|
private final SearchEmployeeInfo searchEmployeeInfo;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public DeleteDepartmentController(DeleteDepartment deleteDepartment, SearchDepartment searchDepartment,
|
||||||
|
SearchEmployeeInfo searchEmployeeInfo, HttpSession httpSession) {
|
||||||
|
this.httpSession = httpSession;
|
||||||
|
this.deleteDepartment = deleteDepartment;
|
||||||
|
this.searchDepartment = searchDepartment;
|
||||||
|
this.searchEmployeeInfo = searchEmployeeInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
@PermissionCheck
|
||||||
|
@SessionCheck
|
||||||
|
@RequestMapping(value = "/deleteDepartment", method = RequestMethod.POST)
|
||||||
|
public String deleteDepartment(@RequestParam(value = "idDepartment", required = false) Integer idDepartment,
|
||||||
|
Model model) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 削除対象の部署IDが存在しない場合
|
||||||
|
if (idDepartment == null) {
|
||||||
|
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm("削除対象のIDが不明です。"));
|
||||||
|
model.addAttribute(PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST,
|
||||||
|
DepartmentForm.convertFrom(searchDepartment.selectAll()));
|
||||||
|
return TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_HTML;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ログインユーザー情報を取得
|
||||||
|
LoginUser loginUser = LoginUserForm
|
||||||
|
.convertTo((LoginUserForm) httpSession.getAttribute(SessionKeyword.LOGIN_USER));
|
||||||
|
|
||||||
|
// 削除バリデーションと削除の実行
|
||||||
|
deleteExec(model, idDepartment, loginUser);
|
||||||
|
|
||||||
|
// 最新の部署一覧を再取得してセット
|
||||||
|
model.addAttribute(
|
||||||
|
PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST,
|
||||||
|
DepartmentForm.convertFrom(searchDepartment.selectAll()));
|
||||||
|
|
||||||
|
model.addAttribute("searchConditionDepartmentForm", new SearchConditionDepartmentForm());
|
||||||
|
|
||||||
|
return TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_HTML;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
httpSession.invalidate();
|
||||||
|
e.printStackTrace();
|
||||||
|
LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e);
|
||||||
|
return TransitionTargetPageNameKeyword.ERROR_HTML;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean deleteExec(Model model, Integer idDepartment, LoginUser loginUser) {
|
||||||
|
final String DELETE_TARGET_ID_CAN_NOT_DELETE = "ログイン者自身は削除出来ません。";
|
||||||
|
final String BELONG_EMPLOYEE_EXIST_ERROR = "1名以上が所属している部署は削除出来ません。";
|
||||||
|
final String DELETE_COMPLETE = "削除しました。";
|
||||||
|
|
||||||
|
// ログイン者自身の部署削除ブロック
|
||||||
|
if (loginUser != null && Objects.equals(loginUser.getIdDepartment(), idDepartment)) {
|
||||||
|
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR,
|
||||||
|
new MessageForm(DELETE_TARGET_ID_CAN_NOT_DELETE));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchConditionEmployee searchCondition = new SearchConditionEmployee(
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
idDepartment);
|
||||||
|
|
||||||
|
// 社員検索サービスを呼び出す
|
||||||
|
List<EmployeeInfo> employeeList = searchEmployeeInfo.searchBy(searchCondition);
|
||||||
|
|
||||||
|
// 1件以上レコードが返ってきた(所属社員がいた)場合は削除を中断
|
||||||
|
if (employeeList != null && !employeeList.isEmpty()) {
|
||||||
|
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(BELONG_EMPLOYEE_EXIST_ERROR));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// すべてのバリデーションチェックを通過したら削除を実施
|
||||||
|
deleteDepartment.deleteDepartment(idDepartment);
|
||||||
|
|
||||||
|
// 削除完了メッセージをセット(画面側のアラートボックスと連動)
|
||||||
|
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_INFO, new MessageForm(DELETE_COMPLETE));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user