Commit 883da59384780819a5040c8400f95debb611d377
1 parent
980c5686
.
Showing
3 changed files
with
62 additions
and
100 deletions
Show diff stats
src/main/java/com/batch/controller/JobController.java
... | ... | @@ -34,16 +34,7 @@ public class JobController { |
34 | 34 | @Autowired |
35 | 35 | private JobService jobService; |
36 | 36 | @Autowired |
37 | - private MatchingInnerDelingMapper matchingInnerDelingMapper; | |
38 | - @Value("${thread.ai.count.rowmax}") | |
39 | - BigDecimal bdAiAsyncMaxRowCount; | |
40 | - @Value("${thread.ai.processing.wait}") | |
41 | - BigDecimal bdAiAsyncWaitTime; | |
42 | - @Value("${thread.ai.processing.wait.total}") | |
43 | - BigDecimal bdAiAsyncTotalWaitTime; | |
44 | - | |
45 | - | |
46 | - | |
37 | + private MatchingInnerDelingMapper matchingInnerDelingMapper; | |
47 | 38 | |
48 | 39 | /** |
49 | 40 | * TODO : AI 서버에 특정 경로에 생성되는 파일을 읽는(끝에 50줄 정도) API |
... | ... | @@ -214,43 +205,7 @@ public class JobController { |
214 | 205 | String sJobGroup = uuid.toString(); |
215 | 206 | |
216 | 207 | log.info("Start AI Matching Job"); |
217 | - List<Map> retData = matchingInnerDelingMapper.getAiReadData(params); | |
218 | - BigDecimal bdCurrentRowCount = BigDecimal.ZERO; | |
219 | - for(Map curMap : retData) { | |
220 | - Map<String, Object> curMParams = new HashMap<String, Object>(); | |
221 | - curMParams.putAll(curMap); | |
222 | - curMParams.put("error_range", params.get("error_range")); | |
223 | - | |
224 | - BigDecimal bdCntAll = new BigDecimal(String.valueOf(curMap.get("cnt_all"))); | |
225 | - bdCurrentRowCount = bdCurrentRowCount.add(bdCntAll); | |
226 | - log.info("Call Matching Job (" + JsonUtil.objectToString(curMap) + ")"); | |
227 | - jobService.aiJobSub(sJobGroup, curMParams); | |
228 | - | |
229 | - //전체카운트가 처리가능카운트를 넘어설때 | |
230 | - if (bdCurrentRowCount.compareTo(bdAiAsyncMaxRowCount) > -1) { | |
231 | - bdCurrentRowCount = BigDecimal.ZERO; | |
232 | - | |
233 | - //현재 작업그룹이 종료가 되었는지 체크해서 종료시 카운트 초기화 하고 다음작업을 한다. | |
234 | - boolean blnStatus = true; | |
235 | - Integer iTotalWait = 0; | |
236 | - Integer iWaitTime = bdAiAsyncWaitTime.intValue() * 1000; //밀리초 | |
237 | - do { | |
238 | - Map<String, Object> mParam = new HashMap<String, Object>(); | |
239 | - mParam.put("userJobGroup", sJobGroup); | |
240 | - List<Map> lmJob = matchingInnerDelingMapper.getUserJobStatus(mParam); | |
241 | - for (Map curJob : lmJob) { | |
242 | - String ScurStatus = (String) curJob.get("status"); | |
243 | - if (!"Finished".equalsIgnoreCase(ScurStatus)) { | |
244 | - blnStatus = false; | |
245 | - Thread.sleep(iWaitTime); | |
246 | - iTotalWait = iTotalWait + iWaitTime; | |
247 | - break; | |
248 | - } | |
249 | - } | |
250 | - } while (!blnStatus && iTotalWait < bdAiAsyncTotalWaitTime.intValue()); //전체 기다리는 시간까지 체크 | |
251 | - log.info("Next Thread Group Processing"); | |
252 | - } | |
253 | - } | |
208 | + jobService.aiJobSub(sJobGroup, params); | |
254 | 209 | log.info("End AI Matching Job"); |
255 | 210 | |
256 | 211 | Map<String, String> rtnMap = new HashMap<String, String>(); | ... | ... |
src/main/java/com/batch/service/JobService.java
... | ... | @@ -36,6 +36,7 @@ import com.batch.config.MatchingSetup.Matching; |
36 | 36 | import com.batch.mapper.primary.MatchingInnerDelingMapper; |
37 | 37 | import com.batch.mapper.secondary.OracleMapper; |
38 | 38 | import com.batch.util.FileUtil; |
39 | +import com.batch.util.JsonUtil; | |
39 | 40 | import com.batch.util.StringUtil; |
40 | 41 | import com.batch.service.JobService; |
41 | 42 | import lombok.extern.slf4j.Slf4j; |
... | ... | @@ -53,6 +54,15 @@ public class JobService { |
53 | 54 | @Value("${matching.auto.exceptListByComma}") |
54 | 55 | String sExceptMatchType; |
55 | 56 | |
57 | + @Value("${thread.ai.count.rowmax}") | |
58 | + BigDecimal bdAiAsyncMaxRowCount; | |
59 | + | |
60 | + @Value("${thread.ai.processing.wait}") | |
61 | + BigDecimal bdAiAsyncWaitTime; | |
62 | + | |
63 | + @Value("${thread.ai.processing.wait.total}") | |
64 | + BigDecimal bdAiAsyncTotalWaitTime; | |
65 | + | |
56 | 66 | @Autowired |
57 | 67 | private JobLauncher jobLauncher; |
58 | 68 | |
... | ... | @@ -282,63 +292,60 @@ public class JobService { |
282 | 292 | matchingInnerDelingMapper.finishUserJob(paramLog); |
283 | 293 | |
284 | 294 | } |
285 | - | |
295 | + | |
286 | 296 | @SuppressWarnings("rawtypes") |
287 | 297 | @Async("aiAsync") |
288 | - public void aiJobSub(String jobGroupId, Map paramRec) throws Exception { | |
289 | - | |
290 | - | |
291 | - //Job Create Log | |
292 | - UUID uuid = UUID.randomUUID(); | |
293 | - HashMap<String, String> mt = new HashMap<String, String>(); | |
294 | - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss"); | |
295 | - String sDate = dateFormat.format(new Date()) + ":" + uuid.toString(); | |
296 | - | |
297 | - Map<String, Object> paramLog = new HashMap<String, Object>(); | |
298 | - paramLog.put("user_job_group", jobGroupId); | |
299 | - paramLog.put("user_job_id", sDate); | |
300 | - paramLog.put("user_job_name", "AI매칭(" + paramRec.toString() + ")"); | |
301 | - matchingInnerDelingMapper.createUserJob(paramLog); | |
302 | - | |
303 | - | |
304 | - long startTime = System.currentTimeMillis(); | |
305 | - log.info("ai Job Started : " + startTime); | |
306 | - log.debug("ai Job params=" + paramRec.toString()); | |
307 | - | |
308 | - String sSysSe = (String) paramRec.get("sys_se"); | |
309 | - String sAccnutYm = (String) paramRec.get("accnut_ym"); | |
310 | - String sCprCode = (String) paramRec.get("cpr_code"); | |
311 | - String sPartCpr = (String) paramRec.get("partn_cpr"); | |
312 | - String sDelngCrncy = (String) paramRec.get("delng_crncy"); | |
313 | - String sTbTy = (String) paramRec.get("tb_ty"); | |
314 | - String sErrorRange = (String) paramRec.get("error_range"); | |
315 | - | |
316 | - String sThreadName = Thread.currentThread().getName(); | |
317 | - | |
318 | - log.debug("call python"); | |
319 | - new ProcessExecutor() | |
320 | - .command(sPythonPrg, sPythonAiTarget, sDate, sSysSe, sAccnutYm, sCprCode, sPartCpr, sDelngCrncy, sErrorRange, sTbTy) | |
321 | - .redirectOutput(new LogOutputStream() { | |
322 | - @Override | |
323 | - protected void processLine(String line) { | |
324 | - log.info(line); | |
325 | - } | |
326 | - }) | |
327 | - .execute(); | |
328 | - | |
329 | - long endTime = System.currentTimeMillis(); | |
330 | - log.info("ai Job Ended: " + endTime); | |
331 | - log.info("ai Job Running Time : " + (endTime - startTime) + "ms"); | |
298 | + public void aiJobSub(String jobGroupId, Map params) throws Exception { | |
332 | 299 | |
300 | + List<Map> retData = matchingInnerDelingMapper.getAiReadData(params); | |
301 | + BigDecimal bdCurrentRowCount = BigDecimal.ZERO; | |
333 | 302 | |
334 | -// //작업종료에 대한 로그 업데이트 | |
335 | -// paramLog.put("exit_code", "0"); | |
336 | -// paramLog.put("exit_message", ""); | |
337 | -// matchingInnerDelingMapper.finishUserJob(paramLog); | |
338 | - | |
303 | + List<ThreadAiMatching> lThread = new ArrayList<ThreadAiMatching>(); | |
304 | + for(Map curMap : retData) { | |
305 | + Map<String, Object> curMParams = new HashMap<String, Object>(); | |
306 | + curMParams.putAll(curMap); | |
307 | + curMParams.put("error_range", params.get("error_range")); | |
308 | + | |
309 | + BigDecimal bdCntAll = new BigDecimal(String.valueOf(curMap.get("cnt_all"))); | |
310 | + bdCurrentRowCount = bdCurrentRowCount.add(bdCntAll); | |
311 | + log.info("Call Matching Job (" + JsonUtil.objectToString(curMap) + ")"); | |
312 | + ThreadAiMatching threadAiMatching = new ThreadAiMatching( | |
313 | + jobGroupId, | |
314 | + curMParams, | |
315 | + matchingInnerDelingMapper, | |
316 | + sPythonPrg, | |
317 | + sPythonAiTarget | |
318 | + ); | |
319 | + threadAiMatching.start(); | |
320 | + | |
321 | + //전체카운트가 처리가능카운트를 넘어설때 | |
322 | + if (bdCurrentRowCount.compareTo(bdAiAsyncMaxRowCount) > -1) { | |
323 | + bdCurrentRowCount = BigDecimal.ZERO; | |
324 | + | |
325 | + //현재 작업그룹이 종료가 되었는지 체크해서 종료시 카운트 초기화 하고 다음작업을 한다. | |
326 | + boolean blnStatus = true; | |
327 | + Integer iTotalWait = 0; | |
328 | + Integer iWaitTime = bdAiAsyncWaitTime.intValue() * 1000; //밀리초 | |
329 | + do { | |
330 | + Map<String, Object> mParam = new HashMap<String, Object>(); | |
331 | + mParam.put("userJobGroup", jobGroupId); | |
332 | + List<Map> lmJob = matchingInnerDelingMapper.getUserJobStatus(mParam); | |
333 | + for (Map curJob : lmJob) { | |
334 | + String ScurStatus = (String) curJob.get("status"); | |
335 | + if (!"Finished".equalsIgnoreCase(ScurStatus)) { | |
336 | + blnStatus = false; | |
337 | + Thread.sleep(iWaitTime); | |
338 | + iTotalWait = iTotalWait + iWaitTime; | |
339 | + break; | |
340 | + } | |
341 | + } | |
342 | + } while (!blnStatus && iTotalWait < bdAiAsyncTotalWaitTime.intValue()); //전체 기다리는 시간까지 체크 | |
343 | + log.info("Next Thread Group Processing"); | |
344 | + } | |
345 | + } | |
346 | + log.info("Current Group Process End"); | |
339 | 347 | } |
340 | 348 | |
341 | - | |
342 | 349 | public JobExecution invokeJob(String jobName, String jobType, Map<String, String> params) throws JobInstanceAlreadyCompleteException, JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException { |
343 | 350 | |
344 | 351 | UUID uuid = UUID.randomUUID(); | ... | ... |
src/main/resources/application.properties
... | ... | @@ -46,7 +46,7 @@ decorator.datasource.p6spy.enable-logging=true |
46 | 46 | |
47 | 47 | logging.level.root=info |
48 | 48 | logging.level.com.batch=info |
49 | -logging.level.p6spy=off | |
49 | +logging.level.p6spy=debug | |
50 | 50 | |
51 | 51 | #Thread Count 설정 |
52 | 52 | thread.comm.count=10 |
... | ... | @@ -58,7 +58,7 @@ thread.ai.processing.wait.total=3600 |
58 | 58 | |
59 | 59 | #Python 프로퍼티 설정 |
60 | 60 | pytyon.path=D:\\Programs\\devp\\python-3.12.2\\python.exe |
61 | -python.ai.target=D:\\Working\\Python\\Test1.py | |
61 | +python.ai.target=D:\\Working\\Vue\\matching_ai\\src\\test\\resources\\TEST_ALL_V0.3.py | |
62 | 62 | |
63 | 63 | #Auto Matching 제외 |
64 | 64 | matching.auto.exceptListByComma=C-A-ROUND(-2) |
65 | 65 | \ No newline at end of file | ... | ... |