diff --git a/src/main/java/com/batch/service/ThreadAiMatching.java b/src/main/java/com/batch/service/ThreadAiMatching.java new file mode 100644 index 0000000..380dc13 --- /dev/null +++ b/src/main/java/com/batch/service/ThreadAiMatching.java @@ -0,0 +1,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 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); + } + + } + +} diff --git a/src/main/java/com/batch/util/JsonUtil.java b/src/main/java/com/batch/util/JsonUtil.java new file mode 100644 index 0000000..1eaa743 --- /dev/null +++ b/src/main/java/com/batch/util/JsonUtil.java @@ -0,0 +1,38 @@ +package com.batch.util; + +import org.springframework.stereotype.Component; + +import com.fasterxml.jackson.databind.ObjectMapper; + +@Component +public class JsonUtil { + + public static String objectToString(Object object) { + String rtnVal = ""; + try { + ObjectMapper objectMapper = new ObjectMapper(); + rtnVal = objectMapper.writeValueAsString(object); + } catch (Exception e) { + e.printStackTrace(); + rtnVal = "Error"; + } + return rtnVal; + } + + public static Object stringToObject(String sJson, Class objClass) { + Object rtnVal; + try { + ObjectMapper objectMapper = new ObjectMapper(); + rtnVal = objectMapper.readValue(sJson, objClass); + } catch (Exception e) { + e.printStackTrace(); + rtnVal = "Error"; + } + return rtnVal; + } + + public static Object objectToObject(Object object, Class objClass) { + return stringToObject(objectToString(object), objClass); + } + +} \ No newline at end of file diff --git a/src/main/java/com/batch/util/StringUtil.java b/src/main/java/com/batch/util/StringUtil.java new file mode 100644 index 0000000..c06ba2e --- /dev/null +++ b/src/main/java/com/batch/util/StringUtil.java @@ -0,0 +1,122 @@ +package com.batch.util; + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.StringTokenizer; +import java.util.Vector; + +import org.apache.commons.lang3.StringUtils; + +/** + *

+ * StringUtil 은 String의 handling과 관련된 class이다. + *

+ */ + +public class StringUtil { + /** + * lPad(inStr, iSize, sPadStr) + * + * @param inStr + * @param iSize + * @param sPadStr + * @return + */ + public static String leftPad(String inStr, int iSize, String sPadStr) { + return StringUtils.leftPad(inStr, iSize, sPadStr); + } + + /** + * rPad(inStr, iSize, sPadStr) + * + * @param inStr + * @param iSize + * @param sPadStr + * @return + */ + public static String rightPad(String inStr, int iSize, String sPadStr) { + return StringUtils.rightPad(inStr, iSize, sPadStr); + } + + /** + * inStr이 null/""/"공백문자" 이면 default + * + * @param inStr + * @param sDefault + * @return + */ + public static String defaultIfBlank(String inStr, String sDefault) { + return StringUtils.defaultIfBlank(inStr, sDefault); + } + + /** + * inStr이 null/"" 이면 default + * + * @param inStr + * @param sDefault + * @return + */ + public static String defaultIfEmpty(String inStr, String sDefault) { + return StringUtils.defaultIfEmpty(inStr, sDefault); + } + + /** + * Strip 결과가 Null이나 ""이면 "" + * + * @param inStr + * @param sDefault + * @return + */ + public static String stripToEmpty(String inStr) { + return StringUtils.stripToEmpty(inStr); + } + + /** + * Strip 결과가 "" 이면 NULL + * + * @param inStr + * @param sDefault + * @return + */ + public static String stripToNull(String inStr) { + return StringUtils.stripToNull(inStr); + } + + public static String remove(String inStr, String sRemoveStr) { + return StringUtils.remove(inStr, sRemoveStr); + } + + public static String replace(String inStr, String sTargetStr, String sReplaceStr) { + return StringUtils.replace(sTargetStr, inStr, sReplaceStr); + } + + public static String trimToEmpty(String inStr) { + return StringUtils.trimToEmpty(inStr); + } + + public static String trimToNull(String inStr) { + return StringUtils.trimToNull(inStr); + } + + public static List StringToArrayList(String inStr) { + return StringToArrayList(inStr, null); + } + + public static List StringToArrayList(String inStr, String inSplit) { + List lRtn = new ArrayList(); + if (inSplit == null) inSplit = ","; + if (inStr != null) { + String[] slVal = inStr.split(inSplit); + lRtn = new ArrayList(Arrays.asList(slVal)); + } + return lRtn; + } + +} \ No newline at end of file diff --git a/src/test/resources/TEST_ALL_V0.3.py b/src/test/resources/TEST_ALL_V0.3.py new file mode 100644 index 0000000..848ae1a --- /dev/null +++ b/src/test/resources/TEST_ALL_V0.3.py @@ -0,0 +1,13 @@ +import sys + +# PARAMITER +JOB_ID = sys.argv[1] +SYS_SE = sys.argv[2] +FCST_YM = sys.argv[3] +SELF_CD = sys.argv[4] +OTHER_CD = sys.argv[5] +CUR = sys.argv[6] +TT_SUM = sys.argv[7] # 합산차액 허용오차값 +DTA_TY = sys.argv[8] # T : 트랜잭션 , B : 발란스 + +print(sys.argv) \ No newline at end of file -- libgit2 0.21.4