2 Commits

115 changed files with 2966 additions and 6737 deletions

View File

@@ -1,20 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<!-- 外部のスクリプトファイルを読み込む -->
<script th:src="@{/js/common.js}"></script>
<!-- CSSの読み込み -->
<link rel="stylesheet" th:href="@{/css/all.css}">
<link rel=stylesheet th:href="@{/css/style.css}" type="text/css">
<title>エラー</title>
</head>
<body>
<h1>エラーが発生しました。</h1>
<div>ログインからやり直してください。</div>
<a href="login">ログイン</a>
</body>
</html>

View File

@@ -1,86 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<!-- 外部のスクリプトファイルを読み込む -->
<script th:src="@{/js/common.js}"></script>
<!-- CSSの読み込み -->
<link rel="stylesheet" th:href="@{/css/all.css}">
<link rel=stylesheet th:href="@{/css/style.css}" type="text/css">
<title>登録内容確認</title>
</head>
<body>
<h1>登録内容確認   
<div class="rightSection">
<span class="loginInfo">ログイン者名:<span th:text="${session.loginUser.nmEmployee}"></span></span>
<button class="logoutButton" onclick="logoutSubmit()">ログアウト</button>
</div>
</h1>
<form action="insertDepartment"
id="insertForm"
method="post"
th:object="${insertDepartmentForm}">
<div class="msgBox error" th:if="${messageError != null}">
<span class="error" th:each="message : ${messageError.message}" th:text="${message}"></span>
</div>
<table>
<tr>
<th class="header">部署ID</th>
<td>
<label>
<input class="readOnly"
readonly="readonly"
type="text"
value="自動で設定されます"/>
</label>
</td>
</tr>
<tr>
<th class="header">部署名</th>
<td>
<label>
<input class="readOnly"
name="nmDepartment"
readonly="readonly"
th:value="*{nmDepartment}"
type="text"/>
</label>
</td>
</tr>
<tr>
<td class="btnArea" colspan="2">
<input type="submit" value="登録"/>
</td>
</tr>
</table>
<a href="javascript:onClickEdit()">登録内容の編集</a> | <a href="showMenu">メニューに戻る</a>
</form>
<script type="text/javascript">
function onClickEdit() {
const form = document.getElementById('insertForm');
form.setAttribute('method', 'post');
form.setAttribute('action', 'insertDepartmentInput');
// 確認画面から編集画面に戻ってきたときのフラグ(未使用)
const inputField = document.createElement("input");
inputField.setAttribute("type", "hidden");
inputField.setAttribute("name", "backFlg");
inputField.setAttribute("value", "edit");
form.appendChild(inputField);
// フォームをDOMに追加
document.body.appendChild(form);
form.submit();
}
</script>
</body>
</html>

View File

@@ -1,66 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<!-- 外部のスクリプトファイルを読み込む -->
<script th:src="@{/js/common.js}"></script>
<!-- CSSの読み込み -->
<link rel="stylesheet" th:href="@{/css/all.css}">
<link rel=stylesheet th:href="@{/css/style.css}" type="text/css">
<title>部署登録</title>
</head>
<body>
<h1>
部署登録   
<div class="rightSection">
<span class="loginInfo">ログイン者名:<span th:text="${session.loginUser.nmEmployee}"></span></span>
<button class="logoutButton" onclick="logoutSubmit()">ログアウト</button>
</div>
</h1>
<form action="insertDepartmentConfirm"
method="post"
th:object="${insertDepartmentForm}">
<div class="msgBox error" th:if="${messageError} != null">
<span class="error" th:text="${messageError.message}"></span>
</div>
<table>
<tr>
<th class="header">部署ID</th>
<td>
<label>
<input class="readOnly"
readonly="readonly"
type="text"
value="自動で設定されます"
/>
</label>
</td>
</tr>
<tr>
<th class="header">部署名</th>
<td>
<label>
<input maxlength="50"
placeholder="部署名"
required="required"
th:field="*{nmDepartment}"
type="text"
/>
</label>
</td>
</tr>
<tr>
<td class="btnArea" colspan="2">
<input type="submit" value="登録確認"/>
</td>
</tr>
</table>
</form>
<a href="showMenu">メニューに戻る</a>
</body>
</html>

View File

@@ -1,40 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<!-- 外部のスクリプトファイルを読み込む -->
<script th:src="@{/js/common.js}"></script>
<!-- CSSの読み込み -->
<link rel="stylesheet" th:href="@{/css/all.css}">
<link rel=stylesheet th:href="@{/css/style.css}" type="text/css">
<title>部署登録完了</title>
</head>
<body>
<h2>部署登録が完了しました</h2>
<br/>
<a href="javascript:insertSubmit()">続けて登録する</a> | <a href="showMenu">メニューに戻る</a>
</body>
<script type="text/javascript">
function insertSubmit() {
const form = document.createElement('form');
form.setAttribute('method', 'post');
form.setAttribute('action', 'insertDepartmentInput');
// 動的送信用のHidden
// 動的にFormを作成する場合は何かしら送信しないと、正しく動作しない
const inputField = document.createElement("input");
inputField.setAttribute("type", "hidden");
inputField.setAttribute("value", "select");
form.appendChild(inputField);
// フォームをDOMに追加
document.body.appendChild(form);
form.submit();
}
</script>
</html>

View File

@@ -1,157 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<!-- 外部のスクリプトファイルを読み込む -->
<script th:src="@{/js/common.js}"></script>
<!-- CSSの読み込み -->
<link rel="stylesheet" th:href="@{/css/all.css}">
<link rel=stylesheet th:href="@{/css/style.css}" type="text/css">
<title>登録内容確認</title>
</head>
<body>
<h1>登録内容確認   
<div class="rightSection">
<span class="loginInfo">ログイン者名:<span th:text="${session.loginUser.nmEmployee}"></span></span>
<button class="logoutButton" onclick="logoutSubmit()">ログアウト</button>
</div>
</h1>
<form action="insertEmployee"
id="insertForm"
method="post"
th:object="${insertEmployeeForm}">
<div class="msgBox error" th:if="${messageError != null}">
<span class="error" th:each="message : ${messageError.message}" th:text="${message}"></span>
</div>
<table>
<tr>
<th class="header">社員ID</th>
<td>
<label>
<input class="readOnly"
name="empId"
readonly="readonly"
type="text"
value="自動で設定されます"/>
</label>
</td>
</tr>
<tr>
<th class="header">社員名</th>
<td>
<label>
<input class="readOnly"
name="nmEmployee"
readonly="readonly"
th:value="*{nmEmployee}"
type="text"/>
</label>
</td>
</tr>
<tr>
<th class="header">社員名フリガナ</th>
<td>
<label>
<input class="readOnly"
name="knEmployee"
readonly="readonly"
th:value="*{knEmployee}"
type="text"/>
</label>
</td>
</tr>
<tr>
<th class="header">メールアドレス</th>
<td>
<label>
<input class="readOnly"
name="mailAddress"
readonly="readonly"
th:value="*{mailAddress}"
type="text"/>
</label>
</td>
</tr>
<tr>
<th class="header">パスワード</th>
<td>
<label>
<input class="readOnly"
name="password"
readonly="readonly"
th:value="*{password}"
type="password"/>
</label>
</td>
</tr>
<tr>
<th class="header">管理者権限</th>
<td>
<label>
<input id="adminAuth1" name="adminAuth" onclick="return false;"
th:checked="${insertEmployeeForm .adminAuth == 1}" type="radio"
value="1"> 管理者権限
</label>
<label>
<input id="adminAuth0" name="adminAuth" onclick="return false;"
th:checked="${insertEmployeeForm.adminAuth == null or insertEmployeeForm.adminAuth == 0}"
type="radio"
value="0">
一般権限
</label>
</td>
</tr>
<tr>
<th class="header">所属部署</th>
<td>
<label>
<select name="idDepartment" required="required" th:field="*{idDepartment}">
<th:block th:each="department : ${departmentFormList}">
<th:block
th:if="${insertEmployeeForm.idDepartment != null && department.idDepartment == insertEmployeeForm.idDepartment}">
<option th:text="${department.nmDepartment}"
th:value="${department.idDepartment}">
</option>
</th:block>
</th:block>
</select>
</label>
</td>
</tr>
<tr>
<td class="btnArea" colspan="2">
<input type="submit" value="登録"/>
</td>
</tr>
</table>
<a href="javascript:onClickEdit()">登録内容の編集</a> | <a href="showMenu">メニューに戻る</a>
</form>
<script type="text/javascript">
function onClickEdit() {
const form = document.getElementById('insertForm');
form.setAttribute('method', 'post');
form.setAttribute('action', 'insertEmployeeInput');
// 確認画面から編集画面に戻ってきたときのフラグ(未使用)
const inputField = document.createElement("input");
inputField.setAttribute("type", "hidden");
inputField.setAttribute("name", "backFlg");
inputField.setAttribute("value", "edit");
form.appendChild(inputField);
// フォームをDOMに追加
document.body.appendChild(form);
form.submit();
}
</script>
</body>
</html>

View File

@@ -1,158 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<!-- 外部のスクリプトファイルを読み込む -->
<script th:src="@{/js/common.js}"></script>
<!-- CSSの読み込み -->
<link rel="stylesheet" th:href="@{/css/all.css}">
<link rel=stylesheet th:href="@{/css/style.css}" type="text/css">
<title>社員登録</title>
</head>
<body>
<h1>
社員登録   
<div class="rightSection">
<span class="loginInfo">ログイン者名:<span th:text="${session.loginUser.nmEmployee}"></span></span>
<button class="logoutButton" onclick="logoutSubmit()">ログアウト</button>
</div>
</h1>
<form action="insertEmployeeConfirm"
method="post"
th:object="${insertEmployeeForm}">
<div class="msgBox error" th:if="${messageError} != null">
<span class="error" th:text="${messageError.message}"></span>
</div>
<table>
<tr>
<th class="header">社員ID</th>
<td>
<label>
<input class="readOnly"
readonly="readonly"
type="text"
value="自動で設定されます"
/>
</label>
</td>
</tr>
<tr>
<th class="header">社員名</th>
<td>
<label>
<input maxlength="50"
placeholder="社員名"
required="required"
th:field="*{nmEmployee}"
type="text"
/>
</label>
</td>
</tr>
<tr>
<th class="header">社員名フリガナ</th>
<td>
<label>
<input maxlength="50"
oninput="convertToKatakana(this)"
placeholder="フリガナ"
required="required"
th:field="*{knEmployee}"
type="text"
/>
</label>
</td>
</tr>
<tr>
<th class="header">メールアドレス</th>
<td>
<label>
<input maxlength="100"
placeholder="メールアドレス"
required="required"
th:field="*{mailAddress}"
type="email"
/>
</label>
</td>
</tr>
<tr>
<th class="header">パスワード</th>
<td>
<label>
<input pattern="^(?=.*?[a-zA-Z])(?=.*?\d)[a-zA-Z\d]{3,10}$"
placeholder="パスワード"
required="required"
th:field="*{password}"
type="password"
/>
</label>
</td>
</tr>
<!-- *** Chrome等のブラウザの場合自動でセットされる可能性があるので注意書きを外にも *** -->
<tr>
<th></th>
<td><span
style="font-size:8pt; font-weight:bold; color:red;">※半角英数字をそれぞれ1種類以上含む3-10文字</span>
</td>
</tr>
<tr>
<th class="header">パスワード確認用</th>
<td>
<label>
<input pattern="^(?=.*?[a-zA-Z])(?=.*?\d)[a-zA-Z\d]{3,10}$"
placeholder="パスワード確認用"
required="required"
th:field="*{passwordConfirm}"
type="password"
/>
</label>
</td>
</tr>
<tr>
<th class="header">管理者権限</th>
<td>
<label>
<input id="adminAuth1" name="adminAuth" th:checked="${insertEmployeeForm .adminAuth == 1}"
type="radio"
value="1"> 管理者権限
</label>
<label>
<input id="adminAuth0" name="adminAuth"
th:checked="${insertEmployeeForm.adminAuth == null or insertEmployeeForm.adminAuth == 0}"
type="radio"
value="0">
一般権限
</label>
</td>
</tr>
<tr>
<th class="header">所属部署</th>
<td>
<label>
<select required="required" th:field="*{idDepartment}">
<option th:each="department : ${departmentFormList}"
th:selected="${insertEmployeeForm.idDepartment != null && department.idDepartment == insertEmployeeForm.idDepartment}"
th:text="${department.nmDepartment}"
th:value="${department.idDepartment}">
</option>
</select>
</label>
</td>
</tr>
<tr>
<td class="btnArea" colspan="2">
<input type="submit" value="登録確認"/>
</td>
</tr>
</table>
</form>
<a href="showMenu">メニューに戻る</a>
</body>
</html>

View File

@@ -1,40 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<!-- 外部のスクリプトファイルを読み込む -->
<script th:src="@{/js/common.js}"></script>
<!-- CSSの読み込み -->
<link rel="stylesheet" th:href="@{/css/all.css}">
<link rel=stylesheet th:href="@{/css/style.css}" type="text/css">
<title>社員登録完了</title>
</head>
<body>
<h2>社員登録が完了しました</h2>
<br/>
<a href="javascript:insertSubmit()">続けて登録する</a> | <a href="showMenu">メニューに戻る</a>
</body>
<script type="text/javascript">
function insertSubmit() {
const form = document.createElement('form');
form.setAttribute('method', 'post');
form.setAttribute('action', 'insertEmployeeInput');
// 動的送信用のHidden
// 動的にFormを作成する場合は何かしら送信しないと、正しく動作しない
const inputField = document.createElement("input");
inputField.setAttribute("type", "hidden");
inputField.setAttribute("value", "select");
form.appendChild(inputField);
// フォームをDOMに追加
document.body.appendChild(form);
form.submit();
}
</script>
</html>

View File

@@ -1,63 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<!-- 外部のスクリプトファイルを読み込む -->
<script th:src="@{/js/common.js}"></script>
<!-- CSSの読み込み -->
<link rel="stylesheet" th:href="@{/css/all.css}">
<link rel=stylesheet th:href="@{/css/style.css}" type="text/css">
<title>ログイン</title>
</head>
<body>
<h1>ログイン</h1>
<form action="doLogin"
method="post"
th:object="${loginInfoForm}">
<div class="msgBox error" th:if="${messageError} != null">
<span class="error" th:text="${messageError.message}"></span>
</div>
<table>
<tr>
<th class="header">メールアドレス</th>
<td style="width: 250px;">
<input placeholder="メールアドレス"
required="required"
style="width: 100%;"
th:field="*{mailAddress}"
type="text"/>
</td>
</tr>
<tr>
<th style="text-align: right;">パスワード</th>
<td>
<input placeholder="パスワード"
required="required"
style="width: 100%;"
th:field="*{password}"
type="password"/>
</td>
</tr>
<tr>
<td class="btnArea" colspan="2">
<input type="submit" value="ログイン"/>
<button onclick="clearInput()">リセット</button>
</td>
</tr>
</table>
</form>
</body>
<script type="text/javascript">
function clearInput() {
document.getElementById('mailAddress').value = '';
document.getElementById('password').value = '';
}
</script>
</html>

View File

@@ -1,124 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<!-- 外部のスクリプトファイルを読み込む -->
<script th:src="@{/js/common.js}"></script>
<!-- CSSの読み込み -->
<link rel="stylesheet" th:href="@{/css/all.css}">
<link rel=stylesheet th:href="@{/css/style.css}" type="text/css">
<title>メニュー</title>
</head>
<body>
<h1>
メインメニュー   
<div class="rightSection">
<span class="loginInfo">ログイン者名:<span th:text="${session.loginUser.nmEmployee}"></span></span>
<button class="logoutButton" onclick="logoutSubmit()">ログアウト</button>
</div>
</h1>
<table class="menuClass">
<tr>
<td><a class="menuClass" href="javascript:selectEmployeeSubmit()"><i class="fas fa-search"></i> 社員検索 </a>
</td>
<td class="description">登録済みのユーザ一覧表示と</br>更新、削除を行います。</td>
<td><a class="menuClass" href="javascript:selectDepartmentSubmit()"><i class="fas fa-search"></i> 部署検索 </a>
</td>
<td class="description">登録済みの部署一覧表示と</br>更新、削除を行います。</td>
</tr>
<tr>
<td><a class="menuClass" href="javascript:insertEmployeeSubmit()"><i class="fas fa-plus"></i> 社員登録 </a></td>
<td class="description">新規でユーザ追加を行います。</td>
<td><a class="menuClass" href="javascript:insertDepartmentSubmit()"><i class="fas fa-plus"></i> 部署登録 </a>
</td>
<td class="description">新規で部署追加を行います。</td>
</tr>
</table>
</body>
<script type="text/javascript">
function selectEmployeeSubmit() {
const form = document.createElement('form');
form.setAttribute('method', 'post');
form.setAttribute('action', 'selectEmployeeInfo');
// 動的送信用のHidden
// 動的にFormを作成する場合は何かしら送信しないと、正しく動作しない
const inputField = document.createElement("input");
inputField.setAttribute("type", "hidden");
inputField.setAttribute("value", "selectEmployeeInfo");
form.appendChild(inputField);
// フォームをDOMに追加
document.body.appendChild(form);
form.submit();
}
function selectDepartmentSubmit() {
const form = document.createElement('form');
form.setAttribute('method', 'post');
form.setAttribute('action', 'selectDepartment');
// 動的送信用のHidden
// 動的にFormを作成する場合は何かしら送信しないと、正しく動作しない
const inputField = document.createElement("input");
inputField.setAttribute("type", "hidden");
inputField.setAttribute("value", "selectDepartment");
form.appendChild(inputField);
// フォームをDOMに追加
document.body.appendChild(form);
form.submit();
}
function insertEmployeeSubmit() {
const form = document.createElement('form');
form.setAttribute('method', 'post');
form.setAttribute('action', 'insertEmployeeInput');
// 動的送信用のHidden
// 動的にFormを作成する場合は何かしら送信しないと、正しく動作しない
const inputField = document.createElement("input");
inputField.setAttribute("type", "hidden");
inputField.setAttribute("value", "insertEmployeeInput");
form.appendChild(inputField);
// フォームをDOMに追加
document.body.appendChild(form);
form.submit();
}
function insertDepartmentSubmit() {
const form = document.createElement('form');
form.setAttribute('method', 'post');
form.setAttribute('action', 'insertDepartmentInput');
// 動的送信用のHidden
// 動的にFormを作成する場合は何かしら送信しないと、正しく動作しない
const inputField = document.createElement("input");
inputField.setAttribute("type", "hidden");
inputField.setAttribute("value", "insertDepartmentInput");
form.appendChild(inputField);
// フォームをDOMに追加
document.body.appendChild(form);
form.submit();
}
</script>
</html>

View File

@@ -1,114 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<!-- 外部のスクリプトファイルを読み込む -->
<script th:src="@{/js/common.js}"></script>
<!-- CSSの読み込み -->
<link rel="stylesheet" th:href="@{/css/all.css}">
<link rel=stylesheet th:href="@{/css/style.css}" type="text/css">
<title>検索</title>
</head>
<body>
<h1>
検索条件入力   
<div class="rightSection">
<span class="loginInfo">ログイン者名:<span th:text="${session.loginUser.nmEmployee}"></span></span>
<button class="logoutButton" onclick="logoutSubmit()">ログアウト</button>
</div>
</h1>
<form action="selectDepartment"
method="post"
th:object="${searchConditionDepartmentForm}">
<div class="msgBox error" th:if="${messageError} != null">
<span class="error" th:text="${messageError.message}"></span>
</div>
<table>
<tr>
<th class="header">部署ID</th>
<td>
<input placeholder="部署ID"
th:field="*{idDepartment}"
type="number"/>
</td>
</tr>
<tr>
<th class="header">部署名</th>
<td>
<input placeholder="部署名"
th:field="*{nmDepartment}"
type="text"/>
</td>
</tr>
<tr>
<td class="btnArea" colspan="2">
<input type="submit" value="検索"/>
</td>
<td class="btnArea" colspan="2">
<button onclick="clearInput()">クリア</button>
</td>
</tr>
</table>
</form>
<div class="header-spacing"></div>
<a href="showMenu">メニューに戻る</a>
<div class="header-spacing"></div>
<h1><span>検索結果</span></h1>
<div class="header-spacing"></div>
<th:block th:if="${messageInfo != null}">
<script th:inline="javascript">
alert([[${messageInfo.message}]]);
</script>
</th:block>
<div class="header-spacing"></div>
<th:block th:if="${departmentFormList != null and departmentFormList.size() > 0}">
<!-- 検索結果が1件以上ある場合 -->
<table class="half-table-grid table-striped table-hover">
<thead>
<tr>
<th style="width: 60px;">部署ID</th>
<th style="width: 100px;">部署名</th>
<th style="width: 150px;">操作</th>
</tr>
</thead>
<tbody>
<tr th:each="departmentForm : ${departmentFormList}">
<td th:text="${departmentForm.idDepartment}"></td>
<td th:text="${departmentForm.nmDepartment}"></td>
<td>
<!-- 更新フォーム -->
<form action="showUpdateDepartment" method="post" style="display: inline;">
<input name="idDepartment" th:value="${departmentForm.idDepartment}" type="hidden">
<input type="submit" value="更新">
</form>
<!-- 削除フォーム -->
<form action="deleteDepartment" method="post" onsubmit="return confirm('本当に削除しますか?');"
style="display: inline;">
<input name="idDepartment" th:value="${departmentForm.idDepartment}" type="hidden">
<input type="submit" value="削除">
</form>
</td>
</tr>
</tbody>
</table>
</th:block>
<th:block th:if="${departmentFormList == null or departmentFormList.size() == 0}">
<!-- 検索結果が0件の場合 -->
検索結果はありません。
</th:block>
</body>
<script type="text/javascript">
function clearInput() {
document.getElementById('idDepartment').value = '';
document.getElementById('nmDepartment').value = '';
}
</script>
</html>

View File

@@ -1,157 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<!-- 外部のスクリプトファイルを読み込む -->
<script th:src="@{/js/common.js}"></script>
<!-- CSSの読み込み -->
<link rel="stylesheet" th:href="@{/css/all.css}">
<link rel=stylesheet th:href="@{/css/style.css}" type="text/css">
<title>検索</title>
</head>
<body>
<h1>
検索条件入力   
<div class="rightSection">
<span class="loginInfo">ログイン者名:<span th:text="${session.loginUser.nmEmployee}"></span></span>
<button class="logoutButton" onclick="logoutSubmit()">ログアウト</button>
</div>
</h1>
<form action="selectEmployeeInfo"
method="post"
th:object="${searchConditionEmployeeForm}">
<div class="msgBox error" th:if="${messageError} != null">
<span class="error" th:text="${messageError.message}"></span>
</div>
<table>
<tr>
<th class="header">社員ID</th>
<td>
<input placeholder="社員ID"
th:field="*{idEmployee}"
type="number"/>
</td>
</tr>
<tr>
<th class="header">社員名</th>
<td>
<input placeholder="社員名"
th:field="*{nmEmployee}"
type="text"/>
</td>
</tr>
<tr>
<th class="header">社員名フリガナ</th>
<td>
<input oninput="convertToKatakana(this)"
placeholder="フリガナ"
th:field="*{knEmployee}"
type="text"/>
</td>
</tr>
<tr>
<th class="header">メールアドレス</th>
<td>
<input placeholder="メールアドレス"
th:field="*{mailAddress}"
type="email"/>
</td>
</tr>
<tr>
<th class="header">所属部署</th>
<td>
<select th:field="*{idDepartment}">
<option value=""></option>
<option th:each="department : ${departmentFormList}"
th:selected="${searchConditionEmployeeForm.idDepartment != null && department.idDepartment == searchConditionEmployeeForm.idDepartment}"
th:text="${department.nmDepartment}"
th:value="${department.idDepartment}">
</option>
</select>
</td>
</tr>
<tr>
<td class="btnArea" colspan="2">
<input type="submit" value="検索"/>
</td>
<td class="btnArea" colspan="2">
<button onclick="clearInput()">クリア</button>
</td>
</tr>
</table>
</form>
<div class="header-spacing"></div>
<a href="showMenu">メニューに戻る</a>
<div class="header-spacing"></div>
<h1><span>検索結果</span></h1>
<div class="header-spacing"></div>
<th:block th:if="${messageInfo != null}">
<script th:inline="javascript">
alert([[${messageInfo.message}]]);
</script>
</th:block>
<div class="header-spacing"></div>
<th:block th:if="${employeeInfoFormList != null and employeeInfoFormList.size() > 0}">
<!-- 検索結果が1件以上ある場合 -->
<table class="table-grid table-striped table-hover">
<thead>
<tr>
<th style="width: 60px;">社員ID</th>
<th style="width: 100px;">社員名</th>
<th style="width: 150px;">フリガナ</th>
<th style="width: 150px;">メールアドレス</th>
<th style="width: 100px;">パスワード</th>
<th style="width: 70px;">管理者フラグ</th>
<th style="width: 150px;">所属部署</th>
<th style="width: 150px;">操作</th>
</tr>
</thead>
<tbody>
<tr th:each="employeeInfoForm : ${employeeInfoFormList}">
<td th:text="${employeeInfoForm.idEmployee}"></td>
<td th:text="${employeeInfoForm.nmEmployee}"></td>
<td th:text="${employeeInfoForm.knEmployee}"></td>
<td th:text="${employeeInfoForm.mailAddress}"></td>
<td th:text="${employeeInfoForm.password}"></td>
<td th:text="${employeeInfoForm.adminAuth}"></td>
<td th:text="${employeeInfoForm.nmDepartment}"></td>
<td>
<!-- 更新フォーム -->
<form action="showUpdateEmployee" method="post" style="display: inline;">
<input name="idEmployee" th:value="${employeeInfoForm.idEmployee}" type="hidden">
<input type="submit" value="更新">
</form>
<!-- 削除フォーム -->
<form action="deleteEmployee" method="post" onsubmit="return confirm('本当に削除しますか?');"
style="display: inline;">
<input name="idEmployee" th:value="${employeeInfoForm.idEmployee}" type="hidden">
<input type="submit" value="削除">
</form>
</td>
</tr>
</tbody>
</table>
</th:block>
<th:block th:if="${employeeInfoFormList == null or employeeInfoFormList.size() == 0}">
<!-- 検索結果が0件の場合 -->
検索結果はありません。
</th:block>
</body>
<script type="text/javascript">
function clearInput() {
document.getElementById('idEmployee').value = '';
document.getElementById('nmEmployee').value = '';
document.getElementById('knEmployee').value = '';
document.getElementById('mailAddress').value = '';
document.getElementById('idDepartment').selectedIndex = 0;
}
</script>
</html>

View File

@@ -1,88 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<!-- 外部のスクリプトファイルを読み込む -->
<script th:src="@{/js/common.js}"></script>
<!-- CSSの読み込み -->
<link rel="stylesheet" th:href="@{/css/all.css}">
<link rel=stylesheet th:href="@{/css/style.css}" type="text/css">
<title>社員情報更新</title>
</head>
<body>
<h1>
部署情報更新   
<div class="rightSection">
<span class="loginInfo">ログイン者名:<span th:text="${session.loginUser.nmEmployee}"></span></span>
<button class="logoutButton" onclick="logoutSubmit()">ログアウト</button>
</div>
</h1>
<form action="/updateDepartmentResult"
method="post"
onsubmit="return confirm('本当によろしいですか?');"
th:object="${updateDepartmentForm}"
>
<div class="msgBox error" th:if="${messageError != null}">
<span class="error" th:each="message : ${messageError.message}" th:text="${message}"></span>
</div>
<table>
<tr>
<th class="header">部署ID</th>
<td>
<label>
<input class="readOnly"
readonly="readonly"
th:field="*{idDepartment}"
type="text"
/>
</label>
</td>
</tr>
<tr>
<th class="header">部署名</th>
<td>
<label>
<input maxlength="10"
placeholder="部署名"
required="required"
th:field="*{nmDepartment}"
type="text"
/>
</label>
</td>
</tr>
<tr>
<td class="btnArea" colspan="2">
<input type="submit" value="更新"/>
</td>
</tr>
</table>
</form>
<a href="javascript:selectSubmit()">一覧に戻る</a>
</body>
<script>
function selectSubmit() {
const form = document.createElement('form');
form.setAttribute('method', 'post');
form.setAttribute('action', 'selectDepartmentAll');
// 動的送信用のHidden
// 動的にFormを作成する場合は何かしら送信しないと、正しく動作しない
const inputField = document.createElement("input");
inputField.setAttribute("type", "hidden");
inputField.setAttribute("value", "selectDepartmentAll");
form.appendChild(inputField);
// フォームをDOMに追加
document.body.appendChild(form);
form.submit();
}
</script>
</html>

View File

@@ -1,181 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<!-- 外部のスクリプトファイルを読み込む -->
<script th:src="@{/js/common.js}"></script>
<!-- CSSの読み込み -->
<link rel="stylesheet" th:href="@{/css/all.css}">
<link rel=stylesheet th:href="@{/css/style.css}" type="text/css">
<title>社員情報更新</title>
</head>
<body>
<h1>
社員情報更新   
<div class="rightSection">
<span class="loginInfo">ログイン者名:<span th:text="${session.loginUser.nmEmployee}"></span></span>
<button class="logoutButton" onclick="logoutSubmit()">ログアウト</button>
</div>
</h1>
<form action="/updateEmployeeResult"
method="post"
onsubmit="return confirm('本当によろしいですか?');"
th:object="${updateEmployeeInfoForm}"
>
<div class="msgBox error" th:if="${messageError != null}">
<span class="error" th:each="message : ${messageError.message}" th:text="${message}"></span>
</div>
<table>
<tr>
<th class="header">社員ID</th>
<td>
<label>
<input class="readOnly"
readonly="readonly"
th:field="*{idEmployee}"
type="text"
/>
</label>
</td>
</tr>
<tr>
<th class="header">社員名</th>
<td>
<label>
<input maxlength="50"
placeholder="社員名"
required="required"
th:field="*{nmEmployee}"
type="text"
/>
</label>
</td>
</tr>
<tr>
<th class="header">社員名フリガナ</th>
<td>
<label>
<input maxlength="50"
oninput="convertToKatakana(this)"
placeholder="フリガナ"
required="required"
th:field="*{knEmployee}"
type="text"
/>
</label>
</td>
</tr>
<tr>
<th class="header">メールアドレス</th>
<td>
<label>
<input maxlength="100"
placeholder="メールアドレス"
required="required"
th:field="*{mailAddress}"
type="email"
/>
</label>
</td>
</tr>
<tr>
<th class="header">パスワード</th>
<td>
<label>
<input pattern="^(?=.*?[a-zA-Z])(?=.*?\d)[a-zA-Z\d]{3,10}$"
placeholder="パスワード"
th:field="*{password}"
type="password"
/>
</label>
</td>
</tr>
<!-- *** Chrome等のブラウザの場合自動でセットされる可能性があるので注意書きを外にも *** -->
<tr>
<th></th>
<td>
<span style="font-size:8pt;
font-weight:bold;
color:red;">
※半角英数字をそれぞれ1種類以上含む3-10文字
</span>
</td>
</tr>
<tr>
<th class="header">パスワード確認用</th>
<td>
<label>
<input pattern="^(?=.*?[a-zA-Z])(?=.*?\d)[a-zA-Z\d]{3,10}$"
placeholder="パスワード確認用"
th:field="*{passwordConfirm}"
type="password"
/>
</label>
</td>
</tr>
<tr>
<th class="header">管理者権限</th>
<td>
<label>
<input id="adminAuth1" name="adminAuth" th:checked="${updateEmployeeInfoForm.adminAuth == 1}"
type="radio"
value="1"> 管理者権限
</label>
<label>
<input id="adminAuth0" name="adminAuth"
th:checked="${updateEmployeeInfoForm.adminAuth == null or updateEmployeeInfoForm.adminAuth == 0}"
type="radio"
value="0">
一般権限
</label>
</td>
</tr>
<tr>
<th class="header">所属部署</th>
<td>
<label>
<select required="required" th:field="*{idDepartment}">
<option th:each="department : ${departmentFormList}"
th:selected="${updateEmployeeInfoForm.idDepartment != null && department.idDepartment == updateEmployeeInfoForm.idDepartment}"
th:text="${department.nmDepartment}"
th:value="${department.idDepartment}">
</option>
</select>
</label>
</td>
</tr>
<tr>
<td class="btnArea" colspan="2">
<input type="submit" value="更新"/>
</td>
</tr>
</table>
</form>
<a href="javascript:selectSubmit()">一覧に戻る</a>
</body>
<script>
function selectSubmit() {
const form = document.createElement('form');
form.setAttribute('method', 'post');
form.setAttribute('action', 'selectAll');
// 動的送信用のHidden
// 動的にFormを作成する場合は何かしら送信しないと、正しく動作しない
const inputField = document.createElement("input");
inputField.setAttribute("type", "hidden");
inputField.setAttribute("value", "selectAll");
form.appendChild(inputField);
// フォームをDOMに追加
document.body.appendChild(form);
form.submit();
}
</script>
</html>

View File

@@ -1,108 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<!-- 外部のスクリプトファイルを読み込む -->
<script th:src="@{/js/common.js}"></script>
<!-- CSSの読み込み -->
<link rel="stylesheet" th:href="@{/css/all.css}">
<link rel=stylesheet th:href="@{/css/style.css}" type="text/css">
<title>社員情報更新</title>
</head>
<body>
<h1>
社員情報更新   
<div class="rightSection">
<span class="loginInfo">ログイン者名:<span th:text="${session.loginUser.nmEmployee}"></span></span>
<button class="logoutButton" onclick="logoutSubmit()">ログアウト</button>
</div>
</h1>
<form action="updatePersonalEmployeeResult"
method="post"
th:object="${updatePersonalEmployeeUserForm}">
<div class="msgBox error" th:if="${messageError != null}">
<span class="error" th:each="message : ${messageError.message}" th:text="${message}"></span>
</div>
<table>
<tr>
<th class="header">社員名</th>
<td>
<input maxlength="50"
placeholder="社員名"
required
th:name="nmEmployee"
th:value="*{nmEmployee}"
type="text"
/>
</td>
</tr>
<tr>
<th class="header">社員名フリガナ</th>
<td>
<input maxlength="50"
name="knEmployee"
oninput="convertToKatakana(this)"
placeholder="フリガナ"
required
th:value="*{knEmployee}"
type="text"
/>
</td>
</tr>
<tr>
<th class="header">メールアドレス</th>
<td>
<input maxlength="100"
name="mailAddress"
placeholder="メールアドレス"
required
th:value="*{mailAddress}"
type="email"
/>
</td>
</tr>
<tr>
<th class="header">パスワード</th>
<td>
<input name="password"
pattern="^(?=.*?[a-zA-Z])(?=.*?\d)[a-zA-Z\d]{3,10}$"
placeholder="※更新する場合は入力"
th:field="*{password}"
type="password"
/>
</td>
</tr>
<!-- *** Chrome等のブラウザの場合自動でセットされる可能性があるので注意書きを外にも *** -->
<tr>
<th></th>
<td>
<span style="font-size:8pt; font-weight:bold; color:red;">更新する場合は入力してください<br>
※半角英数字をそれぞれ1種類以上含む3-10文字</span>
</td>
</tr>
<tr>
<th class="header">パスワード確認</th>
<td>
<input name="passwordConfirm"
pattern="^(?=.*?[a-zA-Z])(?=.*?\d)[a-zA-Z\d]{3,10}$"
placeholder="※更新する場合は再入力"
th:field="*{passwordConfirm}"
type="password"/>
</td>
</tr>
<tr>
<td class="btnArea" colspan="2">
<input name="submit" type="submit" value="更新"/>
</td>
</tr>
</table>
<input name="idEmployee"
th:value="*{idEmployee}"
type="hidden"/>
</form>
</body>
</html>

View File

@@ -1,42 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<!-- 外部のスクリプトファイルを読み込む -->
<script th:src="@{/js/common.js}"></script>
<!-- CSSの読み込み -->
<link rel="stylesheet" th:href="@{/css/all.css}">
<link rel=stylesheet th:href="@{/css/style.css}" type="text/css">
<title>更新完了</title>
</head>
<body>
<h2>更新が完了しました</h2>
<br/>
<a href="javascript:backSubmit()">戻る</a>
</body>
<script type="text/javascript">
function backSubmit() {
const form = document.createElement('form');
form.setAttribute('method', 'post');
form.setAttribute('action', 'updatePersonalEmployeeResult');
// 動的送信用のHidden
// 動的にFormを作成する場合は何かしら送信しないと、正しく動作しない
const inputField = document.createElement("input");
inputField.setAttribute("type", "hidden");
inputField.setAttribute("value", "updatePersonalEmployeeResult");
form.appendChild(inputField);
// フォームをDOMに追加
document.body.appendChild(form);
form.submit();
}
</script>
</html>

View File

@@ -59,11 +59,13 @@
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId> <artifactId>jackson-databind</artifactId>
<!-- <scope>test</scope>--> <scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@@ -1,21 +0,0 @@
package com.example.rhizome.app.domain.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public class AllDepartmentInfo {
/**
* 課情報
*/
private final Division division;
/**
* 部情報
*/
private final Department department;
/**
* 本部情報
*/
private final Headquarters headquarters;
}

View File

@@ -1,28 +0,0 @@
package com.example.rhizome.app.domain.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 社員情報と全ての部署情報を表すモデルクラスです。
*/
@Getter
@AllArgsConstructor
public class AllEmployeeInfo {
/**
* 社員情報
*/
private final Employee employee;
/**
* 課情報
*/
private final Division division;
/**
* 部情報
*/
private final Department department;
/**
* 本部情報
*/
private final Headquarters headquarters;
}

View File

@@ -4,26 +4,18 @@ import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
/** /**
* 部情報を表すモデルクラスです。 * 部署情報の概念を表現するモデルクラスです。
*/ */
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public class Department { public class Department {
/** /**
* 部ID * 部署ID
*/ */
private final Integer idDepartment; private final Integer idDepartment;
/** /**
* 部名 * 部署名
*/ */
private final String nmDepartment; private final String nmDepartment;
/**
* 表示・非表示フラグ
*/
private final Integer isDisplay;
/**
* 部ID
*/
private final Integer idHeadquarters;
} }

View File

@@ -1,36 +0,0 @@
package com.example.rhizome.app.domain.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 部署情報の概念を表現するモデルクラスです。※部情報ではない
*/
@Getter
@AllArgsConstructor
public class DepartmentInfo {
/**
* 本部ID
*/
private final Integer idHeadquarters;
/**
* 本部名
*/
private final String nmHeadquarters;
/**
* 部ID
*/
private final Integer idDepartment;
/**
* 部名
*/
private final String nmDepartment;
/**
* 課ID
*/
private final Integer idDivision;
/**
* 課名
*/
private final String nmDivision;
}

View File

@@ -1,28 +0,0 @@
package com.example.rhizome.app.domain.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 課を表現するモデルクラスです
*/
@Getter
@AllArgsConstructor
public class Division {
/**
* 課ID
*/
private final Integer idDivision;
/**
* 課名
*/
private final String nmDivision;
/**
* 表示・非表示フラグ
*/
private final Integer isDisplay;
/**
* 部ID
*/
private final Integer idDepartment;
}

View File

@@ -29,10 +29,6 @@ public class Employee {
* パスワード * パスワード
*/ */
private final String password; private final String password;
/**
* 入社年月日
*/
private final String hireDate;
/** /**
* 管理者権限 * 管理者権限
*/ */
@@ -40,6 +36,6 @@ public class Employee {
/** /**
* 部署ID * 部署ID
*/ */
private final Integer idDivision; private final Integer idDepartment;
} }

View File

@@ -21,8 +21,8 @@ public class EmployeeInfo {
*/ */
private final Employee employee; private final Employee employee;
/** /**
* 課情報 * 部署名
*/ */
private final Division division; private final Department department;
} }

View File

@@ -1,24 +0,0 @@
package com.example.rhizome.app.domain.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 本部を表現するモデルクラスです
*/
@Getter
@AllArgsConstructor
public class Headquarters {
/**
* 本部ID
*/
private final Integer idHeadquarters;
/**
* 本部名
*/
private final String nmHeadquarters;
/**
* 表示・非表示フラグ
*/
private final Integer isDisplay;
}

View File

@@ -38,7 +38,7 @@ public class LoginUser {
/** /**
* 部署ID * 部署ID
*/ */
private final Integer idDivision; private final Integer idDepartment;
/** /**
* ログインユーザが管理者か * ログインユーザが管理者か

View File

@@ -10,12 +10,12 @@ import lombok.Getter;
@AllArgsConstructor @AllArgsConstructor
public class SearchConditionDepartment { public class SearchConditionDepartment {
/** /**
* ID * 部署ID
*/ */
private final Integer idDivision; private final Integer idDepartment;
/** /**
* 名前 * 部署名
*/ */
private final String nmDivision; private final String nmDepartment;
} }

View File

@@ -28,6 +28,6 @@ public class SearchConditionEmployee {
/** /**
* 部署ID * 部署ID
*/ */
private final Integer idDivision; private final Integer idDepartment;
} }

View File

@@ -1,6 +1,6 @@
package com.example.rhizome.app.domain.service; package com.example.rhizome.app.domain.service;
public interface DeleteDepartment { public interface DeleteDepartment {
void deleteDepartment(Integer idDivision); void deleteDepartment(Integer idDepartment);
} }

View File

@@ -1,7 +1,7 @@
package com.example.rhizome.app.domain.service; package com.example.rhizome.app.domain.service;
import com.example.rhizome.app.infra.entity.DivisionEntity; import com.example.rhizome.app.domain.model.Department;
public interface RegisterDepartment { public interface RegisterDepartment {
void registerDepartment(DivisionEntity divisionEntity); void registerDepartment(Department department);
} }

View File

@@ -1,43 +1,14 @@
package com.example.rhizome.app.domain.service; package com.example.rhizome.app.domain.service;
import com.example.rhizome.app.domain.model.Department;
import com.example.rhizome.app.domain.model.SearchConditionDepartment;
import java.util.List; import java.util.List;
import com.example.rhizome.app.domain.model.AllDepartmentInfo;
import com.example.rhizome.app.domain.model.Department;
import com.example.rhizome.app.domain.model.Division;
import com.example.rhizome.app.domain.model.Headquarters;
import com.example.rhizome.app.domain.model.SearchConditionDepartment;
public interface SearchDepartment { public interface SearchDepartment {
List<Department> selectAll();
List<AllDepartmentInfo> searchAllDepartmentTable(); List<Department> searchBy(SearchConditionDepartment searchConditionDepartment);
List<AllDepartmentInfo> searchAllDepartmentTable(SearchConditionDepartment searchConditionDepartment);
boolean searchAllDepartmentTable(
SearchConditionDepartment searchHeadquartersTable,
SearchConditionDepartment searchDepartmentTable,
SearchConditionDepartment searchDivisionTable);
boolean searchAllDepartmentTable(
Integer idHeadquarters,
Integer idDepartment,
Integer idDivision);
List<Headquarters> searchByHeadquarters(SearchConditionDepartment searchConditionDepartment);
List<Department> searchByDepartment(SearchConditionDepartment searchConditionDepartment);
List<Division> searchByDivision(SearchConditionDepartment searchConditionDepartment);
List<Department> searchByIdHeadquarters(Integer idHeadquarters);
List<Division> searchByIdDepartment(Integer idDepartment);
List<Headquarters> searchHeadquartersByIdHeadquarters(Integer idHeadquarters);
List<Department> searchDepartmentByIdDepartment(Integer idDepartment);
List<Division> searchDivisionByIdDivision(Integer idDivision);
List<Department> searchByWithLike(SearchConditionDepartment searchConditionDepartment);
} }

View File

@@ -1,14 +1,14 @@
package com.example.rhizome.app.domain.service; package com.example.rhizome.app.domain.service;
import java.util.List;
import com.example.rhizome.app.domain.model.Employee; import com.example.rhizome.app.domain.model.Employee;
import com.example.rhizome.app.domain.model.LoginUser; import com.example.rhizome.app.domain.model.LoginUser;
import java.util.List;
public interface SearchEmployee { public interface SearchEmployee {
List<Employee> searchEmployee(String mailAddress); List<Employee> searchEmployee(String mailAddress);
List<Employee> searchEmployeeByIdDepartment(Integer idDivision); List<Employee> searchEmployeeByIdDepartment(Integer idDepartment);
LoginUser searchLoginUser(String mailAddress); LoginUser searchLoginUser(String mailAddress);

View File

@@ -1,12 +1,12 @@
package com.example.rhizome.app.domain.service; package com.example.rhizome.app.domain.service;
import com.example.rhizome.app.domain.model.EmployeeInfo;
import com.example.rhizome.app.domain.model.SearchConditionEmployee;
import java.util.List; import java.util.List;
import com.example.rhizome.app.domain.model.AllEmployeeInfo;
import com.example.rhizome.app.domain.model.SearchConditionEmployee;
public interface SearchEmployeeInfo { public interface SearchEmployeeInfo {
List<AllEmployeeInfo> selectAll(); List<EmployeeInfo> selectAll();
List<AllEmployeeInfo> searchBy(SearchConditionEmployee searchConditionEmployee); List<EmployeeInfo> searchBy(SearchConditionEmployee searchConditionEmployee);
} }

View File

@@ -1,8 +0,0 @@
package com.example.rhizome.app.domain.service;
import org.springframework.stereotype.Service;
@Service
public interface TenureCalc {
String tenureCalc(String hireDate);
}

View File

@@ -1,8 +1,8 @@
package com.example.rhizome.app.domain.service; package com.example.rhizome.app.domain.service;
import com.example.rhizome.app.domain.model.DepartmentInfo; import com.example.rhizome.app.domain.model.Department;
public interface UpdateDepartment { public interface UpdateDepartment {
void updateDepartment(DepartmentInfo departmentInfo); void updateDepartment(Department department);
} }

View File

@@ -1,12 +1,11 @@
package com.example.rhizome.app.domain.service.impl; package com.example.rhizome.app.domain.service.impl;
import com.example.rhizome.app.domain.service.DeleteDepartment;
import com.example.rhizome.app.infra.repository.DepartmentRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import com.example.rhizome.app.domain.service.DeleteDepartment;
import com.example.rhizome.app.infra.repository.DivisionRepository;
/** /**
* Department レコード削除関連の機能を持つサービス * Department レコード削除関連の機能を持つサービス
*/ */
@@ -14,26 +13,26 @@ import com.example.rhizome.app.infra.repository.DivisionRepository;
@Transactional @Transactional
public class DeleteDepartmentImpl implements DeleteDepartment { public class DeleteDepartmentImpl implements DeleteDepartment {
DivisionRepository divisionRepository; DepartmentRepository departmentRepository;
/** /**
* コンストラクタ * コンストラクタ
* *
* @param divisionRepository DI対象 * @param departmentRepository DI対象
*/ */
@Autowired @Autowired
public DeleteDepartmentImpl(DivisionRepository divisionRepository) { public DeleteDepartmentImpl(DepartmentRepository departmentRepository) {
this.divisionRepository = divisionRepository; this.departmentRepository = departmentRepository;
} }
/** /**
* idDivision を元に division データを削除するメソッド * idDepartment を元に department データを削除
* *
* @param idDivision 削除対象のidDivision * @param idDepartment 削除対象のidDepartment
*/ */
public void deleteDepartment(Integer idDivision) { public void deleteDepartment(Integer idDepartment) {
divisionRepository.deleteByIdDivision(idDivision); departmentRepository.deleteById(idDepartment);
} }
} }

View File

@@ -1,11 +1,10 @@
package com.example.rhizome.app.domain.service.impl; 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.DeleteEmployee; import com.example.rhizome.app.domain.service.DeleteEmployee;
import com.example.rhizome.app.infra.repository.EmployeeRepository; import com.example.rhizome.app.infra.repository.EmployeeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/** /**
* Employee レコード削除関連の機能を持つサービス * Employee レコード削除関連の機能を持つサービス
@@ -21,8 +20,9 @@ public class DeleteEmployeeImpl implements DeleteEmployee {
this.employeeRepository = employeeRepository; this.employeeRepository = employeeRepository;
} }
/** /**
* idEmployee を元に employee データを削除するメソッド * idEmployee を元に employee データを削除
* *
* @param idEmployee 削除対象のidEmployee * @param idEmployee 削除対象のidEmployee
*/ */

View File

@@ -1,17 +1,14 @@
package com.example.rhizome.app.domain.service.impl; package com.example.rhizome.app.domain.service.impl;
import com.example.rhizome.app.domain.model.Department;
import com.example.rhizome.app.domain.service.RegisterDepartment;
import com.example.rhizome.app.infra.entity.DepartmentEntity;
import com.example.rhizome.app.infra.repository.DepartmentRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import com.example.rhizome.app.domain.service.RegisterDepartment;
import com.example.rhizome.app.infra.entity.DepartmentEntity;
import com.example.rhizome.app.infra.entity.DivisionEntity;
import com.example.rhizome.app.infra.entity.HeadquartersEntity;
import com.example.rhizome.app.infra.repository.DepartmentRepository;
import com.example.rhizome.app.infra.repository.DivisionRepository;
import com.example.rhizome.app.infra.repository.HeadquartersRepository;
/** /**
* Department テーブルの登録系の機能を集約させるサービスクラスです。 * Department テーブルの登録系の機能を集約させるサービスクラスです。
*/ */
@@ -20,65 +17,23 @@ import com.example.rhizome.app.infra.repository.HeadquartersRepository;
public class RegisterDepartmentImpl implements RegisterDepartment { public class RegisterDepartmentImpl implements RegisterDepartment {
DepartmentRepository departmentRepository; DepartmentRepository departmentRepository;
DivisionRepository divisionRepository;
HeadquartersRepository headquartersRepository;
/** /**
* コンストラクタ * コンストラクタ
* *
* @param departmentRepository DI対象 * @param departmentRepository DI対象
* @param divisionRepository DI対象
* @param headquartersRepository DI対象
*/ */
@Autowired @Autowired
public RegisterDepartmentImpl(DepartmentRepository departmentRepository, public RegisterDepartmentImpl(DepartmentRepository departmentRepository) {
DivisionRepository divisionRepository,
HeadquartersRepository headquartersRepository) {
this.departmentRepository = departmentRepository; this.departmentRepository = departmentRepository;
this.divisionRepository = divisionRepository;
this.headquartersRepository = headquartersRepository;
} }
/** /**
* division,department,headquartersインスタンスの内容を登録する * department インスタンスの内容を登録する
* *
* @param divisionEntity 登録対象のデータ * @param department 登録対象のデータ
* @param departmentEntity 登録対象のデータ
* @param headquartersEntity 登録対象のデータ
*/ */
public void registerDepartment(DivisionEntity divisionEntity) { public void registerDepartment(Department department) {
DepartmentEntity departmentEntity = divisionEntity.getDepartment(); departmentRepository.save(DepartmentEntity.convertFrom(department));
HeadquartersEntity headquartersEntity = divisionEntity.getDepartment().getHeadquarters();
HeadquartersEntity originHeadquartersEntity = headquartersRepository.findByNmHeadquarters(
divisionEntity.getDepartment().getHeadquarters().getNmHeadquarters());
if (originHeadquartersEntity != null) {
headquartersEntity = originHeadquartersEntity;
} else {
headquartersEntity = new HeadquartersEntity();
headquartersEntity.setNmHeadquarters(
divisionEntity.getDepartment()
.getHeadquarters()
.getNmHeadquarters());
}
DepartmentEntity originDepartmentEntity = departmentRepository.findByHeadquartersAndNmDepartment(
originHeadquartersEntity,
divisionEntity.getDepartment().getNmDepartment());
if (originDepartmentEntity != null) {
departmentEntity = originDepartmentEntity;
} else {
departmentEntity = new DepartmentEntity();
departmentEntity.setNmDepartment(
divisionEntity.getDepartment()
.getNmDepartment());
}
divisionEntity.setIsDisplay(0);
departmentEntity.setIsDisplay(0);
headquartersEntity.setIsDisplay(0);
departmentEntity.setHeadquarters(headquartersEntity);
divisionEntity.setDepartment(departmentEntity);
divisionRepository.save(divisionEntity);
} }
} }

View File

@@ -1,15 +1,14 @@
package com.example.rhizome.app.domain.service.impl; package com.example.rhizome.app.domain.service.impl;
import com.example.rhizome.app.domain.model.Employee;
import com.example.rhizome.app.domain.service.RegisterEmployee;
import com.example.rhizome.app.infra.entity.EmployeeEntity;
import com.example.rhizome.app.infra.repository.EmployeeRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import com.example.rhizome.app.domain.model.Employee;
import com.example.rhizome.app.domain.service.RegisterEmployee;
import com.example.rhizome.app.infra.entity.InsertEmployeeEntity;
import com.example.rhizome.app.infra.repository.EmployeeRepository;
/** /**
* Employee テーブルの登録系の機能を集約させるサービスクラスです。 * Employee テーブルの登録系の機能を集約させるサービスクラスです。
*/ */
@@ -30,6 +29,6 @@ public class RegisterEmployeeImpl implements RegisterEmployee {
* @param employee 登録対象のデータ * @param employee 登録対象のデータ
*/ */
public void registerEmployee(Employee employee) { public void registerEmployee(Employee employee) {
employeeRepository.save(InsertEmployeeEntity.convertFrom(employee)); employeeRepository.save(EmployeeEntity.convertFrom(employee));
} }
} }

View File

@@ -1,28 +1,17 @@
package com.example.rhizome.app.domain.service.impl; package com.example.rhizome.app.domain.service.impl;
import java.util.List;
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.infra.entity.DepartmentEntity;
import com.example.rhizome.app.infra.repository.DepartmentRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import com.example.rhizome.app.domain.model.AllDepartmentInfo; import java.util.List;
import com.example.rhizome.app.domain.model.Department;
import com.example.rhizome.app.domain.model.Division;
import com.example.rhizome.app.domain.model.Headquarters;
import com.example.rhizome.app.domain.model.SearchConditionDepartment;
import com.example.rhizome.app.domain.service.SearchDepartment;
import com.example.rhizome.app.infra.entity.DepartmentEntity;
import com.example.rhizome.app.infra.entity.DepartmentInfoEntity;
import com.example.rhizome.app.infra.entity.DivisionEntity;
import com.example.rhizome.app.infra.entity.HeadquartersEntity;
import com.example.rhizome.app.infra.repository.DepartmentInfoRepository;
import com.example.rhizome.app.infra.repository.DepartmentRepository;
import com.example.rhizome.app.infra.repository.DivisionRepository;
import com.example.rhizome.app.infra.repository.HeadquartersRepository;
import com.example.rhizome.app.infra.repository.RegisterDepartmentRepository;
import com.example.rhizome.app.infra.repository.RegisterDivisionRepository;
/** /**
* 部署情報検索系の機能を集約させるサービスクラスです。 * 部署情報検索系の機能を集約させるサービスクラスです。
@@ -30,35 +19,17 @@ import com.example.rhizome.app.infra.repository.RegisterDivisionRepository;
@Service @Service
@Transactional @Transactional
public class SearchDepartmentImpl implements SearchDepartment { public class SearchDepartmentImpl implements SearchDepartment {
DivisionRepository divisionRepository;
DepartmentRepository departmentRepository; DepartmentRepository departmentRepository;
HeadquartersRepository headquartersRepository;
DepartmentInfoRepository departmentInfoRepository;
RegisterDepartmentRepository registerDepartmentRepository;
RegisterDivisionRepository registerDivisionRepository;
/** /**
* コンストラクタ * コンストラクタ
* *
* @param divisionRepository DI対象
* @param departmentRepository DI対象 * @param departmentRepository DI対象
* @param headquartersRepository DI対象
* @param departmentInfoRepository DI対象
* @param RegisterDepartmentRepository DI対象
* @param RegisterDivisionRepository DI対象
*/ */
@Autowired @Autowired
public SearchDepartmentImpl( public SearchDepartmentImpl(DepartmentRepository departmentRepository) {
DepartmentRepository departmentRepository, DivisionRepository divisionRepository,
HeadquartersRepository headquartersRepository, DepartmentInfoRepository departmentInfoRepository,
RegisterDepartmentRepository registerDepartmentRepository,
RegisterDivisionRepository registerDivisionRepository) {
this.departmentRepository = departmentRepository; this.departmentRepository = departmentRepository;
this.divisionRepository = divisionRepository;
this.headquartersRepository = headquartersRepository;
this.departmentInfoRepository = departmentInfoRepository;
this.registerDepartmentRepository = registerDepartmentRepository;
this.registerDivisionRepository = registerDivisionRepository;
} }
/** /**
@@ -66,84 +37,8 @@ public class SearchDepartmentImpl implements SearchDepartment {
* *
* @return 取得した部署情報レコード全件 * @return 取得した部署情報レコード全件
*/ */
public List<AllDepartmentInfo> searchAllDepartmentTable() { public List<Department> selectAll() {
return DepartmentInfoEntity.createDepartmentInfoList(departmentInfoRepository.searchAllDepartmentTable()); return DepartmentEntity.createDepartmentList(departmentRepository.findAll());
}
/**
* 課の条件を基に部署情報を全件取得する
* @param SearchConditionDepartment 検索条件
* @return 検索結果のレコード
*/
public List<AllDepartmentInfo> searchAllDepartmentTable(SearchConditionDepartment searchConditionDepartment) {
return DepartmentInfoEntity.AfterSearchCreateDepartmentInfoList(
departmentInfoRepository.findAll(Specification
.where(DepartmentInfoRepository.idDivisionEqual(searchConditionDepartment.getIdDivision()))
.and(DepartmentInfoRepository.nmDivisionEqual(searchConditionDepartment.getNmDivision()))));
}
/**
* 三つの部署の名前を基に部署情報を取得する→重複チェック
* @param SearchConditionDepartment searchHeadquartersTable 検索条件
* @param SearchConditionDepartment searchDepartmentTable 検索条件
* @param SearchConditionDepartment searchDivisionTable 検索条件
* @return 重複があればtrue
* @return 重複が無ければfalse
*/
public boolean searchAllDepartmentTable(
SearchConditionDepartment searchHeadquartersTable,
SearchConditionDepartment searchDepartmentTable,
SearchConditionDepartment searchDivisionTable) {
if (departmentInfoRepository.searchAllDepartmentTable(
searchHeadquartersTable.getNmDivision(),
searchDepartmentTable.getNmDivision(),
searchDivisionTable.getNmDivision()).isEmpty()) {
return false;
} else {
return true;
}
}
/**
* 三つの部署のIDを基に部署情報を取得する→重複チェック
* @param Integer idHeadquarters 検索条件
* @param Integer idDepartment 検索条件
* @param Integer idDivision 検索条件
* @return 重複があればtrue
* @return 重複が無ければfalse
*/
public boolean searchAllDepartmentTable(
Integer idHeadquarters,
Integer idDepartment,
Integer idDivision) {
if (departmentInfoRepository.searchAllDepartmentTable(
idHeadquarters,
idDepartment,
idDivision).isEmpty()) {
return false;
} else {
return true;
}
}
/**
* searchConditionDepartment の情報を元に Headquarters のレコードを取得
*
* @param searchConditionDepartment 検索条件
* @return 検索結果のレコード
*/
public List<Headquarters> searchByHeadquarters(SearchConditionDepartment searchConditionDepartment) {
return HeadquartersEntity
.createHeadquartersList(
headquartersRepository.findAll(Specification
.where(HeadquartersRepository
.idHeadquartersEqual(searchConditionDepartment.getIdDivision()))
.and(HeadquartersRepository
.nmHeadquartersEqual(searchConditionDepartment.getNmDivision()))));
} }
/** /**
@@ -152,96 +47,36 @@ public class SearchDepartmentImpl implements SearchDepartment {
* @param searchConditionDepartment 検索条件 * @param searchConditionDepartment 検索条件
* @return 検索結果のレコード * @return 検索結果のレコード
*/ */
public List<Department> searchByDepartment(SearchConditionDepartment searchConditionDepartment) { public List<Department> searchBy(SearchConditionDepartment searchConditionDepartment) {
// 動的に検索条件を絞り込む // 動的に検索条件を絞り込む
// // Specification は Criteria API //の Predicate をラップしたもの // Specification は Criteria API の Predicate をラップしたもの
return DepartmentEntity return DepartmentEntity
.createDepartmentList( .createDepartmentList(
departmentRepository.findAll(Specification departmentRepository.findAll(Specification
.where(DepartmentRepository .where(DepartmentRepository.idDepartmentEqual(searchConditionDepartment.getIdDepartment()))
.idDepartmentEqual(searchConditionDepartment.getIdDivision())) .and(DepartmentRepository.nmDepartmentEqual(searchConditionDepartment.getNmDepartment()))
.and(DepartmentRepository )
.nmDepartmentEqual(searchConditionDepartment.getNmDivision())))); );
} }
/** /**
* searchConditionDepartment の情報を元に Division のレコードを取得 * searchConditionDepartment の情報を元に Department のレコードを取得
* 部分一致検索
* *
* @param searchConditionDepartment 検索条件 * @param searchConditionDepartment 検索条件
* @return 検索結果のレコード * @return 検索結果のレコード
*/ */
public List<Division> searchByDivision(SearchConditionDepartment searchConditionDepartment) { public List<Department> searchByWithLike(SearchConditionDepartment searchConditionDepartment) {
// 動的に検索条件を絞り込む // 動的に検索条件を絞り込む
// // Specification は Criteria AP//I の Predicate をラップしたもの // Specification は Criteria API の Predicate をラップしたもの
return DivisionEntity
.createDivisionList(
divisionRepository.findAll(Specification
.where(DivisionRepository.idDivisionEqual(searchConditionDepartment.getIdDivision()))
.and(DivisionRepository.nmDivisionEqual(searchConditionDepartment.getNmDivision()))));
}
/**
* idHeadquarters の情報を元に Department のレコードを取得
*
* @param Integer idHeadquarters 検索条件
* @return 検索結果のレコード
*/
public List<Department> searchByIdHeadquarters(Integer idHeadquarters) {
registerDepartmentRepository.findAll(Specification
.where(RegisterDepartmentRepository.idHeadquartersEqual(idHeadquarters)));
return DepartmentEntity return DepartmentEntity
.createDepartmentListBy(registerDepartmentRepository.findAll(Specification .createDepartmentList(
.where(RegisterDepartmentRepository.idHeadquartersEqual(idHeadquarters)))); departmentRepository.findAll(Specification
} .where(DepartmentRepository.idDepartmentEqual(searchConditionDepartment.getIdDepartment()))
.and(DepartmentRepository.nmDepartmentLike(searchConditionDepartment.getNmDepartment()))
)
);
/**
* idDepartment の情報を元に Division のレコードを取得
*
* @param Integer idDepartment 検索条件
* @return 検索結果のレコード
*/
public List<Division> searchByIdDepartment(Integer idDepartment) {
return DivisionEntity
.createRegisterDivisionList(registerDivisionRepository.findAll(Specification
.where(RegisterDivisionRepository.idDepartmentEqual(idDepartment))));
}
/**
* idHeadquarters の情報を元に Headquarters のレコードを取得
*
* @param Integer idHeadquarters 検索条件
* @return 検索結果のレコード
*/
public List<Headquarters> searchHeadquartersByIdHeadquarters(Integer idHeadquarters) {
return HeadquartersEntity
.createHeadquartersList(headquartersRepository.findAll(Specification
.where(HeadquartersRepository.idHeadquartersEqual(idHeadquarters))));
}
/**
* idDepartment の情報を元に Department のレコードを取得
*
* @param Integer idDepartment 検索条件
* @return 検索結果のレコード
*/
public List<Department> searchDepartmentByIdDepartment(Integer idDepartment) {
return DepartmentEntity
.createDepartmentList(departmentRepository.findAll(Specification
.where(DepartmentRepository.idDepartmentEqual(idDepartment))));
}
/**
* idDivision の情報を元に Division のレコードを取得
*
* @param Integer idDivision 検索条件
* @return 検索結果のレコード
*/
public List<Division> searchDivisionByIdDivision(Integer idDivision) {
return DivisionEntity
.createDivisionList(divisionRepository.findAll(Specification
.where(DivisionRepository.idDivisionEqual(idDivision))));
} }
} }

View File

@@ -1,16 +1,15 @@
package com.example.rhizome.app.domain.service.impl; package com.example.rhizome.app.domain.service.impl;
import java.util.List;
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.Employee; import com.example.rhizome.app.domain.model.Employee;
import com.example.rhizome.app.domain.model.LoginUser; import com.example.rhizome.app.domain.model.LoginUser;
import com.example.rhizome.app.domain.service.SearchEmployee; import com.example.rhizome.app.domain.service.SearchEmployee;
import com.example.rhizome.app.infra.entity.EmployeeEntity; import com.example.rhizome.app.infra.entity.EmployeeEntity;
import com.example.rhizome.app.infra.repository.EmployeeRepository; import com.example.rhizome.app.infra.repository.EmployeeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/** /**
* Employee テーブル検索系の機能を集約させるサービスクラスです。 * Employee テーブル検索系の機能を集約させるサービスクラスです。
@@ -26,6 +25,7 @@ public class SearchEmployeeImpl implements SearchEmployee {
this.employeeRepository = employeeRepository; this.employeeRepository = employeeRepository;
} }
/** /**
* mailAddress を元に Employee Table を検索します。 * mailAddress を元に Employee Table を検索します。
* *
@@ -53,18 +53,18 @@ public class SearchEmployeeImpl implements SearchEmployee {
* @return Table から取得したレコードの情報 * @return Table から取得したレコードの情報
*/ */
public Employee searchEmployeeByIdEmployee(Integer idEmployee) { public Employee searchEmployeeByIdEmployee(Integer idEmployee) {
return EmployeeEntity return EmployeeEntity.createEmployee(employeeRepository.findByIdEmployee(idEmployee).orElse(new EmployeeEntity()));
.createEmployee(employeeRepository.findByIdEmployee(idEmployee).orElse(new EmployeeEntity()));
} }
/** /**
* idDivision を元に Employee Table を検索します。 * idDepartment を元に Employee Table を検索します。
* *
* @param idDivision 本部ID * @param idDepartment 部署ID
* @return Table から取得したレコードの情報 * @return Table から取得したレコードの情報
*/ */
@Override @Override
public List<Employee> searchEmployeeByIdDepartment(Integer idDivision) { public List<Employee> searchEmployeeByIdDepartment(Integer idDepartment) {
return EmployeeEntity.createEmployeeList(employeeRepository.findByDivision_idDivision(idDivision)); return EmployeeEntity.createEmployeeList(employeeRepository.findByIdDepartment(idDepartment));
} }
} }

View File

@@ -1,17 +1,16 @@
package com.example.rhizome.app.domain.service.impl; package com.example.rhizome.app.domain.service.impl;
import java.util.List; import com.example.rhizome.app.domain.model.EmployeeInfo;
import com.example.rhizome.app.domain.model.SearchConditionEmployee;
import com.example.rhizome.app.domain.service.SearchEmployeeInfo;
import com.example.rhizome.app.infra.entity.EmployeeDepartmentEntity;
import com.example.rhizome.app.infra.repository.EmployeeInfoRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import com.example.rhizome.app.domain.model.AllEmployeeInfo; import java.util.List;
import com.example.rhizome.app.domain.model.SearchConditionEmployee;
import com.example.rhizome.app.domain.service.SearchEmployeeInfo;
import com.example.rhizome.app.infra.entity.EmployeeDepartmentEntity;
import com.example.rhizome.app.infra.repository.EmployeeInfoRepository;
/** /**
* SearchEmployeeInfoImpl (employee join department) 検索系の機能を集約させるサービスクラスです * SearchEmployeeInfoImpl (employee join department) 検索系の機能を集約させるサービスクラスです
@@ -27,37 +26,37 @@ public class SearchEmployeeInfoImpl implements SearchEmployeeInfo {
this.employeeInfoRepository = employeeInfoRepository; this.employeeInfoRepository = employeeInfoRepository;
} }
/** /**
* EmployeeInfo (employee join division join department join headquarters) のレコードを全件取得 * EmployeeInfo (employee join department) のレコードを全件取得
* *
* @return 取得したレコード全件 * @return 取得したレコード全件
*/ */
public List<AllEmployeeInfo> selectAll() { public List<EmployeeInfo> selectAll() {
return EmployeeDepartmentEntity.createEmployeeInfoList(employeeInfoRepository.findAlltable()); return EmployeeDepartmentEntity.createEmployeeInfoList(employeeInfoRepository.findAll());
} }
/** /**
* SearchConditionEmployee の情報を元に * SearchConditionEmployee の情報を元に EmployeeInfo (employee join department) のレコードを取得
* EmployeeInfo (employee join division join department join headquarters)
* のレコードを取得
* *
* @param searchConditionEmployee 検索条件 * @param searchConditionEmployee 検索条件
* @return 検索結果のレコードリスト * @return 検索結果のレコードリスト
*/ */
public List<AllEmployeeInfo> searchBy(SearchConditionEmployee searchConditionEmployee) { public List<EmployeeInfo> searchBy(SearchConditionEmployee searchConditionEmployee) {
// 動的に検索条件を絞り込む // 動的に検索条件を絞り込む
// Specification は Criteria API の Predicate をラップしたもの // Specification は Criteria API の Predicate をラップしたもの
return EmployeeDepartmentEntity return EmployeeDepartmentEntity
.AfterSearchCreateEmployeeInfoList( .createEmployeeInfoList(
employeeInfoRepository.findAll(Specification employeeInfoRepository.findAll(Specification
.where(EmployeeInfoRepository.idEmployeeEqual(searchConditionEmployee.getIdEmployee())) .where(EmployeeInfoRepository.idEmployeeEqual(searchConditionEmployee.getIdEmployee()))
.and(EmployeeInfoRepository.nmEmployeeEqual(searchConditionEmployee.getNmEmployee())) .and(EmployeeInfoRepository.nmEmployeeEqual(searchConditionEmployee.getNmEmployee()))
.and(EmployeeInfoRepository.knEmployeeEqual(searchConditionEmployee.getKnEmployee())) .and(EmployeeInfoRepository.knEmployeeEqual(searchConditionEmployee.getKnEmployee()))
.and(EmployeeInfoRepository.mailAddressEqual(searchConditionEmployee.getMailAddress())) .and(EmployeeInfoRepository.mailAddressEqual(searchConditionEmployee.getMailAddress()))
.and(EmployeeInfoRepository.idDivisionEqual(searchConditionEmployee.getIdDivision())))); .and(EmployeeInfoRepository.idDepartmentEqual(searchConditionEmployee.getIdDepartment()))
)
);
} }
} }

View File

@@ -1,33 +0,0 @@
package com.example.rhizome.app.domain.service.impl;
import java.time.LocalDate;
import java.time.Period;
import org.springframework.stereotype.Service;
import com.example.rhizome.app.domain.service.TenureCalc;
@Service
public class TenureCalucImpl implements TenureCalc {
/**
* hireDate をもとに勤続年数を計算
*
* @param String hireDate
* @return 計算結果の勤続年数
*/
public String tenureCalc(String hireDate) {
String tenure;
LocalDate hiredate = LocalDate.parse(hireDate);
LocalDate today = LocalDate.now();
Period period = Period.between(hiredate, today);
if (period.getYears() <= 0 && period.getMonths() <= 0) {
tenure = "0年0ヶ月";
return tenure;
} else {
tenure = period.getYears() + "年" + period.getMonths() + "ヶ月";
return tenure;
}
}
}

View File

@@ -1,16 +1,13 @@
package com.example.rhizome.app.domain.service.impl; package com.example.rhizome.app.domain.service.impl;
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;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import com.example.rhizome.app.domain.model.DepartmentInfo;
import com.example.rhizome.app.domain.service.UpdateDepartment;
import com.example.rhizome.app.infra.entity.DepartmentEntity;
import com.example.rhizome.app.infra.entity.DivisionEntity;
import com.example.rhizome.app.infra.entity.HeadquartersEntity;
import com.example.rhizome.app.infra.repository.DivisionRepository;
/** /**
* department の更新系の機能を集約させるサービスクラスです。 * department の更新系の機能を集約させるサービスクラスです。
*/ */
@@ -18,33 +15,21 @@ import com.example.rhizome.app.infra.repository.DivisionRepository;
@Transactional @Transactional
public class UpdateDepartmentImpl implements UpdateDepartment { public class UpdateDepartmentImpl implements UpdateDepartment {
DivisionRepository divisionRepository; DepartmentRepository departmentRepository;
@Autowired @Autowired
public UpdateDepartmentImpl(DivisionRepository divisionRepository) { public UpdateDepartmentImpl(DepartmentRepository departmentRepository) {
this.divisionRepository = divisionRepository; this.departmentRepository = departmentRepository;
} }
/** /**
* departmentInfo の情報を元に * department の情報を元に department table のレコードを更新する
* division table(division join department join headquarters) のレコードを更新する
* *
* @param departmentInfo 更新のデータ * @param department 更新のデータ
*/ */
public void updateDepartment(DepartmentInfo departmentInfo) { public void updateDepartment(Department department) {
DivisionEntity divisionEntity = DivisionEntity.convertFrom(departmentInfo);
DepartmentEntity departmentEntity = divisionEntity.getDepartment();
HeadquartersEntity headquartersEntity = divisionEntity.getDepartment().getHeadquarters();
departmentEntity.setNmDepartment(
divisionEntity.getDepartment()
.getNmDepartment());
headquartersEntity.setNmHeadquarters(
divisionEntity.getDepartment()
.getHeadquarters()
.getNmHeadquarters());
departmentEntity.setHeadquarters(headquartersEntity);
divisionEntity.setDepartment(departmentEntity);
divisionRepository.save(divisionEntity);
}
departmentRepository.save(DepartmentEntity.convertFrom(department));
}
} }

View File

@@ -1,13 +1,12 @@
package com.example.rhizome.app.domain.service.impl; 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.Employee; import com.example.rhizome.app.domain.model.Employee;
import com.example.rhizome.app.domain.service.UpdateEmployee; import com.example.rhizome.app.domain.service.UpdateEmployee;
import com.example.rhizome.app.infra.entity.InsertEmployeeEntity; import com.example.rhizome.app.infra.entity.EmployeeEntity;
import com.example.rhizome.app.infra.repository.EmployeeRepository; import com.example.rhizome.app.infra.repository.EmployeeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/** /**
* employee の更新系の機能を集約させるサービスクラスです。 * employee の更新系の機能を集約させるサービスクラスです。
@@ -31,7 +30,7 @@ public class UpdateEmployeeImpl implements UpdateEmployee {
*/ */
public void updateEmployee(Employee beforeEmployee, Employee updateEmployee) { public void updateEmployee(Employee beforeEmployee, Employee updateEmployee) {
employeeRepository.save(InsertEmployeeEntity.convertFrom(mergeEmployee(beforeEmployee, updateEmployee))); employeeRepository.save(EmployeeEntity.convertFrom(mergeEmployee(beforeEmployee, updateEmployee)));
} }
@@ -52,10 +51,9 @@ public class UpdateEmployeeImpl implements UpdateEmployee {
updateEmployee.getKnEmployee(), updateEmployee.getKnEmployee(),
updateEmployee.getMailAddress(), updateEmployee.getMailAddress(),
updateEmployee.getPassword().isBlank() ? beforeEmployee.getPassword() : updateEmployee.getPassword(), updateEmployee.getPassword().isBlank() ? beforeEmployee.getPassword() : updateEmployee.getPassword(),
updateEmployee.getHireDate(),
updateEmployee.getAdminAuth() == null ? beforeEmployee.getAdminAuth() : updateEmployee.getAdminAuth(), updateEmployee.getAdminAuth() == null ? beforeEmployee.getAdminAuth() : updateEmployee.getAdminAuth(),
updateEmployee.getIdDivision() == null ? beforeEmployee.getIdDivision() updateEmployee.getIdDepartment() == null ? beforeEmployee.getIdDepartment() : updateEmployee.getIdDepartment()
: updateEmployee.getIdDivision()); );
} }

View File

@@ -6,28 +6,15 @@
*/ */
package com.example.rhizome.app.infra.entity; package com.example.rhizome.app.infra.entity;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import com.example.rhizome.app.domain.model.Department; import com.example.rhizome.app.domain.model.Department;
import com.example.rhizome.app.domain.model.DepartmentInfo;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.util.List;
/** /**
* Department テーブルの Entity * Department テーブルの Entity
* *
@@ -38,34 +25,23 @@ import lombok.NoArgsConstructor;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class DepartmentEntity { public class DepartmentEntity {
/** /**
* 部ID * 部署ID
*/ */
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_department", nullable = false) @Column(name = "id_department", nullable = false)
private Integer idDepartment; private Integer idDepartment;
/** /**
* 部名 * 部署名
*/ */
@Column(name = "nm_department", nullable = false) @Column(name = "nm_department", nullable = false)
private String nmDepartment; private String nmDepartment;
/**
* 表示・非表示フラグ
*/
@Column(name = "is_display", nullable = false)
private Integer isDisplay;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "id_headquarters")
@Fetch(FetchMode.JOIN)
private HeadquartersEntity headquarters;
/** /**
* DepartmentEntity(DataAccess層依存)から Department(BusinessLogic層依存型)に変換します。(リスト版) * DepartmentEntity(DataAccess層依存)から Department(BusinessLogic層依存型)に変換します。
* *
* @param departmentEntityList department Table のリスト * @param departmentEntityList department Table のリスト
* @return List<Department> リスト * @return List<Department> リスト
@@ -77,48 +53,20 @@ public class DepartmentEntity {
.stream() .stream()
.map(departmentEntity -> new Department( .map(departmentEntity -> new Department(
departmentEntity.getIdDepartment(), departmentEntity.getIdDepartment(),
departmentEntity.getNmDepartment(), departmentEntity.getNmDepartment()
departmentEntity.getIsDisplay(),
departmentEntity.getHeadquarters() == null ? null
: departmentEntity.getHeadquarters().getIdHeadquarters()
)).toList(); )).toList();
} }
/** /**
* RegisterDepartmentEntity(DataAccess層依存)から Department(BusinessLogic層依存型)に変換します。(リスト版) * Department(BusinessLogic層依存型) から DepartmentEntity(DataAccess層依存)に変換します。
* *
* @param departmentEntityList RegisterDepartmentEntity のリスト * @param department department モデルの値
* @return Departmentのリスト * @return DepartmentEntity に変換したインスタンス
*/ */
public static List<Department> createDepartmentListBy(List<RegisterDepartmentEntity> departmentEntityList) { public static DepartmentEntity convertFrom(Department department) {
// Stream API を利用するとこうなります。
return departmentEntityList
.stream()
.map(departmentEntity -> new Department(
departmentEntity.getIdDepartment(),
departmentEntity.getNmDepartment(),
departmentEntity.getIsDisplay(),
departmentEntity.getIdHeadquarters() == null ? null : departmentEntity.getIdHeadquarters()
)).toList();
}
/**
* DepartmentInfo から DepartmentEntity に変換します。
*
* @param departmentInfo DepartmentInfo
* @return DepartmentEntity のインスタンス
*/
public static DepartmentEntity convertFrom(DepartmentInfo departmentInfo) {
return new DepartmentEntity( return new DepartmentEntity(
departmentInfo.getIdDepartment(), department.getIdDepartment(),
departmentInfo.getNmDepartment(), department.getNmDepartment()
(Integer) 0, );
new HeadquartersEntity(
departmentInfo.getIdHeadquarters(),
departmentInfo.getNmHeadquarters(),
(Integer) 0));
} }
} }

View File

@@ -1,165 +0,0 @@
package com.example.rhizome.app.infra.entity;
import java.util.List;
import javax.persistence.NamedEntityGraph;
import com.example.rhizome.app.domain.model.AllDepartmentInfo;
import com.example.rhizome.app.domain.model.Department;
import com.example.rhizome.app.domain.model.DepartmentInfo;
import com.example.rhizome.app.domain.model.Division;
import com.example.rhizome.app.domain.model.Headquarters;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Division join Department,Headquarters テーブルの Entity
*
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@NamedEntityGraph(name = "division_with_department_with_headquarters", includeAllAttributes = true)
public class DepartmentInfoEntity {
private DivisionEntity division;
private DepartmentEntity department;
private HeadquartersEntity headquarters;
/**
* DepartmentInfo をDepartmentInfoEntityに変換します。
*
*@param departmentInfo DepartmentInfo のインスタンス
*@return DepartmentInfoEntityのインスタンス
*/
public static DepartmentInfoEntity convertFrom(DepartmentInfo departmentInfo) {
return new DepartmentInfoEntity(
new DivisionEntity(
departmentInfo.getIdDivision(),
departmentInfo.getNmDivision(),
0,
new DepartmentEntity(
departmentInfo.getIdDepartment(),
departmentInfo.getNmDepartment(),
0,
new HeadquartersEntity(
departmentInfo.getIdHeadquarters(),
departmentInfo.getNmHeadquarters(),
0))),
new DepartmentEntity(
departmentInfo.getIdDepartment(),
departmentInfo.getNmDepartment(),
0,
new HeadquartersEntity(
departmentInfo.getIdHeadquarters(),
departmentInfo.getNmHeadquarters(),
0)),
new HeadquartersEntity(
departmentInfo.getIdHeadquarters(),
departmentInfo.getNmHeadquarters(),
0)
);
}
/**
* DepartmentInfoEntity を AllDepartmentInfo に変換します。
*
* @param departmentInfoEntity  DepartmentInfoEntity のインスタンス
* @return AllDepartmentInfo のインスタンス
*/
public static AllDepartmentInfo createDepartmentInfo(DepartmentInfoEntity departmentInfoEntity) {
return new AllDepartmentInfo(
new Division(
departmentInfoEntity.getDivision() == null ? null
: departmentInfoEntity.getDivision().getIdDivision(),
departmentInfoEntity.getDivision() == null ? null
: departmentInfoEntity.getDivision().getNmDivision(),
departmentInfoEntity.getDivision() == null ? null
: departmentInfoEntity.getDivision().getIsDisplay(),
departmentInfoEntity.getDepartment() == null ? null
: departmentInfoEntity.getDepartment().getIdDepartment()),
new Department(
departmentInfoEntity.getDepartment() == null ? null
: departmentInfoEntity.getDepartment().getIdDepartment(),
departmentInfoEntity.getDepartment() == null ? null
: departmentInfoEntity.getDepartment().getNmDepartment(),
departmentInfoEntity.getDepartment() == null ? null
: departmentInfoEntity.getDepartment().getIsDisplay(),
departmentInfoEntity.getHeadquarters() == null ? null
: departmentInfoEntity.getHeadquarters().getIdHeadquarters()),
new Headquarters(
departmentInfoEntity.getHeadquarters() == null ? null
: departmentInfoEntity.getHeadquarters().getIdHeadquarters(),
departmentInfoEntity.getHeadquarters() == null ? null
: departmentInfoEntity.getHeadquarters().getNmHeadquarters(),
departmentInfoEntity.getHeadquarters() == null ? null
: departmentInfoEntity.getHeadquarters().getIsDisplay()));
}
/**
* DepartmentInfoEntity を AllDepartmentInfo に変換します。
* (リスト版)
*
* @param departmentInfoEntity DepartmentInfoEntity インスタンスのリスト
* @return AllDepartmentInfo インスタンスのリスト
*/
public static List<AllDepartmentInfo> createDepartmentInfoList(List<DepartmentInfoEntity> departmentInfoEntity) {
// StreamAPI を使うとこうなります。
return departmentInfoEntity.stream().map(DepartmentInfoEntity::createDepartmentInfo).toList();
}
/**
* DivisionEntity を AllDepartmentInfo に変換します。
*
* @param divisionEntity DivisionEntity インスタンス
* @return AllDepartmentInfo インスタンス
*/
public static AllDepartmentInfo createDepartmentInfo(DivisionEntity divisionEntity) {
return new AllDepartmentInfo(
new Division(
divisionEntity.getIdDivision(),
divisionEntity.getNmDivision(),
divisionEntity.getIsDisplay(),
divisionEntity.getDepartment().getIdDepartment()),
new Department(
divisionEntity.getDepartment() == null ? null
: divisionEntity.getDepartment().getIdDepartment(),
divisionEntity.getDepartment() == null ? null
: divisionEntity.getDepartment().getNmDepartment(),
divisionEntity.getDepartment() == null ? null : divisionEntity.getDepartment().getIsDisplay(),
divisionEntity.getDepartment().getHeadquarters() == null ? null
: divisionEntity.getDepartment().getHeadquarters().getIdHeadquarters()),
new Headquarters(
divisionEntity.getDepartment().getHeadquarters() == null ? null
: divisionEntity.getDepartment().getHeadquarters().getIdHeadquarters(),
divisionEntity.getDepartment().getHeadquarters() == null ? null
: divisionEntity.getDepartment().getHeadquarters().getNmHeadquarters(),
divisionEntity.getDepartment().getHeadquarters() == null ? null
: divisionEntity.getDepartment().getHeadquarters().getIsDisplay()));
}
/**
* DivisionEntity を AllDepartmentInfo に変換します。(リスト版)
*
* @param divisionEntity DivisionEntity インスタンスのリスト
* @return AllDepartmentInfo インスタンスのリスト
*/
public static List<AllDepartmentInfo> AfterSearchCreateDepartmentInfoList(List<DivisionEntity> divisionEntity) {
// StreamAPI を使うとこうなります。
return divisionEntity.stream().map(DepartmentInfoEntity::createDepartmentInfo).toList();
}
}

View File

@@ -1,127 +0,0 @@
package com.example.rhizome.app.infra.entity;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import com.example.rhizome.app.domain.model.DepartmentInfo;
import com.example.rhizome.app.domain.model.Division;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Division テーブルの Entity
*
*/
@Entity
@Table(name = "division")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DivisionEntity {
/**
* 課ID
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_division", nullable = false)
private Integer idDivision;
/**
* 課名
*/
@Column(name = "nm_division", nullable = false)
private String nmDivision;
/**
* 表示・非表示フラグ
*/
@Column(name = "is_display", nullable = false)
private Integer isDisplay;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "id_department")
@Fetch(FetchMode.JOIN)
private DepartmentEntity department;
/**
* DepartmentInfo を DivisionEntity に変換します。
*
* @param departmentInfo  DepartmentInfo のインスタンス
* @return DivisionEntity join Department,Headquarters のインスタンス
*/
public static DivisionEntity convertFrom(DepartmentInfo departmentInfo) {
return new DivisionEntity(
departmentInfo.getIdDivision(),
departmentInfo.getNmDivision(),
(Integer) 0,
new DepartmentEntity(
departmentInfo.getIdDepartment(),
departmentInfo.getNmDepartment(),
(Integer) 0,
new HeadquartersEntity(
departmentInfo.getIdHeadquarters(),
departmentInfo.getNmHeadquarters(),
(Integer) 0)));
}
/**
* DivisionEntity を Divisionに変換します。
*
* @param divisionEntity  DivisionEntity のインスタンス
* @return Divisionのインスタンス
*/
public static Division createDivision(DivisionEntity divisionEntity) {
// 値を既に持ったインスタンスの生成に、コンストラクタを使用するとこうなります。
return new Division(
divisionEntity.getIdDivision(),
divisionEntity.getNmDivision(),
divisionEntity.getIsDisplay(),
divisionEntity.getDepartment().getIdDepartment()
);
}
/**
* DivisionEntity を Divisionに変換します。(リスト版)
*
* @param divisionEntity  DivisionEntity のインスタンスのリスト
* @return Divisionのインスタンスのリスト
*/
public static List<Division> createDivisionList(List<DivisionEntity> divisionEntityList) {
return divisionEntityList
.stream()
.map(DivisionEntity::createDivision).toList();
}
/**
* RegisterDivisionEntity を Divisionに変換します。(リスト版)
*
* @param divisionEntityList  RegisterDivisionEntity のインスタンスのリスト
* @return Divisionのインスタンスのリスト
*/
public static List<Division> createRegisterDivisionList(List<RegisterDivisionEntity> divisionEntityList) {
return divisionEntityList
.stream()
.map(divisionEntity -> new Division(
divisionEntity.getIdDivision(),
divisionEntity.getNmDivision(),
divisionEntity.getIsDisplay(),
divisionEntity.getIdDepartment() == null ? null : divisionEntity.getIdDepartment()
)).toList();
}
}

View File

@@ -1,157 +1,118 @@
package com.example.rhizome.app.infra.entity; package com.example.rhizome.app.infra.entity;
import java.util.List;
import javax.persistence.NamedEntityGraph;
import com.example.rhizome.app.domain.model.AllEmployeeInfo;
import com.example.rhizome.app.domain.model.Department; import com.example.rhizome.app.domain.model.Department;
import com.example.rhizome.app.domain.model.Division;
import com.example.rhizome.app.domain.model.Employee; import com.example.rhizome.app.domain.model.Employee;
import com.example.rhizome.app.domain.model.Headquarters; import com.example.rhizome.app.domain.model.EmployeeInfo;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import javax.persistence.*;
import java.util.List;
/** /**
* Employee + Division + Department + Headquarters の Join 情報を保持するEntity * Employee + Department の Join 情報を保持するEntity
* *
* @author IT-College * @author IT-College
*/ */
@Entity
@Table(name = "employee")
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@NamedEntityGraph(name = "employee_with_division_with_department_with_headquarters", includeAllAttributes = true) @NamedEntityGraph(
name = "employee_with_department",
includeAllAttributes = true
)
public class EmployeeDepartmentEntity { public class EmployeeDepartmentEntity {
private EmployeeEntity Employee; /**
* 社員ID
private DivisionEntity division; */
@Id
private DepartmentEntity department; @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_employee", nullable = false)
private HeadquartersEntity headquarters; private Integer idEmployee;
/** /**
* EmployeeDepartmentEntity(DataAccess層依存) を AllEmployeeInfo(BusinessLogic層依存) に変換します。 * 社員名
*/
@Column(name = "nm_employee", nullable = false)
private String nmEmployee;
/**
* 社員名カナ
*/
@Column(name = "kn_employee", nullable = false)
private String knEmployee;
/**
* メールアドレス
*/
@Column(name = "mail_address", nullable = false)
private String mailAddress;
/**
* パスワード
*/
@Column(name = "password", nullable = false)
private String password;
/**
* 管理者権限
*/
@Column(name = "admin_auth", nullable = false)
private Integer adminAuth;
@ManyToOne
@JoinColumn(name = "id_department", referencedColumnName = "id_department", insertable = false, updatable = false)
@Fetch(FetchMode.JOIN)
private DepartmentEntity department;
/**
* EmployeeDepartmentEntity(DataAccess層依存) を EmployeeInfo(BusinessLogic層依存) に変換します。
* *
* @param employeeDepartmentEntity  EmployeeDepartmentEntity のインスタンス * @param employeeDepartmentEntity  EmployeeDepartmentEntity のインスタンス
* @return AllEmployeeInfo のインスタンス * @return EmployeeInfo のインスタンス
*/ */
public static AllEmployeeInfo createEmployeeInfo(EmployeeDepartmentEntity employeeDepartmentEntity) { public static EmployeeInfo createEmployeeInfo(EmployeeDepartmentEntity employeeDepartmentEntity) {
// コンストラクタを使って書くとSetterを使用するより簡略化出来ます。 // コンストラクタを使って書くとSetterを使用するより簡略化出来ます。
// 混乱してしまう人は落ち着いて EmployeeInfo のフィールドを見に行って、 // 混乱してしまう人は落ち着いて EmployeeInfo のフィールドを見に行って、
// どうしてこの書き方が出来るのかを理解できる様になりましょう。 // どうしてこの書き方が出来るのかを理解できる様になりましょう。
return new AllEmployeeInfo( return new EmployeeInfo(
new Employee( new Employee(
employeeDepartmentEntity.getEmployee().getIdEmployee(), employeeDepartmentEntity.getIdEmployee(),
employeeDepartmentEntity.getEmployee().getNmEmployee(), employeeDepartmentEntity.getNmEmployee(),
employeeDepartmentEntity.getEmployee().getKnEmployee(), employeeDepartmentEntity.getKnEmployee(),
employeeDepartmentEntity.getEmployee().getMailAddress(), employeeDepartmentEntity.getMailAddress(),
employeeDepartmentEntity.getEmployee().getPassword(), employeeDepartmentEntity.getPassword(),
employeeDepartmentEntity.getEmployee().getHireDate(), employeeDepartmentEntity.getAdminAuth(),
employeeDepartmentEntity.getEmployee().getAdminAuth(), employeeDepartmentEntity.getDepartment() == null ? null : employeeDepartmentEntity.getDepartment().getIdDepartment()
employeeDepartmentEntity.getDivision() == null ? null ),
: employeeDepartmentEntity.getDivision().getIdDivision()),
new Division(
employeeDepartmentEntity.getDivision() == null ? null
: employeeDepartmentEntity.getDivision().getIdDivision(),
employeeDepartmentEntity.getDivision() == null ? null
: employeeDepartmentEntity.getDivision().getNmDivision(),
employeeDepartmentEntity.getDivision() == null ? null
: employeeDepartmentEntity.getDivision().getIsDisplay(),
employeeDepartmentEntity.getDepartment() == null ? null
: employeeDepartmentEntity.getDepartment().getIdDepartment()),
new Department( new Department(
employeeDepartmentEntity.getDepartment() == null ? null employeeDepartmentEntity.getDepartment() == null ? null : employeeDepartmentEntity.getDepartment().getIdDepartment(),
: employeeDepartmentEntity.getDepartment().getIdDepartment(), employeeDepartmentEntity.getDepartment() == null ? null : employeeDepartmentEntity.getDepartment().getNmDepartment()
employeeDepartmentEntity.getDepartment() == null ? null )
: employeeDepartmentEntity.getDepartment().getNmDepartment(), );
employeeDepartmentEntity.getDepartment() == null ? null
: employeeDepartmentEntity.getDepartment().getIsDisplay(),
employeeDepartmentEntity.getHeadquarters() == null ? null
: employeeDepartmentEntity.getHeadquarters().getIdHeadquarters()),
new Headquarters(
employeeDepartmentEntity.getHeadquarters() == null ? null
: employeeDepartmentEntity.getHeadquarters().getIdHeadquarters(),
employeeDepartmentEntity.getHeadquarters() == null ? null
: employeeDepartmentEntity.getHeadquarters().getNmHeadquarters(),
employeeDepartmentEntity.getHeadquarters() == null ? null
: employeeDepartmentEntity.getHeadquarters().getIsDisplay()));
} }
/** /**
* EmployeeDepartmentEntity(DataAccess層依存) を AllEmployeeInfo(BusinessLogic層依存) に変換します。 * EmployeeDepartmentEntity(DataAccess層依存) を EmployeeInfo(BusinessLogic層依存) に変換します。
* (リスト版) * (リスト版)
* *
* @param employeeDepartmentEntityList EmployeeDepartmentEntity インスタンスのリスト * @param employeeDepartmentEntityList EmployeeDepartmentEntity インスタンスのリスト
* @return AllEmployeeInfo インスタンスのリスト * @return EmployeeInfo インスタンスのリスト
*/ */
public static List<AllEmployeeInfo> createEmployeeInfoList( public static List<EmployeeInfo> createEmployeeInfoList(List<EmployeeDepartmentEntity> employeeDepartmentEntityList) {
List<EmployeeDepartmentEntity> employeeDepartmentEntityList) {
// StreamAPI を使うとこうなります。 // StreamAPI を使うとこうなります。
return employeeDepartmentEntityList.stream().map(EmployeeDepartmentEntity::createEmployeeInfo).toList(); return employeeDepartmentEntityList.stream().map(EmployeeDepartmentEntity::createEmployeeInfo).toList();
} }
/**
* EmployeeEntity(DataAccess層依存) を AllEmployeeInfo(BusinessLogic層依存) に変換します。
*
* @param employeeEntity  EmployeeEntity のインスタンス
* @return AllEmployeeInfo のインスタンス
*/
public static AllEmployeeInfo createEmployeeInfo(EmployeeEntity employeeEntity) {
return new AllEmployeeInfo(
new Employee(
employeeEntity.getIdEmployee(),
employeeEntity.getNmEmployee(),
employeeEntity.getKnEmployee(),
employeeEntity.getMailAddress(),
employeeEntity.getPassword(),
employeeEntity.getHireDate(),
employeeEntity.getAdminAuth(),
employeeEntity.getDivision() == null ? null : employeeEntity.getDivision().getIdDivision()),
new Division(
employeeEntity.getDivision() == null ? null : employeeEntity.getDivision().getIdDivision(),
employeeEntity.getDivision() == null ? null : employeeEntity.getDivision().getNmDivision(),
employeeEntity.getDivision() == null ? null : employeeEntity.getDivision().getIsDisplay(),
employeeEntity.getDivision().getDepartment() == null ? null
: employeeEntity.getDivision().getDepartment().getIdDepartment()),
new Department(
employeeEntity.getDivision().getDepartment() == null ? null
: employeeEntity.getDivision().getDepartment().getIdDepartment(),
employeeEntity.getDivision().getDepartment() == null ? null
: employeeEntity.getDivision().getDepartment().getNmDepartment(),
employeeEntity.getDivision().getDepartment() == null ? null
: employeeEntity.getDivision().getDepartment().getIsDisplay(),
employeeEntity.getDivision().getDepartment().getHeadquarters() == null ? null
: employeeEntity.getDivision().getDepartment().getHeadquarters().getIdHeadquarters()),
new Headquarters(
employeeEntity.getDivision().getDepartment().getHeadquarters() == null ? null
: employeeEntity.getDivision().getDepartment().getHeadquarters().getIdHeadquarters(),
employeeEntity.getDivision().getDepartment().getHeadquarters() == null ? null
: employeeEntity.getDivision().getDepartment().getHeadquarters().getNmHeadquarters(),
employeeEntity.getDivision().getDepartment().getHeadquarters() == null ? null
: employeeEntity.getDivision().getDepartment().getHeadquarters().getIsDisplay()));
}
/**
* EmployeeEntity(DataAccess層依存) を AllEmployeeInfo(BusinessLogic層依存) に変換します。(リスト版)
*
* @param employeeEntity  EmployeeEntity のインスタンスのリスト
* @return AllEmployeeInfo のインスタンスのリスト
*/
public static List<AllEmployeeInfo> AfterSearchCreateEmployeeInfoList(List<EmployeeEntity> employeeEntityList) {
// StreamAPI を使うとこうなります。
return employeeEntityList.stream().map(EmployeeDepartmentEntity::createEmployeeInfo).toList();
}
} }

View File

@@ -6,32 +6,21 @@
*/ */
package com.example.rhizome.app.infra.entity; package com.example.rhizome.app.infra.entity;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import com.example.rhizome.app.domain.model.Employee; import com.example.rhizome.app.domain.model.Employee;
import com.example.rhizome.app.domain.model.EmployeeInfo;
import com.example.rhizome.app.domain.model.LoginUser; import com.example.rhizome.app.domain.model.LoginUser;
import com.example.rhizome.app.domain.model.SearchConditionEmployee; import com.example.rhizome.app.domain.model.SearchConditionEmployee;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.util.List;
/** /**
* EmployeeテーブルのEntity * EmployeeテーブルのEntity
* *
* @author IT-College
*/ */
@Entity @Entity
@Table(name = "employee") @Table(name = "employee")
@@ -72,11 +61,6 @@ public class EmployeeEntity {
@Column(name = "password", nullable = false) @Column(name = "password", nullable = false)
private String password; private String password;
/**
* 入社年月日
*/
@Column(name = "hire_Date", nullable = false)
private String hireDate;
/** /**
* 管理者権限 * 管理者権限
*/ */
@@ -86,32 +70,27 @@ public class EmployeeEntity {
/** /**
* 部署ID * 部署ID
*/ */
@ManyToOne @Column(name = "id_department", nullable = false)
@JoinColumn(name = "id_division") private Integer idDepartment;
@Fetch(FetchMode.JOIN)
private DivisionEntity division;
/** /**
* EmployeeInfo(BusinessLogic 依存)を EmployeeEntity(DataAccess層依存)に変換します。 * Employee(BusinessLogic 依存)を EmployeeEntity(DataAccess層依存)に変換します。
* *
* @param employeeInfo EmployeeInfo Table の中身 * @param employee Employee Table の中身
* @return EmployeeEntity のインスタンス(1レコード分) * @return EmployeeEntity のインスタンス(1レコード分)
*/ */
public static EmployeeEntity convertFrom(EmployeeInfo employeeInfo) { public static EmployeeEntity convertFrom(Employee employee) {
// 値を既に持ったインスタンスの生成に、コンストラクタを使用するとこうなります。 // 値を既に持ったインスタンスの生成に、コンストラクタを使用するとこうなります。
return new EmployeeEntity( return new EmployeeEntity(
employeeInfo.getEmployee().getIdEmployee(), employee.getIdEmployee(),
employeeInfo.getEmployee().getNmEmployee(), employee.getNmEmployee(),
employeeInfo.getEmployee().getKnEmployee(), employee.getKnEmployee(),
employeeInfo.getEmployee().getMailAddress(), employee.getMailAddress(),
employeeInfo.getEmployee().getPassword(), employee.getPassword(),
employeeInfo.getEmployee().getHireDate(), employee.getAdminAuth(),
employeeInfo.getEmployee().getAdminAuth(), employee.getIdDepartment()
new DivisionEntity( );
employeeInfo.getDivision().getIdDivision(),
employeeInfo.getDivision().getNmDivision(),
employeeInfo.getDivision().getIsDisplay(),
null));
} }
/** /**
@@ -128,6 +107,8 @@ public class EmployeeEntity {
employeeEntity.setNmEmployee(searchConditionEmployee.getNmEmployee()); employeeEntity.setNmEmployee(searchConditionEmployee.getNmEmployee());
employeeEntity.setKnEmployee(searchConditionEmployee.getKnEmployee()); employeeEntity.setKnEmployee(searchConditionEmployee.getKnEmployee());
employeeEntity.setMailAddress(searchConditionEmployee.getMailAddress()); employeeEntity.setMailAddress(searchConditionEmployee.getMailAddress());
employeeEntity.setIdDepartment(searchConditionEmployee.getIdDepartment());
return employeeEntity; return employeeEntity;
@@ -147,9 +128,9 @@ public class EmployeeEntity {
employeeEntity.getKnEmployee(), employeeEntity.getKnEmployee(),
employeeEntity.getMailAddress(), employeeEntity.getMailAddress(),
employeeEntity.getPassword(), employeeEntity.getPassword(),
employeeEntity.getHireDate(),
employeeEntity.getAdminAuth(), employeeEntity.getAdminAuth(),
employeeEntity.getDivision().getIdDivision()); employeeEntity.getIdDepartment()
);
} }
/** /**
@@ -186,7 +167,8 @@ public class EmployeeEntity {
getMailAddress(), getMailAddress(),
getPassword(), getPassword(),
getAdminAuth(), getAdminAuth(),
getDivision().getIdDivision()); getIdDepartment()
);
} }
} }

View File

@@ -1,81 +0,0 @@
package com.example.rhizome.app.infra.entity;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import com.example.rhizome.app.domain.model.DepartmentInfo;
import com.example.rhizome.app.domain.model.Headquarters;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* HeadquartersテーブルのEntity
*
*/
@Entity
@Table(name = "headquarters")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class HeadquartersEntity {
/**
* 本部ID
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_headquarters", nullable = false)
private Integer idHeadquarters;
/**
* 本部名
*/
@Column(name = "nm_headquarters", nullable = false)
private String nmHeadquarters;
/**
* 表示・非表示フラグ
*/
@Column(name = "is_display", nullable = false)
private Integer isDisplay;
public static Headquarters createHeadquarters(HeadquartersEntity headquartersEntity) {
// 値を既に持ったインスタンスの生成に、コンストラクタを使用するとこうなります。
return new Headquarters(
headquartersEntity.getIdHeadquarters(),
headquartersEntity.getNmHeadquarters(),
headquartersEntity.getIsDisplay());
}
/**
* DBから返ってきたHeadquartersEntityのリストをHeadquartersのリストに変換する
*
* @param HeadquartersEntityのリスト
* @return headquartersのリスト
*/
public static List<Headquarters> createHeadquartersList(List<HeadquartersEntity> headquartersEntityList) {
return headquartersEntityList
.stream()
.map(HeadquartersEntity::createHeadquarters).toList();
}
/**
* 三つのテーブルがつながった部署情報であるDepartmentInfoから
* 本部情報だけを引っ張ってきてHeadquartersEntityに入れる
*
* @param DepartmentInfo
* @return 新しく作成されたHeadquartersEntity
*
*/
public static HeadquartersEntity convertFrom(DepartmentInfo departmentInfo) {
return new HeadquartersEntity(
departmentInfo.getIdHeadquarters(),
departmentInfo.getNmHeadquarters(),
(Integer) 0);
}
}

View File

@@ -1,96 +0,0 @@
package com.example.rhizome.app.infra.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import com.example.rhizome.app.domain.model.Employee;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 社員情報登録用のEmployeeテーブルのEntity
*
*/
@Entity
@Table(name = "employee")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class InsertEmployeeEntity {
/**
* 社員ID
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_employee", nullable = false)
private Integer idEmployee;
/**
* 社員名
*/
@Column(name = "nm_employee", nullable = false)
private String nmEmployee;
/**
* 社員名カナ
*/
@Column(name = "kn_employee", nullable = false)
private String knEmployee;
/**
* メールアドレス
*/
@Column(name = "mail_address", nullable = false)
private String mailAddress;
/**
* パスワード
*/
@Column(name = "password", nullable = false)
private String password;
/**
* 入社年月日
*/
@Column(name = "hire_Date", nullable = false)
private String hireDate;
/**
* 管理者権限
*/
@Column(name = "admin_auth", nullable = false)
private Integer adminAuth;
/**
* 部署ID
*/
@Column(name = "id_division", nullable = false)
private Integer idDivision;
/**
* Employee(BusinessLogic 依存)を InsertEmployeeEntity(DataAccess層依存)に変換します。
*
* @param employee Employee Table の中身
* @return InsertEmployeeEntity のインスタンス(1レコード分)
*/
public static InsertEmployeeEntity convertFrom(Employee employee) {
// 値を既に持ったインスタンスの生成に、コンストラクタを使用するとこうなります。
return new InsertEmployeeEntity(
employee.getIdEmployee(),
employee.getNmEmployee(),
employee.getKnEmployee(),
employee.getMailAddress(),
employee.getPassword(),
employee.getHireDate(),
employee.getAdminAuth(),
employee.getIdDivision());
}
}

View File

@@ -1,47 +0,0 @@
package com.example.rhizome.app.infra.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 社員情報登録用のDepartment テーブルの Entity
*
*/
@Entity
@Table(name = "department")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RegisterDepartmentEntity {
/**
* 部ID
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_department", nullable = false)
private Integer idDepartment;
/**
* 部名
*/
@Column(name = "nm_department", nullable = false)
private String nmDepartment;
/**
* 表示・非表示フラグ
*/
@Column(name = "is_display", nullable = false)
private Integer isDisplay;
@Column(name = "id_headquarters", nullable = false)
private Integer idHeadquarters;
}

View File

@@ -1,83 +0,0 @@
package com.example.rhizome.app.infra.repository;
import java.util.List;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.EntityGraph;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Repository;
import com.example.rhizome.app.infra.entity.DepartmentInfoEntity;
import com.example.rhizome.app.infra.entity.DivisionEntity;
@Repository
public interface DepartmentInfoRepository
extends JpaRepository<DivisionEntity, Integer>, JpaSpecificationExecutor<DivisionEntity> {
static Specification<DivisionEntity> idDivisionEqual(Integer idDivision) {
return idDivision == null ? null :
// 戻り値の型 Specification<EmployeeDepartmentEntity> にキャスト
(Specification<DivisionEntity>)
// ラムダ式で記載しているが書いてあることは criteriaBuilder を使って Where句の後の "'idEmployee' = idEmployee(変数)"
// を作成している
(root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.equal(root.get("idDivision"), idDivision);
}
static Specification<DivisionEntity> nmDivisionEqual(String nmDivision) {
return (nmDivision == null || nmDivision.isEmpty()) ? null
: (Specification<DivisionEntity>) (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder
.equal(root.get("nmDivision"), nmDivision);
}
static Specification<DivisionEntity> nmDepartmentEqual(String nmDepartment) {
return (nmDepartment == null || nmDepartment.isEmpty()) ? null
: (Specification<DivisionEntity>) (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder
.equal(root.join("department").get("nmDepartment"), nmDepartment);
}
static Specification<DivisionEntity> nmHeadquartersEqual(String nmHeadquarters) {
return (nmHeadquarters == null || nmHeadquarters.isEmpty()) ? null
: (Specification<DivisionEntity>) (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder
.equal(root.join("department").join("headquarters").get("nmHeadquarters"), nmHeadquarters);
}
@Query("SELECT DISTINCT new com.example.rhizome.app.infra.entity.DepartmentInfoEntity(di,de,h)FROM DivisionEntity di "
+ "INNER JOIN di.department de "
+ "INNER JOIN de.headquarters h ")
List<DepartmentInfoEntity> searchAllDepartmentTable();
@EntityGraph(attributePaths = { "department", "department.headquarters" })
List<DivisionEntity> findAll(@Nullable Specification<DivisionEntity> spec);
@EntityGraph(attributePaths = { "department", "department.headquarters" })
void save(@Nullable Specification<DivisionEntity> spec);
@Query("SELECT DISTINCT new com.example.rhizome.app.infra.entity.DepartmentInfoEntity(di,de,h)FROM DivisionEntity di "
+ "INNER JOIN di.department de "
+ "INNER JOIN de.headquarters h "
+ "WHERE di.nmDivision = :nmDivision "
+ "AND de.nmDepartment = :nmDepartment "
+ "AND h.nmHeadquarters = :nmHeadquarters"
+ "")
List<DepartmentInfoEntity> searchAllDepartmentTable(
@Param("nmHeadquarters") String nmHeadquarters,
@Param("nmDepartment") String nmDepartment,
@Param("nmDivision") String nmDivision);
@Query("SELECT DISTINCT new com.example.rhizome.app.infra.entity.DepartmentInfoEntity(di,de,h)FROM DivisionEntity di "
+ "INNER JOIN di.department de "
+ "INNER JOIN de.headquarters h "
+ "WHERE di.idDivision = :idDivision "
+ "AND de.idDepartment = :idDepartment "
+ "AND h.idHeadquarters = :idHeadquarters"
+ "")
List<DepartmentInfoEntity> searchAllDepartmentTable(
@Param("idHeadquarters") Integer idHeadquarters,
@Param("idDepartment") Integer idDepartment,
@Param("idDivision") Integer idDivision);
}

View File

@@ -1,12 +1,11 @@
package com.example.rhizome.app.infra.repository; package com.example.rhizome.app.infra.repository;
import com.example.rhizome.app.infra.entity.DepartmentEntity;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import com.example.rhizome.app.infra.entity.DepartmentEntity;
import com.example.rhizome.app.infra.entity.HeadquartersEntity;
/** /**
* Specification: * Specification:
@@ -21,11 +20,12 @@ import com.example.rhizome.app.infra.entity.HeadquartersEntity;
* 戻り値はクエリを格納しているPredicateオブジェクトとなります。 * 戻り値はクエリを格納しているPredicateオブジェクトとなります。
*/ */
@Repository @Repository
public interface DepartmentRepository public interface DepartmentRepository extends JpaRepository<DepartmentEntity, Integer>, JpaSpecificationExecutor<DepartmentEntity> {
extends JpaRepository<DepartmentEntity, Integer>, JpaSpecificationExecutor<DepartmentEntity> {
static Specification<DepartmentEntity> idDepartmentEqual(Integer idDepartment) { static Specification<DepartmentEntity> idDepartmentEqual(Integer idDepartment) {
return idDepartment == null ? null : return idDepartment == null ?
null :
// 戻り値の型 Specification<DepartmentEntity> にキャスト // 戻り値の型 Specification<DepartmentEntity> にキャスト
(Specification<DepartmentEntity>) (Specification<DepartmentEntity>)
// ラムダ式で記載しているが書いてあることは criteriaBuilder を使って Where句の後の "'idDepartment' = idDepartment(変数)" // ラムダ式で記載しているが書いてあることは criteriaBuilder を使って Where句の後の "'idDepartment' = idDepartment(変数)"
@@ -34,17 +34,17 @@ public interface DepartmentRepository
} }
static Specification<DepartmentEntity> nmDepartmentEqual(String nmDepartment) { static Specification<DepartmentEntity> nmDepartmentEqual(String nmDepartment) {
return (nmDepartment == null || nmDepartment.isEmpty()) ? null return (nmDepartment == null || nmDepartment.isEmpty()) ?
: (Specification<DepartmentEntity>) (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder null :
.like(root.get("nmDepartment"), nmDepartment); (Specification<DepartmentEntity>)
(root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.like(root.get("nmDepartment"), nmDepartment);
} }
static Specification<DepartmentEntity> nmDepartmentLike(String nmDepartment) { static Specification<DepartmentEntity> nmDepartmentLike(String nmDepartment) {
return (nmDepartment == null || nmDepartment.isEmpty()) ? null return (nmDepartment == null || nmDepartment.isEmpty()) ?
: (Specification<DepartmentEntity>) (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder null :
.like(root.get("nmDepartment"), "%" + nmDepartment + "%"); (Specification<DepartmentEntity>)
(root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.like(root.get("nmDepartment"), "%" + nmDepartment + "%");
} }
DepartmentEntity findByHeadquartersAndNmDepartment(HeadquartersEntity headquartersEntity, String nmDepartment);
} }

View File

@@ -1,48 +0,0 @@
package com.example.rhizome.app.infra.repository;
import javax.transaction.Transactional;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import com.example.rhizome.app.infra.entity.DivisionEntity;
@Repository
public interface DivisionRepository
extends JpaRepository<DivisionEntity, Integer>, JpaSpecificationExecutor<DivisionEntity> {
static Specification<DivisionEntity> idDivisionEqual(Integer idDivision) {
return idDivision == null ? null :
// 戻り値の型 Specification<DepartmentEntity> にキャスト
(Specification<DivisionEntity>)
// ラムダ式で記載しているが書いてあることは criteriaBuilder を使って Where句の後の "'idDepartment' = idDepartment(変数)"
// を作成している
(root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.equal(root.get("idDivision"), idDivision);
}
static Specification<DivisionEntity> nmDivisionEqual(String nmDivision) {
return (nmDivision == null || nmDivision.isEmpty()) ? null
: (Specification<DivisionEntity>) (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder
.like(root.get("nmDivision"), nmDivision);
}
static Specification<DivisionEntity> idDepartmentEqual(Integer idDepartment) {
return idDepartment == null ? null :
// 戻り値の型 Specification<DepartmentEntity> にキャスト
(Specification<DivisionEntity>)
// ラムダ式で記載しているが書いてあることは criteriaBuilder を使って Where句の後の "'idDepartment' = idDepartment(変数)"
// を作成している
(root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.equal(root.get("idDepartment"), idDepartment);
}
@Transactional
@Modifying
@Query("DELETE FROM DivisionEntity di "
+ "WHERE di.idDivision =:idDivision")
void deleteByIdDivision(Integer idDivision);
}

View File

@@ -1,18 +1,11 @@
package com.example.rhizome.app.infra.repository; package com.example.rhizome.app.infra.repository;
import java.util.List; import com.example.rhizome.app.infra.entity.EmployeeDepartmentEntity;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.EntityGraph;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import com.example.rhizome.app.infra.entity.EmployeeDepartmentEntity;
import com.example.rhizome.app.infra.entity.EmployeeEntity;
/** /**
* ワンポイント情報(ここで登場する関数型インターフェース Specification について解説します) * ワンポイント情報(ここで登場する関数型インターフェース Specification について解説します)
* Specification: * Specification:
@@ -27,48 +20,42 @@ import com.example.rhizome.app.infra.entity.EmployeeEntity;
* 戻り値はクエリを格納しているPredicateオブジェクトとなります。 * 戻り値はクエリを格納しているPredicateオブジェクトとなります。
*/ */
@Repository @Repository
public interface EmployeeInfoRepository public interface EmployeeInfoRepository extends JpaRepository<EmployeeDepartmentEntity, Integer>, JpaSpecificationExecutor<EmployeeDepartmentEntity> {
extends JpaRepository<EmployeeEntity, Integer>, JpaSpecificationExecutor<EmployeeEntity> {
static Specification<EmployeeEntity> idEmployeeEqual(Integer idEmployee) { static Specification<EmployeeDepartmentEntity> idEmployeeEqual(Integer idEmployee) {
return idEmployee == null ? null : return idEmployee == null ?
null :
// 戻り値の型 Specification<EmployeeDepartmentEntity> にキャスト // 戻り値の型 Specification<EmployeeDepartmentEntity> にキャスト
(Specification<EmployeeEntity>) (Specification<EmployeeDepartmentEntity>)
// ラムダ式で記載しているが書いてあることは criteriaBuilder を使って Where句の後の "'idEmployee' = idEmployee(変数)" // ラムダ式で記載しているが書いてあることは criteriaBuilder を使って Where句の後の "'idEmployee' = idEmployee(変数)"
// を作成している // を作成している
(root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.equal(root.get("idEmployee"), idEmployee); (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.equal(root.get("idEmployee"), idEmployee);
} }
static Specification<EmployeeEntity> nmEmployeeEqual(String nmEmployee) { static Specification<EmployeeDepartmentEntity> nmEmployeeEqual(String nmEmployee) {
return (nmEmployee == null || nmEmployee.isEmpty()) ? null return (nmEmployee == null || nmEmployee.isEmpty()) ?
: (Specification<EmployeeEntity>) (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder null :
.like(root.get("nmEmployee"), "%" + nmEmployee + "%"); (Specification<EmployeeDepartmentEntity>)
(root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.like(root.get("nmEmployee"), "%" + nmEmployee + "%");
} }
static Specification<EmployeeEntity> knEmployeeEqual(String knEmployee) { static Specification<EmployeeDepartmentEntity> knEmployeeEqual(String knEmployee) {
return (knEmployee == null || knEmployee.isEmpty()) ? null return (knEmployee == null || knEmployee.isEmpty()) ?
: (Specification<EmployeeEntity>) (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder null :
.like(root.get("knEmployee"), "%" + knEmployee + "%"); (Specification<EmployeeDepartmentEntity>)
(root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.like(root.get("knEmployee"), "%" + knEmployee + "%");
} }
static Specification<EmployeeEntity> mailAddressEqual(String mailAddress) { static Specification<EmployeeDepartmentEntity> mailAddressEqual(String mailAddress) {
return (mailAddress == null || mailAddress.isEmpty()) ? null return (mailAddress == null || mailAddress.isEmpty()) ?
: (Specification<EmployeeEntity>) (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder null :
.like(root.get("mailAddress"), "%" + mailAddress + "%"); (Specification<EmployeeDepartmentEntity>)
(root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.like(root.get("mailAddress"), "%" + mailAddress + "%");
} }
static Specification<EmployeeEntity> idDivisionEqual(Integer idDivision) { static Specification<EmployeeDepartmentEntity> idDepartmentEqual(Integer idDepartment) {
return (root, query, criteriaBuilder) -> idDivision == null ? null return (root, query, criteriaBuilder) ->
: criteriaBuilder.equal(root.join("division").get("idDivision"), idDivision); idDepartment == null ? null :
criteriaBuilder.equal(root.join("department").get("idDepartment"), idDepartment);
} }
@Query("SELECT DISTINCT new com.example.rhizome.app.infra.entity.EmployeeDepartmentEntity(e,di,de,h)FROM EmployeeEntity e "
+ "INNER JOIN e.division di "
+ "INNER JOIN di.department de "
+ "INNER JOIN de.headquarters h ")
List<EmployeeDepartmentEntity> findAlltable();
//全てのテーブルを結合してから検索
@EntityGraph(attributePaths = { "division", "division.department", "division.department.headquarters" })
List<EmployeeEntity> findAll(@Nullable Specification<EmployeeEntity> spec);
} }

View File

@@ -1,13 +1,11 @@
package com.example.rhizome.app.infra.repository; package com.example.rhizome.app.infra.repository;
import java.util.List; import com.example.rhizome.app.infra.entity.EmployeeEntity;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import com.example.rhizome.app.infra.entity.EmployeeEntity; import java.util.List;
import com.example.rhizome.app.infra.entity.InsertEmployeeEntity; import java.util.Optional;
@Repository @Repository
public interface EmployeeRepository extends JpaRepository<EmployeeEntity, Integer> { public interface EmployeeRepository extends JpaRepository<EmployeeEntity, Integer> {
@@ -26,7 +24,5 @@ public interface EmployeeRepository extends JpaRepository<EmployeeEntity, Intege
/** /**
* IDで検索 * IDで検索
**/ **/
List<EmployeeEntity> findByDivision_idDivision(Integer idDivision); List<EmployeeEntity> findByIdDepartment(Integer idDepartment);
void save(InsertEmployeeEntity insertEmployeeEntity);
} }

View File

@@ -1,30 +0,0 @@
package com.example.rhizome.app.infra.repository;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
import com.example.rhizome.app.infra.entity.HeadquartersEntity;
@Repository
public interface HeadquartersRepository
extends JpaRepository<HeadquartersEntity, Integer>, JpaSpecificationExecutor<HeadquartersEntity> {
static Specification<HeadquartersEntity> idHeadquartersEqual(Integer idHeadquarters) {
return idHeadquarters == null ? null :
// 戻り値の型 Specification<DepartmentEntity> にキャスト
(Specification<HeadquartersEntity>)
// ラムダ式で記載しているが書いてあることは criteriaBuilder を使って Where句の後の "'idDepartment' = idDepartment(変数)"
// を作成している
(root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.equal(root.get("idHeadquarters"),
idHeadquarters);
}
static Specification<HeadquartersEntity> nmHeadquartersEqual(String nmHeadquarters) {
return (nmHeadquarters == null || nmHeadquarters.isEmpty()) ? null
: (Specification<HeadquartersEntity>) (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder
.like(root.get("nmHeadquarters"), nmHeadquarters);
}
HeadquartersEntity findByNmHeadquarters(String nmHeadquarters);
}

View File

@@ -1,23 +0,0 @@
package com.example.rhizome.app.infra.repository;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
import com.example.rhizome.app.infra.entity.RegisterDepartmentEntity;
@Repository
public interface RegisterDepartmentRepository
extends JpaRepository<RegisterDepartmentEntity, Integer>, JpaSpecificationExecutor<RegisterDepartmentEntity> {
static Specification<RegisterDepartmentEntity> idHeadquartersEqual(Integer idHeadquarters) {
return idHeadquarters == null ? null :
//戻り値の型 Specification<DepartmentEntity> にキャスト
(Specification<RegisterDepartmentEntity>)
(root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.equal(root.get("idHeadquarters"),
idHeadquarters);
}
}

View File

@@ -1,18 +1,5 @@
package com.example.rhizome.app.presentation.controller; 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.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.PermissionCheck;
import com.example.rhizome.aop.aspect.SessionCheck; import com.example.rhizome.aop.aspect.SessionCheck;
@@ -23,6 +10,18 @@ import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAt
import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword;
import com.example.rhizome.app.presentation.form.DepartmentForm; import com.example.rhizome.app.presentation.form.DepartmentForm;
import com.example.rhizome.app.presentation.form.MessageForm; import com.example.rhizome.app.presentation.form.MessageForm;
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 javax.servlet.http.HttpSession;
import java.util.logging.Level;
import java.util.logging.Logger;
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.DELETE_DEPARTMENT;
/** /**
* 削除処理のコントロータ * 削除処理のコントロータ
@@ -46,7 +45,8 @@ public class DeleteDepartmentController {
DeleteDepartment deleteDepartment, DeleteDepartment deleteDepartment,
SearchDepartment searchDepartment, SearchDepartment searchDepartment,
SearchEmployee searchEmployee, SearchEmployee searchEmployee,
HttpSession httpSession) { HttpSession httpSession
) {
this.httpSession = httpSession; this.httpSession = httpSession;
this.deleteDepartment = deleteDepartment; this.deleteDepartment = deleteDepartment;
this.searchDepartment = searchDepartment; this.searchDepartment = searchDepartment;
@@ -56,26 +56,26 @@ public class DeleteDepartmentController {
/** /**
* 削除処理のコントローラ * 削除処理のコントローラ
* *
* @param idDivision 削除対象のidDivision * @param idDepartment 削除対象のidDepartment
* @param model ビューにデータを渡すためのコンテナ * @param model ビューにデータを渡すためのコンテナ
* @return 遷移先の画面 * @return 遷移先の画面
*/ */
@PermissionCheck @PermissionCheck
@SessionCheck @SessionCheck
@RequestMapping(value = DELETE_DEPARTMENT, method = RequestMethod.POST) @RequestMapping(value = DELETE_DEPARTMENT, method = RequestMethod.POST)
public String deleteEmployee(@RequestParam("idDivision") Integer idDivision, Model model) { public String deleteEmployee(@RequestParam("idDepartment") Integer idDepartment, Model model) {
try { try {
// 削除処理実施 // 削除処理実施
deleteExec(model, idDivision); deleteExec(model, idDepartment);
// 部署一覧を取得し、画面に返す用のクラスに詰め替える // 部署一覧を取得し、画面に返す用のクラスに詰め替える
// 作成した部署一覧をセット // 作成した部署一覧をセット
model.addAttribute( model.addAttribute(
PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST,
DepartmentForm.convertFrom( DepartmentForm.convertFrom(searchDepartment.selectAll())
searchDepartment.searchAllDepartmentTable())); );
// 検索画面に遷移 // 検索画面に遷移
return "forward:" + TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_ALL; return "forward:" + TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_ALL;
@@ -98,27 +98,27 @@ public class DeleteDepartmentController {
* @param model ビューにデータを渡すためのコンテナ * @param model ビューにデータを渡すためのコンテナ
* @param idDepartment 削除対象のidDepartment * @param idDepartment 削除対象のidDepartment
*/ */
private void deleteExec(Model model, Integer idDivision) { private void deleteExec(Model model, Integer idDepartment) {
final String DELETE_TARGET_ID_CAN_NOT_DELETE = "1名以上が所属している部署は削除出来ません。"; final String DELETE_TARGET_ID_CAN_NOT_DELETE = "1名以上が所属している部署は削除出来ません。";
final String DELETE_COMPLETE = "削除しました。"; final String DELETE_COMPLETE = "削除しました。";
// 1名上所属している人が居れば削除不可 // 1名上所属している人が居れば削除不可
if (!searchEmployee.searchEmployeeByIdDepartment(idDivision).isEmpty()) { if (!searchEmployee.searchEmployeeByIdDepartment(idDepartment).isEmpty()) {
// 削除対象だった場合 // 削除対象だった場合
// エラーメッセージをセット // エラーメッセージをセット
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(DELETE_TARGET_ID_CAN_NOT_DELETE));
new MessageForm(DELETE_TARGET_ID_CAN_NOT_DELETE));
// 検索画面に遷移 // 検索画面に遷移
return; return;
} }
// 削除を実施 // 削除を実施
deleteDepartment.deleteDepartment(idDivision); deleteDepartment.deleteDepartment(idDepartment);
// 削除完了したメッセージをセット // 削除完了したメッセージをセット
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_INFO, new MessageForm(DELETE_COMPLETE)); model.addAttribute(PageReturnAttributeKeyword.MESSAGE_INFO, new MessageForm(DELETE_COMPLETE));
} }
} }

View File

@@ -1,21 +1,6 @@
package com.example.rhizome.app.presentation.controller; package com.example.rhizome.app.presentation.controller;
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.*;
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.PermissionCheck;
import com.example.rhizome.aop.aspect.SessionCheck; import com.example.rhizome.aop.aspect.SessionCheck;
import com.example.rhizome.app.domain.model.LoginUser; import com.example.rhizome.app.domain.model.LoginUser;
@@ -27,6 +12,19 @@ import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTa
import com.example.rhizome.app.presentation.form.DepartmentForm; import com.example.rhizome.app.presentation.form.DepartmentForm;
import com.example.rhizome.app.presentation.form.LoginUserForm; import com.example.rhizome.app.presentation.form.LoginUserForm;
import com.example.rhizome.app.presentation.form.MessageForm; import com.example.rhizome.app.presentation.form.MessageForm;
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 javax.servlet.http.HttpSession;
import java.util.Objects;
import java.util.logging.Level;
import java.util.logging.Logger;
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.DELETE_EMPLOYEE;
/** /**
* 削除処理のコントロータ * 削除処理のコントロータ
@@ -68,16 +66,14 @@ public class DeleteEmployeeController {
// 作成した部署一覧をセット // 作成した部署一覧をセット
model.addAttribute( model.addAttribute(
PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST,
DepartmentForm.convertFrom( DepartmentForm.convertFrom(searchDepartment.selectAll())
searchDepartment.searchAllDepartmentTable())
); );
// 削除処理実施 // 削除処理実施
deleteExec( deleteExec(
model, model,
idEmployee, idEmployee,
LoginUserForm.convertTo( LoginUserForm.convertTo((LoginUserForm) httpSession.getAttribute(SessionKeyword.LOGIN_USER)));
(LoginUserForm) httpSession.getAttribute(SessionKeyword.LOGIN_USER)));
// 検索画面に遷移 // 検索画面に遷移
return "forward:" + TransitionTargetPageNameKeyword.SELECT_EMPLOYEE_INFO_FORM_EMPTY; return "forward:" + TransitionTargetPageNameKeyword.SELECT_EMPLOYEE_INFO_FORM_EMPTY;

View File

@@ -1,18 +1,17 @@
package com.example.rhizome.app.presentation.controller; package com.example.rhizome.app.presentation.controller;
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.*; import com.example.rhizome.app.domain.service.impl.LoginImpl;
import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword;
import javax.servlet.http.HttpSession; import com.example.rhizome.app.presentation.form.LoginUserForm;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import com.example.rhizome.app.domain.service.impl.LoginImpl; import javax.servlet.http.HttpSession;
import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword;
import com.example.rhizome.app.presentation.form.LoginUserForm; import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.*;
@Controller @Controller
public class IndexController { public class IndexController {
@@ -35,7 +34,7 @@ public class IndexController {
* @param model ビューにデータを渡すためのコンテナ * @param model ビューにデータを渡すためのコンテナ
* @return 遷移先の画面 * @return 遷移先の画面
*/ */
@RequestMapping(value = { INDEX_BLANK, INDEX_SLASH, INDEX_LOGIN }) @RequestMapping(value = {INDEX_BLANK, INDEX_SLASH, INDEX_LOGIN})
public String index(Model model) { public String index(Model model) {
// セッション情報を破棄 // セッション情報を破棄
if (httpSession != null) { if (httpSession != null) {

View File

@@ -1,19 +1,5 @@
package com.example.rhizome.app.presentation.controller; 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.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.PermissionCheck;
import com.example.rhizome.aop.aspect.SessionCheck; import com.example.rhizome.aop.aspect.SessionCheck;
import com.example.rhizome.app.domain.model.SearchConditionDepartment; import com.example.rhizome.app.domain.model.SearchConditionDepartment;
@@ -21,9 +7,21 @@ import com.example.rhizome.app.domain.service.SearchDepartment;
import com.example.rhizome.app.domain.service.impl.SearchDepartmentImpl; import com.example.rhizome.app.domain.service.impl.SearchDepartmentImpl;
import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword; import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword;
import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword;
import com.example.rhizome.app.presentation.form.DepartmentForm;
import com.example.rhizome.app.presentation.form.InsertDepartmentForm; import com.example.rhizome.app.presentation.form.InsertDepartmentForm;
import com.example.rhizome.app.presentation.form.MessageForm; import com.example.rhizome.app.presentation.form.MessageForm;
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 javax.servlet.http.HttpSession;
import java.util.logging.Level;
import java.util.logging.Logger;
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.INSERT_DEPARTMENT_CONFIRM;
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.INSERT_DEPARTMENT_INPUT_HTML;
/** /**
* 新規部署情報チェック用のコントローラ * 新規部署情報チェック用のコントローラ
@@ -43,7 +41,8 @@ public class InsertDepartmentConfirmController {
@Autowired @Autowired
public InsertDepartmentConfirmController( public InsertDepartmentConfirmController(
HttpSession httpSession, HttpSession httpSession,
SearchDepartmentImpl searchDepartment) { SearchDepartmentImpl searchDepartment
) {
this.httpSession = httpSession; this.httpSession = httpSession;
this.searchDepartment = searchDepartment; this.searchDepartment = searchDepartment;
} }
@@ -65,14 +64,10 @@ public class InsertDepartmentConfirmController {
@RequestMapping(value = INSERT_DEPARTMENT_CONFIRM, method = RequestMethod.POST) @RequestMapping(value = INSERT_DEPARTMENT_CONFIRM, method = RequestMethod.POST)
public String insertDepartmentConfirm(InsertDepartmentForm insertDepartmentForm, Model model) { public String insertDepartmentConfirm(InsertDepartmentForm insertDepartmentForm, Model model) {
final String DUPLICATION = "既に同名の本部名または部または課が存在します。"; final String DUPLICATION = "既に同名の部署が存在します。";
final String IRREGULARITY = "本部名または部または課が不正です。"; final String IRREGULARITY = "部署名が不正です。";
try { try {
model.addAttribute(
PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST,
DepartmentForm.convertFrom(
searchDepartment.searchAllDepartmentTable()));
// 入力内容に誤りがあるか // 入力内容に誤りがあるか
if (insertDepartmentForm.haveNmDepartment()) { if (insertDepartmentForm.haveNmDepartment()) {
@@ -84,22 +79,12 @@ public class InsertDepartmentConfirmController {
// 登録画面に遷移 // 登録画面に遷移
return INSERT_DEPARTMENT_INPUT_HTML; return INSERT_DEPARTMENT_INPUT_HTML;
} }
//重複のチェック用の各部署のSearchConditionDeopartmentを用意 // 部署名で重複が無いかチェック
SearchConditionDepartment searchHeadquartersTable = new SearchConditionDepartment( if (!searchDepartment.searchBy(
new SearchConditionDepartment(
null, null,
insertDepartmentForm.getNmHeadquarters()); insertDepartmentForm.getNmDepartment())).isEmpty()) {
SearchConditionDepartment searchDepartmentTable = new SearchConditionDepartment(
null,
insertDepartmentForm.getNmDepartment());
SearchConditionDepartment searchDivisionTable = new SearchConditionDepartment(
null,
insertDepartmentForm.getNmDivision());
// 部署の組み合わせで重複が無いかチェック
if (searchDepartment.searchAllDepartmentTable(
searchHeadquartersTable,
searchDepartmentTable,
searchDivisionTable)) {
// 存在する場合はエラーメッセージを設定して更新入力画面に遷移 // 存在する場合はエラーメッセージを設定して更新入力画面に遷移
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(DUPLICATION)); model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(DUPLICATION));
@@ -113,6 +98,7 @@ public class InsertDepartmentConfirmController {
// 登録確認画面に遷移 // 登録確認画面に遷移
return TransitionTargetPageNameKeyword.INSERT_DEPARTMENT_CONFIRM_HTML; return TransitionTargetPageNameKeyword.INSERT_DEPARTMENT_CONFIRM_HTML;
} catch (Exception e) { } catch (Exception e) {
// ログイン情報の破棄 // ログイン情報の破棄
httpSession.invalidate(); httpSession.invalidate();
@@ -126,3 +112,6 @@ public class InsertDepartmentConfirmController {
} }
} }
} }

View File

@@ -1,12 +1,15 @@
package com.example.rhizome.app.presentation.controller; package com.example.rhizome.app.presentation.controller;
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.*; import com.example.rhizome.aop.aspect.PermissionCheck;
import com.example.rhizome.aop.aspect.SessionCheck;
import java.util.logging.Level; import com.example.rhizome.app.domain.model.SearchConditionDepartment;
import java.util.logging.Logger; import com.example.rhizome.app.domain.service.RegisterDepartment;
import com.example.rhizome.app.domain.service.SearchDepartment;
import javax.servlet.http.HttpSession; 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.InsertDepartmentForm;
import com.example.rhizome.app.presentation.form.MessageForm;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
@@ -14,19 +17,12 @@ import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import com.example.rhizome.aop.aspect.PermissionCheck; import javax.servlet.http.HttpSession;
import com.example.rhizome.aop.aspect.SessionCheck; import java.util.logging.Level;
import com.example.rhizome.app.domain.model.DepartmentInfo; import java.util.logging.Logger;
import com.example.rhizome.app.domain.model.SearchConditionDepartment;
import com.example.rhizome.app.domain.service.RegisterDepartment; import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.INSERT_DEPARTMENT;
import com.example.rhizome.app.domain.service.SearchDepartment; import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.INSERT_DEPARTMENT_INPUT_HTML;
import com.example.rhizome.app.domain.service.impl.SearchDepartmentImpl;
import com.example.rhizome.app.infra.entity.DivisionEntity;
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.InsertDepartmentForm;
import com.example.rhizome.app.presentation.form.MessageForm;
/** /**
* 新規登録用のコントローラ * 新規登録用のコントローラ
@@ -34,8 +30,6 @@ import com.example.rhizome.app.presentation.form.MessageForm;
@Controller @Controller
public class InsertDepartmentController { public class InsertDepartmentController {
private final SearchDepartmentImpl searchDepartmentImpl;
// ログ出力用インスタンス // ログ出力用インスタンス
private final static Logger LOGGER = Logger.getLogger(InsertDepartmentController.class.getName()); private final static Logger LOGGER = Logger.getLogger(InsertDepartmentController.class.getName());
@@ -47,12 +41,10 @@ public class InsertDepartmentController {
SearchDepartment searchDepartment; SearchDepartment searchDepartment;
@Autowired @Autowired
public InsertDepartmentController(HttpSession httpSession, RegisterDepartment registerDepartment, public InsertDepartmentController(HttpSession httpSession, RegisterDepartment registerDepartment, SearchDepartment searchDepartment) {
SearchDepartment searchDepartment, SearchDepartmentImpl searchDepartmentImpl) {
this.httpSession = httpSession; this.httpSession = httpSession;
this.registerDepartment = registerDepartment; this.registerDepartment = registerDepartment;
this.searchDepartment = searchDepartment; this.searchDepartment = searchDepartment;
this.searchDepartmentImpl = searchDepartmentImpl;
} }
@ModelAttribute @ModelAttribute
@@ -81,7 +73,8 @@ public class InsertDepartmentController {
model.addAttribute( model.addAttribute(
PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST,
DepartmentForm.convertFrom( DepartmentForm.convertFrom(
searchDepartment.searchAllDepartmentTable())); searchDepartment.selectAll()
));
// 入力内容に誤りがあるか // 入力内容に誤りがあるか
if (insertDepartmentForm.haveNmDepartment()) { if (insertDepartmentForm.haveNmDepartment()) {
@@ -93,18 +86,12 @@ public class InsertDepartmentController {
// 登録画面に遷移 // 登録画面に遷移
return INSERT_DEPARTMENT_INPUT_HTML; return INSERT_DEPARTMENT_INPUT_HTML;
} }
// 部署名で重複が無いかチェック
if (!searchDepartment.searchBy(
new SearchConditionDepartment(
null,
insertDepartmentForm.getNmDepartment())).isEmpty()) {
// 部署の組み合わせで重複が無いかチェック
if (searchDepartment.searchAllDepartmentTable(
new SearchConditionDepartment(
insertDepartmentForm.getIdHeadquarters(),
insertDepartmentForm.getNmHeadquarters()),
new SearchConditionDepartment(
insertDepartmentForm.getIdDepartment(),
insertDepartmentForm.getNmDepartment()),
new SearchConditionDepartment(
insertDepartmentForm.getIdDivision(),
insertDepartmentForm.getNmDivision()))) {
// 存在する場合はエラーメッセージを設定して更新入力画面に遷移 // 存在する場合はエラーメッセージを設定して更新入力画面に遷移
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(DUPLICATION)); model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(DUPLICATION));
@@ -112,13 +99,9 @@ public class InsertDepartmentController {
return TransitionTargetPageNameKeyword.INSERT_DEPARTMENT_INPUT_HTML; return TransitionTargetPageNameKeyword.INSERT_DEPARTMENT_INPUT_HTML;
} }
//divisionEntityにinsertDepartmentFormで画面から渡ってきた値を入れる
DepartmentInfo departmentInfo = InsertDepartmentForm.convertTo(insertDepartmentForm);
DivisionEntity divisionEntity = DivisionEntity.convertFrom(departmentInfo);
// 登録処理 // 登録処理
registerDepartment.registerDepartment(divisionEntity); registerDepartment.registerDepartment(InsertDepartmentForm.convertTo(insertDepartmentForm));
// 登録結果画面に遷移 // 登録結果画面に遷移
return TransitionTargetPageNameKeyword.INSERT_DEPARTMENT_RESULT_HTML; return TransitionTargetPageNameKeyword.INSERT_DEPARTMENT_RESULT_HTML;
@@ -135,3 +118,6 @@ public class InsertDepartmentController {
} }
} }
} }

View File

@@ -1,10 +1,11 @@
package com.example.rhizome.app.presentation.controller; package com.example.rhizome.app.presentation.controller;
import java.util.logging.Level; import com.example.rhizome.aop.aspect.PermissionCheck;
import java.util.logging.Logger; import com.example.rhizome.aop.aspect.SessionCheck;
import com.example.rhizome.app.domain.service.SearchDepartment;
import javax.servlet.http.HttpSession; 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.InsertDepartmentForm;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
@@ -12,15 +13,9 @@ import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import com.example.rhizome.aop.aspect.PermissionCheck; import javax.servlet.http.HttpSession;
import com.example.rhizome.aop.aspect.SessionCheck; import java.util.logging.Level;
import com.example.rhizome.app.domain.service.SearchDepartment; import java.util.logging.Logger;
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.DepartmentInfoForm;
import com.example.rhizome.app.presentation.form.DivisionInfoForm;
import com.example.rhizome.app.presentation.form.HeadquartersInfoForm;
import com.example.rhizome.app.presentation.form.InsertDepartmentForm;
/** /**
* 登録画面表示用コントローラ * 登録画面表示用コントローラ
@@ -40,7 +35,8 @@ public class InsertDepartmentInputController {
@Autowired @Autowired
public InsertDepartmentInputController( public InsertDepartmentInputController(
HttpSession httpSession, HttpSession httpSession,
SearchDepartment searchDepartment) { SearchDepartment searchDepartment
) {
this.httpSession = httpSession; this.httpSession = httpSession;
this.searchDepartment = searchDepartment; this.searchDepartment = searchDepartment;
} }
@@ -50,6 +46,7 @@ public class InsertDepartmentInputController {
return new InsertDepartmentForm(); return new InsertDepartmentForm();
} }
/** /**
* 部署登録画面表示処理 * 部署登録画面表示処理
* *
@@ -63,19 +60,6 @@ public class InsertDepartmentInputController {
public String insertInput(InsertDepartmentForm insertDepartmentForm, Model model) { public String insertInput(InsertDepartmentForm insertDepartmentForm, Model model) {
try { try {
//各部署情報を重複魚消して表示するために別々に画面へ送る
model.addAttribute(
PageReturnAttributeKeyword.HEADQUARTERS_FORM_LIST,
HeadquartersInfoForm.convertFrom(
searchDepartment.searchAllDepartmentTable()));
model.addAttribute(
PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST,
DepartmentInfoForm.convertFromTo(
searchDepartment.searchAllDepartmentTable()));
model.addAttribute(
PageReturnAttributeKeyword.DIVISION_FORM_LIST,
DivisionInfoForm.convertFromTo(
searchDepartment.searchAllDepartmentTable()));
// パラメータをセット // パラメータをセット
model.addAttribute(PageReturnAttributeKeyword.INSERT_DEPARTMENT_FORM, insertDepartmentForm); model.addAttribute(PageReturnAttributeKeyword.INSERT_DEPARTMENT_FORM, insertDepartmentForm);
@@ -95,3 +79,6 @@ public class InsertDepartmentInputController {
} }
} }
} }

View File

@@ -1,20 +1,5 @@
package com.example.rhizome.app.presentation.controller; package com.example.rhizome.app.presentation.controller;
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.*;
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 com.example.rhizome.aop.aspect.PermissionCheck; import com.example.rhizome.aop.aspect.PermissionCheck;
import com.example.rhizome.aop.aspect.SessionCheck; import com.example.rhizome.aop.aspect.SessionCheck;
import com.example.rhizome.app.domain.model.Employee; import com.example.rhizome.app.domain.model.Employee;
@@ -27,6 +12,19 @@ import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTa
import com.example.rhizome.app.presentation.form.DepartmentForm; import com.example.rhizome.app.presentation.form.DepartmentForm;
import com.example.rhizome.app.presentation.form.InsertEmployeeForm; import com.example.rhizome.app.presentation.form.InsertEmployeeForm;
import com.example.rhizome.app.presentation.form.MessageForm; import com.example.rhizome.app.presentation.form.MessageForm;
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 javax.servlet.http.HttpSession;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.INSERT_EMPLOYEE_CONFIRM;
/** /**
* 新規登録者情報チェック用のコントローラ * 新規登録者情報チェック用のコントローラ
@@ -48,7 +46,8 @@ public class InsertEmployeeConfirmController {
public InsertEmployeeConfirmController( public InsertEmployeeConfirmController(
HttpSession httpSession, HttpSession httpSession,
SearchDepartmentImpl searchDepartment, SearchDepartmentImpl searchDepartment,
SearchEmployeeImpl searchEmployee) { SearchEmployeeImpl searchEmployee
) {
this.httpSession = httpSession; this.httpSession = httpSession;
this.searchDepartment = searchDepartment; this.searchDepartment = searchDepartment;
this.searchEmployee = searchEmployee; this.searchEmployee = searchEmployee;
@@ -77,7 +76,8 @@ public class InsertEmployeeConfirmController {
model.addAttribute( model.addAttribute(
PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST,
DepartmentForm.convertFrom( DepartmentForm.convertFrom(
searchDepartment.searchAllDepartmentTable())); searchDepartment.selectAll()
));
// 登録用パラメータチェック // 登録用パラメータチェック
List<String> error = insertEmployeeForm.validateParameter(); List<String> error = insertEmployeeForm.validateParameter();
@@ -86,8 +86,7 @@ public class InsertEmployeeConfirmController {
if (!error.isEmpty()) { if (!error.isEmpty()) {
// 誤りがあった場合 // 誤りがあった場合
// 誤りがあった箇所のエラーメッセージを表示 // 誤りがあった箇所のエラーメッセージを表示
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(String.join(", ", error) + "が不正です。"));
new MessageForm(String.join(", ", error) + "が不正です。"));
// 画面に返す為の登録情報をセット // 画面に返す為の登録情報をセット
model.addAttribute(PageReturnAttributeKeyword.INSERT_EMPLOYEE_FORM, insertEmployeeForm); model.addAttribute(PageReturnAttributeKeyword.INSERT_EMPLOYEE_FORM, insertEmployeeForm);
// 登録画面に遷移 // 登録画面に遷移
@@ -115,6 +114,7 @@ public class InsertEmployeeConfirmController {
// 登録確認画面に遷移 // 登録確認画面に遷移
return TransitionTargetPageNameKeyword.INSERT_EMPLOYEE_CONFIRM_HTML; return TransitionTargetPageNameKeyword.INSERT_EMPLOYEE_CONFIRM_HTML;
} catch (Exception e) { } catch (Exception e) {
// ログイン情報の破棄 // ログイン情報の破棄
httpSession.invalidate(); httpSession.invalidate();
@@ -128,3 +128,6 @@ public class InsertEmployeeConfirmController {
} }
} }
} }

View File

@@ -1,21 +1,5 @@
package com.example.rhizome.app.presentation.controller; package com.example.rhizome.app.presentation.controller;
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.*;
import java.util.ArrayList;
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 com.example.rhizome.aop.aspect.PermissionCheck; import com.example.rhizome.aop.aspect.PermissionCheck;
import com.example.rhizome.aop.aspect.SessionCheck; import com.example.rhizome.aop.aspect.SessionCheck;
import com.example.rhizome.app.domain.service.RegisterEmployee; import com.example.rhizome.app.domain.service.RegisterEmployee;
@@ -27,6 +11,20 @@ import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTa
import com.example.rhizome.app.presentation.form.DepartmentForm; import com.example.rhizome.app.presentation.form.DepartmentForm;
import com.example.rhizome.app.presentation.form.InsertEmployeeForm; import com.example.rhizome.app.presentation.form.InsertEmployeeForm;
import com.example.rhizome.app.presentation.form.MessageForm; import com.example.rhizome.app.presentation.form.MessageForm;
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 javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.INSERT_EMPLOYEE;
/** /**
* 新規登録用のコントローラ * 新規登録用のコントローラ
@@ -45,8 +43,7 @@ public class InsertEmployeeController {
SearchDepartment searchDepartment; SearchDepartment searchDepartment;
@Autowired @Autowired
public InsertEmployeeController(HttpSession httpSession, RegisterEmployeeImpl registerEmployee, public InsertEmployeeController(HttpSession httpSession, RegisterEmployeeImpl registerEmployee, SearchDepartmentImpl searchDepartment) {
SearchDepartmentImpl searchDepartment) {
this.httpSession = httpSession; this.httpSession = httpSession;
this.registerEmployee = registerEmployee; this.registerEmployee = registerEmployee;
this.searchDepartment = searchDepartment; this.searchDepartment = searchDepartment;
@@ -75,7 +72,8 @@ public class InsertEmployeeController {
model.addAttribute( model.addAttribute(
PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST,
DepartmentForm.convertFrom( DepartmentForm.convertFrom(
searchDepartment.searchAllDepartmentTable())); searchDepartment.selectAll()
));
// Confirm画面から渡ってきた値をチェック // Confirm画面から渡ってきた値をチェック
List<String> error = validateParameter( List<String> error = validateParameter(
@@ -83,15 +81,14 @@ public class InsertEmployeeController {
insertEmployeeForm.getKnEmployee(), insertEmployeeForm.getKnEmployee(),
insertEmployeeForm.getMailAddress(), insertEmployeeForm.getMailAddress(),
insertEmployeeForm.getPassword(), insertEmployeeForm.getPassword(),
insertEmployeeForm.getHireDate(),
insertEmployeeForm.getAdminAuth(), insertEmployeeForm.getAdminAuth(),
insertEmployeeForm.getIdDivision()); insertEmployeeForm.getIdDepartment()
);
// エラーが1件以上有る場合 // エラーが1件以上有る場合
if (!error.isEmpty()) { if (!error.isEmpty()) {
// エラー内容を画面に表示 // エラー内容を画面に表示
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(String.join(", ", error) + "が不正です。"));
new MessageForm(String.join(", ", error) + "が不正です。"));
// 登録画面に遷移 // 登録画面に遷移
return TransitionTargetPageNameKeyword.INSERT_EMPLOYEE_INPUT_HTML; return TransitionTargetPageNameKeyword.INSERT_EMPLOYEE_INPUT_HTML;
} }
@@ -128,15 +125,14 @@ public class InsertEmployeeController {
String employeeKana, String employeeKana,
String mailAddress, String mailAddress,
String password, String password,
String hireDate,
Integer management, Integer management,
Integer departmentId) { Integer departmentId
) {
final String EMPLOYEE_NAME_NULL_BLANK = "社員名"; final String EMPLOYEE_NAME_NULL_BLANK = "社員名";
final String EMPLOYEE_KANA_NULL_BLANK = "社員名フリガナ"; final String EMPLOYEE_KANA_NULL_BLANK = "社員名フリガナ";
final String MAIL_ADDRESS_NULL_BLANK = "メールアドレス"; final String MAIL_ADDRESS_NULL_BLANK = "メールアドレス";
final String PASSWORD_NULL_BLANK = "パスワード"; final String PASSWORD_NULL_BLANK = "パスワード";
final String HIREDATE_NULL_BLANK = "入社年月日";
final String MANAGEMENT_ERROR = "管理者権限指定"; final String MANAGEMENT_ERROR = "管理者権限指定";
final String DEPARTMENT_ID_NULL_BLANK = "所属部署"; final String DEPARTMENT_ID_NULL_BLANK = "所属部署";
@@ -165,11 +161,6 @@ public class InsertEmployeeController {
// エラー内容を追加 // エラー内容を追加
error.add(PASSWORD_NULL_BLANK); error.add(PASSWORD_NULL_BLANK);
} }
// null or 空文字判定
if (isNullOrBlank(hireDate)) {
// エラー内容を追加
error.add(HIREDATE_NULL_BLANK);
}
// 管理者権限の値が不正か // 管理者権限の値が不正か
if (management == null) { if (management == null) {
@@ -202,3 +193,6 @@ public class InsertEmployeeController {
} }
} }

View File

@@ -1,33 +1,25 @@
package com.example.rhizome.app.presentation.controller; package com.example.rhizome.app.presentation.controller;
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.*;
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.GetMapping;
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 org.springframework.web.bind.annotation.ResponseBody;
import com.example.rhizome.aop.aspect.PermissionCheck; import com.example.rhizome.aop.aspect.PermissionCheck;
import com.example.rhizome.aop.aspect.SessionCheck; import com.example.rhizome.aop.aspect.SessionCheck;
import com.example.rhizome.app.domain.service.RegisterEmployee; import com.example.rhizome.app.domain.service.RegisterEmployee;
import com.example.rhizome.app.domain.service.SearchDepartment; 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.PageReturnAttributeKeyword;
import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword;
import com.example.rhizome.app.presentation.form.DepartmentInfoForm; import com.example.rhizome.app.presentation.form.DepartmentForm;
import com.example.rhizome.app.presentation.form.DivisionInfoForm;
import com.example.rhizome.app.presentation.form.HeadquartersInfoForm;
import com.example.rhizome.app.presentation.form.InsertEmployeeForm; import com.example.rhizome.app.presentation.form.InsertEmployeeForm;
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 javax.servlet.http.HttpSession;
import java.util.logging.Level;
import java.util.logging.Logger;
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.INSERT_EMPLOYEE_INPUT;
/** /**
* 登録画面表示用コントローラ * 登録画面表示用コントローラ
@@ -46,8 +38,7 @@ public class InsertEmployeeInputController {
SearchDepartment searchDepartment; SearchDepartment searchDepartment;
@Autowired @Autowired
public InsertEmployeeInputController(HttpSession httpSession, RegisterEmployee registerEmployee, public InsertEmployeeInputController(HttpSession httpSession, RegisterEmployee registerEmployee, SearchDepartment searchDepartment) {
SearchDepartment searchDepartment) {
this.httpSession = httpSession; this.httpSession = httpSession;
this.registerEmployee = registerEmployee; this.registerEmployee = registerEmployee;
this.searchDepartment = searchDepartment; this.searchDepartment = searchDepartment;
@@ -58,10 +49,11 @@ public class InsertEmployeeInputController {
return new InsertEmployeeForm(); return new InsertEmployeeForm();
} }
/** /**
* 社員情報登録画面の表示を行う * 登録画面表示処理
* *
* @param InsertEmployeeFormを保持したインスタンス * @param insertEmployeeForm 登録画面のフォーム
* @param model ビューにデータを渡すためのコンテナ * @param model ビューにデータを渡すためのコンテナ
* @return 遷移先の画面 * @return 遷移先の画面
*/ */
@@ -71,10 +63,8 @@ public class InsertEmployeeInputController {
public String insertInput(InsertEmployeeForm insertEmployeeForm, Model model) { public String insertInput(InsertEmployeeForm insertEmployeeForm, Model model) {
try { try {
// 部署コードリストを作成し、画面に返す値としてセット // 部署コードリストを作成し、画面に返す値としてセット
model.addAttribute(PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, HeadquartersInfoForm.convertFrom( model.addAttribute(PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, DepartmentForm.convertFrom(searchDepartment.selectAll()));
searchDepartment.searchAllDepartmentTable()));
// パラメータをセット // パラメータをセット
model.addAttribute(PageReturnAttributeKeyword.INSERT_EMPLOYEE_FORM, insertEmployeeForm); model.addAttribute(PageReturnAttributeKeyword.INSERT_EMPLOYEE_FORM, insertEmployeeForm);
@@ -94,50 +84,7 @@ public class InsertEmployeeInputController {
return TransitionTargetPageNameKeyword.ERROR_HTML; return TransitionTargetPageNameKeyword.ERROR_HTML;
} }
} }
/**
* 社員情報登録画面の部情報のプルダウンの表示を行う
*
* @param idHeadquarters
* @return 遷移先の画面
*/
//画面で本部のプルダウンが選択された時にJSでこのメソッドに飛ぶ
@GetMapping("insertEmployeeInput/searchDepartment")
@ResponseBody
public List<DepartmentInfoForm> departmentsByHeadquarters(
@RequestParam("id_headquarters") Integer idHeadquarters) {
List<DepartmentInfoForm> departmentByHeadquarters = DepartmentInfoForm.convertFrom(
searchDepartment.searchByIdHeadquarters(idHeadquarters));
return departmentByHeadquarters
.stream()
.map(DepartmentInfoForm -> new DepartmentInfoForm(
DepartmentInfoForm.getIdDepartment(),
DepartmentInfoForm.getNmDepartment()))
.distinct()
.toList();
}
/**
* 社員情報登録画面の課情報のプルダウンの表示を行う
*
* @param idDepartment
* @return 遷移先の画面
*/
//画面で部のプルダウンが選択された時にJSでこのメソッドに飛ぶ
@GetMapping("/insertEmployeeInput/searchDepartment/searchDivision")
@ResponseBody
public List<DivisionInfoForm> divisionBydepartment(
@RequestParam("id_department") Integer idDepartment) {
List<DivisionInfoForm> divisionByDepartment = DivisionInfoForm.convertFrom(
searchDepartment.searchByIdDepartment(idDepartment));
return divisionByDepartment
.stream()
.map(DivisionInfoForm -> new DivisionInfoForm(
DivisionInfoForm.getIdDivision(),
DivisionInfoForm.getNmDivision()))
.distinct()
.toList();
}
} }

View File

@@ -1,18 +1,5 @@
package com.example.rhizome.app.presentation.controller; 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.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.app.domain.model.LoginInfo; import com.example.rhizome.app.domain.model.LoginInfo;
import com.example.rhizome.app.domain.model.LoginUser; import com.example.rhizome.app.domain.model.LoginUser;
@@ -24,6 +11,18 @@ import com.example.rhizome.app.presentation.form.LoginInfoForm;
import com.example.rhizome.app.presentation.form.LoginUserForm; import com.example.rhizome.app.presentation.form.LoginUserForm;
import com.example.rhizome.app.presentation.form.MessageForm; import com.example.rhizome.app.presentation.form.MessageForm;
import com.example.rhizome.app.presentation.form.UpdatePersonalUserForm; import com.example.rhizome.app.presentation.form.UpdatePersonalUserForm;
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 javax.servlet.http.HttpSession;
import java.util.logging.Level;
import java.util.logging.Logger;
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.DO_LOGIN;
/** /**
* ログイン関連のコントローラ * ログイン関連のコントローラ
@@ -71,8 +70,7 @@ public class LoginController {
if (!LoginUserForm.checkParameter(loginInfoForm)) { if (!LoginUserForm.checkParameter(loginInfoForm)) {
// mail,passwordが仕様を満たしていない場合 // mail,passwordが仕様を満たしていない場合
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(MAIL_ADDRESS_PASSWORD_ERROR));
new MessageForm(MAIL_ADDRESS_PASSWORD_ERROR));
// エラーだった場合に login.html に処理を戻す。mailAddress, password を login.htmlに表示するために // エラーだった場合に login.html に処理を戻す。mailAddress, password を login.htmlに表示するために
// ここで addAttribute する // ここで addAttribute する
@@ -106,8 +104,7 @@ public class LoginController {
if (!loginUser.isAdminUser()) { if (!loginUser.isAdminUser()) {
// 管理者ではない場合直で自分の情報を更新するページに遷移する // 管理者ではない場合直で自分の情報を更新するページに遷移する
// 編集対象のログイン者の情報を画面に渡す値にセット // 編集対象のログイン者の情報を画面に渡す値にセット
model.addAttribute(PageReturnAttributeKeyword.UPDATE_PERSONAL_EMPLOYEE_USER_FORM, model.addAttribute(PageReturnAttributeKeyword.UPDATE_PERSONAL_EMPLOYEE_USER_FORM, UpdatePersonalUserForm.convertFrom(loginUser));
UpdatePersonalUserForm.convertFrom(loginUser));
// 個人の情報更新ページに遷移 // 個人の情報更新ページに遷移
return TransitionTargetPageNameKeyword.UPDATE_PERSONAL_EMPLOYEE_INPUT_HTML; return TransitionTargetPageNameKeyword.UPDATE_PERSONAL_EMPLOYEE_INPUT_HTML;
} }
@@ -145,6 +142,7 @@ public class LoginController {
// セッションにない場合は画面からの input 値 を取得 // セッションにない場合は画面からの input 値 を取得
return new LoginInfo( return new LoginInfo(
loginInfoForm.getMailAddress(), loginInfoForm.getMailAddress(),
loginInfoForm.getPassword()); loginInfoForm.getPassword()
);
} }
} }

View File

@@ -1,12 +1,10 @@
package com.example.rhizome.app.presentation.controller; package com.example.rhizome.app.presentation.controller;
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.*; import com.example.rhizome.aop.aspect.PermissionCheck;
import com.example.rhizome.aop.aspect.SessionCheck;
import java.util.logging.Level; import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword;
import java.util.logging.Logger; import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword;
import com.example.rhizome.app.presentation.form.LoginUserForm;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
@@ -14,11 +12,11 @@ import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import com.example.rhizome.aop.aspect.PermissionCheck; import javax.servlet.http.HttpSession;
import com.example.rhizome.aop.aspect.SessionCheck; import java.util.logging.Level;
import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword; import java.util.logging.Logger;
import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword;
import com.example.rhizome.app.presentation.form.LoginUserForm; import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.LOGOUT;
/** /**
* ログアウト処理のコントローラ * ログアウト処理のコントローラ

View File

@@ -1,13 +1,12 @@
package com.example.rhizome.app.presentation.controller; package com.example.rhizome.app.presentation.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import com.example.rhizome.aop.aspect.PermissionCheck; import com.example.rhizome.aop.aspect.PermissionCheck;
import com.example.rhizome.aop.aspect.SessionCheck; import com.example.rhizome.aop.aspect.SessionCheck;
import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword;
import com.example.rhizome.app.presentation.form.MessageForm; import com.example.rhizome.app.presentation.form.MessageForm;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
/** /**
* メニュー画面表示用コントローラ * メニュー画面表示用コントローラ

View File

@@ -1,17 +1,5 @@
package com.example.rhizome.app.presentation.controller; package com.example.rhizome.app.presentation.controller;
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.PermissionCheck;
import com.example.rhizome.aop.aspect.SessionCheck; import com.example.rhizome.aop.aspect.SessionCheck;
import com.example.rhizome.app.domain.service.SearchDepartment; import com.example.rhizome.app.domain.service.SearchDepartment;
@@ -19,6 +7,16 @@ import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAt
import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword;
import com.example.rhizome.app.presentation.form.DepartmentForm; import com.example.rhizome.app.presentation.form.DepartmentForm;
import com.example.rhizome.app.presentation.form.SearchConditionDepartmentForm; import com.example.rhizome.app.presentation.form.SearchConditionDepartmentForm;
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 javax.servlet.http.HttpSession;
import java.util.logging.Level;
import java.util.logging.Logger;
/** /**
* 部署検索画面用コントローラ リスト全件表示、検索表示、更新、削除が可能 * 部署検索画面用コントローラ リスト全件表示、検索表示、更新、削除が可能
@@ -62,11 +60,8 @@ public class SelectDepartmentController {
// 作成した部署一覧をセット // 作成した部署一覧をセット
model.addAttribute( model.addAttribute(
PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST,
DepartmentForm.convertFrom( DepartmentForm.convertFrom(searchDepartment.searchByWithLike(SearchConditionDepartmentForm.convertTo(searchConditionDepartmentForm)))
searchDepartment.searchAllDepartmentTable( );
SearchConditionDepartmentForm.convertTo(searchConditionDepartmentForm))
));
// 検索ページに遷移 // 検索ページに遷移
return TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_HTML; return TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_HTML;
@@ -97,12 +92,13 @@ public class SelectDepartmentController {
public String selectAll(Model model) { public String selectAll(Model model) {
try { try {
// 部署一覧を取得し、画面に返す用のクラスに詰め替える // 部署一覧を取得し、画面に返す用のクラスに詰め替える
// 作成した部署一覧をセット // 作成した部署一覧をセット
model.addAttribute( model.addAttribute(
PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST,
DepartmentForm.convertFrom( DepartmentForm.convertFrom(searchDepartment.selectAll())
searchDepartment.searchAllDepartmentTable())); );
// 検索ページに遷移 // 検索ページに遷移
return TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_HTML; return TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_HTML;

View File

@@ -1,11 +1,14 @@
package com.example.rhizome.app.presentation.controller; package com.example.rhizome.app.presentation.controller;
import java.util.List; import com.example.rhizome.aop.aspect.PermissionCheck;
import java.util.logging.Level; import com.example.rhizome.aop.aspect.SessionCheck;
import java.util.logging.Logger; import com.example.rhizome.app.domain.service.SearchDepartment;
import com.example.rhizome.app.domain.service.SearchEmployeeInfo;
import javax.servlet.http.HttpSession; 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.EmployeeInfoForm;
import com.example.rhizome.app.presentation.form.SearchConditionEmployeeForm;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
@@ -13,16 +16,9 @@ import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import com.example.rhizome.aop.aspect.PermissionCheck; import javax.servlet.http.HttpSession;
import com.example.rhizome.aop.aspect.SessionCheck; import java.util.logging.Level;
import com.example.rhizome.app.domain.service.SearchDepartment; import java.util.logging.Logger;
import com.example.rhizome.app.domain.service.SearchEmployeeInfo;
import com.example.rhizome.app.domain.service.TenureCalc;
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.EmployeeInfoForm;
import com.example.rhizome.app.presentation.form.SearchConditionEmployeeForm;
/** /**
* 社員検索画面用コントローラ リスト全件表示、検索表示、更新、削除が可能 * 社員検索画面用コントローラ リスト全件表示、検索表示、更新、削除が可能
@@ -38,13 +34,12 @@ public class SelectEmployeeController {
HttpSession httpSession; HttpSession httpSession;
SearchDepartment searchDepartment; SearchDepartment searchDepartment;
SearchEmployeeInfo searchEmployeeInfo; SearchEmployeeInfo searchEmployeeInfo;
TenureCalc tenureCalc;
@Autowired @Autowired
public SelectEmployeeController(HttpSession httpSession, SearchDepartment searchDepartment, SearchEmployeeInfo searchEmployeeInfo ,TenureCalc tenureCalc) { public SelectEmployeeController(HttpSession httpSession, SearchDepartment searchDepartment, SearchEmployeeInfo searchEmployeeInfo) {
this.httpSession = httpSession; this.httpSession = httpSession;
this.searchDepartment = searchDepartment; this.searchDepartment = searchDepartment;
this.searchEmployeeInfo = searchEmployeeInfo; this.searchEmployeeInfo = searchEmployeeInfo;
this.tenureCalc = tenureCalc;
} }
@ModelAttribute @ModelAttribute
@@ -70,23 +65,13 @@ public class SelectEmployeeController {
// 作成した部署一覧をセット // 作成した部署一覧をセット
model.addAttribute( model.addAttribute(
PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST,
DepartmentForm.convertFrom( DepartmentForm.convertFrom(searchDepartment.selectAll())
searchDepartment.searchAllDepartmentTable())
); );
// 検索条件を元に検索を実施 // 検索条件を元に検索を実施
// 取得した EmployeeInfo( employee + department )の情報を画面に返す用の型に詰め替えてセット // 取得した EmployeeInfo( employee + department )の情報を画面に返す用の型に詰め替えてセット
//プラスで勤続年数を計算してformにセット model.addAttribute(PageReturnAttributeKeyword.EMPLOYEE_INFO_FORM_LIST, EmployeeInfoForm.convertFrom(searchEmployeeInfo.searchBy(SearchConditionEmployeeForm.convertTo(searchConditionEmployeeForm))));
List<EmployeeInfoForm>employeeInfoForm = EmployeeInfoForm.convertFrom(
searchEmployeeInfo.searchBy(
SearchConditionEmployeeForm.convertTo(searchConditionEmployeeForm)));
for(EmployeeInfoForm form:employeeInfoForm) {
String tenure = tenureCalc.tenureCalc(form.getHireDate());
form.setTenure(tenure);
}
model.addAttribute(PageReturnAttributeKeyword.EMPLOYEE_INFO_FORM_LIST, employeeInfoForm);
// 検索ページに遷移 // 検索ページに遷移
return TransitionTargetPageNameKeyword.SELECT_EMPLOYEE_HTML; return TransitionTargetPageNameKeyword.SELECT_EMPLOYEE_HTML;
@@ -120,19 +105,15 @@ public class SelectEmployeeController {
// 作成した部署一覧をセット // 作成した部署一覧をセット
model.addAttribute( model.addAttribute(
PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST,
DepartmentForm.convertFrom( DepartmentForm.convertFrom(searchDepartment.selectAll())
searchDepartment.searchAllDepartmentTable())
); );
// 検索条件を元に検索を実施 // 検索条件を元に検索を実施
List<EmployeeInfoForm>employeeInfoForm =EmployeeInfoForm.convertFrom( model.addAttribute(PageReturnAttributeKeyword.EMPLOYEE_INFO_FORM_LIST,
searchEmployeeInfo.selectAll()); EmployeeInfoForm.convertFrom(
for(EmployeeInfoForm form:employeeInfoForm) { searchEmployeeInfo.searchBy(
String tenure = tenureCalc.tenureCalc(form.getHireDate()); SearchConditionEmployeeForm.convertTo(searchConditionEmployeeForm())
form.setTenure(tenure); )));
}
model.addAttribute(PageReturnAttributeKeyword.EMPLOYEE_INFO_FORM_LIST,employeeInfoForm);
// 検索ページに遷移 // 検索ページに遷移
return TransitionTargetPageNameKeyword.SELECT_EMPLOYEE_HTML; return TransitionTargetPageNameKeyword.SELECT_EMPLOYEE_HTML;

View File

@@ -1,11 +1,15 @@
package com.example.rhizome.app.presentation.controller; package com.example.rhizome.app.presentation.controller;
import java.util.List; import com.example.rhizome.aop.aspect.PermissionCheck;
import java.util.logging.Level; import com.example.rhizome.aop.aspect.SessionCheck;
import java.util.logging.Logger; import com.example.rhizome.app.domain.model.Department;
import com.example.rhizome.app.domain.model.SearchConditionDepartment;
import javax.servlet.http.HttpSession; 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.SearchConditionEmployeeForm;
import com.example.rhizome.app.presentation.form.UpdateDepartmentForm;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
@@ -14,16 +18,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import com.example.rhizome.aop.aspect.PermissionCheck; import javax.servlet.http.HttpSession;
import com.example.rhizome.aop.aspect.SessionCheck; import java.util.List;
import com.example.rhizome.app.domain.model.AllDepartmentInfo; import java.util.logging.Level;
import com.example.rhizome.app.domain.model.SearchConditionDepartment; import java.util.logging.Logger;
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.SearchConditionEmployeeForm;
import com.example.rhizome.app.presentation.form.UpdateDepartmentForm;
/** /**
* 更新対象の Department が存在するか確認する為のコントローラ * 更新対象の Department が存在するか確認する為のコントローラ
@@ -61,24 +59,24 @@ public class UpdateDepartmentController {
@PermissionCheck @PermissionCheck
@SessionCheck @SessionCheck
@RequestMapping(value = TransitionTargetPageNameKeyword.SHOW_UPDATE_DEPARTMENT, method = RequestMethod.POST) @RequestMapping(value = TransitionTargetPageNameKeyword.SHOW_UPDATE_DEPARTMENT, method = RequestMethod.POST)
public String showUpdateEmployee(@RequestParam("idDivision") Integer idDivision, Model model) { public String showUpdateEmployee(@RequestParam("idDepartment") Integer idDepartment, Model model) {
final String UPDATE_TARGET_ID_NOT_FOUND = "更新対象のデータが見つかりません。"; final String UPDATE_TARGET_ID_NOT_FOUND = "更新対象のデータが見つかりません。";
try { try {
// id を条件に更新対象のレコードを検索、取得する // id を条件に更新対象のレコードを検索、取得する
List<AllDepartmentInfo>divisionList = searchDepartment.searchAllDepartmentTable( List<Department> departmentList = searchDepartment.searchBy(
new SearchConditionDepartment(idDivision, new SearchConditionDepartment(idDepartment,
null)); null));
// DBに更新対象のデータがあるか // DBに更新対象のデータがあるか
if (divisionList.isEmpty()) { if (departmentList.isEmpty()) {
// ない場合はエラーメッセージをセットして検索画面に戻る // ない場合はエラーメッセージをセットして検索画面に戻る
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(UPDATE_TARGET_ID_NOT_FOUND)); model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(UPDATE_TARGET_ID_NOT_FOUND));
return "forward:" + TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_HTML; return "forward:" + TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_HTML;
} }
// 更新画面に表示する値をセット // 更新画面に表示する値をセット
model.addAttribute(PageReturnAttributeKeyword.UPDATE_DEPARTMENT_FORM, UpdateDepartmentForm.convertFrom(divisionList.get(0))); model.addAttribute(PageReturnAttributeKeyword.UPDATE_DEPARTMENT_FORM, UpdateDepartmentForm.convertFrom(departmentList.get(0)));
// Update画面に遷移 // Update画面に遷移
return TransitionTargetPageNameKeyword.UPDATE_DEPARTMENT_INPUT_HTML; return TransitionTargetPageNameKeyword.UPDATE_DEPARTMENT_INPUT_HTML;

View File

@@ -1,23 +1,8 @@
package com.example.rhizome.app.presentation.controller; 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 com.example.rhizome.aop.aspect.PermissionCheck; import com.example.rhizome.aop.aspect.PermissionCheck;
import com.example.rhizome.aop.aspect.SessionCheck; import com.example.rhizome.aop.aspect.SessionCheck;
import com.example.rhizome.app.domain.model.Department;
import com.example.rhizome.app.domain.model.Division;
import com.example.rhizome.app.domain.model.Headquarters;
import com.example.rhizome.app.domain.model.SearchConditionDepartment; import com.example.rhizome.app.domain.model.SearchConditionDepartment;
import com.example.rhizome.app.domain.service.SearchDepartment; import com.example.rhizome.app.domain.service.SearchDepartment;
import com.example.rhizome.app.domain.service.UpdateDepartment; import com.example.rhizome.app.domain.service.UpdateDepartment;
@@ -26,6 +11,16 @@ import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTa
import com.example.rhizome.app.presentation.form.DepartmentForm; import com.example.rhizome.app.presentation.form.DepartmentForm;
import com.example.rhizome.app.presentation.form.MessageForm; import com.example.rhizome.app.presentation.form.MessageForm;
import com.example.rhizome.app.presentation.form.UpdateDepartmentForm; import com.example.rhizome.app.presentation.form.UpdateDepartmentForm;
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 javax.servlet.http.HttpSession;
import java.util.logging.Level;
import java.util.logging.Logger;
/** /**
* department を更新して結果を返す為のコントローラ * department を更新して結果を返す為のコントローラ
@@ -43,8 +38,7 @@ public class UpdateDepartmentResultController {
UpdateDepartment updateDepartment; UpdateDepartment updateDepartment;
@Autowired @Autowired
public UpdateDepartmentResultController(HttpSession httpSession, SearchDepartment searchDepartment, public UpdateDepartmentResultController(HttpSession httpSession, SearchDepartment searchDepartment, UpdateDepartment updateDepartment) {
UpdateDepartment updateDepartment) {
this.httpSession = httpSession; this.httpSession = httpSession;
this.searchDepartment = searchDepartment; this.searchDepartment = searchDepartment;
this.updateDepartment = updateDepartment; this.updateDepartment = updateDepartment;
@@ -68,75 +62,18 @@ public class UpdateDepartmentResultController {
try { try {
// 更新対象の部署データがない // 更新対象の部署データがない
if (updateDepartmentForm.getNmHeadquarters().isBlank() || if (updateDepartmentForm.getNmDepartment().isBlank()) {
updateDepartmentForm.getNmDepartment().isBlank() ||
updateDepartmentForm.getNmDivision().isBlank()) {
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(NOTHING)); model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(NOTHING));
model.addAttribute(PageReturnAttributeKeyword.UPDATE_DEPARTMENT_FORM, updateDepartmentForm); model.addAttribute(PageReturnAttributeKeyword.UPDATE_DEPARTMENT_FORM, updateDepartmentForm);
return TransitionTargetPageNameKeyword.UPDATE_DEPARTMENT_INPUT_HTML; return TransitionTargetPageNameKeyword.UPDATE_DEPARTMENT_INPUT_HTML;
} }
// 部署名で重複が無いかチェック // 部署名で重複が無いかチェック
List<Headquarters> beforeHeadquartersList = searchDepartment if (!searchDepartment.searchBy(
.searchHeadquartersByIdHeadquarters(updateDepartmentForm.getIdHeadquarters());
List<Department> beforeDepartmentList = searchDepartment
.searchDepartmentByIdDepartment(updateDepartmentForm.getIdDepartment());
List<Division> beforeDivisionList = searchDepartment
.searchDivisionByIdDivision(updateDepartmentForm.getIdDivision());
Headquarters beforeHeadquarters = beforeHeadquartersList.get(0);
Department beforeDepartment = beforeDepartmentList.get(0);
Division beforeDivision = beforeDivisionList.get(0);
Headquarters afterHeadquarters = new Headquarters(
updateDepartmentForm.getIdHeadquarters(),
updateDepartmentForm.getNmHeadquarters(),
null);
Department afterDepartment = new Department(
updateDepartmentForm.getIdDepartment(),
updateDepartmentForm.getNmDepartment(),
null,
updateDepartmentForm.getIdHeadquarters());
Division afterDivision = new Division(
updateDepartmentForm.getIdDivision(),
updateDepartmentForm.getNmDivision(),
null,
updateDepartmentForm.getIdDepartment());
if (searchDepartment.searchAllDepartmentTable(
new SearchConditionDepartment(
updateDepartmentForm.getIdHeadquarters(),
updateDepartmentForm.getNmHeadquarters()),
new SearchConditionDepartment(
updateDepartmentForm.getIdDepartment(),
updateDepartmentForm.getNmDepartment()),
new SearchConditionDepartment(
updateDepartmentForm.getIdDivision(),
updateDepartmentForm.getNmDivision()))
|| (!beforeHeadquarters.getNmHeadquarters().equals(afterHeadquarters.getNmHeadquarters())
&&
!searchDepartment.searchByHeadquarters(
new SearchConditionDepartment( new SearchConditionDepartment(
null, null,
updateDepartmentForm.getNmHeadquarters())) updateDepartmentForm.getNmDepartment())).isEmpty()) {
.isEmpty())
|| (!beforeDepartment.getNmDepartment().equals(afterDepartment.getNmDepartment())
&&
!searchDepartment.searchByDepartment(
new SearchConditionDepartment(
null,
updateDepartmentForm.getNmDepartment()))
.isEmpty())
|| (!beforeDivision.getNmDivision().equals(afterDivision.getNmDivision())
&&
!searchDepartment.searchByDivision(
new SearchConditionDepartment(
null,
updateDepartmentForm.getNmDivision()))
.isEmpty())
) {
// 存在する場合はエラーメッセージを設定して更新入力画面に遷移 // 存在する場合はエラーメッセージを設定して更新入力画面に遷移
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(DUPLICATION)); model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(DUPLICATION));
model.addAttribute(PageReturnAttributeKeyword.UPDATE_DEPARTMENT_FORM, updateDepartmentForm); model.addAttribute(PageReturnAttributeKeyword.UPDATE_DEPARTMENT_FORM, updateDepartmentForm);
@@ -148,14 +85,14 @@ public class UpdateDepartmentResultController {
updateDepartment.updateDepartment(UpdateDepartmentForm.convertTo(updateDepartmentForm)); updateDepartment.updateDepartment(UpdateDepartmentForm.convertTo(updateDepartmentForm));
// 部署一覧取得 // 部署一覧取得
model.addAttribute(PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, DepartmentForm.convertFrom( model.addAttribute(PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, DepartmentForm.convertFrom(searchDepartment.selectAll()));
searchDepartment.searchAllDepartmentTable()));
// 更新結果のメッセージを画面にセットし一覧画面に遷移 // 更新結果のメッセージを画面にセットし一覧画面に遷移
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_INFO, new MessageForm(UPDATE_COMPLETE)); model.addAttribute(PageReturnAttributeKeyword.MESSAGE_INFO, new MessageForm(UPDATE_COMPLETE));
// forward 先で不用意な動作をしないために UpdateEmployeeInfoForm をクリア // forward 先で不用意な動作をしないために UpdateEmployeeInfoForm をクリア
return "forward:" + TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_ALL; return "forward:" + TransitionTargetPageNameKeyword.SELECT_DEPARTMENT_ALL;
} catch (Exception e) { } catch (Exception e) {
// ログイン情報の破棄 // ログイン情報の破棄
httpSession.invalidate(); httpSession.invalidate();

View File

@@ -1,38 +1,29 @@
package com.example.rhizome.app.presentation.controller; 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.GetMapping;
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 org.springframework.web.bind.annotation.ResponseBody;
import com.example.rhizome.aop.aspect.PermissionCheck; import com.example.rhizome.aop.aspect.PermissionCheck;
import com.example.rhizome.aop.aspect.SessionCheck; import com.example.rhizome.aop.aspect.SessionCheck;
import com.example.rhizome.app.domain.model.AllDepartmentInfo; import com.example.rhizome.app.domain.model.EmployeeInfo;
import com.example.rhizome.app.domain.model.AllEmployeeInfo;
import com.example.rhizome.app.domain.model.SearchConditionDepartment;
import com.example.rhizome.app.domain.model.SearchConditionEmployee; import com.example.rhizome.app.domain.model.SearchConditionEmployee;
import com.example.rhizome.app.domain.service.RegisterEmployee;
import com.example.rhizome.app.domain.service.SearchDepartment; import com.example.rhizome.app.domain.service.SearchDepartment;
import com.example.rhizome.app.domain.service.SearchEmployeeInfo; 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.PageReturnAttributeKeyword;
import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword;
import com.example.rhizome.app.presentation.form.DepartmentInfoForm; import com.example.rhizome.app.presentation.form.DepartmentForm;
import com.example.rhizome.app.presentation.form.DivisionInfoForm;
import com.example.rhizome.app.presentation.form.HeadquartersInfoForm;
import com.example.rhizome.app.presentation.form.MessageForm; import com.example.rhizome.app.presentation.form.MessageForm;
import com.example.rhizome.app.presentation.form.SearchConditionEmployeeForm; import com.example.rhizome.app.presentation.form.SearchConditionEmployeeForm;
import com.example.rhizome.app.presentation.form.UpdateEmployeeInfoForm; import com.example.rhizome.app.presentation.form.UpdateEmployeeInfoForm;
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 javax.servlet.http.HttpSession;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
/** /**
* 更新対象の employee が存在するか確認する為のコントローラ * 更新対象の employee が存在するか確認する為のコントローラ
@@ -48,15 +39,12 @@ public class UpdateEmployeeController {
HttpSession httpSession; HttpSession httpSession;
SearchDepartment searchDepartment; SearchDepartment searchDepartment;
SearchEmployeeInfo searchEmployeeInfo; SearchEmployeeInfo searchEmployeeInfo;
RegisterEmployee registerEmployee;
@Autowired @Autowired
public UpdateEmployeeController(HttpSession httpSession, SearchDepartment searchDepartment, public UpdateEmployeeController(HttpSession httpSession, SearchDepartment searchDepartment, SearchEmployeeInfo searchEmployeeInfo) {
SearchEmployeeInfo searchEmployeeInfo, RegisterEmployee registerEmployee) {
this.httpSession = httpSession; this.httpSession = httpSession;
this.searchDepartment = searchDepartment; this.searchDepartment = searchDepartment;
this.searchEmployeeInfo = searchEmployeeInfo; this.searchEmployeeInfo = searchEmployeeInfo;
this.registerEmployee = registerEmployee;
} }
@ModelAttribute @ModelAttribute
@@ -78,11 +66,11 @@ public class UpdateEmployeeController {
final String UPDATE_TARGET_ID_NOT_FOUND = "更新対象のデータが見つかりません。"; final String UPDATE_TARGET_ID_NOT_FOUND = "更新対象のデータが見つかりません。";
try { try {
// 部署コードリストを作成し、画面に返す値としてセット // 部署一覧を取得し画面に返す値としてセット
model.addAttribute(PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, HeadquartersInfoForm.convertFrom( model.addAttribute(PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, DepartmentForm.convertFrom(searchDepartment.selectAll()));
searchDepartment.searchAllDepartmentTable()));
// id を条件に更新対象のレコードを検索、取得する // id を条件に更新対象のレコードを検索、取得する
List<AllEmployeeInfo> employeeInfoList = searchEmployeeInfo.searchBy( List<EmployeeInfo> employeeInfoList = searchEmployeeInfo.searchBy(
new SearchConditionEmployee(idEmployee, new SearchConditionEmployee(idEmployee,
null, null,
null, null,
@@ -92,26 +80,17 @@ public class UpdateEmployeeController {
// DBに更新対象のデータがあるか // DBに更新対象のデータがあるか
if (employeeInfoList.isEmpty()) { if (employeeInfoList.isEmpty()) {
// ない場合はエラーメッセージをセットして検索画面に戻る // ない場合はエラーメッセージをセットして検索画面に戻る
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(UPDATE_TARGET_ID_NOT_FOUND));
new MessageForm(UPDATE_TARGET_ID_NOT_FOUND));
return "forward:" + TransitionTargetPageNameKeyword.SELECT_EMPLOYEE_INFO; return "forward:" + TransitionTargetPageNameKeyword.SELECT_EMPLOYEE_INFO;
} }
//idDivisionからidHeadquartersを調べてUpdateEmployeeInfoFormに入れる
UpdateEmployeeInfoForm updateInfo = UpdateEmployeeInfoForm.convertFrom(employeeInfoList.get(0));
SearchConditionDepartment beforeUpdate = new SearchConditionDepartment(
updateInfo.getIdDivision(),
null);
List<AllDepartmentInfo> afterSearchDepartment = searchDepartment.searchAllDepartmentTable(beforeUpdate);
updateInfo.setIdHeadquarters(afterSearchDepartment.get(0).getHeadquarters().getIdHeadquarters());
// 更新画面に遷移 // 更新画面に遷移
model.addAttribute(PageReturnAttributeKeyword.UPDATE_EMPLOYEE_INFO_FORM, model.addAttribute(PageReturnAttributeKeyword.UPDATE_EMPLOYEE_INFO_FORM, UpdateEmployeeInfoForm.convertFrom(employeeInfoList.get(0)));
updateInfo);
// Update画面に遷移 // Update画面に遷移
return TransitionTargetPageNameKeyword.UPDATE_EMPLOYEE_INPUT_HTML; return TransitionTargetPageNameKeyword.UPDATE_EMPLOYEE_INPUT_HTML;
} catch (Exception e) { } catch (Exception e) {
// ログイン情報の破棄 // ログイン情報の破棄
httpSession.invalidate(); httpSession.invalidate();
@@ -125,50 +104,4 @@ public class UpdateEmployeeController {
} }
} }
/**
* 社員情報更新画面の部情報のプルダウンの表示を行う
*
* @param idHeadquarters
* @return 遷移先の画面
*/
//画面で本部のプルダウンが選択された時にJSでこのメソッドに飛ぶ
@GetMapping("updateEmployeeInput/searchDepartment")
@ResponseBody
public List<DepartmentInfoForm> departmentsByHeadquarters(
@RequestParam("id_headquarters") Integer idHeadquarters) {
List<DepartmentInfoForm> departmentByHeadquarters = DepartmentInfoForm.convertFrom(
searchDepartment.searchByIdHeadquarters(idHeadquarters));
return departmentByHeadquarters
.stream()
.map(DepartmentInfoForm -> new DepartmentInfoForm(
DepartmentInfoForm.getIdDepartment(),
DepartmentInfoForm.getNmDepartment()))
.distinct()
.toList();
}
/**
* 社員情報更新画面の課情報のプルダウンの表示を行う
*
* @param idDepartment
* @return 遷移先の画面
*/
//画面で部のプルダウンが選択された時にJSでこのメソッドに飛ぶ
@GetMapping("/updateEmployeeInput/searchDepartment/searchDivision")
@ResponseBody
public List<DivisionInfoForm> divisionBydepartment(
@RequestParam("id_department") Integer idDepartment) {
List<DivisionInfoForm> divisionByDepartment = DivisionInfoForm.convertFrom(
searchDepartment.searchByIdDepartment(idDepartment));
return divisionByDepartment
.stream()
.map(DivisionInfoForm -> new DivisionInfoForm(
DivisionInfoForm.getIdDivision(),
DivisionInfoForm.getNmDivision()))
.distinct()
.toList();
}
} }

View File

@@ -1,20 +1,6 @@
package com.example.rhizome.app.presentation.controller; 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.PermissionCheck;
import com.example.rhizome.aop.aspect.SessionCheck; import com.example.rhizome.aop.aspect.SessionCheck;
import com.example.rhizome.app.domain.model.Employee; import com.example.rhizome.app.domain.model.Employee;
@@ -29,6 +15,18 @@ import com.example.rhizome.app.presentation.form.DepartmentForm;
import com.example.rhizome.app.presentation.form.LoginUserForm; import com.example.rhizome.app.presentation.form.LoginUserForm;
import com.example.rhizome.app.presentation.form.MessageForm; import com.example.rhizome.app.presentation.form.MessageForm;
import com.example.rhizome.app.presentation.form.UpdateEmployeeInfoForm; import com.example.rhizome.app.presentation.form.UpdateEmployeeInfoForm;
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 javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Objects;
import java.util.logging.Level;
import java.util.logging.Logger;
/** /**
* employee を更新して結果を返す為のコントローラ * employee を更新して結果を返す為のコントローラ
@@ -93,8 +91,7 @@ public class UpdateEmployeeResultController {
try { try {
// 部署一覧取得 // 部署一覧取得
model.addAttribute(PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, DepartmentForm.convertFrom( model.addAttribute(PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST, DepartmentForm.convertFrom(searchDepartment.selectAll()));
searchDepartment.searchAllDepartmentTable()));
// パスワードが仕様を満たしているか確認 // パスワードが仕様を満たしているか確認
String error = UpdateEmployeeInfoForm.validatePassword( String error = UpdateEmployeeInfoForm.validatePassword(
@@ -151,11 +148,7 @@ public class UpdateEmployeeResultController {
return TransitionTargetPageNameKeyword.UPDATE_EMPLOYEE_INPUT_HTML; return TransitionTargetPageNameKeyword.UPDATE_EMPLOYEE_INPUT_HTML;
} }
//勤続年数は更新対象ではないのでそのまま移し替える
updateEmployeeInfoForm.setHireDate(beforeEmployee.getHireDate());
// 画面用の型からビジネスロジック用のモデルに変換し、Updateを実行 // 画面用の型からビジネスロジック用のモデルに変換し、Updateを実行
updateEmployee.updateEmployee(beforeEmployee, UpdateEmployeeInfoForm.convertTo(updateEmployeeInfoForm)); updateEmployee.updateEmployee(beforeEmployee, UpdateEmployeeInfoForm.convertTo(updateEmployeeInfoForm));
// Update後の情報を再取得 // Update後の情報を再取得

View File

@@ -1,20 +1,6 @@
package com.example.rhizome.app.presentation.controller; 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.PermissionCheck;
import com.example.rhizome.aop.aspect.SessionCheck; import com.example.rhizome.aop.aspect.SessionCheck;
import com.example.rhizome.app.domain.model.Employee; import com.example.rhizome.app.domain.model.Employee;
@@ -26,6 +12,18 @@ import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTa
import com.example.rhizome.app.presentation.form.LoginUserForm; import com.example.rhizome.app.presentation.form.LoginUserForm;
import com.example.rhizome.app.presentation.form.MessageForm; import com.example.rhizome.app.presentation.form.MessageForm;
import com.example.rhizome.app.presentation.form.UpdatePersonalUserForm; import com.example.rhizome.app.presentation.form.UpdatePersonalUserForm;
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 javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Objects;
import java.util.logging.Level;
import java.util.logging.Logger;
/** /**
* 個人情報更新用コントローラ * 個人情報更新用コントローラ
@@ -136,15 +134,11 @@ public class UpdatePersonalEmployeeResultController {
} }
//更新前のEmployeeの情報を取得 //更新前のEmployeeの情報を取得
Employee beforeEmployee =searchEmployee.searchEmployeeByIdEmployee(updatePersonalUserForm.getIdEmployee());
updatePersonalUserForm.setHireDate(beforeEmployee.getHireDate());
// 画面用のインスタンスから更新用のインスタンスに変換し、Update実施 // 画面用のインスタンスから更新用のインスタンスに変換し、Update実施
updateEmployee.updateEmployee( updateEmployee.updateEmployee(
beforeEmployee, searchEmployee.searchEmployeeByIdEmployee(updatePersonalUserForm.getIdEmployee()),
UpdatePersonalUserForm.convertTo(updatePersonalUserForm)) UpdatePersonalUserForm.convertTo(updatePersonalUserForm)
; );
// ログイン者の情報をセッション情報に格納 // ログイン者の情報をセッション情報に格納
httpSession.setAttribute( httpSession.setAttribute(

View File

@@ -16,7 +16,5 @@ public class PageReturnAttributeKeyword {
public static final String LOGIN_INFO_FORM = "loginInfoForm"; public static final String LOGIN_INFO_FORM = "loginInfoForm";
public static final String UPDATE_PERSONAL_EMPLOYEE_USER_FORM = "updatePersonalEmployeeUserForm"; public static final String UPDATE_PERSONAL_EMPLOYEE_USER_FORM = "updatePersonalEmployeeUserForm";
public static final String EMPLOYEE_INFO_FORM_LIST = "employeeInfoFormList"; public static final String EMPLOYEE_INFO_FORM_LIST = "employeeInfoFormList";
public static final String HEADQUARTERS_FORM_LIST = "headquartersFormList";
public static final String DIVISION_FORM_LIST = "divisionFormList";
} }

View File

@@ -1,13 +1,12 @@
package com.example.rhizome.app.presentation.form; package com.example.rhizome.app.presentation.form;
import java.util.List; import com.example.rhizome.app.domain.model.Department;
import com.example.rhizome.app.domain.model.AllDepartmentInfo;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.List;
/** /**
* 画面の表示に使う部署コード管理用のクラス * 画面の表示に使う部署コード管理用のクラス
*/ */
@@ -16,29 +15,14 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor @NoArgsConstructor
public class DepartmentForm { public class DepartmentForm {
/** /**
* 本部ID * 部署ID
*/
private Integer idHeadquarters;
/**
* 本部名
*/
private String nmHeadquarters;
/**
* 部ID
*/ */
private Integer idDepartment; private Integer idDepartment;
/** /**
* 部名 * 部署名
*/ */
private String nmDepartment; private String nmDepartment;
/**
* 課ID
*/
private Integer idDivision;
/**
* 課名
*/
private String nmDivision;
/** /**
* business 層の Department クラスから画面用(presentation 層)の DepartmentForm に * business 層の Department クラスから画面用(presentation 層)の DepartmentForm に
* 変換します。 * 変換します。
@@ -46,15 +30,8 @@ public class DepartmentForm {
* @param department business 層の Department インスタンス * @param department business 層の Department インスタンス
* @return 画面用(presentation 層)の DepartmentForm インスタンス * @return 画面用(presentation 層)の DepartmentForm インスタンス
*/ */
public static DepartmentForm convertFrom(AllDepartmentInfo allDepartmentInfo) { public static DepartmentForm convertFrom(Department department) {
return new DepartmentForm( return new DepartmentForm(department.getIdDepartment(), department.getNmDepartment());
allDepartmentInfo.getHeadquarters().getIdHeadquarters(),
allDepartmentInfo.getHeadquarters().getNmHeadquarters(),
allDepartmentInfo.getDepartment().getIdDepartment(),
allDepartmentInfo.getDepartment().getNmDepartment(),
allDepartmentInfo.getDivision().getIdDivision(),
allDepartmentInfo.getDivision().getNmDivision()
);
} }
/** /**
@@ -64,8 +41,7 @@ public class DepartmentForm {
* @param departmentList business 層の Department インスタンスのリスト * @param departmentList business 層の Department インスタンスのリスト
* @return 画面用(presentation 層)の DepartmentForm インスタンスのリスト * @return 画面用(presentation 層)の DepartmentForm インスタンスのリスト
*/ */
public static List<DepartmentForm> convertFrom(List<AllDepartmentInfo>allDepartmentInfoList public static List<DepartmentForm> convertFrom(List<Department> departmentList) {
) { return departmentList.stream().map(DepartmentForm::convertFrom).toList();
return allDepartmentInfoList.stream().map(DepartmentForm::convertFrom).distinct().toList();
} }
} }

View File

@@ -1,48 +0,0 @@
package com.example.rhizome.app.presentation.form;
import java.util.List;
import com.example.rhizome.app.domain.model.AllDepartmentInfo;
import com.example.rhizome.app.domain.model.Department;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DepartmentInfoForm {
/**
* 部ID
*/
private Integer idDepartment;
/**
* 部名
*/
private String nmDepartment;
public static DepartmentInfoForm convertFrom(Department department) {
return new DepartmentInfoForm(
department.getIdDepartment(),
department.getNmDepartment()
);
}
public static List<DepartmentInfoForm> convertFrom(List<Department>DepartmentList
) {
return DepartmentList.stream().map(DepartmentInfoForm::convertFrom).toList();
}
public static DepartmentInfoForm convertFrom(AllDepartmentInfo allDepartmentInfo) {
return new DepartmentInfoForm(
allDepartmentInfo.getDepartment().getIdDepartment(),
allDepartmentInfo.getDepartment().getNmDepartment()
);
}
public static List<DepartmentInfoForm> convertFromTo(List<AllDepartmentInfo>AllDepartmentInfoList
) {
return AllDepartmentInfoList.stream().map(DepartmentInfoForm::convertFrom).distinct().toList();
}
}

View File

@@ -1,46 +0,0 @@
package com.example.rhizome.app.presentation.form;
import java.util.List;
import com.example.rhizome.app.domain.model.AllDepartmentInfo;
import com.example.rhizome.app.domain.model.Division;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DivisionInfoForm {
/**
* 課ID
*/
private Integer idDivision;
/**
* 課名
*/
private String nmDivision;
public static DivisionInfoForm convertFrom(Division division) {
return new DivisionInfoForm(
division.getIdDivision(),
division.getNmDivision()
);
}
public static List<DivisionInfoForm> convertFrom(List<Division>divisionList
) {
return divisionList.stream().map(DivisionInfoForm::convertFrom).toList();
}
public static DivisionInfoForm convertFrom(AllDepartmentInfo allDepartmentInfo) {
return new DivisionInfoForm(
allDepartmentInfo.getDivision().getIdDivision(),
allDepartmentInfo.getDivision().getNmDivision()
);
}
public static List<DivisionInfoForm> convertFromTo(List<AllDepartmentInfo>AllDepartmentInfoList
) {
return AllDepartmentInfoList.stream().map(DivisionInfoForm::convertFrom).distinct().toList();
}
}

View File

@@ -1,13 +1,13 @@
package com.example.rhizome.app.presentation.form; package com.example.rhizome.app.presentation.form;
import java.util.List;
import com.example.rhizome.app.domain.model.AllEmployeeInfo;
import com.example.rhizome.app.domain.model.EmployeeInfo;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.List;
/** /**
* 画面に表示するために employee と department を Join した構造を扱うクラス * 画面に表示するために employee と department を Join した構造を扱うクラス
*/ */
@@ -37,73 +37,46 @@ public class EmployeeInfoForm {
*/ */
private String password; private String password;
/** /**
* 入社年月日 * パスワード
*/
private String hireDate;
/**
* 勤続年数
*/
private String tenure;
/**
* 管理者権限
*/ */
private Integer adminAuth; private Integer adminAuth;
/** /**
* 本部ID * 部署ID
*/
private Integer idHeadquarters;
/**
* 本部名
*/
private String nmHeadquarters;
/**
* 部ID
*/ */
private Integer idDepartment; private Integer idDepartment;
/** /**
* 部名 * 部署名
*/ */
private String nmDepartment; private String nmDepartment;
/**
* 課ID
*/
private Integer idDivision;
/**
* 課名
*/
private String nmDivision;
/** /**
* AllEmployeeInfo からEmployeeInfoForm に変換します。 * business 層の EmployeeInfo クラスから画面用(presentation 層)の EmployeeInfoForm に
* 変換します。
* *
* @param allEmployeeInfo AllEmployeeInfo インスタンス * @param employeeInfo business 層の EmployeeInfo インスタンス
* @return EmployeeInfoForm インスタンス * @return クラスから画面用(presentation 層)の EmployeeInfoForm インスタンス
*/ */
public static EmployeeInfoForm convertFrom(AllEmployeeInfo allEmployeeInfo) { public static EmployeeInfoForm convertFrom(EmployeeInfo employeeInfo) {
return new EmployeeInfoForm( return new EmployeeInfoForm(
allEmployeeInfo.getEmployee().getIdEmployee(), employeeInfo.getEmployee().getIdEmployee(),
allEmployeeInfo.getEmployee().getNmEmployee(), employeeInfo.getEmployee().getNmEmployee(),
allEmployeeInfo.getEmployee().getKnEmployee(), employeeInfo.getEmployee().getKnEmployee(),
allEmployeeInfo.getEmployee().getMailAddress(), employeeInfo.getEmployee().getMailAddress(),
allEmployeeInfo.getEmployee().getPassword(), employeeInfo.getEmployee().getPassword(),
allEmployeeInfo.getEmployee().getHireDate(), employeeInfo.getEmployee().getAdminAuth(),
null, employeeInfo.getDepartment().getIdDepartment(),
allEmployeeInfo.getEmployee().getAdminAuth(), employeeInfo.getDepartment().getNmDepartment()
allEmployeeInfo.getHeadquarters().getIdHeadquarters(), );
allEmployeeInfo.getHeadquarters().getNmHeadquarters(),
allEmployeeInfo.getDepartment().getIdDepartment(),
allEmployeeInfo.getDepartment().getNmDepartment(),
allEmployeeInfo.getDivision().getIdDivision(),
allEmployeeInfo.getDivision().getNmDivision());
} }
/** /**
* AllEmployeeInfo からEmployeeInfoForm に変換します。(リスト版) * business 層の EmployeeInfo クラスから画面用(presentation 層)の EmployeeInfoForm に
* 変換します。(リスト版)
* *
* @param allEmployeeInfo AllEmployeeInfo インスタンスのリスト * @param employeeInfoList business 層の EmployeeInfo インスタンスのリスト
* @return EmployeeInfoForm インスタンスのリスト * @return クラスから画面用(presentation 層)の EmployeeInfoForm インスタンスのリスト
*/ */
public static List<EmployeeInfoForm> convertFrom(List<AllEmployeeInfo> allEmployeeInfoList) { public static List<EmployeeInfoForm> convertFrom(List<EmployeeInfo> employeeInfoList) {
return allEmployeeInfoList.stream().map(EmployeeInfoForm::convertFrom).toList(); return employeeInfoList.stream().map(EmployeeInfoForm::convertFrom).toList();
} }
} }

View File

@@ -1,46 +0,0 @@
package com.example.rhizome.app.presentation.form;
import java.util.List;
import com.example.rhizome.app.domain.model.AllDepartmentInfo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class HeadquartersInfoForm {
/**
* 本部ID
*/
private Integer idHeadquarters;
/**
* 本部名
*/
private String nmHeadquarters;
/**
* AllDepartmentInfoから HeadquartersInfoFormに変換します。
*
* @param allDepartmentInfo AllDepartmentInfo インスタンス
* @return HeadquartersInfoForm インスタンス
*/
public static HeadquartersInfoForm convertFrom(AllDepartmentInfo allDepartmentInfo) {
return new HeadquartersInfoForm(
allDepartmentInfo.getHeadquarters().getIdHeadquarters(),
allDepartmentInfo.getHeadquarters().getNmHeadquarters());
}
/**
* AllDepartmentInfoから HeadquartersInfoFormに変換します。(リスト版)
*
* @param allDepartmentInfo AllDepartmentInfo インスタンスのリスト
* @return HeadquartersInfoForm インスタンスのリスト
*/
public static List<HeadquartersInfoForm> convertFrom(List<AllDepartmentInfo> allDepartmentInfoList) {
return allDepartmentInfoList.stream().map(HeadquartersInfoForm::convertFrom).distinct().toList();
}
}

View File

@@ -1,7 +1,6 @@
package com.example.rhizome.app.presentation.form; package com.example.rhizome.app.presentation.form;
import com.example.rhizome.app.domain.model.DepartmentInfo; import com.example.rhizome.app.domain.model.Department;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@@ -13,63 +12,29 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class InsertDepartmentForm { public class InsertDepartmentForm {
/** /**
* 本部ID * 部署ID
*/
private Integer idHeadquarters;
/**
* 本部名
*/
private String nmHeadquarters;
/**
* 部ID
*/ */
private Integer idDepartment; private Integer idDepartment;
/** /**
* 部名 * 部署名
*/ */
private String nmDepartment; private String nmDepartment;
/** /**
* 課ID * 画面用(presentation 層)の InsertDepartmentForm クラス を Business 層の Department クラスに変換
*/
private Integer idDivision;
/**
* 課名
*/
private String nmDivision;
/**
* 画面用(presentation 層)の InsertDepartmentForm クラス を Business 層の DepartmentInfo クラスに変換
* *
* @param insertDepartmentForm presentation 層用のクラス * @param insertDepartmentForm presentation 層用のクラス
* @return DepartmentFormのインスタンス * @return Business 層用のモデル
*/ */
public static DepartmentInfo convertTo(InsertDepartmentForm insertDepartmentForm) { public static Department convertTo(InsertDepartmentForm insertDepartmentForm) {
return new DepartmentInfo(insertDepartmentForm.getIdHeadquarters(), return new Department(insertDepartmentForm.getIdDepartment(), insertDepartmentForm.getNmDepartment());
insertDepartmentForm.getNmHeadquarters(),
insertDepartmentForm.getIdDepartment(),
insertDepartmentForm.getNmDepartment(),
insertDepartmentForm.getIdDivision(),
insertDepartmentForm.getNmDivision());
} }
public boolean haveNmDepartment() { public boolean haveNmDepartment() {
return nmDepartment.isBlank();
if (idHeadquarters == null && nmHeadquarters.isBlank()) {
return true;
}
if (idDepartment == null && nmDepartment.isBlank()) {
return true;
}
if (idDivision == null && nmDivision.isBlank()) {
return true;
}
return false;
} }
} }

View File

@@ -1,14 +1,13 @@
package com.example.rhizome.app.presentation.form; package com.example.rhizome.app.presentation.form;
import java.util.ArrayList;
import java.util.List;
import com.example.rhizome.app.domain.model.Employee; import com.example.rhizome.app.domain.model.Employee;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
/** /**
* 画面から渡ってきた登録内容をまとめ、再度画面に表示する為のクラス * 画面から渡ってきた登録内容をまとめ、再度画面に表示する為のクラス
*/ */
@@ -41,10 +40,6 @@ public class InsertEmployeeForm {
* 確認用パスワード * 確認用パスワード
*/ */
private String passwordConfirm; private String passwordConfirm;
/**
* 入社年月日
*/
private String hireDate;
/** /**
* 管理者権限 * 管理者権限
@@ -52,20 +47,10 @@ public class InsertEmployeeForm {
private Integer adminAuth; private Integer adminAuth;
/** /**
* 本部ID * 部署ID
*/
private Integer idHeadquarters;
/**
* 部ID
*/ */
private Integer idDepartment; private Integer idDepartment;
/**
* 課ID
*/
private Integer idDivision;
/** /**
* パスワードのValidation * パスワードのValidation
* チェック対象にエラーが有った場合エラーリストに文言を追加する * チェック対象にエラーが有った場合エラーリストに文言を追加する
@@ -120,9 +105,9 @@ public class InsertEmployeeForm {
insertEmployeeForm.getKnEmployee(), insertEmployeeForm.getKnEmployee(),
insertEmployeeForm.getMailAddress(), insertEmployeeForm.getMailAddress(),
insertEmployeeForm.getPassword(), insertEmployeeForm.getPassword(),
insertEmployeeForm.getHireDate(),
insertEmployeeForm.getAdminAuth(), insertEmployeeForm.getAdminAuth(),
insertEmployeeForm.getIdDivision()); insertEmployeeForm.getIdDepartment()
);
} }
/** /**
@@ -136,7 +121,6 @@ public class InsertEmployeeForm {
final String MAIL_ADDRESS_NULL_BLANK = "メールアドレス"; final String MAIL_ADDRESS_NULL_BLANK = "メールアドレス";
final String MANAGEMENT_ERROR = "管理者権限指定"; final String MANAGEMENT_ERROR = "管理者権限指定";
final String DEPARTMENT_ID_NULL_BLANK = "所属部署"; final String DEPARTMENT_ID_NULL_BLANK = "所属部署";
final String HIREDATE_NULL_BLANK = "入社年月日";
List<String> error = new ArrayList<>(); List<String> error = new ArrayList<>();
@@ -157,12 +141,9 @@ public class InsertEmployeeForm {
error.add(MANAGEMENT_ERROR); error.add(MANAGEMENT_ERROR);
} }
if (idDivision == null) { if (idDepartment == null) {
error.add(DEPARTMENT_ID_NULL_BLANK); error.add(DEPARTMENT_ID_NULL_BLANK);
} }
if (isNullOrBlank(hireDate)) {
error.add(HIREDATE_NULL_BLANK);
}
return error; return error;

View File

@@ -1,7 +1,7 @@
package com.example.rhizome.app.presentation.form; package com.example.rhizome.app.presentation.form;
import com.example.rhizome.app.domain.model.LoginUser;
import com.example.rhizome.app.domain.model.LoginUser;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@@ -37,7 +37,7 @@ public class LoginUserForm {
private Integer adminAuth; private Integer adminAuth;
/** /**
* 課ID * 部署ID
*/ */
private Integer idDepartment; private Integer idDepartment;
@@ -56,7 +56,8 @@ public class LoginUserForm {
loginUser.getMailAddress(), loginUser.getMailAddress(),
loginUser.getPassword(), loginUser.getPassword(),
loginUser.getAdminAuth(), loginUser.getAdminAuth(),
loginUser.getIdDivision()); loginUser.getIdDepartment()
);
} }
/** /**
@@ -74,7 +75,8 @@ public class LoginUserForm {
loginUserForm.getMailAddress(), loginUserForm.getMailAddress(),
loginUserForm.getPassword(), loginUserForm.getPassword(),
loginUserForm.getAdminAuth(), loginUserForm.getAdminAuth(),
loginUserForm.getIdDepartment()); loginUserForm.getIdDepartment()
);
} }
/** /**

View File

@@ -1,14 +1,13 @@
package com.example.rhizome.app.presentation.form; package com.example.rhizome.app.presentation.form;
import java.util.List;
import com.example.rhizome.app.domain.model.Department; import com.example.rhizome.app.domain.model.Department;
import com.example.rhizome.app.domain.model.SearchConditionDepartment; import com.example.rhizome.app.domain.model.SearchConditionDepartment;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.List;
/** /**
* 画面から渡ってきた検索条件をまとめ、再度画面に表示する為のクラス * 画面から渡ってきた検索条件をまとめ、再度画面に表示する為のクラス
*/ */
@@ -19,11 +18,11 @@ public class SearchConditionDepartmentForm {
/** /**
* 部署ID * 部署ID
*/ */
private Integer idDivision; private Integer idDepartment;
/** /**
* 部署名 * 部署名
*/ */
private String nmDivision; private String nmDepartment;
/** /**
* business 層の Department クラスから画面用(presentation 層)の SearchConditionDepartmentForm に * business 層の Department クラスから画面用(presentation 層)の SearchConditionDepartmentForm に
@@ -56,8 +55,9 @@ public class SearchConditionDepartmentForm {
*/ */
public static SearchConditionDepartment convertTo(SearchConditionDepartmentForm searchConditionDepartmentForm) { public static SearchConditionDepartment convertTo(SearchConditionDepartmentForm searchConditionDepartmentForm) {
return new SearchConditionDepartment( return new SearchConditionDepartment(
searchConditionDepartmentForm.getIdDivision(), searchConditionDepartmentForm.getIdDepartment(),
searchConditionDepartmentForm.nmDivision); searchConditionDepartmentForm.nmDepartment
);
} }
} }

View File

@@ -1,7 +1,6 @@
package com.example.rhizome.app.presentation.form; package com.example.rhizome.app.presentation.form;
import com.example.rhizome.app.domain.model.SearchConditionEmployee; import com.example.rhizome.app.domain.model.SearchConditionEmployee;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@@ -33,7 +32,7 @@ public class SearchConditionEmployeeForm {
/** /**
* 部署ID * 部署ID
*/ */
private Integer idDivision; private Integer idDepartment;
/** /**
* business 層の SearchConditionEmployee クラスから画面用(presentation 層)の SearchConditionEmployeeForm に * business 層の SearchConditionEmployee クラスから画面用(presentation 層)の SearchConditionEmployeeForm に
@@ -48,7 +47,8 @@ public class SearchConditionEmployeeForm {
searchConditionEmployee.getNmEmployee(), searchConditionEmployee.getNmEmployee(),
searchConditionEmployee.getKnEmployee(), searchConditionEmployee.getKnEmployee(),
searchConditionEmployee.getMailAddress(), searchConditionEmployee.getMailAddress(),
searchConditionEmployee.getIdDivision()); searchConditionEmployee.getIdDepartment()
);
} }
/** /**
@@ -64,6 +64,7 @@ public class SearchConditionEmployeeForm {
searchConditionEmployeeForm.getNmEmployee(), searchConditionEmployeeForm.getNmEmployee(),
searchConditionEmployeeForm.getKnEmployee(), searchConditionEmployeeForm.getKnEmployee(),
searchConditionEmployeeForm.getMailAddress(), searchConditionEmployeeForm.getMailAddress(),
searchConditionEmployeeForm.getIdDivision()); searchConditionEmployeeForm.getIdDepartment()
);
} }
} }

View File

@@ -1,74 +1,61 @@
package com.example.rhizome.app.presentation.form; package com.example.rhizome.app.presentation.form;
import com.example.rhizome.app.domain.model.AllDepartmentInfo; import com.example.rhizome.app.domain.model.Department;
import com.example.rhizome.app.domain.model.DepartmentInfo;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/** /**
* 画面の表示に使う部署コード管理用のクラス * 画面の表示に使う部署コード管理用のクラス
*/ */
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor
public class UpdateDepartmentForm { public class UpdateDepartmentForm {
/** /**
* 本部ID * 部署ID
*/
private Integer idHeadquarters;
/**
* 本部名
*/
private String nmHeadquarters;
/**
* 部ID
*/ */
private Integer idDepartment; private Integer idDepartment;
/** /**
* 部名 * 部署名
*/ */
private String nmDepartment; private String nmDepartment;
/**
* 課ID
*/
private Integer idDivision;
/**
* 課名
*/
private String nmDivision;
/** /**
* AllDepartmentInfoクラスから UpdateDepartmentForm に変換します。 * business 層の Department クラスから画面用(presentation 層)の UpdateDepartmentForm に
* 変換します。
* *
* @param allDepartmentInfo AllDepartmentInfo インスタンス * @param department business 層の Department インスタンス
* @return 画面用(presentation 層)の UpdateDepartmentForm インスタンス * @return 画面用(presentation 層)の UpdateDepartmentForm インスタンス
*/ */
public static UpdateDepartmentForm convertFrom(AllDepartmentInfo allDepartmentInfo) { public static UpdateDepartmentForm convertFrom(Department department) {
return new UpdateDepartmentForm( return new UpdateDepartmentForm(department.getIdDepartment(), department.getNmDepartment());
allDepartmentInfo.getHeadquarters().getIdHeadquarters(),
allDepartmentInfo.getHeadquarters().getNmHeadquarters(),
allDepartmentInfo.getDepartment().getIdDepartment(),
allDepartmentInfo.getDepartment().getNmDepartment(),
allDepartmentInfo.getDivision().getIdDivision(),
allDepartmentInfo.getDivision().getNmDivision());
} }
/** /**
* UpdateDepartmentFormから DepartmentInfo に変換します。 * business 層の Department クラスから画面用(presentation 層)の UpdateDepartmentForm に
* 変換します。(リスト版)
* *
* @param updateDepartmentForm UpdateDepartmentFormインスタンス * @param departmentList business 層の Department インスタンスのリスト
* @return DepartmentInfo インスタンス * @return 画面用(presentation 層)の UpdateDepartmentForm インスタンスのリスト
*/ */
public static DepartmentInfo convertTo(UpdateDepartmentForm updateDepartmentForm) { public static List<UpdateDepartmentForm> convertFrom(List<Department> departmentList) {
return new DepartmentInfo( return departmentList.stream().map(UpdateDepartmentForm::convertFrom).toList();
updateDepartmentForm.getIdHeadquarters(), }
updateDepartmentForm.getNmHeadquarters(),
updateDepartmentForm.getIdDepartment(),
updateDepartmentForm.getNmDepartment(),
updateDepartmentForm.getIdDivision(),
updateDepartmentForm.getNmDivision()
/**
* presentation 層の UpdateDepartmentForm クラスから Business 層の Department クラスに
* 変換します。
*
* @param updateDepartmentForm presentation 層のインスタンス
* @return Business 層の Department インスタンス
*/
public static Department convertTo(UpdateDepartmentForm updateDepartmentForm) {
return new Department(
updateDepartmentForm.getIdDepartment(),
updateDepartmentForm.getNmDepartment()
); );
} }
} }

View File

@@ -1,14 +1,13 @@
package com.example.rhizome.app.presentation.form; package com.example.rhizome.app.presentation.form;
import java.util.List;
import com.example.rhizome.app.domain.model.AllEmployeeInfo;
import com.example.rhizome.app.domain.model.Employee; import com.example.rhizome.app.domain.model.Employee;
import com.example.rhizome.app.domain.model.EmployeeInfo;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.List;
/** /**
* 画面から渡ってきた更新内容をまとめ、再度画面に表示する為のクラス * 画面から渡ってきた更新内容をまとめ、再度画面に表示する為のクラス
*/ */
@@ -41,52 +40,44 @@ public class UpdateEmployeeInfoForm {
* パスワード確認用 * パスワード確認用
*/ */
private String passwordConfirm; private String passwordConfirm;
/**
* 入社年月日
*/
private String hireDate;
/** /**
* 管理者権限 * 管理者権限
*/ */
private Integer adminAuth; private Integer adminAuth;
/** /**
* 部ID * 部署ID
*/ */
private Integer idDivision; private Integer idDepartment;
/**
* 本部ID
*/
private Integer idHeadquarters;
/** /**
* AllEmployeeInfo クラスからUpdateEmployeeInfoForm に変換します。 * business 層の EmployeeInfo クラスから画面用(presentation 層)の UpdateEmployeeInfoForm に
* 変換します。
* *
* @param allemployeeInfo AllEmployeeInfo インスタンス * @param employeeInfo business 層の EmployeeInfo インスタンス
* @return 画面用(presentation 層)の UpdateEmployeeInfoForm インスタンス * @return 画面用(presentation 層)の UpdateEmployeeInfoForm インスタンス
*/ */
public static UpdateEmployeeInfoForm convertFrom(AllEmployeeInfo allemployeeInfo) { public static UpdateEmployeeInfoForm convertFrom(EmployeeInfo employeeInfo) {
return new UpdateEmployeeInfoForm( return new UpdateEmployeeInfoForm(
allemployeeInfo.getEmployee().getIdEmployee(), employeeInfo.getEmployee().getIdEmployee(),
allemployeeInfo.getEmployee().getNmEmployee(), employeeInfo.getEmployee().getNmEmployee(),
allemployeeInfo.getEmployee().getKnEmployee(), employeeInfo.getEmployee().getKnEmployee(),
allemployeeInfo.getEmployee().getMailAddress(), employeeInfo.getEmployee().getMailAddress(),
allemployeeInfo.getEmployee().getPassword(), employeeInfo.getEmployee().getPassword(),
null, null,
allemployeeInfo.getEmployee().getHireDate(), employeeInfo.getEmployee().getAdminAuth(),
allemployeeInfo.getEmployee().getAdminAuth(), employeeInfo.getDepartment().getIdDepartment()
allemployeeInfo.getDivision().getIdDivision(), );
allemployeeInfo.getHeadquarters().getIdHeadquarters());
} }
/** /**
* AllEmployeeInfo クラスから画面用 UpdateEmployeeInfoForm に変換します。(リスト版) * business 層の EmployeeInfo クラスから画面用(presentation 層)の UpdateEmployeeInfoForm に
* 変換します。(リスト版)
* *
* @param allemployeeInfoList business 層の AllEmployeeInfo インスタンスのリスト * @param employeeInfoList business 層の EmployeeInfo インスタンスのリスト
* @return 画面用(presentation 層)の UpdateEmployeeInfoForm インスタンスのリスト * @return 画面用(presentation 層)の UpdateEmployeeInfoForm インスタンスのリスト
*/ */
public static List<UpdateEmployeeInfoForm> convertFrom(List<AllEmployeeInfo> allemployeeInfoList) { public static List<UpdateEmployeeInfoForm> convertFrom(List<EmployeeInfo> employeeInfoList) {
return allemployeeInfoList.stream().map(UpdateEmployeeInfoForm::convertFrom).toList(); return employeeInfoList.stream().map(UpdateEmployeeInfoForm::convertFrom).toList();
} }
/** /**
@@ -103,9 +94,9 @@ public class UpdateEmployeeInfoForm {
updateEmployeeInfoForm.getKnEmployee(), updateEmployeeInfoForm.getKnEmployee(),
updateEmployeeInfoForm.getMailAddress(), updateEmployeeInfoForm.getMailAddress(),
updateEmployeeInfoForm.getPassword(), updateEmployeeInfoForm.getPassword(),
updateEmployeeInfoForm.getHireDate(),
updateEmployeeInfoForm.getAdminAuth(), updateEmployeeInfoForm.getAdminAuth(),
updateEmployeeInfoForm.getIdDivision()); updateEmployeeInfoForm.getIdDepartment()
);
} }
/** /**
@@ -128,6 +119,7 @@ public class UpdateEmployeeInfoForm {
errorFlag = true; errorFlag = true;
} }
return errorFlag; return errorFlag;
} }

View File

@@ -2,7 +2,6 @@ package com.example.rhizome.app.presentation.form;
import com.example.rhizome.app.domain.model.Employee; import com.example.rhizome.app.domain.model.Employee;
import com.example.rhizome.app.domain.model.LoginUser; import com.example.rhizome.app.domain.model.LoginUser;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@@ -38,10 +37,7 @@ public class UpdatePersonalUserForm {
* パスワード確認用 * パスワード確認用
*/ */
private String passwordConfirm; private String passwordConfirm;
/**
* 入社年月日
*/
private String hireDate;
/** /**
* 画面用(presentation 層)の UpdatePersonalUserForm クラスから business 層の Employee クラスに * 画面用(presentation 層)の UpdatePersonalUserForm クラスから business 層の Employee クラスに
@@ -57,9 +53,9 @@ public class UpdatePersonalUserForm {
updatePersonalUserForm.getKnEmployee(), updatePersonalUserForm.getKnEmployee(),
updatePersonalUserForm.getMailAddress(), updatePersonalUserForm.getMailAddress(),
updatePersonalUserForm.getPassword(), updatePersonalUserForm.getPassword(),
updatePersonalUserForm.getHireDate(),
null, null,
null); null
);
} }
/** /**
@@ -76,9 +72,7 @@ public class UpdatePersonalUserForm {
employee.getKnEmployee(), employee.getKnEmployee(),
employee.getMailAddress(), employee.getMailAddress(),
employee.getPassword(), employee.getPassword(),
null, null
employee.getHireDate()
); );
} }
@@ -96,8 +90,8 @@ public class UpdatePersonalUserForm {
loginUser.getKnEmployee(), loginUser.getKnEmployee(),
loginUser.getMailAddress(), loginUser.getMailAddress(),
loginUser.getPassword(), loginUser.getPassword(),
null, null
null); );
} }
/** /**
@@ -120,6 +114,7 @@ public class UpdatePersonalUserForm {
errorFlag = true; errorFlag = true;
} }
return errorFlag; return errorFlag;
} }

View File

@@ -30,7 +30,7 @@
</div> </div>
<table> <table>
<tr> <tr>
<th class="header"> 本部ID</th> <th class="header">部署ID</th>
<td> <td>
<label> <label>
<input class="readOnly" <input class="readOnly"
@@ -41,30 +41,7 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<th class="header">本部名</th> <th class="header">部署名</th>
<td>
<label>
<input class="readOnly"
name="nmHeadquarters"
readonly="readonly"
th:value="*{nmHeadquarters}"
type="text"/>
</label>
</td>
</tr>
<tr>
<th class="header">部ID</th>
<td>
<label>
<input class="readOnly"
readonly="readonly"
type="text"
value="自動で設定されます"/>
</label>
</td>
</tr>
<tr>
<th class="header">部名</th>
<td> <td>
<label> <label>
<input class="readOnly" <input class="readOnly"
@@ -75,31 +52,6 @@
</label> </label>
</td> </td>
</tr> </tr>
<tr>
<th class="header">課ID</th>
<td>
<label>
<input class="readOnly"
readonly="readonly"
type="text"
value="自動で設定されます"/>
</label>
</td>
</tr>
<tr>
<th class="header">課名</th>
<td>
<label>
<input class="readOnly"
name="nmDivision"
readonly="readonly"
th:value="*{nmDivision}"
type="text"/>
</label>
</td>
</tr>
<tr> <tr>
<td class="btnArea" colspan="2"> <td class="btnArea" colspan="2">
<input type="submit" value="登録"/> <input type="submit" value="登録"/>

View File

@@ -13,14 +13,16 @@
</head> </head>
<body> <body>
<h1> <h1>
部署登録    部署登録   
<div class="rightSection"> <div class="rightSection">
<span class="loginInfo">ログイン者名:<span th:text="${session.loginUser.nmEmployee}"></span></span> <span class="loginInfo">ログイン者名:<span th:text="${session.loginUser.nmEmployee}"></span></span>
<button class="logoutButton" onclick="logoutSubmit()">ログアウト</button> <button class="logoutButton" onclick="logoutSubmit()">ログアウト</button>
</div> </div>
</h1> </h1>
<form action="insertDepartmentConfirm" method="post" th:object="${insertDepartmentForm}" id="insertDepartmentForm"> <form action="insertDepartmentConfirm"
method="post"
th:object="${insertDepartmentForm}">
<div class="msgBox error" th:if="${messageError} != null"> <div class="msgBox error" th:if="${messageError} != null">
<span class="error" th:text="${messageError.message}"></span> <span class="error" th:text="${messageError.message}"></span>
@@ -28,163 +30,37 @@
<table> <table>
<tr> <tr>
<th class="header">本部ID</th> <th class="header">部署ID</th>
<td> <td>
<label> <label>
<input class="readOnly" readonly="readonly" type="text" value="自動で設定されます" /> <input class="readOnly"
</label> readonly="readonly"
</td> type="text"
</tr> value="自動で設定されます"
/>
<tr>
<th class="header">本部名</th>
<td>
<label>
<input maxlength="50" placeholder="本部名" th:field="*{nmHeadquarters}" type="text"
id="nmHeadquarters1" />
</label> </label>
</td> </td>
</tr> </tr>
<tr> <tr>
<th class="header"></th> <th class="header">部署名</th>
<td> <td>
<label> <label>
<select th:field="*{nmHeadquarters}" id="nmHeadquarters2"> <input maxlength="50"
<option value="">本部を選択</option> placeholder="部署名"
<option th:each="headquarters : ${headquartersFormList}" required="required"
th:selected="${insertDepartmentForm.idHeadquarters != null && headquarters.idHeadquarters == insertDepartmentForm.idHeadquarters}" th:field="*{nmDepartment}"
th:text="${headquarters.nmHeadquarters}" th:value="${headquarters.nmHeadquarters}"> type="text"
</option> />
</select>
</label> </label>
</td> </td>
</tr> </tr>
<tr>
<th class="header">部ID</th>
<td>
<label>
<input class="readOnly" readonly="readonly" type="text" value="自動で設定されます" />
</label>
</td>
</tr>
<tr>
<th class="header">部名</th>
<td>
<label>
<input maxlength="50" placeholder="部名" th:field="*{nmDepartment}" type="text"
id="nmDepartment1" />
</label>
</td>
</tr>
<tr>
<th class="header"></th>
<td>
<label>
<select th:field="*{nmDepartment}" id="nmDepartment2">
<option value="">部を選択</option>
<option th:each="department : ${departmentFormList}"
th:selected="${insertDepartmentForm.idDepartment != null && department.idDepartment == insertDepartmentForm.idDepartment}"
th:text="${department.nmDepartment}" th:value="${department.nmDepartment}">
</option>
</select>
</label>
</td>
</tr>
<tr>
<th class="header">課ID</th>
<td>
<label>
<input class="readOnly" readonly="readonly" type="text" value="自動で設定されます" />
</label>
</td>
</tr>
<tr>
<th class="header">課名</th>
<td>
<label>
<input maxlength="50" placeholder="課名" th:field="*{nmDivision}" type="text" id="nmDivision1" />
</label>
</td>
</tr>
<tr>
<th class="header"></th>
<td>
<label>
<select th:field="*{nmDivision}" id="nmDivision2">
<option value="">課を選択</option>
<option th:each="division : ${divisionFormList}"
th:selected="${insertDepartmentForm.idDivision != null && division.idDivision == insertDepartmentForm.idDivision}"
th:text="${division.nmDivision}" th:value="${division.nmDivision}">
</option>
</select>
</label>
</td>
</tr>
<tr> <tr>
<td class="btnArea" colspan="2"> <td class="btnArea" colspan="2">
<input type="submit" value="登録確認" /> <input type="submit" value="登録確認"/>
</td> </td>
</tr> </tr>
</table> </table>
</form> </form>
<a href="showMenu">メニューに戻る</a> <a href="showMenu">メニューに戻る</a>
</body> </body>
<script type="text/javascript">
const nmHeadquarters1 = document.getElementById('nmHeadquarters1');
const nmHeadquarters2 = document.getElementById('nmHeadquarters2');
document.getElementById('insertDepartmentForm').addEventListener('submit', function (e) {
if (nmHeadquarters1.value !== "") {
nmHeadquarters2.removeAttribute('name');
} else if (nmHeadquarters2.value !== "") {
nmHeadquarters1.removeAttribute('name');
}
// ↓両方の入力欄が空で登録確認ボタンを押した時用どちらかの空の情報を送る
// (どちらかじゃないと","が入ってしまう)
else if (nmHeadquarters2.value === "" && nmHeadquarters1.value === "") {
nmHeadquarters2.removeAttribute('name');
}
const nmDepartment1 = document.getElementById('nmDepartment1');
const nmDepartment2 = document.getElementById('nmDepartment2');
if (nmDepartment1.value !== "") {
nmDepartment2.removeAttribute('name');
} else if (nmDepartment2.value !== "") {
nmDepartment1.removeAttribute('name');
// ↓両方の入力欄が空で登録確認ボタンを押した時用どちらかの空の情報を送る
// (どちらかじゃないと","が入ってしまう)
} else if (nmDepartment1.value === "" && nmDepartment2.value === "") {
nmDepartment2.removeAttribute('name');
}
const nmDivision1 = document.getElementById('nmDivision1');
const nmDivision2 = document.getElementById('nmDivision2');
if (document.getElementById('nmDivision1').value !== "") {
document.getElementById('nmDivision2').removeAttribute('name');
} else if (document.getElementById('nmDivision2').value !== "") {
document.getElementById('nmDivision1').removeAttribute('name');
// ↓両方の入力欄が空で登録確認ボタンを押した時用どちらかの空の情報を送る
// (どちらかじゃないと","が入ってしまう)
} else if (nmDivision1.value === "" && nmDivision2.value === "") {
nmDivision2.removeAttribute('name');
}
});
</script>
</html> </html>

View File

@@ -89,18 +89,6 @@
</label> </label>
</td> </td>
</tr> </tr>
<tr>
<th class="header">入社年月日</th>
<td>
<label>
<input class="readOnly"
name="hireDate"
readonly="readonly"
th:value="*{hireDate}"
type="date"/>
</label>
</td>
</tr>
<tr> <tr>
<th class="header">管理者権限</th> <th class="header">管理者権限</th>
<td> <td>
@@ -119,52 +107,20 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<th class="header" style="vertical-align: top;">所属部署</th> <th class="header">所属部署</th>
<td> <td>
<label>
<select name="idHeadquarters" required="required" th:field="*{idHeadquarters}">
<th:block th:each="headquarters : ${departmentFormList}">
<th:block
th:if="${insertEmployeeForm.idHeadquarters != null && headquarters.idHeadquarters == insertEmployeeForm.idHeadquarters}">>
<option
th:utext="
${headquarters.nmHeadquarters}"
th:value="${headquarters.idHeadquarters}">
</option>
</th:block>
</th:block>
</select>
</label>
<br>
<label> <label>
<select name="idDepartment" required="required" th:field="*{idDepartment}"> <select name="idDepartment" required="required" th:field="*{idDepartment}">
<th:block th:each="department : ${departmentFormList}"> <th:block th:each="department : ${departmentFormList}">
<th:block <th:block
th:if="${insertEmployeeForm.idDepartment != null && department.idDepartment == insertEmployeeForm.idDepartment}">> th:if="${insertEmployeeForm.idDepartment != null && department.idDepartment == insertEmployeeForm.idDepartment}">
<option <option th:text="${department.nmDepartment}"
th:utext="
${department.nmDepartment}"
th:value="${department.idDepartment}"> th:value="${department.idDepartment}">
</option> </option>
</th:block> </th:block>
</th:block> </th:block>
</select> </select>
</label> </label>
<br>
<label>
<select name="idDivision" required="required" th:field="*{idDivision}">
<th:block th:each="division : ${departmentFormList}">
<th:block
th:if="${insertEmployeeForm.idDivision != null && division.idDivision == insertEmployeeForm.idDivision}">
<option
th:utext="
${division.nmDivision}"
th:value="${division.idDivision}">
</option>
</th:block>
</th:block>
</select>
</label>
</td> </td>
</tr> </tr>
<tr> <tr>

View File

@@ -114,19 +114,6 @@
</label> </label>
</td> </td>
</tr> </tr>
<tr>
<th class="header">入社年月日</th>
<td>
<label>
<input
placeholder="入社年月日"
required="required"
th:field="*{hireDate}"
type="date"
/>
</label>
</td>
</tr>
<tr> <tr>
<th class="header">管理者権限</th> <th class="header">管理者権限</th>
<td> <td>
@@ -146,47 +133,19 @@
</tr> </tr>
<tr> <tr>
<th class="header">所属部署</th>
<th class="header" >所属本部</th>
<td> <td>
<label> <label>
<select id="headquartersSelect" required="required" th:field="*{idHeadquarters}"> <select required="required" th:field="*{idDepartment}">
<option value="">本部を選択</option> <option th:each="department : ${departmentFormList}"
<option th:each="headquarters : ${departmentFormList}" th:selected="${insertEmployeeForm.idDepartment != null && department.idDepartment == insertEmployeeForm.idDepartment}"
th:utext=" th:text="${department.nmDepartment}"
${headquarters.nmHeadquarters}" th:value="${department.idDepartment}">
th:value="${headquarters.idHeadquarters}">
</option> </option>
</select> </select>
</label> </label>
</td> </td>
</tr> </tr>
<tr>
<th class="header" >所属部</th>
<td>
<label>
<select id="departmentSelect" required="required" th:field="*{idDepartment}">
<option value="">先に本部を選択してください</option>
</select>
</label>
</td>
</tr>
<tr>
<th class="header" >所属課</th>
<td>
<label>
<select id="divisionSelect" required="required" th:field="*{idDivision}">
<option value="">先に部を選択してください</option>
</select>
</label>
</td>
</tr>
<tr> <tr>
<td class="btnArea" colspan="2"> <td class="btnArea" colspan="2">
<input type="submit" value="登録確認"/> <input type="submit" value="登録確認"/>
@@ -196,73 +155,4 @@
</form> </form>
<a href="showMenu">メニューに戻る</a> <a href="showMenu">メニューに戻る</a>
</body> </body>
<!--プルダウン絞り込み実装用-->
<script>
const headquartersSelect = document.getElementById('headquartersSelect');
const departmentSelect = document.getElementById('departmentSelect');
const divisionSelect = document.getElementById('divisionSelect');
headquartersSelect.addEventListener('change', function() {
const id_headquarters = this.value;
departmentSelect.disabled = true;
divisionSelect.disabled = true;
departmentSelect.innerHTML = '<option value="">-- 部を選択 --</option>';
divisionSelect.innerHTML = '<option value="">-- 先に部を選択してください --</option>';
if (!id_headquarters) return;
fetch(`insertEmployeeInput/searchDepartment?id_headquarters=${id_headquarters}`,{
method: 'GET',
headers: {
'Accept': 'application/json'
}
})
.then(res => {
return res.json();
})
.then(list => {
departmentSelect.disabled = false;
list.forEach(form => {
const opt = document.createElement('option');
opt.value = form.idDepartment;
opt.textContent = form.nmDepartment;
departmentSelect.appendChild(opt);
});
})
});
departmentSelect.addEventListener('change', function() {
const id_department = this.value;
divisionSelect.disabled = true;
divisionSelect.innerHTML = '<option value="">-- 課を選択 --</option>';
if (!id_department) return;
fetch(`/insertEmployeeInput/searchDepartment/searchDivision?id_department=${id_department}`,{
method: 'GET',
headers: {
'Accept': 'application/json'
}
})
.then(res => {
return res.json();
})
.then(list => {
divisionSelect.disabled = false;
list.forEach(form => {
const opt = document.createElement('option');
opt.value = form.idDivision;
opt.textContent = form.nmDivision;
divisionSelect.appendChild(opt);
});
})
});
</script>
</html> </html>

View File

@@ -32,7 +32,7 @@
<th class="header">部署ID</th> <th class="header">部署ID</th>
<td> <td>
<input placeholder="部署ID" <input placeholder="部署ID"
th:field="*{idDivision}" th:field="*{idDepartment}"
type="number"/> type="number"/>
</td> </td>
</tr> </tr>
@@ -40,11 +40,10 @@
<th class="header">部署名</th> <th class="header">部署名</th>
<td> <td>
<input placeholder="部署名" <input placeholder="部署名"
th:field="*{nmDivision}" th:field="*{nmDepartment}"
type="text"/> type="text"/>
</td> </td>
</tr> </tr>
<!-- 現状は課のみで検索ができる仕様-->
<tr> <tr>
<td class="btnArea" colspan="2"> <td class="btnArea" colspan="2">
<input type="submit" value="検索"/> <input type="submit" value="検索"/>
@@ -71,33 +70,25 @@
<table class="half-table-grid table-striped table-hover"> <table class="half-table-grid table-striped table-hover">
<thead> <thead>
<tr> <tr>
<th style="width: 60px;">本部ID</th> <th style="width: 60px;">部署ID</th>
<th style="width: 100px;">本部名</th> <th style="width: 100px;">部署名</th>
<th style="width: 60px;">部ID</th>
<th style="width: 100px;">部名</th>
<th style="width: 60px;">課ID</th>
<th style="width: 100px;">課名</th>
<th style="width: 150px;">操作</th> <th style="width: 150px;">操作</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr th:each="departmentForm : ${departmentFormList}"> <tr th:each="departmentForm : ${departmentFormList}">
<td th:text="${departmentForm.idHeadquarters}"></td>
<td th:text="${departmentForm.nmHeadquarters}"></td>
<td th:text="${departmentForm.idDepartment}"></td> <td th:text="${departmentForm.idDepartment}"></td>
<td th:text="${departmentForm.nmDepartment}"></td> <td th:text="${departmentForm.nmDepartment}"></td>
<td th:text="${departmentForm.idDivision}"></td>
<td th:text="${departmentForm.nmDivision}"></td>
<td> <td>
<!-- 更新フォーム --> <!-- 更新フォーム -->
<form action="showUpdateDepartment" method="post" style="display: inline;"> <form action="showUpdateDepartment" method="post" style="display: inline;">
<input name="idDivision" th:value="${departmentForm.idDivision}" type="hidden"> <input name="idDepartment" th:value="${departmentForm.idDepartment}" type="hidden">
<input type="submit" value="更新"> <input type="submit" value="更新">
</form> </form>
<!-- 削除フォーム --> <!-- 削除フォーム -->
<form action="deleteDepartment" method="post" onsubmit="return confirm('本当に削除しますか?');" <form action="deleteDepartment" method="post" onsubmit="return confirm('本当に削除しますか?');"
style="display: inline;"> style="display: inline;">
<input name="idDivision" th:value="${departmentForm.idDivision}" type="hidden"> <input name="idDepartment" th:value="${departmentForm.idDepartment}" type="hidden">
<input type="submit" value="削除"> <input type="submit" value="削除">
</form> </form>
</td> </td>
@@ -114,8 +105,8 @@
<script type="text/javascript"> <script type="text/javascript">
function clearInput() { function clearInput() {
document.getElementById('idDivision').value = ''; document.getElementById('idDepartment').value = '';
document.getElementById('nmDivision').value = ''; document.getElementById('nmDepartment').value = '';
} }

View File

@@ -64,14 +64,13 @@
<tr> <tr>
<th class="header">所属部署</th> <th class="header">所属部署</th>
<td> <td>
<select th:field="*{idDivision}"> <select th:field="*{idDepartment}">
<option value=""></option> <option value=""></option>
<option th:each="division : ${departmentFormList}" <option th:each="department : ${departmentFormList}"
th:selected="${searchConditionEmployeeForm.idDivision != null && division.idDivision == searchConditionEmployeeForm.idDivision}" th:selected="${searchConditionEmployeeForm.idDepartment != null && department.idDepartment == searchConditionEmployeeForm.idDepartment}"
th:text="${division.nmDivision}" th:text="${department.nmDepartment}"
th:value="${division.idDivision}"> th:value="${department.idDepartment}">
</option> </option>
<!-- 現状課だけでの検索の実装-->
</select> </select>
</td> </td>
</tr> </tr>
@@ -106,8 +105,6 @@
<th style="width: 150px;">フリガナ</th> <th style="width: 150px;">フリガナ</th>
<th style="width: 150px;">メールアドレス</th> <th style="width: 150px;">メールアドレス</th>
<th style="width: 100px;">パスワード</th> <th style="width: 100px;">パスワード</th>
<th style="width: 60px;">入社年月日</th>
<th style="width: 60px;">勤続年数</th>
<th style="width: 70px;">管理者フラグ</th> <th style="width: 70px;">管理者フラグ</th>
<th style="width: 150px;">所属部署</th> <th style="width: 150px;">所属部署</th>
<th style="width: 150px;">操作</th> <th style="width: 150px;">操作</th>
@@ -120,14 +117,8 @@
<td th:text="${employeeInfoForm.knEmployee}"></td> <td th:text="${employeeInfoForm.knEmployee}"></td>
<td th:text="${employeeInfoForm.mailAddress}"></td> <td th:text="${employeeInfoForm.mailAddress}"></td>
<td th:text="${employeeInfoForm.password}"></td> <td th:text="${employeeInfoForm.password}"></td>
<td th:text="${employeeInfoForm.hireDate}"></td>
<td th:text="${employeeInfoForm.tenure}"></td>
<td th:text="${employeeInfoForm.adminAuth}"></td> <td th:text="${employeeInfoForm.adminAuth}"></td>
<td th:utext="${employeeInfoForm.nmHeadquarters}+'<br/>・'+ <td th:text="${employeeInfoForm.nmDepartment}"></td>
${employeeInfoForm.nmDepartment}+'<br/>・'+
${employeeInfoForm.nmDivision}"
></td>
<td> <td>
<!-- 更新フォーム --> <!-- 更新フォーム -->
<form action="showUpdateEmployee" method="post" style="display: inline;"> <form action="showUpdateEmployee" method="post" style="display: inline;">
@@ -158,7 +149,7 @@
document.getElementById('nmEmployee').value = ''; document.getElementById('nmEmployee').value = '';
document.getElementById('knEmployee').value = ''; document.getElementById('knEmployee').value = '';
document.getElementById('mailAddress').value = ''; document.getElementById('mailAddress').value = '';
document.getElementById('idDivision').selectedIndex = 0; document.getElementById('idDepartment').selectedIndex = 0;
} }

View File

@@ -30,32 +30,7 @@
</div> </div>
<table> <table>
<tr> <tr>
<th class="header">本部ID</th> <th class="header">部署ID</th>
<td>
<label>
<input class="readOnly"
readonly="readonly"
th:field="*{idHeadquarters}"
type="text"
/>
</label>
</td>
</tr>
<tr>
<th class="header">本部名</th>
<td>
<label>
<input maxlength="10"
placeholder="本部名"
required="required"
th:field="*{nmHeadquarters}"
type="text"
/>
</label>
</td>
</tr>
<tr>
<th class="header">部ID</th>
<td> <td>
<label> <label>
<input class="readOnly" <input class="readOnly"
@@ -67,11 +42,11 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<th class="header">部名</th> <th class="header">部署名</th>
<td> <td>
<label> <label>
<input maxlength="10" <input maxlength="10"
placeholder="部名" placeholder="部署名"
required="required" required="required"
th:field="*{nmDepartment}" th:field="*{nmDepartment}"
type="text" type="text"
@@ -79,31 +54,6 @@
</label> </label>
</td> </td>
</tr> </tr>
<tr>
<th class="header">課ID</th>
<td>
<label>
<input class="readOnly"
readonly="readonly"
th:field="*{idDivision}"
type="text"
/>
</label>
</td>
</tr>
<tr>
<th class="header">課名</th>
<td>
<label>
<input maxlength="10"
placeholder="課名"
required="required"
th:field="*{nmDivision}"
type="text"
/>
</label>
</td>
</tr>
<tr> <tr>
<td class="btnArea" colspan="2"> <td class="btnArea" colspan="2">
<input type="submit" value="更新"/> <input type="submit" value="更新"/>

View File

@@ -13,15 +13,18 @@
</head> </head>
<body> <body>
<h1> <h1>
社員情報更新    社員情報更新   
<div class="rightSection"> <div class="rightSection">
<span class="loginInfo">ログイン者名:<span th:text="${session.loginUser.nmEmployee}"></span></span> <span class="loginInfo">ログイン者名:<span th:text="${session.loginUser.nmEmployee}"></span></span>
<button class="logoutButton" onclick="logoutSubmit()">ログアウト</button> <button class="logoutButton" onclick="logoutSubmit()">ログアウト</button>
</div> </div>
</h1> </h1>
<form action="/updateEmployeeResult" method="post" onsubmit="return confirm('本当によろしいですか?');" <form action="/updateEmployeeResult"
th:object="${updateEmployeeInfoForm}"> method="post"
onsubmit="return confirm('本当によろしいですか?');"
th:object="${updateEmployeeInfoForm}"
>
<div class="msgBox error" th:if="${messageError != null}"> <div class="msgBox error" th:if="${messageError != null}">
<span class="error" th:each="message : ${messageError.message}" th:text="${message}"></span> <span class="error" th:each="message : ${messageError.message}" th:text="${message}"></span>
</div> </div>
@@ -30,7 +33,11 @@
<th class="header">社員ID</th> <th class="header">社員ID</th>
<td> <td>
<label> <label>
<input class="readOnly" readonly="readonly" th:field="*{idEmployee}" type="text" /> <input class="readOnly"
readonly="readonly"
th:field="*{idEmployee}"
type="text"
/>
</label> </label>
</td> </td>
</tr> </tr>
@@ -38,8 +45,12 @@
<th class="header">社員名</th> <th class="header">社員名</th>
<td> <td>
<label> <label>
<input maxlength="50" placeholder="社員名" required="required" th:field="*{nmEmployee}" <input maxlength="50"
type="text" /> placeholder="社員名"
required="required"
th:field="*{nmEmployee}"
type="text"
/>
</label> </label>
</td> </td>
</tr> </tr>
@@ -47,8 +58,13 @@
<th class="header">社員名フリガナ</th> <th class="header">社員名フリガナ</th>
<td> <td>
<label> <label>
<input maxlength="50" oninput="convertToKatakana(this)" placeholder="フリガナ" required="required" <input maxlength="50"
th:field="*{knEmployee}" type="text" /> oninput="convertToKatakana(this)"
placeholder="フリガナ"
required="required"
th:field="*{knEmployee}"
type="text"
/>
</label> </label>
</td> </td>
</tr> </tr>
@@ -56,8 +72,12 @@
<th class="header">メールアドレス</th> <th class="header">メールアドレス</th>
<td> <td>
<label> <label>
<input maxlength="100" placeholder="メールアドレス" required="required" th:field="*{mailAddress}" <input maxlength="100"
type="email" /> placeholder="メールアドレス"
required="required"
th:field="*{mailAddress}"
type="email"
/>
</label> </label>
</td> </td>
</tr> </tr>
@@ -65,8 +85,11 @@
<th class="header">パスワード</th> <th class="header">パスワード</th>
<td> <td>
<label> <label>
<input pattern="^(?=.*?[a-zA-Z])(?=.*?\d)[a-zA-Z\d]{3,10}$" placeholder="パスワード" <input pattern="^(?=.*?[a-zA-Z])(?=.*?\d)[a-zA-Z\d]{3,10}$"
th:field="*{password}" type="password" /> placeholder="パスワード"
th:field="*{password}"
type="password"
/>
</label> </label>
</td> </td>
</tr> </tr>
@@ -85,8 +108,11 @@
<th class="header">パスワード確認用</th> <th class="header">パスワード確認用</th>
<td> <td>
<label> <label>
<input pattern="^(?=.*?[a-zA-Z])(?=.*?\d)[a-zA-Z\d]{3,10}$" placeholder="パスワード確認用" <input pattern="^(?=.*?[a-zA-Z])(?=.*?\d)[a-zA-Z\d]{3,10}$"
th:field="*{passwordConfirm}" type="password" /> placeholder="パスワード確認用"
th:field="*{passwordConfirm}"
type="password"
/>
</label> </label>
</td> </td>
</tr> </tr>
@@ -95,64 +121,40 @@
<td> <td>
<label> <label>
<input id="adminAuth1" name="adminAuth" th:checked="${updateEmployeeInfoForm.adminAuth == 1}" <input id="adminAuth1" name="adminAuth" th:checked="${updateEmployeeInfoForm.adminAuth == 1}"
type="radio" value="1"> 管理者権限 type="radio"
value="1"> 管理者権限
</label> </label>
<label> <label>
<input id="adminAuth0" name="adminAuth" <input id="adminAuth0" name="adminAuth"
th:checked="${updateEmployeeInfoForm.adminAuth == null or updateEmployeeInfoForm.adminAuth == 0}" th:checked="${updateEmployeeInfoForm.adminAuth == null or updateEmployeeInfoForm.adminAuth == 0}"
type="radio" value="0"> type="radio"
value="0">
一般権限 一般権限
</label> </label>
</td> </td>
</tr> </tr>
<tr> <tr>
<th class="header">所属部署</th>
<th class="header">所属本部</th>
<td> <td>
<label> <label>
<select id="headquartersSelect" th:field="*{idHeadquarters}"> <select required="required" th:field="*{idDepartment}">
<option value="">本部を選択</option> <option th:each="department : ${departmentFormList}"
<option th:each="headquarters : ${departmentFormList}" th:utext=" th:selected="${updateEmployeeInfoForm.idDepartment != null && department.idDepartment == updateEmployeeInfoForm.idDepartment}"
${headquarters.nmHeadquarters}" th:value="${headquarters.idHeadquarters}"> th:text="${department.nmDepartment}"
th:value="${department.idDepartment}">
</option> </option>
</select> </select>
</label> </label>
</td> </td>
</tr> </tr>
<tr>
<th class="header">所属部</th>
<td>
<label>
<select id="departmentSelect" >
<option value="">先に本部を選択してください</option>
</select>
</label>
</td>
</tr>
<tr>
<th class="header">所属課</th>
<td>
<label>
<select id="divisionSelect" th:field="*{idDivision}">
<option value="">先に部を選択してください</option>
</select>
</label>
</td>
</tr>
<tr> <tr>
<td class="btnArea" colspan="2"> <td class="btnArea" colspan="2">
<input type="submit" value="更新" /> <input type="submit" value="更新"/>
</td> </td>
</tr> </tr>
</table> </table>
</form> </form>
<a href="javascript:selectSubmit()">一覧に戻る</a> <a href="javascript:selectSubmit()">一覧に戻る</a>
</body> </body>
<script> <script>
@@ -175,73 +177,5 @@
form.submit(); form.submit();
} }
const headquartersSelect = document.getElementById('headquartersSelect');
const departmentSelect = document.getElementById('departmentSelect');
const divisionSelect = document.getElementById('divisionSelect');
headquartersSelect.addEventListener('change', function () {
const id_headquarters = this.value;
departmentSelect.disabled = true;
divisionSelect.disabled = true;
departmentSelect.innerHTML = '<option value="">-- 部を選択 --</option>';
divisionSelect.innerHTML = '<option value="">-- 先に部を選択してください --</option>';
if (!id_headquarters) return;
fetch(`updateEmployeeInput/searchDepartment?id_headquarters=${id_headquarters}`, {
method: 'GET',
headers: {
'Accept': 'application/json'
}
})
.then(res => {
return res.json();
})
.then(list => {
departmentSelect.disabled = false;
list.forEach(form => {
const opt = document.createElement('option');
opt.value = form.idDepartment;
opt.textContent = form.nmDepartment;
departmentSelect.appendChild(opt);
});
})
});
departmentSelect.addEventListener('change', function () {
const id_department = this.value;
divisionSelect.disabled = true;
divisionSelect.innerHTML = '<option value="">-- 課を選択 --</option>';
if (!id_department) return;
fetch(`/updateEmployeeInput/searchDepartment/searchDivision?id_department=${id_department}`, {
method: 'GET',
headers: {
'Accept': 'application/json'
}
})
.then(res => {
return res.json();
})
.then(list => {
divisionSelect.disabled = false;
list.forEach(form => {
const opt = document.createElement('option');
opt.value = form.idDivision;
opt.textContent = form.nmDivision;
divisionSelect.appendChild(opt);
});
})
});
</script> </script>
</html> </html>

Some files were not shown because too many files have changed in this diff Show More