feat : queryDsl 추가, 신문고 Send 작업 시작

master
Kurt92 6 months ago
parent d54096b1b4
commit dfdf78268c

@ -37,6 +37,32 @@ dependencies {
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
// === QueryDsl start ===
// == 3.0 ==
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
// == 3.0 ==
// implementation 'com.querydsl:querydsl-jpa'
// annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"
//
// annotationProcessor "jakarta.annotation:jakarta.annotation-api"
// annotationProcessor "jakarta.persistence:jakarta.persistence-api"
// === QueryDsl end ===
}
tasks.named('test') {

@ -1,11 +1,10 @@
package com.worker.domain.repo.cp;
import com.worker.domain.entity.CpAnswer;
import com.worker.dto.SinmungoDto;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface CpAnswerRepository extends JpaRepository<CpAnswer,Integer> {
List<SinmungoDto.Answer> findAllByAsState(String number);
List<CpAnswer> findAllByAsState(String number);
}

@ -3,5 +3,8 @@ package com.worker.domain.repo.ep;
import com.worker.domain.entity.CpAnswer;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface EpAnswerRepository extends JpaRepository<CpAnswer,Integer> {
List<CpAnswer> findAllByAsState(String number);
}

@ -1,9 +1,6 @@
package com.worker.dto;
import com.worker.domain.entity.CpAnswer;
import com.worker.domain.entity.CpBdong;
import com.worker.domain.entity.CpMain;
import com.worker.domain.entity.CpSetinfo;
import com.worker.domain.entity.*;
import jakarta.persistence.Lob;
import lombok.*;
@ -11,12 +8,7 @@ import java.util.List;
public class SinmungoDto {
@Data
@Builder
public static class ParseResult {
private CpMain cpMain;
private List<ImgParser> imgParsers;
}
@Getter
@Builder
@ -27,7 +19,6 @@ public class SinmungoDto {
private List<CpBdong> epBdongList;
}
@Data
@Builder
public static class SinmungoXml {
@ -77,6 +68,12 @@ public class SinmungoDto {
}
@Data
@Builder
public static class ParseResult {
private CpMain cpMain;
private List<ImgParser> imgParsers;
}
@Data
@Builder
@ -89,14 +86,47 @@ public class SinmungoDto {
}
@Data
@Builder
public static class Answer{
private CpAnswer cpAnswer;
public static class Send {
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class SendAnswer {
private String im_interface_seq_n;
private String im_s_userid;
private String im_s_username;
private String im_telno;
private String im_email;
private String im_dep_code;
private String im_dep_name;
private String im_civil_abstract_l;
private String im_sys_gubun_c;
private String im_anc_code_v;
private String im_peti_anc_code_v;
private String im_peti_no_c;
private String im_civil_no_c;
private String im_answer_text;
private String im_datetime;
}
@Data
@Builder
public static class Answers{
private List<CpAnswer> cpAnswer;
private List<CpAnswer> epAnswer;
}
}
}

@ -0,0 +1,41 @@
package com.worker.dto;
import jakarta.persistence.Column;
import jakarta.persistence.Id;
import lombok.Builder;
import lombok.Getter;
public class UserInfoDto {
@Getter
@Builder
public static class UserInfo {
private Integer umCode;
private String umSggcode;
private String umLevelcd;
private String umLevel;
private String umName;
private String umTelno;
private String umEmail;
private String umHwpdirc;
private String umPass;
private String umPermision;
private String umSeallUser;
private String umTaxeUser;
private String umIndt;
private String umEnable;
private String umJobGroup;
private String umDeldt;
private String umIp;
private String umPassUpdt;
private String umCarUser;
private String sgSggCode;
private String sgSggName;
private String sgEnable;
private String sgDepCode;
}
}

@ -0,0 +1,19 @@
package com.worker.framework.JPAConf;
import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JPAConfig {
@PersistenceContext
private EntityManager em;
@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(em);
}
}

@ -1,7 +1,40 @@
package com.worker.scheduler.smg.repository;
import com.querydsl.core.types.Projections;
import com.querydsl.jpa.impl.JPAQueryFactory;
import com.worker.dto.UserInfoDto;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.util.List;
import static com.worker.domain.entity.QCpSgg.cpSgg;
import static com.worker.domain.entity.QCpUser.cpUser;
@Repository
@RequiredArgsConstructor
public class DbPollingQueryDslRepository {
private final JPAQueryFactory queryFactory;
public List<UserInfoDto.UserInfo> findCpUser(int umCode) {
return queryFactory
.select(
Projections.fields(
UserInfoDto.UserInfo.class,
cpUser.umCode,
cpUser.umName,
cpUser.umTelno,
cpUser.umEmail,
cpSgg.sgDepCode
)
)
.from(cpUser)
.leftJoin(cpSgg).on(cpSgg.sgSggCode.eq(cpUser.umSggcode))
.where(cpUser.umCode.eq(umCode))
.fetch();
}
}

@ -6,6 +6,7 @@ import com.worker.domain.repo.cp.CpAnswerRepository;
import com.worker.domain.repo.ep.EpAnswerRepository;
import com.worker.dto.SinmungoDto;
import com.worker.scheduler.smg.service.DbPolling;
import com.worker.scheduler.smg.service.XmlSend;
import com.worker.util.common.commEnum.StateEnum;
import com.worker.util.fileReader.XmlParserInterface;
import com.worker.util.fileReader.XmlReader;
@ -28,11 +29,11 @@ import java.util.stream.Collectors;
public class SinmungoInOutScheduler {
private final XmlReader xmlReader;
private final XmlSend xmlSend;
private final DbPolling dbPolling;
private final CpAnswerRepository cpAnswerRepository;
private final EpAnswerRepository epAnswerRepository;
// esb에이전트 xml파일 읽기
@Scheduled(fixedRate = 10 * 60 * 1000) // 10분
@ -97,16 +98,12 @@ public class SinmungoInOutScheduler {
public void sinmungoAnswerSendScheduler() {
//setinfo 테이블에서 esb에이전트 정보 조회
SinmungoDto.SetInfo setInfo = dbPolling.findSetInfo();
//대상 답변 조회
SinmungoDto.Send.Answers answers = xmlSend.findAnswersByStatus(StateEnum.ANSWER_STATE_ANSWER_WAIT.getCode());
// 디비 읽기 > 특정 상태값인 자료들 xml로 생성
// 디비에서 as_state 1번인것 찾기
List<SinmungoDto.Answer> cpAnswer = cpAnswerRepository.findAllByAsState(StateEnum.ANSWER_STATE_ANSWER_WAIT.getCode());
List<SinmungoDto.Answer> epAnswer = cpAnswerRepository.findAllByAsState(StateEnum.ANSWER_STATE_ANSWER_WAIT.getCode());
//send 프로세스 실행
xmlSend.send(setInfo, answers);
// temp xml이 이미 존재?? > xml읽기
}

@ -44,13 +44,13 @@ public class DbPolling {
private final EpAnswerRepository epAnswerRepository;
private final CpMainEtc1Repository cpMainEtc1Repository;
private final EpMainEtc1Repository epMainEtc1Repository;
private final CpUserRepository cpUserRepository;
public SinmungoDto.SetInfo findSetInfo() {
// setInfo는 폴링 작업에 필요한 모든정보를 여기서 전부 조회하고 객체로 리턴하자\
// setInfo는 폴링 작업에 필요한 모든정보를 여기서 전부 조회하고 객체로 리턴
// CpUser cpUser = cpUserRepository.;
CpSetinfo cpSetinfo = cpSetinfoRepository.findById(
CpSetinfoId.builder()
.codeName(env.getProperty("esb.info.cp.codeName"))
@ -66,6 +66,7 @@ public class DbPolling {
.detailCode(env.getProperty("esb.info.ep.detailCode"))
.build()
).orElse(null);
List<CpBdong> cpBdongList = cpBdongRepository.findAllByBdCodeStartingWith(cpSetinfo.getIntValue1().toString());
@ -84,6 +85,7 @@ public class DbPolling {
List<CpMain> cpMainList = new ArrayList<>();
List<CpAnswer> cpAnswerList = new ArrayList<>();
List<CpMainEtc1> cpMainEtc1List = new ArrayList<>();
List<String> insertCompleteFileNm = new ArrayList<>();
//mm_code 맥스값 가져오기
long maxMmCode = getMaxMmCode(setInfo, "CP");
@ -139,6 +141,8 @@ public class DbPolling {
.mmKey(xml.getInterface_seq_n())
.mmText(CommonUtils.truncate(xml.getPeti_reason_l(), 4000))
.build());
insertCompleteFileNm.add(cpList.get(i).getFileName());
}

@ -0,0 +1,51 @@
package com.worker.scheduler.smg.service;
import com.worker.domain.repo.cp.CpAnswerRepository;
import com.worker.domain.repo.ep.EpAnswerRepository;
import com.worker.dto.SinmungoDto;
import com.worker.util.common.commEnum.StateEnum;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
@RequiredArgsConstructor
public class XmlSend {
private final CpAnswerRepository cpAnswerRepository;
private final EpAnswerRepository epAnswerRepository;
// 실행 대상 답변 찾기
public SinmungoDto.Send.Answers findAnswersByStatus(String status) {
// 디비에서 as_state 1번인것 찾기
return SinmungoDto.Send.Answers.builder()
.cpAnswer(cpAnswerRepository.findAllByAsState(status))
.epAnswer(epAnswerRepository.findAllByAsState(status))
.build();
}
//send 디렉토리에 xml 생성
public void send(SinmungoDto.SetInfo setInfo, SinmungoDto.Send.Answers answers) {
// answers 에서 as_reuser 추출
List<String> reuser;
// 추출한 reuser에서 user정보 조회
// main테이블 조회
// mm_state 별로 im_civil_abstract_l 값 업데이트
//awsers 만큼
// 위에서 조회한 정보들 조합해서 xml 생성
}
}
Loading…
Cancel
Save