Commit efecfd5344a62e07adda725290eb2f53667071fc
1 parent
883da593
.
Showing
4 changed files
with
270 additions
and
0 deletions
Show diff stats
src/main/java/com/batch/service/ThreadAiMatching.java
0 → 100644
1 | +package com.batch.service; | |
2 | + | |
3 | +import java.text.SimpleDateFormat; | |
4 | +import java.util.Date; | |
5 | +import java.util.HashMap; | |
6 | +import java.util.Map; | |
7 | +import java.util.UUID; | |
8 | + | |
9 | +import org.zeroturnaround.exec.ProcessExecutor; | |
10 | +import org.zeroturnaround.exec.stream.LogOutputStream; | |
11 | + | |
12 | +import com.batch.mapper.primary.MatchingInnerDelingMapper; | |
13 | + | |
14 | +import lombok.extern.slf4j.Slf4j; | |
15 | + | |
16 | +@Slf4j | |
17 | +public class ThreadAiMatching extends Thread { | |
18 | + String jobGroupId; | |
19 | + Map paramRec; | |
20 | + MatchingInnerDelingMapper matchingInnerDelingMapper; | |
21 | + String sPythonPrg; | |
22 | + String sPythonAiTarget; | |
23 | + | |
24 | + public ThreadAiMatching( | |
25 | + String pJobGroupId, | |
26 | + Map pParamRec, | |
27 | + MatchingInnerDelingMapper pMatchingInnerDelingMapper, | |
28 | + String pPythonPrg, | |
29 | + String pPythonAiTarget | |
30 | + ) { | |
31 | + this.jobGroupId = pJobGroupId; | |
32 | + this.paramRec = pParamRec; | |
33 | + this.matchingInnerDelingMapper = pMatchingInnerDelingMapper; | |
34 | + this.sPythonPrg = pPythonPrg; | |
35 | + this.sPythonAiTarget = pPythonAiTarget; | |
36 | + } | |
37 | + | |
38 | + @Override | |
39 | + public void run() { | |
40 | + | |
41 | + //Job Create Log | |
42 | + UUID uuid = UUID.randomUUID(); | |
43 | + HashMap<String, String> mt = new HashMap<String, String>(); | |
44 | + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss"); | |
45 | + String sDate = dateFormat.format(new Date()) + ":" + uuid.toString(); | |
46 | + | |
47 | + Map<String, Object> paramLog = new HashMap<String, Object>(); | |
48 | + paramLog.put("user_job_group", jobGroupId); | |
49 | + paramLog.put("user_job_id", sDate); | |
50 | + paramLog.put("user_job_name", "AI매칭(" + paramRec.toString() + ")"); | |
51 | + matchingInnerDelingMapper.createUserJob(paramLog); | |
52 | + | |
53 | + | |
54 | + long startTime = System.currentTimeMillis(); | |
55 | + log.info("ai Job Started : " + startTime); | |
56 | + log.debug("ai Job params=" + paramRec.toString()); | |
57 | + | |
58 | + String sSysSe = (String) paramRec.get("sys_se"); | |
59 | + String sAccnutYm = (String) paramRec.get("accnut_ym"); | |
60 | + String sCprCode = (String) paramRec.get("cpr_code"); | |
61 | + String sPartCpr = (String) paramRec.get("partn_cpr"); | |
62 | + String sDelngCrncy = (String) paramRec.get("delng_crncy"); | |
63 | + String sTbTy = (String) paramRec.get("tb_ty"); | |
64 | + String sErrorRange = (String) paramRec.get("error_range"); | |
65 | + | |
66 | + String sThreadName = Thread.currentThread().getName(); | |
67 | + | |
68 | + log.debug("call python"); | |
69 | + try { | |
70 | + Thread.sleep(15000); | |
71 | + | |
72 | + new ProcessExecutor() | |
73 | + .command(sPythonPrg, sPythonAiTarget, sDate, sSysSe, sAccnutYm, sCprCode, sPartCpr, sDelngCrncy, sErrorRange, sTbTy) | |
74 | + .redirectOutput(new LogOutputStream() { | |
75 | + @Override | |
76 | + protected void processLine(String line) { | |
77 | + log.info(line); | |
78 | + } | |
79 | + }) | |
80 | + .execute(); | |
81 | + | |
82 | + long endTime = System.currentTimeMillis(); | |
83 | + log.info("ai Job Ended: " + endTime); | |
84 | + log.info("ai Job Running Time : " + (endTime - startTime) + "ms"); | |
85 | + | |
86 | + } catch(Exception e) { | |
87 | + log.info("ai Job Start Fail : " + startTime); | |
88 | + | |
89 | + //작업종료에 대한 로그 업데이트(실패) | |
90 | + paramLog.put("exit_code", "-1"); | |
91 | + paramLog.put("exit_message", e.getMessage()); | |
92 | + matchingInnerDelingMapper.finishUserJob(paramLog); | |
93 | + } | |
94 | + | |
95 | + } | |
96 | + | |
97 | +} | ... | ... |
1 | +package com.batch.util; | |
2 | + | |
3 | +import org.springframework.stereotype.Component; | |
4 | + | |
5 | +import com.fasterxml.jackson.databind.ObjectMapper; | |
6 | + | |
7 | +@Component | |
8 | +public class JsonUtil { | |
9 | + | |
10 | + public static String objectToString(Object object) { | |
11 | + String rtnVal = ""; | |
12 | + try { | |
13 | + ObjectMapper objectMapper = new ObjectMapper(); | |
14 | + rtnVal = objectMapper.writeValueAsString(object); | |
15 | + } catch (Exception e) { | |
16 | + e.printStackTrace(); | |
17 | + rtnVal = "Error"; | |
18 | + } | |
19 | + return rtnVal; | |
20 | + } | |
21 | + | |
22 | + public static Object stringToObject(String sJson, Class<?> objClass) { | |
23 | + Object rtnVal; | |
24 | + try { | |
25 | + ObjectMapper objectMapper = new ObjectMapper(); | |
26 | + rtnVal = objectMapper.readValue(sJson, objClass); | |
27 | + } catch (Exception e) { | |
28 | + e.printStackTrace(); | |
29 | + rtnVal = "Error"; | |
30 | + } | |
31 | + return rtnVal; | |
32 | + } | |
33 | + | |
34 | + public static Object objectToObject(Object object, Class<?> objClass) { | |
35 | + return stringToObject(objectToString(object), objClass); | |
36 | + } | |
37 | + | |
38 | +} | |
0 | 39 | \ No newline at end of file | ... | ... |
1 | +package com.batch.util; | |
2 | + | |
3 | +import java.io.UnsupportedEncodingException; | |
4 | +import java.net.URLDecoder; | |
5 | +import java.net.URLEncoder; | |
6 | +import java.util.ArrayList; | |
7 | +import java.util.Arrays; | |
8 | +import java.util.HashMap; | |
9 | +import java.util.Iterator; | |
10 | +import java.util.List; | |
11 | +import java.util.Map; | |
12 | +import java.util.StringTokenizer; | |
13 | +import java.util.Vector; | |
14 | + | |
15 | +import org.apache.commons.lang3.StringUtils; | |
16 | + | |
17 | +/** | |
18 | + * <p> | |
19 | + * <code>StringUtil</code> 은 String의 handling과 관련된 class이다. | |
20 | + * <p> | |
21 | + */ | |
22 | + | |
23 | +public class StringUtil { | |
24 | + /** | |
25 | + * lPad(inStr, iSize, sPadStr) | |
26 | + * | |
27 | + * @param inStr | |
28 | + * @param iSize | |
29 | + * @param sPadStr | |
30 | + * @return | |
31 | + */ | |
32 | + public static String leftPad(String inStr, int iSize, String sPadStr) { | |
33 | + return StringUtils.leftPad(inStr, iSize, sPadStr); | |
34 | + } | |
35 | + | |
36 | + /** | |
37 | + * rPad(inStr, iSize, sPadStr) | |
38 | + * | |
39 | + * @param inStr | |
40 | + * @param iSize | |
41 | + * @param sPadStr | |
42 | + * @return | |
43 | + */ | |
44 | + public static String rightPad(String inStr, int iSize, String sPadStr) { | |
45 | + return StringUtils.rightPad(inStr, iSize, sPadStr); | |
46 | + } | |
47 | + | |
48 | + /** | |
49 | + * inStr이 null/""/"공백문자" 이면 default | |
50 | + * | |
51 | + * @param inStr | |
52 | + * @param sDefault | |
53 | + * @return | |
54 | + */ | |
55 | + public static String defaultIfBlank(String inStr, String sDefault) { | |
56 | + return StringUtils.defaultIfBlank(inStr, sDefault); | |
57 | + } | |
58 | + | |
59 | + /** | |
60 | + * inStr이 null/"" 이면 default | |
61 | + * | |
62 | + * @param inStr | |
63 | + * @param sDefault | |
64 | + * @return | |
65 | + */ | |
66 | + public static String defaultIfEmpty(String inStr, String sDefault) { | |
67 | + return StringUtils.defaultIfEmpty(inStr, sDefault); | |
68 | + } | |
69 | + | |
70 | + /** | |
71 | + * Strip 결과가 Null이나 ""이면 "" | |
72 | + * | |
73 | + * @param inStr | |
74 | + * @param sDefault | |
75 | + * @return | |
76 | + */ | |
77 | + public static String stripToEmpty(String inStr) { | |
78 | + return StringUtils.stripToEmpty(inStr); | |
79 | + } | |
80 | + | |
81 | + /** | |
82 | + * Strip 결과가 "" 이면 NULL | |
83 | + * | |
84 | + * @param inStr | |
85 | + * @param sDefault | |
86 | + * @return | |
87 | + */ | |
88 | + public static String stripToNull(String inStr) { | |
89 | + return StringUtils.stripToNull(inStr); | |
90 | + } | |
91 | + | |
92 | + public static String remove(String inStr, String sRemoveStr) { | |
93 | + return StringUtils.remove(inStr, sRemoveStr); | |
94 | + } | |
95 | + | |
96 | + public static String replace(String inStr, String sTargetStr, String sReplaceStr) { | |
97 | + return StringUtils.replace(sTargetStr, inStr, sReplaceStr); | |
98 | + } | |
99 | + | |
100 | + public static String trimToEmpty(String inStr) { | |
101 | + return StringUtils.trimToEmpty(inStr); | |
102 | + } | |
103 | + | |
104 | + public static String trimToNull(String inStr) { | |
105 | + return StringUtils.trimToNull(inStr); | |
106 | + } | |
107 | + | |
108 | + public static List<String> StringToArrayList(String inStr) { | |
109 | + return StringToArrayList(inStr, null); | |
110 | + } | |
111 | + | |
112 | + public static List<String> StringToArrayList(String inStr, String inSplit) { | |
113 | + List<String> lRtn = new ArrayList<String>(); | |
114 | + if (inSplit == null) inSplit = ","; | |
115 | + if (inStr != null) { | |
116 | + String[] slVal = inStr.split(inSplit); | |
117 | + lRtn = new ArrayList<String>(Arrays.asList(slVal)); | |
118 | + } | |
119 | + return lRtn; | |
120 | + } | |
121 | + | |
122 | +} | |
0 | 123 | \ No newline at end of file | ... | ... |
1 | +import sys | |
2 | + | |
3 | +# PARAMITER | |
4 | +JOB_ID = sys.argv[1] | |
5 | +SYS_SE = sys.argv[2] | |
6 | +FCST_YM = sys.argv[3] | |
7 | +SELF_CD = sys.argv[4] | |
8 | +OTHER_CD = sys.argv[5] | |
9 | +CUR = sys.argv[6] | |
10 | +TT_SUM = sys.argv[7] # 합산차액 허용오차값 | |
11 | +DTA_TY = sys.argv[8] # T : 트랜잭션 , B : 발란스 | |
12 | + | |
13 | +print(sys.argv) | |
0 | 14 | \ No newline at end of file | ... | ... |