feat : 운영(화성) 환경 성절 테스트중. md 문서화 작업중

master
Kurt92 3 months ago
parent de555ea965
commit 2cc5ad06a0

@ -22,3 +22,64 @@ start "" "C:\Program Files\Eclipse Adoptium\jdk-17.0.15.6-hotspot\bin\java.exe"
- 해당 실행은 스크립트를 통해 만들 예정이며, 이후 스크립트 더블클릭으로 재실행 할수 있도록 한다.
- start를 붙이면 백그라운드로 실행 가능하다 (윈도우)
- 대신 로그를 볼려면 실행로그파일을 따로 지정해줘야 된다.
<br/>
- 수동실행을 위한 뷰페이지 localhost:8011로 접속하면됨.
- 로그보기를 누르면 실시간 로그도 볼수 있음.
- 프로그램 실행유무는 로컬호스트 8011을 접속 가능 여부로 판단하면됨.
- 25/9/8일 화성 테스트중 Eclipse Adoptium jdk 의존성 문제 발견. 원인은 서버 2012 너무 예전버전이라 그럼.
- 그래서 zulu17 버전으로 변경
- c:/program files 안에 zip버전 자바 압축을 풀고 폴더명을 zulu17로 변경.
- 해당경로를 명시적으로 작성하여 자바 프로젝트를 실행시킨다.
```
@echo off
start "" "C:\Program Files\zulu17\bin\javaw.exe" ^
-jar "C:\Users\Administrator\Desktop\cc-worker\clean-parking-worker-0.0.1-SNAPSHOT.jar" --spring.profiles.active=prod
exit
```
```
@echo off
echo [INFO] 8011 포트 사용 중인 프로세스 종료 시도...
for /f "tokens=5" %%i in ('netstat -ano ^| findstr :8011 ^| findstr LISTENING') do (
echo [INFO] PID=%%i 종료
taskkill /PID %%i /F
)
echo [OK] 완료.
exit /b 0
```
### 배포 및 필수값 세팅 <br/>
[JAVA] JDK 17버전 세팅 <br/>
[실행 스크립트 bat파일] <br/>
- 기타 여러 프로그램으로 cmd콘솔이 너무 많음.
- 하여 해당 워커는 백그라운드로 돌리고 실행유무 판단은 뷰페이지를 통하여 함.
- 실행과 중지는 bat파일을 통해 하도록 한다.
[CpSgg] 필수 값 세팅 1<br/>
- 하위 sgg코드들 다 있어야함.
[SetInfo] 필수 값 세팅 2</br>
- setinfo는 멀티 프라이머리키임. CODE_NAME, GROUP_CODE, DETAIL_CODE
- CODE_NANE(PK) : WORKER
- GROUP_CODE(PK) : INFO
- DETAIL_CODE(PK) : PROD
- INT_VALUE1 : 메인 시군구 코드
- INT_VALUE2 : 메인 시군구 부서코드
- STR_VALUE1 : 시군구 명 (유성구)
- STR_VALUE2 : ESB RCV 경로
- STR_VALUE3 : ESB SEND 경로
- STR_VALUE4 : 신문고 xml 백업 경로
- STR_VALUE5 : 신문고 이미지 파일 백업경로
- STR_VALUE6 : 하위 모든 시군구 + 부서코드 제이슨 형태 ex) {"수정구":[41131, 3790009], "중원구":[41133, 3800009], "분당구": [41135, 3810070]}

@ -0,0 +1,4 @@
@echo off
start "" "C:\Program Files\zulu17\bin\javaw.exe" ^
-jar "C:\Users\Administrator\Desktop\cc-worker\clean-parking-worker-0.0.1-SNAPSHOT.jar" --spring.profiles.active=prod
exit

@ -0,0 +1,10 @@
@echo off
echo [INFO] 8011 포트 사용 중인 프로세스 종료 시도...
for /f "tokens=5" %%i in ('netstat -ano ^| findstr :8011 ^| findstr LISTENING') do (
echo [INFO] PID=%%i 종료
taskkill /PID %%i /F
)
echo [OK] 완료.
exit /b 0

@ -0,0 +1,109 @@
package com.worker.domain.entity;
import jakarta.persistence.*;
import lombok.*;
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@EqualsAndHashCode(of = "tgCode")
@Entity
@Table(
name = "cp_gojit",
indexes = {
@Index(name = "CP_GOJIT_IDX1", columnList = "TG_SGGCODE,TG_GB,TG_SDATE"),
@Index(name = "CP_GOJIT_IDX2", columnList = "TG_INDT"),
@Index(name = "CP_GOJIT_IDX3", columnList = "TG_NOTICE_KEY")
}
)
public class CpGojit {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "TG_CODE", nullable = false, updatable = false)
private Long tgCode;
@Column(name = "TG_SGGCODE", length = 5)
private String tgSggCode;
@Column(name = "TG_LAWGB", length = 2)
private String tgLawGb;
@Column(name = "TG_GB", length = 1)
private String tgGb;
@Column(name = "TG_DLGB", length = 1)
private String tgDlgb;
@Column(name = "TG_SRC_SDATE", length = 8)
private String tgSrcSdate;
@Column(name = "TG_SRC_EDATE", length = 8)
private String tgSrcEdate;
@Column(name = "TG_SDATE", length = 8)
private String tgSdate;
@Column(name = "TG_EDATE", length = 8)
private String tgEdate;
@Column(name = "TG_TITLE", length = 100)
private String tgTitle;
@Column(name = "TG_DOCNO", length = 40)
private String tgDocno;
@Column(name = "TG_ETC", length = 100)
private String tgEtc;
@Column(name = "TG_TOTCOUNT")
private Integer tgTotcount;
@Column(name = "TG_TOTKEUM")
private Long tgTotkeum;
@Column(name = "TG_INDT", length = 14)
private String tgIndt;
@Column(name = "TG_INUSER")
private Integer tgInuser;
@Column(name = "TG_CON_KEY", length = 40)
private String tgConKey;
@Column(name = "TG_POST_SE_CD", length = 3)
private String tgPostSeCd;
@Column(name = "TG_IS_RESEND", length = 1)
private String tgIsResend;
@Column(name = "TG_NOTICE_KEY", length = 13)
private String tgNoticeKey;
@Column(name = "TG_POST_PROC_STT", length = 2)
private String tgPostProcStt;
@Column(name = "TG_UNITY_SNDNG_MASTR_ID", length = 20)
private String tgUnitySndngMastrId;
@Column(name = "TG_DELETE", length = 2)
private String tgDelete;
@Column(name = "TG_POST_YN", length = 2)
private String tgPostYn;
@Column(name = "TG_ELPOST_YN", length = 2)
private String tgElpostYn;
public void changeTgPostProcStt(String tgPostProcStt) {
this.tgPostProcStt = tgPostProcStt;
}
public void changeTgCode(Long tgCode) {
this.tgCode = tgCode;
}
}

@ -146,4 +146,14 @@ public class EpostSenderReg {
@Column(name = "TG_CODE", length = 10)
private String tgCode;
public void changePostProcStt(String postProcStt) {
this.postProcStt = postProcStt;
}
public void changeRceptYmd(String rceptYmd) {
this.rceptYmd = rceptYmd;
}
}

@ -4,5 +4,5 @@ import com.worker.domain.entity.CpSgg;
import org.springframework.data.jpa.repository.JpaRepository;
public interface EpSggRepository extends JpaRepository<CpSgg, String> {
CpSgg findBySgDepCode(String pcdDeptV);
CpSgg findBySgDepCode(String sgDepCode);
}

@ -63,7 +63,20 @@ public class EPostDto {
private String gpState;
private Long gpTtcode;
private String postProcSt;
private String conKey;
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public static class SearchRecvTarget {
private String conKey;
private String jobCd;
private String tgCode;
private String postProcStt;
}
@Getter

@ -2,21 +2,14 @@ package com.worker.scheduler.epost.repository;
import com.querydsl.core.types.Projections;
import com.querydsl.jpa.impl.JPAQueryFactory;
import com.worker.domain.entity.CpSetinfo;
import com.worker.scheduler.epost.dto.EPostDto;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import javax.sql.DataSource;
import java.util.List;
import java.util.Set;
import static com.worker.domain.entity.QCpGojiPrt.cpGojiPrt;
import static com.worker.domain.entity.QEpostDelivResult.epostDelivResult;
import static com.worker.domain.entity.QEpostRceptResult.epostRceptResult;
import static com.worker.domain.entity.QEpostSenderDetail.epostSenderDetail;
import static com.worker.domain.entity.QEpostSenderReg.epostSenderReg;
@ -28,7 +21,7 @@ public class EPostQueryDslRepository {
// @Transactional(readOnly = true, transactionManager = "cpTransactionManager")
public List<EPostDto.SearchDelivTarget> findDelivResult(JPAQueryFactory queryFactory ,List<EPostDto.Deliv> dtos, Set<String> cpDeptCode) {
public List<EPostDto.SearchDelivTarget> findDelivResult(JPAQueryFactory queryFactory, List<EPostDto.Deliv> dtos, Set<String> cpDeptCode) {
// List<String> conKeys = dtos.stream()
@ -63,6 +56,7 @@ public class EPostQueryDslRepository {
cpGojiPrt.gpRecvRelt,
cpGojiPrt.gpState,
cpGojiPrt.gpTtcode,
epostSenderDetail.conKey,
epostSenderReg.postProcStt
)
)
@ -81,13 +75,39 @@ public class EPostQueryDslRepository {
public List<EPostDto.Prt> findMakeResult(List<EPostDto.Prt> dtos) {
public List<EPostDto.Prt> findMakeResult(JPAQueryFactory queryFactory, List<EPostDto.Prt> dtos, Set<String> cpDeptCode) {
return null;
}
public List<EPostDto.Deliv> findRceptResult(List<EPostDto.Deliv> dtos) {
public List<EPostDto.SearchRecvTarget> findRceptResult(JPAQueryFactory queryFactory, List<EPostDto.Deliv> dtos, Set<String> cpDeptCode) {
return null;
List<String> conKeys = dtos.stream()
.map(EPostDto.Deliv::getConKey)
.filter(java.util.Objects::nonNull)
.map(String::trim)
.filter(s -> !s.isEmpty())
.filter(k -> {
String[] parts = k.split("-", 3);
return parts.length == 3 && cpDeptCode.stream().anyMatch(parts[1]::startsWith);
})
.distinct()
.toList();
return queryFactory
.select(
Projections.fields(
EPostDto.SearchRecvTarget.class,
epostSenderReg.conKey,
epostSenderReg.jobCd,
epostSenderReg.tgCode,
epostSenderReg.postProcStt
)
)
.from(epostSenderReg)
.where(
epostSenderReg.conKey.in(conKeys)
)
.fetch();
}
public void updateDelivResult(EPostDto.Deliv dto) {

@ -3,6 +3,7 @@ package com.worker.scheduler.epost.service;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.querydsl.jpa.impl.JPAQueryFactory;
import com.worker.domain.entity.CpGojit;
import com.worker.domain.entity.CpSetinfo;
import com.worker.domain.entity.CpSetinfoId;
import com.worker.domain.entity.EpostDelivResult;
@ -72,6 +73,7 @@ public class EPostService {
List<EPostDto.Recv> cpRecvs = new ArrayList<>();
List<EPostDto.Recv> epRecvs = new ArrayList<>();
// target 체킹
parseResult.forEach(e -> {
switch(e.getKind()) {
case "deliv" -> {
@ -81,11 +83,17 @@ public class EPostService {
epDelivs.addAll(ePostQueryDslRepository.findDelivResult(epQueryFactory, e.getResult(), epDeptCode));
}
case "rcept" -> {
}
case "make" -> {
if(setInfo.getCpSetinfo() != null)
cpRecvs.addAll(ePostQueryDslRepository.findRceptResult(cpQueryFactory, e.getResult(), cpDeptCode));
if(setInfo.getEpSetinfo() != null)
epRecvs.addAll(ePostQueryDslRepository.findRceptResult(epQueryFactory, e.getResult(), cpDeptCode));
}
// case "make" -> {
// if(setInfo.getCpSetinfo() != null)
// cpPrts.addAll();
// if(setInfo.getEpSetinfo() != null)
// epPrts.addAll();
// }
}
@ -105,8 +113,16 @@ public class EPostService {
}
private void insertReceiveResults(List<EPostDto.Recv> recvs) {
//고지 업데이트
//reg 업데이트
}
private void insertDelivResults(List<EPostDto.Deliv> delivs) {
List<EpostDelivResult> entities = delivs.stream()
.map(item -> EpostDelivResult.builder()

@ -454,7 +454,7 @@ public class DbPolling {
// 부과코드로 시군구 코드를 조회한다.
private String findSggCodeByDepCode(SinmungoDto.SinmungoXml xml, String dbType) {
String sggCode = null;
if(dbType.equals("CP")) sggCode = cpSggRepository.findBySgDepCode(xml.getPcd_dept_v()).getSgSggcode();
if(dbType.equals("cp")) sggCode = cpSggRepository.findBySgDepCode(xml.getPcd_dept_v()).getSgSggcode();
else sggCode = epSggRepository.findBySgDepCode(xml.getPcd_dept_v()).getSgSggcode();
return sggCode;
}

@ -29,7 +29,7 @@ public class TaxSunapScheduler {
private final TaxSunapService taxSunapService;
@Scheduled(fixedRate = 60 * 60 * 1000)
// @Scheduled(fixedRate = 60 * 60 * 1000)
public void taxSunapScheduler() {
//인포 세팅

@ -3,11 +3,32 @@ server:
spring:
datasource:
url: jdbc:mariadb://211.119.124.122:53306/cleanparking2?useUnicode=true&characterEncoding=utf8
username: root
password: xit5811807
driver-class-name: org.mariadb.jdbc.Driver
cp:
url: jdbc:mariadb://105.24.1.226:53306/cptest?useUnicode=true&characterEncoding=utf8
username: root
password: xit5811807
driver-class-name: org.mariadb.jdbc.Driver
hikari:
initialization-fail-timeout: -1 # DB 없어도 부팅 계속
validation-timeout: 2000 # ms
connection-timeout: 3000 # ms
maximum-pool-size: 5
ep:
url: jdbc:mariadb://105.24.1.226:53306/eptest?useUnicode=true&characterEncoding=utf8
username: root
password: xit5811807
driver-class-name: org.mariadb.jdbc.Driver
hikari:
initialization-fail-timeout: -1 # DB 없어도 부팅 계속
validation-timeout: 2000 # ms
connection-timeout: 3000 # ms
maximum-pool-size: 5
# 이미 운영되고있는 서버들 많고 디비 구성 변경시 영향도 파악 어려움.
# ddl은 무조건 수동으로 해줄것.
# jpa는 순수 개발편의를 위한 사용.
# 연관관계 지정하지말고 그대로 쓸것.
jpa:
show-sql: false
hibernate:
@ -15,28 +36,30 @@ spring:
properties:
hibernate:
format_sql: true
# 부팅 시 DB 메타데이터 조회 방지 + 방언 명시 (매우 중요)
temp.use_jdbc_metadata_defaults: false
dialect: org.hibernate.dialect.MySQLDialect
scheduler:
smg:
enabled: true
epost:
enabled: false
enabled: true
tax-sunap:
enabled: false
enabled: true
update:
enabled: false
esb:
info:
xmlDir:
codeName: 국민신문고
groupCode: 정보
detailCode: 1
backupDir:
codeName: SERVER_INFO
groupCode: DIRECTORY
detailCode: IMAGE
cp:
codeName: WORKER
groupCode: INFO
detailCode: PROD
ep:
codeName: WORKER
groupCode: INFO
detailCode: PROD
tax-else:
protocol: https://

Loading…
Cancel
Save