From 8494af93538adb6d48139f1a4aaeec023dfa663a Mon Sep 17 00:00:00 2001 From: rjy1537 Date: Fri, 8 Nov 2024 18:09:30 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90=20=EB=8F=99?= =?UTF-8?q?=EA=B8=B0=ED=99=94=20=EB=B0=B0=EC=B9=98=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qcast/batch/JobLauncherController.java | 30 +++++++ .../batch/system/AdminUserConfiguration.java | 84 +++++++++++++++++++ .../BusinessChargerConfiguration.java | 2 +- .../interplug/qcast/biz/user/UserMapper.java | 19 +++++ .../interplug/qcast/biz/user/UserService.java | 20 +++++ .../biz/user/dto/AdminUserSyncResponse.java | 35 ++++++++ src/main/resources/config/application-dev.yml | 1 + .../resources/config/application-local.yml | 1 + src/main/resources/config/application-prd.yml | 1 + .../resources/mappers/user/userMapper.xml | 43 ++++++++++ 10 files changed, 235 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/interplug/qcast/batch/system/AdminUserConfiguration.java rename src/main/java/com/interplug/qcast/batch/{master => system}/BusinessChargerConfiguration.java (98%) create mode 100644 src/main/java/com/interplug/qcast/biz/user/dto/AdminUserSyncResponse.java diff --git a/src/main/java/com/interplug/qcast/batch/JobLauncherController.java b/src/main/java/com/interplug/qcast/batch/JobLauncherController.java index df75f034..d9569296 100644 --- a/src/main/java/com/interplug/qcast/batch/JobLauncherController.java +++ b/src/main/java/com/interplug/qcast/batch/JobLauncherController.java @@ -208,4 +208,34 @@ public class JobLauncherController { return "OK"; } + + /** + * 관리자 유저 동기화 배치 + * + * @return + * @throws JobInstanceAlreadyCompleteException + * @throws JobExecutionAlreadyRunningException + * @throws JobParametersInvalidException + * @throws JobRestartException + */ + @Scheduled(cron = "0 0 0 * * *") + public String adminUserStep() + throws JobInstanceAlreadyCompleteException, + JobExecutionAlreadyRunningException, + JobParametersInvalidException, + JobRestartException { + + String jobName = "adminUserJob"; + 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/AdminUserConfiguration.java b/src/main/java/com/interplug/qcast/batch/system/AdminUserConfiguration.java new file mode 100644 index 00000000..a540f299 --- /dev/null +++ b/src/main/java/com/interplug/qcast/batch/system/AdminUserConfiguration.java @@ -0,0 +1,84 @@ +package com.interplug.qcast.batch.system; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.interplug.qcast.biz.user.UserService; +import com.interplug.qcast.biz.user.dto.AdminUserSyncResponse; +import com.interplug.qcast.util.InterfaceQsp; +import java.util.Collections; +import java.util.List; +import org.springframework.batch.core.Job; +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.ItemProcessor; +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; + +/** 관리자 유저 동기화 배치 */ +@Configuration +public class AdminUserConfiguration implements JobExecutionListener { + private final UserService userService; + + private final InterfaceQsp interfaceQsp; + + List adminUserSyncList; + + @Value("${qsp.master-admin-user-batch-url}") + private String qspInterfaceUrl; + + public AdminUserConfiguration(UserService userService, InterfaceQsp interfaceQsp) { + this.userService = userService; + this.interfaceQsp = interfaceQsp; + } + + @Bean + public Job adminUserJob(JobRepository jobRepository, Step adminUserStep) { + return new JobBuilder("adminUserJob", jobRepository).start(adminUserStep).build(); + } + + @Bean + public Step adminUserStep( + JobRepository jobRepository, PlatformTransactionManager transactionManager) throws Exception { + return new StepBuilder("adminUserStep", jobRepository) + .chunk(100, transactionManager) + .reader(adminUserReader()) + .processor(adminUserProcessor()) + .writer(adminUserWriter()) + .build(); + } + + @Bean + @StepScope + public ItemReader adminUserReader() throws Exception { + this.adminUserSyncList = + interfaceQsp.callApiData( + HttpMethod.GET, + qspInterfaceUrl, + null, + new TypeReference>() {}); + return (adminUserSyncList != null) + ? new ListItemReader<>(adminUserSyncList) + : new ListItemReader<>(Collections.emptyList()); + } + + @Bean + public ItemProcessor adminUserProcessor() { + return item -> item; + } + + @Bean + public ItemWriter adminUserWriter() { + return items -> { + userService.setAdminUserSyncSave((List) items.getItems()); + }; + } +} diff --git a/src/main/java/com/interplug/qcast/batch/master/BusinessChargerConfiguration.java b/src/main/java/com/interplug/qcast/batch/system/BusinessChargerConfiguration.java similarity index 98% rename from src/main/java/com/interplug/qcast/batch/master/BusinessChargerConfiguration.java rename to src/main/java/com/interplug/qcast/batch/system/BusinessChargerConfiguration.java index 13032a6a..23376cda 100644 --- a/src/main/java/com/interplug/qcast/batch/master/BusinessChargerConfiguration.java +++ b/src/main/java/com/interplug/qcast/batch/system/BusinessChargerConfiguration.java @@ -1,4 +1,4 @@ -package com.interplug.qcast.batch.master; +package com.interplug.qcast.batch.system; import com.fasterxml.jackson.core.type.TypeReference; import com.interplug.qcast.biz.user.UserService; diff --git a/src/main/java/com/interplug/qcast/biz/user/UserMapper.java b/src/main/java/com/interplug/qcast/biz/user/UserMapper.java index 70892027..ccdd8ba3 100644 --- a/src/main/java/com/interplug/qcast/biz/user/UserMapper.java +++ b/src/main/java/com/interplug/qcast/biz/user/UserMapper.java @@ -1,5 +1,6 @@ package com.interplug.qcast.biz.user; +import com.interplug.qcast.biz.user.dto.AdminUserSyncResponse; import com.interplug.qcast.biz.user.dto.BusinessChargerSyncResponse; import com.interplug.qcast.biz.user.dto.StoreRequest; import com.interplug.qcast.biz.user.dto.UserRequest; @@ -62,4 +63,22 @@ public interface UserMapper { */ int setBusinessChargerSyncSave(BusinessChargerSyncResponse businessChargerSyncData) throws Exception; + + /** + * 관리자 유저 정보 동기화 삭제 + * + * @param adminUserSyncData + * @return + * @throws Exception + */ + int deleteAdminUserSync(AdminUserSyncResponse adminUserSyncData) throws Exception; + + /** + * 관리자 유저 정보 동기화 저장 + * + * @param adminUserSyncData + * @return + * @throws Exception + */ + int setAdminUserSyncSave(AdminUserSyncResponse adminUserSyncData) throws Exception; } diff --git a/src/main/java/com/interplug/qcast/biz/user/UserService.java b/src/main/java/com/interplug/qcast/biz/user/UserService.java index 47c46486..45ef1602 100644 --- a/src/main/java/com/interplug/qcast/biz/user/UserService.java +++ b/src/main/java/com/interplug/qcast/biz/user/UserService.java @@ -1,5 +1,6 @@ package com.interplug.qcast.biz.user; +import com.interplug.qcast.biz.user.dto.AdminUserSyncResponse; import com.interplug.qcast.biz.user.dto.BusinessChargerSyncResponse; import com.interplug.qcast.biz.user.dto.StoreRequest; import com.interplug.qcast.biz.user.dto.UserRequest; @@ -100,4 +101,23 @@ public class UserService { } return cnt; } + + /** + * 관리자 유저 정보 동기화 + * + * @param adminUserSyncList 관리자 유저 목록 + * @return + * @throws Exception + */ + public int setAdminUserSyncSave(List adminUserSyncList) throws Exception { + int cnt = 0; + for (AdminUserSyncResponse adminUserSyncData : adminUserSyncList) { + if ("1".equals(adminUserSyncData.getDelFlg())) { + cnt += userMapper.deleteAdminUserSync(adminUserSyncData); + } else { + cnt += userMapper.setAdminUserSyncSave(adminUserSyncData); + } + } + return cnt; + } } diff --git a/src/main/java/com/interplug/qcast/biz/user/dto/AdminUserSyncResponse.java b/src/main/java/com/interplug/qcast/biz/user/dto/AdminUserSyncResponse.java new file mode 100644 index 00000000..27029d88 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/user/dto/AdminUserSyncResponse.java @@ -0,0 +1,35 @@ +package com.interplug.qcast.biz.user.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** 관리자 유저 동기화 Request */ +@Data +public class AdminUserSyncResponse { + @Schema(description = "User ID") + String userId; + + @Schema(description = "Company Name") + String companyName; + + @Schema(description = "Category(Department Name)") + String category; + + @Schema(description = "User Name") + String name; + + @Schema(description = "Telephone No") + String tel; + + @Schema(description = "Fax No") + String fax; + + @Schema(description = "Mail") + String mail; + + @Schema(description = "Group ID") + String groupId; + + @Schema(description = "Delete Flag") + String delFlg; +} diff --git a/src/main/resources/config/application-dev.yml b/src/main/resources/config/application-dev.yml index 38c9a294..84e21406 100644 --- a/src/main/resources/config/application-dev.yml +++ b/src/main/resources/config/application-dev.yml @@ -42,6 +42,7 @@ qsp: master-material-batch-url: /api/master/materialList master-bom-batch-url: /api/master/bomList master-business-charger-batch-url: /api/user/businessChargerList + master-admin-user-batch-url: /api/admin/userList simulation-guide-info-url: /api/simulation/guideInfo aes256.key: jpqcellQ123456!! auto.login.aes256.key: _autoL!! diff --git a/src/main/resources/config/application-local.yml b/src/main/resources/config/application-local.yml index 3b191500..af61a309 100644 --- a/src/main/resources/config/application-local.yml +++ b/src/main/resources/config/application-local.yml @@ -42,6 +42,7 @@ qsp: master-material-batch-url: /api/master/materialList master-bom-batch-url: /api/master/bomList master-business-charger-batch-url: /api/user/businessChargerList + master-admin-user-batch-url: /api/admin/userList simulation-guide-info-url: /api/simulation/guideInfo aes256.key: jpqcellQ123456!! auto.login.aes256.key: _autoL!! diff --git a/src/main/resources/config/application-prd.yml b/src/main/resources/config/application-prd.yml index 34107300..1294b4a9 100644 --- a/src/main/resources/config/application-prd.yml +++ b/src/main/resources/config/application-prd.yml @@ -42,6 +42,7 @@ qsp: master-material-batch-url: /api/master/materialList master-bom-batch-url: /api/master/bomList master-business-charger-batch-url: /api/user/businessChargerList + master-admin-user-batch-url: /api/admin/userList simulation-guide-info-url: /api/simulation/guideInfo aes256.key: jpqcellQ123456!! auto.login.aes256.key: _autoL!! diff --git a/src/main/resources/mappers/user/userMapper.xml b/src/main/resources/mappers/user/userMapper.xml index 0ec87a1a..c52cc06f 100644 --- a/src/main/resources/mappers/user/userMapper.xml +++ b/src/main/resources/mappers/user/userMapper.xml @@ -286,4 +286,47 @@ ); + + DELETE FROM M_MANAGER_SITE_ACCESS_USER + WHERE USER_ID = #{userId} + + + + /* sqlid : com.interplug.qcast.user.setAdminUserSyncSave */ + MERGE INTO M_MANAGER_SITE_ACCESS_USER AS A + USING ( SELECT #{userId} AS USER_ID ) AS D + ON A.USER_ID = D.USER_ID + WHEN MATCHED THEN + UPDATE SET + COMPANY_NAME = #{companyName} + , CATEGORY = #{category} + , NAME = #{name} + , TEL = #{tel} + , FAX = #{fax} + , MAIL = #{mail} + , GROUP_ID = #{groupId} + WHEN NOT MATCHED THEN + INSERT ( + USER_ID + , PASSWORD + , COMPANY_NAME + , CATEGORY + , NAME + , TEL + , FAX + , MAIL + , GROUP_ID + ) VALUES ( + #{userId} + , #{userId} + , #{companyName} + , #{category} + , #{name} + , #{tel} + , #{fax} + , #{mail} + , #{groupId} + ); + + \ No newline at end of file