From e2f164d3575ae1abadbe48241ea84160dde02155 Mon Sep 17 00:00:00 2001 From: basssy Date: Sun, 10 Nov 2024 18:30:52 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B3=B5=ED=86=B5=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EB=B0=B0=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qcast/batch/JobLauncherController.java | 100 ++++++----- .../batch/system/CommonCodeConfiguration.java | 138 ++++++++++++++++ .../qcast/biz/commCode/CommCodeMapper.java | 56 +++++++ .../qcast/biz/commCode/CommCodeService.java | 63 +++++-- .../commCode/dto/CommonCodeSyncResponse.java | 17 ++ .../biz/commCode/dto/DetailCodeRequest.java | 27 +++ .../biz/commCode/dto/HeadCodeRequest.java | 24 +++ src/main/resources/config/application-dev.yml | 1 + .../resources/config/application-local.yml | 1 + src/main/resources/config/application-prd.yml | 1 + .../mappers/commCode/commCodeMapper.xml | 156 ++++++++++++++++++ 11 files changed, 518 insertions(+), 66 deletions(-) create mode 100644 src/main/java/com/interplug/qcast/batch/system/CommonCodeConfiguration.java create mode 100644 src/main/java/com/interplug/qcast/biz/commCode/dto/CommonCodeSyncResponse.java create mode 100644 src/main/java/com/interplug/qcast/biz/commCode/dto/DetailCodeRequest.java create mode 100644 src/main/java/com/interplug/qcast/biz/commCode/dto/HeadCodeRequest.java diff --git a/src/main/java/com/interplug/qcast/batch/JobLauncherController.java b/src/main/java/com/interplug/qcast/batch/JobLauncherController.java index 678d0626..0b00a03a 100644 --- a/src/main/java/com/interplug/qcast/batch/JobLauncherController.java +++ b/src/main/java/com/interplug/qcast/batch/JobLauncherController.java @@ -2,7 +2,6 @@ package com.interplug.qcast.batch; import java.util.Date; import java.util.Map; -import lombok.RequiredArgsConstructor; import org.springframework.batch.core.Job; import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.JobParametersBuilder; @@ -15,6 +14,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; +import lombok.RequiredArgsConstructor; @RestController @RequiredArgsConstructor @@ -34,22 +34,16 @@ public class JobLauncherController { * @throws JobRestartException */ @GetMapping("/batch/job/{jobName}") // Path Variable로 jobName을 받음 - public String launchJob(@PathVariable String jobName) - throws JobInstanceAlreadyCompleteException, - JobExecutionAlreadyRunningException, - JobParametersInvalidException, - JobRestartException { + public String launchJob(@PathVariable String jobName) throws JobInstanceAlreadyCompleteException, + JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException { Job job = jobs.get(jobName); if (job == null) { return "Job " + jobName + " not found"; } - JobParameters jobParameters = - new JobParametersBuilder() - .addString("jobName", jobName) - .addDate("time", new Date()) - .toJobParameters(); + JobParameters jobParameters = new JobParametersBuilder().addString("jobName", jobName) + .addDate("time", new Date()).toJobParameters(); jobLauncher.run(job, jobParameters); @@ -66,11 +60,8 @@ public class JobLauncherController { * @throws JobRestartException */ @Scheduled(cron = "0 55 23 * * *") - public String scheduleJobLauncher() - throws JobInstanceAlreadyCompleteException, - JobExecutionAlreadyRunningException, - JobParametersInvalidException, - JobRestartException { + public String scheduleJobLauncher() throws JobInstanceAlreadyCompleteException, + JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException { String jobName = "sampleOtherJob"; Job job = jobs.get(jobName); @@ -78,11 +69,8 @@ public class JobLauncherController { return "Job " + jobName + " not found"; } - JobParameters jobParameters = - new JobParametersBuilder() - .addString("jobName", jobName) - .addDate("time", new Date()) - .toJobParameters(); + JobParameters jobParameters = new JobParametersBuilder().addString("jobName", jobName) + .addDate("time", new Date()).toJobParameters(); jobLauncher.run(job, jobParameters); @@ -98,13 +86,10 @@ public class JobLauncherController { * @throws JobParametersInvalidException * @throws JobRestartException */ - // @Scheduled(cron = "*/5 * * * * *") + // @Scheduled(cron = "*/5 * * * * *") @Scheduled(cron = "0 55 23 * * *") - public String storeAdditionalInfoJob() - throws JobInstanceAlreadyCompleteException, - JobExecutionAlreadyRunningException, - JobParametersInvalidException, - JobRestartException { + public String storeAdditionalInfoJob() throws JobInstanceAlreadyCompleteException, + JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException { String jobName = "storeAdditionalJob"; Job job = jobs.get(jobName); @@ -129,11 +114,8 @@ public class JobLauncherController { * @throws JobRestartException */ @Scheduled(cron = "0 0 0 * * *") - public String materialJob() - throws JobInstanceAlreadyCompleteException, - JobExecutionAlreadyRunningException, - JobParametersInvalidException, - JobRestartException { + public String materialJob() throws JobInstanceAlreadyCompleteException, + JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException { String jobName = "materialJob"; Job job = jobs.get(jobName); @@ -159,11 +141,8 @@ public class JobLauncherController { * @throws JobRestartException */ @Scheduled(cron = "0 0 0 * * *") - public String bomJob() - throws JobInstanceAlreadyCompleteException, - JobExecutionAlreadyRunningException, - JobParametersInvalidException, - JobRestartException { + public String bomJob() throws JobInstanceAlreadyCompleteException, + JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException { String jobName = "bomJob"; Job job = jobs.get(jobName); @@ -189,11 +168,8 @@ public class JobLauncherController { * @throws JobRestartException */ @Scheduled(cron = "0 0 0 * * *") - public String businessChargerJob() - throws JobInstanceAlreadyCompleteException, - JobExecutionAlreadyRunningException, - JobParametersInvalidException, - JobRestartException { + public String businessChargerJob() throws JobInstanceAlreadyCompleteException, + JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException { String jobName = "businessChargerJob"; Job job = jobs.get(jobName); @@ -219,11 +195,8 @@ public class JobLauncherController { * @throws JobRestartException */ @Scheduled(cron = "0 0 0 * * *") - public String adminUserJob() - throws JobInstanceAlreadyCompleteException, - JobExecutionAlreadyRunningException, - JobParametersInvalidException, - JobRestartException { + public String adminUserJob() throws JobInstanceAlreadyCompleteException, + JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException { String jobName = "adminUserJob"; Job job = jobs.get(jobName); @@ -249,11 +222,8 @@ public class JobLauncherController { * @throws JobRestartException */ @Scheduled(cron = "0 0 0 * * *") - public String priceJob() - throws JobInstanceAlreadyCompleteException, - JobExecutionAlreadyRunningException, - JobParametersInvalidException, - JobRestartException { + public String priceJob() throws JobInstanceAlreadyCompleteException, + JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException { String jobName = "priceJob"; Job job = jobs.get(jobName); @@ -268,4 +238,30 @@ public class JobLauncherController { return "OK"; } + + /** + * 공통코드 M_COMM_H, M_COMM_L 동기화 배치 + * + * @return + * @throws JobInstanceAlreadyCompleteException + * @throws JobExecutionAlreadyRunningException + * @throws JobParametersInvalidException + * @throws JobRestartException + */ + @Scheduled(cron = "0 0 0 * * *") + public String commonCodeJob() throws JobInstanceAlreadyCompleteException, + JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException { + + String jobName = "commonCodeJob"; + Job job = jobs.get(jobName); + if (job == null) { + return "Job " + jobName + " not found"; + } + + JobParameters jobParameters = + new JobParametersBuilder().addDate("time", new Date()).toJobParameters(); + + jobLauncher.run(job, jobParameters); + return "OK"; + } } diff --git a/src/main/java/com/interplug/qcast/batch/system/CommonCodeConfiguration.java b/src/main/java/com/interplug/qcast/batch/system/CommonCodeConfiguration.java new file mode 100644 index 00000000..73a547a4 --- /dev/null +++ b/src/main/java/com/interplug/qcast/batch/system/CommonCodeConfiguration.java @@ -0,0 +1,138 @@ +package com.interplug.qcast.batch.system; + +import java.util.Collections; +import java.util.List; +import java.util.function.Consumer; +import org.springframework.batch.core.Job; +import org.springframework.batch.core.JobExecution; +import org.springframework.batch.core.JobExecutionListener; +import org.springframework.batch.core.Step; +import org.springframework.batch.core.configuration.annotation.StepScope; +import org.springframework.batch.core.job.builder.JobBuilder; +import org.springframework.batch.core.repository.JobRepository; +import org.springframework.batch.core.step.builder.StepBuilder; +import org.springframework.batch.item.ItemReader; +import org.springframework.batch.item.ItemWriter; +import org.springframework.batch.item.support.ListItemReader; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpMethod; +import org.springframework.transaction.PlatformTransactionManager; +import com.interplug.qcast.biz.commCode.CommCodeService; +import com.interplug.qcast.biz.commCode.dto.CommonCodeSyncResponse; +import com.interplug.qcast.biz.commCode.dto.DetailCodeRequest; +import com.interplug.qcast.biz.commCode.dto.HeadCodeRequest; +import com.interplug.qcast.util.InterfaceQsp; +import lombok.extern.slf4j.Slf4j; + +/** 영업사원 동기화 배치 */ +@Configuration +@Slf4j +public class CommonCodeConfiguration implements JobExecutionListener { + + private final InterfaceQsp interfaceQsp; + private final CommCodeService commCodeService; + + + @Value("${qsp.system-commonCode-batch-url}") + private String qspInterfaceUrl; + + private CommonCodeSyncResponse commonCodeSyncResponse; + + public CommonCodeConfiguration(InterfaceQsp interfaceQsp, CommCodeService commCodeService) { + this.interfaceQsp = interfaceQsp; + this.commCodeService = commCodeService; + } + + @Override + public void beforeJob(JobExecution jobExecution) { + log.info("Job 시작: 초기화 메서드 호출 중..."); + try { + this.commonCodeSyncResponse = interfaceQsp.callApiData(HttpMethod.GET, qspInterfaceUrl, null, + CommonCodeSyncResponse.class); + log.info("API 호출 완료, 항목 수: {}", this.commonCodeSyncResponse.getApiHeadCdList().size()); + } catch (Exception e) { + log.error("commonCodeSyncResponse 갱신 중 오류: {}", e.getMessage()); + } + } + + @Bean + public Job commonCodeJob(JobRepository jobRepository, Step headCodeStep, Step commonCodeStep) { + return new JobBuilder("commonCodeJob", jobRepository).start(headCodeStep).next(commonCodeStep) + .listener(this).build(); + } + + private Step buildStep(String stepName, JobRepository jobRepository, + PlatformTransactionManager transactionManager, ItemReader reader, ItemWriter writer) { + return new StepBuilder(stepName, jobRepository).chunk(10, transactionManager) + .reader(reader).writer(writer).build(); + } + + @Bean + public Step headCodeStep(JobRepository jobRepository, + PlatformTransactionManager transactionManager) { + return buildStep("headCodeStep", jobRepository, transactionManager, headCodeListReader(), + createWriter((items) -> { + try { + log.debug("HeadCode batch processing {} items", items.size()); + commCodeService.setHeaderCodeSyncSave(items); + log.debug("Successfully processed headCommonCode batch"); + } catch (Exception e) { + log.error("Error processing headCommonCode batch: {}", e.getMessage(), e); + throw new RuntimeException("Failed to process headCommonCode batch", e); + } + }, "headCode")); + } + + @Bean + public Step commonCodeStep(JobRepository jobRepository, + PlatformTransactionManager transactionManager) { + return buildStep("commonCodeStep", jobRepository, transactionManager, commonCodeListReader(), + createWriter((items) -> { + try { + log.debug("commonCodeStep batch processing {} items", items.size()); + commCodeService.setCommonCodeSyncSave(items); + log.debug("Successfully processed commonCode batch"); + } catch (Exception e) { + log.error("Error processing commonCode batch: {}", e.getMessage(), e); + throw new RuntimeException("Failed to process commonCode batch", e); + } + }, "commonCode")); + } + + private ListItemReader createReader(List items, String readerName) { + log.info("{}Reader 호출됨...", readerName); + return new ListItemReader<>(items != null ? items : Collections.emptyList()); + } + + @Bean + @StepScope + public ListItemReader headCodeListReader() { + return createReader( + commonCodeSyncResponse != null ? commonCodeSyncResponse.getApiHeadCdList() : null, + "headCode"); + } + + @Bean + @StepScope + public ListItemReader commonCodeListReader() { + return createReader( + commonCodeSyncResponse != null ? commonCodeSyncResponse.getApiCommCdList() : null, + "commonCode"); + } + + private ItemWriter createWriter(Consumer> processor, String writerName) { + return items -> { + try { + List itemList = (List) items.getItems(); + processor.accept(itemList); + log.info("{}Writer: {} items 처리 완료", writerName, items.size()); + } catch (Exception e) { + log.error("{}Writer 오류: {}", writerName, e.getMessage()); + throw e; + } + }; + } + +} diff --git a/src/main/java/com/interplug/qcast/biz/commCode/CommCodeMapper.java b/src/main/java/com/interplug/qcast/biz/commCode/CommCodeMapper.java index 7ef35426..b5f3de31 100644 --- a/src/main/java/com/interplug/qcast/biz/commCode/CommCodeMapper.java +++ b/src/main/java/com/interplug/qcast/biz/commCode/CommCodeMapper.java @@ -3,14 +3,70 @@ package com.interplug.qcast.biz.commCode; import java.util.List; import org.apache.ibatis.annotations.Mapper; import com.interplug.qcast.biz.commCode.dto.CodeRes; +import com.interplug.qcast.biz.commCode.dto.DetailCodeRequest; +import com.interplug.qcast.biz.commCode.dto.HeadCodeRequest; @Mapper public interface CommCodeMapper { + /** + * Qcast 공통코드 저장시 실시간 동기화 + * + * @param codeRes + * @return + */ int setCommHUpdate(CodeRes codeRes); + /** + * Qcast 공통코드 저장시 실시간 동기화 + * + * @param codeRes + * @return + */ int setCommLUpdate(CodeRes codeRes); + /** + * QCast에서 사용하는 공통코드 조회 + * + * @return + */ List selectQcastCommCode(); + /** + * 배치 공통코드상세 테이블 사용플래그 변경 + * + * @return + * @throws Exception + */ + int deleteCommonCodeSync() throws Exception; + + + /** + * 배치 공통코드헤더 테이블 사용플래그 변경 + * + * @return + * @throws Exception + */ + int deleteHeadCodeSync() throws Exception; + + /** + * 배치 공통코드 헤더 정보 동기화 저장 + * + * @param headCodeReq + * @return + * @throws Exception + */ + int setHeadCodeSyncSave(HeadCodeRequest headCodeReq) throws Exception; + + /** + * 배치 공통코드 상세 정보 동기화 저장 + * + * @param detailCodeReq + * @return + * @throws Exception + */ + int setCommonCodeSyncSave(DetailCodeRequest detailCodeReq) throws Exception; + + + } diff --git a/src/main/java/com/interplug/qcast/biz/commCode/CommCodeService.java b/src/main/java/com/interplug/qcast/biz/commCode/CommCodeService.java index 739dfb73..8c9c1f62 100644 --- a/src/main/java/com/interplug/qcast/biz/commCode/CommCodeService.java +++ b/src/main/java/com/interplug/qcast/biz/commCode/CommCodeService.java @@ -1,13 +1,17 @@ package com.interplug.qcast.biz.commCode; +import java.util.ArrayList; +import java.util.List; +import org.springframework.stereotype.Service; import com.interplug.qcast.biz.commCode.dto.CodeReq; import com.interplug.qcast.biz.commCode.dto.CodeRes; import com.interplug.qcast.biz.commCode.dto.CommCodeRes; -import java.util.ArrayList; -import java.util.List; +import com.interplug.qcast.biz.commCode.dto.DetailCodeRequest; +import com.interplug.qcast.biz.commCode.dto.HeadCodeRequest; import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; +import lombok.extern.slf4j.Slf4j; +@Slf4j @Service @RequiredArgsConstructor public class CommCodeService { @@ -49,17 +53,48 @@ public class CommCodeService { public List selectQcastCommCode() { List result = commCodeMapper.selectQcastCommCode(); List commCodeList = new ArrayList<>(); - result.forEach( - cr -> { - commCodeList.add( - CommCodeRes.builder() - .clHeadCd(cr.getClHeadCd()) - .clCode(cr.getClCode()) - .clCodeNm(cr.getClCodeNm()) - .clCodeJp(cr.getClCodeJp()) - .clPriority(cr.getClPriority()) - .build()); - }); + result.forEach(cr -> { + commCodeList.add(CommCodeRes.builder().clHeadCd(cr.getClHeadCd()).clCode(cr.getClCode()) + .clCodeNm(cr.getClCodeNm()).clCodeJp(cr.getClCodeJp()).clPriority(cr.getClPriority()) + .build()); + }); return commCodeList; } + + + /** + * 헤더코드 동기화 + * + * @param headCodeList + * @throws Exception + */ + public void setHeaderCodeSyncSave(List headCodeList) throws Exception { + // 헤더코드 동기화 + commCodeMapper.deleteHeadCodeSync(); + for (HeadCodeRequest headCodeReq : headCodeList) { + try { + commCodeMapper.setHeadCodeSyncSave(headCodeReq); + } catch (Exception e) { + log.error(e.getMessage()); + } + } + } + + /** + * 상세코드 동기화 + * + * @param detailCodeList + * @throws Exception + */ + public void setCommonCodeSyncSave(List detailCodeList) throws Exception { + // 상세코드 동기화 + commCodeMapper.deleteCommonCodeSync(); + for (DetailCodeRequest detailCodeReq : detailCodeList) { + try { + commCodeMapper.setCommonCodeSyncSave(detailCodeReq); + } catch (Exception e) { + log.error(e.getMessage()); + } + } + } } diff --git a/src/main/java/com/interplug/qcast/biz/commCode/dto/CommonCodeSyncResponse.java b/src/main/java/com/interplug/qcast/biz/commCode/dto/CommonCodeSyncResponse.java new file mode 100644 index 00000000..b2134d7e --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/commCode/dto/CommonCodeSyncResponse.java @@ -0,0 +1,17 @@ +package com.interplug.qcast.biz.commCode.dto; + +import java.util.List; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class CommonCodeSyncResponse { + + @Schema(description = "공통코드 H 목록") + private List apiHeadCdList; + + @Schema(description = "공통코드 L 목록") + private List apiCommCdList; +} diff --git a/src/main/java/com/interplug/qcast/biz/commCode/dto/DetailCodeRequest.java b/src/main/java/com/interplug/qcast/biz/commCode/dto/DetailCodeRequest.java new file mode 100644 index 00000000..d6c3e8e9 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/commCode/dto/DetailCodeRequest.java @@ -0,0 +1,27 @@ +package com.interplug.qcast.biz.commCode.dto; + +import lombok.Data; + +@Data +public class DetailCodeRequest { + private String headCd; + private String code; + private String readCd; + private String codeNm; + private String codeJp; + private String code4Th; + private String refChr1; + private String refChr2; + private String refChr3; + private String refChr4; + private String refChr5; + private Integer refNum1; + private Integer refNum2; + private Integer refNum3; + private Integer refNum4; + private Integer refNum5; + private Integer priority; + private String refCnt; + private String statCd; + private Integer delFlg; +} diff --git a/src/main/java/com/interplug/qcast/biz/commCode/dto/HeadCodeRequest.java b/src/main/java/com/interplug/qcast/biz/commCode/dto/HeadCodeRequest.java new file mode 100644 index 00000000..fbed6540 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/commCode/dto/HeadCodeRequest.java @@ -0,0 +1,24 @@ +package com.interplug.qcast.biz.commCode.dto; + +import lombok.Data; + +@Data +public class HeadCodeRequest { + private String headCd; + private String headId; + private String headNm; + private String headJp; + private String head4Th; + private String refChr1; + private String refChr2; + private String refChr3; + private String refChr4; + private String refChr5; + private String refNum1; + private String refNum2; + private String refNum3; + private String refNum4; + private String refNum5; + private String remarks; + private Integer delFlg; +} diff --git a/src/main/resources/config/application-dev.yml b/src/main/resources/config/application-dev.yml index c6016240..5cbe16d0 100644 --- a/src/main/resources/config/application-dev.yml +++ b/src/main/resources/config/application-dev.yml @@ -47,6 +47,7 @@ qsp: simulation-guide-info-url: /api/simulation/guideInfo aes256.key: jpqcellQ123456!! auto.login.aes256.key: _autoL!! + system-commonCode-batch-url: /api/system/commonCodeListData #File file: root.path: C:\\ diff --git a/src/main/resources/config/application-local.yml b/src/main/resources/config/application-local.yml index 691fd4f7..6c00059c 100644 --- a/src/main/resources/config/application-local.yml +++ b/src/main/resources/config/application-local.yml @@ -47,6 +47,7 @@ qsp: simulation-guide-info-url: /api/simulation/guideInfo aes256.key: jpqcellQ123456!! auto.login.aes256.key: _autoL!! + system-commonCode-batch-url: /api/system/commonCodeListData #File file: diff --git a/src/main/resources/config/application-prd.yml b/src/main/resources/config/application-prd.yml index 60232ba2..c72cc4b9 100644 --- a/src/main/resources/config/application-prd.yml +++ b/src/main/resources/config/application-prd.yml @@ -47,6 +47,7 @@ qsp: simulation-guide-info-url: /api/simulation/guideInfo aes256.key: jpqcellQ123456!! auto.login.aes256.key: _autoL!! + system-commonCode-batch-url: /api/system/commonCodeListData #File file: diff --git a/src/main/resources/mappers/commCode/commCodeMapper.xml b/src/main/resources/mappers/commCode/commCodeMapper.xml index bc5ac460..5d25abd7 100644 --- a/src/main/resources/mappers/commCode/commCodeMapper.xml +++ b/src/main/resources/mappers/commCode/commCodeMapper.xml @@ -171,4 +171,160 @@ ORDER BY A.CL_HEAD_CD, A.CL_PRIORITY + + /* sqlid : com.interplug.qcast.commCode.deleteCommonCodeSync (배치 공통코드상세 테이블 사용플래그 변경)*/ + UPDATE M_COMM_L SET DEL_FLG = '1' + + + + /* sqlid : com.interplug.qcast.commCode.deleteHeadCodeSync (배치 공통코드헤더 테이블 사용플래그 변경)*/ + UPDATE M_COMM_H SET DEL_FLG = '1' + + + + /* sqlid : com.interplug.qcast.commCode.setHeadCodeSyncSave (배치 공통코드 헤더 정보 동기화 저장)*/ + MERGE M_COMM_H AS A + USING + ( SELECT #{headCd} AS HEAD_CD ) AS D + ON (A.HEAD_CD = D.HEAD_CD + ) + WHEN MATCHED THEN + UPDATE SET + HEAD_ID = #{headId} + , HEAD_NM = #{headNm} + , HEAD_JP = #{headJp} + , HEAD_4TH = #{head4Th} + , REF_CHR1 = #{refChr1} + , REF_CHR2 = #{refChr2} + , REF_CHR3 = #{refChr3} + , REF_CHR4 = #{refChr4} + , REF_CHR5 = #{refChr5} + , REF_NUM1 = #{refNum1} + , REF_NUM2 = #{refNum2} + , REF_NUM3 = #{refNum3} + , REF_NUM4 = #{refNum4} + , REF_NUM5 = #{refNum5} + , REMARKS = #{remarks} + , DEL_FLG = #{delFlg} + , LAST_EDIT_DATETIME = GETDATE() + WHEN NOT MATCHED THEN + INSERT ( + HEAD_CD + , HEAD_ID + , HEAD_NM + , HEAD_JP + , HEAD_4TH + , REF_CHR1 + , REF_CHR2 + , REF_CHR3 + , REF_CHR4 + , REF_CHR5 + , REF_NUM1 + , REF_NUM2 + , REF_NUM3 + , REF_NUM4 + , REF_NUM5 + , REMARKS + , DEL_FLG + , REGIST_DATETIME + , LAST_EDIT_DATETIME + ) VALUES ( + #{headCd} + , #{headId} + , #{headNm} + , #{headJp} + , #{head4Th} + , #{refChr1} + , #{refChr2} + , #{refChr3} + , #{refChr4} + , #{refChr5} + , #{refNum1} + , #{refNum2} + , #{refNum3} + , #{refNum4} + , #{refNum5} + , #{remarks} + , #{delFlg} + , GETDATE() + , GETDATE() + ); + + + + /* sqlid : com.interplug.qcast.commCode.setCommonCodeSyncSave (배치 공통코드 상세 정보 동기화 저장)*/ + MERGE M_COMM_L AS A + USING + ( SELECT #{headCd} AS HEAD_CD, #{code} AS CODE ) AS D + ON (A.HEAD_CD = D.HEAD_CD AND A.CODE = D.CODE + ) + WHEN MATCHED THEN + UPDATE SET + CODE = #{code} + , READ_CD = #{readCd} + , CODE_NM = #{codeNm} + , CODE_JP = #{codeJp} + , CODE_4TH = #{code4Th} + , REF_CHR1 = #{refChr1} + , REF_CHR2 = #{refChr2} + , REF_CHR3 = #{refChr3} + , REF_CHR4 = #{refChr4} + , REF_CHR5 = #{refChr5} + , REF_NUM1 = #{refNum1} + , REF_NUM2 = #{refNum2} + , REF_NUM3 = #{refNum3} + , REF_NUM4 = #{refNum4} + , REF_NUM5 = #{refNum5} + , PRIORITY = #{priority} + , REF_CNT = #{refCnt} + , DEL_FLG = #{delFlg} + , LAST_EDIT_DATETIME = GETDATE() + WHEN NOT MATCHED THEN + INSERT ( + HEAD_CD + , CODE + , READ_CD + , CODE_NM + , CODE_JP + , CODE_4TH + , REF_CHR1 + , REF_CHR2 + , REF_CHR3 + , REF_CHR4 + , REF_CHR5 + , REF_NUM1 + , REF_NUM2 + , REF_NUM3 + , REF_NUM4 + , REF_NUM5 + , PRIORITY + , REF_CNT + , DEL_FLG + , REGIST_DATETIME + , LAST_EDIT_DATETIME + ) VALUES ( + #{headCd} + , #{code} + , #{readCd} + , #{codeNm} + , #{codeJp} + , #{code4Th} + , #{refChr1} + , #{refChr2} + , #{refChr3} + , #{refChr4} + , #{refChr5} + , #{refNum1} + , #{refNum2} + , #{refNum3} + , #{refNum4} + , #{refNum5} + , #{priority} + , #{refCnt} + , #{delFlg} + , GETDATE() + , GETDATE() + ); + + \ No newline at end of file