Commit 30bbef42a0db1669e40ab1f2bfdc8163e5e36053

Authored by 함상기
1 parent dec8d909

ai sub Matching 추가

실행시 추가로 자가및 상대법인 파라미터로 받을 수 있도록 추가
src/main/java/com/batch/config/MatchingAiSubProcessorAuto.java 0 → 100644
  1 +package com.batch.config;
  2 +
  3 +import java.math.BigDecimal;
  4 +import java.math.MathContext;
  5 +import java.math.RoundingMode;
  6 +import java.text.SimpleDateFormat;
  7 +import java.util.ArrayList;
  8 +import java.util.Date;
  9 +import java.util.HashMap;
  10 +import java.util.List;
  11 +import java.util.Map;
  12 +import java.util.UUID;
  13 +
  14 +import com.batch.mapper.primary.MatchingInnerDelingMapper;
  15 +import com.batch.util.StatisticsUtil;
  16 +
  17 +import lombok.RequiredArgsConstructor;
  18 +import lombok.extern.slf4j.Slf4j;
  19 +
  20 +@Slf4j
  21 +@RequiredArgsConstructor
  22 +public class MatchingAiSubProcessorAuto {
  23 +
  24 + private final MatchingInnerDelingMapper matchingInnerDelingMapper;
  25 +
  26 + @SuppressWarnings("unchecked")
  27 + public void process(Map paramRec, int iCmbnOwnCnt, int iCmbnTranCnt, int iStartOwn, int iStartTran) throws Exception {
  28 +
  29 + //Job Create Log
  30 + UUID uuid = UUID.randomUUID();
  31 + HashMap<String, String> mt = new HashMap<String, String>();
  32 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
  33 + String sDate = dateFormat.format(new Date()) + ":" + uuid.toString();
  34 +
  35 + Map<String, Object> paramLog = new HashMap<String, Object>();
  36 + paramLog.put("user_job_id", sDate);
  37 + paramLog.put("user_job_name", "AI Sub 조합매칭(" + paramRec.toString() + ",[" + iCmbnOwnCnt + "," + iStartOwn + "],[" + iCmbnTranCnt + "," + iStartTran + "])");
  38 + matchingInnerDelingMapper.createUserJob(paramLog);
  39 +
  40 +
  41 + int iUpdated = 0;
  42 +
  43 + String sSysSe = (String) paramRec.get("sys_se");
  44 + String sAccnutYm = (String) paramRec.get("accnut_ym");
  45 + String sMtchTy = (String) paramRec.get("mtch_ty");
  46 + Long lngMtchKy = (Long) paramRec.get("mtch_ky");
  47 + String sCprCode = (String) paramRec.get("cpr_code");
  48 + String sPartCpr = (String) paramRec.get("partn_cpr");
  49 + String sConds = (String) paramRec.get("conds");
  50 +
  51 + Integer iErrorRange = 0;
  52 + if (paramRec.get("error_range") != null) iErrorRange = Integer.parseInt((String) paramRec.get("error_range"));
  53 +
  54 + //작업시작
  55 + Map<String, Object> mParam = new HashMap<String, Object>();
  56 + mParam.put("sysSe", sSysSe);
  57 + mParam.put("accnutYm", sAccnutYm);
  58 + mParam.put("mtchTy", sMtchTy);
  59 + mParam.put("mtchKy", lngMtchKy);
  60 + mParam.put("conds", sConds);
  61 +
  62 + //----------------------------------------------------------------------------
  63 + //자기법인 데이타 가져오기
  64 + mParam.put("cprCode", sCprCode);
  65 + mParam.put("partnCpr", sPartCpr);
  66 + List<Map> lMatchingDataOne = matchingInnerDelingMapper.getAiSubDataOne(mParam);
  67 +
  68 + //상대법인 데이타 가져오기
  69 + mParam.put("cprCode", sPartCpr);
  70 + mParam.put("partnCpr", sCprCode);
  71 + List<Map> lMatchingDataTwo = matchingInnerDelingMapper.getAiSubDataTwo(mParam);
  72 +
  73 + //Combination 데이타 만들기
  74 + List<Map> compResult = new ArrayList<Map>();
  75 + List<List<Map>> llMatchingDataOne = new ArrayList<List<Map>>();
  76 + List<List<Map>> llMatchingDataTwo = new ArrayList<List<Map>>();
  77 +
  78 + int iEndOwn = lMatchingDataOne.size();
  79 + if (iCmbnOwnCnt == 2) {
  80 + iEndOwn = iStartOwn + 1000;
  81 + if (iEndOwn > lMatchingDataOne.size()) iEndOwn = lMatchingDataOne.size();
  82 + }
  83 + if (iCmbnOwnCnt == 3) {
  84 + iEndOwn = iStartOwn + 50;
  85 + if (iEndOwn > lMatchingDataOne.size()) iEndOwn = lMatchingDataOne.size();
  86 + }
  87 + if (iCmbnOwnCnt > 3) {
  88 + iEndOwn = iStartOwn + 25;
  89 + if (iEndOwn > lMatchingDataOne.size()) iEndOwn = lMatchingDataOne.size();
  90 + }
  91 +
  92 + int iEndTran = lMatchingDataTwo.size();
  93 + if (iCmbnTranCnt == 2) {
  94 + iEndTran = iStartTran + 1000;
  95 + if (iEndTran > lMatchingDataTwo.size()) iEndTran = lMatchingDataTwo.size();
  96 + }
  97 + if (iCmbnTranCnt == 3) {
  98 + iEndTran = iStartTran + 50;
  99 + if (iEndTran > lMatchingDataTwo.size()) iEndTran = lMatchingDataTwo.size();
  100 + }
  101 + if (iCmbnTranCnt > 3) {
  102 + iEndTran = iStartTran + 25;
  103 + if (iEndTran > lMatchingDataTwo.size()) iEndTran = lMatchingDataTwo.size();
  104 + }
  105 +
  106 + StatisticsUtil.reculsion(lMatchingDataOne, compResult, iStartOwn, iEndOwn, iCmbnOwnCnt, llMatchingDataOne);
  107 + StatisticsUtil.reculsion(lMatchingDataTwo, compResult, iStartTran, iEndTran, iCmbnTranCnt, llMatchingDataTwo);
  108 +
  109 + //----------------------------------------------------------------------------
  110 + //자기법인 데이타를 맵으로 처리한다.
  111 + Map<BigDecimal, List<List<Map>>> mMatchingDataOne = new HashMap<BigDecimal, List<List<Map>>>();
  112 + for (List<Map> curlMap : llMatchingDataOne) {
  113 + BigDecimal bdKey = BigDecimal.ZERO;
  114 + for(Map curMap : curlMap) {
  115 + bdKey = bdKey.add((BigDecimal) curMap.get("delng_amt"));
  116 + }
  117 + List<List<Map>> curllMap = new ArrayList<List<Map>>();
  118 + if (mMatchingDataOne.containsKey(bdKey)) curllMap = mMatchingDataOne.get(bdKey);
  119 + curllMap.add(curlMap);
  120 + mMatchingDataOne.put(bdKey, curllMap);
  121 + }
  122 +
  123 + //키를 Ceiling 처리하여 다시 작성
  124 + Map<BigDecimal, List<List<Map>>> mMatchingDataOneNew = new HashMap<BigDecimal, List<List<Map>>>();
  125 + for (BigDecimal bdKey : mMatchingDataOne.keySet()) {
  126 + BigDecimal bdKeyNew = bdKey.setScale(iErrorRange, RoundingMode.HALF_UP);
  127 + mMatchingDataOneNew.put(bdKeyNew, mMatchingDataOne.get(bdKey));
  128 + }
  129 + mMatchingDataOne = mMatchingDataOneNew;
  130 +
  131 + //상대법인 데이타를 맵으로 처리한다.
  132 + Map<BigDecimal, List<List<Map>>> mMatchingDataTwo = new HashMap<BigDecimal, List<List<Map>>>();
  133 + for (List<Map> curlMap : llMatchingDataTwo) {
  134 + BigDecimal bdKey = BigDecimal.ZERO;
  135 + for(Map curMap : curlMap) {
  136 + bdKey = bdKey.add((BigDecimal) curMap.get("delng_amt"));
  137 + }
  138 + List<List<Map>> curllMap = new ArrayList<List<Map>>();
  139 + if (mMatchingDataTwo.containsKey(bdKey)) curllMap = mMatchingDataTwo.get(bdKey);
  140 + curllMap.add(curlMap);
  141 + mMatchingDataTwo.put(bdKey, curllMap);
  142 + }
  143 +
  144 + //키를 Ceiling 처리하여 다시 작성
  145 + Map<BigDecimal, List<List<Map>>> mMatchingDataTwoNew = new HashMap<BigDecimal, List<List<Map>>>();
  146 + for (BigDecimal bdKey : mMatchingDataTwo.keySet()) {
  147 + BigDecimal bdKeyNew = bdKey.setScale(iErrorRange, RoundingMode.HALF_UP);
  148 + mMatchingDataTwoNew.put(bdKeyNew, mMatchingDataTwo.get(bdKey));
  149 + }
  150 + mMatchingDataTwo = mMatchingDataTwoNew;
  151 +
  152 + //여기서 매칭 비교
  153 + //비교 lMatchingDataOne vs mMatchingDataTwo
  154 + List<Map> lMatchingResultUpdate = new ArrayList<Map>(); //업데이트할 대상
  155 +
  156 + int mtchNumber = 0;
  157 + String mtchSys = "AUTO";
  158 + String mtchType = "AI_" + iCmbnOwnCnt + "_" + iCmbnTranCnt;
  159 + String mtchTypeName = "자기(" + iCmbnOwnCnt + "건Sum), 상대(" + iCmbnTranCnt + "건Sum), 비교(금액)";
  160 + for (BigDecimal curKey : mMatchingDataOne.keySet()) {
  161 + if (mMatchingDataTwo.containsKey(curKey)) {
  162 + List<List<Map>> llMapOne = mMatchingDataOne.get(curKey);
  163 + List<List<Map>> llMapTwo = mMatchingDataTwo.get(curKey);
  164 +
  165 + //위와 관련된 동일 레코드가 있는 리스트 삭제
  166 + for (int i=llMapOne.size()-1; i>=0;i--) {
  167 + List<Map> curlMap = llMapOne.get(i);
  168 + for (Map curMap : lMatchingResultUpdate) {
  169 + int curIdx = curlMap.indexOf(curMap);
  170 + if (curIdx != -1) {
  171 + llMapOne.remove(i);
  172 + break;
  173 + }
  174 + }
  175 + }
  176 + for (int i=llMapTwo.size()-1; i>=0;i--) {
  177 + List<Map> curlMap = llMapTwo.get(i);
  178 + for (Map curMap : lMatchingResultUpdate) {
  179 + int curIdx = curlMap.indexOf(curMap);
  180 + if (curIdx != -1) {
  181 + llMapTwo.remove(i);
  182 + break;
  183 + }
  184 + }
  185 + }
  186 +
  187 +
  188 + int iMin = Math.min(llMapOne.size(), llMapTwo.size());
  189 + if (iMin > 0) mtchNumber++;
  190 + while (iMin > 0) {
  191 + List<Map> curlMapOne = llMapOne.get(0);
  192 + for (Map curMap : curlMapOne) {
  193 + curMap.put("mtch_sys", mtchSys);
  194 + curMap.put("mtch_ty", mtchType);
  195 + curMap.put("mtch_ty_nm", mtchTypeName);
  196 + curMap.put("mtch_ky", mtchNumber);
  197 + lMatchingResultUpdate.add(curMap);
  198 + }
  199 + llMapOne.remove(0);
  200 +
  201 + List<Map> curlMapTwo = llMapTwo.get(0);
  202 + for (Map curMap : curlMapTwo) {
  203 + curMap.put("mtch_sys", mtchSys);
  204 + curMap.put("mtch_ty", mtchType);
  205 + curMap.put("mtch_ty_nm", mtchTypeName);
  206 + curMap.put("mtch_ky", mtchNumber);
  207 + lMatchingResultUpdate.add(curMap);
  208 + }
  209 + llMapTwo.remove(0);
  210 +
  211 + //위와 관련된 동일 레코드가 있는 리스트 삭제(추가 업데이트 목록)
  212 + for (int i=llMapOne.size()-1; i>=0;i--) {
  213 + List<Map> curlMap = llMapOne.get(i);
  214 + for (Map curMap : curlMapOne) {
  215 + int curIdx = curlMap.indexOf(curMap);
  216 + if (curIdx != -1) {
  217 + llMapOne.remove(i);
  218 + break;
  219 + }
  220 + }
  221 + }
  222 + for (int i=llMapTwo.size()-1; i>=0;i--) {
  223 + List<Map> curlMap = llMapTwo.get(i);
  224 + for (Map curMap : curlMapTwo) {
  225 + int curIdx = curlMap.indexOf(curMap);
  226 + if (curIdx != -1) {
  227 + llMapTwo.remove(i);
  228 + break;
  229 + }
  230 + }
  231 + }
  232 + iMin = Math.min(llMapOne.size(), llMapTwo.size());
  233 + }
  234 + }
  235 + }
  236 +
  237 + //----------------------------------------------------------------------------
  238 + //여기서 결과 업데이트
  239 + iUpdated = 0;
  240 + int limit = 1000; //1000건씩 batch
  241 + List<Map> lUpdated = new ArrayList<Map>();
  242 + for (Map curMap : lMatchingResultUpdate) {
  243 + lUpdated.add(curMap);
  244 + if (lUpdated.size() == limit) {
  245 + matchingInnerDelingMapper.setExtraResult(Map.of("itemList", lUpdated));
  246 + iUpdated = iUpdated + lUpdated.size();
  247 + lUpdated.clear();
  248 + }
  249 + }
  250 + if (lUpdated.size() > 0) {
  251 + matchingInnerDelingMapper.setExtraResult(Map.of("itemList", lUpdated));
  252 + iUpdated = iUpdated + lUpdated.size();
  253 + }
  254 + log.debug("Updated OrgData : " + iUpdated + "건");
  255 +
  256 + //작업종료에 대한 로그 업데이트
  257 + paramLog.put("exit_code", "0");
  258 + paramLog.put("exit_message", "");
  259 + matchingInnerDelingMapper.finishUserJob(paramLog);
  260 +
  261 + }
  262 +
  263 +}
0 \ No newline at end of file 264 \ No newline at end of file
src/main/java/com/batch/config/MatchingItemProcessorAuto.java
@@ -71,12 +71,14 @@ public class MatchingItemProcessorAuto implements ItemProcessor&lt;Map, Map&gt; { @@ -71,12 +71,14 @@ public class MatchingItemProcessorAuto implements ItemProcessor&lt;Map, Map&gt; {
71 params.put("cprCode", item.get("cpr_code")); 71 params.put("cprCode", item.get("cpr_code"));
72 params.put("partnCpr", item.get("partn_cpr")); 72 params.put("partnCpr", item.get("partn_cpr"));
73 params.put("amtField", matching.getAmtField()); 73 params.put("amtField", matching.getAmtField());
  74 + params.put("currencyField", matching.getCurrencyField());
74 params.put("cond", condOne.getCond() ); //조건리스트 75 params.put("cond", condOne.getCond() ); //조건리스트
75 List<Map> lMatchingDataOne = matchingInnerDelingMapper.getMatchingData(params); 76 List<Map> lMatchingDataOne = matchingInnerDelingMapper.getMatchingData(params);
76 77
77 //상대법인 데이타 가져오기 78 //상대법인 데이타 가져오기
78 params.put("cprCode", item.get("partn_cpr")); 79 params.put("cprCode", item.get("partn_cpr"));
79 params.put("partnCpr", item.get("cpr_code")); 80 params.put("partnCpr", item.get("cpr_code"));
  81 + params.put("currencyField", matching.getCurrencyField());
80 params.put("amtField", matching.getAmtField()); 82 params.put("amtField", matching.getAmtField());
81 params.put("cond", condTwo.getCond() ); //조건리스트 83 params.put("cond", condTwo.getCond() ); //조건리스트
82 List<Map> lMatchingDataTwo = matchingInnerDelingMapper.getMatchingData(params); 84 List<Map> lMatchingDataTwo = matchingInnerDelingMapper.getMatchingData(params);
src/main/java/com/batch/config/MatchingItemReader.java
@@ -32,7 +32,7 @@ public class MatchingItemReader { @@ -32,7 +32,7 @@ public class MatchingItemReader {
32 */ 32 */
33 public List<Map> customRead(){ 33 public List<Map> customRead(){
34 log.debug("customRead.params : " + this.params.toString()); 34 log.debug("customRead.params : " + this.params.toString());
35 - // customRead.params : {sysSe=KUMKANG, searchCond=mtch_ky is null, run.id=1, syncDate=2024-02-02-03-52-27:50deede8-ce3d-4841-ba65-f733bdd38533, jobType=F, accnutYm=202112} 35 + // customRead.params : {sysSe=KUMKANG, run.id=1, syncDate=2024-02-02-03-52-27:50deede8-ce3d-4841-ba65-f733bdd38533, jobType=F, accnutYm=202112}
36 String sMatchType = this.params.get("jobType"); 36 String sMatchType = this.params.get("jobType");
37 StringBuffer sb = FileUtil.readFileToString("matchingSetup.json"); 37 StringBuffer sb = FileUtil.readFileToString("matchingSetup.json");
38 MatchingSetup matchingSetup = (MatchingSetup) FileUtil.strToObj(sb.toString(), MatchingSetup.class); 38 MatchingSetup matchingSetup = (MatchingSetup) FileUtil.strToObj(sb.toString(), MatchingSetup.class);
src/main/java/com/batch/config/MatchingSetup.java
@@ -20,6 +20,7 @@ public class MatchingSetup { @@ -20,6 +20,7 @@ public class MatchingSetup {
20 List<String> uniqueKey; 20 List<String> uniqueKey;
21 String compareKey; 21 String compareKey;
22 List<String> compareField; 22 List<String> compareField;
  23 + String currencyField;
23 String amtField; 24 String amtField;
24 String matchingType; 25 String matchingType;
25 String matchingTypeName; 26 String matchingTypeName;
src/main/java/com/batch/controller/JobController.java
1 package com.batch.controller; 1 package com.batch.controller;
2 2
  3 +import java.math.BigDecimal;
3 import java.util.ArrayList; 4 import java.util.ArrayList;
4 import java.util.HashMap; 5 import java.util.HashMap;
5 import java.util.List; 6 import java.util.List;
@@ -85,6 +86,8 @@ public class JobController { @@ -85,6 +86,8 @@ public class JobController {
85 * { 86 * {
86 * "sysSe": "LS_ALL", 87 * "sysSe": "LS_ALL",
87 * "accnutYm": "202306", 88 * "accnutYm": "202306",
  89 + * "cpr_code": "xxxxx",
  90 + * "partn_cpr": "xxxxx",
88 * } 91 * }
89 */ 92 */
90 //Job Create Log 93 //Job Create Log
@@ -109,6 +112,8 @@ public class JobController { @@ -109,6 +112,8 @@ public class JobController {
109 * { 112 * {
110 * "sysSe": "LS_ALL", 113 * "sysSe": "LS_ALL",
111 * "accnutYm": "202306", 114 * "accnutYm": "202306",
  115 + * "cpr_code": "xxxxx",
  116 + * "partn_cpr": "xxxxx",
112 * "searchOne": "dta_ty in ('11','21','31','33','35','37','41')", 117 * "searchOne": "dta_ty in ('11','21','31','33','35','37','41')",
113 * "searchTwo": "dta_ty in ('11','21','31','33','35','37','41')" 118 * "searchTwo": "dta_ty in ('11','21','31','33','35','37','41')"
114 * } 119 * }
@@ -145,6 +150,44 @@ public class JobController { @@ -145,6 +150,44 @@ public class JobController {
145 } 150 }
146 151
147 152
  153 + @PostMapping("/aisubmatching")
  154 + public Map<String, String> aiSubMatchingJob( @RequestBody Map<String, String> params) throws Exception {
  155 +
  156 + /*
  157 + * {
  158 + * "sysSe": "LS_ALL",
  159 + * "accnutYm": "202306",
  160 + * "mtch_ty": "AI_SLT"
  161 + * "cpr_code": "xxxxx",
  162 + * "partn_cpr": "xxxxx"
  163 + * }
  164 + */
  165 + //Job Create Log
  166 + UUID uuid = UUID.randomUUID();
  167 + String sJobGroup = uuid.toString();
  168 +
  169 + log.debug("Start AI Sub Matching Job");
  170 + List<Map> retData = matchingInnerDelingMapper.getAiSubReadData(params);
  171 +
  172 + //AI의 경우 수익비용만 매칭하고 있음
  173 + for(Map curMap : retData) {
  174 + Map<String, String> cParams = new HashMap<String, String>();
  175 + cParams.putAll(params);
  176 + cParams.putAll(curMap);
  177 + cParams.put("conds", "T");
  178 + jobService.aiSubJobSub(sJobGroup, cParams);
  179 + }
  180 +
  181 + log.debug("End Extra Matching Job");
  182 +
  183 + Map<String, String> rtnMap = new HashMap<String, String>();
  184 + rtnMap.put("jobGroupId", sJobGroup);
  185 + rtnMap.put("jobMessage", "Extra 매칭작업을 시작합니다. 작업이 끝난후 작업결과는 별도로 확인 바랍니다.");
  186 +
  187 + return rtnMap;
  188 + }
  189 +
  190 +
148 @PostMapping("/aimatching") 191 @PostMapping("/aimatching")
149 public Map<String, String> aiMatchingJob( @RequestBody Map<String, String> params) throws Exception { 192 public Map<String, String> aiMatchingJob( @RequestBody Map<String, String> params) throws Exception {
150 193
@@ -152,6 +195,9 @@ public class JobController { @@ -152,6 +195,9 @@ public class JobController {
152 * { 195 * {
153 * "sysSe": "LS_ALL", 196 * "sysSe": "LS_ALL",
154 * "accnutYm": "202306", 197 * "accnutYm": "202306",
  198 + * "cpr_code": "xxxxx",
  199 + * "partn_cpr": "xxxxx",
  200 + * "error_range": "0"
155 * } 201 * }
156 */ 202 */
157 //Job Create Log 203 //Job Create Log
@@ -161,7 +207,10 @@ public class JobController { @@ -161,7 +207,10 @@ public class JobController {
161 log.debug("Start AI Matching Job"); 207 log.debug("Start AI Matching Job");
162 List<Map> retData = matchingInnerDelingMapper.getAiReadData(params); 208 List<Map> retData = matchingInnerDelingMapper.getAiReadData(params);
163 for(Map curMap : retData) { 209 for(Map curMap : retData) {
164 - jobService.aiJobSub(sJobGroup, curMap); 210 + Map<String, Object> curMParams = new HashMap<String, Object>();
  211 + curMParams.putAll(curMap);
  212 + curMParams.put("error_range", params.get("error_range"));
  213 + jobService.aiJobSub(sJobGroup, curMParams);
165 } 214 }
166 log.debug("End AI Matching Job"); 215 log.debug("End AI Matching Job");
167 216
src/main/java/com/batch/mapper/primary/MatchingInnerDelingMapper.java
@@ -13,7 +13,6 @@ public interface MatchingInnerDelingMapper { @@ -13,7 +13,6 @@ public interface MatchingInnerDelingMapper {
13 */ 13 */
14 @SuppressWarnings("rawtypes") 14 @SuppressWarnings("rawtypes")
15 List<Map> getCustomItemReadData(Map param); 15 List<Map> getCustomItemReadData(Map param);
16 -  
17 16
18 /** 17 /**
19 * 작업키 업데이트 (파라미터 : 자기데이타/상대데이타) 18 * 작업키 업데이트 (파라미터 : 자기데이타/상대데이타)
@@ -168,5 +167,27 @@ public interface MatchingInnerDelingMapper { @@ -168,5 +167,27 @@ public interface MatchingInnerDelingMapper {
168 */ 167 */
169 @SuppressWarnings("rawtypes") 168 @SuppressWarnings("rawtypes")
170 List<Map> getUserJobStatus(Map param); 169 List<Map> getUserJobStatus(Map param);
  170 +
  171 + /*
  172 + * AI Sub 작업리스트
  173 + */
  174 + @SuppressWarnings("rawtypes")
  175 + List<Map> getAiSubReadData(Map param);
  176 +
  177 + /**
  178 + * AI Sub matching을 위한 자료 조회
  179 + * @param param
  180 + * @return
  181 + */
  182 + @SuppressWarnings("rawtypes")
  183 + List<Map> getAiSubDataOne(Map param);
  184 +
  185 + /**
  186 + * AI Sub matching을 위한 자료 조회
  187 + * @param param
  188 + * @return
  189 + */
  190 + @SuppressWarnings("rawtypes")
  191 + List<Map> getAiSubDataTwo(Map param);
171 192
172 } 193 }
173 \ No newline at end of file 194 \ No newline at end of file
src/main/java/com/batch/service/JobService.java
1 package com.batch.service; 1 package com.batch.service;
2 2
  3 +import java.math.BigDecimal;
3 import java.text.SimpleDateFormat; 4 import java.text.SimpleDateFormat;
4 import java.util.ArrayList; 5 import java.util.ArrayList;
5 import java.util.Arrays; 6 import java.util.Arrays;
@@ -12,6 +13,7 @@ import java.util.UUID; @@ -12,6 +13,7 @@ import java.util.UUID;
12 import org.springframework.batch.core.BatchStatus; 13 import org.springframework.batch.core.BatchStatus;
13 import org.springframework.batch.core.Job; 14 import org.springframework.batch.core.Job;
14 import org.springframework.batch.core.JobExecution; 15 import org.springframework.batch.core.JobExecution;
  16 +import org.springframework.batch.core.JobParameter;
15 import org.springframework.batch.core.JobParameters; 17 import org.springframework.batch.core.JobParameters;
16 import org.springframework.batch.core.JobParametersBuilder; 18 import org.springframework.batch.core.JobParametersBuilder;
17 import org.springframework.batch.core.JobParametersInvalidException; 19 import org.springframework.batch.core.JobParametersInvalidException;
@@ -27,6 +29,7 @@ import org.springframework.stereotype.Service; @@ -27,6 +29,7 @@ import org.springframework.stereotype.Service;
27 import org.zeroturnaround.exec.ProcessExecutor; 29 import org.zeroturnaround.exec.ProcessExecutor;
28 import org.zeroturnaround.exec.stream.LogOutputStream; 30 import org.zeroturnaround.exec.stream.LogOutputStream;
29 31
  32 +import com.batch.config.MatchingAiSubProcessorAuto;
30 import com.batch.config.MatchingExtraProcessorAuto; 33 import com.batch.config.MatchingExtraProcessorAuto;
31 import com.batch.config.MatchingSetup; 34 import com.batch.config.MatchingSetup;
32 import com.batch.config.MatchingSetup.Matching; 35 import com.batch.config.MatchingSetup.Matching;
@@ -160,8 +163,20 @@ public class JobService { @@ -160,8 +163,20 @@ public class JobService {
160 matchingExtraProcessorAuto.process(paramRec, 1, 3, 0, i); 163 matchingExtraProcessorAuto.process(paramRec, 1, 3, 0, i);
161 } 164 }
162 for (int i=0; i<2000;i=i+50) { 165 for (int i=0; i<2000;i=i+50) {
  166 + matchingExtraProcessorAuto.process(paramRec, 2, 3, 0, i);
  167 + }
  168 + for (int i=0; i<2000;i=i+50) {
  169 + matchingExtraProcessorAuto.process(paramRec, 3, 3, 0, i);
  170 + }
  171 + for (int i=0; i<2000;i=i+50) {
163 matchingExtraProcessorAuto.process(paramRec, 3, 1, i, 0); 172 matchingExtraProcessorAuto.process(paramRec, 3, 1, i, 0);
164 } 173 }
  174 + for (int i=0; i<2000;i=i+50) {
  175 + matchingExtraProcessorAuto.process(paramRec, 3, 2, i, 0);
  176 + }
  177 + for (int i=0; i<2000;i=i+50) {
  178 + matchingExtraProcessorAuto.process(paramRec, 3, 3, i, 0);
  179 + }
165 180
166 //4건씩 매칭일 경우 최대 2000건 까지 181 //4건씩 매칭일 경우 최대 2000건 까지
167 for (int i=0; i<2000;i=i+25) { 182 for (int i=0; i<2000;i=i+25) {
@@ -183,6 +198,79 @@ public class JobService { @@ -183,6 +198,79 @@ public class JobService {
183 } 198 }
184 199
185 @SuppressWarnings("rawtypes") 200 @SuppressWarnings("rawtypes")
  201 + @Async("extAsync")
  202 + public void aiSubJobSub(String jobGroupId, Map paramRec) throws Exception {
  203 +
  204 + //Job Create Log
  205 + UUID uuid = UUID.randomUUID();
  206 + HashMap<String, String> mt = new HashMap<String, String>();
  207 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
  208 + String sDate = dateFormat.format(new Date()) + ":" + uuid.toString();
  209 +
  210 + Map<String, Object> paramLog = new HashMap<String, Object>();
  211 + paramLog.put("user_job_group", jobGroupId);
  212 + paramLog.put("user_job_id", sDate);
  213 + paramLog.put("user_job_name", "AI Sub 매칭(" + paramRec.toString() + ")");
  214 + matchingInnerDelingMapper.createUserJob(paramLog);
  215 +
  216 + String sThreadName = Thread.currentThread().getName();
  217 + long startTime = System.currentTimeMillis();
  218 + log.info("AI Sub [" + sThreadName + "]Job Started : " + startTime);
  219 + log.debug("AI Sub [" + sThreadName + "]params=" + paramRec.toString());
  220 +
  221 + MatchingAiSubProcessorAuto matchingAiSubProcessorAuto = new MatchingAiSubProcessorAuto(matchingInnerDelingMapper);
  222 +
  223 + //2건씩 합산 매칭일 경우 최대 20000건 까지
  224 + for (int i=0; i<20000;i=i+1000) {
  225 + matchingAiSubProcessorAuto.process(paramRec, 1, 2, 0, i);
  226 + }
  227 + for (int i=0; i<20000;i=i+1000) {
  228 + matchingAiSubProcessorAuto.process(paramRec, 2, 1, i, 0);
  229 + }
  230 + for (int i=0; i<20000;i=i+1000) {
  231 + matchingAiSubProcessorAuto.process(paramRec, 2, 2, i, i);
  232 + }
  233 +
  234 + //3건씩 매칭일 경우 최대 2000건 까지
  235 + for (int i=0; i<2000;i=i+50) {
  236 + matchingAiSubProcessorAuto.process(paramRec, 1, 3, 0, i);
  237 + }
  238 + for (int i=0; i<2000;i=i+50) {
  239 + matchingAiSubProcessorAuto.process(paramRec, 2, 3, 0, i);
  240 + }
  241 + for (int i=0; i<2000;i=i+50) {
  242 + matchingAiSubProcessorAuto.process(paramRec, 3, 3, 0, i);
  243 + }
  244 + for (int i=0; i<2000;i=i+50) {
  245 + matchingAiSubProcessorAuto.process(paramRec, 3, 1, i, 0);
  246 + }
  247 + for (int i=0; i<2000;i=i+50) {
  248 + matchingAiSubProcessorAuto.process(paramRec, 3, 2, i, 0);
  249 + }
  250 + for (int i=0; i<2000;i=i+50) {
  251 + matchingAiSubProcessorAuto.process(paramRec, 3, 3, i, 0);
  252 + }
  253 +
  254 + //4건씩 매칭일 경우 최대 2000건 까지
  255 + for (int i=0; i<2000;i=i+25) {
  256 + matchingAiSubProcessorAuto.process(paramRec, 1, 4, 0, i);
  257 + }
  258 + for (int i=0; i<2000;i=i+25) {
  259 + matchingAiSubProcessorAuto.process(paramRec, 4, 1, i, 0);
  260 + }
  261 +
  262 + long endTime = System.currentTimeMillis();
  263 + log.info("AI Sub [" + sThreadName + "]Job Ended: " + endTime);
  264 + log.info("AI Sub [" + sThreadName + "]Running Time : " + (endTime - startTime) + "ms");
  265 +
  266 + //작업종료에 대한 로그 업데이트
  267 + paramLog.put("exit_code", "0");
  268 + paramLog.put("exit_message", "");
  269 + matchingInnerDelingMapper.finishUserJob(paramLog);
  270 +
  271 + }
  272 +
  273 + @SuppressWarnings("rawtypes")
186 @Async("aiAsync") 274 @Async("aiAsync")
187 public void aiJobSub(String jobGroupId, Map paramRec) throws Exception { 275 public void aiJobSub(String jobGroupId, Map paramRec) throws Exception {
188 276
@@ -209,12 +297,13 @@ public class JobService { @@ -209,12 +297,13 @@ public class JobService {
209 String sCprCode = (String) paramRec.get("cpr_code"); 297 String sCprCode = (String) paramRec.get("cpr_code");
210 String sPartCpr = (String) paramRec.get("partn_cpr"); 298 String sPartCpr = (String) paramRec.get("partn_cpr");
211 String sDelngCrncy = (String) paramRec.get("delng_crncy"); 299 String sDelngCrncy = (String) paramRec.get("delng_crncy");
  300 + String sErrorRange = (String) paramRec.get("error_range");
212 301
213 String sThreadName = Thread.currentThread().getName(); 302 String sThreadName = Thread.currentThread().getName();
214 303
215 log.debug("call python"); 304 log.debug("call python");
216 new ProcessExecutor() 305 new ProcessExecutor()
217 - .command(sPythonPrg, sPythonAiTarget, sThreadName, sSysSe, sAccnutYm, sCprCode, sPartCpr, sDelngCrncy) 306 + .command(sPythonPrg, sPythonAiTarget, sThreadName, sSysSe, sAccnutYm, sCprCode, sPartCpr, sDelngCrncy, sErrorRange)
218 .redirectOutput(new LogOutputStream() { 307 .redirectOutput(new LogOutputStream() {
219 @Override 308 @Override
220 protected void processLine(String line) { 309 protected void processLine(String line) {
@@ -242,14 +331,17 @@ public class JobService { @@ -242,14 +331,17 @@ public class JobService {
242 HashMap<String, String> mt = new HashMap<String, String>(); 331 HashMap<String, String> mt = new HashMap<String, String>();
243 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss"); 332 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
244 final String date = dateFormat.format(new Date()) + ":" + uuid.toString(); 333 final String date = dateFormat.format(new Date()) + ":" + uuid.toString();
245 - JobParameters jobParameters = new JobParametersBuilder()  
246 - .addString("syncDate", date)  
247 - .addString("jobType", jobType)  
248 - .addString("sysSe", params.get("sysSe"))  
249 - .addString("accnutYm", params.get("accnutYm"))  
250 - .addString("searchCond", params.get("searchCond"))  
251 - .toJobParameters(); 334 + JobParametersBuilder jobParametersBuilder = new JobParametersBuilder();
  335 + jobParametersBuilder
  336 + .addString("syncDate", date)
  337 + .addString("jobType", jobType)
  338 + .addString("sysSe", params.get("sysSe"))
  339 + .addString("accnutYm", params.get("accnutYm"));
  340 + if (params.get("cpr_code") != null) jobParametersBuilder.addString("cpr_code", params.get("cpr_code"));
  341 + if (params.get("partn_cpr") != null) jobParametersBuilder.addString("partn_cpr", params.get("partn_cpr"));
252 342
  343 + JobParameters jobParameters = jobParametersBuilder.toJobParameters();
  344 +
253 var jobToStart = context.getBean(jobName, Job.class); 345 var jobToStart = context.getBean(jobName, Job.class);
254 JobExecution jobExe = jobLauncher.run(jobToStart, jobParameters); 346 JobExecution jobExe = jobLauncher.run(jobToStart, jobParameters);
255 347
src/main/resources/application.properties
@@ -46,7 +46,7 @@ decorator.datasource.p6spy.enable-logging=true @@ -46,7 +46,7 @@ decorator.datasource.p6spy.enable-logging=true
46 46
47 logging.level.root=info 47 logging.level.root=info
48 logging.level.com.batch=info 48 logging.level.com.batch=info
49 -logging.level.p6spy=debug 49 +logging.level.p6spy=off
50 50
51 #Thread Count 설정 51 #Thread Count 설정
52 thread.comm.count=10 52 thread.comm.count=10
src/main/resources/matchingSetup.json
@@ -35,6 +35,7 @@ @@ -35,6 +35,7 @@
35 "sn" 35 "sn"
36 ], 36 ],
37 "compareKey": "compare_ky", 37 "compareKey": "compare_ky",
  38 + "currencyField": "delng_crncy",
38 "amtField": "sum(delng_amt) as delng_amt", 39 "amtField": "sum(delng_amt) as delng_amt",
39 "compareField": [ 40 "compareField": [
40 "accnut_ym", 41 "accnut_ym",
@@ -81,6 +82,7 @@ @@ -81,6 +82,7 @@
81 "sn" 82 "sn"
82 ], 83 ],
83 "compareKey": "compare_ky", 84 "compareKey": "compare_ky",
  85 + "currencyField": "delng_crncy",
84 "amtField": "sum(delng_amt) as delng_amt", 86 "amtField": "sum(delng_amt) as delng_amt",
85 "compareField": [ 87 "compareField": [
86 "accnut_ym", 88 "accnut_ym",
@@ -131,6 +133,7 @@ @@ -131,6 +133,7 @@
131 "sn" 133 "sn"
132 ], 134 ],
133 "compareKey": "compare_ky", 135 "compareKey": "compare_ky",
  136 + "currencyField": "delng_crncy",
134 "amtField": "sum(delng_amt) as delng_amt", 137 "amtField": "sum(delng_amt) as delng_amt",
135 "compareField": [ 138 "compareField": [
136 "accnut_ym", 139 "accnut_ym",
@@ -176,6 +179,7 @@ @@ -176,6 +179,7 @@
176 "sn" 179 "sn"
177 ], 180 ],
178 "compareKey": "compare_ky", 181 "compareKey": "compare_ky",
  182 + "currencyField": "delng_crncy",
179 "amtField": "sum(delng_amt) as delng_amt", 183 "amtField": "sum(delng_amt) as delng_amt",
180 "compareField": [ 184 "compareField": [
181 "accnut_ym", 185 "accnut_ym",
@@ -227,6 +231,7 @@ @@ -227,6 +231,7 @@
227 "sn" 231 "sn"
228 ], 232 ],
229 "compareKey": "compare_ky", 233 "compareKey": "compare_ky",
  234 + "currencyField": "delng_crncy",
230 "amtField": "sum(delng_amt) as delng_amt", 235 "amtField": "sum(delng_amt) as delng_amt",
231 "compareField": [ 236 "compareField": [
232 "accnut_ym", 237 "accnut_ym",
@@ -271,6 +276,7 @@ @@ -271,6 +276,7 @@
271 "sn" 276 "sn"
272 ], 277 ],
273 "compareKey": "compare_ky", 278 "compareKey": "compare_ky",
  279 + "currencyField": "delng_crncy",
274 "amtField": "sum(delng_amt) as delng_amt", 280 "amtField": "sum(delng_amt) as delng_amt",
275 "compareField": [ 281 "compareField": [
276 "accnut_ym", 282 "accnut_ym",
@@ -318,6 +324,7 @@ @@ -318,6 +324,7 @@
318 "sn" 324 "sn"
319 ], 325 ],
320 "compareKey": "compare_ky", 326 "compareKey": "compare_ky",
  327 + "currencyField": "delng_crncy",
321 "amtField": "sum(delng_amt) as delng_amt", 328 "amtField": "sum(delng_amt) as delng_amt",
322 "compareField": [ 329 "compareField": [
323 "accnut_ym", 330 "accnut_ym",
@@ -359,6 +366,7 @@ @@ -359,6 +366,7 @@
359 "sn" 366 "sn"
360 ], 367 ],
361 "compareKey": "compare_ky", 368 "compareKey": "compare_ky",
  369 + "currencyField": "delng_crncy",
362 "amtField": "sum(delng_amt) as delng_amt", 370 "amtField": "sum(delng_amt) as delng_amt",
363 "compareField": [ 371 "compareField": [
364 "accnut_ym", 372 "accnut_ym",
@@ -405,6 +413,7 @@ @@ -405,6 +413,7 @@
405 "sn" 413 "sn"
406 ], 414 ],
407 "compareKey": "compare_ky", 415 "compareKey": "compare_ky",
  416 + "currencyField": "delng_crncy",
408 "amtField": "sum(delng_amt) as delng_amt", 417 "amtField": "sum(delng_amt) as delng_amt",
409 "compareField": [ 418 "compareField": [
410 "accnut_ym", 419 "accnut_ym",
@@ -446,6 +455,7 @@ @@ -446,6 +455,7 @@
446 "sn" 455 "sn"
447 ], 456 ],
448 "compareKey": "compare_ky", 457 "compareKey": "compare_ky",
  458 + "currencyField": "delng_crncy",
449 "amtField": "sum(delng_amt) as delng_amt", 459 "amtField": "sum(delng_amt) as delng_amt",
450 "compareField": [ 460 "compareField": [
451 "accnut_ym", 461 "accnut_ym",
@@ -497,6 +507,7 @@ @@ -497,6 +507,7 @@
497 "sn" 507 "sn"
498 ], 508 ],
499 "compareKey": "compare_ky", 509 "compareKey": "compare_ky",
  510 + "currencyField": "delng_crncy",
500 "amtField": "sum(delng_amt) as delng_amt", 511 "amtField": "sum(delng_amt) as delng_amt",
501 "compareField": [ 512 "compareField": [
502 "accnut_ym", 513 "accnut_ym",
@@ -540,6 +551,7 @@ @@ -540,6 +551,7 @@
540 "sn" 551 "sn"
541 ], 552 ],
542 "compareKey": "compare_ky", 553 "compareKey": "compare_ky",
  554 + "currencyField": "delng_crncy",
543 "amtField": "sum(delng_amt) as delng_amt", 555 "amtField": "sum(delng_amt) as delng_amt",
544 "compareField": [ 556 "compareField": [
545 "accnut_ym", 557 "accnut_ym",
@@ -590,6 +602,7 @@ @@ -590,6 +602,7 @@
590 "sn" 602 "sn"
591 ], 603 ],
592 "compareKey": "compare_ky", 604 "compareKey": "compare_ky",
  605 + "currencyField": "delng_crncy",
593 "amtField": "sum(delng_amt) as delng_amt", 606 "amtField": "sum(delng_amt) as delng_amt",
594 "compareField": [ 607 "compareField": [
595 "accnut_ym", 608 "accnut_ym",
@@ -635,6 +648,7 @@ @@ -635,6 +648,7 @@
635 "sn" 648 "sn"
636 ], 649 ],
637 "compareKey": "compare_ky", 650 "compareKey": "compare_ky",
  651 + "currencyField": "delng_crncy",
638 "amtField": "sum(delng_amt) as delng_amt", 652 "amtField": "sum(delng_amt) as delng_amt",
639 "compareField": [ 653 "compareField": [
640 "accnut_ym", 654 "accnut_ym",
@@ -688,6 +702,7 @@ @@ -688,6 +702,7 @@
688 "sn" 702 "sn"
689 ], 703 ],
690 "compareKey": "compare_ky", 704 "compareKey": "compare_ky",
  705 + "currencyField": "delng_crncy",
691 "amtField": "sum(delng_amt) as delng_amt", 706 "amtField": "sum(delng_amt) as delng_amt",
692 "compareField": [ 707 "compareField": [
693 "accnut_ym", 708 "accnut_ym",
@@ -733,6 +748,7 @@ @@ -733,6 +748,7 @@
733 "sn" 748 "sn"
734 ], 749 ],
735 "compareKey": "compare_ky", 750 "compareKey": "compare_ky",
  751 + "currencyField": "delng_crncy",
736 "amtField": "sum(delng_amt) as delng_amt", 752 "amtField": "sum(delng_amt) as delng_amt",
737 "compareField": [ 753 "compareField": [
738 "accnut_ym", 754 "accnut_ym",
@@ -780,6 +796,7 @@ @@ -780,6 +796,7 @@
780 "sn" 796 "sn"
781 ], 797 ],
782 "compareKey": "compare_ky", 798 "compareKey": "compare_ky",
  799 + "currencyField": "delng_crncy",
783 "amtField": "sum(delng_amt) as delng_amt", 800 "amtField": "sum(delng_amt) as delng_amt",
784 "compareField": [ 801 "compareField": [
785 "accnut_ym", 802 "accnut_ym",
@@ -827,6 +844,7 @@ @@ -827,6 +844,7 @@
827 "sn" 844 "sn"
828 ], 845 ],
829 "compareKey": "compare_ky", 846 "compareKey": "compare_ky",
  847 + "currencyField": "delng_crncy",
830 "amtField": "sum(delng_amt) as delng_amt", 848 "amtField": "sum(delng_amt) as delng_amt",
831 "compareField": [ 849 "compareField": [
832 "accnut_ym", 850 "accnut_ym",
@@ -872,6 +890,7 @@ @@ -872,6 +890,7 @@
872 "sn" 890 "sn"
873 ], 891 ],
874 "compareKey": "compare_ky", 892 "compareKey": "compare_ky",
  893 + "currencyField": "delng_crncy",
875 "amtField": "sum(delng_amt) as delng_amt", 894 "amtField": "sum(delng_amt) as delng_amt",
876 "compareField": [ 895 "compareField": [
877 "accnut_ym", 896 "accnut_ym",
@@ -917,6 +936,7 @@ @@ -917,6 +936,7 @@
917 "sn" 936 "sn"
918 ], 937 ],
919 "compareKey": "compare_ky", 938 "compareKey": "compare_ky",
  939 + "currencyField": "delng_crncy",
920 "amtField": "sum(delng_amt) as delng_amt", 940 "amtField": "sum(delng_amt) as delng_amt",
921 "compareField": [ 941 "compareField": [
922 "accnut_ym", 942 "accnut_ym",
@@ -964,6 +984,7 @@ @@ -964,6 +984,7 @@
964 "sn" 984 "sn"
965 ], 985 ],
966 "compareKey": "compare_ky", 986 "compareKey": "compare_ky",
  987 + "currencyField": "delng_crncy",
967 "amtField": "sum(delng_amt) as delng_amt", 988 "amtField": "sum(delng_amt) as delng_amt",
968 "compareField": [ 989 "compareField": [
969 "accnut_ym", 990 "accnut_ym",
@@ -1011,6 +1032,7 @@ @@ -1011,6 +1032,7 @@
1011 "sn" 1032 "sn"
1012 ], 1033 ],
1013 "compareKey": "compare_ky", 1034 "compareKey": "compare_ky",
  1035 + "currencyField": "delng_crncy",
1014 "amtField": "sum(delng_amt) as delng_amt", 1036 "amtField": "sum(delng_amt) as delng_amt",
1015 "compareField": [ 1037 "compareField": [
1016 "accnut_ym", 1038 "accnut_ym",
@@ -1059,6 +1081,7 @@ @@ -1059,6 +1081,7 @@
1059 "sn" 1081 "sn"
1060 ], 1082 ],
1061 "compareKey": "compare_ky", 1083 "compareKey": "compare_ky",
  1084 + "currencyField": "delng_crncy",
1062 "amtField": "sum(delng_amt) as delng_amt", 1085 "amtField": "sum(delng_amt) as delng_amt",
1063 "compareField": [ 1086 "compareField": [
1064 "accnut_ym", 1087 "accnut_ym",
@@ -1104,6 +1127,7 @@ @@ -1104,6 +1127,7 @@
1104 "sn" 1127 "sn"
1105 ], 1128 ],
1106 "compareKey": "compare_ky", 1129 "compareKey": "compare_ky",
  1130 + "currencyField": "delng_crncy",
1107 "amtField": "sum(delng_amt) as delng_amt", 1131 "amtField": "sum(delng_amt) as delng_amt",
1108 "compareField": [ 1132 "compareField": [
1109 "accnut_ym", 1133 "accnut_ym",
@@ -1151,6 +1175,7 @@ @@ -1151,6 +1175,7 @@
1151 "sn" 1175 "sn"
1152 ], 1176 ],
1153 "compareKey": "compare_ky", 1177 "compareKey": "compare_ky",
  1178 + "currencyField": "delng_crncy",
1154 "amtField": "sum(delng_amt) as delng_amt", 1179 "amtField": "sum(delng_amt) as delng_amt",
1155 "compareField": [ 1180 "compareField": [
1156 "accnut_ym", 1181 "accnut_ym",
@@ -1196,6 +1221,7 @@ @@ -1196,6 +1221,7 @@
1196 "sn" 1221 "sn"
1197 ], 1222 ],
1198 "compareKey": "compare_ky", 1223 "compareKey": "compare_ky",
  1224 + "currencyField": "delng_crncy",
1199 "amtField": "sum(delng_amt) as delng_amt", 1225 "amtField": "sum(delng_amt) as delng_amt",
1200 "compareField": [ 1226 "compareField": [
1201 "accnut_ym", 1227 "accnut_ym",
@@ -1241,6 +1267,7 @@ @@ -1241,6 +1267,7 @@
1241 "sn" 1267 "sn"
1242 ], 1268 ],
1243 "compareKey": "compare_ky", 1269 "compareKey": "compare_ky",
  1270 + "currencyField": "delng_crncy",
1244 "amtField": "sum(delng_amt) as delng_amt", 1271 "amtField": "sum(delng_amt) as delng_amt",
1245 "compareField": [ 1272 "compareField": [
1246 "accnut_ym", 1273 "accnut_ym",
@@ -1286,6 +1313,7 @@ @@ -1286,6 +1313,7 @@
1286 "sn" 1313 "sn"
1287 ], 1314 ],
1288 "compareKey": "compare_ky", 1315 "compareKey": "compare_ky",
  1316 + "currencyField": "delng_crncy",
1289 "amtField": "sum(delng_amt) as delng_amt", 1317 "amtField": "sum(delng_amt) as delng_amt",
1290 "compareField": [ 1318 "compareField": [
1291 "accnut_ym", 1319 "accnut_ym",
@@ -1333,6 +1361,7 @@ @@ -1333,6 +1361,7 @@
1333 "sn" 1361 "sn"
1334 ], 1362 ],
1335 "compareKey": "compare_ky", 1363 "compareKey": "compare_ky",
  1364 + "currencyField": "delng_crncy",
1336 "amtField": "sum(delng_amt) as delng_amt", 1365 "amtField": "sum(delng_amt) as delng_amt",
1337 "compareField": [ 1366 "compareField": [
1338 "accnut_ym", 1367 "accnut_ym",
@@ -1378,6 +1407,7 @@ @@ -1378,6 +1407,7 @@
1378 "sn" 1407 "sn"
1379 ], 1408 ],
1380 "compareKey": "compare_ky", 1409 "compareKey": "compare_ky",
  1410 + "currencyField": "delng_crncy",
1381 "amtField": "sum(delng_amt) as delng_amt", 1411 "amtField": "sum(delng_amt) as delng_amt",
1382 "compareField": [ 1412 "compareField": [
1383 "accnut_ym", 1413 "accnut_ym",
@@ -1426,6 +1456,7 @@ @@ -1426,6 +1456,7 @@
1426 "sn" 1456 "sn"
1427 ], 1457 ],
1428 "compareKey": "compare_ky", 1458 "compareKey": "compare_ky",
  1459 + "currencyField": "delng_crncy",
1429 "amtField": "sum(delng_amt) as delng_amt", 1460 "amtField": "sum(delng_amt) as delng_amt",
1430 "compareField": [ 1461 "compareField": [
1431 "accnut_ym", 1462 "accnut_ym",
@@ -1470,6 +1501,7 @@ @@ -1470,6 +1501,7 @@
1470 "sn" 1501 "sn"
1471 ], 1502 ],
1472 "compareKey": "compare_ky", 1503 "compareKey": "compare_ky",
  1504 + "currencyField": "delng_crncy",
1473 "amtField": "sum(delng_amt) as delng_amt", 1505 "amtField": "sum(delng_amt) as delng_amt",
1474 "compareField": [ 1506 "compareField": [
1475 "accnut_ym", 1507 "accnut_ym",
@@ -1514,6 +1546,7 @@ @@ -1514,6 +1546,7 @@
1514 "sn" 1546 "sn"
1515 ], 1547 ],
1516 "compareKey": "compare_ky", 1548 "compareKey": "compare_ky",
  1549 + "currencyField": "delng_crncy",
1517 "amtField": "sum(delng_amt) as delng_amt", 1550 "amtField": "sum(delng_amt) as delng_amt",
1518 "compareField": [ 1551 "compareField": [
1519 "accnut_ym", 1552 "accnut_ym",
@@ -1558,6 +1591,7 @@ @@ -1558,6 +1591,7 @@
1558 "sn" 1591 "sn"
1559 ], 1592 ],
1560 "compareKey": "compare_ky", 1593 "compareKey": "compare_ky",
  1594 + "currencyField": "delng_crncy",
1561 "amtField": "sum(delng_amt) as delng_amt", 1595 "amtField": "sum(delng_amt) as delng_amt",
1562 "compareField": [ 1596 "compareField": [
1563 "accnut_ym", 1597 "accnut_ym",
@@ -1602,6 +1636,7 @@ @@ -1602,6 +1636,7 @@
1602 "sn" 1636 "sn"
1603 ], 1637 ],
1604 "compareKey": "compare_ky", 1638 "compareKey": "compare_ky",
  1639 + "currencyField": "delng_crncy",
1605 "amtField": "sum(delng_amt) as delng_amt", 1640 "amtField": "sum(delng_amt) as delng_amt",
1606 "compareField": [ 1641 "compareField": [
1607 "accnut_ym", 1642 "accnut_ym",
@@ -1646,6 +1681,7 @@ @@ -1646,6 +1681,7 @@
1646 "sn" 1681 "sn"
1647 ], 1682 ],
1648 "compareKey": "compare_ky", 1683 "compareKey": "compare_ky",
  1684 + "currencyField": "delng_crncy",
1649 "amtField": "sum(delng_amt) as delng_amt", 1685 "amtField": "sum(delng_amt) as delng_amt",
1650 "compareField": [ 1686 "compareField": [
1651 "accnut_ym", 1687 "accnut_ym",
@@ -1693,6 +1729,7 @@ @@ -1693,6 +1729,7 @@
1693 "sn" 1729 "sn"
1694 ], 1730 ],
1695 "compareKey": "compare_ky", 1731 "compareKey": "compare_ky",
  1732 + "currencyField": "delng_crncy",
1696 "amtField": "sum(delng_amt) as delng_amt", 1733 "amtField": "sum(delng_amt) as delng_amt",
1697 "compareField": [ 1734 "compareField": [
1698 "accnut_ym", 1735 "accnut_ym",
@@ -1737,6 +1774,7 @@ @@ -1737,6 +1774,7 @@
1737 "sn" 1774 "sn"
1738 ], 1775 ],
1739 "compareKey": "compare_ky", 1776 "compareKey": "compare_ky",
  1777 + "currencyField": "delng_crncy",
1740 "amtField": "sum(delng_amt) as delng_amt", 1778 "amtField": "sum(delng_amt) as delng_amt",
1741 "compareField": [ 1779 "compareField": [
1742 "accnut_ym", 1780 "accnut_ym",
@@ -1781,6 +1819,7 @@ @@ -1781,6 +1819,7 @@
1781 "sn" 1819 "sn"
1782 ], 1820 ],
1783 "compareKey": "compare_ky", 1821 "compareKey": "compare_ky",
  1822 + "currencyField": "delng_crncy",
1784 "amtField": "sum(delng_amt) as delng_amt", 1823 "amtField": "sum(delng_amt) as delng_amt",
1785 "compareField": [ 1824 "compareField": [
1786 "accnut_ym", 1825 "accnut_ym",
@@ -1825,6 +1864,7 @@ @@ -1825,6 +1864,7 @@
1825 "sn" 1864 "sn"
1826 ], 1865 ],
1827 "compareKey": "compare_ky", 1866 "compareKey": "compare_ky",
  1867 + "currencyField": "delng_crncy",
1828 "amtField": "sum(delng_amt) as delng_amt", 1868 "amtField": "sum(delng_amt) as delng_amt",
1829 "compareField": [ 1869 "compareField": [
1830 "accnut_ym", 1870 "accnut_ym",
@@ -1869,6 +1909,7 @@ @@ -1869,6 +1909,7 @@
1869 "sn" 1909 "sn"
1870 ], 1910 ],
1871 "compareKey": "compare_ky", 1911 "compareKey": "compare_ky",
  1912 + "currencyField": "delng_crncy",
1872 "amtField": "sum(delng_amt) as delng_amt", 1913 "amtField": "sum(delng_amt) as delng_amt",
1873 "compareField": [ 1914 "compareField": [
1874 "accnut_ym", 1915 "accnut_ym",
@@ -1913,6 +1954,7 @@ @@ -1913,6 +1954,7 @@
1913 "sn" 1954 "sn"
1914 ], 1955 ],
1915 "compareKey": "compare_ky", 1956 "compareKey": "compare_ky",
  1957 + "currencyField": "delng_crncy",
1916 "amtField": "sum(delng_amt) as delng_amt", 1958 "amtField": "sum(delng_amt) as delng_amt",
1917 "compareField": [ 1959 "compareField": [
1918 "accnut_ym", 1960 "accnut_ym",
@@ -1962,6 +2004,7 @@ @@ -1962,6 +2004,7 @@
1962 "sn" 2004 "sn"
1963 ], 2005 ],
1964 "compareKey": "compare_ky", 2006 "compareKey": "compare_ky",
  2007 + "currencyField": "delng_crncy",
1965 "amtField": "sum(delng_amt) as delng_amt", 2008 "amtField": "sum(delng_amt) as delng_amt",
1966 "compareField": [ 2009 "compareField": [
1967 "accnut_ym", 2010 "accnut_ym",
@@ -2007,6 +2050,7 @@ @@ -2007,6 +2050,7 @@
2007 "sn" 2050 "sn"
2008 ], 2051 ],
2009 "compareKey": "compare_ky", 2052 "compareKey": "compare_ky",
  2053 + "currencyField": "delng_crncy",
2010 "amtField": "sum(delng_amt) as delng_amt", 2054 "amtField": "sum(delng_amt) as delng_amt",
2011 "compareField": [ 2055 "compareField": [
2012 "accnut_ym", 2056 "accnut_ym",
@@ -2052,6 +2096,7 @@ @@ -2052,6 +2096,7 @@
2052 "sn" 2096 "sn"
2053 ], 2097 ],
2054 "compareKey": "compare_ky", 2098 "compareKey": "compare_ky",
  2099 + "currencyField": "delng_crncy",
2055 "amtField": "sum(delng_amt) as delng_amt", 2100 "amtField": "sum(delng_amt) as delng_amt",
2056 "compareField": [ 2101 "compareField": [
2057 "accnut_ym", 2102 "accnut_ym",
@@ -2097,6 +2142,7 @@ @@ -2097,6 +2142,7 @@
2097 "sn" 2142 "sn"
2098 ], 2143 ],
2099 "compareKey": "compare_ky", 2144 "compareKey": "compare_ky",
  2145 + "currencyField": "delng_crncy",
2100 "amtField": "sum(delng_amt) as delng_amt", 2146 "amtField": "sum(delng_amt) as delng_amt",
2101 "compareField": [ 2147 "compareField": [
2102 "accnut_ym", 2148 "accnut_ym",
@@ -2143,6 +2189,7 @@ @@ -2143,6 +2189,7 @@
2143 "sn" 2189 "sn"
2144 ], 2190 ],
2145 "compareKey": "compare_ky", 2191 "compareKey": "compare_ky",
  2192 + "currencyField": "delng_crncy",
2146 "amtField": "sum(delng_amt) as delng_amt", 2193 "amtField": "sum(delng_amt) as delng_amt",
2147 "compareField": [ 2194 "compareField": [
2148 "accnut_ym", 2195 "accnut_ym",
@@ -2188,6 +2235,7 @@ @@ -2188,6 +2235,7 @@
2188 "sn" 2235 "sn"
2189 ], 2236 ],
2190 "compareKey": "compare_ky", 2237 "compareKey": "compare_ky",
  2238 + "currencyField": "delng_crncy",
2191 "amtField": "sum(delng_amt) as delng_amt", 2239 "amtField": "sum(delng_amt) as delng_amt",
2192 "compareField": [ 2240 "compareField": [
2193 "accnut_ym", 2241 "accnut_ym",
@@ -2233,6 +2281,7 @@ @@ -2233,6 +2281,7 @@
2233 "sn" 2281 "sn"
2234 ], 2282 ],
2235 "compareKey": "compare_ky", 2283 "compareKey": "compare_ky",
  2284 + "currencyField": "delng_crncy",
2236 "amtField": "sum(delng_amt) as delng_amt", 2285 "amtField": "sum(delng_amt) as delng_amt",
2237 "compareField": [ 2286 "compareField": [
2238 "accnut_ym", 2287 "accnut_ym",
@@ -2278,6 +2327,7 @@ @@ -2278,6 +2327,7 @@
2278 "sn" 2327 "sn"
2279 ], 2328 ],
2280 "compareKey": "compare_ky", 2329 "compareKey": "compare_ky",
  2330 + "currencyField": "delng_crncy",
2281 "amtField": "sum(delng_amt) as delng_amt", 2331 "amtField": "sum(delng_amt) as delng_amt",
2282 "compareField": [ 2332 "compareField": [
2283 "accnut_ym", 2333 "accnut_ym",
@@ -2336,6 +2386,7 @@ @@ -2336,6 +2386,7 @@
2336 "sn" 2386 "sn"
2337 ], 2387 ],
2338 "compareKey": "compare_ky", 2388 "compareKey": "compare_ky",
  2389 + "currencyField": "delng_crncy",
2339 "amtField": "sum(delng_amt) as delng_amt", 2390 "amtField": "sum(delng_amt) as delng_amt",
2340 "compareField": [ 2391 "compareField": [
2341 "accnut_ym", 2392 "accnut_ym",
@@ -2381,6 +2432,7 @@ @@ -2381,6 +2432,7 @@
2381 "sn" 2432 "sn"
2382 ], 2433 ],
2383 "compareKey": "compare_ky", 2434 "compareKey": "compare_ky",
  2435 + "currencyField": "delng_crncy",
2384 "amtField": "sum(delng_amt) as delng_amt", 2436 "amtField": "sum(delng_amt) as delng_amt",
2385 "compareField": [ 2437 "compareField": [
2386 "accnut_ym", 2438 "accnut_ym",
@@ -2426,6 +2478,7 @@ @@ -2426,6 +2478,7 @@
2426 "sn" 2478 "sn"
2427 ], 2479 ],
2428 "compareKey": "compare_ky", 2480 "compareKey": "compare_ky",
  2481 + "currencyField": "delng_crncy",
2429 "amtField": "sum(delng_amt) as delng_amt", 2482 "amtField": "sum(delng_amt) as delng_amt",
2430 "compareField": [ 2483 "compareField": [
2431 "accnut_ym", 2484 "accnut_ym",
@@ -2471,6 +2524,7 @@ @@ -2471,6 +2524,7 @@
2471 "sn" 2524 "sn"
2472 ], 2525 ],
2473 "compareKey": "compare_ky", 2526 "compareKey": "compare_ky",
  2527 + "currencyField": "delng_crncy",
2474 "amtField": "sum(delng_amt) as delng_amt", 2528 "amtField": "sum(delng_amt) as delng_amt",
2475 "compareField": [ 2529 "compareField": [
2476 "accnut_ym", 2530 "accnut_ym",
@@ -2516,6 +2570,7 @@ @@ -2516,6 +2570,7 @@
2516 "sn" 2570 "sn"
2517 ], 2571 ],
2518 "compareKey": "compare_ky", 2572 "compareKey": "compare_ky",
  2573 + "currencyField": "delng_crncy",
2519 "amtField": "sum(delng_amt) as delng_amt", 2574 "amtField": "sum(delng_amt) as delng_amt",
2520 "compareField": [ 2575 "compareField": [
2521 "accnut_ym", 2576 "accnut_ym",
@@ -2561,6 +2616,7 @@ @@ -2561,6 +2616,7 @@
2561 "sn" 2616 "sn"
2562 ], 2617 ],
2563 "compareKey": "compare_ky", 2618 "compareKey": "compare_ky",
  2619 + "currencyField": "delng_crncy",
2564 "amtField": "sum(delng_amt) as delng_amt", 2620 "amtField": "sum(delng_amt) as delng_amt",
2565 "compareField": [ 2621 "compareField": [
2566 "accnut_ym", 2622 "accnut_ym",
@@ -2606,6 +2662,7 @@ @@ -2606,6 +2662,7 @@
2606 "sn" 2662 "sn"
2607 ], 2663 ],
2608 "compareKey": "compare_ky", 2664 "compareKey": "compare_ky",
  2665 + "currencyField": "delng_crncy",
2609 "amtField": "sum(delng_amt) as delng_amt", 2666 "amtField": "sum(delng_amt) as delng_amt",
2610 "compareField": [ 2667 "compareField": [
2611 "accnut_ym", 2668 "accnut_ym",
@@ -2651,6 +2708,7 @@ @@ -2651,6 +2708,7 @@
2651 "sn" 2708 "sn"
2652 ], 2709 ],
2653 "compareKey": "compare_ky", 2710 "compareKey": "compare_ky",
  2711 + "currencyField": "delng_crncy",
2654 "amtField": "sum(delng_amt) as delng_amt", 2712 "amtField": "sum(delng_amt) as delng_amt",
2655 "compareField": [ 2713 "compareField": [
2656 "accnut_ym", 2714 "accnut_ym",
@@ -2700,6 +2758,7 @@ @@ -2700,6 +2758,7 @@
2700 "sn" 2758 "sn"
2701 ], 2759 ],
2702 "compareKey": "compare_ky", 2760 "compareKey": "compare_ky",
  2761 + "currencyField": "delng_crncy",
2703 "amtField": "sum(delng_amt) as delng_amt", 2762 "amtField": "sum(delng_amt) as delng_amt",
2704 "compareField": [ 2763 "compareField": [
2705 "accnut_ym", 2764 "accnut_ym",
@@ -2745,6 +2804,7 @@ @@ -2745,6 +2804,7 @@
2745 "sn" 2804 "sn"
2746 ], 2805 ],
2747 "compareKey": "compare_ky", 2806 "compareKey": "compare_ky",
  2807 + "currencyField": "delng_crncy",
2748 "amtField": "sum(delng_amt) as delng_amt", 2808 "amtField": "sum(delng_amt) as delng_amt",
2749 "compareField": [ 2809 "compareField": [
2750 "accnut_ym", 2810 "accnut_ym",
@@ -2790,6 +2850,7 @@ @@ -2790,6 +2850,7 @@
2790 "sn" 2850 "sn"
2791 ], 2851 ],
2792 "compareKey": "compare_ky", 2852 "compareKey": "compare_ky",
  2853 + "currencyField": "delng_crncy",
2793 "amtField": "sum(delng_amt) as delng_amt", 2854 "amtField": "sum(delng_amt) as delng_amt",
2794 "compareField": [ 2855 "compareField": [
2795 "accnut_ym", 2856 "accnut_ym",
@@ -2836,6 +2897,7 @@ @@ -2836,6 +2897,7 @@
2836 "sn" 2897 "sn"
2837 ], 2898 ],
2838 "compareKey": "compare_ky", 2899 "compareKey": "compare_ky",
  2900 + "currencyField": "delng_crncy",
2839 "amtField": "sum(delng_amt) as delng_amt", 2901 "amtField": "sum(delng_amt) as delng_amt",
2840 "compareField": [ 2902 "compareField": [
2841 "accnut_ym", 2903 "accnut_ym",
@@ -2879,6 +2941,7 @@ @@ -2879,6 +2941,7 @@
2879 "sn" 2941 "sn"
2880 ], 2942 ],
2881 "compareKey": "compare_ky", 2943 "compareKey": "compare_ky",
  2944 + "currencyField": "delng_crncy",
2882 "amtField": "sum(delng_amt) as delng_amt", 2945 "amtField": "sum(delng_amt) as delng_amt",
2883 "compareField": [ 2946 "compareField": [
2884 "accnut_ym", 2947 "accnut_ym",
@@ -2922,6 +2985,7 @@ @@ -2922,6 +2985,7 @@
2922 "sn" 2985 "sn"
2923 ], 2986 ],
2924 "compareKey": "compare_ky", 2987 "compareKey": "compare_ky",
  2988 + "currencyField": "delng_crncy",
2925 "amtField": "sum(delng_amt) as delng_amt", 2989 "amtField": "sum(delng_amt) as delng_amt",
2926 "compareField": [ 2990 "compareField": [
2927 "accnut_ym", 2991 "accnut_ym",
@@ -2967,6 +3031,7 @@ @@ -2967,6 +3031,7 @@
2967 "sn" 3031 "sn"
2968 ], 3032 ],
2969 "compareKey": "compare_ky", 3033 "compareKey": "compare_ky",
  3034 + "currencyField": "delng_crncy",
2970 "amtField": "sum(delng_amt) as delng_amt", 3035 "amtField": "sum(delng_amt) as delng_amt",
2971 "compareField": [ 3036 "compareField": [
2972 "accnut_ym", 3037 "accnut_ym",
@@ -3010,6 +3075,7 @@ @@ -3010,6 +3075,7 @@
3010 "sn" 3075 "sn"
3011 ], 3076 ],
3012 "compareKey": "compare_ky", 3077 "compareKey": "compare_ky",
  3078 + "currencyField": "delng_crncy",
3013 "amtField": "sum(delng_amt) as delng_amt", 3079 "amtField": "sum(delng_amt) as delng_amt",
3014 "compareField": [ 3080 "compareField": [
3015 "accnut_ym", 3081 "accnut_ym",
@@ -3053,6 +3119,7 @@ @@ -3053,6 +3119,7 @@
3053 "sn" 3119 "sn"
3054 ], 3120 ],
3055 "compareKey": "compare_ky", 3121 "compareKey": "compare_ky",
  3122 + "currencyField": "delng_crncy",
3056 "amtField": "sum(delng_amt) as delng_amt", 3123 "amtField": "sum(delng_amt) as delng_amt",
3057 "compareField": [ 3124 "compareField": [
3058 "accnut_ym", 3125 "accnut_ym",
@@ -3093,6 +3160,7 @@ @@ -3093,6 +3160,7 @@
3093 "sn" 3160 "sn"
3094 ], 3161 ],
3095 "compareKey": "compare_ky", 3162 "compareKey": "compare_ky",
  3163 + "currencyField": "delng_crncy",
3096 "amtField": "sum(delng_amt) as delng_amt", 3164 "amtField": "sum(delng_amt) as delng_amt",
3097 "compareField": [ 3165 "compareField": [
3098 "accnut_ym", 3166 "accnut_ym",
@@ -3134,6 +3202,7 @@ @@ -3134,6 +3202,7 @@
3134 "sn" 3202 "sn"
3135 ], 3203 ],
3136 "compareKey": "compare_ky", 3204 "compareKey": "compare_ky",
  3205 + "currencyField": "delng_crncy",
3137 "amtField": "sum(delng_amt) as delng_amt", 3206 "amtField": "sum(delng_amt) as delng_amt",
3138 "compareField": [ 3207 "compareField": [
3139 "accnut_ym", 3208 "accnut_ym",
@@ -3183,6 +3252,7 @@ @@ -3183,6 +3252,7 @@
3183 "sn" 3252 "sn"
3184 ], 3253 ],
3185 "compareKey": "compare_ky", 3254 "compareKey": "compare_ky",
  3255 + "currencyField": "delng_crncy",
3186 "amtField": "sum(delng_amt) as delng_amt", 3256 "amtField": "sum(delng_amt) as delng_amt",
3187 "compareField": [ 3257 "compareField": [
3188 "accnut_ym", 3258 "accnut_ym",
@@ -3228,6 +3298,7 @@ @@ -3228,6 +3298,7 @@
3228 "sn" 3298 "sn"
3229 ], 3299 ],
3230 "compareKey": "compare_ky", 3300 "compareKey": "compare_ky",
  3301 + "currencyField": "delng_crncy",
3231 "amtField": "sum(delng_amt) as delng_amt", 3302 "amtField": "sum(delng_amt) as delng_amt",
3232 "compareField": [ 3303 "compareField": [
3233 "accnut_ym", 3304 "accnut_ym",
@@ -3273,6 +3344,7 @@ @@ -3273,6 +3344,7 @@
3273 "sn" 3344 "sn"
3274 ], 3345 ],
3275 "compareKey": "compare_ky", 3346 "compareKey": "compare_ky",
  3347 + "currencyField": "delng_crncy",
3276 "amtField": "sum(delng_amt) as delng_amt", 3348 "amtField": "sum(delng_amt) as delng_amt",
3277 "compareField": [ 3349 "compareField": [
3278 "accnut_ym", 3350 "accnut_ym",
@@ -3321,6 +3393,7 @@ @@ -3321,6 +3393,7 @@
3321 "sn" 3393 "sn"
3322 ], 3394 ],
3323 "compareKey": "compare_ky", 3395 "compareKey": "compare_ky",
  3396 + "currencyField": "delng_crncy",
3324 "amtField": "sum(delng_amt) as delng_amt", 3397 "amtField": "sum(delng_amt) as delng_amt",
3325 "compareField": [ 3398 "compareField": [
3326 "accnut_ym", 3399 "accnut_ym",
@@ -3366,6 +3439,7 @@ @@ -3366,6 +3439,7 @@
3366 "sn" 3439 "sn"
3367 ], 3440 ],
3368 "compareKey": "compare_ky", 3441 "compareKey": "compare_ky",
  3442 + "currencyField": "delng_crncy",
3369 "amtField": "sum(delng_amt) as delng_amt", 3443 "amtField": "sum(delng_amt) as delng_amt",
3370 "compareField": [ 3444 "compareField": [
3371 "accnut_ym", 3445 "accnut_ym",
@@ -3411,6 +3485,7 @@ @@ -3411,6 +3485,7 @@
3411 "sn" 3485 "sn"
3412 ], 3486 ],
3413 "compareKey": "compare_ky", 3487 "compareKey": "compare_ky",
  3488 + "currencyField": "delng_crncy",
3414 "amtField": "sum(delng_amt) as delng_amt", 3489 "amtField": "sum(delng_amt) as delng_amt",
3415 "compareField": [ 3490 "compareField": [
3416 "accnut_ym", 3491 "accnut_ym",
@@ -3459,6 +3534,7 @@ @@ -3459,6 +3534,7 @@
3459 "sn" 3534 "sn"
3460 ], 3535 ],
3461 "compareKey": "compare_ky", 3536 "compareKey": "compare_ky",
  3537 + "currencyField": "delng_crncy",
3462 "amtField": "sum(delng_amt) as delng_amt", 3538 "amtField": "sum(delng_amt) as delng_amt",
3463 "compareField": [ 3539 "compareField": [
3464 "accnut_ym", 3540 "accnut_ym",
@@ -3504,6 +3580,7 @@ @@ -3504,6 +3580,7 @@
3504 "sn" 3580 "sn"
3505 ], 3581 ],
3506 "compareKey": "compare_ky", 3582 "compareKey": "compare_ky",
  3583 + "currencyField": "delng_crncy",
3507 "amtField": "sum(delng_amt) as delng_amt", 3584 "amtField": "sum(delng_amt) as delng_amt",
3508 "compareField": [ 3585 "compareField": [
3509 "accnut_ym", 3586 "accnut_ym",
@@ -3549,6 +3626,7 @@ @@ -3549,6 +3626,7 @@
3549 "sn" 3626 "sn"
3550 ], 3627 ],
3551 "compareKey": "compare_ky", 3628 "compareKey": "compare_ky",
  3629 + "currencyField": "delng_crncy",
3552 "amtField": "sum(delng_amt) as delng_amt", 3630 "amtField": "sum(delng_amt) as delng_amt",
3553 "compareField": [ 3631 "compareField": [
3554 "accnut_ym", 3632 "accnut_ym",
@@ -3599,6 +3677,7 @@ @@ -3599,6 +3677,7 @@
3599 "sn" 3677 "sn"
3600 ], 3678 ],
3601 "compareKey": "compare_ky", 3679 "compareKey": "compare_ky",
  3680 + "currencyField": "delng_crncy",
3602 "amtField": "sum(delng_amt) as delng_amt", 3681 "amtField": "sum(delng_amt) as delng_amt",
3603 "compareField": [ 3682 "compareField": [
3604 "accnut_ym", 3683 "accnut_ym",
@@ -3644,6 +3723,7 @@ @@ -3644,6 +3723,7 @@
3644 "sn" 3723 "sn"
3645 ], 3724 ],
3646 "compareKey": "compare_ky", 3725 "compareKey": "compare_ky",
  3726 + "currencyField": "delng_crncy",
3647 "amtField": "sum(delng_amt) as delng_amt", 3727 "amtField": "sum(delng_amt) as delng_amt",
3648 "compareField": [ 3728 "compareField": [
3649 "accnut_ym", 3729 "accnut_ym",
@@ -3687,6 +3767,7 @@ @@ -3687,6 +3767,7 @@
3687 "sn" 3767 "sn"
3688 ], 3768 ],
3689 "compareKey": "compare_ky", 3769 "compareKey": "compare_ky",
  3770 + "currencyField": "delng_crncy",
3690 "amtField": "sum(delng_amt) as delng_amt", 3771 "amtField": "sum(delng_amt) as delng_amt",
3691 "compareField": [ 3772 "compareField": [
3692 "accnut_ym", 3773 "accnut_ym",
@@ -3732,6 +3813,7 @@ @@ -3732,6 +3813,7 @@
3732 "sn" 3813 "sn"
3733 ], 3814 ],
3734 "compareKey": "compare_ky", 3815 "compareKey": "compare_ky",
  3816 + "currencyField": "delng_crncy",
3735 "amtField": "sum(delng_amt) as delng_amt", 3817 "amtField": "sum(delng_amt) as delng_amt",
3736 "compareField": [ 3818 "compareField": [
3737 "accnut_ym", 3819 "accnut_ym",
@@ -3777,6 +3859,7 @@ @@ -3777,6 +3859,7 @@
3777 "sn" 3859 "sn"
3778 ], 3860 ],
3779 "compareKey": "compare_ky", 3861 "compareKey": "compare_ky",
  3862 + "currencyField": "delng_crncy",
3780 "amtField": "sum(delng_amt) as delng_amt", 3863 "amtField": "sum(delng_amt) as delng_amt",
3781 "compareField": [ 3864 "compareField": [
3782 "accnut_ym", 3865 "accnut_ym",
@@ -3820,6 +3903,7 @@ @@ -3820,6 +3903,7 @@
3820 "sn" 3903 "sn"
3821 ], 3904 ],
3822 "compareKey": "compare_ky", 3905 "compareKey": "compare_ky",
  3906 + "currencyField": "delng_crncy",
3823 "amtField": "sum(delng_amt) as delng_amt", 3907 "amtField": "sum(delng_amt) as delng_amt",
3824 "compareField": [ 3908 "compareField": [
3825 "accnut_ym", 3909 "accnut_ym",
src/main/resources/mybatis/primaryMapper/MatchingInnerDelingMapper.xml
@@ -24,6 +24,12 @@ @@ -24,6 +24,12 @@
24 and accnut_ym = #{accnutYm} 24 and accnut_ym = #{accnutYm}
25 and mtch_ty is null 25 and mtch_ty is null
26 and dta_ty in ('11','21','31','33','35','37','41') 26 and dta_ty in ('11','21','31','33','35','37','41')
  27 + <if test='cpr_code != null and !cpr_code.equals("")'>
  28 + and cpr_code = #{cpr_code}
  29 + </if>
  30 + <if test='partn_cpr != null and !partn_cpr.equals("")'>
  31 + and partn_cpr = #{partn_cpr}
  32 + </if>
27 GROUP BY 33 GROUP BY
28 sys_se 34 sys_se
29 , accnut_ym 35 , accnut_ym
@@ -43,6 +49,12 @@ @@ -43,6 +49,12 @@
43 and accnut_ym = #{accnutYm} 49 and accnut_ym = #{accnutYm}
44 and mtch_ty is null 50 and mtch_ty is null
45 and dta_ty in ('12','22','32','34','36','38','42') 51 and dta_ty in ('12','22','32','34','36','38','42')
  52 + <if test='cpr_code != null and !cpr_code.equals("")'>
  53 + and partn_cpr = #{partn_cpr}
  54 + </if>
  55 + <if test='partn_cpr != null and !partn_cpr.equals("")'>
  56 + and cpr_code = #{cpr_code}
  57 + </if>
46 GROUP BY 58 GROUP BY
47 sys_se 59 sys_se
48 , accnut_ym 60 , accnut_ym
@@ -77,6 +89,7 @@ @@ -77,6 +89,7 @@
77 SELECT 89 SELECT
78 accnut_ym 90 accnut_ym
79 , compare_ky 91 , compare_ky
  92 + , ${currencyField}
80 , ${amtField} 93 , ${amtField}
81 FROM 94 FROM
82 public.batch_tbcr_inner_delng 95 public.batch_tbcr_inner_delng
@@ -91,7 +104,8 @@ @@ -91,7 +104,8 @@
91 </foreach> 104 </foreach>
92 group by 105 group by
93 accnut_ym, 106 accnut_ym,
94 - compare_ky 107 + compare_ky,
  108 + ${currencyField}
95 </select> 109 </select>
96 110
97 <!-- 매칭결과 업데이트 --> 111 <!-- 매칭결과 업데이트 -->
@@ -525,6 +539,12 @@ @@ -525,6 +539,12 @@
525 and accnut_ym = #{accnutYm} 539 and accnut_ym = #{accnutYm}
526 and mtch_ty is null 540 and mtch_ty is null
527 and dta_ty in ('11','21','31','33','35','37','41') 541 and dta_ty in ('11','21','31','33','35','37','41')
  542 + <if test='cpr_code != null and !cpr_code.equals("")'>
  543 + and cpr_code = #{cpr_code}
  544 + </if>
  545 + <if test='partn_cpr != null and !partn_cpr.equals("")'>
  546 + and partn_cpr = #{partn_cpr}
  547 + </if>
528 GROUP BY 548 GROUP BY
529 sys_se 549 sys_se
530 , accnut_ym 550 , accnut_ym
@@ -546,6 +566,12 @@ @@ -546,6 +566,12 @@
546 and accnut_ym = #{accnutYm} 566 and accnut_ym = #{accnutYm}
547 and mtch_ty is null 567 and mtch_ty is null
548 and dta_ty in ('12','22','32','34','36','38','42') 568 and dta_ty in ('12','22','32','34','36','38','42')
  569 + <if test='cpr_code != null and !cpr_code.equals("")'>
  570 + and partn_cpr = #{partn_cpr}
  571 + </if>
  572 + <if test='partn_cpr != null and !partn_cpr.equals("")'>
  573 + and cpr_code = #{cpr_code}
  574 + </if>
549 GROUP BY 575 GROUP BY
550 sys_se 576 sys_se
551 , accnut_ym 577 , accnut_ym
@@ -624,4 +650,142 @@ @@ -624,4 +650,142 @@
624 and accnut_ym = #{accnutYm} 650 and accnut_ym = #{accnutYm}
625 </select> 651 </select>
626 652
  653 + <!-- 작업리스트 -->
  654 + <select id="getAiSubReadData" parameterType="map" resultType="map">
  655 + SELECT
  656 + sys_se
  657 + , accnut_ym
  658 + , cpr_code
  659 + , partn_cpr
  660 + , mtch_ty
  661 + , mtch_ky
  662 + FROM
  663 + (
  664 + SELECT
  665 + sys_se
  666 + , accnut_ym
  667 + , cpr_code
  668 + , partn_cpr
  669 + , mtch_ty
  670 + , mtch_ky
  671 + , case when count(*) > 0 then 1 else 0 end as cnt
  672 + FROM
  673 + public.batch_tbcr_inner_delng
  674 + WHERE
  675 + sys_se = #{sysSe}
  676 + and accnut_ym = #{accnutYm}
  677 + and mtch_ty = #{mtch_ty}
  678 + and dta_ty in ('11','21','31','33','35','37','41')
  679 + <if test='cpr_code != null and !cpr_code.equals("")'>
  680 + and cpr_code = #{cpr_code}
  681 + </if>
  682 + <if test='partn_cpr != null and !partn_cpr.equals("")'>
  683 + and partn_cpr = #{partn_cpr}
  684 + </if>
  685 + GROUP BY
  686 + sys_se
  687 + , accnut_ym
  688 + , cpr_code
  689 + , partn_cpr
  690 + , mtch_ty
  691 + , mtch_ky
  692 + union all
  693 + SELECT
  694 + sys_se
  695 + , accnut_ym
  696 + , partn_cpr as cpr_code
  697 + , cpr_code as partn_cpr
  698 + , mtch_ty
  699 + , mtch_ky
  700 + , case when count(*) > 0 then 1 else 0 end as cnt
  701 + FROM
  702 + public.batch_tbcr_inner_delng
  703 + WHERE
  704 + sys_se = #{sysSe}
  705 + and accnut_ym = #{accnutYm}
  706 + and mtch_ty = #{mtch_ty}
  707 + and dta_ty in ('12','22','32','34','36','38','42')
  708 + <if test='cpr_code != null and !cpr_code.equals("")'>
  709 + and partn_cpr = #{partn_cpr}
  710 + </if>
  711 + <if test='partn_cpr != null and !partn_cpr.equals("")'>
  712 + and cpr_code = #{cpr_code}
  713 + </if>
  714 + GROUP BY
  715 + sys_se
  716 + , accnut_ym
  717 + , cpr_code
  718 + , partn_cpr
  719 + , mtch_ty
  720 + , mtch_ky
  721 + ) m
  722 + GROUP BY
  723 + sys_se
  724 + , accnut_ym
  725 + , cpr_code
  726 + , partn_cpr
  727 + , mtch_ty
  728 + , mtch_ky
  729 + HAVING sum(cnt) > 1
  730 + </select>
  731 +
  732 +
  733 + <!-- 매칭작업할 데이타 가져오기 -->
  734 + <select id="getAiSubDataOne" parameterType="map" resultType="map">
  735 + SELECT
  736 + sys_se
  737 + , accnut_ym
  738 + , sn
  739 + , '' as compare_ky
  740 + , delng_de
  741 + , delng_amt
  742 + FROM
  743 + public.batch_tbcr_inner_delng
  744 + WHERE
  745 + sys_se = #{sysSe}
  746 + and accnut_ym = #{accnutYm}
  747 + and cpr_code = #{cprCode}
  748 + and partn_cpr = #{partnCpr}
  749 + and mtch_ty = #{mtchTy}
  750 + and mtch_ky = #{mtchKy}
  751 + <if test='conds eq "T".toString()'>
  752 + and dta_ty in ('11','21','41')
  753 + </if>
  754 + <if test='conds eq "B".toString()'>
  755 + and dta_ty in ('31','33','35','37')
  756 + </if>
  757 + and delng_amt != 0
  758 + ORDER BY
  759 + delng_de
  760 + </select>
  761 +
  762 + <!-- 매칭작업할 데이타 가져오기 -->
  763 + <select id="getAiSubDataTwo" parameterType="map" resultType="map">
  764 + SELECT
  765 + sys_se
  766 + , accnut_ym
  767 + , sn
  768 + , '' as compare_ky
  769 + , delng_de
  770 + , delng_amt
  771 + FROM
  772 + public.batch_tbcr_inner_delng
  773 + WHERE
  774 + sys_se = #{sysSe}
  775 + and accnut_ym = #{accnutYm}
  776 + and cpr_code = #{cprCode}
  777 + and partn_cpr = #{partnCpr}
  778 + and mtch_ty = #{mtchTy}
  779 + and mtch_ky = #{mtchKy}
  780 + <if test='conds eq "T".toString()'>
  781 + and dta_ty in ('12','22','42')
  782 + </if>
  783 + <if test='conds eq "B".toString()'>
  784 + and dta_ty in ('32','34','36','38')
  785 + </if>
  786 + and delng_amt != 0
  787 + ORDER BY
  788 + delng_de
  789 + </select>
  790 +
627 </mapper> 791 </mapper>
628 \ No newline at end of file 792 \ No newline at end of file
@@ -20,7 +20,8 @@ http://localhost:8080/api/job/matching @@ -20,7 +20,8 @@ http://localhost:8080/api/job/matching
20 "jobType": "ALL", 20 "jobType": "ALL",
21 "sysSe": "AI_ALL", 21 "sysSe": "AI_ALL",
22 "accnutYm": "202311", 22 "accnutYm": "202311",
23 - "searchCond": "mtch_ty is null" 23 + "cpr_code": "O01100",
  24 + "partn_cpr": "Z01100"
24 } 25 }
25 26
26 .\curl\bin\curl -d '{"jobType": "ALL", "sysSe":"AI_ALL", "accnutYm":"202311", "searchCond":"mtch_ty is null"}' ` 27 .\curl\bin\curl -d '{"jobType": "ALL", "sysSe":"AI_ALL", "accnutYm":"202311", "searchCond":"mtch_ty is null"}' `
@@ -32,7 +33,9 @@ http://localhost:8080/api/job/matching @@ -32,7 +33,9 @@ http://localhost:8080/api/job/matching
32 http://localhost:8080/api/job/extramatching 33 http://localhost:8080/api/job/extramatching
33 { 34 {
34 "sysSe": "LS_ALL", 35 "sysSe": "LS_ALL",
35 - "accnutYm": "202311" 36 + "accnutYm": "202311",
  37 + "cpr_code": "O01100",
  38 + "partn_cpr": "Z01100"
36 } 39 }
37 40
38 .\curl\bin\curl -d '{"sysSe":"AI_ALL", "accnutYm":"202311"}' ` 41 .\curl\bin\curl -d '{"sysSe":"AI_ALL", "accnutYm":"202311"}' `
@@ -45,13 +48,29 @@ http://localhost:8080/api/job/aimatching @@ -45,13 +48,29 @@ http://localhost:8080/api/job/aimatching
45 { 48 {
46 "sysSe": "LS_ALL", 49 "sysSe": "LS_ALL",
47 "accnutYm": "202310", 50 "accnutYm": "202310",
  51 + "cpr_code": "O01100",
  52 + "partn_cpr": "Z01100",
  53 + "error_range": "0"
48 } 54 }
49 55
  56 +파이썬에 파라미터 넘기는 내용
  57 +{PythonPrg, PythonAiTarget, ThreadName, SysSe, AccnutYm, CprCode, PartCpr, DelngCrncy, ErrorRange}
50 58
51 .\curl\bin\curl -d '{"sysSe":"AI_ALL", "accnutYm":"202311"}' ` 59 .\curl\bin\curl -d '{"sysSe":"AI_ALL", "accnutYm":"202311"}' `
52 -H "Content-Type: application/json" ` 60 -H "Content-Type: application/json" `
53 -X POST http://localhost:8080/api/job/aimatching 61 -X POST http://localhost:8080/api/job/aimatching
54 62
  63 +#AI SUB 매칭 (조합)
  64 +http://localhost:8080/api/job/aisubmatching
  65 +{
  66 + "sysSe": "LS_ALL",
  67 + "accnutYm": "202311",
  68 + "mtch_ty": "AI_SLT",
  69 + "cpr_code": "O01100",
  70 + "partn_cpr": "Z01100",
  71 + "error_range": "0"
  72 +}
  73 +
55 74
56 #매칭결과 리턴시 75 #매칭결과 리턴시
57 http://localhost:8080/api/job/return 76 http://localhost:8080/api/job/return