Commit a45ecedc93c51288a14e6112f49b053420df6ef8
1 parent
406c670d
* EX 매칭은 순차 실행으로 처리
* AI 작업대상 목록 sql 수정 자기:상대 거래 건수 1:1 이면서 금액 다른 것들 제외
Showing
4 changed files
with
263 additions
and
41 deletions
Show diff stats
src/main/java/com/batch/config/MatchingExtraProcessorAuto.java
| ... | ... | @@ -9,6 +9,8 @@ import java.util.List; |
| 9 | 9 | import java.util.Map; |
| 10 | 10 | import java.util.UUID; |
| 11 | 11 | |
| 12 | +import org.springframework.batch.core.configuration.annotation.StepScope; | |
| 13 | + | |
| 12 | 14 | import com.batch.mapper.primary.MatchingInnerDelingMapper; |
| 13 | 15 | import com.batch.util.StatisticsUtil; |
| 14 | 16 | |
| ... | ... | @@ -22,7 +24,7 @@ public class MatchingExtraProcessorAuto { |
| 22 | 24 | private final MatchingInnerDelingMapper matchingInnerDelingMapper; |
| 23 | 25 | |
| 24 | 26 | @SuppressWarnings("unchecked") |
| 25 | - public void process(Map paramRec, int iCmbnOwnCnt, int iCmbnTranCnt, int iStartOwn, int iStartTran) throws Exception { | |
| 27 | + public void process(Map paramRec, int iCmbnOwnCnt, int iCmbnTranCnt, int iStartOwn, int iStartTran, int mtchNumber) throws Exception { | |
| 26 | 28 | |
| 27 | 29 | //Job Create Log |
| 28 | 30 | UUID uuid = UUID.randomUUID(); |
| ... | ... | @@ -130,7 +132,6 @@ public class MatchingExtraProcessorAuto { |
| 130 | 132 | //비교 lMatchingDataOne vs mMatchingDataTwo |
| 131 | 133 | List<Map> lMatchingResultUpdate = new ArrayList<Map>(); //업데이트할 대상 |
| 132 | 134 | |
| 133 | - int mtchNumber = 0; | |
| 134 | 135 | String mtchSys = "AUTO"; |
| 135 | 136 | String mtchType = "EX_" + iCmbnOwnCnt + "_" + iCmbnTranCnt; |
| 136 | 137 | String mtchTypeName = "자기(" + iCmbnOwnCnt + "건Sum), 상대(" + iCmbnTranCnt + "건Sum), ("+sDelngCrncy+"), 비교(금액)"; |
| ... | ... | @@ -230,6 +231,7 @@ public class MatchingExtraProcessorAuto { |
| 230 | 231 | } |
| 231 | 232 | log.debug("Updated OrgData : " + iUpdated + "건"); |
| 232 | 233 | |
| 234 | + | |
| 233 | 235 | //작업종료에 대한 로그 업데이트 |
| 234 | 236 | paramLog.put("exit_code", "0"); |
| 235 | 237 | paramLog.put("exit_message", ""); | ... | ... |
src/main/java/com/batch/controller/JobController.java
| ... | ... | @@ -7,6 +7,8 @@ import java.util.Map; |
| 7 | 7 | import java.util.UUID; |
| 8 | 8 | |
| 9 | 9 | import org.springframework.beans.factory.annotation.Autowired; |
| 10 | +import org.springframework.transaction.annotation.Isolation; | |
| 11 | +import org.springframework.transaction.annotation.Transactional; | |
| 10 | 12 | import org.springframework.web.bind.annotation.GetMapping; |
| 11 | 13 | import org.springframework.web.bind.annotation.PathVariable; |
| 12 | 14 | import org.springframework.web.bind.annotation.PostMapping; |
| ... | ... | @@ -102,12 +104,14 @@ public class JobController { |
| 102 | 104 | * "searchTwo": "dta_ty in ('11','21','31','33','35','37','41')" |
| 103 | 105 | * } |
| 104 | 106 | */ |
| 107 | + | |
| 105 | 108 | //Job Create Log |
| 106 | 109 | UUID uuid = UUID.randomUUID(); |
| 107 | 110 | String sJobGroup = uuid.toString(); |
| 108 | 111 | |
| 109 | - log.debug("Start Extra Matching Job"); | |
| 110 | - List<Map> retData = matchingInnerDelingMapper.getCustomItemReadData(params); | |
| 112 | + | |
| 113 | +// log.debug("Start Extra Matching Job"); | |
| 114 | +// List<Map> retData = matchingInnerDelingMapper.getCustomItemReadData(params); | |
| 111 | 115 | // List<Map> retData = new ArrayList<Map>(); |
| 112 | 116 | // Map m = new HashMap(); |
| 113 | 117 | // m.put("sys_se", "LS_ALL"); |
| ... | ... | @@ -117,22 +121,39 @@ public class JobController { |
| 117 | 121 | // m.put("searchOne", "dta_ty in ('11','21','41')"); |
| 118 | 122 | // m.put("searchTwo", "dta_ty in ('12','22','42')"); |
| 119 | 123 | // retData.add(m); |
| 120 | - // 수익/비용 | |
| 121 | - for(Map curMap : retData) { | |
| 122 | - curMap.put("conds", "T"); | |
| 123 | - log.info("Start extraJobSub Transaction !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); | |
| 124 | - jobService.extraJobSub(sJobGroup, curMap); | |
| 125 | - log.info("End extraJobSub Transaction !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); | |
| 126 | - } | |
| 127 | - //채권/채무 | |
| 128 | - for(Map curMap : retData) { | |
| 129 | - curMap.put("conds", "B"); | |
| 130 | - log.info("Start extraJobSub Balance !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); | |
| 131 | - jobService.extraJobSub(sJobGroup, curMap); | |
| 132 | - log.info("End extraJobSub Balance !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); | |
| 133 | - } | |
| 134 | 124 | |
| 135 | - log.debug("End Extra Matching Job"); | |
| 125 | + /** extraJobSub start ************************************************************************************** */ | |
| 126 | +// List<Map> retData = matchingInnerDelingMapper.getCustomItemReadData(params); | |
| 127 | +// | |
| 128 | +// int mtchNumber = 0; | |
| 129 | +// // 수익/비용 | |
| 130 | +// for(Map curMap : retData) { | |
| 131 | +// curMap.put("conds", "T"); | |
| 132 | +// log.info("Start extraJobSub Transaction !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); | |
| 133 | +// jobService.extraJobSub(sJobGroup, curMap, mtchNumber); | |
| 134 | +// log.info("End extraJobSub Transaction !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); | |
| 135 | +// } | |
| 136 | +// //채권/채무 | |
| 137 | +// for(Map curMap : retData) { | |
| 138 | +// curMap.put("conds", "B"); | |
| 139 | +// log.info("Start extraJobSub Balance !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); | |
| 140 | +// jobService.extraJobSub(sJobGroup, curMap, mtchNumber); | |
| 141 | +// log.info("End extraJobSub Balance !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); | |
| 142 | +// } | |
| 143 | + /** extraJobSub end ************************************************************************************** */ | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + /** extraJobSub2 start ************************************************************************************** */ | |
| 148 | + long startTime = System.currentTimeMillis(); | |
| 149 | + log.info("### Start Extra Matching Job : "+startTime); | |
| 150 | + jobService.extraJobSub2(sJobGroup, params); | |
| 151 | + | |
| 152 | + long endTime = System.currentTimeMillis(); | |
| 153 | + log.info("### End Extra Matching Job : "+endTime); | |
| 154 | + /** extraJobSub2 end ************************************************************************************** */ | |
| 155 | + | |
| 156 | + | |
| 136 | 157 | |
| 137 | 158 | Map<String, String> rtnMap = new HashMap<String, String>(); |
| 138 | 159 | rtnMap.put("jobGroupId", sJobGroup); | ... | ... |
src/main/java/com/batch/service/JobService.java
| ... | ... | @@ -24,6 +24,8 @@ import org.springframework.beans.factory.annotation.Value; |
| 24 | 24 | import org.springframework.context.ApplicationContext; |
| 25 | 25 | import org.springframework.scheduling.annotation.Async; |
| 26 | 26 | import org.springframework.stereotype.Service; |
| 27 | +import org.springframework.transaction.annotation.Isolation; | |
| 28 | +import org.springframework.transaction.annotation.Transactional; | |
| 27 | 29 | import org.zeroturnaround.exec.ProcessExecutor; |
| 28 | 30 | import org.zeroturnaround.exec.stream.LogOutputStream; |
| 29 | 31 | |
| ... | ... | @@ -121,10 +123,14 @@ public class JobService { |
| 121 | 123 | } |
| 122 | 124 | |
| 123 | 125 | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 124 | 129 | @SuppressWarnings("rawtypes") |
| 125 | 130 | @Async("extAsync") |
| 126 | - public void extraJobSub(String jobGroupId, Map paramRec) throws Exception { | |
| 127 | - | |
| 131 | + public void extraJobSub(String jobGroupId, Map paramRec, int key) throws Exception { | |
| 132 | + | |
| 133 | + int mtchNumber = key; | |
| 128 | 134 | //Job Create Log |
| 129 | 135 | UUID uuid = UUID.randomUUID(); |
| 130 | 136 | HashMap<String, String> mt = new HashMap<String, String>(); |
| ... | ... | @@ -135,36 +141,37 @@ public class JobService { |
| 135 | 141 | paramLog.put("user_job_group", jobGroupId); |
| 136 | 142 | paramLog.put("user_job_id", sDate); |
| 137 | 143 | paramLog.put("user_job_name", "Extra매칭(" + paramRec.toString() + ")"); |
| 138 | - matchingInnerDelingMapper.createUserJob(paramLog); | |
| 139 | 144 | |
| 145 | + matchingInnerDelingMapper.createUserJob(paramLog); | |
| 146 | + | |
| 140 | 147 | String sThreadName = Thread.currentThread().getName(); |
| 141 | 148 | long startTime = System.currentTimeMillis(); |
| 142 | - log.info("extra [" + sThreadName + "]Job Started : " + startTime + "]params=" + paramRec.toString()); | |
| 149 | + log.info("extra [" + sThreadName + " : "+sDate+"]Job Started : " + startTime + "]params=" + paramRec.toString()); | |
| 143 | 150 | log.debug("extra [" + sThreadName + "]params=" + paramRec.toString()); |
| 144 | 151 | |
| 145 | 152 | MatchingExtraProcessorAuto matchingExtraProcessorAuto = new MatchingExtraProcessorAuto(matchingInnerDelingMapper); |
| 146 | 153 | |
| 147 | 154 | //2건씩 합산 매칭일 경우 최대 20000건 까지 |
| 148 | 155 | for (int i=0; i<20000;i=i+1000) { |
| 149 | - matchingExtraProcessorAuto.process(paramRec, 1, 2, 0, i); | |
| 156 | + matchingExtraProcessorAuto.process(paramRec, 1, 2, 0, i, mtchNumber); | |
| 150 | 157 | } |
| 151 | 158 | for (int i=0; i<20000;i=i+1000) { |
| 152 | - matchingExtraProcessorAuto.process(paramRec, 2, 1, i, 0); | |
| 159 | + matchingExtraProcessorAuto.process(paramRec, 2, 1, i, 0, mtchNumber); | |
| 153 | 160 | } |
| 154 | 161 | for (int i=0; i<20000;i=i+1000) { |
| 155 | - matchingExtraProcessorAuto.process(paramRec, 2, 2, i, i); | |
| 162 | + matchingExtraProcessorAuto.process(paramRec, 2, 2, i, i, mtchNumber); | |
| 156 | 163 | } |
| 157 | 164 | |
| 158 | 165 | //3건씩 매칭일 경우 최대 5000건 까지 |
| 159 | 166 | for (int i=0; i<2000;i=i+100) { |
| 160 | - matchingExtraProcessorAuto.process(paramRec, 1, 3, 0, i); | |
| 167 | + matchingExtraProcessorAuto.process(paramRec, 1, 3, 0, i, mtchNumber); | |
| 161 | 168 | } |
| 162 | 169 | for (int i=0; i<2000;i=i+100) { |
| 163 | - matchingExtraProcessorAuto.process(paramRec, 3, 1, i, 0); | |
| 170 | + matchingExtraProcessorAuto.process(paramRec, 3, 1, i, 0, mtchNumber); | |
| 164 | 171 | } |
| 165 | 172 | |
| 166 | 173 | long endTime = System.currentTimeMillis(); |
| 167 | - log.info("extra [" + sThreadName + "]Job Ended: " + endTime); | |
| 174 | + log.info("extra [" + sThreadName + " : "+sDate+"]Job Ended: " + endTime); | |
| 168 | 175 | log.info("extra [" + sThreadName + "]Running Time : " + (endTime - startTime) + "ms"); |
| 169 | 176 | |
| 170 | 177 | //작업종료에 대한 로그 업데이트 |
| ... | ... | @@ -172,6 +179,129 @@ public class JobService { |
| 172 | 179 | paramLog.put("exit_message", ""); |
| 173 | 180 | matchingInnerDelingMapper.finishUserJob(paramLog); |
| 174 | 181 | |
| 182 | + } | |
| 183 | + | |
| 184 | + | |
| 185 | + @SuppressWarnings("rawtypes") | |
| 186 | + @Async("extAsync") | |
| 187 | + public void extraJobSub2(String jobGroupId, Map paramRec) throws Exception { | |
| 188 | + | |
| 189 | + | |
| 190 | + List<Map> retData = matchingInnerDelingMapper.getCustomItemReadData(paramRec); | |
| 191 | + | |
| 192 | + int mtchNumber = 0; | |
| 193 | + paramRec.put("conds", "T"); | |
| 194 | + for(Map curMap : retData) { | |
| 195 | + paramRec.putAll(curMap); | |
| 196 | + //Job Create Log | |
| 197 | + UUID uuid = UUID.randomUUID(); | |
| 198 | + HashMap<String, String> mt = new HashMap<String, String>(); | |
| 199 | + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss"); | |
| 200 | + String sDate = dateFormat.format(new Date()) + ":" + uuid.toString(); | |
| 201 | + | |
| 202 | + Map<String, Object> paramLog = new HashMap<String, Object>(); | |
| 203 | + paramLog.put("user_job_group", jobGroupId); | |
| 204 | + paramLog.put("user_job_id", sDate); | |
| 205 | + paramLog.put("user_job_name", "Extra매칭(" + paramRec.toString() + ")"); | |
| 206 | + try { | |
| 207 | + matchingInnerDelingMapper.createUserJob(paramLog); | |
| 208 | + }catch(Exception e) { | |
| 209 | + log.info("createUserJob Exception : "+e.getMessage()); | |
| 210 | + } | |
| 211 | + String sThreadName = Thread.currentThread().getName(); | |
| 212 | + long startTime = System.currentTimeMillis(); | |
| 213 | + log.info("extra [" + sThreadName + " : "+sDate+"]Job Started : " + startTime + "]params=" + paramRec.toString()); | |
| 214 | + log.debug("extra [" + sThreadName + "]params=" + paramRec.toString()); | |
| 215 | + | |
| 216 | + MatchingExtraProcessorAuto matchingExtraProcessorAuto = new MatchingExtraProcessorAuto(matchingInnerDelingMapper); | |
| 217 | + | |
| 218 | + //2건씩 합산 매칭일 경우 최대 20000건 까지 | |
| 219 | + for (int i=0; i<20000;i=i+1000) { | |
| 220 | + matchingExtraProcessorAuto.process(paramRec, 1, 2, 0, i, mtchNumber); | |
| 221 | + } | |
| 222 | + for (int i=0; i<20000;i=i+1000) { | |
| 223 | + matchingExtraProcessorAuto.process(paramRec, 2, 1, i, 0, mtchNumber); | |
| 224 | + } | |
| 225 | + for (int i=0; i<20000;i=i+1000) { | |
| 226 | + matchingExtraProcessorAuto.process(paramRec, 2, 2, i, i, mtchNumber); | |
| 227 | + } | |
| 228 | + | |
| 229 | + //3건씩 매칭일 경우 최대 5000건 까지 | |
| 230 | + for (int i=0; i<2000;i=i+100) { | |
| 231 | + matchingExtraProcessorAuto.process(paramRec, 1, 3, 0, i, mtchNumber); | |
| 232 | + } | |
| 233 | + for (int i=0; i<2000;i=i+100) { | |
| 234 | + matchingExtraProcessorAuto.process(paramRec, 3, 1, i, 0, mtchNumber); | |
| 235 | + } | |
| 236 | + | |
| 237 | + long endTime = System.currentTimeMillis(); | |
| 238 | + log.info("extra [" + sThreadName + " : "+sDate+"]Job Ended: " + endTime); | |
| 239 | + log.info("extra [" + sThreadName + "]Running Time : " + (endTime - startTime) + "ms"); | |
| 240 | + | |
| 241 | + //작업종료에 대한 로그 업데이트 | |
| 242 | + paramLog.put("exit_code", "0"); | |
| 243 | + paramLog.put("exit_message", ""); | |
| 244 | + matchingInnerDelingMapper.finishUserJob(paramLog); | |
| 245 | + | |
| 246 | + } | |
| 247 | + | |
| 248 | + | |
| 249 | + paramRec.put("conds", "B"); | |
| 250 | + for(Map curMap : retData) { | |
| 251 | + paramRec.putAll(curMap); | |
| 252 | + | |
| 253 | + //Job Create Log | |
| 254 | + UUID uuid = UUID.randomUUID(); | |
| 255 | + HashMap<String, String> mt = new HashMap<String, String>(); | |
| 256 | + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss"); | |
| 257 | + String sDate = dateFormat.format(new Date()) + ":" + uuid.toString(); | |
| 258 | + | |
| 259 | + Map<String, Object> paramLog = new HashMap<String, Object>(); | |
| 260 | + paramLog.put("user_job_group", jobGroupId); | |
| 261 | + paramLog.put("user_job_id", sDate); | |
| 262 | + paramLog.put("user_job_name", "Extra매칭(" + paramRec.toString() + ")"); | |
| 263 | + try { | |
| 264 | + matchingInnerDelingMapper.createUserJob(paramLog); | |
| 265 | + }catch(Exception e) { | |
| 266 | + log.info("createUserJob Exception : "+e.getMessage()); | |
| 267 | + } | |
| 268 | + String sThreadName = Thread.currentThread().getName(); | |
| 269 | + long startTime = System.currentTimeMillis(); | |
| 270 | + log.info("extra [" + sThreadName + " : "+sDate+"]Job Started : " + startTime + "]params=" + paramRec.toString()); | |
| 271 | + log.debug("extra [" + sThreadName + "]params=" + paramRec.toString()); | |
| 272 | + | |
| 273 | + MatchingExtraProcessorAuto matchingExtraProcessorAuto = new MatchingExtraProcessorAuto(matchingInnerDelingMapper); | |
| 274 | + | |
| 275 | + //2건씩 합산 매칭일 경우 최대 20000건 까지 | |
| 276 | + for (int i=0; i<20000;i=i+1000) { | |
| 277 | + matchingExtraProcessorAuto.process(paramRec, 1, 2, 0, i, mtchNumber); | |
| 278 | + } | |
| 279 | + for (int i=0; i<20000;i=i+1000) { | |
| 280 | + matchingExtraProcessorAuto.process(paramRec, 2, 1, i, 0, mtchNumber); | |
| 281 | + } | |
| 282 | + for (int i=0; i<20000;i=i+1000) { | |
| 283 | + matchingExtraProcessorAuto.process(paramRec, 2, 2, i, i, mtchNumber); | |
| 284 | + } | |
| 285 | + | |
| 286 | + //3건씩 매칭일 경우 최대 5000건 까지 | |
| 287 | + for (int i=0; i<2000;i=i+100) { | |
| 288 | + matchingExtraProcessorAuto.process(paramRec, 1, 3, 0, i, mtchNumber); | |
| 289 | + } | |
| 290 | + for (int i=0; i<2000;i=i+100) { | |
| 291 | + matchingExtraProcessorAuto.process(paramRec, 3, 1, i, 0, mtchNumber); | |
| 292 | + } | |
| 293 | + | |
| 294 | + long endTime = System.currentTimeMillis(); | |
| 295 | + log.info("extra [" + sThreadName + " : "+sDate+"]Job Ended: " + endTime); | |
| 296 | + log.info("extra [" + sThreadName + "]Running Time : " + (endTime - startTime) + "ms"); | |
| 297 | + | |
| 298 | + //작업종료에 대한 로그 업데이트 | |
| 299 | + paramLog.put("exit_code", "0"); | |
| 300 | + paramLog.put("exit_message", ""); | |
| 301 | + matchingInnerDelingMapper.finishUserJob(paramLog); | |
| 302 | + | |
| 303 | + } | |
| 304 | + | |
| 175 | 305 | } |
| 176 | 306 | |
| 177 | 307 | @SuppressWarnings("rawtypes") |
| ... | ... | @@ -367,4 +497,6 @@ public class JobService { |
| 367 | 497 | matchingInnerDelingMapper.finishUserJob(paramLog); |
| 368 | 498 | |
| 369 | 499 | } |
| 500 | + | |
| 501 | + | |
| 370 | 502 | } | ... | ... |
src/main/resources/mybatis/primaryMapper/MatchingInnerDelingMapper.xml
| ... | ... | @@ -26,6 +26,7 @@ |
| 26 | 26 | and accnut_ym = #{accnutYm} |
| 27 | 27 | and mtch_ty is null |
| 28 | 28 | and dta_ty in ('11','21','31','33','35','37','41') |
| 29 | + and delng_amt != 0 | |
| 29 | 30 | GROUP BY |
| 30 | 31 | sys_se |
| 31 | 32 | , accnut_ym |
| ... | ... | @@ -47,6 +48,7 @@ |
| 47 | 48 | and accnut_ym = #{accnutYm} |
| 48 | 49 | and mtch_ty is null |
| 49 | 50 | and dta_ty in ('12','22','32','34','36','38','42') |
| 51 | + and delng_amt != 0 | |
| 50 | 52 | GROUP BY |
| 51 | 53 | sys_se |
| 52 | 54 | , accnut_ym |
| ... | ... | @@ -516,18 +518,83 @@ |
| 516 | 518 | |
| 517 | 519 | <!-- AI 작업리스트 --> |
| 518 | 520 | <select id="getAiReadData" parameterType="map" resultType="map"> |
| 519 | - SELECT DISTINCT sys_se | |
| 520 | - , accnut_ym | |
| 521 | - , cpr_code --자기법인 | |
| 522 | - , partn_cpr --상대법인 | |
| 523 | - , delng_crncy --통화유형 | |
| 524 | - FROM PUBLIC.BATCH_TBCR_INNER_DELNG | |
| 525 | - WHERE SYS_SE = #{sysSe} | |
| 526 | - AND ACCNUT_YM = #{accnutYm} | |
| 527 | - AND MTCH_KY IS NULL | |
| 528 | - AND DTA_TY IN ('11','12','21','22','41','42') | |
| 529 | - AND CPR_CODE != 'OTHER' | |
| 530 | - AND PARTN_CPR != 'OTHER' | |
| 521 | + with HT_TR as ( | |
| 522 | + SELECT | |
| 523 | + sys_se | |
| 524 | + , accnut_ym | |
| 525 | + , cpr_code | |
| 526 | + , partn_cpr | |
| 527 | + , delng_crncy | |
| 528 | + , case when count(*) > 0 then 1 else 0 end as cnt | |
| 529 | + , count(*) as CNT1 | |
| 530 | + , 0 as CNT2 | |
| 531 | + , SUM(delng_amt) as AMT1 | |
| 532 | + , 0 as AMT2 | |
| 533 | + FROM | |
| 534 | + public.batch_tbcr_inner_delng | |
| 535 | + WHERE | |
| 536 | + sys_se = #{sysSe} | |
| 537 | + and accnut_ym = #{accnutYm} | |
| 538 | + and mtch_ty is null | |
| 539 | + and dta_ty in ('11','21','41') /* AI 에서는 일단 수익비용 만 처리 */ | |
| 540 | + GROUP BY | |
| 541 | + sys_se | |
| 542 | + , accnut_ym | |
| 543 | + , cpr_code | |
| 544 | + , partn_cpr | |
| 545 | + , delng_crncy | |
| 546 | + union all | |
| 547 | + SELECT | |
| 548 | + sys_se | |
| 549 | + , accnut_ym | |
| 550 | + , partn_cpr as cpr_code | |
| 551 | + , cpr_code as partn_cpr | |
| 552 | + , delng_crncy | |
| 553 | + , case when count(*) > 0 then 1 else 0 end as cnt | |
| 554 | + , 0 as CNT1 | |
| 555 | + , count(*) as CNT2 | |
| 556 | + , 0 as AMT1 | |
| 557 | + , SUM(delng_amt) as AMT2 | |
| 558 | + FROM | |
| 559 | + public.batch_tbcr_inner_delng | |
| 560 | + WHERE | |
| 561 | + sys_se = #{sysSe} | |
| 562 | + and accnut_ym = #{accnutYm} | |
| 563 | + and mtch_ty is null | |
| 564 | + and dta_ty in ('12','22','42') /* AI 에서는 일단 수익비용 만 처리 */ | |
| 565 | + GROUP BY | |
| 566 | + sys_se | |
| 567 | + , accnut_ym | |
| 568 | + , partn_cpr | |
| 569 | + , cpr_code | |
| 570 | + , delng_crncy | |
| 571 | + ) | |
| 572 | + SELECT | |
| 573 | + sys_se | |
| 574 | + , accnut_ym | |
| 575 | + , cpr_code | |
| 576 | + , partn_cpr | |
| 577 | + , delng_crncy | |
| 578 | + --- , SUM(CNT1) as CNT1 /* 수익 건수 */ | |
| 579 | + --- , SUM(CNT2) as CNT2 /* 비용 건수 */ | |
| 580 | + --- , SUM(AMT1) as AMT1 /* 수익 금액 */ | |
| 581 | + --- , SUM(AMT2) as AMT2 /* 비용 금액 */ | |
| 582 | + from HT_TR | |
| 583 | + GROUP BY | |
| 584 | + sys_se | |
| 585 | + , accnut_ym | |
| 586 | + , cpr_code | |
| 587 | + , partn_cpr | |
| 588 | + , delng_crncy | |
| 589 | + HAVING sum(cnt) = 2 /* 자기, 상대 거래가 모두 있고 */ | |
| 590 | + and ( ( SUM(CNT1) + SUM(CNT2) > 2 ) /* 자기, 상대 거래 2건 이상 이거나 */ | |
| 591 | + or ( SUM(AMT1) - SUM(AMT2) = 0 ) /* 자기, 상대 거래 금액 같거나 */ | |
| 592 | + ) | |
| 593 | + order by sys_se | |
| 594 | + , accnut_ym | |
| 595 | + , cpr_code | |
| 596 | + , partn_cpr | |
| 597 | + , delng_crncy | |
| 531 | 598 | </select> |
| 532 | 599 | |
| 533 | 600 | <!-- User Job Status --> | ... | ... |