質問編集履歴

4

ソースの修正

2022/09/13 07:49

投稿

rei_rrrrr
rei_rrrrr

スコア2

test CHANGED
File without changes
test CHANGED
@@ -95,18 +95,18 @@
95
95
  @Autowired
96
96
  TestDataCsvConvertService testDataCsvConvertService;
97
97
 
98
- /** 納品データ select **/
98
+ /** テストデータ select **/
99
- @RequestMapping(value = "/check_nouhin_data"")
99
+ @RequestMapping(value = "/check_test_data"")
100
- public String nouhinDataCountCheck(
100
+ public String testDataCountCheck(
101
101
  @RequestParam(name = "torikomiDate") String torikomiDate, Model model) {
102
102
  Integer checkCnt = null;
103
103
  String resultMessage = null;
104
104
 
105
105
  checkCnt = testDataCsvManualRepository.getByNouhin(torikomiDate);
106
106
  if (checkCnt > 0) {
107
- resultMessage = "【" + checkCnt + "】件の納品データが存在します。";
107
+ resultMessage = "【" + checkCnt + "】件のテストデータが存在します。";
108
108
  } else {
109
- resultMessage = "取次納品データが存在しません。";
109
+ resultMessage = "テストデータが存在しません。";
110
110
  }
111
111
 
112
112
  // 納品データ確認結果の設定
@@ -114,17 +114,17 @@
114
114
  return "test_top";
115
115
  }
116
116
 
117
- /** 納品データ delete **/
117
+ /** テストデータ delete **/
118
- @RequestMapping(value = "/delete_nouhin_data")
118
+ @RequestMapping(value = "/delete_test_data")
119
119
  @Transactional
120
- public String deleteNouhin(@RequestParam(name = "torikomiDate") String torikomiDate, Model model) {
120
+ public String deleteTest(@RequestParam(name = "torikomiDate") String torikomiDate, Model model) {
121
121
 
122
122
  Integer successCnt = null;
123
123
  String resultMessage = null;
124
124
 
125
125
  successCnt = testDataCsvManualRepository.deleteByNouhin(torikomiDate);
126
126
  if (successCnt > 0) {
127
- resultMessage = "【" + successCnt + "】件の納品データ削除が完了しました。";
127
+ resultMessage = "【" + successCnt + "】件のテストデータ削除が完了しました。";
128
128
  } else {
129
129
  resultMessage = "削除対象のデータはありませんでした。";
130
130
  }
@@ -222,7 +222,7 @@
222
222
  <div class="d-flex mb-3">
223
223
  <h5 class="alert-heading mr-4">・データ確認</h5>
224
224
  <label class="mr-2" style="font-size:15px">バッチ取込日</label>
225
- <form method="post" action="/check_nouhin_data">
225
+ <form method="post" action="/check_test_data">
226
226
  <div>
227
227
  <input type="date" name="torikomiDate" class="text_date mr-2">
228
228
  <button type="submit" class="btn btn-success submit-btn" disabled> 実行 </button>
@@ -233,7 +233,7 @@
233
233
  <div class="d-flex mb-3">
234
234
  <h5 class="alert-heading mr-4">・データ削除</h5>
235
235
  <label class="mr-2" style="font-size:15px">バッチ取込日</label>
236
- <form method="post" action="/delete_nouhin_data">
236
+ <form method="post" action="/delete_test_data">
237
237
  <div>
238
238
  <input type="date" name="torikomiDate" class="text_date mr-2">
239
239
  <button type="submit" class="btn btn-success submit-btn" disabled> 実行 </button>
@@ -249,7 +249,7 @@
249
249
  <input type="file" name="file" accept=".csv">
250
250
  <!-- <input type="date" name="torikomiDate" class="text_date mr-2"> -->
251
251
  <button type="submit" class="btn btn-success submit-btn" disabled> 実行 </button>
252
- <p>※ファイル名を「納品.CSV」に修正し、実行</p>
252
+ <p>※ファイル名を「テスト.CSV」に修正し、実行</p>
253
253
  </div>
254
254
  </form>
255
255
  <p class="ml-2" style="font-size:15px;color:#de3e3e; background:#20c93b4f;" th:text="${resultMessage9}"></p>
@@ -273,7 +273,6 @@
273
273
  </html>
274
274
  ```
275
275
  ### バージョンに関して
276
- <?xml version="1.0" encoding="UTF-8"?>
277
276
  <modelVersion>4.0.0</modelVersion>
278
277
  <parent>
279
278
  <groupId>org.springframework.boot</groupId>

3

キャプチャの削除

2022/09/13 07:44

投稿

rei_rrrrr
rei_rrrrr

スコア2

test CHANGED
File without changes
test CHANGED
@@ -286,5 +286,3 @@
286
286
  ・privateにしていたメソッドは、ファイルを受け取る処理がありますが、html上に記載していたfile処理と、サーバー側の@RequestParmを削除しても、@Autowiredしたクラスは、nullのままでDIできないようでしたので、リクエスト時のパラーメター等は問題ないと考えました
287
287
  ・各メソッドに関しても、サービスクラスをDIしている部分のみnullになってしまい、その他の処理は問題なく値等取れておりました
288
288
 
289
- ※画面のイメージもキャプチャしました。
290
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-09-13/336bfa98-497c-4478-80ba-76d79c950c20.png)

2

バージョンの追記をいたしました。

2022/09/13 07:41

投稿

rei_rrrrr
rei_rrrrr

スコア2

test CHANGED
File without changes
test CHANGED
@@ -272,6 +272,16 @@
272
272
 
273
273
  </html>
274
274
  ```
275
+ ### バージョンに関して
276
+ <?xml version="1.0" encoding="UTF-8"?>
277
+ <modelVersion>4.0.0</modelVersion>
278
+ <parent>
279
+ <groupId>org.springframework.boot</groupId>
280
+ <artifactId>spring-boot-starter-parent</artifactId>
281
+ <version>2.4.3</version>
282
+ <relativePath /> <!-- lookup parent from repository -->
283
+ </parent>
284
+
275
285
  ### 補足
276
286
  ・privateにしていたメソッドは、ファイルを受け取る処理がありますが、html上に記載していたfile処理と、サーバー側の@RequestParmを削除しても、@Autowiredしたクラスは、nullのままでDIできないようでしたので、リクエスト時のパラーメター等は問題ないと考えました
277
287
  ・各メソッドに関しても、サービスクラスをDIしている部分のみnullになってしまい、その他の処理は問題なく値等取れておりました

1

ソースコードの追記を致しました。

2022/09/13 07:34

投稿

rei_rrrrr
rei_rrrrr

スコア2

test CHANGED
File without changes
test CHANGED
@@ -61,3 +61,220 @@
61
61
 
62
62
  https://teratail.com/questions/123978
63
63
 
64
+ ### ★9/13ソースコードの追記
65
+
66
+ ### ■サーバー側の処理
67
+ ```java
68
+ package com.test.batch.controller;
69
+
70
+ import java.io.BufferedReader;
71
+ import java.io.IOException;
72
+ import java.io.InputStreamReader;
73
+ import java.io.UnsupportedEncodingException;
74
+
75
+ import org.springframework.beans.factory.annotation.Autowired;
76
+ import org.springframework.stereotype.Controller;
77
+ import org.springframework.transaction.annotation.Transactional;
78
+ import org.springframework.ui.Model;
79
+ import org.springframework.web.bind.annotation.RequestMapping;
80
+ import org.springframework.web.bind.annotation.RequestParam;
81
+ import org.springframework.web.multipart.MultipartFile;
82
+
83
+ import com.test.batch.repository.TestDataCsvManualRepository;
84
+ import com.test.batch.repository.TestDataCsvimportRepository;
85
+ import com.test.batch.service.TestDataCsvConvertService;
86
+ import com.test.batch.utils.TestConst;
87
+
88
+ @Controller
89
+ public class TestController {
90
+
91
+ @Autowired
92
+ TestDataCsvManualRepository testDataCsvManualRepository;
93
+ @Autowired
94
+ TestDataCsvimportRepository testDataCsvimportRepository;
95
+ @Autowired
96
+ TestDataCsvConvertService testDataCsvConvertService;
97
+
98
+ /** 納品データ select **/
99
+ @RequestMapping(value = "/check_nouhin_data"")
100
+ public String nouhinDataCountCheck(
101
+ @RequestParam(name = "torikomiDate") String torikomiDate, Model model) {
102
+ Integer checkCnt = null;
103
+ String resultMessage = null;
104
+
105
+ checkCnt = testDataCsvManualRepository.getByNouhin(torikomiDate);
106
+ if (checkCnt > 0) {
107
+ resultMessage = "【" + checkCnt + "】件の納品データが存在します。";
108
+ } else {
109
+ resultMessage = "取次納品データが存在しません。";
110
+ }
111
+
112
+ // 納品データ確認結果の設定
113
+ model.addAttribute("resultMessage1", resultMessage);
114
+ return "test_top";
115
+ }
116
+
117
+ /** 納品データ delete **/
118
+ @RequestMapping(value = "/delete_nouhin_data")
119
+ @Transactional
120
+ public String deleteNouhin(@RequestParam(name = "torikomiDate") String torikomiDate, Model model) {
121
+
122
+ Integer successCnt = null;
123
+ String resultMessage = null;
124
+
125
+ successCnt = testDataCsvManualRepository.deleteByNouhin(torikomiDate);
126
+ if (successCnt > 0) {
127
+ resultMessage = "【" + successCnt + "】件の納品データ削除が完了しました。";
128
+ } else {
129
+ resultMessage = "削除対象のデータはありませんでした。";
130
+ }
131
+ // 納品データ確認結果の設定
132
+ model.addAttribute("resultMessage5", resultMessage);
133
+
134
+ return "test_top";
135
+ }
136
+
137
+
138
+ /** 納品データ
139
+ *・ ローカルからcsvファイルを取得し、DBへinsert
140
+ * @throws IOException
141
+ * */
142
+ @RequestMapping(value = "/register_csv_data")
143
+ private String fileTest(@RequestParam("file") MultipartFile multipartFile, Model model) {
144
+ String currentContent = null;
145
+ String[] arrayColumnName = null;
146
+ String splitType = ",";
147
+ boolean isFirst = true;
148
+ Object arrayConvert = null;
149
+ Integer successCnt = 0;
150
+ String fileName = multipartFile.getOriginalFilename(); //ファイル名取得
151
+ String resultMessage = null;
152
+
153
+ //読込んだファイルを"Shift-JIS"文字規格で格納
154
+ try (BufferedReader br = new BufferedReader(new InputStreamReader(multipartFile.getInputStream(), "MS932"))) {
155
+
156
+ //csvファイルのデータが存在するまで繰り返し処理
157
+ while ((currentContent = br.readLine()) != null) {
158
+ //ヘッダー部分をスキップ ※取込むcsvファイルにカラム名のヘッダーが付加されていることが前提
159
+ if (isFirst) {
160
+ isFirst = false;
161
+ continue;
162
+ }
163
+ // "," 区切りで列の値を配列で取得
164
+ arrayColumnName = currentContent.split(splitType);
165
+
166
+ //arrayColumnName(配列)をクラス型に変換し、インサートを実行
167
+ switch (fileName) {
168
+ case TestConst.NOUHIN_JA_SIMPLE: //テストデータ1
169
+ arrayConvert = testDataCsvConvertService.setConvertType(arrayColumnName,testConst.HANMOTO, fileName, "1");←ここでtestDataCsvConvertServiceがnullになっておりました
170
+ successCnt += testDataCsvimportRepository.insertNouhin(arrayConvert);
171
+ resultMessage = "【" + successCnt + "】件のテストデータ1のinsertが完了しました。";
172
+ model.addAttribute("resultMessage9", resultMessage);
173
+ break;
174
+ case TestConst.HENPIN_JA_SIMPLE: //テストデータ2
175
+ arrayConvert = testDataCsvConvertService.setConvertType(arrayColumnName,TestConst.HANMOTO, fileName, "2");
176
+ successCnt += testDataCsvimportRepository.insertNouhin(arrayConvert);
177
+ resultMessage = "【" + successCnt + "】件のテストデータ2のinsertが完了しました。";
178
+ model.addAttribute("resultMessage10", resultMessage);
179
+ break;
180
+ }
181
+ }
182
+
183
+ } catch (UnsupportedEncodingException e) {
184
+ e.printStackTrace();
185
+ } catch (IOException e) {
186
+ e.printStackTrace();
187
+ }
188
+ return "test_top";
189
+ }
190
+ }
191
+
192
+ ```
193
+ ### ■画面側の処理
194
+ ```html
195
+ <!DOCTYPE html>
196
+ <html xmlns:th="http://www.thymeleaf.org">
197
+
198
+ <head>
199
+ <meta charset="utf-8" />
200
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
201
+ <title>手動取込実行</title>
202
+ <link rel="stylesheet" href="css/common.css" />
203
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
204
+ integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
205
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/notyf@3/notyf.min.css">
206
+ <script src="https://cdn.jsdelivr.net/npm/notyf@3/notyf.min.js"></script>
207
+ </head>
208
+
209
+ <body>
210
+ <div class="jumbotron">
211
+
212
+ <div class="container">
213
+ <h4>バッチ処理手動実行画面 <button id="unlock_button" type="button" class="btn btn-outline-danger">ロック解除</button></h4>
214
+ </div>
215
+
216
+ <div class="container mt-3">
217
+
218
+ <div class="container mt-3">
219
+ <div class="alert alert-success" role="alert">
220
+ <h5 class="alert-heading">1. テストデータ</h5>
221
+ <hr>
222
+ <div class="d-flex mb-3">
223
+ <h5 class="alert-heading mr-4">・データ確認</h5>
224
+ <label class="mr-2" style="font-size:15px">バッチ取込日</label>
225
+ <form method="post" action="/check_nouhin_data">
226
+ <div>
227
+ <input type="date" name="torikomiDate" class="text_date mr-2">
228
+ <button type="submit" class="btn btn-success submit-btn" disabled> 実行 </button>
229
+ </div>
230
+ </form>
231
+ <p class="ml-2" style="font-size:15px;color:#de3e3e; background:#20c93b4f;" th:text="${resultMessage1}"></p>
232
+ </div>
233
+ <div class="d-flex mb-3">
234
+ <h5 class="alert-heading mr-4">・データ削除</h5>
235
+ <label class="mr-2" style="font-size:15px">バッチ取込日</label>
236
+ <form method="post" action="/delete_nouhin_data">
237
+ <div>
238
+ <input type="date" name="torikomiDate" class="text_date mr-2">
239
+ <button type="submit" class="btn btn-success submit-btn" disabled> 実行 </button>
240
+ </div>
241
+ </form>
242
+ <p class="ml-2" style="font-size:15px;color:#de3e3e; background:#20c93b4f;" th:text="${resultMessage5}"></p>
243
+ </div>
244
+ <div class="d-flex">
245
+ <h5 class="alert-heading mr-4">・データ登録</h5>
246
+ <label class="mr-2" style="font-size:15px">バッチ取込日</label>
247
+ <form method="post" action="/register_csv_data" enctype="multipart/form-data">
248
+ <div>
249
+ <input type="file" name="file" accept=".csv">
250
+ <!-- <input type="date" name="torikomiDate" class="text_date mr-2"> -->
251
+ <button type="submit" class="btn btn-success submit-btn" disabled> 実行 </button>
252
+ <p>※ファイル名を「納品.CSV」に修正し、実行</p>
253
+ </div>
254
+ </form>
255
+ <p class="ml-2" style="font-size:15px;color:#de3e3e; background:#20c93b4f;" th:text="${resultMessage9}"></p>
256
+ </div>
257
+ </div>
258
+ </div>
259
+ </div>
260
+
261
+ <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js"
262
+ integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n"
263
+ crossorigin="anonymous"></script>
264
+ <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
265
+ integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
266
+ crossorigin="anonymous"></script>
267
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"
268
+ integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"
269
+ crossorigin="anonymous"></script>
270
+ <script src="js/test_batch.js"></script>
271
+ </body>
272
+
273
+ </html>
274
+ ```
275
+ ### 補足
276
+ ・privateにしていたメソッドは、ファイルを受け取る処理がありますが、html上に記載していたfile処理と、サーバー側の@RequestParmを削除しても、@Autowiredしたクラスは、nullのままでDIできないようでしたので、リクエスト時のパラーメター等は問題ないと考えました
277
+ ・各メソッドに関しても、サービスクラスをDIしている部分のみnullになってしまい、その他の処理は問題なく値等取れておりました
278
+
279
+ ※画面のイメージもキャプチャしました。
280
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-09-13/336bfa98-497c-4478-80ba-76d79c950c20.png)