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