Commit d3e8a8a9bdf0363833e9afd4c5b331ef9592cfc9

Authored by 함상기
1 parent 66b5660a

2024-04-01

... ... @@ -99,14 +99,6 @@
99 99 <version>2.3.0</version>
100 100 </dependency>
101 101  
102   -
103   - <dependency>
104   - <groupId>javax.annotation</groupId>
105   - <artifactId>javax.annotation-api</artifactId>
106   - <version>1.3.2</version>
107   - </dependency>
108   -
109   -
110 102 </dependencies>
111 103  
112 104 <build>
... ...
src/main/java/com/batch/config/BatchMatchingConfig.java
... ... @@ -20,10 +20,13 @@ import org.springframework.batch.item.support.ListItemReader;
20 20 import org.springframework.beans.factory.annotation.Autowired;
21 21 import org.springframework.context.annotation.Bean;
22 22 import org.springframework.context.annotation.Configuration;
  23 +import org.springframework.core.task.SimpleAsyncTaskExecutor;
23 24 import org.springframework.transaction.PlatformTransactionManager;
24 25  
25 26 import com.batch.mapper.primary.MatchingInnerDelingMapper;
26 27  
  28 +import org.springframework.batch.integration.async.AsyncItemProcessor;
  29 +
27 30 import lombok.extern.slf4j.Slf4j;
28 31  
29 32 @Configuration
... ...
src/main/java/com/batch/config/MatchingExtraProcessorAuto.java
... ... @@ -9,7 +9,6 @@ import java.util.List;
9 9 import java.util.Map;
10 10 import java.util.UUID;
11 11  
12   -
13 12 import com.batch.mapper.primary.MatchingInnerDelingMapper;
14 13 import com.batch.util.StatisticsUtil;
15 14  
... ... @@ -22,227 +21,218 @@ public class MatchingExtraProcessorAuto {
22 21  
23 22 private final MatchingInnerDelingMapper matchingInnerDelingMapper;
24 23  
25   - @SuppressWarnings({ "unchecked", "rawtypes" })
26   - public long process(Map paramRec, int iCmbnOwnCnt, int iCmbnTranCnt, int iStartOwn, int iStartTran, long mtchNumber) throws Exception {
27   -
28   - // Job Create Log
29   - UUID uuid = UUID.randomUUID();
30   - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
31   - String sDate = dateFormat.format(new Date()) + ":" + uuid.toString();
32   -
33   - Map<String, Object> paramLog = new HashMap<String, Object>();
34   - paramLog.put("user_job_id", sDate);
35   - paramLog.put("user_job_name", "자동조합매칭(" + paramRec.toString() + ",[" + iCmbnOwnCnt + "," + iStartOwn + "],[" + iCmbnTranCnt + "," + iStartTran + "])");
36   - matchingInnerDelingMapper.createUserJob(paramLog);
37   -
38   - int iUpdated = 0;
39   -
40   - String sSysSe = (String) paramRec.get("sys_se");
41   - String sAccnutYm = (String) paramRec.get("accnut_ym");
42   - String sCprCode = (String) paramRec.get("cpr_code");
43   - String sPartCpr = (String) paramRec.get("partn_cpr");
44   - String sDelngCrncy = (String) paramRec.get("delng_crncy");
45   - String sConds = (String) paramRec.get("conds");
46   -
47   - // 작업시작
48   - Map<String, Object> mParam = new HashMap<String, Object>();
49   - mParam.put("sysSe", sSysSe);
50   - mParam.put("accnutYm", sAccnutYm);
51   - mParam.put("conds", sConds);
52   - mParam.put("delngCrncy", sDelngCrncy);
53   -
54   - // ----------------------------------------------------------------------------
55   - // 자기법인 데이타 가져오기
56   - mParam.put("cprCode", sCprCode);
57   - mParam.put("partnCpr", sPartCpr);
58   - List<Map> lMatchingDataOne = matchingInnerDelingMapper.getMatchingExtraDataOne(mParam);
59   -
60   - // 상대법인 데이타 가져오기
61   - mParam.put("cprCode", sPartCpr);
62   - mParam.put("partnCpr", sCprCode);
63   - List<Map> lMatchingDataTwo = matchingInnerDelingMapper.getMatchingExtraDataTwo(mParam);
64   -
65   - // Combination 데이타 만들기
  24 + @SuppressWarnings("unchecked")
  25 + public void process(Map paramRec, int iCmbnOwnCnt, int iCmbnTranCnt, int iStartOwn, int iStartTran) throws Exception {
  26 +
  27 + //Job Create Log
  28 + UUID uuid = UUID.randomUUID();
  29 + HashMap<String, String> mt = new HashMap<String, String>();
  30 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
  31 + String sDate = dateFormat.format(new Date()) + ":" + uuid.toString();
  32 +
  33 + Map<String, Object> paramLog = new HashMap<String, Object>();
  34 + paramLog.put("user_job_id", sDate);
  35 + paramLog.put("user_job_name", "자동조합매칭(" + paramRec.toString() + ",[" + iCmbnOwnCnt + "," + iStartOwn + "],[" + iCmbnTranCnt + "," + iStartTran + "])");
  36 + matchingInnerDelingMapper.createUserJob(paramLog);
  37 +
  38 +
  39 + int iUpdated = 0;
  40 +
  41 + String sSysSe = (String) paramRec.get("sys_se");
  42 + String sAccnutYm = (String) paramRec.get("accnut_ym");
  43 + String sCprCode = (String) paramRec.get("cpr_code");
  44 + String sPartCpr = (String) paramRec.get("partn_cpr");
  45 + String sConds = (String) paramRec.get("conds");
  46 +
  47 + //작업시작
  48 + Map<String, Object> mParam = new HashMap<String, Object>();
  49 + mParam.put("sysSe", sSysSe);
  50 + mParam.put("accnutYm", sAccnutYm);
  51 + mParam.put("conds", sConds);
  52 +
  53 + //----------------------------------------------------------------------------
  54 + //자기법인 데이타 가져오기
  55 + mParam.put("cprCode", sCprCode);
  56 + mParam.put("partnCpr", sPartCpr);
  57 + List<Map> lMatchingDataOne = matchingInnerDelingMapper.getMatchingExtraDataOne(mParam);
  58 +
  59 + //상대법인 데이타 가져오기
  60 + mParam.put("cprCode", sPartCpr);
  61 + mParam.put("partnCpr", sCprCode);
  62 + List<Map> lMatchingDataTwo = matchingInnerDelingMapper.getMatchingExtraDataTwo(mParam);
  63 +
  64 + //Combination 데이타 만들기
66 65 List<Map> compResult = new ArrayList<Map>();
67 66 List<List<Map>> llMatchingDataOne = new ArrayList<List<Map>>();
68 67 List<List<Map>> llMatchingDataTwo = new ArrayList<List<Map>>();
69   -
  68 +
70 69 int iEndOwn = lMatchingDataOne.size();
71 70 if (iCmbnOwnCnt == 2) {
72 71 iEndOwn = iStartOwn + 1000;
73   - if (iEndOwn > lMatchingDataOne.size())
74   - iEndOwn = lMatchingDataOne.size();
  72 + if (iEndOwn > lMatchingDataOne.size()) iEndOwn = lMatchingDataOne.size();
75 73 }
76 74 if (iCmbnOwnCnt == 3) {
77 75 iEndOwn = iStartOwn + 50;
78   - if (iEndOwn > lMatchingDataOne.size())
79   - iEndOwn = lMatchingDataOne.size();
  76 + if (iEndOwn > lMatchingDataOne.size()) iEndOwn = lMatchingDataOne.size();
80 77 }
81 78 if (iCmbnOwnCnt > 3) {
82 79 iEndOwn = iStartOwn + 25;
83   - if (iEndOwn > lMatchingDataOne.size())
84   - iEndOwn = lMatchingDataOne.size();
  80 + if (iEndOwn > lMatchingDataOne.size()) iEndOwn = lMatchingDataOne.size();
85 81 }
86 82  
87 83 int iEndTran = lMatchingDataTwo.size();
88 84 if (iCmbnTranCnt == 2) {
89 85 iEndTran = iStartTran + 1000;
90   - if (iEndTran > lMatchingDataTwo.size())
91   - iEndTran = lMatchingDataTwo.size();
  86 + if (iEndTran > lMatchingDataTwo.size()) iEndTran = lMatchingDataTwo.size();
92 87 }
93 88 if (iCmbnTranCnt == 3) {
94 89 iEndTran = iStartTran + 50;
95   - if (iEndTran > lMatchingDataTwo.size())
96   - iEndTran = lMatchingDataTwo.size();
  90 + if (iEndTran > lMatchingDataTwo.size()) iEndTran = lMatchingDataTwo.size();
97 91 }
98 92 if (iCmbnTranCnt > 3) {
99 93 iEndTran = iStartTran + 25;
100   - if (iEndTran > lMatchingDataTwo.size())
101   - iEndTran = lMatchingDataTwo.size();
102   - }
103   -
104   - StatisticsUtil.reculsion(lMatchingDataOne, compResult, iStartOwn, iEndOwn, iCmbnOwnCnt, llMatchingDataOne);
105   - StatisticsUtil.reculsion(lMatchingDataTwo, compResult, iStartTran, iEndTran, iCmbnTranCnt, llMatchingDataTwo);
106   -
107   - // ----------------------------------------------------------------------------
108   - // 자기법인 데이타를 맵으로 처리한다.
109   - Map<BigDecimal, List<List<Map>>> mMatchingDataOne = new HashMap<BigDecimal, List<List<Map>>>();
110   - for (List<Map> curlMap : llMatchingDataOne) {
111   - BigDecimal bdKey = BigDecimal.ZERO;
112   - for (Map curMap : curlMap) {
113   - bdKey = bdKey.add((BigDecimal) curMap.get("delng_amt"));
114   - }
115   - List<List<Map>> curllMap = new ArrayList<List<Map>>();
116   - if (mMatchingDataOne.containsKey(bdKey))
117   - curllMap = mMatchingDataOne.get(bdKey);
118   - curllMap.add(curlMap);
119   - mMatchingDataOne.put(bdKey, curllMap);
120   - }
121   -
122   - // 상대법인 데이타를 맵으로 처리한다.
123   - Map<BigDecimal, List<List<Map>>> mMatchingDataTwo = new HashMap<BigDecimal, List<List<Map>>>();
124   - for (List<Map> curlMap : llMatchingDataTwo) {
125   - BigDecimal bdKey = BigDecimal.ZERO;
126   - for (Map curMap : curlMap) {
127   - bdKey = bdKey.add((BigDecimal) curMap.get("delng_amt"));
128   - }
129   - List<List<Map>> curllMap = new ArrayList<List<Map>>();
130   - if (mMatchingDataTwo.containsKey(bdKey))
131   - curllMap = mMatchingDataTwo.get(bdKey);
132   - curllMap.add(curlMap);
133   - mMatchingDataTwo.put(bdKey, curllMap);
  94 + if (iEndTran > lMatchingDataTwo.size()) iEndTran = lMatchingDataTwo.size();
134 95 }
135   -
136   - // 여기서 매칭 비교
137   - // 비교 lMatchingDataOne vs mMatchingDataTwo
138   - List<Map> lMatchingResultUpdate = new ArrayList<Map>(); // 업데이트할 대상
139   -
140   - String mtchSys = "AUTO";
141   - String mtchType = "EX_" + iCmbnOwnCnt + "_" + iCmbnTranCnt;
142   - String mtchTypeName = "자기(" + iCmbnOwnCnt + "건Sum), 상대(" + iCmbnTranCnt + "건Sum), (" + sDelngCrncy + "), 비교(금액)";
143   - for (BigDecimal curKey : mMatchingDataOne.keySet()) {
144   - if (mMatchingDataTwo.containsKey(curKey)) {
145   - List<List<Map>> llMapOne = mMatchingDataOne.get(curKey);
146   - List<List<Map>> llMapTwo = mMatchingDataTwo.get(curKey);
147   -
148   - // 위와 관련된 동일 레코드가 있는 리스트 삭제
149   - for (int i = llMapOne.size() - 1; i >= 0; i--) {
150   - List<Map> curlMap = llMapOne.get(i);
  96 +
  97 + StatisticsUtil.reculsion(lMatchingDataOne, compResult, iStartOwn, iEndOwn, iCmbnOwnCnt, llMatchingDataOne);
  98 + StatisticsUtil.reculsion(lMatchingDataTwo, compResult, iStartTran, iEndTran, iCmbnTranCnt, llMatchingDataTwo);
  99 +
  100 + //----------------------------------------------------------------------------
  101 + //자기법인 데이타를 맵으로 처리한다.
  102 + Map<BigDecimal, List<List<Map>>> mMatchingDataOne = new HashMap<BigDecimal, List<List<Map>>>();
  103 + for (List<Map> curlMap : llMatchingDataOne) {
  104 + BigDecimal bdKey = BigDecimal.ZERO;
  105 + for(Map curMap : curlMap) {
  106 + bdKey = bdKey.add((BigDecimal) curMap.get("delng_amt"));
  107 + }
  108 + List<List<Map>> curllMap = new ArrayList<List<Map>>();
  109 + if (mMatchingDataOne.containsKey(bdKey)) curllMap = mMatchingDataOne.get(bdKey);
  110 + curllMap.add(curlMap);
  111 + mMatchingDataOne.put(bdKey, curllMap);
  112 + }
  113 +
  114 + //상대법인 데이타를 맵으로 처리한다.
  115 + Map<BigDecimal, List<List<Map>>> mMatchingDataTwo = new HashMap<BigDecimal, List<List<Map>>>();
  116 + for (List<Map> curlMap : llMatchingDataTwo) {
  117 + BigDecimal bdKey = BigDecimal.ZERO;
  118 + for(Map curMap : curlMap) {
  119 + bdKey = bdKey.add((BigDecimal) curMap.get("delng_amt"));
  120 + }
  121 + List<List<Map>> curllMap = new ArrayList<List<Map>>();
  122 + if (mMatchingDataTwo.containsKey(bdKey)) curllMap = mMatchingDataTwo.get(bdKey);
  123 + curllMap.add(curlMap);
  124 + mMatchingDataTwo.put(bdKey, curllMap);
  125 + }
  126 +
  127 + //여기서 매칭 비교
  128 + //비교 lMatchingDataOne vs mMatchingDataTwo
  129 + List<Map> lMatchingResultUpdate = new ArrayList<Map>(); //업데이트할 대상
  130 +
  131 + int mtchNumber = 0;
  132 + String mtchSys = "AUTO";
  133 + String mtchType = "EX_" + iCmbnOwnCnt + "_" + iCmbnTranCnt;
  134 + String mtchTypeName = "자기(" + iCmbnOwnCnt + "건Sum), 상대(" + iCmbnTranCnt + "건Sum), 비교(금액)";
  135 + for (BigDecimal curKey : mMatchingDataOne.keySet()) {
  136 + if (mMatchingDataTwo.containsKey(curKey)) {
  137 + List<List<Map>> llMapOne = mMatchingDataOne.get(curKey);
  138 + List<List<Map>> llMapTwo = mMatchingDataTwo.get(curKey);
  139 +
  140 + //위와 관련된 동일 레코드가 있는 리스트 삭제
  141 + for (int i=llMapOne.size()-1; i>=0;i--) {
  142 + List<Map> curlMap = llMapOne.get(i);
151 143 for (Map curMap : lMatchingResultUpdate) {
152 144 int curIdx = curlMap.indexOf(curMap);
153 145 if (curIdx != -1) {
154 146 llMapOne.remove(i);
155 147 break;
156   - }
  148 + }
157 149 }
158 150 }
159   - for (int i = llMapTwo.size() - 1; i >= 0; i--) {
160   - List<Map> curlMap = llMapTwo.get(i);
  151 + for (int i=llMapTwo.size()-1; i>=0;i--) {
  152 + List<Map> curlMap = llMapTwo.get(i);
161 153 for (Map curMap : lMatchingResultUpdate) {
162 154 int curIdx = curlMap.indexOf(curMap);
163 155 if (curIdx != -1) {
164 156 llMapTwo.remove(i);
165 157 break;
166   - }
  158 + }
167 159 }
168 160 }
169   -
170   - int iMin = Math.min(llMapOne.size(), llMapTwo.size());
171   - if (iMin > 0) {
172   - mtchNumber++;
173   - }
174   - while (iMin > 0) {
175   - List<Map> curlMapOne = llMapOne.get(0);
176   - for (Map curMap : curlMapOne) {
177   - curMap.put("mtch_sys", mtchSys);
178   - curMap.put("mtch_ty", mtchType);
179   - curMap.put("mtch_ty_nm", mtchTypeName);
180   - curMap.put("mtch_ky", mtchNumber);
181   - lMatchingResultUpdate.add(curMap);
182   - }
  161 +
  162 +
  163 + int iMin = Math.min(llMapOne.size(), llMapTwo.size());
  164 + if (iMin > 0) mtchNumber++;
  165 + while (iMin > 0) {
  166 + List<Map> curlMapOne = llMapOne.get(0);
  167 + for (Map curMap : curlMapOne) {
  168 + curMap.put("mtch_sys", mtchSys);
  169 + curMap.put("mtch_ty", mtchType);
  170 + curMap.put("mtch_ty_nm", mtchTypeName);
  171 + curMap.put("mtch_ky", mtchNumber);
  172 + lMatchingResultUpdate.add(curMap);
  173 + }
183 174 llMapOne.remove(0);
184 175  
185 176 List<Map> curlMapTwo = llMapTwo.get(0);
186   - for (Map curMap : curlMapTwo) {
187   - curMap.put("mtch_sys", mtchSys);
188   - curMap.put("mtch_ty", mtchType);
189   - curMap.put("mtch_ty_nm", mtchTypeName);
190   - curMap.put("mtch_ky", mtchNumber);
191   - lMatchingResultUpdate.add(curMap);
192   - }
  177 + for (Map curMap : curlMapTwo) {
  178 + curMap.put("mtch_sys", mtchSys);
  179 + curMap.put("mtch_ty", mtchType);
  180 + curMap.put("mtch_ty_nm", mtchTypeName);
  181 + curMap.put("mtch_ky", mtchNumber);
  182 + lMatchingResultUpdate.add(curMap);
  183 + }
193 184 llMapTwo.remove(0);
194 185  
195   - // 위와 관련된 동일 레코드가 있는 리스트 삭제(추가 업데이트 목록)
196   - for (int i = llMapOne.size() - 1; i >= 0; i--) {
197   - List<Map> curlMap = llMapOne.get(i);
198   - for (Map curMap : curlMapOne) {
199   - int curIdx = curlMap.indexOf(curMap);
200   - if (curIdx != -1) {
201   - llMapOne.remove(i);
202   - break;
203   - }
204   - }
205   - }
206   - for (int i = llMapTwo.size() - 1; i >= 0; i--) {
207   - List<Map> curlMap = llMapTwo.get(i);
208   - for (Map curMap : curlMapTwo) {
209   - int curIdx = curlMap.indexOf(curMap);
210   - if (curIdx != -1) {
211   - llMapTwo.remove(i);
212   - break;
213   - }
214   - }
215   - }
216   - iMin = Math.min(llMapOne.size(), llMapTwo.size());
217   - }
218   - }
219   - }
220   -
221   - // ----------------------------------------------------------------------------
222   - // 여기서 결과 업데이트
223   - iUpdated = 0;
224   - int limit = 1000; // 1000건씩 batch
225   - List<Map> lUpdated = new ArrayList<Map>();
226   - for (Map curMap : lMatchingResultUpdate) {
227   - lUpdated.add(curMap);
228   - if (lUpdated.size() == limit) {
229   - matchingInnerDelingMapper.setExtraResult(Map.of("itemList", lUpdated));
230   - iUpdated = iUpdated + lUpdated.size();
231   - lUpdated.clear();
232   - }
233   - }
234   - if (lUpdated.size() > 0) {
235   - matchingInnerDelingMapper.setExtraResult(Map.of("itemList", lUpdated));
236   - iUpdated = iUpdated + lUpdated.size();
237   - }
238   - log.debug("Updated OrgData : " + iUpdated + "건");
239   -
240   - // 작업종료에 대한 로그 업데이트
241   - paramLog.put("exit_code", "0");
242   - paramLog.put("exit_message", "");
243   - matchingInnerDelingMapper.finishUserJob(paramLog);
244   -
245   - return mtchNumber;
246   - }
247   -
  186 + //위와 관련된 동일 레코드가 있는 리스트 삭제(추가 업데이트 목록)
  187 + for (int i=llMapOne.size()-1; i>=0;i--) {
  188 + List<Map> curlMap = llMapOne.get(i);
  189 + for (Map curMap : curlMapOne) {
  190 + int curIdx = curlMap.indexOf(curMap);
  191 + if (curIdx != -1) {
  192 + llMapOne.remove(i);
  193 + break;
  194 + }
  195 + }
  196 + }
  197 + for (int i=llMapTwo.size()-1; i>=0;i--) {
  198 + List<Map> curlMap = llMapTwo.get(i);
  199 + for (Map curMap : curlMapTwo) {
  200 + int curIdx = curlMap.indexOf(curMap);
  201 + if (curIdx != -1) {
  202 + llMapTwo.remove(i);
  203 + break;
  204 + }
  205 + }
  206 + }
  207 + iMin = Math.min(llMapOne.size(), llMapTwo.size());
  208 + }
  209 + }
  210 + }
  211 +
  212 + //----------------------------------------------------------------------------
  213 + //여기서 결과 업데이트
  214 + iUpdated = 0;
  215 + int limit = 1000; //1000건씩 batch
  216 + List<Map> lUpdated = new ArrayList<Map>();
  217 + for (Map curMap : lMatchingResultUpdate) {
  218 + lUpdated.add(curMap);
  219 + if (lUpdated.size() == limit) {
  220 + matchingInnerDelingMapper.setExtraResult(Map.of("itemList", lUpdated));
  221 + iUpdated = iUpdated + lUpdated.size();
  222 + lUpdated.clear();
  223 + }
  224 + }
  225 + if (lUpdated.size() > 0) {
  226 + matchingInnerDelingMapper.setExtraResult(Map.of("itemList", lUpdated));
  227 + iUpdated = iUpdated + lUpdated.size();
  228 + }
  229 + log.debug("Updated OrgData : " + iUpdated + "건");
  230 +
  231 + //작업종료에 대한 로그 업데이트
  232 + paramLog.put("exit_code", "0");
  233 + paramLog.put("exit_message", "");
  234 + matchingInnerDelingMapper.finishUserJob(paramLog);
  235 +
  236 + }
  237 +
248 238 }
249 239 \ No newline at end of file
... ...
src/main/java/com/batch/config/MatchingItemProcessorAuto.java
... ... @@ -12,7 +12,6 @@ import org.springframework.stereotype.Component;
12 12 import com.batch.config.MatchingSetup.Cond;
13 13 import com.batch.config.MatchingSetup.Matching;
14 14 import com.batch.mapper.primary.MatchingInnerDelingMapper;
15   -import com.batch.util.StatisticsUtil;
16 15  
17 16 import lombok.RequiredArgsConstructor;
18 17 import lombok.extern.slf4j.Slf4j;
... ... @@ -38,13 +37,11 @@ public class MatchingItemProcessorAuto implements ItemProcessor&lt;Map, Map&gt; {
38 37 List<String> lCompareField = matching.getCompareField();
39 38 String mtchType = matching.getType();
40 39 String mtchTypeName = matching.getTypeName();
41   - long mtchNumber = 0;
  40 + int mtchNumber = 0;
42 41 int iUpdated = 0;
43 42  
44   - log.info("CustomItemProcessorA.params : " + params.toString());
45   - log.info("CustomItemProcessorA.item : " + item.toString());
46   -
47   - params.put("delngCrncy", item.get("delng_crncy"));
  43 + log.debug("CustomItemProcessorA.params : " + params.toString());
  44 + log.debug("CustomItemProcessorA.item : " + item.get("cpr_code") + "," + item.get("partn_cpr"));
48 45  
49 46 //----------------------------------------------------------------------------
50 47 //자기법인 업데이트
... ... @@ -125,9 +122,7 @@ public class MatchingItemProcessorAuto implements ItemProcessor&lt;Map, Map&gt; {
125 122 List<Map> lMapTwo = mMatchingDataTwo.get(curKey);
126 123  
127 124 int iMin = Math.min(lMapOne.size(), lMapTwo.size());
128   - if (iMin > 0) {
129   - mtchNumber = StatisticsUtil.getMtchNum(); /** 일치key Sequence */
130   - }
  125 + if (iMin > 0) mtchNumber++;
131 126 for (int i=0; i<iMin; i++) {
132 127 lMapOne.get(i).put("mtchType", mtchType);
133 128 lMapOne.get(i).put("mtchTypeName", mtchTypeName);
... ... @@ -212,7 +207,7 @@ public class MatchingItemProcessorAuto implements ItemProcessor&lt;Map, Map&gt; {
212 207 matchingInnerDelingMapper.setResult(Map.of("itemList", lUpdated));
213 208 iUpdated = iUpdated + lUpdated.size();
214 209 }
215   - log.info("Updated OrgData : " + iUpdated + "건, mtchNumber = " + mtchNumber);
  210 + log.debug("Updated OrgData : " + iUpdated + "건");
216 211  
217 212 //작업이 정상적으로 작동 되었을 경우 현재 처리하고 있는 데이타 그대로 넘겨준다.
218 213 return item;
... ...
src/main/java/com/batch/config/MatchingItemWriter.java
1 1 package com.batch.config;
2 2  
  3 +import java.util.HashMap;
  4 +import java.util.List;
3 5 import java.util.Map;
4 6  
  7 +import org.springframework.batch.core.configuration.annotation.JobScope;
  8 +import org.springframework.batch.item.ItemProcessor;
5 9 import org.springframework.beans.factory.annotation.Autowired;
  10 +import org.springframework.beans.factory.annotation.Value;
6 11 import org.springframework.stereotype.Component;
7 12  
8 13 import com.batch.mapper.primary.MatchingInnerDelingMapper;
... ...
src/main/java/com/batch/config/MatchingSetup.java
1 1 package com.batch.config;
2 2  
  3 +import java.math.BigDecimal;
3 4 import java.util.ArrayList;
4 5 import java.util.List;
5 6  
... ...
src/main/java/com/batch/config/PrimaryMybatisConfiguration.java
... ... @@ -11,6 +11,7 @@ import org.springframework.context.ApplicationContext;
11 11 import org.springframework.context.annotation.Bean;
12 12 import org.springframework.context.annotation.Configuration;
13 13 import org.springframework.context.annotation.Primary;
  14 +import org.springframework.transaction.annotation.EnableTransactionManagement;
14 15  
15 16 @Configuration
16 17 @MapperScan(value = "com.batch.mapper.primary", sqlSessionFactoryRef="primarySqlSessionFactory")
... ...
src/main/java/com/batch/config/SecondaryMyBatisConfiguration.java
... ... @@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Qualifier;
10 10 import org.springframework.context.ApplicationContext;
11 11 import org.springframework.context.annotation.Bean;
12 12 import org.springframework.context.annotation.Configuration;
  13 +import org.springframework.transaction.annotation.EnableTransactionManagement;
13 14  
14 15 @Configuration
15 16 @MapperScan(value = "com.batch.mapper.secondary", sqlSessionFactoryRef="secondarySqlSessionFactory")
... ...
src/main/java/com/batch/controller/JobController.java
... ... @@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.RestController;
17 17 import com.batch.config.MatchingSetup;
18 18 import com.batch.config.MatchingSetup.Matching;
19 19 import com.batch.mapper.primary.MatchingInnerDelingMapper;
  20 +import com.batch.mapper.secondary.OracleMapper;
20 21 import com.batch.service.JobService;
21 22 import com.batch.util.FileUtil;
22 23 import com.google.gson.JsonObject;
... ... @@ -34,25 +35,6 @@ public class JobController {
34 35 @Autowired
35 36 private MatchingInnerDelingMapper matchingInnerDelingMapper;
36 37  
37   -
38   -
39   -
40   - /**
41   - * TODO : AI 서버에 특정 경로에 생성되는 파일을 읽는(끝에 50줄 정도) API
42   - * */
43   - @PostMapping("/readlogs")
44   - public StringBuffer readLogs( @RequestBody Map<String, String> params) throws Exception {
45   - StringBuffer sb = new StringBuffer();
46   -
47   - String filePath = params.get("filePath");
48   - int readCnt = Integer.parseInt(params.get("readCnt"));
49   -
50   - sb = FileUtil.readFileLastLines(filePath, readCnt, "ISO-8859-1", "UTF-8");
51   -
52   - log.info("sb ===");
53   - log.info(sb.toString());
54   - return sb;
55   - }
56 38  
57 39 @PostMapping("/create")
58 40 public Map<String, String> createJob( @RequestBody Map<String, String> params) throws Exception {
... ... @@ -114,54 +96,29 @@ public class JobController {
114 96 * "searchTwo": "dta_ty in ('11','21','31','33','35','37','41')"
115 97 * }
116 98 */
117   -
118 99 //Job Create Log
119 100 UUID uuid = UUID.randomUUID();
120 101 String sJobGroup = uuid.toString();
121 102  
122   -
123   -// log.debug("Start Extra Matching Job");
124   -// List<Map> retData = matchingInnerDelingMapper.getCustomItemReadData(params);
125   -// List<Map> retData = new ArrayList<Map>();
126   -// Map m = new HashMap();
127   -// m.put("sys_se", "LS_ALL");
128   -// m.put("accnut_ym", "202311");
129   -// m.put("cpr_code", "A15300");
130   -// m.put("partn_cpr", "A01100");
131   -// m.put("searchOne", "dta_ty in ('11','21','41')");
132   -// m.put("searchTwo", "dta_ty in ('12','22','42')");
133   -// retData.add(m);
134   -
135   - /** extraJobSub start ************************************************************************************** */
136   -// List<Map> retData = matchingInnerDelingMapper.getCustomItemReadData(params);
137   -//
138   -// int mtchNumber = 0;
139   -// // 수익/비용
140   -// for(Map curMap : retData) {
141   -// curMap.put("conds", "T");
142   -// log.info("Start extraJobSub Transaction !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
143   -// jobService.extraJobSub(sJobGroup, curMap, mtchNumber);
144   -// log.info("End extraJobSub Transaction !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
145   -// }
146   -// //채권/채무
147   -// for(Map curMap : retData) {
148   -// curMap.put("conds", "B");
149   -// log.info("Start extraJobSub Balance !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
150   -// jobService.extraJobSub(sJobGroup, curMap, mtchNumber);
151   -// log.info("End extraJobSub Balance !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
152   -// }
153   - /** extraJobSub end ************************************************************************************** */
154   -
  103 + log.debug("Start Extra Matching Job");
  104 + List<Map> retData = matchingInnerDelingMapper.getCustomItemReadData(params);
155 105  
156   -
157   - /** extraJobSub2 start ************************************************************************************** */
158   - long startTime = System.currentTimeMillis();
159   - log.info("### Start Extra Matching Job2 : "+startTime);
160   - jobService.extraJobSub2(sJobGroup, params);
  106 + // 수익/비용
  107 + for(Map curMap : retData) {
  108 + Map<String, String> cParams = new HashMap<String, String>();
  109 + cParams.putAll(curMap);
  110 + cParams.put("conds", "T");
  111 + jobService.extraJobSub(sJobGroup, cParams);
  112 + }
  113 + //채권/채무
  114 + for(Map curMap : retData) {
  115 + Map<String, String> cParams = new HashMap<String, String>();
  116 + cParams.putAll(curMap);
  117 + cParams.put("conds", "B");
  118 + jobService.extraJobSub(sJobGroup, cParams);
  119 + }
161 120  
162   - /** extraJobSub2 end ************************************************************************************** */
163   -
164   -
  121 + log.debug("End Extra Matching Job");
165 122  
166 123 Map<String, String> rtnMap = new HashMap<String, String>();
167 124 rtnMap.put("jobGroupId", sJobGroup);
... ...
src/main/java/com/batch/mapper/primary/MatchingInnerDelingMapper.java
... ... @@ -169,27 +169,4 @@ public interface MatchingInnerDelingMapper {
169 169 @SuppressWarnings("rawtypes")
170 170 List<Map> getUserJobStatus(Map param);
171 171  
172   -
173   -
174   -
175   -
176   -
177   - /**
178   - * 매칭제외1 : 거래금액 = 0
179   - * @param param
180   - * @return
181   - */
182   - @SuppressWarnings("rawtypes")
183   - int updateInitExclusion1(Map param);
184   -
185   -
186   - /**
187   - * 매칭제외2 : 거래유형, 자기/상대 법인, 거래일자, 계정 이 같은 1:1 내역 금액이 +, - 로 합이 0 인 경우
188   - * @param param
189   - * @return
190   - */
191   - @SuppressWarnings("rawtypes")
192   - int updateInitExclusion2(Map param);
193   -
194   -
195 172 }
196 173 \ No newline at end of file
... ...
src/main/java/com/batch/service/JobService.java
... ... @@ -33,7 +33,7 @@ import com.batch.config.MatchingSetup.Matching;
33 33 import com.batch.mapper.primary.MatchingInnerDelingMapper;
34 34 import com.batch.mapper.secondary.OracleMapper;
35 35 import com.batch.util.FileUtil;
36   -import com.batch.util.StatisticsUtil;
  36 +
37 37 import com.batch.service.JobService;
38 38 import lombok.extern.slf4j.Slf4j;
39 39  
... ... @@ -46,476 +46,333 @@ public class JobService {
46 46  
47 47 @Value("${python.ai.target}")
48 48 String sPythonAiTarget;
  49 +
  50 + @Autowired
  51 + private JobLauncher jobLauncher;
49 52  
50   - @Autowired
51   - private JobLauncher jobLauncher;
52   -
53   - @Autowired
54   - private ApplicationContext context;
55   -
56   - @Autowired
57   - private MatchingInnerDelingMapper matchingInnerDelingMapper;
  53 + @Autowired
  54 + private ApplicationContext context;
58 55  
59   - @Autowired
60   - private OracleMapper oracleMapper;
  56 + @Autowired
  57 + private MatchingInnerDelingMapper matchingInnerDelingMapper;
61 58  
62   - @SuppressWarnings("rawtypes")
  59 + @Autowired
  60 + private OracleMapper oracleMapper;
  61 +
  62 +
  63 + @SuppressWarnings("rawtypes")
63 64 @Async("commAsync")
64   - public void matchingJob(String jobGroupId, Map<String, String> params) throws Exception {
65   -
66   - // Job Create Log
67   - UUID uuid = UUID.randomUUID();
68   - HashMap<String, String> mt = new HashMap<String, String>();
69   - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
70   - String sDate = dateFormat.format(new Date()) + ":" + uuid.toString();
71   -
72   - Map<String, Object> paramLog = new HashMap<String, Object>();
73   - paramLog.put("user_job_group", jobGroupId);
74   - paramLog.put("user_job_id", sDate);
75   - paramLog.put("user_job_name", "자동매칭(" + params.toString() + ")");
76   - matchingInnerDelingMapper.createUserJob(paramLog);
77   -
78   - String sThreadName = Thread.currentThread().getName();
79   - long startTime = System.currentTimeMillis();
80   - log.info("[" + sThreadName + "]Job Started : " + startTime);
81   - log.debug("[" + sThreadName + "]params=" + params.toString());
82   -
83   - StringBuffer sb = FileUtil.readFileToString("matchingSetup.json");
84   - MatchingSetup matchingSetup = (MatchingSetup) FileUtil.strToObj(sb.toString(), MatchingSetup.class);
85   -
86   - String sJobTypeList = params.get("jobType").toUpperCase();
87   - List<String> lJobType = Arrays.asList(sJobTypeList != null ? sJobTypeList.split(",") : new String[0]);
88   -
89   - // 파라미터가 ALL일 경우 ALL 대신 등록된 모든 Type를 넣어준다.
90   - if (lJobType.size() > 0 && lJobType.indexOf("ALL") != -1) {
91   - lJobType = new ArrayList();
92   - for (Matching matching : matchingSetup.getMatchingSetup()) {
93   - if (matching.getActive()) {
94   - lJobType.add(matching.getType());
95   - } else {
96   - log.info("[" + sThreadName + "]JobType(" + matching.getType() + ") is Disabled");
97   - }
98   - }
99   - }
100   -
101   - /** 일치key 초기화 */
102   - StatisticsUtil.initMtchNum();
103   -
104   - for (String sJobType : lJobType) {
105   - log.info("[" + sThreadName + "]Current running job type: " + sJobType);
106   - JobExecution jobExe = invokeJob("matchingInnerDelng", sJobType, params);
107   - if (!jobExe.getStatus().equals(BatchStatus.COMPLETED)) {
108   - throw new Exception("Job execution error : Batchstatus(" + jobExe.getStatus() + "), ExitStatus(" + jobExe.getExitStatus() + ")");
109   - }
110   - }
111   -
112   - long endTime = System.currentTimeMillis();
113   - log.info("[" + sThreadName + "]Job Type : " + lJobType.toString());
114   - log.info("[" + sThreadName + "]Job Ended: " + endTime);
115   - log.info("[" + sThreadName + "]Running Time : " + (endTime - startTime) + "ms");
116   -
117   - // 작업종료에 대한 로그 업데이트
118   - paramLog.put("exit_code", "0");
119   - paramLog.put("exit_message", "");
120   - matchingInnerDelingMapper.finishUserJob(paramLog);
121   -
122   - }
123   -
124   - @SuppressWarnings("rawtypes")
  65 + public void matchingJob(String jobGroupId, Map<String, String> params) throws Exception {
  66 +
  67 + //Job Create Log
  68 + UUID uuid = UUID.randomUUID();
  69 + HashMap<String, String> mt = new HashMap<String, String>();
  70 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
  71 + String sDate = dateFormat.format(new Date()) + ":" + uuid.toString();
  72 +
  73 + Map<String, Object> paramLog = new HashMap<String, Object>();
  74 + paramLog.put("user_job_group", jobGroupId);
  75 + paramLog.put("user_job_id", sDate);
  76 + paramLog.put("user_job_name", "자동매칭(" + params.toString() + ")");
  77 + matchingInnerDelingMapper.createUserJob(paramLog);
  78 +
  79 + String sThreadName = Thread.currentThread().getName();
  80 + long startTime = System.currentTimeMillis();
  81 + log.info("[" + sThreadName + "]Job Started : " + startTime);
  82 + log.debug("[" + sThreadName + "]params=" + params.toString());
  83 +
  84 + StringBuffer sb = FileUtil.readFileToString("matchingSetup.json");
  85 + MatchingSetup matchingSetup = (MatchingSetup) FileUtil.strToObj(sb.toString(), MatchingSetup.class);
  86 +
  87 + String sJobTypeList = params.get("jobType").toUpperCase();
  88 + List<String> lJobType = Arrays.asList(sJobTypeList != null?sJobTypeList.split(","):new String[0]);
  89 +
  90 + //파라미터가 ALL일 경우 ALL 대신 등록된 모든 Type를 넣어준다.
  91 + if (lJobType.size() > 0 && lJobType.indexOf("ALL") != -1) {
  92 + lJobType = new ArrayList();
  93 + for (Matching matching : matchingSetup.getMatchingSetup()) {
  94 + if (matching.getActive()) {
  95 + lJobType.add(matching.getType());
  96 + } else {
  97 + log.info("[" + sThreadName + "]JobType(" + matching.getType() + ") is Disabled");
  98 + }
  99 + }
  100 + }
  101 +
  102 +
  103 + for (String sJobType : lJobType) {
  104 + log.info("[" + sThreadName + "]Current running job type: " + sJobType);
  105 + JobExecution jobExe = invokeJob("matchingInnerDelng", sJobType, params);
  106 + if (!jobExe.getStatus().equals(BatchStatus.COMPLETED)) {
  107 + throw new Exception("Job execution error : Batchstatus(" + jobExe.getStatus() + "), ExitStatus(" + jobExe.getExitStatus() + ")" );
  108 + }
  109 + }
  110 +
  111 + long endTime = System.currentTimeMillis();
  112 + log.info("[" + sThreadName + "]Job Type : " + lJobType.toString());
  113 + log.info("[" + sThreadName + "]Job Ended: " + endTime);
  114 + log.info("[" + sThreadName + "]Running Time : " + (endTime - startTime) + "ms");
  115 +
  116 + //작업종료에 대한 로그 업데이트
  117 + paramLog.put("exit_code", "0");
  118 + paramLog.put("exit_message", "");
  119 + matchingInnerDelingMapper.finishUserJob(paramLog);
  120 +
  121 + }
  122 +
  123 +
  124 + @SuppressWarnings("rawtypes")
125 125 @Async("extAsync")
126   - public void extraJobSub(String jobGroupId, Map paramRec, int key) throws Exception {
127   -
128   - int mtchNumber = key;
129   - // Job Create Log
130   - UUID uuid = UUID.randomUUID();
131   - HashMap<String, String> mt = new HashMap<String, String>();
132   - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
133   - String sDate = dateFormat.format(new Date()) + ":" + uuid.toString();
134   -
135   - Map<String, Object> paramLog = new HashMap<String, Object>();
136   - paramLog.put("user_job_group", jobGroupId);
137   - paramLog.put("user_job_id", sDate);
138   - paramLog.put("user_job_name", "Extra매칭(" + paramRec.toString() + ")");
139   -
140   - matchingInnerDelingMapper.createUserJob(paramLog);
141   -
142   - String sThreadName = Thread.currentThread().getName();
143   - long startTime = System.currentTimeMillis();
144   - log.info("extra [" + sThreadName + " : " + sDate + "]Job Started : " + startTime + "]params=" + paramRec.toString());
145   - log.debug("extra [" + sThreadName + "]params=" + paramRec.toString());
146   -
147   - MatchingExtraProcessorAuto matchingExtraProcessorAuto = new MatchingExtraProcessorAuto(matchingInnerDelingMapper);
148   -
149   - // 2건씩 합산 매칭일 경우 최대 20000건 까지
150   - for (int i = 0; i < 20000; i = i + 1000) {
151   - matchingExtraProcessorAuto.process(paramRec, 1, 2, 0, i, mtchNumber);
152   - }
153   - for (int i = 0; i < 20000; i = i + 1000) {
154   - matchingExtraProcessorAuto.process(paramRec, 2, 1, i, 0, mtchNumber);
155   - }
156   - for (int i = 0; i < 20000; i = i + 1000) {
157   - matchingExtraProcessorAuto.process(paramRec, 2, 2, i, i, mtchNumber);
158   - }
159   -
160   - // 3건씩 매칭일 경우 최대 5000건 까지
161   - for (int i = 0; i < 2000; i = i + 100) {
162   - matchingExtraProcessorAuto.process(paramRec, 1, 3, 0, i, mtchNumber);
163   - }
164   - for (int i = 0; i < 2000; i = i + 100) {
165   - matchingExtraProcessorAuto.process(paramRec, 3, 1, i, 0, mtchNumber);
166   - }
167   -
168   - long endTime = System.currentTimeMillis();
169   - log.info("extra [" + sThreadName + " : " + sDate + "]Job Ended: " + endTime);
170   - log.info("extra [" + sThreadName + "]Running Time : " + (endTime - startTime) + "ms");
171   -
172   - // 작업종료에 대한 로그 업데이트
173   - paramLog.put("exit_code", "0");
174   - paramLog.put("exit_message", "");
175   - matchingInnerDelingMapper.finishUserJob(paramLog);
176   -
177   - }
178   -
179   - @SuppressWarnings("rawtypes")
180   - @Async("extAsync")
181   - public void extraJobSub2(String jobGroupId, Map paramRec) throws Exception {
182   -
183   - List<Map> retData = matchingInnerDelingMapper.getCustomItemReadData(paramRec);
184   -
185   - long mtchNumber = 1000000; /** Extra매칭 일치key 백만 부터 */
186   - paramRec.put("conds", "T");
187   - for (Map curMap : retData) {
188   - paramRec.putAll(curMap);
189   - // Job Create Log
190   - UUID uuid = UUID.randomUUID();
191   - HashMap<String, String> mt = new HashMap<String, String>();
192   - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
193   - String sDate = dateFormat.format(new Date()) + ":" + uuid.toString();
194   -
195   - Map<String, Object> paramLog = new HashMap<String, Object>();
196   - paramLog.put("user_job_group", jobGroupId);
197   - paramLog.put("user_job_id", sDate);
198   - paramLog.put("user_job_name", "Extra매칭(" + paramRec.toString() + ")");
199   - try {
200   - matchingInnerDelingMapper.createUserJob(paramLog);
201   - } catch (Exception e) {
202   - log.info("createUserJob Exception : " + e.getMessage());
203   - }
204   - String sThreadName = Thread.currentThread().getName();
205   - long startTime = System.currentTimeMillis();
206   - log.info("extra [" + sThreadName + " : " + sDate + "]Job Started : " + startTime + "]params=" + paramRec.toString());
207   - log.debug("extra [" + sThreadName + "]params=" + paramRec.toString());
208   -
209   - MatchingExtraProcessorAuto matchingExtraProcessorAuto = new MatchingExtraProcessorAuto(matchingInnerDelingMapper);
210   -
211   - // 2건씩 합산 매칭일 경우 최대 20000건 까지
212   - for (int i = 0; i < 20000; i = i + 1000) {
213   - mtchNumber = matchingExtraProcessorAuto.process(paramRec, 1, 2, 0, i, mtchNumber);
214   - }
215   - for (int i = 0; i < 20000; i = i + 1000) {
216   - mtchNumber = matchingExtraProcessorAuto.process(paramRec, 2, 1, i, 0, mtchNumber);
217   - }
218   - for (int i = 0; i < 20000; i = i + 1000) {
219   - mtchNumber = matchingExtraProcessorAuto.process(paramRec, 2, 2, i, i, mtchNumber);
220   - }
221   -
222   - // 3건씩 매칭일 경우 최대 2000건 까지
223   - for (int i = 0; i < 2000; i = i + 100) {
224   - mtchNumber = matchingExtraProcessorAuto.process(paramRec, 1, 3, 0, i, mtchNumber);
225   - }
226   - for (int i = 0; i < 2000; i = i + 100) {
227   - mtchNumber = matchingExtraProcessorAuto.process(paramRec, 3, 1, i, 0, mtchNumber);
228   - }
229   -
230   -
231   - for (int i = 0; i < 2000; i = i + 100) {
232   - mtchNumber = matchingExtraProcessorAuto.process(paramRec, 2, 3, i, 0, mtchNumber);
233   - }
234   -
235   - for (int i = 0; i < 2000; i = i + 100) {
236   - mtchNumber = matchingExtraProcessorAuto.process(paramRec, 3, 2, i, 0, mtchNumber);
237   - }
238   -
239   - for (int i = 0; i < 2000; i = i + 100) {
240   - mtchNumber = matchingExtraProcessorAuto.process(paramRec, 3, 3, i, 0, mtchNumber);
241   - }
242   -
243   - // 3건이상 매칭일 경우 최대 1000건 까지
244   - for (int i = 0; i < 1000; i = i + 25) {
245   - mtchNumber = matchingExtraProcessorAuto.process(paramRec, 1, 4, 0, i, mtchNumber);
246   - }
247   - for (int i = 0; i < 1000; i = i + 25) {
248   - mtchNumber = matchingExtraProcessorAuto.process(paramRec, 4, 1, 0, i, mtchNumber);
249   - }
250   -
251   - long endTime = System.currentTimeMillis();
252   - log.info(
253   - "extra [" + sThreadName + " : " + sDate + "]Job Ended: " + endTime + " mtchNumber = " + mtchNumber);
254   - log.info("extra [" + sThreadName + "]Running Time : " + (endTime - startTime) + "ms");
255   -
256   - // 작업종료에 대한 로그 업데이트
257   - paramLog.put("exit_code", "0");
258   - paramLog.put("exit_message", "");
259   - matchingInnerDelingMapper.finishUserJob(paramLog);
260   -
261   - }
262   -
263   - paramRec.put("conds", "B");
264   - for (Map curMap : retData) {
265   - paramRec.putAll(curMap);
266   -
267   - // Job Create Log
268   - UUID uuid = UUID.randomUUID();
269   - HashMap<String, String> mt = new HashMap<String, String>();
270   - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
271   - String sDate = dateFormat.format(new Date()) + ":" + uuid.toString();
272   -
273   - Map<String, Object> paramLog = new HashMap<String, Object>();
274   - paramLog.put("user_job_group", jobGroupId);
275   - paramLog.put("user_job_id", sDate);
276   - paramLog.put("user_job_name", "Extra매칭(" + paramRec.toString() + ")");
277   - try {
278   - matchingInnerDelingMapper.createUserJob(paramLog);
279   - } catch (Exception e) {
280   - log.info("createUserJob Exception : " + e.getMessage());
281   - }
282   - String sThreadName = Thread.currentThread().getName();
283   - long startTime = System.currentTimeMillis();
284   - log.info("extra [" + sThreadName + " : " + sDate + "]Job Started : " + startTime + "]params="
285   - + paramRec.toString());
286   - log.debug("extra [" + sThreadName + "]params=" + paramRec.toString());
287   -
288   - MatchingExtraProcessorAuto matchingExtraProcessorAuto = new MatchingExtraProcessorAuto(
289   - matchingInnerDelingMapper);
290   -
291   - // 2건씩 합산 매칭일 경우 최대 20000건 까지
292   - for (int i = 0; i < 20000; i = i + 1000) {
293   - mtchNumber = matchingExtraProcessorAuto.process(paramRec, 1, 2, 0, i, mtchNumber);
294   - }
295   - for (int i = 0; i < 20000; i = i + 1000) {
296   - mtchNumber = matchingExtraProcessorAuto.process(paramRec, 2, 1, i, 0, mtchNumber);
297   - }
298   - for (int i = 0; i < 20000; i = i + 1000) {
299   - mtchNumber = matchingExtraProcessorAuto.process(paramRec, 2, 2, i, i, mtchNumber);
300   - }
301   -
302   - // 3건씩 매칭일 경우 최대 5000건 까지
303   - for (int i = 0; i < 2000; i = i + 100) {
304   - mtchNumber = matchingExtraProcessorAuto.process(paramRec, 1, 3, 0, i, mtchNumber);
305   - }
306   - for (int i = 0; i < 2000; i = i + 100) {
307   - mtchNumber = matchingExtraProcessorAuto.process(paramRec, 3, 1, i, 0, mtchNumber);
308   - }
309   -
310   - long endTime = System.currentTimeMillis();
311   - log.info("extra [" + sThreadName + " : " + sDate + "]Job Ended: " + endTime + " mtchNumber = " + mtchNumber);
312   - log.info("extra [" + sThreadName + "]Running Time : " + (endTime - startTime) + "ms");
313   -
314   - // 작업종료에 대한 로그 업데이트
315   - paramLog.put("exit_code", "0");
316   - paramLog.put("exit_message", "");
317   - matchingInnerDelingMapper.finishUserJob(paramLog);
318   -
319   - }
320   -
321   - long endTime = System.currentTimeMillis();
322   - log.info("### End Extra Matching Job2 : " + endTime);
323   -
324   - }
325   -
326   - @SuppressWarnings("rawtypes")
  126 + public void extraJobSub(String jobGroupId, Map paramRec) throws Exception {
  127 +
  128 + //Job Create Log
  129 + UUID uuid = UUID.randomUUID();
  130 + HashMap<String, String> mt = new HashMap<String, String>();
  131 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
  132 + String sDate = dateFormat.format(new Date()) + ":" + uuid.toString();
  133 +
  134 + Map<String, Object> paramLog = new HashMap<String, Object>();
  135 + paramLog.put("user_job_group", jobGroupId);
  136 + paramLog.put("user_job_id", sDate);
  137 + paramLog.put("user_job_name", "Extra매칭(" + paramRec.toString() + ")");
  138 + matchingInnerDelingMapper.createUserJob(paramLog);
  139 +
  140 + String sThreadName = Thread.currentThread().getName();
  141 + long startTime = System.currentTimeMillis();
  142 + log.info("[" + sThreadName + "]Job Started : " + startTime);
  143 + log.debug("[" + sThreadName + "]params=" + paramRec.toString());
  144 +
  145 + MatchingExtraProcessorAuto matchingExtraProcessorAuto = new MatchingExtraProcessorAuto(matchingInnerDelingMapper);
  146 +
  147 + //2건씩 합산 매칭일 경우 최대 20000건 까지
  148 + for (int i=0; i<20000;i=i+1000) {
  149 + matchingExtraProcessorAuto.process(paramRec, 1, 2, 0, i);
  150 + }
  151 + for (int i=0; i<20000;i=i+1000) {
  152 + matchingExtraProcessorAuto.process(paramRec, 2, 1, i, 0);
  153 + }
  154 + for (int i=0; i<20000;i=i+1000) {
  155 + matchingExtraProcessorAuto.process(paramRec, 2, 2, i, i);
  156 + }
  157 +
  158 + //3건씩 매칭일 경우 최대 2000건 까지
  159 + for (int i=0; i<2000;i=i+50) {
  160 + matchingExtraProcessorAuto.process(paramRec, 1, 3, 0, i);
  161 + }
  162 + for (int i=0; i<2000;i=i+50) {
  163 + matchingExtraProcessorAuto.process(paramRec, 3, 1, i, 0);
  164 + }
  165 +
  166 + //4건씩 매칭일 경우 최대 2000건 까지
  167 + for (int i=0; i<2000;i=i+25) {
  168 + matchingExtraProcessorAuto.process(paramRec, 1, 4, 0, i);
  169 + }
  170 + for (int i=0; i<2000;i=i+25) {
  171 + matchingExtraProcessorAuto.process(paramRec, 4, 1, i, 0);
  172 + }
  173 +
  174 + long endTime = System.currentTimeMillis();
  175 + log.info("[" + sThreadName + "]Job Ended: " + endTime);
  176 + log.info("[" + sThreadName + "]Running Time : " + (endTime - startTime) + "ms");
  177 +
  178 + //작업종료에 대한 로그 업데이트
  179 + paramLog.put("exit_code", "0");
  180 + paramLog.put("exit_message", "");
  181 + matchingInnerDelingMapper.finishUserJob(paramLog);
  182 +
  183 + }
  184 +
  185 + @SuppressWarnings("rawtypes")
327 186 @Async("aiAsync")
328   - public void aiJobSub(String jobGroupId, Map paramRec) throws Exception {
329   -
330   - // Job Create Log
331   - UUID uuid = UUID.randomUUID();
332   - HashMap<String, String> mt = new HashMap<String, String>();
333   - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
334   - String sDate = dateFormat.format(new Date()) + ":" + uuid.toString();
335   -
336   - Map<String, Object> paramLog = new HashMap<String, Object>();
337   - paramLog.put("user_job_group", jobGroupId);
338   - paramLog.put("user_job_id", sDate);
339   - paramLog.put("user_job_name", "AI매칭(" + paramRec.toString() + ")");
340   - matchingInnerDelingMapper.createUserJob(paramLog);
341   -
342   - long startTime = System.currentTimeMillis();
343   - log.info("ai Job Started : " + startTime);
344   - log.debug("ai Job params=" + paramRec.toString());
345   -
346   - String sSysSe = (String) paramRec.get("sys_se");
347   - String sAccnutYm = (String) paramRec.get("accnut_ym");
348   - String sCprCode = (String) paramRec.get("cpr_code");
349   - String sPartCpr = (String) paramRec.get("partn_cpr");
350   - String sDelngCrncy = (String) paramRec.get("delng_crncy");
351   -
352   - String sThreadName = Thread.currentThread().getName();
353   -
354   - log.debug("call python");
355   - new ProcessExecutor()
356   - .command(sPythonPrg, sPythonAiTarget, sDate, sSysSe, sAccnutYm, sCprCode, sPartCpr, sDelngCrncy)
357   - .redirectOutput(new LogOutputStream() {
358   - @Override
359   - protected void processLine(String line) {
360   - log.info(line);
361   - }
362   - }).execute();
363   -
364   - long endTime = System.currentTimeMillis();
365   - log.info("ai Job Ended: " + endTime);
366   - log.info("ai Job Running Time : " + (endTime - startTime) + "ms");
367   -
368   -// //작업종료에 대한 로그 업데이트
369   -// paramLog.put("exit_code", "0");
370   -// paramLog.put("exit_message", "");
371   -// matchingInnerDelingMapper.finishUserJob(paramLog);
372   -
373   - }
374   -
375   - public JobExecution invokeJob(String jobName, String jobType, Map<String, String> params)
376   - throws JobInstanceAlreadyCompleteException, JobExecutionAlreadyRunningException,
377   - JobParametersInvalidException, JobRestartException {
378   -
379   - UUID uuid = UUID.randomUUID();
380   - HashMap<String, String> mt = new HashMap<String, String>();
381   - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
382   - final String date = dateFormat.format(new Date()) + ":" + uuid.toString();
383   - JobParameters jobParameters = new JobParametersBuilder().addString("syncDate", date)
384   - .addString("jobType", jobType).addString("sysSe", params.get("sysSe"))
385   - .addString("accnutYm", params.get("accnutYm")).addString("searchCond", params.get("searchCond"))
386   - .toJobParameters();
387   -
388   - var jobToStart = context.getBean(jobName, Job.class);
389   - JobExecution jobExe = jobLauncher.run(jobToStart, jobParameters);
390   -
391   - return jobExe;
392   - }
393   -
394   - @SuppressWarnings("rawtypes")
  187 + public void aiJobSub(String jobGroupId, Map paramRec) throws Exception {
  188 +
  189 +
  190 + //Job Create Log
  191 + UUID uuid = UUID.randomUUID();
  192 + HashMap<String, String> mt = new HashMap<String, String>();
  193 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
  194 + String sDate = dateFormat.format(new Date()) + ":" + uuid.toString();
  195 +
  196 + Map<String, Object> paramLog = new HashMap<String, Object>();
  197 + paramLog.put("user_job_group", jobGroupId);
  198 + paramLog.put("user_job_id", sDate);
  199 + paramLog.put("user_job_name", "AI매칭(" + paramRec.toString() + ")");
  200 + matchingInnerDelingMapper.createUserJob(paramLog);
  201 +
  202 +
  203 + long startTime = System.currentTimeMillis();
  204 + log.info("Job Started : " + startTime);
  205 + log.debug("params=" + paramRec.toString());
  206 +
  207 + String sSysSe = (String) paramRec.get("sys_se");
  208 + String sAccnutYm = (String) paramRec.get("accnut_ym");
  209 + String sCprCode = (String) paramRec.get("cpr_code");
  210 + String sPartCpr = (String) paramRec.get("partn_cpr");
  211 + String sDelngCrncy = (String) paramRec.get("delng_crncy");
  212 +
  213 + String sThreadName = Thread.currentThread().getName();
  214 +
  215 + log.debug("call python");
  216 + new ProcessExecutor()
  217 + .command(sPythonPrg, sPythonAiTarget, sThreadName, sSysSe, sAccnutYm, sCprCode, sPartCpr, sDelngCrncy)
  218 + .redirectOutput(new LogOutputStream() {
  219 + @Override
  220 + protected void processLine(String line) {
  221 + log.info(line);
  222 + }
  223 + })
  224 + .execute();
  225 +
  226 + long endTime = System.currentTimeMillis();
  227 + log.info("Job Ended: " + endTime);
  228 + log.info("Running Time : " + (endTime - startTime) + "ms");
  229 +
  230 +
  231 + //작업종료에 대한 로그 업데이트
  232 + paramLog.put("exit_code", "0");
  233 + paramLog.put("exit_message", "");
  234 + matchingInnerDelingMapper.finishUserJob(paramLog);
  235 +
  236 + }
  237 +
  238 +
  239 + public JobExecution invokeJob(String jobName, String jobType, Map<String, String> params) throws JobInstanceAlreadyCompleteException, JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException {
  240 +
  241 + UUID uuid = UUID.randomUUID();
  242 + HashMap<String, String> mt = new HashMap<String, String>();
  243 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
  244 + 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();
  252 +
  253 + var jobToStart = context.getBean(jobName, Job.class);
  254 + JobExecution jobExe = jobLauncher.run(jobToStart, jobParameters);
  255 +
  256 + return jobExe;
  257 + }
  258 +
  259 +
  260 +
  261 + @SuppressWarnings("rawtypes")
395 262 @Async("commAsync")
396   - public void createData(String jobGroupId, Map<String, String> params) throws Exception {
397   -
398   - // Job Create Log
399   - UUID uuid = UUID.randomUUID();
400   - HashMap<String, String> mt = new HashMap<String, String>();
401   - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
402   - String sDate = dateFormat.format(new Date()) + ":" + uuid.toString();
403   -
404   - Map<String, Object> paramLog = new HashMap<String, Object>();
405   - paramLog.put("user_job_group", jobGroupId);
406   - paramLog.put("user_job_id", sDate);
407   - paramLog.put("user_job_name", "작업데이타생성(" + params.toString() + ")");
408   - matchingInnerDelingMapper.createUserJob(paramLog);
409   -
410   - long startTime = System.currentTimeMillis();
411   - log.info("Create Data Started : " + startTime);
412   - log.debug("params=" + params.toString());
413   -
414   - // 기존데이타 삭제
  263 + public void createData(String jobGroupId, Map<String, String> params) throws Exception {
  264 +
  265 + //Job Create Log
  266 + UUID uuid = UUID.randomUUID();
  267 + HashMap<String, String> mt = new HashMap<String, String>();
  268 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
  269 + String sDate = dateFormat.format(new Date()) + ":" + uuid.toString();
  270 +
  271 + Map<String, Object> paramLog = new HashMap<String, Object>();
  272 + paramLog.put("user_job_group", jobGroupId);
  273 + paramLog.put("user_job_id", sDate);
  274 + paramLog.put("user_job_name", "작업데이타생성(" + params.toString() + ")");
  275 + matchingInnerDelingMapper.createUserJob(paramLog);
  276 +
  277 +
  278 + long startTime = System.currentTimeMillis();
  279 + log.info("Create Data Started : " + startTime);
  280 + log.debug("params=" + params.toString());
  281 +
  282 + //기존데이타 삭제
415 283 int iDeleted = matchingInnerDelingMapper.deleteOriginalData(params);
416   - log.debug("Deleted OrgData : " + iDeleted + "건");
417   -
418   - // 신규데이타 생성
419   - // 매칭키에 대한 정보 (sql로 조인하여 조회하기에는 너무 느리고 데이타 중복도 발생함)
420   - List<Map> lMatchingInfo = oracleMapper.getMatchingInfo(params);
421   - Map<String, Map> mMatchingInfo = new HashMap<String, Map>();
422   - for (Map curMap : lMatchingInfo) {
423   - String sKey = String.valueOf(curMap.get("SEQ"));
424   - mMatchingInfo.put(sKey, curMap);
425   - }
426   -
427   - List<Map> lOrgData = oracleMapper.getOriginalData(params);
428   - int iInserted = 0;
429   - int iUpdated = 0;
430   - int limit = 1000; // 1000건씩 batch
431   - List<Map> lInserted = new ArrayList<Map>();
432   - for (Map curRec : lOrgData) {
433   - String sKey = String.valueOf(curRec.get("SEQ"));
434   - Map curMatchingInfo = mMatchingInfo.get(sKey);
435   - if (curMatchingInfo != null) {
436   - curRec.put("MATCHING_CAUSE", curMatchingInfo.get("MATCHING_CAUSE"));
437   - curRec.put("MATCH_KEY", curMatchingInfo.get("MATCH_KEY"));
438   - }
439   - lInserted.add(curRec);
440   - if (lInserted.size() == limit) {
441   - matchingInnerDelingMapper.insertOriginalData(Map.of("itemList", lInserted));
442   - iInserted = iInserted + lInserted.size();
443   - lInserted.clear();
444   - }
445   - }
446   - if (lInserted.size() > 0) {
447   - matchingInnerDelingMapper.insertOriginalData(Map.of("itemList", lInserted));
448   - iInserted = iInserted + lInserted.size();
449   - }
450   - log.info("Inserted OrgData : " + iInserted + "건");
451   -
452   - iDeleted = matchingInnerDelingMapper.deleteData(params);
453   - log.debug("Deleted Work Data : " + iDeleted + "건");
454   - iInserted = matchingInnerDelingMapper.insertDataFromOriginal(params);
455   - log.info("Inserted Work Data : " + iInserted + "건");
456   -
457   -
458   - /**** 매칭제외 처리 start **************************************************************************************************/
459   - /** 1. 거래금액 = 0 */
460   - iUpdated = matchingInnerDelingMapper.updateInitExclusion1(params);
461   - log.info("매칭제외 : 1. 거래금액 = 0 : " + iUpdated + "건");
462   -
463   -
464   - /** 2. 거래유형, 자기/상대 법인, 거래일자, 계정 이 같은 1:1 내역 금액이 +, - 로 합이 0 인 경우 */
465   - iUpdated = matchingInnerDelingMapper.updateInitExclusion2(params);
466   - log.info("매칭제외 : 2. 1:1 내역 금액이 +, - 로 합이 0 : " + iUpdated + "건");
467   - /**** 매칭제외 처리 end **************************************************************************************************/
468   -
469   - iDeleted = matchingInnerDelingMapper.deleteDataAi(params);
470   - log.debug("Deleted Work AI Data : " + iDeleted + "건");
471   - iInserted = matchingInnerDelingMapper.insertDataAiFromOriginal(params);
472   - log.info("Inserted Work AI Data : " + iInserted + "건");
473   -
474   - long endTime = System.currentTimeMillis();
475   - log.info("Create Data Ended : " + endTime);
476   - log.info("Running Time : " + (endTime - startTime) + "ms");
477   -
478   - // 작업종료에 대한 로그 업데이트
479   - paramLog.put("exit_code", "0");
480   - paramLog.put("exit_message", "");
481   - matchingInnerDelingMapper.finishUserJob(paramLog);
482   - }
483   -
484   - @SuppressWarnings("rawtypes")
  284 + log.debug("Deleted OrgData : " + iDeleted + "건");
  285 +
  286 + //신규데이타 생성
  287 + //매칭키에 대한 정보 (sql로 조인하여 조회하기에는 너무 느리고 데이타 중복도 발생함)
  288 + List<Map> lMatchingInfo = oracleMapper.getMatchingInfo(params);
  289 + Map<String, Map> mMatchingInfo = new HashMap<String, Map>();
  290 + for (Map curMap : lMatchingInfo) {
  291 + String sKey = String.valueOf(curMap.get("SEQ"));
  292 + mMatchingInfo.put(sKey, curMap);
  293 + }
  294 +
  295 + List<Map> lOrgData = oracleMapper.getOriginalData(params);
  296 + int iInserted = 0;
  297 + int limit = 1000; //1000건씩 batch
  298 + List<Map> lInserted = new ArrayList<Map>();
  299 + for (Map curRec : lOrgData) {
  300 + String sKey = String.valueOf(curRec.get("SEQ"));
  301 + Map curMatchingInfo = mMatchingInfo.get(sKey);
  302 + if (curMatchingInfo != null) {
  303 + curRec.put("MATCHING_CAUSE", curMatchingInfo.get("MATCHING_CAUSE"));
  304 + curRec.put("MATCH_KEY", curMatchingInfo.get("MATCH_KEY"));
  305 + }
  306 + lInserted.add(curRec);
  307 + if (lInserted.size() == limit) {
  308 + matchingInnerDelingMapper.insertOriginalData(Map.of("itemList", lInserted));
  309 + iInserted = iInserted + lInserted.size();
  310 + lInserted.clear();
  311 + }
  312 + }
  313 + if (lInserted.size() > 0) {
  314 + matchingInnerDelingMapper.insertOriginalData(Map.of("itemList", lInserted));
  315 + iInserted = iInserted + lInserted.size();
  316 + }
  317 + log.info("Inserted OrgData : " + iInserted + "건");
  318 +
  319 + iDeleted = matchingInnerDelingMapper.deleteData(params);
  320 + log.debug("Deleted Work Data : " + iDeleted + "건");
  321 + iInserted = matchingInnerDelingMapper.insertDataFromOriginal(params);
  322 + log.info("Inserted Work Data : " + iInserted + "건");
  323 +
  324 + iDeleted = matchingInnerDelingMapper.deleteDataAi(params);
  325 + log.debug("Deleted Work AI Data : " + iDeleted + "건");
  326 + iInserted = matchingInnerDelingMapper.insertDataAiFromOriginal(params);
  327 + log.info("Inserted Work AI Data : " + iInserted + "건");
  328 +
  329 + long endTime = System.currentTimeMillis();
  330 + log.info("Create Data Ended : " + endTime);
  331 + log.info("Running Time : " + (endTime - startTime) + "ms");
  332 +
  333 + //작업종료에 대한 로그 업데이트
  334 + paramLog.put("exit_code", "0");
  335 + paramLog.put("exit_message", "");
  336 + matchingInnerDelingMapper.finishUserJob(paramLog);
  337 + }
  338 +
  339 +
  340 +
  341 + @SuppressWarnings("rawtypes")
485 342 @Async("commAsync")
486   - public void returnRwsultData(String jobGroupId, Map<String, String> params) throws Exception {
487   -
488   - // Job Create Log
489   - UUID uuid = UUID.randomUUID();
490   - HashMap<String, String> mt = new HashMap<String, String>();
491   - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
492   - String sDate = dateFormat.format(new Date()) + ":" + uuid.toString();
493   -
494   - Map<String, Object> paramLog = new HashMap<String, Object>();
495   - paramLog.put("user_job_group", jobGroupId);
496   - paramLog.put("user_job_id", sDate);
497   - paramLog.put("user_job_name", "결과데이타리턴(" + params.toString() + ")");
498   - matchingInnerDelingMapper.createUserJob(paramLog);
499   -
500   - long startTime = System.currentTimeMillis();
501   - log.info("Update Data Started : " + startTime);
502   - log.debug("params=" + params.toString());
503   -
504   - // 기존데이타 초기화
  343 + public void returnRwsultData(String jobGroupId, Map<String, String> params) throws Exception {
  344 +
  345 + //Job Create Log
  346 + UUID uuid = UUID.randomUUID();
  347 + HashMap<String, String> mt = new HashMap<String, String>();
  348 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
  349 + String sDate = dateFormat.format(new Date()) + ":" + uuid.toString();
  350 +
  351 + Map<String, Object> paramLog = new HashMap<String, Object>();
  352 + paramLog.put("user_job_group", jobGroupId);
  353 + paramLog.put("user_job_id", sDate);
  354 + paramLog.put("user_job_name", "결과데이타리턴(" + params.toString() + ")");
  355 + matchingInnerDelingMapper.createUserJob(paramLog);
  356 +
  357 + long startTime = System.currentTimeMillis();
  358 + log.info("Update Data Started : " + startTime);
  359 + log.debug("params=" + params.toString());
  360 +
  361 + //기존데이타 초기화
505 362 int iUpdated = matchingInnerDelingMapper.updateClearNewMatchKey(params);
506   - // 새로운 매칭키 생성
  363 + //새로운 매칭키 생성
507 364 iUpdated = matchingInnerDelingMapper.updateNewMatchKey(params);
508   - log.debug("Updated OrgData : " + iUpdated + "건");
509   -
510   - long endTime = System.currentTimeMillis();
511   - log.info("Update Data Ended : " + endTime);
512   - log.info("Running Time : " + (endTime - startTime) + "ms");
513   -
514   - // 작업종료에 대한 로그 업데이트
515   - paramLog.put("exit_code", "0");
516   - paramLog.put("exit_message", "");
517   - matchingInnerDelingMapper.finishUserJob(paramLog);
518   -
519   - }
520   -
  365 + log.debug("Updated OrgData : " + iUpdated + "건");
  366 +
  367 + long endTime = System.currentTimeMillis();
  368 + log.info("Update Data Ended : " + endTime);
  369 + log.info("Running Time : " + (endTime - startTime) + "ms");
  370 +
  371 +
  372 + //작업종료에 대한 로그 업데이트
  373 + paramLog.put("exit_code", "0");
  374 + paramLog.put("exit_message", "");
  375 + matchingInnerDelingMapper.finishUserJob(paramLog);
  376 +
  377 + }
521 378 }
... ...
src/main/java/com/batch/util/FileUtil.java
1 1 package com.batch.util;
2 2  
3 3 import java.io.BufferedReader;
4   -import java.io.IOException;
5 4 import java.io.InputStreamReader;
6   -import java.io.RandomAccessFile;
7 5  
8 6 import org.springframework.core.io.ClassPathResource;
9 7  
... ... @@ -14,85 +12,27 @@ import com.google.gson.JsonParser;
14 12 public class FileUtil {
15 13  
16 14 public static StringBuffer readFileToString(String resourceName) {
17   - StringBuffer sb = new StringBuffer();
18   - try {
  15 + StringBuffer sb = new StringBuffer();
  16 + try {
19 17 ClassPathResource resource = new ClassPathResource(resourceName);
20   - BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream()));
21   -
22   - // br.readLine() 이 null 인지 검사할 때 한번 사용되므로 String 에 먼저 저장해둬야한다.
23   - String s = "";
24   - while ((s = br.readLine()) != null) {
25   - sb.append(s);
26   - }
27   - } catch (Exception e) {
28   - sb.append(e.getStackTrace());
29   - }
30   - return sb;
31   - }
32   -
33   - /**
34   - * 파일 마지막 부터 lineCnt행 읽기
35   - * @param resourceName
36   - * @param lineCnt
37   - * @return
38   - */
39   - public static StringBuffer readFileLastLines(String resourceName, int lineCnt, String fEnc, String toEnc) {
40   - StringBuffer sb = new StringBuffer();
41   -
42   -// lineCnt = 50; // test case
43   -// resourceName = "D://logs/localhost_access_log.2019-03-26.txt"; // test case
44   -
45   - if(resourceName == null || resourceName.isEmpty()) {
46   - sb.append("파일 경로가 입력되지 않았습니다.");
47   - }else if(lineCnt < 1) {
48   - sb.append("라인갯수가 입력되지 않았습니다.");
49   - }else {
50   - RandomAccessFile rf = null;
51   -
52   - try {
53   -
54   - rf = new RandomAccessFile(resourceName, "r");
55   - long len = rf.length();
56   - for (long i = len - 1; i >= 0; i--) {
57   - rf.seek(i);
58   - char c = (char) rf.read();
59   - if (c == '\n') {
60   - lineCnt--;
61   - if(lineCnt < 0) {
62   - break;
63   - }
64   - }
65   -
66   - sb.insert(0, c);
67   - }
68   -
69   - /*** 필요 시 파일 인코딩. utf-8 **/
70   - if(fEnc != null && !fEnc.isBlank() && toEnc != null && !toEnc.isBlank()) {
71   - sb = new StringBuffer(new String((sb.toString()).getBytes(fEnc), toEnc));
72   - }
73   -
74   - } catch (Exception e) {
75   -// e.printStackTrace();
76   - sb = new StringBuffer("유효한 파일경로가 아닙니다.("+resourceName+")");
77   - } finally {
78   - if (rf != null) {
79   - try {
80   - rf.close();
81   - } catch (IOException e) {
82   -// e.printStackTrace();
83   - sb = new StringBuffer("유효한 파일경로가 아닙니다.("+resourceName+")");
84   - }
85   - }
86   - }
87   - }
88   - return sb;
  18 + BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream()));
  19 +
  20 + // br.readLine() 이 null 인지 검사할 때 한번 사용되므로 String 에 먼저 저장해둬야한다.
  21 + String s = "";
  22 + while((s = br.readLine()) != null){
  23 + sb.append(s);
  24 + }
  25 + } catch (Exception e) {
  26 + sb.append(e.getStackTrace());
  27 + }
  28 + return sb;
89 29 }
90 30  
91 31 public static JsonObject strToJsonObj(String jsonString) {
92 32 JsonObject jsonObject = JsonParser.parseString(jsonString).getAsJsonObject();
93 33 return jsonObject;
94 34 }
95   -
  35 +
96 36 public static Object strToObj(String jsonString, Class<?> anyClass) {
97 37 Gson gson = new Gson();
98 38 Object convertedObject = gson.fromJson(jsonString, anyClass);
... ... @@ -104,5 +44,5 @@ public class FileUtil {
104 44 String stringObject = gson.toJson(obj);
105 45 return stringObject;
106 46 }
107   -
  47 +
108 48 }
... ...
src/main/java/com/batch/util/StatisticsUtil.java
... ... @@ -25,16 +25,6 @@ public class StatisticsUtil {
25 25 // log.info("resultAll=" + resultAll.toString());
26 26 // }
27 27  
28   - private static long mtch_num = 0;
29   -
30   - public static long getMtchNum() {
31   - return ++mtch_num;
32   - }
33   -
34   - public static void initMtchNum() {
35   - mtch_num = 0;
36   - }
37   -
38 28 /**
39 29 * 조합 구하기
40 30 *
... ...
src/main/resources/application.properties
... ... @@ -44,9 +44,9 @@ spring.devtools.restart.enabled=true
44 44 #p6spy query logging
45 45 decorator.datasource.p6spy.enable-logging=true
46 46  
47   -logging.level.root=debug
48   -logging.level.com.batch=debug
49   -logging.level.p6spy=off
  47 +logging.level.root=info
  48 +logging.level.com.batch=info
  49 +logging.level.p6spy=debug
50 50  
51 51 #Thread Count 설정
52 52 thread.comm.count=10
... ...
src/main/resources/matchingSetup.json
... ... @@ -3,7 +3,7 @@
3 3 {
4 4 "active": true,
5 5 "type": "A-A",
6   - "typeName": "자기수익(대사키),상대비용(대사키),비교(년월,비교키,거래금액)",
  6 + "typeName": "자기수익(대사키,거래통화),상대비용(대사키,거래통화),비교(년월,비교키,거래통화,거래금액)",
7 7  
8 8 "condOne": {
9 9 "cond": [
... ... @@ -13,7 +13,8 @@
13 13 "cmpnsp_ky != ''"
14 14 ],
15 15 "makeCompareKey": [
16   - "cmpnsp_ky"
  16 + "cmpnsp_ky",
  17 + "delng_crncy"
17 18 ]
18 19 },
19 20 "condTwo": {
... ... @@ -24,7 +25,8 @@
24 25 "cmpnsp_ky != ''"
25 26 ],
26 27 "makeCompareKey": [
27   - "cmpnsp_ky"
  28 + "cmpnsp_ky",
  29 + "delng_crncy"
28 30 ]
29 31 },
30 32 "uniqueKey": [
... ... @@ -37,6 +39,7 @@
37 39 "compareField": [
38 40 "accnut_ym",
39 41 "compare_ky",
  42 + "delng_crncy",
40 43 "delng_amt"
41 44 ],
42 45 "matchingType": "mtch_ty",
... ... @@ -46,7 +49,7 @@
46 49 {
47 50 "active": true,
48 51 "type": "A-B",
49   - "typeName": "자기채권(대사키),상대채무(대사키),비교(년월,비교키,거래금액)",
  52 + "typeName": "자기채권(대사키,거래통화),상대채무(대사키,거래통화),비교(년월,비교키,거래통화,거래금액)",
50 53  
51 54 "condOne": {
52 55 "cond": [
... ... @@ -56,7 +59,8 @@
56 59 "cmpnsp_ky != ''"
57 60 ],
58 61 "makeCompareKey": [
59   - "cmpnsp_ky"
  62 + "cmpnsp_ky",
  63 + "delng_crncy"
60 64 ]
61 65 },
62 66 "condTwo": {
... ... @@ -67,7 +71,8 @@
67 71 "cmpnsp_ky != ''"
68 72 ],
69 73 "makeCompareKey": [
70   - "cmpnsp_ky"
  74 + "cmpnsp_ky",
  75 + "delng_crncy"
71 76 ]
72 77 },
73 78 "uniqueKey": [
... ... @@ -80,6 +85,7 @@
80 85 "compareField": [
81 86 "accnut_ym",
82 87 "compare_ky",
  88 + "delng_crncy",
83 89 "delng_amt"
84 90 ],
85 91 "matchingType": "mtch_ty",
... ... @@ -93,7 +99,7 @@
93 99 {
94 100 "active": true,
95 101 "type": "B-A",
96   - "typeName": "자기수익(합산키),상대비용(합산키),비교(년월,거래금액)",
  102 + "typeName": "자기수익(합산키,거래통화),상대비용(합산키,거래통화),비교(년월,거래통화,거래금액)",
97 103  
98 104 "condOne": {
99 105 "cond": [
... ... @@ -103,7 +109,8 @@
103 109 "ext_key1 != ''"
104 110 ],
105 111 "makeCompareKey": [
106   - "ext_key1"
  112 + "ext_key1",
  113 + "delng_crncy"
107 114 ]
108 115 },
109 116 "condTwo": {
... ... @@ -114,7 +121,8 @@
114 121 "ext_key1 != ''"
115 122 ],
116 123 "makeCompareKey": [
117   - "ext_key1"
  124 + "ext_key1",
  125 + "delng_crncy"
118 126 ]
119 127 },
120 128 "uniqueKey": [
... ... @@ -126,6 +134,7 @@
126 134 "amtField": "sum(delng_amt) as delng_amt",
127 135 "compareField": [
128 136 "accnut_ym",
  137 + "delng_crncy",
129 138 "delng_amt"
130 139 ],
131 140 "matchingType": "mtch_ty",
... ... @@ -135,7 +144,7 @@
135 144 {
136 145 "active": true,
137 146 "type": "B-B",
138   - "typeName": "자기채권(합산키),상대채무(합산키),비교(년월,거래금액)",
  147 + "typeName": "자기채권(합산키,거래통화),상대채무(합산키,거래통화),비교(년월,거래통화,거래금액)",
139 148  
140 149 "condOne": {
141 150 "cond": [
... ... @@ -145,7 +154,8 @@
145 154 "ext_key1 != ''"
146 155 ],
147 156 "makeCompareKey": [
148   - "ext_key1"
  157 + "ext_key1",
  158 + "delng_crncy"
149 159 ]
150 160 },
151 161 "condTwo": {
... ... @@ -156,7 +166,8 @@
156 166 "ext_key1 != ''"
157 167 ],
158 168 "makeCompareKey": [
159   - "ext_key1"
  169 + "ext_key1",
  170 + "delng_crncy"
160 171 ]
161 172 },
162 173 "uniqueKey": [
... ... @@ -168,6 +179,7 @@
168 179 "amtField": "sum(delng_amt) as delng_amt",
169 180 "compareField": [
170 181 "accnut_ym",
  182 + "delng_crncy",
171 183 "delng_amt"
172 184 ],
173 185 "matchingType": "mtch_ty",
... ... @@ -183,7 +195,7 @@
183 195 {
184 196 "active": true,
185 197 "type": "C-A",
186   - "typeName": "자기수익(전표번호),상대비용(전표번호),비교(년월,거래금액)",
  198 + "typeName": "자기수익(전표번호,거래통화),상대비용(전표번호,거래통화),비교(년월,거래통화,거래금액)",
187 199  
188 200 "condOne": {
189 201 "cond": [
... ... @@ -193,7 +205,8 @@
193 205 "chit_no != ''"
194 206 ],
195 207 "makeCompareKey": [
196   - "chit_no"
  208 + "chit_no",
  209 + "delng_crncy"
197 210 ]
198 211 },
199 212 "condTwo": {
... ... @@ -204,7 +217,8 @@
204 217 "chit_no != ''"
205 218 ],
206 219 "makeCompareKey": [
207   - "chit_no"
  220 + "chit_no",
  221 + "delng_crncy"
208 222 ]
209 223 },
210 224 "uniqueKey": [
... ... @@ -216,6 +230,7 @@
216 230 "amtField": "sum(delng_amt) as delng_amt",
217 231 "compareField": [
218 232 "accnut_ym",
  233 + "delng_crncy",
219 234 "delng_amt"
220 235 ],
221 236 "matchingType": "mtch_ty",
... ... @@ -225,7 +240,7 @@
225 240 {
226 241 "active": true,
227 242 "type": "C-B",
228   - "typeName": "자기채권(전표번호),상대채무(전표번호),비교(년월,거래금액)",
  243 + "typeName": "자기채권(전표번호,거래통화),상대채무(전표번호,거래통화),비교(년월,거래통화,거래금액)",
229 244  
230 245 "condOne": {
231 246 "cond": [
... ... @@ -235,7 +250,8 @@
235 250 "chit_no != ''"
236 251 ],
237 252 "makeCompareKey": [
238   - "chit_no"
  253 + "chit_no",
  254 + "delng_crncy"
239 255 ]
240 256 },
241 257 "condTwo": {
... ... @@ -245,7 +261,8 @@
245 261 "chit_no is not null"
246 262 ],
247 263 "makeCompareKey": [
248   - "chit_no"
  264 + "chit_no",
  265 + "delng_crncy"
249 266 ]
250 267 },
251 268 "uniqueKey": [
... ... @@ -257,6 +274,7 @@
257 274 "amtField": "sum(delng_amt) as delng_amt",
258 275 "compareField": [
259 276 "accnut_ym",
  277 + "delng_crncy",
260 278 "delng_amt"
261 279 ],
262 280 "matchingType": "mtch_ty",
... ... @@ -272,7 +290,7 @@
272 290 {
273 291 "active": true,
274 292 "type": "D-A",
275   - "typeName": "자기수익(거래일자),상대비용(거래일자),비교(년월,거래금액)",
  293 + "typeName": "자기수익(거래일자,거래통화),상대비용(거래일자,거래통화),비교(년월,거래통화,거래금액)",
276 294  
277 295 "condOne": {
278 296 "cond": [
... ... @@ -280,7 +298,8 @@
280 298 "mtch_ty is null"
281 299 ],
282 300 "makeCompareKey": [
283   - "delng_de"
  301 + "delng_de",
  302 + "delng_crncy"
284 303 ]
285 304 },
286 305 "condTwo": {
... ... @@ -289,7 +308,8 @@
289 308 "mtch_ty is null"
290 309 ],
291 310 "makeCompareKey": [
292   - "delng_de"
  311 + "delng_de",
  312 + "delng_crncy"
293 313 ]
294 314 },
295 315 "uniqueKey": [
... ... @@ -301,6 +321,7 @@
301 321 "amtField": "sum(delng_amt) as delng_amt",
302 322 "compareField": [
303 323 "accnut_ym",
  324 + "delng_crncy",
304 325 "delng_amt"
305 326 ],
306 327 "matchingType": "mtch_ty",
... ... @@ -310,7 +331,7 @@
310 331 {
311 332 "active": true,
312 333 "type": "D-B",
313   - "typeName": "자기채권(거래일자),상대채무(거래일자),비교(년월,거래금액)",
  334 + "typeName": "자기채권(거래일자,거래통화),상대채무(거래일자,거래통화),비교(년월,거래통화,거래금액)",
314 335  
315 336 "condOne": {
316 337 "cond": [
... ... @@ -318,7 +339,8 @@
318 339 "mtch_ty is null"
319 340 ],
320 341 "makeCompareKey": [
321   - "delng_de"
  342 + "delng_de",
  343 + "delng_crncy"
322 344 ]
323 345 },
324 346 "condTwo": {
... ... @@ -327,7 +349,8 @@
327 349 "mtch_ty is null"
328 350 ],
329 351 "makeCompareKey": [
330   - "delng_de"
  352 + "delng_de",
  353 + "delng_crncy"
331 354 ]
332 355 },
333 356 "uniqueKey": [
... ... @@ -339,6 +362,7 @@
339 362 "amtField": "sum(delng_amt) as delng_amt",
340 363 "compareField": [
341 364 "accnut_ym",
  365 + "delng_crncy",
342 366 "delng_amt"
343 367 ],
344 368 "matchingType": "mtch_ty",
... ... @@ -353,7 +377,7 @@
353 377 {
354 378 "active": true,
355 379 "type": "E-A",
356   - "typeName": "자기수익(거래월),상대비용(거래월),비교(년월,거래금액)",
  380 + "typeName": "자기수익(거래월,거래통화),상대비용(거래월,거래통화),비교(년월,거래통화,거래금액)",
357 381  
358 382 "condOne": {
359 383 "cond": [
... ... @@ -361,7 +385,8 @@
361 385 "mtch_ty is null"
362 386 ],
363 387 "makeCompareKey": [
364   - "substring(delng_de,1,6)"
  388 + "substring(delng_de,1,6)",
  389 + "delng_crncy"
365 390 ]
366 391 },
367 392 "condTwo": {
... ... @@ -370,7 +395,8 @@
370 395 "mtch_ty is null"
371 396 ],
372 397 "makeCompareKey": [
373   - "substring(delng_de,1,6)"
  398 + "substring(delng_de,1,6)",
  399 + "delng_crncy"
374 400 ]
375 401 },
376 402 "uniqueKey": [
... ... @@ -382,6 +408,7 @@
382 408 "amtField": "sum(delng_amt) as delng_amt",
383 409 "compareField": [
384 410 "accnut_ym",
  411 + "delng_crncy",
385 412 "delng_amt"
386 413 ],
387 414 "matchingType": "mtch_ty",
... ... @@ -391,7 +418,7 @@
391 418 {
392 419 "active": true,
393 420 "type": "E-B",
394   - "typeName": "자기채권(거래월),상대채무(거래월),비교(년월,거래금액)",
  421 + "typeName": "자기채권(거래월,거래통화),상대채무(거래월,거래통화),비교(년월,거래통화,거래금액)",
395 422  
396 423 "condOne": {
397 424 "cond": [
... ... @@ -399,7 +426,8 @@
399 426 "mtch_ty is null"
400 427 ],
401 428 "makeCompareKey": [
402   - "substring(delng_de,1,6)"
  429 + "substring(delng_de,1,6)",
  430 + "delng_crncy"
403 431 ]
404 432 },
405 433 "condTwo": {
... ... @@ -408,7 +436,8 @@
408 436 "mtch_ty is null"
409 437 ],
410 438 "makeCompareKey": [
411   - "substring(delng_de,1,6)"
  439 + "substring(delng_de,1,6)",
  440 + "delng_crncy"
412 441 ]
413 442 },
414 443 "uniqueKey": [
... ... @@ -420,6 +449,7 @@
420 449 "amtField": "sum(delng_amt) as delng_amt",
421 450 "compareField": [
422 451 "accnut_ym",
  452 + "delng_crncy",
423 453 "delng_amt"
424 454 ],
425 455 "matchingType": "mtch_ty",
... ... @@ -437,7 +467,7 @@
437 467 {
438 468 "active": true,
439 469 "type": "F-A",
440   - "typeName": "자기수익(전체),상대비용(전체),비교(년월,거래금액)",
  470 + "typeName": "자기수익(전체,거래통화),상대비용(전체,거래통화),비교(년월,거래통화,거래금액)",
441 471  
442 472 "condOne": {
443 473 "cond": [
... ... @@ -446,7 +476,8 @@
446 476 ],
447 477 "makeCompareKey": [
448 478 "sys_se",
449   - "accnut_ym"
  479 + "accnut_ym",
  480 + "delng_crncy"
450 481 ]
451 482 },
452 483 "condTwo": {
... ... @@ -456,7 +487,8 @@
456 487 ],
457 488 "makeCompareKey": [
458 489 "sys_se",
459   - "accnut_ym"
  490 + "accnut_ym",
  491 + "delng_crncy"
460 492 ]
461 493 },
462 494 "uniqueKey": [
... ... @@ -468,6 +500,7 @@
468 500 "amtField": "sum(delng_amt) as delng_amt",
469 501 "compareField": [
470 502 "accnut_ym",
  503 + "delng_crncy",
471 504 "delng_amt"
472 505 ],
473 506 "matchingType": "mtch_ty",
... ... @@ -477,7 +510,7 @@
477 510 {
478 511 "active": true,
479 512 "type": "F-B",
480   - "typeName": "자기채권(전체),상대채무(전체),비교(년월,거래금액)",
  513 + "typeName": "자기채권(전체,거래통화),상대채무(전체,거래통화),비교(년월,거래통화,거래금액)",
481 514  
482 515 "condOne": {
483 516 "cond": [
... ... @@ -486,7 +519,8 @@
486 519 ],
487 520 "makeCompareKey": [
488 521 "sys_se",
489   - "accnut_ym"
  522 + "accnut_ym",
  523 + "delng_crncy"
490 524 ]
491 525 },
492 526 "condTwo": {
... ... @@ -496,7 +530,8 @@
496 530 ],
497 531 "makeCompareKey": [
498 532 "sys_se",
499   - "accnut_ym"
  533 + "accnut_ym",
  534 + "delng_crncy"
500 535 ]
501 536 },
502 537 "uniqueKey": [
... ... @@ -508,6 +543,7 @@
508 543 "amtField": "sum(delng_amt) as delng_amt",
509 544 "compareField": [
510 545 "accnut_ym",
  546 + "delng_crncy",
511 547 "delng_amt"
512 548 ],
513 549 "matchingType": "mtch_ty",
... ... @@ -522,7 +558,7 @@
522 558 {
523 559 "active": true,
524 560 "type": "G-A",
525   - "typeName": "개별자기수익,상대개별비용,비교(년월,거래금액)",
  561 + "typeName": "개별자기수익(거래통화),상대개별비용(거래통화),비교(년월,거래통화,거래금액)",
526 562  
527 563 "condOne": {
528 564 "cond": [
... ... @@ -532,7 +568,8 @@
532 568 "makeCompareKey": [
533 569 "sys_se",
534 570 "accnut_ym",
535   - "cast(sn as text)"
  571 + "cast(sn as text)",
  572 + "delng_crncy"
536 573 ]
537 574 },
538 575 "condTwo": {
... ... @@ -543,7 +580,8 @@
543 580 "makeCompareKey": [
544 581 "sys_se",
545 582 "accnut_ym",
546   - "cast(sn as text)"
  583 + "cast(sn as text)",
  584 + "delng_crncy"
547 585 ]
548 586 },
549 587 "uniqueKey": [
... ... @@ -555,6 +593,7 @@
555 593 "amtField": "sum(delng_amt) as delng_amt",
556 594 "compareField": [
557 595 "accnut_ym",
  596 + "delng_crncy",
558 597 "delng_amt"
559 598 ],
560 599 "matchingType": "mtch_ty",
... ... @@ -564,7 +603,7 @@
564 603 {
565 604 "active": true,
566 605 "type": "G-B",
567   - "typeName": "개별자기채권,상대개별채무,비교(년월,거래금액)",
  606 + "typeName": "개별자기채권(거래통화),상대개별채무(거래통화),비교(년월,거래통화,거래금액)",
568 607  
569 608 "condOne": {
570 609 "cond": [
... ... @@ -574,7 +613,8 @@
574 613 "makeCompareKey": [
575 614 "sys_se",
576 615 "accnut_ym",
577   - "cast(sn as text)"
  616 + "cast(sn as text)",
  617 + "delng_crncy"
578 618 ]
579 619 },
580 620 "condTwo": {
... ... @@ -585,7 +625,8 @@
585 625 "makeCompareKey": [
586 626 "sys_se",
587 627 "accnut_ym",
588   - "cast(sn as text)"
  628 + "cast(sn as text)",
  629 + "delng_crncy"
589 630 ]
590 631 },
591 632 "uniqueKey": [
... ... @@ -597,6 +638,7 @@
597 638 "amtField": "sum(delng_amt) as delng_amt",
598 639 "compareField": [
599 640 "accnut_ym",
  641 + "delng_crncy",
600 642 "delng_amt"
601 643 ],
602 644 "matchingType": "mtch_ty",
... ... @@ -614,7 +656,7 @@
614 656 {
615 657 "active": true,
616 658 "type": "H-AA",
617   - "typeName": "자기수익(거래일자),개별상대비용,비교(년월,거래금액)",
  659 + "typeName": "자기수익(거래일자,거래통화),개별상대비용(거래통화),비교(년월,거래통화,거래금액)",
618 660  
619 661 "condOne": {
620 662 "cond": [
... ... @@ -624,7 +666,8 @@
624 666 "makeCompareKey": [
625 667 "sys_se",
626 668 "accnut_ym",
627   - "delng_de"
  669 + "delng_de",
  670 + "delng_crncy"
628 671 ]
629 672 },
630 673 "condTwo": {
... ... @@ -635,7 +678,8 @@
635 678 "makeCompareKey": [
636 679 "sys_se",
637 680 "accnut_ym",
638   - "cast(sn as text)"
  681 + "cast(sn as text)",
  682 + "delng_crncy"
639 683 ]
640 684 },
641 685 "uniqueKey": [
... ... @@ -647,6 +691,7 @@
647 691 "amtField": "sum(delng_amt) as delng_amt",
648 692 "compareField": [
649 693 "accnut_ym",
  694 + "delng_crncy",
650 695 "delng_amt"
651 696 ],
652 697 "matchingType": "mtch_ty",
... ... @@ -656,7 +701,7 @@
656 701 {
657 702 "active": true,
658 703 "type": "H-AB",
659   - "typeName": "자기수익(거래월),개별상대비용,비교(년월,거래금액)",
  704 + "typeName": "자기수익(거래월,거래통화),개별상대비용(거래통화),비교(년월,거래통화,거래금액)",
660 705  
661 706 "condOne": {
662 707 "cond": [
... ... @@ -666,7 +711,9 @@
666 711 "makeCompareKey": [
667 712 "sys_se",
668 713 "accnut_ym",
669   - "substring(delng_de,1,6)" ]
  714 + "substring(delng_de,1,6)",
  715 + "delng_crncy"
  716 + ]
670 717 },
671 718 "condTwo": {
672 719 "cond": [
... ... @@ -676,7 +723,8 @@
676 723 "makeCompareKey": [
677 724 "sys_se",
678 725 "accnut_ym",
679   - "cast(sn as text)"
  726 + "cast(sn as text)",
  727 + "delng_crncy"
680 728 ]
681 729 },
682 730 "uniqueKey": [
... ... @@ -688,6 +736,7 @@
688 736 "amtField": "sum(delng_amt) as delng_amt",
689 737 "compareField": [
690 738 "accnut_ym",
  739 + "delng_crncy",
691 740 "delng_amt"
692 741 ],
693 742 "matchingType": "mtch_ty",
... ... @@ -697,7 +746,7 @@
697 746 {
698 747 "active": true,
699 748 "type": "H-AC",
700   - "typeName": "자기수익(전표번호),개별상대비용,비교(년월,거래금액)",
  749 + "typeName": "자기수익(전표번호,거래통화),개별상대비용(거래통화),비교(년월,거래통화,거래금액)",
701 750  
702 751 "condOne": {
703 752 "cond": [
... ... @@ -709,7 +758,9 @@
709 758 "makeCompareKey": [
710 759 "sys_se",
711 760 "accnut_ym",
712   - "chit_no" ]
  761 + "chit_no",
  762 + "delng_crncy"
  763 + ]
713 764 },
714 765 "condTwo": {
715 766 "cond": [
... ... @@ -719,7 +770,8 @@
719 770 "makeCompareKey": [
720 771 "sys_se",
721 772 "accnut_ym",
722   - "cast(sn as text)"
  773 + "cast(sn as text)",
  774 + "delng_crncy"
723 775 ]
724 776 },
725 777 "uniqueKey": [
... ... @@ -731,6 +783,7 @@
731 783 "amtField": "sum(delng_amt) as delng_amt",
732 784 "compareField": [
733 785 "accnut_ym",
  786 + "delng_crncy",
734 787 "delng_amt"
735 788 ],
736 789 "matchingType": "mtch_ty",
... ... @@ -740,7 +793,7 @@
740 793 {
741 794 "active": true,
742 795 "type": "H-AD",
743   - "typeName": "자기수익(합산키),개별상대비용,비교(년월,거래금액)",
  796 + "typeName": "자기수익(합산키,거래통화),개별상대비용(거래통화),비교(년월,거래통화,거래금액)",
744 797  
745 798 "condOne": {
746 799 "cond": [
... ... @@ -752,7 +805,9 @@
752 805 "makeCompareKey": [
753 806 "sys_se",
754 807 "accnut_ym",
755   - "ext_key1" ]
  808 + "ext_key1",
  809 + "delng_crncy"
  810 + ]
756 811 },
757 812 "condTwo": {
758 813 "cond": [
... ... @@ -762,7 +817,8 @@
762 817 "makeCompareKey": [
763 818 "sys_se",
764 819 "accnut_ym",
765   - "cast(sn as text)"
  820 + "cast(sn as text)",
  821 + "delng_crncy"
766 822 ]
767 823 },
768 824 "uniqueKey": [
... ... @@ -774,6 +830,7 @@
774 830 "amtField": "sum(delng_amt) as delng_amt",
775 831 "compareField": [
776 832 "accnut_ym",
  833 + "delng_crncy",
777 834 "delng_amt"
778 835 ],
779 836 "matchingType": "mtch_ty",
... ... @@ -783,7 +840,7 @@
783 840 {
784 841 "active": true,
785 842 "type": "H-AE",
786   - "typeName": "자기비용(거래일자),개별상대수익,비교(년월,거래금액)",
  843 + "typeName": "자기비용(거래일자,거래통화),개별상대수익(거래통화),비교(년월,거래통화,거래금액)",
787 844  
788 845 "condOne": {
789 846 "cond": [
... ... @@ -793,7 +850,8 @@
793 850 "makeCompareKey": [
794 851 "sys_se",
795 852 "accnut_ym",
796   - "delng_de"
  853 + "delng_de",
  854 + "delng_crncy"
797 855 ]
798 856 },
799 857 "condTwo": {
... ... @@ -804,7 +862,8 @@
804 862 "makeCompareKey": [
805 863 "sys_se",
806 864 "accnut_ym",
807   - "cast(sn as text)"
  865 + "cast(sn as text)",
  866 + "delng_crncy"
808 867 ]
809 868 },
810 869 "uniqueKey": [
... ... @@ -816,6 +875,7 @@
816 875 "amtField": "sum(delng_amt) as delng_amt",
817 876 "compareField": [
818 877 "accnut_ym",
  878 + "delng_crncy",
819 879 "delng_amt"
820 880 ],
821 881 "matchingType": "mtch_ty",
... ... @@ -825,7 +885,7 @@
825 885 {
826 886 "active": true,
827 887 "type": "H-AF",
828   - "typeName": "자기비용(거래월),개별상대수익,비교(년월,거래금액)",
  888 + "typeName": "자기비용(거래월,거래통화),개별상대수익(거래통화),비교(년월,거래통화,거래금액)",
829 889  
830 890 "condOne": {
831 891 "cond": [
... ... @@ -835,7 +895,9 @@
835 895 "makeCompareKey": [
836 896 "sys_se",
837 897 "accnut_ym",
838   - "substring(delng_de,1,6)" ]
  898 + "substring(delng_de,1,6)",
  899 + "delng_crncy"
  900 + ]
839 901 },
840 902 "condTwo": {
841 903 "cond": [
... ... @@ -845,7 +907,8 @@
845 907 "makeCompareKey": [
846 908 "sys_se",
847 909 "accnut_ym",
848   - "cast(sn as text)"
  910 + "cast(sn as text)",
  911 + "delng_crncy"
849 912 ]
850 913 },
851 914 "uniqueKey": [
... ... @@ -857,6 +920,7 @@
857 920 "amtField": "sum(delng_amt) as delng_amt",
858 921 "compareField": [
859 922 "accnut_ym",
  923 + "delng_crncy",
860 924 "delng_amt"
861 925 ],
862 926 "matchingType": "mtch_ty",
... ... @@ -866,7 +930,7 @@
866 930 {
867 931 "active": true,
868 932 "type": "H-AG",
869   - "typeName": "자기비용(전표번호),개별상대수익,비교(년월,거래금액)",
  933 + "typeName": "자기비용(전표번호,거래통화),개별상대수익(거래통화),비교(년월,거래통화,거래금액)",
870 934  
871 935 "condOne": {
872 936 "cond": [
... ... @@ -878,7 +942,9 @@
878 942 "makeCompareKey": [
879 943 "sys_se",
880 944 "accnut_ym",
881   - "chit_no" ]
  945 + "chit_no",
  946 + "delng_crncy"
  947 + ]
882 948 },
883 949 "condTwo": {
884 950 "cond": [
... ... @@ -888,7 +954,8 @@
888 954 "makeCompareKey": [
889 955 "sys_se",
890 956 "accnut_ym",
891   - "cast(sn as text)"
  957 + "cast(sn as text)",
  958 + "delng_crncy"
892 959 ]
893 960 },
894 961 "uniqueKey": [
... ... @@ -900,6 +967,7 @@
900 967 "amtField": "sum(delng_amt) as delng_amt",
901 968 "compareField": [
902 969 "accnut_ym",
  970 + "delng_crncy",
903 971 "delng_amt"
904 972 ],
905 973 "matchingType": "mtch_ty",
... ... @@ -909,7 +977,7 @@
909 977 {
910 978 "active": true,
911 979 "type": "H-AH",
912   - "typeName": "자기비용(합산키),개별상대수익,비교(년월,거래금액)",
  980 + "typeName": "자기비용(합산키,거래통화),개별상대수익(거래통화),비교(년월,거래통화,거래금액)",
913 981  
914 982 "condOne": {
915 983 "cond": [
... ... @@ -921,7 +989,9 @@
921 989 "makeCompareKey": [
922 990 "sys_se",
923 991 "accnut_ym",
924   - "ext_key1" ]
  992 + "ext_key1",
  993 + "delng_crncy"
  994 + ]
925 995 },
926 996 "condTwo": {
927 997 "cond": [
... ... @@ -931,7 +1001,8 @@
931 1001 "makeCompareKey": [
932 1002 "sys_se",
933 1003 "accnut_ym",
934   - "cast(sn as text)"
  1004 + "cast(sn as text)",
  1005 + "delng_crncy"
935 1006 ]
936 1007 },
937 1008 "uniqueKey": [
... ... @@ -943,6 +1014,7 @@
943 1014 "amtField": "sum(delng_amt) as delng_amt",
944 1015 "compareField": [
945 1016 "accnut_ym",
  1017 + "delng_crncy",
946 1018 "delng_amt"
947 1019 ],
948 1020 "matchingType": "mtch_ty",
... ... @@ -955,7 +1027,7 @@
955 1027 {
956 1028 "active": true,
957 1029 "type": "H-BA",
958   - "typeName": "자기채권(거래일자),개별상대채무,비교(년월,거래금액)",
  1030 + "typeName": "자기채권(거래일자,거래통화),개별상대채무(거래통화),비교(년월,거래통화,거래금액)",
959 1031  
960 1032 "condOne": {
961 1033 "cond": [
... ... @@ -965,7 +1037,8 @@
965 1037 "makeCompareKey": [
966 1038 "sys_se",
967 1039 "accnut_ym",
968   - "delng_de"
  1040 + "delng_de",
  1041 + "delng_crncy"
969 1042 ]
970 1043 },
971 1044 "condTwo": {
... ... @@ -976,7 +1049,8 @@
976 1049 "makeCompareKey": [
977 1050 "sys_se",
978 1051 "accnut_ym",
979   - "cast(sn as text)"
  1052 + "cast(sn as text)",
  1053 + "delng_crncy"
980 1054 ]
981 1055 },
982 1056 "uniqueKey": [
... ... @@ -988,6 +1062,7 @@
988 1062 "amtField": "sum(delng_amt) as delng_amt",
989 1063 "compareField": [
990 1064 "accnut_ym",
  1065 + "delng_crncy",
991 1066 "delng_amt"
992 1067 ],
993 1068 "matchingType": "mtch_ty",
... ... @@ -997,7 +1072,7 @@
997 1072 {
998 1073 "active": true,
999 1074 "type": "H-BB",
1000   - "typeName": "자기채권(거래월),개별상대채무,비교(년월,거래금액)",
  1075 + "typeName": "자기채권(거래월,거래통화),개별상대채무(거래통화),비교(년월,거래통화,거래금액)",
1001 1076  
1002 1077 "condOne": {
1003 1078 "cond": [
... ... @@ -1007,7 +1082,9 @@
1007 1082 "makeCompareKey": [
1008 1083 "sys_se",
1009 1084 "accnut_ym",
1010   - "substring(delng_de,1,6)" ]
  1085 + "substring(delng_de,1,6)",
  1086 + "delng_crncy"
  1087 + ]
1011 1088 },
1012 1089 "condTwo": {
1013 1090 "cond": [
... ... @@ -1017,7 +1094,8 @@
1017 1094 "makeCompareKey": [
1018 1095 "sys_se",
1019 1096 "accnut_ym",
1020   - "cast(sn as text)"
  1097 + "cast(sn as text)",
  1098 + "delng_crncy"
1021 1099 ]
1022 1100 },
1023 1101 "uniqueKey": [
... ... @@ -1029,6 +1107,7 @@
1029 1107 "amtField": "sum(delng_amt) as delng_amt",
1030 1108 "compareField": [
1031 1109 "accnut_ym",
  1110 + "delng_crncy",
1032 1111 "delng_amt"
1033 1112 ],
1034 1113 "matchingType": "mtch_ty",
... ... @@ -1038,7 +1117,7 @@
1038 1117 {
1039 1118 "active": true,
1040 1119 "type": "H-BC",
1041   - "typeName": "자기채권(전표번호),개별상대채무,비교(년월,거래금액)",
  1120 + "typeName": "자기채권(전표번호,거래통화),개별상대채무(거래통화),비교(년월,거래통화,거래금액)",
1042 1121  
1043 1122 "condOne": {
1044 1123 "cond": [
... ... @@ -1050,7 +1129,9 @@
1050 1129 "makeCompareKey": [
1051 1130 "sys_se",
1052 1131 "accnut_ym",
1053   - "chit_no" ]
  1132 + "chit_no",
  1133 + "delng_crncy"
  1134 + ]
1054 1135 },
1055 1136 "condTwo": {
1056 1137 "cond": [
... ... @@ -1060,7 +1141,8 @@
1060 1141 "makeCompareKey": [
1061 1142 "sys_se",
1062 1143 "accnut_ym",
1063   - "cast(sn as text)"
  1144 + "cast(sn as text)",
  1145 + "delng_crncy"
1064 1146 ]
1065 1147 },
1066 1148 "uniqueKey": [
... ... @@ -1072,6 +1154,7 @@
1072 1154 "amtField": "sum(delng_amt) as delng_amt",
1073 1155 "compareField": [
1074 1156 "accnut_ym",
  1157 + "delng_crncy",
1075 1158 "delng_amt"
1076 1159 ],
1077 1160 "matchingType": "mtch_ty",
... ... @@ -1081,7 +1164,7 @@
1081 1164 {
1082 1165 "active": true,
1083 1166 "type": "H-BD",
1084   - "typeName": "자기채권(합산키),개별상대채무,비교(년월,거래금액)",
  1167 + "typeName": "자기채권(합산키,거래통화),개별상대채무(거래통화),비교(년월,거래통화,거래금액)",
1085 1168  
1086 1169 "condOne": {
1087 1170 "cond": [
... ... @@ -1091,7 +1174,9 @@
1091 1174 "makeCompareKey": [
1092 1175 "sys_se",
1093 1176 "accnut_ym",
1094   - "ext_key1" ]
  1177 + "ext_key1",
  1178 + "delng_crncy"
  1179 + ]
1095 1180 },
1096 1181 "condTwo": {
1097 1182 "cond": [
... ... @@ -1101,7 +1186,8 @@
1101 1186 "makeCompareKey": [
1102 1187 "sys_se",
1103 1188 "accnut_ym",
1104   - "cast(sn as text)"
  1189 + "cast(sn as text)",
  1190 + "delng_crncy"
1105 1191 ]
1106 1192 },
1107 1193 "uniqueKey": [
... ... @@ -1113,6 +1199,7 @@
1113 1199 "amtField": "sum(delng_amt) as delng_amt",
1114 1200 "compareField": [
1115 1201 "accnut_ym",
  1202 + "delng_crncy",
1116 1203 "delng_amt"
1117 1204 ],
1118 1205 "matchingType": "mtch_ty",
... ... @@ -1122,7 +1209,7 @@
1122 1209 {
1123 1210 "active": true,
1124 1211 "type": "H-BE",
1125   - "typeName": "자기채무(거래일자),개별상대채권,비교(년월,거래금액)",
  1212 + "typeName": "자기채무(거래일자,거래통화),개별상대채권(거래통화),비교(년월,거래통화,거래금액)",
1126 1213  
1127 1214 "condOne": {
1128 1215 "cond": [
... ... @@ -1132,7 +1219,8 @@
1132 1219 "makeCompareKey": [
1133 1220 "sys_se",
1134 1221 "accnut_ym",
1135   - "delng_de"
  1222 + "delng_de",
  1223 + "delng_crncy"
1136 1224 ]
1137 1225 },
1138 1226 "condTwo": {
... ... @@ -1143,7 +1231,8 @@
1143 1231 "makeCompareKey": [
1144 1232 "sys_se",
1145 1233 "accnut_ym",
1146   - "cast(sn as text)"
  1234 + "cast(sn as text)",
  1235 + "delng_crncy"
1147 1236 ]
1148 1237 },
1149 1238 "uniqueKey": [
... ... @@ -1155,6 +1244,7 @@
1155 1244 "amtField": "sum(delng_amt) as delng_amt",
1156 1245 "compareField": [
1157 1246 "accnut_ym",
  1247 + "delng_crncy",
1158 1248 "delng_amt"
1159 1249 ],
1160 1250 "matchingType": "mtch_ty",
... ... @@ -1164,7 +1254,7 @@
1164 1254 {
1165 1255 "active": true,
1166 1256 "type": "H-BF",
1167   - "typeName": "자기채무(거래월),개별상대채권,비교(년월,거래금액)",
  1257 + "typeName": "자기채무(거래월(거래통화),개별상대채권(거래통화),비교(년월,거래통화,거래금액)",
1168 1258  
1169 1259 "condOne": {
1170 1260 "cond": [
... ... @@ -1174,7 +1264,9 @@
1174 1264 "makeCompareKey": [
1175 1265 "sys_se",
1176 1266 "accnut_ym",
1177   - "substring(delng_de,1,6)" ]
  1267 + "substring(delng_de,1,6)",
  1268 + "delng_crncy"
  1269 + ]
1178 1270 },
1179 1271 "condTwo": {
1180 1272 "cond": [
... ... @@ -1184,7 +1276,8 @@
1184 1276 "makeCompareKey": [
1185 1277 "sys_se",
1186 1278 "accnut_ym",
1187   - "cast(sn as text)"
  1279 + "cast(sn as text)",
  1280 + "delng_crncy"
1188 1281 ]
1189 1282 },
1190 1283 "uniqueKey": [
... ... @@ -1196,6 +1289,7 @@
1196 1289 "amtField": "sum(delng_amt) as delng_amt",
1197 1290 "compareField": [
1198 1291 "accnut_ym",
  1292 + "delng_crncy",
1199 1293 "delng_amt"
1200 1294 ],
1201 1295 "matchingType": "mtch_ty",
... ... @@ -1205,7 +1299,7 @@
1205 1299 {
1206 1300 "active": true,
1207 1301 "type": "H-BG",
1208   - "typeName": "자기채무(전표번호),개별상대채권,비교(년월,거래금액)",
  1302 + "typeName": "자기채무(전표번호,거래통화),개별상대채권(거래통화),비교(년월,거래통화,거래금액)",
1209 1303  
1210 1304 "condOne": {
1211 1305 "cond": [
... ... @@ -1217,7 +1311,9 @@
1217 1311 "makeCompareKey": [
1218 1312 "sys_se",
1219 1313 "accnut_ym",
1220   - "chit_no" ]
  1314 + "chit_no",
  1315 + "delng_crncy"
  1316 + ]
1221 1317 },
1222 1318 "condTwo": {
1223 1319 "cond": [
... ... @@ -1227,7 +1323,8 @@
1227 1323 "makeCompareKey": [
1228 1324 "sys_se",
1229 1325 "accnut_ym",
1230   - "cast(sn as text)"
  1326 + "cast(sn as text)",
  1327 + "delng_crncy"
1231 1328 ]
1232 1329 },
1233 1330 "uniqueKey": [
... ... @@ -1239,6 +1336,7 @@
1239 1336 "amtField": "sum(delng_amt) as delng_amt",
1240 1337 "compareField": [
1241 1338 "accnut_ym",
  1339 + "delng_crncy",
1242 1340 "delng_amt"
1243 1341 ],
1244 1342 "matchingType": "mtch_ty",
... ... @@ -1248,7 +1346,7 @@
1248 1346 {
1249 1347 "active": true,
1250 1348 "type": "H-BH",
1251   - "typeName": "자기채무(합산키),개별상대채권,비교(년월,거래금액)",
  1349 + "typeName": "자기채무(합산키,거래통화),개별상대채권(거래통화),비교(년월,거래통화,거래금액)",
1252 1350  
1253 1351 "condOne": {
1254 1352 "cond": [
... ... @@ -1258,7 +1356,9 @@
1258 1356 "makeCompareKey": [
1259 1357 "sys_se",
1260 1358 "accnut_ym",
1261   - "ext_key1" ]
  1359 + "ext_key1",
  1360 + "delng_crncy"
  1361 + ]
1262 1362 },
1263 1363 "condTwo": {
1264 1364 "cond": [
... ... @@ -1268,7 +1368,8 @@
1268 1368 "makeCompareKey": [
1269 1369 "sys_se",
1270 1370 "accnut_ym",
1271   - "cast(sn as text)"
  1371 + "cast(sn as text)",
  1372 + "delng_crncy"
1272 1373 ]
1273 1374 },
1274 1375 "uniqueKey": [
... ... @@ -1280,6 +1381,7 @@
1280 1381 "amtField": "sum(delng_amt) as delng_amt",
1281 1382 "compareField": [
1282 1383 "accnut_ym",
  1384 + "delng_crncy",
1283 1385 "delng_amt"
1284 1386 ],
1285 1387 "matchingType": "mtch_ty",
... ... @@ -1293,7 +1395,7 @@
1293 1395 {
1294 1396 "active": true,
1295 1397 "type": "I-AA",
1296   - "typeName": "자기수익(전체),상대비용(거래월),비교(년월,거래금액)",
  1398 + "typeName": "자기수익(전체,거래통화),상대비용(겨래월,거래통화),비교(년월,거래통화,거래금액)",
1297 1399  
1298 1400 "condOne": {
1299 1401 "cond": [
... ... @@ -1302,7 +1404,8 @@
1302 1404 ],
1303 1405 "makeCompareKey": [
1304 1406 "sys_se",
1305   - "accnut_ym"
  1407 + "accnut_ym",
  1408 + "delng_crncy"
1306 1409 ]
1307 1410 },
1308 1411 "condTwo": {
... ... @@ -1313,7 +1416,8 @@
1313 1416 "makeCompareKey": [
1314 1417 "sys_se",
1315 1418 "accnut_ym",
1316   - "substring(delng_de,1,6)"
  1419 + "substring(delng_de,1,6)",
  1420 + "delng_crncy"
1317 1421 ]
1318 1422 },
1319 1423 "uniqueKey": [
... ... @@ -1325,6 +1429,7 @@
1325 1429 "amtField": "sum(delng_amt) as delng_amt",
1326 1430 "compareField": [
1327 1431 "accnut_ym",
  1432 + "delng_crncy",
1328 1433 "delng_amt"
1329 1434 ],
1330 1435 "matchingType": "mtch_ty",
... ... @@ -1334,7 +1439,7 @@
1334 1439 {
1335 1440 "active": true,
1336 1441 "type": "I-AB",
1337   - "typeName": "자기수익(전체),상대비용(거래일자),비교(년월,거래금액)",
  1442 + "typeName": "자기수익(전체,거래통화),상대비용(겨래일자,거래통화),비교(년월,거래통화,거래금액)",
1338 1443  
1339 1444 "condOne": {
1340 1445 "cond": [
... ... @@ -1343,7 +1448,8 @@
1343 1448 ],
1344 1449 "makeCompareKey": [
1345 1450 "sys_se",
1346   - "accnut_ym"
  1451 + "accnut_ym",
  1452 + "delng_crncy"
1347 1453 ]
1348 1454 },
1349 1455 "condTwo": {
... ... @@ -1354,7 +1460,8 @@
1354 1460 "makeCompareKey": [
1355 1461 "sys_se",
1356 1462 "accnut_ym",
1357   - "delng_de"
  1463 + "delng_de",
  1464 + "delng_crncy"
1358 1465 ]
1359 1466 },
1360 1467 "uniqueKey": [
... ... @@ -1366,6 +1473,7 @@
1366 1473 "amtField": "sum(delng_amt) as delng_amt",
1367 1474 "compareField": [
1368 1475 "accnut_ym",
  1476 + "delng_crncy",
1369 1477 "delng_amt"
1370 1478 ],
1371 1479 "matchingType": "mtch_ty",
... ... @@ -1375,7 +1483,7 @@
1375 1483 {
1376 1484 "active": true,
1377 1485 "type": "I-AC",
1378   - "typeName": "자기비용(전체),상대수익(거래월),비교(년월,거래금액)",
  1486 + "typeName": "자기비용(전체,거래통화),상대수익(겨래월,거래통화),비교(년월,거래통화,거래금액)",
1379 1487  
1380 1488 "condOne": {
1381 1489 "cond": [
... ... @@ -1384,7 +1492,8 @@
1384 1492 ],
1385 1493 "makeCompareKey": [
1386 1494 "sys_se",
1387   - "accnut_ym"
  1495 + "accnut_ym",
  1496 + "delng_crncy"
1388 1497 ]
1389 1498 },
1390 1499 "condTwo": {
... ... @@ -1395,7 +1504,8 @@
1395 1504 "makeCompareKey": [
1396 1505 "sys_se",
1397 1506 "accnut_ym",
1398   - "substring(delng_de,1,6)"
  1507 + "substring(delng_de,1,6)",
  1508 + "delng_crncy"
1399 1509 ]
1400 1510 },
1401 1511 "uniqueKey": [
... ... @@ -1407,6 +1517,7 @@
1407 1517 "amtField": "sum(delng_amt) as delng_amt",
1408 1518 "compareField": [
1409 1519 "accnut_ym",
  1520 + "delng_crncy",
1410 1521 "delng_amt"
1411 1522 ],
1412 1523 "matchingType": "mtch_ty",
... ... @@ -1416,7 +1527,7 @@
1416 1527 {
1417 1528 "active": true,
1418 1529 "type": "I-AD",
1419   - "typeName": "자기비용(전체),상대수익(거래일자),비교(년월,거래금액)",
  1530 + "typeName": "자기비용(전체,거래통화),상대수익(겨래일자,거래통화),비교(년월,거래통화,거래금액)",
1420 1531  
1421 1532 "condOne": {
1422 1533 "cond": [
... ... @@ -1425,7 +1536,8 @@
1425 1536 ],
1426 1537 "makeCompareKey": [
1427 1538 "sys_se",
1428   - "accnut_ym"
  1539 + "accnut_ym",
  1540 + "delng_crncy"
1429 1541 ]
1430 1542 },
1431 1543 "condTwo": {
... ... @@ -1436,7 +1548,8 @@
1436 1548 "makeCompareKey": [
1437 1549 "sys_se",
1438 1550 "accnut_ym",
1439   - "delng_de"
  1551 + "delng_de",
  1552 + "delng_crncy"
1440 1553 ]
1441 1554 },
1442 1555 "uniqueKey": [
... ... @@ -1448,6 +1561,7 @@
1448 1561 "amtField": "sum(delng_amt) as delng_amt",
1449 1562 "compareField": [
1450 1563 "accnut_ym",
  1564 + "delng_crncy",
1451 1565 "delng_amt"
1452 1566 ],
1453 1567 "matchingType": "mtch_ty",
... ... @@ -1457,7 +1571,7 @@
1457 1571 {
1458 1572 "active": true,
1459 1573 "type": "I-AE",
1460   - "typeName": "자기수익(전체),상대비용(법인계정코드),비교(년월,거래금액)",
  1574 + "typeName": "자기수익(전체,거래통화),상대비용(법인계정코드,거래통화),비교(년월,거래통화,거래금액)",
1461 1575  
1462 1576 "condOne": {
1463 1577 "cond": [
... ... @@ -1466,7 +1580,8 @@
1466 1580 ],
1467 1581 "makeCompareKey": [
1468 1582 "sys_se",
1469   - "accnut_ym"
  1583 + "accnut_ym",
  1584 + "delng_crncy"
1470 1585 ]
1471 1586 },
1472 1587 "condTwo": {
... ... @@ -1477,7 +1592,8 @@
1477 1592 "makeCompareKey": [
1478 1593 "sys_se",
1479 1594 "accnut_ym",
1480   - "cpr_acnt_code"
  1595 + "cpr_acnt_code",
  1596 + "delng_crncy"
1481 1597 ]
1482 1598 },
1483 1599 "uniqueKey": [
... ... @@ -1489,6 +1605,7 @@
1489 1605 "amtField": "sum(delng_amt) as delng_amt",
1490 1606 "compareField": [
1491 1607 "accnut_ym",
  1608 + "delng_crncy",
1492 1609 "delng_amt"
1493 1610 ],
1494 1611 "matchingType": "mtch_ty",
... ... @@ -1498,7 +1615,7 @@
1498 1615 {
1499 1616 "active": true,
1500 1617 "type": "I-AF",
1501   - "typeName": "자기비용(전체),상대수익(법인계정코드),비교(년월,거래금액)",
  1618 + "typeName": "자기비용(전체,거래통화),상대수익(법인계정코드,거래통화),비교(년월,거래통화,거래금액)",
1502 1619  
1503 1620 "condOne": {
1504 1621 "cond": [
... ... @@ -1507,7 +1624,8 @@
1507 1624 ],
1508 1625 "makeCompareKey": [
1509 1626 "sys_se",
1510   - "accnut_ym"
  1627 + "accnut_ym",
  1628 + "delng_crncy"
1511 1629 ]
1512 1630 },
1513 1631 "condTwo": {
... ... @@ -1518,7 +1636,8 @@
1518 1636 "makeCompareKey": [
1519 1637 "sys_se",
1520 1638 "accnut_ym",
1521   - "cpr_acnt_code"
  1639 + "cpr_acnt_code",
  1640 + "delng_crncy"
1522 1641 ]
1523 1642 },
1524 1643 "uniqueKey": [
... ... @@ -1530,6 +1649,7 @@
1530 1649 "amtField": "sum(delng_amt) as delng_amt",
1531 1650 "compareField": [
1532 1651 "accnut_ym",
  1652 + "delng_crncy",
1533 1653 "delng_amt"
1534 1654 ],
1535 1655 "matchingType": "mtch_ty",
... ... @@ -1542,7 +1662,7 @@
1542 1662 {
1543 1663 "active": true,
1544 1664 "type": "I-BA",
1545   - "typeName": "자기채권(전체),상대채무(거래월),비교(년월,거래금액)",
  1665 + "typeName": "자기채권(전체,거래통화),상대채무(겨래월,거래통화),비교(년월,거래통화,거래금액)",
1546 1666  
1547 1667 "condOne": {
1548 1668 "cond": [
... ... @@ -1551,7 +1671,8 @@
1551 1671 ],
1552 1672 "makeCompareKey": [
1553 1673 "sys_se",
1554   - "accnut_ym"
  1674 + "accnut_ym",
  1675 + "delng_crncy"
1555 1676 ]
1556 1677 },
1557 1678 "condTwo": {
... ... @@ -1562,7 +1683,8 @@
1562 1683 "makeCompareKey": [
1563 1684 "sys_se",
1564 1685 "accnut_ym",
1565   - "substring(delng_de,1,6)"
  1686 + "substring(delng_de,1,6)",
  1687 + "delng_crncy"
1566 1688 ]
1567 1689 },
1568 1690 "uniqueKey": [
... ... @@ -1574,6 +1696,7 @@
1574 1696 "amtField": "sum(delng_amt) as delng_amt",
1575 1697 "compareField": [
1576 1698 "accnut_ym",
  1699 + "delng_crncy",
1577 1700 "delng_amt"
1578 1701 ],
1579 1702 "matchingType": "mtch_ty",
... ... @@ -1583,7 +1706,7 @@
1583 1706 {
1584 1707 "active": true,
1585 1708 "type": "I-BB",
1586   - "typeName": "자기채권(전체),상대채무(거래일자),비교(년월,거래금액)",
  1709 + "typeName": "자기채권(전체,거래통화),상대채무(겨래일자,거래통화),비교(년월,거래통화,거래금액)",
1587 1710  
1588 1711 "condOne": {
1589 1712 "cond": [
... ... @@ -1592,7 +1715,8 @@
1592 1715 ],
1593 1716 "makeCompareKey": [
1594 1717 "sys_se",
1595   - "accnut_ym"
  1718 + "accnut_ym",
  1719 + "delng_crncy"
1596 1720 ]
1597 1721 },
1598 1722 "condTwo": {
... ... @@ -1603,7 +1727,8 @@
1603 1727 "makeCompareKey": [
1604 1728 "sys_se",
1605 1729 "accnut_ym",
1606   - "delng_de"
  1730 + "delng_de",
  1731 + "delng_crncy"
1607 1732 ]
1608 1733 },
1609 1734 "uniqueKey": [
... ... @@ -1615,6 +1740,7 @@
1615 1740 "amtField": "sum(delng_amt) as delng_amt",
1616 1741 "compareField": [
1617 1742 "accnut_ym",
  1743 + "delng_crncy",
1618 1744 "delng_amt"
1619 1745 ],
1620 1746 "matchingType": "mtch_ty",
... ... @@ -1624,7 +1750,7 @@
1624 1750 {
1625 1751 "active": true,
1626 1752 "type": "I-BC",
1627   - "typeName": "자기채무(전체),상대채권(거래월),비교(년월,거래금액)",
  1753 + "typeName": "자기채무(전체,거래통화),상대채권(겨래월,거래통화),비교(년월,거래통화,거래금액)",
1628 1754  
1629 1755 "condOne": {
1630 1756 "cond": [
... ... @@ -1633,7 +1759,8 @@
1633 1759 ],
1634 1760 "makeCompareKey": [
1635 1761 "sys_se",
1636   - "accnut_ym"
  1762 + "accnut_ym",
  1763 + "delng_crncy"
1637 1764 ]
1638 1765 },
1639 1766 "condTwo": {
... ... @@ -1644,7 +1771,8 @@
1644 1771 "makeCompareKey": [
1645 1772 "sys_se",
1646 1773 "accnut_ym",
1647   - "substring(delng_de,1,6)"
  1774 + "substring(delng_de,1,6)",
  1775 + "delng_crncy"
1648 1776 ]
1649 1777 },
1650 1778 "uniqueKey": [
... ... @@ -1656,6 +1784,7 @@
1656 1784 "amtField": "sum(delng_amt) as delng_amt",
1657 1785 "compareField": [
1658 1786 "accnut_ym",
  1787 + "delng_crncy",
1659 1788 "delng_amt"
1660 1789 ],
1661 1790 "matchingType": "mtch_ty",
... ... @@ -1665,7 +1794,7 @@
1665 1794 {
1666 1795 "active": true,
1667 1796 "type": "I-BD",
1668   - "typeName": "자기채무(전체),상대채권(거래일자),비교(년월,거래금액)",
  1797 + "typeName": "자기채무(전체,거래통화),상대채권(겨래일자,거래통화),비교(년월,거래통화,거래금액)",
1669 1798  
1670 1799 "condOne": {
1671 1800 "cond": [
... ... @@ -1674,7 +1803,8 @@
1674 1803 ],
1675 1804 "makeCompareKey": [
1676 1805 "sys_se",
1677   - "accnut_ym"
  1806 + "accnut_ym",
  1807 + "delng_crncy"
1678 1808 ]
1679 1809 },
1680 1810 "condTwo": {
... ... @@ -1685,7 +1815,8 @@
1685 1815 "makeCompareKey": [
1686 1816 "sys_se",
1687 1817 "accnut_ym",
1688   - "delng_de"
  1818 + "delng_de",
  1819 + "delng_crncy"
1689 1820 ]
1690 1821 },
1691 1822 "uniqueKey": [
... ... @@ -1697,6 +1828,7 @@
1697 1828 "amtField": "sum(delng_amt) as delng_amt",
1698 1829 "compareField": [
1699 1830 "accnut_ym",
  1831 + "delng_crncy",
1700 1832 "delng_amt"
1701 1833 ],
1702 1834 "matchingType": "mtch_ty",
... ... @@ -1706,7 +1838,7 @@
1706 1838 {
1707 1839 "active": true,
1708 1840 "type": "I-BE",
1709   - "typeName": "자기채권(전체),상대채무(계정코드),비교(년월,거래금액)",
  1841 + "typeName": "자기채권(전체,거래통화),상대채무(계정코드,거래통화),비교(년월,거래통화,거래금액)",
1710 1842  
1711 1843 "condOne": {
1712 1844 "cond": [
... ... @@ -1715,7 +1847,8 @@
1715 1847 ],
1716 1848 "makeCompareKey": [
1717 1849 "sys_se",
1718   - "cpr_acnt_code"
  1850 + "cpr_acnt_code",
  1851 + "delng_crncy"
1719 1852 ]
1720 1853 },
1721 1854 "condTwo": {
... ... @@ -1726,7 +1859,8 @@
1726 1859 "makeCompareKey": [
1727 1860 "sys_se",
1728 1861 "accnut_ym",
1729   - "delng_de"
  1862 + "delng_de",
  1863 + "delng_crncy"
1730 1864 ]
1731 1865 },
1732 1866 "uniqueKey": [
... ... @@ -1738,6 +1872,7 @@
1738 1872 "amtField": "sum(delng_amt) as delng_amt",
1739 1873 "compareField": [
1740 1874 "accnut_ym",
  1875 + "delng_crncy",
1741 1876 "delng_amt"
1742 1877 ],
1743 1878 "matchingType": "mtch_ty",
... ... @@ -1747,7 +1882,7 @@
1747 1882 {
1748 1883 "active": true,
1749 1884 "type": "I-BF",
1750   - "typeName": "자기채무(전체),상대채권(계정코드),비교(년월,거래금액)",
  1885 + "typeName": "자기채무(전체,거래통화),상대채권(계정코드,거래통화),비교(년월,거래통화,거래금액)",
1751 1886  
1752 1887 "condOne": {
1753 1888 "cond": [
... ... @@ -1756,7 +1891,8 @@
1756 1891 ],
1757 1892 "makeCompareKey": [
1758 1893 "sys_se",
1759   - "cpr_acnt_code"
  1894 + "cpr_acnt_code",
  1895 + "delng_crncy"
1760 1896 ]
1761 1897 },
1762 1898 "condTwo": {
... ... @@ -1767,7 +1903,8 @@
1767 1903 "makeCompareKey": [
1768 1904 "sys_se",
1769 1905 "accnut_ym",
1770   - "delng_de"
  1906 + "delng_de",
  1907 + "delng_crncy"
1771 1908 ]
1772 1909 },
1773 1910 "uniqueKey": [
... ... @@ -1779,6 +1916,7 @@
1779 1916 "amtField": "sum(delng_amt) as delng_amt",
1780 1917 "compareField": [
1781 1918 "accnut_ym",
  1919 + "delng_crncy",
1782 1920 "delng_amt"
1783 1921 ],
1784 1922 "matchingType": "mtch_ty",
... ... @@ -1792,7 +1930,7 @@
1792 1930 {
1793 1931 "active": true,
1794 1932 "type": "J-AA",
1795   - "typeName": "자기수익(거래월),상대비용(거래일자),비교(년월,거래금액)",
  1933 + "typeName": "자기수익(거래월,거래통화),상대비용(겨래일자,거래통화),비교(년월,거래통화,거래금액)",
1796 1934  
1797 1935 "condOne": {
1798 1936 "cond": [
... ... @@ -1802,7 +1940,8 @@
1802 1940 "makeCompareKey": [
1803 1941 "sys_se",
1804 1942 "accnut_ym",
1805   - "substring(delng_de,1,6)"
  1943 + "substring(delng_de,1,6)",
  1944 + "delng_crncy"
1806 1945 ]
1807 1946 },
1808 1947 "condTwo": {
... ... @@ -1813,7 +1952,8 @@
1813 1952 "makeCompareKey": [
1814 1953 "sys_se",
1815 1954 "accnut_ym",
1816   - "delng_de"
  1955 + "delng_de",
  1956 + "delng_crncy"
1817 1957 ]
1818 1958 },
1819 1959 "uniqueKey": [
... ... @@ -1825,6 +1965,7 @@
1825 1965 "amtField": "sum(delng_amt) as delng_amt",
1826 1966 "compareField": [
1827 1967 "accnut_ym",
  1968 + "delng_crncy",
1828 1969 "delng_amt"
1829 1970 ],
1830 1971 "matchingType": "mtch_ty",
... ... @@ -1834,7 +1975,7 @@
1834 1975 {
1835 1976 "active": true,
1836 1977 "type": "J-AB",
1837   - "typeName": "자기비용(거래월),상대수익(거래일자),비교(년월,거래금액)",
  1978 + "typeName": "자기비용(거래월,거래통화),상대수익(겨래일자,거래통화),비교(년월,거래통화,거래금액)",
1838 1979  
1839 1980 "condOne": {
1840 1981 "cond": [
... ... @@ -1844,7 +1985,8 @@
1844 1985 "makeCompareKey": [
1845 1986 "sys_se",
1846 1987 "accnut_ym",
1847   - "substring(delng_de,1,6)"
  1988 + "substring(delng_de,1,6)",
  1989 + "delng_crncy"
1848 1990 ]
1849 1991 },
1850 1992 "condTwo": {
... ... @@ -1855,7 +1997,8 @@
1855 1997 "makeCompareKey": [
1856 1998 "sys_se",
1857 1999 "accnut_ym",
1858   - "delng_de"
  2000 + "delng_de",
  2001 + "delng_crncy"
1859 2002 ]
1860 2003 },
1861 2004 "uniqueKey": [
... ... @@ -1867,6 +2010,7 @@
1867 2010 "amtField": "sum(delng_amt) as delng_amt",
1868 2011 "compareField": [
1869 2012 "accnut_ym",
  2013 + "delng_crncy",
1870 2014 "delng_amt"
1871 2015 ],
1872 2016 "matchingType": "mtch_ty",
... ... @@ -1876,7 +2020,7 @@
1876 2020 {
1877 2021 "active": true,
1878 2022 "type": "J-AC",
1879   - "typeName": "자기수익(거래월),상대비용(계정코드),비교(년월,거래금액)",
  2023 + "typeName": "자기수익(거래월,거래통화),상대비용(계정코드,거래통화),비교(년월,거래통화,거래금액)",
1880 2024  
1881 2025 "condOne": {
1882 2026 "cond": [
... ... @@ -1886,7 +2030,8 @@
1886 2030 "makeCompareKey": [
1887 2031 "sys_se",
1888 2032 "accnut_ym",
1889   - "substring(delng_de,1,6)"
  2033 + "substring(delng_de,1,6)",
  2034 + "delng_crncy"
1890 2035 ]
1891 2036 },
1892 2037 "condTwo": {
... ... @@ -1897,7 +2042,8 @@
1897 2042 "makeCompareKey": [
1898 2043 "sys_se",
1899 2044 "accnut_ym",
1900   - "cpr_acnt_code"
  2045 + "cpr_acnt_code",
  2046 + "delng_crncy"
1901 2047 ]
1902 2048 },
1903 2049 "uniqueKey": [
... ... @@ -1909,6 +2055,7 @@
1909 2055 "amtField": "sum(delng_amt) as delng_amt",
1910 2056 "compareField": [
1911 2057 "accnut_ym",
  2058 + "delng_crncy",
1912 2059 "delng_amt"
1913 2060 ],
1914 2061 "matchingType": "mtch_ty",
... ... @@ -1918,7 +2065,7 @@
1918 2065 {
1919 2066 "active": true,
1920 2067 "type": "J-AD",
1921   - "typeName": "자기비용(거래월),상대수익(계정코드),비교(년월,거래금액)",
  2068 + "typeName": "자기비용(거래월,거래통화),상대수익(계정코드,거래통화),비교(년월,거래통화,거래금액)",
1922 2069  
1923 2070 "condOne": {
1924 2071 "cond": [
... ... @@ -1928,7 +2075,8 @@
1928 2075 "makeCompareKey": [
1929 2076 "sys_se",
1930 2077 "accnut_ym",
1931   - "substring(delng_de,1,6)"
  2078 + "substring(delng_de,1,6)",
  2079 + "delng_crncy"
1932 2080 ]
1933 2081 },
1934 2082 "condTwo": {
... ... @@ -1939,7 +2087,8 @@
1939 2087 "makeCompareKey": [
1940 2088 "sys_se",
1941 2089 "accnut_ym",
1942   - "cpr_acnt_code"
  2090 + "cpr_acnt_code",
  2091 + "delng_crncy"
1943 2092 ]
1944 2093 },
1945 2094 "uniqueKey": [
... ... @@ -1951,6 +2100,7 @@
1951 2100 "amtField": "sum(delng_amt) as delng_amt",
1952 2101 "compareField": [
1953 2102 "accnut_ym",
  2103 + "delng_crncy",
1954 2104 "delng_amt"
1955 2105 ],
1956 2106 "matchingType": "mtch_ty",
... ... @@ -1961,7 +2111,7 @@
1961 2111 {
1962 2112 "active": true,
1963 2113 "type": "J-BA",
1964   - "typeName": "자기채권(거래월),상대채무(거래일자),비교(년월,거래금액)",
  2114 + "typeName": "자기채권(거래월,거래통화),상대채무(겨래일자,거래통화),비교(년월,거래통화,거래금액)",
1965 2115  
1966 2116 "condOne": {
1967 2117 "cond": [
... ... @@ -1971,7 +2121,8 @@
1971 2121 "makeCompareKey": [
1972 2122 "sys_se",
1973 2123 "accnut_ym",
1974   - "substring(delng_de,1,6)"
  2124 + "substring(delng_de,1,6)",
  2125 + "delng_crncy"
1975 2126 ]
1976 2127 },
1977 2128 "condTwo": {
... ... @@ -1982,7 +2133,8 @@
1982 2133 "makeCompareKey": [
1983 2134 "sys_se",
1984 2135 "accnut_ym",
1985   - "delng_de"
  2136 + "delng_de",
  2137 + "delng_crncy"
1986 2138 ]
1987 2139 },
1988 2140 "uniqueKey": [
... ... @@ -1994,6 +2146,7 @@
1994 2146 "amtField": "sum(delng_amt) as delng_amt",
1995 2147 "compareField": [
1996 2148 "accnut_ym",
  2149 + "delng_crncy",
1997 2150 "delng_amt"
1998 2151 ],
1999 2152 "matchingType": "mtch_ty",
... ... @@ -2003,7 +2156,7 @@
2003 2156 {
2004 2157 "active": true,
2005 2158 "type": "J-BB",
2006   - "typeName": "자기채무(거래월),상대채권(거래일자),비교(년월,거래금액)",
  2159 + "typeName": "자기채무(거래월,거래통화),상대채권(겨래일자,거래통하),비교(년월,거래통화,거래금액)",
2007 2160  
2008 2161 "condOne": {
2009 2162 "cond": [
... ... @@ -2013,7 +2166,8 @@
2013 2166 "makeCompareKey": [
2014 2167 "sys_se",
2015 2168 "accnut_ym",
2016   - "substring(delng_de,1,6)"
  2169 + "substring(delng_de,1,6)",
  2170 + "delng_crncy"
2017 2171 ]
2018 2172 },
2019 2173 "condTwo": {
... ... @@ -2024,7 +2178,8 @@
2024 2178 "makeCompareKey": [
2025 2179 "sys_se",
2026 2180 "accnut_ym",
2027   - "delng_de"
  2181 + "delng_de",
  2182 + "delng_crncy"
2028 2183 ]
2029 2184 },
2030 2185 "uniqueKey": [
... ... @@ -2036,6 +2191,7 @@
2036 2191 "amtField": "sum(delng_amt) as delng_amt",
2037 2192 "compareField": [
2038 2193 "accnut_ym",
  2194 + "delng_crncy",
2039 2195 "delng_amt"
2040 2196 ],
2041 2197 "matchingType": "mtch_ty",
... ... @@ -2045,7 +2201,7 @@
2045 2201 {
2046 2202 "active": true,
2047 2203 "type": "J-BC",
2048   - "typeName": "자기채권(거래월),상대채무(계정코드),비교(년월,거래금액)",
  2204 + "typeName": "자기채권(거래월,거래통화),상대채무(계정코드,거래통화),비교(년월,거래통화,거래금액)",
2049 2205  
2050 2206 "condOne": {
2051 2207 "cond": [
... ... @@ -2055,7 +2211,8 @@
2055 2211 "makeCompareKey": [
2056 2212 "sys_se",
2057 2213 "accnut_ym",
2058   - "substring(delng_de,1,6)"
  2214 + "substring(delng_de,1,6)",
  2215 + "delng_crncy"
2059 2216 ]
2060 2217 },
2061 2218 "condTwo": {
... ... @@ -2066,7 +2223,8 @@
2066 2223 "makeCompareKey": [
2067 2224 "sys_se",
2068 2225 "accnut_ym",
2069   - "cpr_acnt_code"
  2226 + "cpr_acnt_code",
  2227 + "delng_crncy"
2070 2228 ]
2071 2229 },
2072 2230 "uniqueKey": [
... ... @@ -2078,6 +2236,7 @@
2078 2236 "amtField": "sum(delng_amt) as delng_amt",
2079 2237 "compareField": [
2080 2238 "accnut_ym",
  2239 + "delng_crncy",
2081 2240 "delng_amt"
2082 2241 ],
2083 2242 "matchingType": "mtch_ty",
... ... @@ -2087,7 +2246,7 @@
2087 2246 {
2088 2247 "active": true,
2089 2248 "type": "J-BD",
2090   - "typeName": "자기채무(거래월),상대채권(계정코드),비교(년월,거래금액)",
  2249 + "typeName": "자기채무(거래월,거래통화),상대채권(계정코드,거래통화),비교(년월,거래통화,거래금액)",
2091 2250  
2092 2251 "condOne": {
2093 2252 "cond": [
... ... @@ -2097,7 +2256,8 @@
2097 2256 "makeCompareKey": [
2098 2257 "sys_se",
2099 2258 "accnut_ym",
2100   - "substring(delng_de,1,6)"
  2259 + "substring(delng_de,1,6)",
  2260 + "delng_crncy"
2101 2261 ]
2102 2262 },
2103 2263 "condTwo": {
... ... @@ -2108,7 +2268,8 @@
2108 2268 "makeCompareKey": [
2109 2269 "sys_se",
2110 2270 "accnut_ym",
2111   - "cpr_acnt_code"
  2271 + "cpr_acnt_code",
  2272 + "delng_crncy"
2112 2273 ]
2113 2274 },
2114 2275 "uniqueKey": [
... ... @@ -2120,6 +2281,7 @@
2120 2281 "amtField": "sum(delng_amt) as delng_amt",
2121 2282 "compareField": [
2122 2283 "accnut_ym",
  2284 + "delng_crncy",
2123 2285 "delng_amt"
2124 2286 ],
2125 2287 "matchingType": "mtch_ty",
... ... @@ -2142,7 +2304,7 @@
2142 2304 {
2143 2305 "active": true,
2144 2306 "type": "K-AA",
2145   - "typeName": "자기수익(적요),상대비용(적요),비교(년월,거래금액)",
  2307 + "typeName": "자기수익(적요,거래통화),상대비용(적요,거래통화),비교(년월,거래통화,거래금액)",
2146 2308  
2147 2309 "condOne": {
2148 2310 "cond": [
... ... @@ -2152,7 +2314,8 @@
2152 2314 "makeCompareKey": [
2153 2315 "sys_se",
2154 2316 "accnut_ym",
2155   - "substring(sumry, 1, 80)"
  2317 + "substring(sumry, 1, 80)",
  2318 + "delng_crncy"
2156 2319 ]
2157 2320 },
2158 2321 "condTwo": {
... ... @@ -2163,7 +2326,8 @@
2163 2326 "makeCompareKey": [
2164 2327 "sys_se",
2165 2328 "accnut_ym",
2166   - "substring(sumry, 1, 80)"
  2329 + "substring(sumry, 1, 80)",
  2330 + "delng_crncy"
2167 2331 ]
2168 2332 },
2169 2333 "uniqueKey": [
... ... @@ -2175,6 +2339,7 @@
2175 2339 "amtField": "sum(delng_amt) as delng_amt",
2176 2340 "compareField": [
2177 2341 "accnut_ym",
  2342 + "delng_crncy",
2178 2343 "delng_amt"
2179 2344 ],
2180 2345 "matchingType": "mtch_ty",
... ... @@ -2184,7 +2349,7 @@
2184 2349 {
2185 2350 "active": true,
2186 2351 "type": "K-AB",
2187   - "typeName": "자기비용(적요),상대수익(거래일자),비교(년월,거래금액)",
  2352 + "typeName": "자기비용(적요,거래통화),상대수익(겨래일자,거래통화),비교(년월,거래통화,거래금액)",
2188 2353  
2189 2354 "condOne": {
2190 2355 "cond": [
... ... @@ -2194,7 +2359,8 @@
2194 2359 "makeCompareKey": [
2195 2360 "sys_se",
2196 2361 "accnut_ym",
2197   - "substring(sumry, 1, 80)"
  2362 + "substring(sumry, 1, 80)",
  2363 + "delng_crncy"
2198 2364 ]
2199 2365 },
2200 2366 "condTwo": {
... ... @@ -2205,7 +2371,8 @@
2205 2371 "makeCompareKey": [
2206 2372 "sys_se",
2207 2373 "accnut_ym",
2208   - "delng_de"
  2374 + "delng_de",
  2375 + "delng_crncy"
2209 2376 ]
2210 2377 },
2211 2378 "uniqueKey": [
... ... @@ -2217,6 +2384,7 @@
2217 2384 "amtField": "sum(delng_amt) as delng_amt",
2218 2385 "compareField": [
2219 2386 "accnut_ym",
  2387 + "delng_crncy",
2220 2388 "delng_amt"
2221 2389 ],
2222 2390 "matchingType": "mtch_ty",
... ... @@ -2226,7 +2394,7 @@
2226 2394 {
2227 2395 "active": true,
2228 2396 "type": "K-AC",
2229   - "typeName": "자기수익(적요),개별상대비용,비교(년월,거래금액)",
  2397 + "typeName": "자기수익(적요,거래통화),개별상대비용(거래통화),비교(년월,거래통화,거래금액)",
2230 2398  
2231 2399 "condOne": {
2232 2400 "cond": [
... ... @@ -2236,7 +2404,8 @@
2236 2404 "makeCompareKey": [
2237 2405 "sys_se",
2238 2406 "accnut_ym",
2239   - "substring(sumry, 1, 80)"
  2407 + "substring(sumry, 1, 80)",
  2408 + "delng_crncy"
2240 2409 ]
2241 2410 },
2242 2411 "condTwo": {
... ... @@ -2247,7 +2416,8 @@
2247 2416 "makeCompareKey": [
2248 2417 "sys_se",
2249 2418 "accnut_ym",
2250   - "cast(sn as text)"
  2419 + "cast(sn as text)",
  2420 + "delng_crncy"
2251 2421 ]
2252 2422 },
2253 2423 "uniqueKey": [
... ... @@ -2259,6 +2429,7 @@
2259 2429 "amtField": "sum(delng_amt) as delng_amt",
2260 2430 "compareField": [
2261 2431 "accnut_ym",
  2432 + "delng_crncy",
2262 2433 "delng_amt"
2263 2434 ],
2264 2435 "matchingType": "mtch_ty",
... ... @@ -2268,7 +2439,7 @@
2268 2439 {
2269 2440 "active": true,
2270 2441 "type": "K-AD",
2271   - "typeName": "자기비용(적요),개별상대수익,비교(년월,거래금액)",
  2442 + "typeName": "자기비용(적요(거래통화),개별상대수익(거래통화),비교(년월,거래통화,거래금액)",
2272 2443  
2273 2444 "condOne": {
2274 2445 "cond": [
... ... @@ -2278,7 +2449,8 @@
2278 2449 "makeCompareKey": [
2279 2450 "sys_se",
2280 2451 "accnut_ym",
2281   - "substring(sumry, 1, 80)"
  2452 + "substring(sumry, 1, 80)",
  2453 + "delng_crncy"
2282 2454 ]
2283 2455 },
2284 2456 "condTwo": {
... ... @@ -2289,7 +2461,8 @@
2289 2461 "makeCompareKey": [
2290 2462 "sys_se",
2291 2463 "accnut_ym",
2292   - "cast(sn as text)"
  2464 + "cast(sn as text)",
  2465 + "delng_crncy"
2293 2466 ]
2294 2467 },
2295 2468 "uniqueKey": [
... ... @@ -2301,6 +2474,7 @@
2301 2474 "amtField": "sum(delng_amt) as delng_amt",
2302 2475 "compareField": [
2303 2476 "accnut_ym",
  2477 + "delng_crncy",
2304 2478 "delng_amt"
2305 2479 ],
2306 2480 "matchingType": "mtch_ty",
... ... @@ -2310,7 +2484,7 @@
2310 2484 {
2311 2485 "active": true,
2312 2486 "type": "K-BA",
2313   - "typeName": "자기채권(적요),상대채무(거래일자),비교(년월,거래금액)",
  2487 + "typeName": "자기채권(적요,거래통화),상대채무(겨래일자,거래통화),비교(년월,거래통화,거래금액)",
2314 2488  
2315 2489 "condOne": {
2316 2490 "cond": [
... ... @@ -2320,7 +2494,8 @@
2320 2494 "makeCompareKey": [
2321 2495 "sys_se",
2322 2496 "accnut_ym",
2323   - "substring(sumry, 1, 80)"
  2497 + "substring(sumry, 1, 80)",
  2498 + "delng_crncy"
2324 2499 ]
2325 2500 },
2326 2501 "condTwo": {
... ... @@ -2331,7 +2506,8 @@
2331 2506 "makeCompareKey": [
2332 2507 "sys_se",
2333 2508 "accnut_ym",
2334   - "delng_de"
  2509 + "delng_de",
  2510 + "delng_crncy"
2335 2511 ]
2336 2512 },
2337 2513 "uniqueKey": [
... ... @@ -2343,6 +2519,7 @@
2343 2519 "amtField": "sum(delng_amt) as delng_amt",
2344 2520 "compareField": [
2345 2521 "accnut_ym",
  2522 + "delng_crncy",
2346 2523 "delng_amt"
2347 2524 ],
2348 2525 "matchingType": "mtch_ty",
... ... @@ -2352,7 +2529,7 @@
2352 2529 {
2353 2530 "active": true,
2354 2531 "type": "K-BB",
2355   - "typeName": "자기채무(적요),상대채권(거래일자),비교(년월,거래금액)",
  2532 + "typeName": "자기채무(적요,거래통화),상대채권(겨래일자,거래통화),비교(년월,거래통화,거래금액)",
2356 2533  
2357 2534 "condOne": {
2358 2535 "cond": [
... ... @@ -2362,7 +2539,8 @@
2362 2539 "makeCompareKey": [
2363 2540 "sys_se",
2364 2541 "accnut_ym",
2365   - "substring(sumry, 1, 80)"
  2542 + "substring(sumry, 1, 80)",
  2543 + "delng_crncy"
2366 2544 ]
2367 2545 },
2368 2546 "condTwo": {
... ... @@ -2373,7 +2551,8 @@
2373 2551 "makeCompareKey": [
2374 2552 "sys_se",
2375 2553 "accnut_ym",
2376   - "delng_de"
  2554 + "delng_de",
  2555 + "delng_crncy"
2377 2556 ]
2378 2557 },
2379 2558 "uniqueKey": [
... ... @@ -2385,6 +2564,7 @@
2385 2564 "amtField": "sum(delng_amt) as delng_amt",
2386 2565 "compareField": [
2387 2566 "accnut_ym",
  2567 + "delng_crncy",
2388 2568 "delng_amt"
2389 2569 ],
2390 2570 "matchingType": "mtch_ty",
... ... @@ -2394,7 +2574,7 @@
2394 2574 {
2395 2575 "active": true,
2396 2576 "type": "K-BC",
2397   - "typeName": "자기채권(적요),개별상대채무,비교(년월,거래금액)",
  2577 + "typeName": "자기채권(적요,거래통화),개별상대채무(거래통화),비교(년월,거래통화,거래금액)",
2398 2578  
2399 2579 "condOne": {
2400 2580 "cond": [
... ... @@ -2404,7 +2584,8 @@
2404 2584 "makeCompareKey": [
2405 2585 "sys_se",
2406 2586 "accnut_ym",
2407   - "substring(sumry, 1, 80)"
  2587 + "substring(sumry, 1, 80)",
  2588 + "delng_crncy"
2408 2589 ]
2409 2590 },
2410 2591 "condTwo": {
... ... @@ -2415,7 +2596,8 @@
2415 2596 "makeCompareKey": [
2416 2597 "sys_se",
2417 2598 "accnut_ym",
2418   - "cast(sn as text)"
  2599 + "cast(sn as text)",
  2600 + "delng_crncy"
2419 2601 ]
2420 2602 },
2421 2603 "uniqueKey": [
... ... @@ -2427,6 +2609,7 @@
2427 2609 "amtField": "sum(delng_amt) as delng_amt",
2428 2610 "compareField": [
2429 2611 "accnut_ym",
  2612 + "delng_crncy",
2430 2613 "delng_amt"
2431 2614 ],
2432 2615 "matchingType": "mtch_ty",
... ... @@ -2436,7 +2619,7 @@
2436 2619 {
2437 2620 "active": true,
2438 2621 "type": "K-BD",
2439   - "typeName": "자기채무(적요),개별상대채권,비교(년월,거래금액)",
  2622 + "typeName": "자기채무(적요,거래통화),개별상대채권(거래통화),비교(년월,거래통화,거래금액)",
2440 2623  
2441 2624 "condOne": {
2442 2625 "cond": [
... ... @@ -2446,7 +2629,8 @@
2446 2629 "makeCompareKey": [
2447 2630 "sys_se",
2448 2631 "accnut_ym",
2449   - "substring(sumry, 1, 80)"
  2632 + "substring(sumry, 1, 80)",
  2633 + "delng_crncy"
2450 2634 ]
2451 2635 },
2452 2636 "condTwo": {
... ... @@ -2457,7 +2641,8 @@
2457 2641 "makeCompareKey": [
2458 2642 "sys_se",
2459 2643 "accnut_ym",
2460   - "cast(sn as text)"
  2644 + "cast(sn as text)",
  2645 + "delng_crncy"
2461 2646 ]
2462 2647 },
2463 2648 "uniqueKey": [
... ... @@ -2469,6 +2654,7 @@
2469 2654 "amtField": "sum(delng_amt) as delng_amt",
2470 2655 "compareField": [
2471 2656 "accnut_ym",
  2657 + "delng_crncy",
2472 2658 "delng_amt"
2473 2659 ],
2474 2660 "matchingType": "mtch_ty",
... ... @@ -2482,7 +2668,7 @@
2482 2668 {
2483 2669 "active": true,
2484 2670 "type": "L-A",
2485   - "typeName": "자기수익(회계일자),상대비용(회계일자),비교(년월,거래금액)",
  2671 + "typeName": "자기수익(회계일자,거래통화),상대비용(회계일자,거래통화),비교(년월,거래통화,거래금액)",
2486 2672  
2487 2673 "condOne": {
2488 2674 "cond": [
... ... @@ -2492,7 +2678,8 @@
2492 2678 "elcty_de != ''"
2493 2679 ],
2494 2680 "makeCompareKey": [
2495   - "elcty_de"
  2681 + "elcty_de",
  2682 + "delng_crncy"
2496 2683 ]
2497 2684 },
2498 2685 "condTwo": {
... ... @@ -2503,7 +2690,8 @@
2503 2690 "elcty_de != ''"
2504 2691 ],
2505 2692 "makeCompareKey": [
2506   - "elcty_de"
  2693 + "elcty_de",
  2694 + "delng_crncy"
2507 2695 ]
2508 2696 },
2509 2697 "uniqueKey": [
... ... @@ -2515,6 +2703,7 @@
2515 2703 "amtField": "sum(delng_amt) as delng_amt",
2516 2704 "compareField": [
2517 2705 "accnut_ym",
  2706 + "delng_crncy",
2518 2707 "delng_amt"
2519 2708 ],
2520 2709 "matchingType": "mtch_ty",
... ... @@ -2524,7 +2713,7 @@
2524 2713 {
2525 2714 "active": true,
2526 2715 "type": "L-AA",
2527   - "typeName": "자기수익(회계일자),개별상대비용,비교(년월,거래금액)",
  2716 + "typeName": "자기수익(회계일자,거래통화),개별상대비용(거래통화),비교(년월,거래통화,거래금액)",
2528 2717  
2529 2718 "condOne": {
2530 2719 "cond": [
... ... @@ -2534,7 +2723,8 @@
2534 2723 "elcty_de != ''"
2535 2724 ],
2536 2725 "makeCompareKey": [
2537   - "elcty_de"
  2726 + "elcty_de",
  2727 + "delng_crncy"
2538 2728 ]
2539 2729 },
2540 2730 "condTwo": {
... ... @@ -2545,7 +2735,8 @@
2545 2735 "makeCompareKey": [
2546 2736 "sys_se",
2547 2737 "accnut_ym",
2548   - "cast(sn as text)"
  2738 + "cast(sn as text)",
  2739 + "delng_crncy"
2549 2740 ]
2550 2741 },
2551 2742 "uniqueKey": [
... ... @@ -2557,6 +2748,7 @@
2557 2748 "amtField": "sum(delng_amt) as delng_amt",
2558 2749 "compareField": [
2559 2750 "accnut_ym",
  2751 + "delng_crncy",
2560 2752 "delng_amt"
2561 2753 ],
2562 2754 "matchingType": "mtch_ty",
... ... @@ -2566,7 +2758,7 @@
2566 2758 {
2567 2759 "active": true,
2568 2760 "type": "L-AB",
2569   - "typeName": "자기비용(회계일자),개별상대수익,비교(년월,거래금액)",
  2761 + "typeName": "자기비용(회계일자,거래통화),개별상대수익(거래통화),비교(년월,거래통화,거래금액)",
2570 2762  
2571 2763 "condOne": {
2572 2764 "cond": [
... ... @@ -2576,7 +2768,8 @@
2576 2768 "elcty_de != ''"
2577 2769 ],
2578 2770 "makeCompareKey": [
2579   - "elcty_de"
  2771 + "elcty_de",
  2772 + "delng_crncy"
2580 2773 ]
2581 2774 },
2582 2775 "condTwo": {
... ... @@ -2587,7 +2780,8 @@
2587 2780 "makeCompareKey": [
2588 2781 "sys_se",
2589 2782 "accnut_ym",
2590   - "cast(sn as text)"
  2783 + "cast(sn as text)",
  2784 + "delng_crncy"
2591 2785 ]
2592 2786 },
2593 2787 "uniqueKey": [
... ... @@ -2599,6 +2793,7 @@
2599 2793 "amtField": "sum(delng_amt) as delng_amt",
2600 2794 "compareField": [
2601 2795 "accnut_ym",
  2796 + "delng_crncy",
2602 2797 "delng_amt"
2603 2798 ],
2604 2799 "matchingType": "mtch_ty",
... ... @@ -2613,7 +2808,7 @@
2613 2808 {
2614 2809 "active": true,
2615 2810 "type": "M-A",
2616   - "typeName": "자기수익(법인계정코드),상대비용(법인계정코드),비교(년월,거래금액)",
  2811 + "typeName": "자기수익(법인계정코드,거래통화),상대비용(법인계정코드,거래통화),비교(년월,거래통화,거래금액)",
2617 2812  
2618 2813 "condOne": {
2619 2814 "cond": [
... ... @@ -2621,7 +2816,8 @@
2621 2816 "mtch_ty is null"
2622 2817 ],
2623 2818 "makeCompareKey": [
2624   - "cpr_acnt_code"
  2819 + "cpr_acnt_code",
  2820 + "delng_crncy"
2625 2821 ]
2626 2822 },
2627 2823 "condTwo": {
... ... @@ -2630,7 +2826,8 @@
2630 2826 "mtch_ty is null"
2631 2827 ],
2632 2828 "makeCompareKey": [
2633   - "cpr_acnt_code"
  2829 + "cpr_acnt_code",
  2830 + "delng_crncy"
2634 2831 ]
2635 2832 },
2636 2833 "uniqueKey": [
... ... @@ -2642,6 +2839,7 @@
2642 2839 "amtField": "sum(delng_amt) as delng_amt",
2643 2840 "compareField": [
2644 2841 "accnut_ym",
  2842 + "delng_crncy",
2645 2843 "delng_amt"
2646 2844 ],
2647 2845 "matchingType": "mtch_ty",
... ... @@ -2651,7 +2849,7 @@
2651 2849 {
2652 2850 "active": true,
2653 2851 "type": "M-AA",
2654   - "typeName": "자기수익(법인계정코드),개별상대비용,비교(년월,거래금액)",
  2852 + "typeName": "자기수익(법인계정코드,거래통화),개별상대비용(거래통화),비교(년월,거래통화,거래금액)",
2655 2853  
2656 2854 "condOne": {
2657 2855 "cond": [
... ... @@ -2659,7 +2857,8 @@
2659 2857 "mtch_ty is null"
2660 2858 ],
2661 2859 "makeCompareKey": [
2662   - "cpr_acnt_code"
  2860 + "cpr_acnt_code",
  2861 + "delng_crncy"
2663 2862 ]
2664 2863 },
2665 2864 "condTwo": {
... ... @@ -2670,7 +2869,8 @@
2670 2869 "makeCompareKey": [
2671 2870 "sys_se",
2672 2871 "accnut_ym",
2673   - "cast(sn as text)"
  2872 + "cast(sn as text)",
  2873 + "delng_crncy"
2674 2874 ]
2675 2875 },
2676 2876 "uniqueKey": [
... ... @@ -2682,6 +2882,7 @@
2682 2882 "amtField": "sum(delng_amt) as delng_amt",
2683 2883 "compareField": [
2684 2884 "accnut_ym",
  2885 + "delng_crncy",
2685 2886 "delng_amt"
2686 2887 ],
2687 2888 "matchingType": "mtch_ty",
... ... @@ -2691,7 +2892,7 @@
2691 2892 {
2692 2893 "active": true,
2693 2894 "type": "M-AB",
2694   - "typeName": "자기비용(법인계정코드),개별상대수익,비교(년월,거래금액)",
  2895 + "typeName": "자기비용(법인계정코드,거래통화),개별상대수익(거래통화),비교(년월,거래통화,거래금액)",
2695 2896  
2696 2897 "condOne": {
2697 2898 "cond": [
... ... @@ -2699,7 +2900,8 @@
2699 2900 "mtch_ty is null"
2700 2901 ],
2701 2902 "makeCompareKey": [
2702   - "cpr_acnt_code"
  2903 + "cpr_acnt_code",
  2904 + "delng_crncy"
2703 2905 ]
2704 2906 },
2705 2907 "condTwo": {
... ... @@ -2710,7 +2912,8 @@
2710 2912 "makeCompareKey": [
2711 2913 "sys_se",
2712 2914 "accnut_ym",
2713   - "cast(sn as text)"
  2915 + "cast(sn as text)",
  2916 + "delng_crncy"
2714 2917 ]
2715 2918 },
2716 2919 "uniqueKey": [
... ... @@ -2722,6 +2925,7 @@
2722 2925 "amtField": "sum(delng_amt) as delng_amt",
2723 2926 "compareField": [
2724 2927 "accnut_ym",
  2928 + "delng_crncy",
2725 2929 "delng_amt"
2726 2930 ],
2727 2931 "matchingType": "mtch_ty",
... ... @@ -2735,7 +2939,7 @@
2735 2939 {
2736 2940 "active": true,
2737 2941 "type": "N-A",
2738   - "typeName": "자기수익(계정코드),상대비용(계정코드),비교(년월,거래금액)",
  2942 + "typeName": "자기수익(계정코드,거래통화),상대비용(계정코드,거래통화),비교(년월,거래통화,거래금액)",
2739 2943  
2740 2944 "condOne": {
2741 2945 "cond": [
... ... @@ -2743,7 +2947,8 @@
2743 2947 "mtch_ty is null"
2744 2948 ],
2745 2949 "makeCompareKey": [
2746   - "cnnc_acnt_code"
  2950 + "cnnc_acnt_code",
  2951 + "delng_crncy"
2747 2952 ]
2748 2953 },
2749 2954 "condTwo": {
... ... @@ -2752,7 +2957,8 @@
2752 2957 "mtch_ty is null"
2753 2958 ],
2754 2959 "makeCompareKey": [
2755   - "cnnc_acnt_code"
  2960 + "cnnc_acnt_code",
  2961 + "delng_crncy"
2756 2962 ]
2757 2963 },
2758 2964 "uniqueKey": [
... ... @@ -2764,6 +2970,7 @@
2764 2970 "amtField": "sum(delng_amt) as delng_amt",
2765 2971 "compareField": [
2766 2972 "accnut_ym",
  2973 + "delng_crncy",
2767 2974 "delng_amt"
2768 2975 ],
2769 2976 "matchingType": "mtch_ty",
... ... @@ -2773,7 +2980,7 @@
2773 2980 {
2774 2981 "active": true,
2775 2982 "type": "N-AA",
2776   - "typeName": "자기수익(계정코드),개별상대비용,비교(년월,거래금액)",
  2983 + "typeName": "자기수익(계정코드,거래통화),개별상대비용(거래통화),비교(년월,거래통화,거래금액)",
2777 2984  
2778 2985 "condOne": {
2779 2986 "cond": [
... ... @@ -2781,7 +2988,8 @@
2781 2988 "mtch_ty is null"
2782 2989 ],
2783 2990 "makeCompareKey": [
2784   - "cnnc_acnt_code"
  2991 + "cnnc_acnt_code",
  2992 + "delng_crncy"
2785 2993 ]
2786 2994 },
2787 2995 "condTwo": {
... ... @@ -2792,7 +3000,8 @@
2792 3000 "makeCompareKey": [
2793 3001 "sys_se",
2794 3002 "accnut_ym",
2795   - "cast(sn as text)"
  3003 + "cast(sn as text)",
  3004 + "delng_crncy"
2796 3005 ]
2797 3006 },
2798 3007 "uniqueKey": [
... ... @@ -2804,6 +3013,7 @@
2804 3013 "amtField": "sum(delng_amt) as delng_amt",
2805 3014 "compareField": [
2806 3015 "accnut_ym",
  3016 + "delng_crncy",
2807 3017 "delng_amt"
2808 3018 ],
2809 3019 "matchingType": "mtch_ty",
... ... @@ -2813,7 +3023,7 @@
2813 3023 {
2814 3024 "active": true,
2815 3025 "type": "N-AB",
2816   - "typeName": "자기비용(계정코드),개별상대수익,비교(년월,비교키,거래금액)",
  3026 + "typeName": "자기비용(계정코드,거래통화),개별상대수익(거래통화),비교(년월,거래통화,거래금액)",
2817 3027  
2818 3028 "condOne": {
2819 3029 "cond": [
... ... @@ -2821,7 +3031,8 @@
2821 3031 "mtch_ty is null"
2822 3032 ],
2823 3033 "makeCompareKey": [
2824   - "cnnc_acnt_code"
  3034 + "cnnc_acnt_code",
  3035 + "delng_crncy"
2825 3036 ]
2826 3037 },
2827 3038 "condTwo": {
... ... @@ -2832,7 +3043,8 @@
2832 3043 "makeCompareKey": [
2833 3044 "sys_se",
2834 3045 "accnut_ym",
2835   - "cast(sn as text)"
  3046 + "cast(sn as text)",
  3047 + "delng_crncy"
2836 3048 ]
2837 3049 },
2838 3050 "uniqueKey": [
... ... @@ -2853,7 +3065,7 @@
2853 3065 {
2854 3066 "active": true,
2855 3067 "type": "N-AC",
2856   - "typeName": "자기수익(계정코드),상대비용(법인계정코드),비교(년월,거래금액)",
  3068 + "typeName": "자기수익(계정코드,거래통화),상대비용(법인계정코드,거래통화),비교(년월,거래통화,거래금액)",
2857 3069  
2858 3070 "condOne": {
2859 3071 "cond": [
... ... @@ -2861,7 +3073,8 @@
2861 3073 "mtch_ty is null"
2862 3074 ],
2863 3075 "makeCompareKey": [
2864   - "cnnc_acnt_code"
  3076 + "cnnc_acnt_code",
  3077 + "delng_crncy"
2865 3078 ]
2866 3079 },
2867 3080 "condTwo": {
... ... @@ -2870,7 +3083,8 @@
2870 3083 "mtch_ty is null"
2871 3084 ],
2872 3085 "makeCompareKey": [
2873   - "cpr_acnt_code"
  3086 + "cpr_acnt_code",
  3087 + "delng_crncy"
2874 3088 ]
2875 3089 },
2876 3090 "uniqueKey": [
... ... @@ -2882,6 +3096,7 @@
2882 3096 "amtField": "sum(delng_amt) as delng_amt",
2883 3097 "compareField": [
2884 3098 "accnut_ym",
  3099 + "delng_crncy",
2885 3100 "delng_amt"
2886 3101 ],
2887 3102 "matchingType": "mtch_ty",
... ... @@ -2891,7 +3106,7 @@
2891 3106 {
2892 3107 "active": true,
2893 3108 "type": "N-AD",
2894   - "typeName": "자기비용(계정코드),상대수익(법인계정코드),비교(년월,거래금액)",
  3109 + "typeName": "자기비용(계정코드,거래통화),상대수익(법인계정코드,거래통화),비교(년월,거래통화,거래금액)",
2895 3110  
2896 3111 "condOne": {
2897 3112 "cond": [
... ... @@ -2899,7 +3114,8 @@
2899 3114 "mtch_ty is null"
2900 3115 ],
2901 3116 "makeCompareKey": [
2902   - "cnnc_acnt_code"
  3117 + "cnnc_acnt_code",
  3118 + "delng_crncy"
2903 3119 ]
2904 3120 },
2905 3121 "condTwo": {
... ... @@ -2908,7 +3124,8 @@
2908 3124 "mtch_ty is null"
2909 3125 ],
2910 3126 "makeCompareKey": [
2911   - "cpr_acnt_code"
  3127 + "cpr_acnt_code",
  3128 + "delng_crncy"
2912 3129 ]
2913 3130 },
2914 3131 "uniqueKey": [
... ... @@ -2920,6 +3137,7 @@
2920 3137 "amtField": "sum(delng_amt) as delng_amt",
2921 3138 "compareField": [
2922 3139 "accnut_ym",
  3140 + "delng_crncy",
2923 3141 "delng_amt"
2924 3142 ],
2925 3143 "matchingType": "mtch_ty",
... ... @@ -2933,7 +3151,7 @@
2933 3151 {
2934 3152 "active": true,
2935 3153 "type": "O-A",
2936   - "typeName": "자기수익(INVOICE),상대비용(INVOICE),비교(년월,거래금액)",
  3154 + "typeName": "자기수익(INVOICE,거래통화),상대비용(INVOICE,거래통화),비교(년월,거래통화,거래금액)",
2937 3155  
2938 3156 "condOne": {
2939 3157 "cond": [
... ... @@ -2943,7 +3161,8 @@
2943 3161 "ext_key2 != ''"
2944 3162 ],
2945 3163 "makeCompareKey": [
2946   - "ext_key2"
  3164 + "ext_key2",
  3165 + "delng_crncy"
2947 3166 ]
2948 3167 },
2949 3168 "condTwo": {
... ... @@ -2954,7 +3173,8 @@
2954 3173 "ext_key2 != ''"
2955 3174 ],
2956 3175 "makeCompareKey": [
2957   - "ext_key2"
  3176 + "ext_key2",
  3177 + "delng_crncy"
2958 3178 ]
2959 3179 },
2960 3180 "uniqueKey": [
... ... @@ -2966,6 +3186,7 @@
2966 3186 "amtField": "sum(delng_amt) as delng_amt",
2967 3187 "compareField": [
2968 3188 "accnut_ym",
  3189 + "delng_crncy",
2969 3190 "delng_amt"
2970 3191 ],
2971 3192 "matchingType": "mtch_ty",
... ... @@ -2975,7 +3196,7 @@
2975 3196 {
2976 3197 "active": true,
2977 3198 "type": "O-AA",
2978   - "typeName": "자기수익(INVOICE),개별상대비용,비교(년월,거래금액)",
  3199 + "typeName": "자기수익(INVOICE,거래통화),개별상대비용(거래통화),비교(년월,거래통화,거래금액)",
2979 3200  
2980 3201 "condOne": {
2981 3202 "cond": [
... ... @@ -2985,7 +3206,8 @@
2985 3206 "ext_key2 != ''"
2986 3207 ],
2987 3208 "makeCompareKey": [
2988   - "ext_key2"
  3209 + "ext_key2",
  3210 + "delng_crncy"
2989 3211 ]
2990 3212 },
2991 3213 "condTwo": {
... ... @@ -2996,7 +3218,8 @@
2996 3218 "makeCompareKey": [
2997 3219 "sys_se",
2998 3220 "accnut_ym",
2999   - "cast(sn as text)"
  3221 + "cast(sn as text)",
  3222 + "delng_crncy"
3000 3223 ]
3001 3224 },
3002 3225 "uniqueKey": [
... ... @@ -3008,6 +3231,7 @@
3008 3231 "amtField": "sum(delng_amt) as delng_amt",
3009 3232 "compareField": [
3010 3233 "accnut_ym",
  3234 + "delng_crncy",
3011 3235 "delng_amt"
3012 3236 ],
3013 3237 "matchingType": "mtch_ty",
... ... @@ -3017,7 +3241,7 @@
3017 3241 {
3018 3242 "active": true,
3019 3243 "type": "O-AB",
3020   - "typeName": "자기비용(INVOICE),개별상대수익,비교(년월,거래금액)",
  3244 + "typeName": "자기비용(INVOICE,거래통화),개별상대수익(거래통화),비교(년월,거래통화,거래금액)",
3021 3245  
3022 3246 "condOne": {
3023 3247 "cond": [
... ... @@ -3027,7 +3251,8 @@
3027 3251 "ext_key2 != ''"
3028 3252 ],
3029 3253 "makeCompareKey": [
3030   - "ext_key2"
  3254 + "ext_key2",
  3255 + "delng_crncy"
3031 3256 ]
3032 3257 },
3033 3258 "condTwo": {
... ... @@ -3038,7 +3263,8 @@
3038 3263 "makeCompareKey": [
3039 3264 "sys_se",
3040 3265 "accnut_ym",
3041   - "cast(sn as text)"
  3266 + "cast(sn as text)",
  3267 + "delng_crncy"
3042 3268 ]
3043 3269 },
3044 3270 "uniqueKey": [
... ... @@ -3050,6 +3276,7 @@
3050 3276 "amtField": "sum(delng_amt) as delng_amt",
3051 3277 "compareField": [
3052 3278 "accnut_ym",
  3279 + "delng_crncy",
3053 3280 "delng_amt"
3054 3281 ],
3055 3282 "matchingType": "mtch_ty",
... ... @@ -3062,7 +3289,7 @@
3062 3289 {
3063 3290 "active": true,
3064 3291 "type": "P-A",
3065   - "typeName": "자기수익(BL),상대비용(BL),비교(년월,거래금액)",
  3292 + "typeName": "자기수익(BL,거래통화),상대비용(BL,거래통화),비교(년월,거래통화,거래금액)",
3066 3293  
3067 3294 "condOne": {
3068 3295 "cond": [
... ... @@ -3072,7 +3299,8 @@
3072 3299 "ext_key3 != ''"
3073 3300 ],
3074 3301 "makeCompareKey": [
3075   - "ext_key3"
  3302 + "ext_key3",
  3303 + "delng_crncy"
3076 3304 ]
3077 3305 },
3078 3306 "condTwo": {
... ... @@ -3083,7 +3311,8 @@
3083 3311 "ext_key3 != ''"
3084 3312 ],
3085 3313 "makeCompareKey": [
3086   - "ext_key3"
  3314 + "ext_key3",
  3315 + "delng_crncy"
3087 3316 ]
3088 3317 },
3089 3318 "uniqueKey": [
... ... @@ -3095,6 +3324,7 @@
3095 3324 "amtField": "sum(delng_amt) as delng_amt",
3096 3325 "compareField": [
3097 3326 "accnut_ym",
  3327 + "delng_crncy",
3098 3328 "delng_amt"
3099 3329 ],
3100 3330 "matchingType": "mtch_ty",
... ... @@ -3104,7 +3334,7 @@
3104 3334 {
3105 3335 "active": true,
3106 3336 "type": "P-AA",
3107   - "typeName": "자기수익(BL),개별상대비용,비교(년월,거래금액)",
  3337 + "typeName": "자기수익(BL,거래통화),개별상대비용(거래통화),비교(년월,거래통화,거래금액)",
3108 3338  
3109 3339 "condOne": {
3110 3340 "cond": [
... ... @@ -3114,7 +3344,8 @@
3114 3344 "ext_key3 != ''"
3115 3345 ],
3116 3346 "makeCompareKey": [
3117   - "ext_key3"
  3347 + "ext_key3",
  3348 + "delng_crncy"
3118 3349 ]
3119 3350 },
3120 3351 "condTwo": {
... ... @@ -3125,7 +3356,8 @@
3125 3356 "makeCompareKey": [
3126 3357 "sys_se",
3127 3358 "accnut_ym",
3128   - "cast(sn as text)"
  3359 + "cast(sn as text)",
  3360 + "delng_crncy"
3129 3361 ]
3130 3362 },
3131 3363 "uniqueKey": [
... ... @@ -3137,6 +3369,7 @@
3137 3369 "amtField": "sum(delng_amt) as delng_amt",
3138 3370 "compareField": [
3139 3371 "accnut_ym",
  3372 + "delng_crncy",
3140 3373 "delng_amt"
3141 3374 ],
3142 3375 "matchingType": "mtch_ty",
... ... @@ -3146,7 +3379,7 @@
3146 3379 {
3147 3380 "active": true,
3148 3381 "type": "P-AB",
3149   - "typeName": "자기비용(BL),개별상대수익,비교(년월,거래금액)",
  3382 + "typeName": "자기비용(BL,거래통화),개별상대수익(거래통화),비교(년월,거래통화,거래금액)",
3150 3383  
3151 3384 "condOne": {
3152 3385 "cond": [
... ... @@ -3156,7 +3389,8 @@
3156 3389 "ext_key3 != ''"
3157 3390 ],
3158 3391 "makeCompareKey": [
3159   - "ext_key3"
  3392 + "ext_key3",
  3393 + "delng_crncy"
3160 3394 ]
3161 3395 },
3162 3396 "condTwo": {
... ... @@ -3167,7 +3401,8 @@
3167 3401 "makeCompareKey": [
3168 3402 "sys_se",
3169 3403 "accnut_ym",
3170   - "cast(sn as text)"
  3404 + "cast(sn as text)",
  3405 + "delng_crncy"
3171 3406 ]
3172 3407 },
3173 3408 "uniqueKey": [
... ... @@ -3179,6 +3414,7 @@
3179 3414 "amtField": "sum(delng_amt) as delng_amt",
3180 3415 "compareField": [
3181 3416 "accnut_ym",
  3417 + "delng_crncy",
3182 3418 "delng_amt"
3183 3419 ],
3184 3420 "matchingType": "mtch_ty",
... ... @@ -3191,7 +3427,7 @@
3191 3427 {
3192 3428 "active": true,
3193 3429 "type": "Q-A",
3194   - "typeName": "자기수익(LC),상대비용(LC),비교(년월,거래금액)",
  3430 + "typeName": "자기수익(LC,거래통화),상대비용(LC,거래통화),비교(년월,거래통화,거래금액)",
3195 3431  
3196 3432 "condOne": {
3197 3433 "cond": [
... ... @@ -3201,7 +3437,8 @@
3201 3437 "ext_key4 != ''"
3202 3438 ],
3203 3439 "makeCompareKey": [
3204   - "ext_key4"
  3440 + "ext_key4",
  3441 + "delng_crncy"
3205 3442 ]
3206 3443 },
3207 3444 "condTwo": {
... ... @@ -3212,7 +3449,8 @@
3212 3449 "ext_key4 != ''"
3213 3450 ],
3214 3451 "makeCompareKey": [
3215   - "ext_key4"
  3452 + "ext_key4",
  3453 + "delng_crncy"
3216 3454 ]
3217 3455 },
3218 3456 "uniqueKey": [
... ... @@ -3224,6 +3462,7 @@
3224 3462 "amtField": "sum(delng_amt) as delng_amt",
3225 3463 "compareField": [
3226 3464 "accnut_ym",
  3465 + "delng_crncy",
3227 3466 "delng_amt"
3228 3467 ],
3229 3468 "matchingType": "mtch_ty",
... ... @@ -3233,7 +3472,7 @@
3233 3472 {
3234 3473 "active": true,
3235 3474 "type": "Q-AA",
3236   - "typeName": "자기수익(LC),개별상대비용,비교(년월,거래금액)",
  3475 + "typeName": "자기수익(LC,거래통화),개별상대비용(거래통화),비교(년월,거래통화,거래금액)",
3237 3476  
3238 3477 "condOne": {
3239 3478 "cond": [
... ... @@ -3243,7 +3482,8 @@
3243 3482 "ext_key4 != ''"
3244 3483 ],
3245 3484 "makeCompareKey": [
3246   - "ext_key4"
  3485 + "ext_key4",
  3486 + "delng_crncy"
3247 3487 ]
3248 3488 },
3249 3489 "condTwo": {
... ... @@ -3254,7 +3494,8 @@
3254 3494 "makeCompareKey": [
3255 3495 "sys_se",
3256 3496 "accnut_ym",
3257   - "cast(sn as text)"
  3497 + "cast(sn as text)",
  3498 + "delng_crncy"
3258 3499 ]
3259 3500 },
3260 3501 "uniqueKey": [
... ... @@ -3266,6 +3507,7 @@
3266 3507 "amtField": "sum(delng_amt) as delng_amt",
3267 3508 "compareField": [
3268 3509 "accnut_ym",
  3510 + "delng_crncy",
3269 3511 "delng_amt"
3270 3512 ],
3271 3513 "matchingType": "mtch_ty",
... ... @@ -3275,7 +3517,7 @@
3275 3517 {
3276 3518 "active": true,
3277 3519 "type": "Q-AB",
3278   - "typeName": "자기비용(LC),개별상대수익,비교(년월,거래금액)",
  3520 + "typeName": "자기비용(LC,거래통화),개별상대수익(거래통화),비교(년월,거래통하,거래금액)",
3279 3521  
3280 3522 "condOne": {
3281 3523 "cond": [
... ... @@ -3285,7 +3527,8 @@
3285 3527 "ext_key4 != ''"
3286 3528 ],
3287 3529 "makeCompareKey": [
3288   - "ext_key4"
  3530 + "ext_key4",
  3531 + "delng_crncy"
3289 3532 ]
3290 3533 },
3291 3534 "condTwo": {
... ... @@ -3296,7 +3539,8 @@
3296 3539 "makeCompareKey": [
3297 3540 "sys_se",
3298 3541 "accnut_ym",
3299   - "cast(sn as text)"
  3542 + "cast(sn as text)",
  3543 + "delng_crncy"
3300 3544 ]
3301 3545 },
3302 3546 "uniqueKey": [
... ... @@ -3308,6 +3552,7 @@
3308 3552 "amtField": "sum(delng_amt) as delng_amt",
3309 3553 "compareField": [
3310 3554 "accnut_ym",
  3555 + "delng_crncy",
3311 3556 "delng_amt"
3312 3557 ],
3313 3558 "matchingType": "mtch_ty",
... ... @@ -3322,7 +3567,7 @@
3322 3567 {
3323 3568 "active": true,
3324 3569 "type": "Z-AA",
3325   - "typeName": "[재실행]자기수익(거래일자),상대비용(거래일자),비교(년월,거래금액)",
  3570 + "typeName": "[재실행]자기수익(거래일자,거래통화),상대비용(거래일자,거래통화),비교(년월,거래통화,거래금액)",
3326 3571  
3327 3572 "condOne": {
3328 3573 "cond": [
... ... @@ -3332,7 +3577,8 @@
3332 3577 "makeCompareKey": [
3333 3578 "sys_se",
3334 3579 "accnut_ym",
3335   - "delng_de"
  3580 + "delng_de",
  3581 + "delng_crncy"
3336 3582 ]
3337 3583 },
3338 3584 "condTwo": {
... ... @@ -3343,7 +3589,8 @@
3343 3589 "makeCompareKey": [
3344 3590 "sys_se",
3345 3591 "accnut_ym",
3346   - "delng_de"
  3592 + "delng_de",
  3593 + "delng_crncy"
3347 3594 ]
3348 3595 },
3349 3596 "uniqueKey": [
... ... @@ -3355,6 +3602,7 @@
3355 3602 "amtField": "sum(delng_amt) as delng_amt",
3356 3603 "compareField": [
3357 3604 "accnut_ym",
  3605 + "delng_crncy",
3358 3606 "delng_amt"
3359 3607 ],
3360 3608 "matchingType": "mtch_ty",
... ... @@ -3364,7 +3612,7 @@
3364 3612 {
3365 3613 "active": true,
3366 3614 "type": "Z-AB",
3367   - "typeName": "[재실행]자기수익(거래월),상대비용(거래월),비교(년월,거래금액)",
  3615 + "typeName": "[재실행]자기수익(거래월,거래통화),상대비용(거래월,거래통화),비교(년월,거래통화,거래금액)",
3368 3616  
3369 3617 "condOne": {
3370 3618 "cond": [
... ... @@ -3374,7 +3622,8 @@
3374 3622 "makeCompareKey": [
3375 3623 "sys_se",
3376 3624 "accnut_ym",
3377   - "substring(delng_de,1,6)"
  3625 + "substring(delng_de,1,6)",
  3626 + "delng_crncy"
3378 3627 ]
3379 3628 },
3380 3629 "condTwo": {
... ... @@ -3385,7 +3634,8 @@
3385 3634 "makeCompareKey": [
3386 3635 "sys_se",
3387 3636 "accnut_ym",
3388   - "substring(delng_de,1,6)"
  3637 + "substring(delng_de,1,6)",
  3638 + "delng_crncy"
3389 3639 ]
3390 3640 },
3391 3641 "uniqueKey": [
... ... @@ -3397,6 +3647,7 @@
3397 3647 "amtField": "sum(delng_amt) as delng_amt",
3398 3648 "compareField": [
3399 3649 "accnut_ym",
  3650 + "delng_crncy",
3400 3651 "delng_amt"
3401 3652 ],
3402 3653 "matchingType": "mtch_ty",
... ... @@ -3406,7 +3657,7 @@
3406 3657 {
3407 3658 "active": true,
3408 3659 "type": "Z-AC",
3409   - "typeName": "[재실행]자기수익(전체),상대비용(전체),비교(년월,거래금액)",
  3660 + "typeName": "[재실행]자기수익(전체,거래통화),상대비용(전체,거래통화),비교(년월,거래통화,거래금액)",
3410 3661  
3411 3662 "condOne": {
3412 3663 "cond": [
... ... @@ -3415,7 +3666,8 @@
3415 3666 ],
3416 3667 "makeCompareKey": [
3417 3668 "sys_se",
3418   - "accnut_ym"
  3669 + "accnut_ym",
  3670 + "delng_crncy"
3419 3671 ]
3420 3672 },
3421 3673 "condTwo": {
... ... @@ -3425,7 +3677,8 @@
3425 3677 ],
3426 3678 "makeCompareKey": [
3427 3679 "sys_se",
3428   - "accnut_ym"
  3680 + "accnut_ym",
  3681 + "delng_crncy"
3429 3682 ]
3430 3683 },
3431 3684 "uniqueKey": [
... ... @@ -3437,6 +3690,7 @@
3437 3690 "amtField": "sum(delng_amt) as delng_amt",
3438 3691 "compareField": [
3439 3692 "accnut_ym",
  3693 + "delng_crncy",
3440 3694 "delng_amt"
3441 3695 ],
3442 3696 "matchingType": "mtch_ty",
... ... @@ -3446,7 +3700,7 @@
3446 3700 {
3447 3701 "active": true,
3448 3702 "type": "Z-BA",
3449   - "typeName": "[재실행]자기채권(거래일자),상대채무(거래일자),비교(년월,거래금액)",
  3703 + "typeName": "[재실행]자기채권(거래일자,거래통화),상대채무(거래일자,거래통화),비교(년월,거래통화,거래금액)",
3450 3704  
3451 3705 "condOne": {
3452 3706 "cond": [
... ... @@ -3456,7 +3710,8 @@
3456 3710 "makeCompareKey": [
3457 3711 "sys_se",
3458 3712 "accnut_ym",
3459   - "delng_de"
  3713 + "delng_de",
  3714 + "delng_crncy"
3460 3715 ]
3461 3716 },
3462 3717 "condTwo": {
... ... @@ -3467,7 +3722,8 @@
3467 3722 "makeCompareKey": [
3468 3723 "sys_se",
3469 3724 "accnut_ym",
3470   - "delng_de"
  3725 + "delng_de",
  3726 + "delng_crncy"
3471 3727 ]
3472 3728 },
3473 3729 "uniqueKey": [
... ... @@ -3479,6 +3735,7 @@
3479 3735 "amtField": "sum(delng_amt) as delng_amt",
3480 3736 "compareField": [
3481 3737 "accnut_ym",
  3738 + "delng_crncy",
3482 3739 "delng_amt"
3483 3740 ],
3484 3741 "matchingType": "mtch_ty",
... ... @@ -3488,7 +3745,7 @@
3488 3745 {
3489 3746 "active": true,
3490 3747 "type": "Z-BB",
3491   - "typeName": "[재실행]자기채권(거래월),상대채무(거래월),비교(년월,거래금액)",
  3748 + "typeName": "[재실행]자기채권(거래월,거래통화),상대채무(거래월,거래통화),비교(년월,거래통화,거래금액)",
3492 3749  
3493 3750 "condOne": {
3494 3751 "cond": [
... ... @@ -3498,7 +3755,8 @@
3498 3755 "makeCompareKey": [
3499 3756 "sys_se",
3500 3757 "accnut_ym",
3501   - "substring(delng_de,1,6)"
  3758 + "substring(delng_de,1,6)",
  3759 + "delng_crncy"
3502 3760 ]
3503 3761 },
3504 3762 "condTwo": {
... ... @@ -3509,7 +3767,8 @@
3509 3767 "makeCompareKey": [
3510 3768 "sys_se",
3511 3769 "accnut_ym",
3512   - "substring(delng_de,1,6)"
  3770 + "substring(delng_de,1,6)",
  3771 + "delng_crncy"
3513 3772 ]
3514 3773 },
3515 3774 "uniqueKey": [
... ... @@ -3521,6 +3780,7 @@
3521 3780 "amtField": "sum(delng_amt) as delng_amt",
3522 3781 "compareField": [
3523 3782 "accnut_ym",
  3783 + "delng_crncy",
3524 3784 "delng_amt"
3525 3785 ],
3526 3786 "matchingType": "mtch_ty",
... ... @@ -3530,7 +3790,7 @@
3530 3790 {
3531 3791 "active": true,
3532 3792 "type": "Z-BC",
3533   - "typeName": "[재실행]자기채권(전체),상대채무(전체),비교(년월,거래금액)",
  3793 + "typeName": "[재실행]자기채권(전체,거래통화),상대채무(전체,거래통화),비교(년월,거래통화,거래금액)",
3534 3794  
3535 3795 "condOne": {
3536 3796 "cond": [
... ... @@ -3539,7 +3799,8 @@
3539 3799 ],
3540 3800 "makeCompareKey": [
3541 3801 "sys_se",
3542   - "accnut_ym"
  3802 + "accnut_ym",
  3803 + "delng_crncy"
3543 3804 ]
3544 3805 },
3545 3806 "condTwo": {
... ... @@ -3549,7 +3810,8 @@
3549 3810 ],
3550 3811 "makeCompareKey": [
3551 3812 "sys_se",
3552   - "accnut_ym"
  3813 + "accnut_ym",
  3814 + "delng_crncy"
3553 3815 ]
3554 3816 },
3555 3817 "uniqueKey": [
... ... @@ -3561,6 +3823,7 @@
3561 3823 "amtField": "sum(delng_amt) as delng_amt",
3562 3824 "compareField": [
3563 3825 "accnut_ym",
  3826 + "delng_crncy",
3564 3827 "delng_amt"
3565 3828 ],
3566 3829 "matchingType": "mtch_ty",
... ...
src/main/resources/mybatis/primaryMapper/MatchingInnerDelingMapper.xml
... ... @@ -9,7 +9,6 @@
9 9 , accnut_ym
10 10 , cpr_code
11 11 , partn_cpr
12   - , delng_crncy
13 12 FROM
14 13 (
15 14 SELECT
... ... @@ -17,7 +16,6 @@
17 16 , accnut_ym
18 17 , cpr_code
19 18 , partn_cpr
20   - , delng_crncy
21 19 , case when count(*) > 0 then 1 else 0 end as cnt
22 20 FROM
23 21 public.batch_tbcr_inner_delng
... ... @@ -26,20 +24,17 @@
26 24 and accnut_ym = #{accnutYm}
27 25 and mtch_ty is null
28 26 and dta_ty in ('11','21','31','33','35','37','41')
29   - and delng_amt != 0
30 27 GROUP BY
31 28 sys_se
32 29 , accnut_ym
33 30 , cpr_code
34 31 , partn_cpr
35   - , delng_crncy
36 32 union all
37 33 SELECT
38 34 sys_se
39 35 , accnut_ym
40 36 , partn_cpr as cpr_code
41 37 , cpr_code as partn_cpr
42   - , delng_crncy
43 38 , case when count(*) > 0 then 1 else 0 end as cnt
44 39 FROM
45 40 public.batch_tbcr_inner_delng
... ... @@ -48,20 +43,17 @@
48 43 and accnut_ym = #{accnutYm}
49 44 and mtch_ty is null
50 45 and dta_ty in ('12','22','32','34','36','38','42')
51   - and delng_amt != 0
52 46 GROUP BY
53 47 sys_se
54 48 , accnut_ym
55 49 , cpr_code
56 50 , partn_cpr
57   - , delng_crncy
58 51 ) m
59 52 GROUP BY
60 53 sys_se
61 54 , accnut_ym
62 55 , cpr_code
63 56 , partn_cpr
64   - , delng_crncy
65 57 HAVING sum(cnt) > 1
66 58 </select>
67 59  
... ... @@ -75,7 +67,6 @@
75 67 and accnut_ym = #{accnutYm}
76 68 and cpr_code = #{cprCode}
77 69 and partn_cpr = #{partnCpr}
78   - and delng_crncy = #{delngCrncy}
79 70 <foreach collection="cond" item="item" open="" close="" separator="">
80 71 and ${item}
81 72 </foreach>
... ... @@ -95,7 +86,6 @@
95 86 and compare_ky is not null
96 87 and cpr_code = #{cprCode}
97 88 and partn_cpr = #{partnCpr}
98   - and delng_crncy = #{delngCrncy}
99 89 <foreach collection="cond" item="item" open="" close="" separator="">
100 90 and ${item}
101 91 </foreach>
... ... @@ -119,7 +109,6 @@
119 109 and compare_ky is not null
120 110 and cpr_code = #{cprCode}
121 111 and partn_cpr = #{partnCpr}
122   - and delng_crncy = #{delngCrncy}
123 112 <foreach collection="cond" item="item" open="" close="" separator="">
124 113 and ${item}
125 114 </foreach>
... ... @@ -324,8 +313,6 @@
324 313 WHERE
325 314 cons_group = #{sysSe}
326 315 and account_period = #{accnutYm}
327   - and adjust_type is null
328   - and coalesce(equal_check, 'N') != 'Y'
329 316 </update>
330 317  
331 318 <update id="deleteDataAi" parameterType="map">
... ... @@ -373,8 +360,6 @@
373 360 WHERE
374 361 cons_group = #{sysSe}
375 362 and account_period = #{accnutYm}
376   - and adjust_type is null
377   - and coalesce(equal_check, 'N') != 'Y'
378 363 </update>
379 364  
380 365 <update id="updateClearNewMatchKey" parameterType="map">
... ... @@ -426,7 +411,6 @@
426 411 , sn
427 412 , '' as compare_ky
428 413 , delng_de
429   - , delng_crncy
430 414 , delng_amt
431 415 FROM
432 416 public.batch_tbcr_inner_delng
... ... @@ -435,7 +419,6 @@
435 419 and accnut_ym = #{accnutYm}
436 420 and cpr_code = #{cprCode}
437 421 and partn_cpr = #{partnCpr}
438   - and delng_crncy = #{delngCrncy}
439 422 and mtch_ky is null
440 423 <if test='conds eq "T".toString()'>
441 424 and dta_ty in ('11','21','41')
... ... @@ -445,7 +428,7 @@
445 428 </if>
446 429 and delng_amt != 0
447 430 ORDER BY
448   - delng_de, sn
  431 + delng_de
449 432 </select>
450 433  
451 434 <!-- 매칭작업할 데이타 가져오기 -->
... ... @@ -456,7 +439,6 @@
456 439 , sn
457 440 , '' as compare_ky
458 441 , delng_de
459   - , delng_crncy
460 442 , delng_amt
461 443 FROM
462 444 public.batch_tbcr_inner_delng
... ... @@ -465,7 +447,6 @@
465 447 and accnut_ym = #{accnutYm}
466 448 and cpr_code = #{cprCode}
467 449 and partn_cpr = #{partnCpr}
468   - and delng_crncy = #{delngCrncy}
469 450 and mtch_ky is null
470 451 <if test='conds eq "T".toString()'>
471 452 and dta_ty in ('12','22','42')
... ... @@ -475,7 +456,7 @@
475 456 </if>
476 457 and delng_amt != 0
477 458 ORDER BY
478   - delng_de, sn
  459 + delng_de
479 460 </select>
480 461  
481 462 <update id="setExtraResult" parameterType="map">
... ... @@ -522,25 +503,28 @@
522 503  
523 504 <!-- AI 작업리스트 -->
524 505 <select id="getAiReadData" parameterType="map" resultType="map">
525   - with HT_TR as (
  506 + SELECT
  507 + sys_se
  508 + , accnut_ym
  509 + , cpr_code
  510 + , partn_cpr
  511 + , delng_crncy
  512 + FROM
  513 + (
526 514 SELECT
527 515 sys_se
528 516 , accnut_ym
529 517 , cpr_code
530 518 , partn_cpr
531 519 , delng_crncy
532   - , case when count(*) &gt; 0 then 1 else 0 end as cnt
533   - , count(*) as CNT1
534   - , 0 as CNT2
535   - , SUM(delng_amt) as AMT1
536   - , 0 as AMT2
  520 + , case when count(*) > 0 then 1 else 0 end as cnt
537 521 FROM
538 522 public.batch_tbcr_inner_delng
539 523 WHERE
540 524 sys_se = #{sysSe}
541 525 and accnut_ym = #{accnutYm}
542 526 and mtch_ty is null
543   - and dta_ty in ('11','21','41') /* AI 에서는 일단 수익비용 만 처리 */
  527 + and dta_ty in ('11','21','31','33','35','37','41')
544 528 GROUP BY
545 529 sys_se
546 530 , accnut_ym
... ... @@ -554,51 +538,28 @@
554 538 , partn_cpr as cpr_code
555 539 , cpr_code as partn_cpr
556 540 , delng_crncy
557   - , case when count(*) &gt; 0 then 1 else 0 end as cnt
558   - , 0 as CNT1
559   - , count(*) as CNT2
560   - , 0 as AMT1
561   - , SUM(delng_amt) as AMT2
  541 + , case when count(*) > 0 then 1 else 0 end as cnt
562 542 FROM
563 543 public.batch_tbcr_inner_delng
564 544 WHERE
565 545 sys_se = #{sysSe}
566 546 and accnut_ym = #{accnutYm}
567 547 and mtch_ty is null
568   - and dta_ty in ('12','22','42') /* AI 에서는 일단 수익비용 만 처리 */
  548 + and dta_ty in ('12','22','32','34','36','38','42')
569 549 GROUP BY
570 550 sys_se
571 551 , accnut_ym
572   - , partn_cpr
573 552 , cpr_code
  553 + , partn_cpr
574 554 , delng_crncy
575   - )
576   - SELECT
577   - sys_se
578   - , accnut_ym
579   - , cpr_code
580   - , partn_cpr
581   - , delng_crncy
582   - --- , SUM(CNT1) as CNT1 /* 수익 건수 */
583   - --- , SUM(CNT2) as CNT2 /* 비용 건수 */
584   - --- , SUM(AMT1) as AMT1 /* 수익 금액 */
585   - --- , SUM(AMT2) as AMT2 /* 비용 금액 */
586   - from HT_TR
  555 + ) m
587 556 GROUP BY
588 557 sys_se
589 558 , accnut_ym
590 559 , cpr_code
591 560 , partn_cpr
592 561 , delng_crncy
593   - HAVING sum(cnt) = 2 /* 자기, 상대 거래가 모두 있고 */
594   - and ( ( SUM(CNT1) + SUM(CNT2) &gt; 2 ) /* 자기, 상대 거래 2건 이상 이거나 */
595   - or ( SUM(AMT1) - SUM(AMT2) = 0 ) /* 자기, 상대 거래 금액 같거나 */
596   - )
597   - order by sys_se
598   - , accnut_ym
599   - , cpr_code
600   - , partn_cpr
601   - , delng_crncy
  562 + HAVING sum(cnt) > 1
602 563 </select>
603 564  
604 565 <!-- User Job Status -->
... ... @@ -612,7 +573,6 @@
612 573 , exit_code
613 574 , exit_message
614 575 , user_job_group
615   - , log_file_path
616 576 FROM
617 577 public.batch_user_job_status
618 578 WHERE
... ... @@ -664,50 +624,4 @@
664 624 and accnut_ym = #{accnutYm}
665 625 </select>
666 626  
667   -
668   -
669   -
670   - <update id="updateInitExclusion1" parameterType="map">
671   - update batch_tbcr_inner_delng
672   - set
673   - MTCH_SYS = 'EXCLUSION'
674   - , MTCH_TY = 'ZERO'
675   - , MTCH_TY_NM = 'ZERO'
676   - where sys_se = #{sysSe}
677   - and accnut_ym = #{accnutYm}
678   - and mtch_ty is null
679   - and delng_amt = 0
680   - </update>
681   -
682   -
683   - <update id="updateInitExclusion2" parameterType="map">
684   - merge into batch_tbcr_inner_delng a
685   - using (
686   - with ht_data as (
687   - select count(*) over(partition by sys_se, accnut_ym, dta_ty, cpr_code, partn_cpr, cnnc_acnt_code, delng_de, delng_crncy) as cnt
688   - , sum(delng_amt) over(partition by sys_se, accnut_ym, dta_ty, cpr_code, partn_cpr, cnnc_acnt_code, delng_de, delng_crncy) as sum_amt
689   - , a.*
690   - from batch_tbcr_inner_delng a
691   - where sys_se = #{sysSe}
692   - and accnut_ym = #{accnutYm}
693   - and mtch_ty is null
694   - and delng_amt != 0
695   - )
696   - select sys_se, accnut_ym, sn
697   - from ht_data
698   - where cnt = 2
699   - and sum_amt = 0
700   - ) b
701   - on (
702   - b.sys_se = a.sys_se
703   - and b.accnut_ym = a.accnut_ym
704   - and b.sn = a.sn
705   - )
706   - when matched then
707   - update
708   - set MTCH_SYS = 'EXCLUSION'
709   - , MTCH_TY = 'REVERSAL'
710   - , MTCH_TY_NM = 'REVERSAL'
711   - </update>
712   -
713 627 </mapper>
714 628 \ No newline at end of file
... ...
src/main/resources/mybatis/secondaryMapper/OracleMapper.xml
1 1 <?xml version="1.0" encoding="UTF-8"?>
2 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 3 <mapper namespace="com.batch.mapper.secondary.OracleMapper">
4   -
  4 +
5 5 <!-- 작업리스트 -->
6 6 <select id="getOriginalData" parameterType="map" resultType="map">
7 7 SELECT
... ...
사용법.md 0 → 100644
  1 +0. 필요시 application.proeprties파일을 수정한다.
  2 +1. Run.bat를 실행하여 서버를 뛰운다.
  3 +2. http://localhost:8080/swagger-ui/index.html로 들어가서 테스트 가능
  4 +3. 파리미터
  5 +
  6 +#원본데이타를 가져와 생성
  7 +http://localhost:8080/api/job/create (post)
  8 +{
  9 + "sysSe": "AI_ALL",
  10 + "accnutYm": "202311"
  11 +}
  12 +
  13 +.\curl\bin\curl -d '{"sysSe":"AI_ALL", "accnutYm":"202311"}' `
  14 +-H "Content-Type: application/json" `
  15 +-X POST http://localhost:8080/api/job/create
  16 +
  17 +#자동매칭
  18 +http://localhost:8080/api/job/matching
  19 +{
  20 + "jobType": "ALL",
  21 + "sysSe": "AI_ALL",
  22 + "accnutYm": "202311",
  23 + "searchCond": "mtch_ty is null"
  24 +}
  25 +
  26 +.\curl\bin\curl -d '{"jobType": "ALL", "sysSe":"AI_ALL", "accnutYm":"202311", "searchCond":"mtch_ty is null"}' `
  27 +-H "Content-Type: application/json" `
  28 +-X POST http://localhost:8080/api/job/matching
  29 +
  30 +
  31 +#EX 매칭 (조합)
  32 +http://localhost:8080/api/job/extramatching
  33 +{
  34 + "sysSe": "LS_ALL",
  35 + "accnutYm": "202311"
  36 +}
  37 +
  38 +.\curl\bin\curl -d '{"sysSe":"AI_ALL", "accnutYm":"202311"}' `
  39 +-H "Content-Type: application/json" `
  40 +-X POST http://localhost:8080/api/job/extramatching
  41 +
  42 +
  43 +#AI 매칭
  44 +http://localhost:8080/api/job/aimatching
  45 +{
  46 + "sysSe": "LS_ALL",
  47 + "accnutYm": "202310",
  48 +}
  49 +
  50 +
  51 +.\curl\bin\curl -d '{"sysSe":"AI_ALL", "accnutYm":"202311"}' `
  52 +-H "Content-Type: application/json" `
  53 +-X POST http://localhost:8080/api/job/aimatching
  54 +
  55 +
  56 +#매칭결과 리턴시
  57 +http://localhost:8080/api/job/return
  58 +{
  59 + "sysSe": "LS_ALL",
  60 + "accnutYm": "202312"
  61 +}
  62 +
  63 +.\curl\bin\curl -d '{"sysSe":"AI_ALL", "accnutYm":"202311"}' `
  64 +-H "Content-Type: application/json" `
  65 +-X POST http://localhost:8080/api/job/return
  66 +
  67 +
  68 +#작업진행결과
  69 +http://localhost:8080/api/job/userJobInfo/JOB그룹id
... ...