Commit 883da59384780819a5040c8400f95debb611d377

Authored by 함상기
1 parent 980c5686

.

src/main/java/com/batch/controller/JobController.java
@@ -34,16 +34,7 @@ public class JobController { @@ -34,16 +34,7 @@ public class JobController {
34 @Autowired 34 @Autowired
35 private JobService jobService; 35 private JobService jobService;
36 @Autowired 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 * TODO : AI 서버에 특정 경로에 생성되는 파일을 읽는(끝에 50줄 정도) API 40 * TODO : AI 서버에 특정 경로에 생성되는 파일을 읽는(끝에 50줄 정도) API
@@ -214,43 +205,7 @@ public class JobController { @@ -214,43 +205,7 @@ public class JobController {
214 String sJobGroup = uuid.toString(); 205 String sJobGroup = uuid.toString();
215 206
216 log.info("Start AI Matching Job"); 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 log.info("End AI Matching Job"); 209 log.info("End AI Matching Job");
255 210
256 Map<String, String> rtnMap = new HashMap<String, String>(); 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,6 +36,7 @@ import com.batch.config.MatchingSetup.Matching;
36 import com.batch.mapper.primary.MatchingInnerDelingMapper; 36 import com.batch.mapper.primary.MatchingInnerDelingMapper;
37 import com.batch.mapper.secondary.OracleMapper; 37 import com.batch.mapper.secondary.OracleMapper;
38 import com.batch.util.FileUtil; 38 import com.batch.util.FileUtil;
  39 +import com.batch.util.JsonUtil;
39 import com.batch.util.StringUtil; 40 import com.batch.util.StringUtil;
40 import com.batch.service.JobService; 41 import com.batch.service.JobService;
41 import lombok.extern.slf4j.Slf4j; 42 import lombok.extern.slf4j.Slf4j;
@@ -53,6 +54,15 @@ public class JobService { @@ -53,6 +54,15 @@ public class JobService {
53 @Value("${matching.auto.exceptListByComma}") 54 @Value("${matching.auto.exceptListByComma}")
54 String sExceptMatchType; 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 @Autowired 66 @Autowired
57 private JobLauncher jobLauncher; 67 private JobLauncher jobLauncher;
58 68
@@ -282,63 +292,60 @@ public class JobService { @@ -282,63 +292,60 @@ public class JobService {
282 matchingInnerDelingMapper.finishUserJob(paramLog); 292 matchingInnerDelingMapper.finishUserJob(paramLog);
283 293
284 } 294 }
285 - 295 +
286 @SuppressWarnings("rawtypes") 296 @SuppressWarnings("rawtypes")
287 @Async("aiAsync") 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 public JobExecution invokeJob(String jobName, String jobType, Map<String, String> params) throws JobInstanceAlreadyCompleteException, JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException { 349 public JobExecution invokeJob(String jobName, String jobType, Map<String, String> params) throws JobInstanceAlreadyCompleteException, JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException {
343 350
344 UUID uuid = UUID.randomUUID(); 351 UUID uuid = UUID.randomUUID();
src/main/resources/application.properties
@@ -46,7 +46,7 @@ decorator.datasource.p6spy.enable-logging=true @@ -46,7 +46,7 @@ decorator.datasource.p6spy.enable-logging=true
46 46
47 logging.level.root=info 47 logging.level.root=info
48 logging.level.com.batch=info 48 logging.level.com.batch=info
49 -logging.level.p6spy=off 49 +logging.level.p6spy=debug
50 50
51 #Thread Count 설정 51 #Thread Count 설정
52 thread.comm.count=10 52 thread.comm.count=10
@@ -58,7 +58,7 @@ thread.ai.processing.wait.total=3600 @@ -58,7 +58,7 @@ thread.ai.processing.wait.total=3600
58 58
59 #Python 프로퍼티 설정 59 #Python 프로퍼티 설정
60 pytyon.path=D:\\Programs\\devp\\python-3.12.2\\python.exe 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 #Auto Matching 제외 63 #Auto Matching 제외
64 matching.auto.exceptListByComma=C-A-ROUND(-2) 64 matching.auto.exceptListByComma=C-A-ROUND(-2)
65 \ No newline at end of file 65 \ No newline at end of file