Blame view

src/main/java/com/batch/service/ThreadAiMatching.java 3.15 KB
efecfd53   함상기   .
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
  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);		

      	}

      	

  	}

  

  }