package com.batch.service; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.UUID; import org.zeroturnaround.exec.ProcessExecutor; import org.zeroturnaround.exec.stream.LogOutputStream; import com.batch.mapper.primary.MatchingInnerDelingMapper; import lombok.extern.slf4j.Slf4j; @Slf4j public class ThreadAiMatching extends Thread { String jobGroupId; Map paramRec; MatchingInnerDelingMapper matchingInnerDelingMapper; String sPythonPrg; String sPythonAiTarget; public ThreadAiMatching( String pJobGroupId, Map pParamRec, MatchingInnerDelingMapper pMatchingInnerDelingMapper, String pPythonPrg, String pPythonAiTarget ) { this.jobGroupId = pJobGroupId; this.paramRec = pParamRec; this.matchingInnerDelingMapper = pMatchingInnerDelingMapper; this.sPythonPrg = pPythonPrg; this.sPythonAiTarget = pPythonAiTarget; } @Override public void run() { //Job Create Log UUID uuid = UUID.randomUUID(); HashMap mt = new HashMap(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss"); String sDate = dateFormat.format(new Date()) + ":" + uuid.toString(); Map paramLog = new HashMap(); paramLog.put("user_job_group", jobGroupId); paramLog.put("user_job_id", sDate); paramLog.put("user_job_name", "AI매칭(" + paramRec.toString() + ")"); matchingInnerDelingMapper.createUserJob(paramLog); long startTime = System.currentTimeMillis(); log.info("ai Job Started : " + startTime); log.debug("ai Job params=" + paramRec.toString()); String sSysSe = (String) paramRec.get("sys_se"); String sAccnutYm = (String) paramRec.get("accnut_ym"); String sCprCode = (String) paramRec.get("cpr_code"); String sPartCpr = (String) paramRec.get("partn_cpr"); String sDelngCrncy = (String) paramRec.get("delng_crncy"); String sTbTy = (String) paramRec.get("tb_ty"); String sErrorRange = (String) paramRec.get("error_range"); String sThreadName = Thread.currentThread().getName(); log.debug("call python"); try { Thread.sleep(15000); new ProcessExecutor() .command(sPythonPrg, sPythonAiTarget, sDate, sSysSe, sAccnutYm, sCprCode, sPartCpr, sDelngCrncy, sErrorRange, sTbTy) .redirectOutput(new LogOutputStream() { @Override protected void processLine(String line) { log.info(line); } }) .execute(); long endTime = System.currentTimeMillis(); log.info("ai Job Ended: " + endTime); log.info("ai Job Running Time : " + (endTime - startTime) + "ms"); } catch(Exception e) { log.info("ai Job Start Fail : " + startTime); //작업종료에 대한 로그 업데이트(실패) paramLog.put("exit_code", "-1"); paramLog.put("exit_message", e.getMessage()); matchingInnerDelingMapper.finishUserJob(paramLog); } } }