
--- pom.xml
+++ pom.xml
... | ... | @@ -201,14 +201,16 @@ |
201 | 201 |
<artifactId>commons-lang3</artifactId> |
202 | 202 |
<version>3.12.0</version> |
203 | 203 |
</dependency> |
204 |
- |
|
205 |
- |
|
206 | 204 |
<dependency> |
207 | 205 |
<groupId>javax.xml.bind</groupId> |
208 | 206 |
<artifactId>jaxb-api</artifactId> |
209 | 207 |
<version>2.3.1</version> |
210 | 208 |
</dependency> |
211 |
- |
|
209 |
+ <dependency> |
|
210 |
+ <groupId>com.googlecode.json-simple</groupId> |
|
211 |
+ <artifactId>json-simple</artifactId> |
|
212 |
+ <version>1.1.1</version> |
|
213 |
+ </dependency> |
|
212 | 214 |
|
213 | 215 |
<!-- 표준프레임워크 실행환경 (시작) --> |
214 | 216 |
<!--<dependency> |
--- server/main/java/common/vo/ResultObject.java
+++ server/main/java/common/vo/ResultObject.java
... | ... | @@ -21,38 +21,42 @@ |
21 | 21 |
private Object resultData; |
22 | 22 |
|
23 | 23 |
// API 키 불일치 메세지 |
24 |
- private final String not_found_apiKey = "유효하지 않은 APIKEY입니다."; |
|
24 |
+ private final String not_found_apiKey = "유효하지 않은 APIKEY"; |
|
25 | 25 |
|
26 | 26 |
// API 키 불일치 메세지 |
27 |
- private final String missing_required_value = "필수값이 누락되었습니다."; |
|
27 |
+ private final String missing_required_value = "필수값이 누락"; |
|
28 | 28 |
|
29 | 29 |
// API 키 불일치 메세지 |
30 |
- private final String unknown_error = "잘못된 요청입니다."; |
|
30 |
+ private final String unknown_error = "분류되지 않은 에러"; |
|
31 | 31 |
|
32 | 32 |
|
33 | 33 |
// 생성자 |
34 | 34 |
public ResultObject(){ |
35 |
- this.resultCode = "200"; |
|
35 |
+ this.resultCode = "1000"; |
|
36 | 36 |
this.resultDesc = "SUCCESS"; |
37 | 37 |
} |
38 | 38 |
|
39 | 39 |
// 메세지 세팅(임시) |
40 | 40 |
public void setErrorDesc(String msg){ |
41 |
+ this.resultCode = "9900"; |
|
41 | 42 |
this.resultCode = msg; |
42 | 43 |
} |
43 | 44 |
|
44 | 45 |
// api키 불일치 |
45 | 46 |
public void not_found_apiKey_error(){ |
47 |
+ this.resultCode = "9901"; |
|
46 | 48 |
this.resultDesc = this.not_found_apiKey; |
47 | 49 |
} |
48 | 50 |
|
49 | 51 |
// 필수 데이터 누락 |
50 | 52 |
public void missing_required_value_error(){ |
53 |
+ this.resultCode = "9902"; |
|
51 | 54 |
this.resultDesc = this.missing_required_value; |
52 | 55 |
} |
53 | 56 |
|
54 | 57 |
// 알수없는 에러 |
55 | 58 |
public void unknown_error(){ |
59 |
+ this.resultCode = "9900"; |
|
56 | 60 |
this.resultDesc = this.unknown_error; |
57 | 61 |
} |
58 | 62 |
|
... | ... | @@ -63,6 +67,7 @@ |
63 | 67 |
|
64 | 68 |
public HashMap<String, Object> getResult(){ |
65 | 69 |
HashMap<String, Object> returnMap = new HashMap<String, Object>(); |
70 |
+ returnMap.put("resultCode",this.resultCode); |
|
66 | 71 |
returnMap.put("resultDesc",this.resultDesc); |
67 | 72 |
returnMap.put("resultData", this.resultData); |
68 | 73 |
|
--- server/main/java/kr/co/takensoft/crosswalk/apiManagement/dao/ApiManagementDAO.java
+++ server/main/java/kr/co/takensoft/crosswalk/apiManagement/dao/ApiManagementDAO.java
... | ... | @@ -163,4 +163,40 @@ |
163 | 163 |
*/ |
164 | 164 |
public Integer insertApiKey(ApiKeyVO apiKeyVO) throws Exception; |
165 | 165 |
|
166 |
+ |
|
167 |
+ /** |
|
168 |
+ * 등록된 노드 리스트 |
|
169 |
+ * |
|
170 |
+ * @author 김성원 |
|
171 |
+ * @since 2023.07.03 |
|
172 |
+ */ |
|
173 |
+ public List<Long> selectNodeList() throws Exception; |
|
174 |
+ |
|
175 |
+ /** |
|
176 |
+ * 서비스중인 노드정보 등록 |
|
177 |
+ * |
|
178 |
+ * @author 김성원 |
|
179 |
+ * @since 2023.07.03 |
|
180 |
+ */ |
|
181 |
+ public Integer updateNodeInfo(HashMap<String,Object> map) throws Exception; |
|
182 |
+ |
|
183 |
+ |
|
184 |
+ /** |
|
185 |
+ * 서비스중인 노드정보 리스트 |
|
186 |
+ * |
|
187 |
+ * @author 김성원 |
|
188 |
+ * @since 2023.07.07 |
|
189 |
+ */ |
|
190 |
+ public List<HashMap<String,Object>> selectServiceNodeList() throws Exception; |
|
191 |
+ |
|
192 |
+ /** |
|
193 |
+ * respons 리스트 API용 검색 |
|
194 |
+ * |
|
195 |
+ * @author 김성원 |
|
196 |
+ * @since 2023.07.07 |
|
197 |
+ */ |
|
198 |
+ public List<HashMap<String,Object>> responsLogInfo(HashMap<String,Object> map) throws Exception; |
|
199 |
+ |
|
200 |
+ |
|
201 |
+ |
|
166 | 202 |
} |
--- server/main/java/kr/co/takensoft/crosswalk/apiManagement/service/ApiManagementService.java
+++ server/main/java/kr/co/takensoft/crosswalk/apiManagement/service/ApiManagementService.java
... | ... | @@ -104,5 +104,38 @@ |
104 | 104 |
public HashMap<String, Object> userLogin(Map<String, Object> params, HttpServletRequest reuqest) throws Exception; |
105 | 105 |
|
106 | 106 |
|
107 |
+ /** |
|
108 |
+ * 등록된 노드 리스트 |
|
109 |
+ * |
|
110 |
+ * @author 김성원 |
|
111 |
+ * @since 2023.07.03 |
|
112 |
+ */ |
|
113 |
+ public List<Long> selectNodeList() throws Exception; |
|
114 |
+ |
|
115 |
+ /** |
|
116 |
+ * 등록된 노드 리스트 |
|
117 |
+ * |
|
118 |
+ * @author 김성원 |
|
119 |
+ * @since 2023.07.03 |
|
120 |
+ */ |
|
121 |
+ public Integer updateNodeInfo(HashMap<String,Object> map) throws Exception; |
|
122 |
+ |
|
123 |
+ /** |
|
124 |
+ * 서비스중인 노드정보 리스트 |
|
125 |
+ * |
|
126 |
+ * @author 김성원 |
|
127 |
+ * @since 2023.07.07 |
|
128 |
+ */ |
|
129 |
+ public ResultObject selectServiceNodeList(HttpServletRequest request) throws Exception; |
|
130 |
+ |
|
131 |
+ /** |
|
132 |
+ * respons 리스트 API용 검색 |
|
133 |
+ * |
|
134 |
+ * @author 김성원 |
|
135 |
+ * @since 2023.07.07 |
|
136 |
+ */ |
|
137 |
+ public ResultObject responsLogInfo(HttpServletRequest request) throws Exception; |
|
138 |
+ |
|
139 |
+ |
|
107 | 140 |
|
108 | 141 |
} |
--- server/main/java/kr/co/takensoft/crosswalk/apiManagement/service/impl/ApimanagementServiceImpl.java
+++ server/main/java/kr/co/takensoft/crosswalk/apiManagement/service/impl/ApimanagementServiceImpl.java
... | ... | @@ -16,11 +16,7 @@ |
16 | 16 |
|
17 | 17 |
import javax.servlet.http.HttpServletRequest; |
18 | 18 |
import javax.servlet.http.HttpSession; |
19 |
-import java.net.http.HttpRequest; |
|
20 | 19 |
import java.sql.Timestamp; |
21 |
-import java.text.SimpleDateFormat; |
|
22 |
-import java.time.LocalDate; |
|
23 |
-import java.time.LocalDateTime; |
|
24 | 20 |
import java.util.*; |
25 | 21 |
|
26 | 22 |
/** |
... | ... | @@ -62,27 +58,41 @@ |
62 | 58 |
// 업데이트 결과 변수 |
63 | 59 |
int result = 0; |
64 | 60 |
|
65 |
- // 키검출(함수 필요) |
|
66 |
- boolean keyCheck = apiMange.checkApiKey(params.get("api_key").toString().trim()); |
|
61 |
+ |
|
67 | 62 |
// api 로그 생성 |
68 | 63 |
ApiLogVO apiLogVo = null; |
69 | 64 |
|
70 | 65 |
try { |
66 |
+ // 키검출(함수 필요) |
|
67 |
+ boolean keyCheck = apiMange.checkApiKey(params.get("api_key").toString().trim()); |
|
68 |
+ |
|
71 | 69 |
apiLogVo = new ApiLogVO( params.get("nodeID").toString(), Integer.toString((int)params.get("bearingCode")), params.get("api_key").toString()); |
72 | 70 |
apiLogVo.setContents( params.get("contents").toString()); |
71 |
+ apiLogVo.setCntn_ip(params.get("cntn_ip").toString()); |
|
73 | 72 |
|
74 | 73 |
// API 키체크 |
75 | 74 |
if(keyCheck) { |
76 | 75 |
|
77 | 76 |
// 서비스 타입 |
78 |
- int serviceDataType = (int) params.get("serviceDataType"); |
|
77 |
+ int serviceDataType = 1; |
|
78 |
+ if(params.get("serviceDataType") == null){ |
|
79 |
+ serviceDataType = (int) params.get("servicemessageType"); |
|
80 |
+ }else{ |
|
81 |
+ serviceDataType = (int) params.get("serviceDataType"); |
|
82 |
+ } |
|
79 | 83 |
|
84 |
+ int timestamp = 0; |
|
85 |
+ if(params.get("timestamp") instanceof Double){ |
|
86 |
+ timestamp = Double.valueOf(Optional.ofNullable((double)params.get("timestamp")).orElse(0.0)).intValue(); |
|
87 |
+ }else{ |
|
88 |
+ timestamp = (int)params.get("timestamp"); |
|
89 |
+ } |
|
80 | 90 |
|
81 | 91 |
// 객체 생성 |
82 | 92 |
CrosswalkDataVO crosswalkVo = new CrosswalkDataVO( |
83 | 93 |
params.get("nodeID").toString() |
84 | 94 |
, Integer.toString((int)params.get("bearingCode")) |
85 |
- , (int)params.get("timestamp")); |
|
95 |
+ , timestamp); |
|
86 | 96 |
|
87 | 97 |
/****************** 보행자 및 대기자 정보 처리 ******************/ |
88 | 98 |
if (serviceDataType == 0) { |
... | ... | @@ -174,7 +184,7 @@ |
174 | 184 |
// 키검출(함수 필요) |
175 | 185 |
boolean keyCheck = apiMange.checkApiKey(request.getParameter("apiKey")); |
176 | 186 |
apiLogVo = new ApiLogVO( nodeID, bearingCode ,apiKey); |
177 |
- |
|
187 |
+ apiLogVo.setCntn_ip(request.getRemoteAddr()); |
|
178 | 188 |
try { |
179 | 189 |
// apiKey 검증 |
180 | 190 |
if (keyCheck) { |
... | ... | @@ -200,21 +210,15 @@ |
200 | 210 |
TSIHubAPI.TrafficSignalStatueNodeInfo trafiicInfo = TSIHubAPI.getTrafficSignalStatueNodeInfo(data.get("nodeId").toString()); |
201 | 211 |
|
202 | 212 |
HashMap<String, TSIHubAPI.TrafficSignalStatue> tempData = trafiicInfo.getWalkTrafficSignalStatues(); |
203 |
- TSIHubAPI.TrafficSignalStatue tampData2 = tempData.get(data.get("bearingCode").toString()); |
|
204 | 213 |
|
205 |
- System.out.println("getCurrentSignalRemainTime : " + tampData2.getCurrentSignalRemainTime()); |
|
206 |
- System.out.println("getCurrentSignalTotalTime : " + tampData2.getCurrentSignalTotalTime()); |
|
214 |
+ if(tempData.get(data.get("bearingCode").toString()) != null) { |
|
215 |
+ TSIHubAPI.TrafficSignalStatue tampData2 = tempData.get(data.get("bearingCode").toString()); |
|
207 | 216 |
|
208 |
- |
|
209 |
- System.out.println("getDirectionCode : " + tampData2.getDirectionCode()); |
|
210 |
- System.out.println("getTrafficSignalStatue : " + tampData2.getTrafficSignalStatue()); |
|
211 |
- System.out.println("getDirectionCode : " + tampData2.getDirectionCode()); |
|
212 |
- |
|
213 |
- data.put("pedSignalState", tampData2.getTrafficSignalStatueCode()); |
|
214 |
- data.put("pedSignalTime", tampData2.getCurrentSignalTotalTime()); |
|
215 |
- data.put("remainingTime", tampData2.getCurrentSignalRemainTime()); |
|
216 |
- data.put("pedSignalStateTimestamp", trafiicInfo.getTimestamp().getTime()); |
|
217 |
- |
|
217 |
+ data.put("pedSignalState", tampData2.getTrafficSignalStatueCode()); |
|
218 |
+ data.put("pedSignalTime", tampData2.getCurrentSignalTotalTime()); |
|
219 |
+ data.put("remainingTime", tampData2.getCurrentSignalRemainTime()); |
|
220 |
+ data.put("pedSignalStateTimestamp", trafiicInfo.getTimestamp().getTime()); |
|
221 |
+ } |
|
218 | 222 |
if(trafiicInfo.isSCUError() || trafiicInfo.isContradictionError() || trafiicInfo.isContradictionError()){ |
219 | 223 |
data.put("trafLighAnomInfo", "1"); |
220 | 224 |
}else{ |
... | ... | @@ -293,7 +297,6 @@ |
293 | 297 |
apiLogVo.setTotalRow(apiManagementDAO.getApiResponseLogCount(apiLogVo)); |
294 | 298 |
List<ApiLogVO> list = apiManagementDAO.getApiResponseLog(apiLogVo); |
295 | 299 |
return list; |
296 |
- |
|
297 | 300 |
} |
298 | 301 |
|
299 | 302 |
@Override |
... | ... | @@ -330,14 +333,76 @@ |
330 | 333 |
returnMap.put("message","아이디와 비밀번호가 일치하지 안습니다."); |
331 | 334 |
}else{ |
332 | 335 |
HttpSession session = reuqest.getSession(); |
336 |
+ String sessions = (String)session.getAttribute("login"); |
|
333 | 337 |
session.setAttribute("login", "success"); |
334 | 338 |
} |
339 |
+ return returnMap; |
|
340 |
+ } |
|
335 | 341 |
|
342 |
+ @Override |
|
343 |
+ public List<Long> selectNodeList() throws Exception { |
|
344 |
+ return apiManagementDAO.selectNodeList(); |
|
345 |
+ } |
|
336 | 346 |
|
347 |
+ @Override |
|
348 |
+ public Integer updateNodeInfo(HashMap<String, Object> map) throws Exception { |
|
337 | 349 |
|
350 |
+ return apiManagementDAO.updateNodeInfo(map); |
|
351 |
+ } |
|
338 | 352 |
|
353 |
+ @Override |
|
354 |
+ public ResultObject selectServiceNodeList(HttpServletRequest request) throws Exception { |
|
339 | 355 |
|
340 |
- return null; |
|
356 |
+ // 결과 메세지 객체 생성 |
|
357 |
+ ResultObject resultObject = new ResultObject(); |
|
358 |
+ |
|
359 |
+ // api_key 검증 |
|
360 |
+ ApiManageList apiMange = ApiManageList.getInstance(); |
|
361 |
+ |
|
362 |
+ // api 로그 생성 |
|
363 |
+ ApiLogVO apiLogVo = null; |
|
364 |
+ |
|
365 |
+ boolean keyCheck = apiMange.checkApiKey(request.getParameter("apiKey")); |
|
366 |
+ |
|
367 |
+ // API 키 체크 |
|
368 |
+ if(keyCheck){ |
|
369 |
+ resultObject.setResultData(apiManagementDAO.selectServiceNodeList()); |
|
370 |
+ }else{ |
|
371 |
+ resultObject.not_found_apiKey_error(); |
|
372 |
+ } |
|
373 |
+ |
|
374 |
+ return resultObject; |
|
375 |
+ } |
|
376 |
+ |
|
377 |
+ @Override |
|
378 |
+ public ResultObject responsLogInfo(HttpServletRequest request) throws Exception { |
|
379 |
+ |
|
380 |
+ // 결과 메세지 객체 생성 |
|
381 |
+ ResultObject resultObject = new ResultObject(); |
|
382 |
+ |
|
383 |
+ // api_key 검증 |
|
384 |
+ ApiManageList apiMange = ApiManageList.getInstance(); |
|
385 |
+ |
|
386 |
+ // api 로그 생성 |
|
387 |
+ ApiLogVO apiLogVo = null; |
|
388 |
+ |
|
389 |
+ boolean keyCheck = apiMange.checkApiKey(request.getParameter("apiKey")); |
|
390 |
+ |
|
391 |
+ // API 키 체크 |
|
392 |
+ if(keyCheck){ |
|
393 |
+ |
|
394 |
+ if(StringUtil.isEmpty(request.getParameter("call_dt"))){ |
|
395 |
+ resultObject.missing_required_value_error(); |
|
396 |
+ }else{ |
|
397 |
+ HashMap<String,Object> map = new HashMap<>(); |
|
398 |
+ map.put("call_dt",request.getParameter("call_dt")); |
|
399 |
+ resultObject.setResultData(apiManagementDAO.responsLogInfo(map)); |
|
400 |
+ } |
|
401 |
+ }else{ |
|
402 |
+ resultObject.not_found_apiKey_error(); |
|
403 |
+ } |
|
404 |
+ |
|
405 |
+ return resultObject; |
|
341 | 406 |
} |
342 | 407 |
|
343 | 408 |
|
--- server/main/java/kr/co/takensoft/crosswalk/apiManagement/vo/ApiLogVO.java
+++ server/main/java/kr/co/takensoft/crosswalk/apiManagement/vo/ApiLogVO.java
... | ... | @@ -38,6 +38,9 @@ |
38 | 38 |
// 통신 내용 |
39 | 39 |
private String contents; |
40 | 40 |
|
41 |
+ // 접속 IP |
|
42 |
+ private String cntn_ip; |
|
43 |
+ |
|
41 | 44 |
public ApiLogVO(){ |
42 | 45 |
this.err_yn = "N"; |
43 | 46 |
this.msg = "success"; |
... | ... | @@ -143,4 +146,12 @@ |
143 | 146 |
public void setContents(String contents) { |
144 | 147 |
this.contents = contents; |
145 | 148 |
} |
149 |
+ |
|
150 |
+ public String getCntn_ip() { |
|
151 |
+ return cntn_ip; |
|
152 |
+ } |
|
153 |
+ |
|
154 |
+ public void setCntn_ip(String cntn_ip) { |
|
155 |
+ this.cntn_ip = cntn_ip; |
|
156 |
+ } |
|
146 | 157 |
} |
--- server/main/java/kr/co/takensoft/crosswalk/apiManagement/web/ApiManagementController.java
+++ server/main/java/kr/co/takensoft/crosswalk/apiManagement/web/ApiManagementController.java
... | ... | @@ -46,49 +46,28 @@ |
46 | 46 |
|
47 | 47 |
ServletInputStream inputStream = request.getInputStream(); |
48 | 48 |
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8); |
49 |
- |
|
49 |
+ System.out.println(messageBody); |
|
50 | 50 |
HashMap<String, Object> params = objectMapper.readValue(messageBody, new TypeReference<HashMap<String, Object>>(){}); |
51 |
- params.put("contents", messageBody); |
|
52 |
- params.put("api_key", request.getParameter("key")); |
|
53 | 51 |
|
54 |
- apiManagementService.setCrossWalkData(params); |
|
52 |
+ params.put("contents", messageBody); |
|
53 |
+ params.put("cntn_ip", request.getRemoteAddr()); |
|
54 |
+ |
|
55 |
+ if(request.getParameter("key") == null){ |
|
56 |
+ params.put("api_key", request.getParameter("Key")); |
|
57 |
+ }else{ |
|
58 |
+ params.put("api_key", request.getParameter("key")); |
|
59 |
+ } |
|
60 |
+ |
|
61 |
+ HashMap<String, Object> resultData = apiManagementService.setCrossWalkData(params); |
|
55 | 62 |
|
56 | 63 |
ModelAndView mav = new ModelAndView("jsonView"); |
64 |
+ mav.addObject("result", resultData); |
|
65 |
+ |
|
57 | 66 |
return mav; |
58 | 67 |
} |
59 | 68 |
|
60 | 69 |
/** |
61 |
- * 보행자 및 대기자 정보 수집 |
|
62 |
- * |
|
63 |
- * @author 김성원 |
|
64 |
- * @since 2023.06.29 |
|
65 |
- */ |
|
66 |
- /* @RequestMapping(value = "/aiSafetyCrossing/koroad/pdstrnAndAwiter.json", method = RequestMethod.POST) |
|
67 |
- public ModelAndView pdstrnAndAwiter (HttpServletRequest request) throws Exception { |
|
68 |
- |
|
69 |
- ServletInputStream inputStream = request.getInputStream(); |
|
70 |
- |
|
71 |
- HashMap<String, Object> params = objectMapper.readValue( StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8), new TypeReference<HashMap<String, Object>>(){}); |
|
72 |
- |
|
73 |
- ModelAndView mav = new ModelAndView("jsonView"); |
|
74 |
- return mav; |
|
75 |
- }*/ |
|
76 |
- |
|
77 |
- /** |
|
78 |
- * 무단횡단 정보 수집 |
|
79 |
- * |
|
80 |
- * @author 김성원 |
|
81 |
- * @since 2023.06.29 |
|
82 |
- */ |
|
83 |
- /* @RequestMapping(value = "/aiSafetyCrossing/koroad/wtrms.json", method = RequestMethod.POST) |
|
84 |
- public ModelAndView wtrms (HttpServletRequest request) throws Exception { |
|
85 |
- |
|
86 |
- ModelAndView mav = new ModelAndView("jsonView"); |
|
87 |
- return mav; |
|
88 |
- }*/ |
|
89 |
- |
|
90 |
- /** |
|
91 |
- * 횡단보도 데이터 호출먹힘 |
|
70 |
+ * 횡단보도 데이터 호출 |
|
92 | 71 |
* |
93 | 72 |
* @author 김성원 |
94 | 73 |
* @since 2023.06.29 |
... | ... | @@ -96,11 +75,24 @@ |
96 | 75 |
@RequestMapping(value = "/aiSafetyCrossing/navi/pdstrnDetctAndSignl.json" , method = RequestMethod.POST) |
97 | 76 |
public ModelAndView pdstrnDetctAndSignl (HttpServletRequest request) throws Exception { |
98 | 77 |
|
99 |
- System.out.println("apiKey : "+request.getParameter("apiKey")); |
|
100 |
- System.out.println("nodeID : "+request.getParameter("nodeID")); |
|
101 |
- System.out.println("bearingCode : "+request.getParameter("bearingCode")); |
|
102 |
- |
|
103 | 78 |
ResultObject resultObject = apiManagementService.getCrossWalkInfo(request); |
79 |
+ |
|
80 |
+ ModelAndView mav = new ModelAndView("jsonView"); |
|
81 |
+ mav.addObject("result", resultObject.getResult()); |
|
82 |
+ |
|
83 |
+ return mav; |
|
84 |
+ } |
|
85 |
+ |
|
86 |
+ /** |
|
87 |
+ * 횡단보도 데이터 호출 |
|
88 |
+ * |
|
89 |
+ * @author 김성원 |
|
90 |
+ * @since 2023.06.29 |
|
91 |
+ */ |
|
92 |
+ @RequestMapping(value = "/aiSafetyCrossing/navi/nodeInfo.json" , method = RequestMethod.POST) |
|
93 |
+ public ModelAndView nodeInfo (HttpServletRequest request) throws Exception { |
|
94 |
+ |
|
95 |
+ ResultObject resultObject = apiManagementService.selectServiceNodeList(request); |
|
104 | 96 |
|
105 | 97 |
ModelAndView mav = new ModelAndView("jsonView"); |
106 | 98 |
mav.addObject("result", resultObject.getResult()); |
... | ... | @@ -180,11 +172,22 @@ |
180 | 172 |
* @since 2023.07.13 |
181 | 173 |
*/ |
182 | 174 |
@RequestMapping(value = "/userLogin.json" , method = RequestMethod.POST) |
183 |
- public ModelAndView userLogin (@RequestBody Map<String, Object> params) throws Exception { |
|
184 |
- |
|
175 |
+ public ModelAndView userLogin (@RequestBody Map<String, Object> params, HttpServletRequest reuqest) throws Exception { |
|
185 | 176 |
ModelAndView mav = new ModelAndView("jsonView"); |
177 |
+ mav.addObject("apiLogList",apiManagementService.userLogin(params,reuqest)); |
|
178 |
+ return mav; |
|
179 |
+ } |
|
186 | 180 |
|
187 |
- |
|
181 |
+ /** |
|
182 |
+ * 사용자 로그인 |
|
183 |
+ * |
|
184 |
+ * @author 김성원 |
|
185 |
+ * @since 2023.07.13 |
|
186 |
+ */ |
|
187 |
+ @RequestMapping(value = "/aiSafetyCrossing/responsLogInfo.json" , method = RequestMethod.POST) |
|
188 |
+ public ModelAndView responsLogInfo (@RequestBody Map<String, Object> params, HttpServletRequest reuqest) throws Exception { |
|
189 |
+ ModelAndView mav = new ModelAndView("jsonView"); |
|
190 |
+ mav.addObject("apiLogList",apiManagementService.responsLogInfo(reuqest)); |
|
188 | 191 |
return mav; |
189 | 192 |
} |
190 | 193 |
|
--- server/main/java/kr/co/takensoft/crosswalk/common/service/ScedulerService.java
+++ server/main/java/kr/co/takensoft/crosswalk/common/service/ScedulerService.java
... | ... | @@ -3,12 +3,21 @@ |
3 | 3 |
import common.vo.ApiManageList; |
4 | 4 |
import kr.co.takensoft.crosswalk.apiManagement.service.ApiManagementService; |
5 | 5 |
import kr.co.takensoft.crosswalk.apiManagement.util.tshub.TSIHubAPI; |
6 |
+import org.json.simple.JSONArray; |
|
7 |
+import org.json.simple.JSONObject; |
|
8 |
+import org.json.simple.parser.JSONParser; |
|
6 | 9 |
import org.springframework.beans.factory.InitializingBean; |
7 | 10 |
import org.springframework.beans.factory.annotation.Autowired; |
8 | 11 |
import org.springframework.scheduling.annotation.EnableScheduling; |
9 | 12 |
import org.springframework.scheduling.annotation.Scheduled; |
10 | 13 |
import org.springframework.stereotype.Component; |
11 | 14 |
|
15 |
+import java.io.BufferedReader; |
|
16 |
+import java.io.IOException; |
|
17 |
+import java.io.InputStreamReader; |
|
18 |
+import java.net.HttpURLConnection; |
|
19 |
+import java.net.MalformedURLException; |
|
20 |
+import java.net.URL; |
|
12 | 21 |
import java.util.ArrayList; |
13 | 22 |
import java.util.Arrays; |
14 | 23 |
import java.util.HashMap; |
... | ... | @@ -28,6 +37,7 @@ |
28 | 37 |
@Autowired |
29 | 38 |
private ApiManagementService apiManagementService; |
30 | 39 |
|
40 |
+ private static final String HOST_URL = "https://tsihub-api.koroad.or.kr:18877/api/nodeInfo/8396f144c62283d56d30dec29c4229cdf9bc03de7ed2461a446c0b1bd954ccdd"; |
|
31 | 41 |
|
32 | 42 |
// api key 초기화 |
33 | 43 |
@Override |
... | ... | @@ -41,19 +51,82 @@ |
41 | 51 |
apiManageList.addApiKey(key.get("api_key").toString(), key.get("user_nm").toString(), key.get("key_type").toString()); |
42 | 52 |
} |
43 | 53 |
|
54 |
+ |
|
55 |
+ |
|
44 | 56 |
// 카프카 서버 시작 |
45 |
- |
|
46 | 57 |
TSIHubAPI tsiHubAPI= new TSIHubAPI(); |
47 |
- |
|
48 | 58 |
List<String> topic = new ArrayList<>(); |
59 |
+ topic.add("1520002200"); |
|
60 |
+ topic.add("1520002211"); |
|
61 |
+ topic.add("1520002701"); |
|
49 | 62 |
topic.add("1520002712"); |
50 |
- |
|
63 |
+ topic.add("1520003902"); |
|
64 |
+ topic.add("1520005022"); |
|
51 | 65 |
tsiHubAPI.consumeTrafficSignalStatueInfoAsync(topic); |
52 | 66 |
|
53 |
- |
|
54 |
- |
|
55 | 67 |
} |
56 | 68 |
|
69 |
+ |
|
70 |
+ @Scheduled(fixedRate = 10000) |
|
71 |
+ public void updateNodeInfo() throws Exception { |
|
72 |
+ |
|
73 |
+ HttpURLConnection conn = null; |
|
74 |
+ JSONParser parser = new JSONParser(); |
|
75 |
+ |
|
76 |
+ List<Long> node_list = apiManagementService.selectNodeList(); |
|
77 |
+ |
|
78 |
+ for(Long data : node_list){ |
|
79 |
+ // System.out.println(data); |
|
80 |
+ } |
|
81 |
+ |
|
82 |
+ |
|
83 |
+ try { |
|
84 |
+ URL url = new URL(HOST_URL); |
|
85 |
+ conn = (HttpURLConnection)url.openConnection(); |
|
86 |
+ conn.setRequestMethod("GET"); |
|
87 |
+ int responseCode = conn.getResponseCode(); |
|
88 |
+ if (responseCode == 400 || responseCode == 401 || responseCode == 500 ) { |
|
89 |
+ System.out.println(responseCode + " Error!"); |
|
90 |
+ } else { |
|
91 |
+ BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); |
|
92 |
+ StringBuilder sb = new StringBuilder(); |
|
93 |
+ String line = ""; |
|
94 |
+ |
|
95 |
+ while ((line = br.readLine()) != null) { |
|
96 |
+ sb.append(line); |
|
97 |
+ } |
|
98 |
+ Object obj = parser.parse(sb.toString()); |
|
99 |
+ JSONObject jsonObj = (JSONObject)obj; |
|
100 |
+ JSONArray jsonArr = (JSONArray)jsonObj.get("resultData"); |
|
101 |
+ |
|
102 |
+ if (jsonArr.size() > 0){ |
|
103 |
+ // List<HashMap<String, Object>> node_datas = new ArrayList<>(); |
|
104 |
+ |
|
105 |
+ for(int i=0; i<jsonArr.size(); i++){ |
|
106 |
+ JSONObject temp = (JSONObject)jsonArr.get(i); |
|
107 |
+ if(node_list.contains((Long)temp.get("node_id"))){ |
|
108 |
+ HashMap<String, Object> temp_map = new HashMap<String, Object>(); |
|
109 |
+ temp_map.put("node_id",temp.get("node_id")); |
|
110 |
+ temp_map.put("node_name",temp.get("node_name")); |
|
111 |
+ temp_map.put("latitude",temp.get("latitude")); |
|
112 |
+ temp_map.put("longitude",temp.get("longitude")); |
|
113 |
+ apiManagementService.updateNodeInfo(temp_map); |
|
114 |
+ } |
|
115 |
+ } |
|
116 |
+ // StudyingAzae, Soodal 출력 |
|
117 |
+ } |
|
118 |
+ // System.out.println(sb.toString()); |
|
119 |
+ } |
|
120 |
+ } catch (MalformedURLException e) { |
|
121 |
+ e.printStackTrace(); |
|
122 |
+ } catch (IOException e) { |
|
123 |
+ e.printStackTrace(); |
|
124 |
+ } catch (Exception e) { |
|
125 |
+ e.printStackTrace(); |
|
126 |
+ } |
|
127 |
+ } |
|
128 |
+ |
|
129 |
+ |
|
57 | 130 |
/** |
58 | 131 |
* 테스트용 더미데이터 생성 스케줄러 |
59 | 132 |
* |
+++ server/main/java/kr/co/takensoft/crosswalk/test/service/httpTest.java
... | ... | @@ -0,0 +1,68 @@ |
1 | +package kr.co.takensoft.crosswalk.test.service; | |
2 | + | |
3 | +import kr.co.takensoft.crosswalk.apiManagement.service.ApiManagementService; | |
4 | +import org.json.simple.JSONArray; | |
5 | +import org.json.simple.JSONObject; | |
6 | +import org.json.simple.parser.JSONParser; | |
7 | +import org.springframework.beans.factory.annotation.Autowired; | |
8 | + | |
9 | +import java.io.BufferedReader; | |
10 | +import java.io.IOException; | |
11 | +import java.io.InputStreamReader; | |
12 | +import java.net.HttpURLConnection; | |
13 | +import java.net.MalformedURLException; | |
14 | +import java.net.URL; | |
15 | +import java.util.List; | |
16 | + | |
17 | +public class httpTest { | |
18 | + | |
19 | + | |
20 | + private static final String HOST_URL = "https://tsihub-api.koroad.or.kr:18877/api/nodeInfo/8396f144c62283d56d30dec29c4229cdf9bc03de7ed2461a446c0b1bd954ccdd"; | |
21 | + | |
22 | + | |
23 | + public static void main(String args[]) throws Exception { | |
24 | + HttpURLConnection conn = null; | |
25 | + JSONParser parser = new JSONParser(); | |
26 | + | |
27 | + try { | |
28 | + URL url = new URL(HOST_URL); | |
29 | + conn = (HttpURLConnection)url.openConnection(); | |
30 | + conn.setRequestMethod("GET"); | |
31 | + int responseCode = conn.getResponseCode(); | |
32 | + if (responseCode == 400 || responseCode == 401 || responseCode == 500 ) { | |
33 | + System.out.println(responseCode + " Error!"); | |
34 | + } else { | |
35 | + BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); | |
36 | + StringBuilder sb = new StringBuilder(); | |
37 | + String line = ""; | |
38 | + | |
39 | + while ((line = br.readLine()) != null) { | |
40 | + sb.append(line); | |
41 | + } | |
42 | + Object obj = parser.parse(sb.toString()); | |
43 | + JSONObject jsonObj = (JSONObject)obj; | |
44 | + JSONArray jsonArr = (JSONArray)jsonObj.get("resultData"); | |
45 | + | |
46 | + | |
47 | + | |
48 | + if (jsonArr.size() > 0){ | |
49 | + for(int i=0; i<jsonArr.size(); i++){ | |
50 | + JSONObject temp = (JSONObject)jsonArr.get(i); | |
51 | + System.out.print(temp.get("node_id")); | |
52 | + System.out.print(", " + temp.get("node_name")); | |
53 | + System.out.print(", " + temp.get("latitude")); | |
54 | + System.out.println(", " + temp.get("longitude")); | |
55 | + } | |
56 | + // StudyingAzae, Soodal 출력 | |
57 | + } | |
58 | + // System.out.println(sb.toString()); | |
59 | + } | |
60 | + } catch (MalformedURLException e) { | |
61 | + e.printStackTrace(); | |
62 | + } catch (IOException e) { | |
63 | + e.printStackTrace(); | |
64 | + } catch (Exception e) { | |
65 | + e.printStackTrace(); | |
66 | + } | |
67 | + } | |
68 | +} |
--- server/main/resources/mybatis/main/apiManagemant-SQL.xml
+++ server/main/resources/mybatis/main/apiManagemant-SQL.xml
... | ... | @@ -169,15 +169,17 @@ |
169 | 169 |
, crslk_az |
170 | 170 |
, api_key |
171 | 171 |
, contents |
172 |
+ , cntn_ip |
|
172 | 173 |
) |
173 | 174 |
VALUES( |
174 |
- NOW() |
|
175 |
+ NOW() |
|
175 | 176 |
, #{err_yn} |
176 | 177 |
, #{msg} |
177 | 178 |
, #{node_id} |
178 | 179 |
, #{crslk_az} |
179 | 180 |
, #{api_key} |
180 |
- , #{contents}); |
|
181 |
+ , #{contents} |
|
182 |
+ , #{cntn_ip}); |
|
181 | 183 |
</insert> |
182 | 184 |
|
183 | 185 |
<select id="getApiRequestLogCount" parameterType="ApiLog" resultType="Long"> |
... | ... | @@ -207,6 +209,7 @@ |
207 | 209 |
, node_id |
208 | 210 |
, crslk_az |
209 | 211 |
, api_key |
212 |
+ , cntn_ip |
|
210 | 213 |
FROM api_request_log arl |
211 | 214 |
LEFT JOIN (SELECT user_nm, api_key AS api_key_v FROM api_key_manage) akm ON arl.api_key = akm.api_key_v |
212 | 215 |
WHERE 1=1 |
... | ... | @@ -240,6 +243,7 @@ |
240 | 243 |
, crslk_az |
241 | 244 |
, api_key |
242 | 245 |
, contents |
246 |
+ , cntn_ip |
|
243 | 247 |
) |
244 | 248 |
VALUES( |
245 | 249 |
NOW() |
... | ... | @@ -249,6 +253,7 @@ |
249 | 253 |
, #{crslk_az} |
250 | 254 |
, #{api_key} |
251 | 255 |
, #{contents} |
256 |
+ , #{cntn_ip} |
|
252 | 257 |
); |
253 | 258 |
</insert> |
254 | 259 |
|
... | ... | @@ -281,6 +286,7 @@ |
281 | 286 |
, crslk_az |
282 | 287 |
, api_key |
283 | 288 |
, user_nm |
289 |
+ , cntn_ip |
|
284 | 290 |
FROM api_response_log arl |
285 | 291 |
LEFT JOIN (SELECT user_nm, api_key AS api_key_v FROM api_key_manage) akm ON arl.api_key = akm.api_key_v |
286 | 292 |
WHERE 1=1 |
... | ... | @@ -420,4 +426,78 @@ |
420 | 426 |
</select> |
421 | 427 |
|
422 | 428 |
|
429 |
+ <!-- |
|
430 |
+ 작성자 : 김성원 |
|
431 |
+ 작성일 : 2023.07.11 |
|
432 |
+ 내용 : 등록중인 노드 리스트 |
|
433 |
+ --> |
|
434 |
+ <select id="selectNodeList" resultType="Long"> |
|
435 |
+ SELECT node_id::numeric |
|
436 |
+ FROM crosswalk |
|
437 |
+ group by node_id |
|
438 |
+ </select> |
|
439 |
+ |
|
440 |
+ <!-- |
|
441 |
+ 작성자 : 김성원 |
|
442 |
+ 작성일 : 2023.07.11 |
|
443 |
+ 내용 : 서비스 노드 정보 등록 |
|
444 |
+ --> |
|
445 |
+ <update id="updateNodeInfo" parameterType="HashMap"> |
|
446 |
+ INSERT INTO node_info |
|
447 |
+ ( |
|
448 |
+ node_id |
|
449 |
+ , node_name |
|
450 |
+ , latitude |
|
451 |
+ , longitude |
|
452 |
+ ) |
|
453 |
+ VALUES( |
|
454 |
+ #{node_id} |
|
455 |
+ , #{node_name} |
|
456 |
+ , #{latitude} |
|
457 |
+ , #{longitude} |
|
458 |
+ ) |
|
459 |
+ ON CONFLICT (node_id) |
|
460 |
+ DO UPDATE |
|
461 |
+ SET |
|
462 |
+ node_name = #{node_name} |
|
463 |
+ , latitude = #{latitude} |
|
464 |
+ , longitude = #{longitude} |
|
465 |
+ </update> |
|
466 |
+ |
|
467 |
+ <!-- |
|
468 |
+ 작성자 : 김성원 |
|
469 |
+ 작성일 : 2023.07.11 |
|
470 |
+ 내용 : 서비스(운영중인) 노드 정보 |
|
471 |
+ --> |
|
472 |
+ <select id="selectServiceNodeList" resultType="HashMap"> |
|
473 |
+ SELECT |
|
474 |
+ node_id::numeric |
|
475 |
+ , node_name |
|
476 |
+ , latitude |
|
477 |
+ , longitude |
|
478 |
+ FROM node_info |
|
479 |
+ </select> |
|
480 |
+ |
|
481 |
+ <!-- |
|
482 |
+ 작성자 : 김성원 |
|
483 |
+ 작성일 : 2023.07.11 |
|
484 |
+ 내용 : 외부 전송로그 확인 API |
|
485 |
+ --> |
|
486 |
+ <select id="responsLogInfo" parameterType="HashMap" resultType="HashMap"> |
|
487 |
+ select |
|
488 |
+ call_dt |
|
489 |
+ , err_yn |
|
490 |
+ , msg |
|
491 |
+ , node_id |
|
492 |
+ , crslk_az |
|
493 |
+ , arl.api_key |
|
494 |
+ , contents |
|
495 |
+ , cntn_ip |
|
496 |
+ , akm.user_nm |
|
497 |
+ from api_response_log arl |
|
498 |
+ left join api_key_manage akm on arl.api_key = akm.api_key |
|
499 |
+ where call_dt <![CDATA[>]]> to_timestamp(#{call_dt}, 'YYYY-MM-DD HH24:MI:SS.MS'); |
|
500 |
+ </select> |
|
501 |
+ |
|
502 |
+ |
|
423 | 503 |
</mapper>(No newline at end of file) |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?