ThreadAiMatching.java 3.15 KB
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<String, String> mt = new HashMap<String, String>();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
        String sDate = dateFormat.format(new Date()) + ":" + uuid.toString();
    	
    	Map<String, Object> paramLog = new HashMap<String, Object>();
    	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);		
    	}
    	
	}

}