diff --git a/README.md b/README.md
index 6c746cb..a68b0c3 100644
--- a/README.md
+++ b/README.md
@@ -22,3 +22,64 @@ start "" "C:\Program Files\Eclipse Adoptium\jdk-17.0.15.6-hotspot\bin\java.exe"
- 해당 실행은 스크립트를 통해 만들 예정이며, 이후 스크립트 더블클릭으로 재실행 할수 있도록 한다.
- start를 붙이면 백그라운드로 실행 가능하다 (윈도우)
- 대신 로그를 볼려면 실행로그파일을 따로 지정해줘야 된다.
+
+
+
+- 수동실행을 위한 뷰페이지 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
+
+```
+
+
+
+### 배포 및 필수값 세팅
+
+[JAVA] JDK 17버전 세팅
+
+
+[실행 스크립트 bat파일]
+- 기타 여러 프로그램으로 cmd콘솔이 너무 많음.
+- 하여 해당 워커는 백그라운드로 돌리고 실행유무 판단은 뷰페이지를 통하여 함.
+- 실행과 중지는 bat파일을 통해 하도록 한다.
+
+[CpSgg] 필수 값 세팅 1
+- 하위 sgg코드들 다 있어야함.
+
+[SetInfo] 필수 값 세팅 2
+
+- 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]}
\ No newline at end of file
diff --git a/cc-worker-start.bat b/cc-worker-start.bat
new file mode 100644
index 0000000..75c0d42
--- /dev/null
+++ b/cc-worker-start.bat
@@ -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
diff --git a/cc-worker-stop.bat b/cc-worker-stop.bat
new file mode 100644
index 0000000..3976fc3
--- /dev/null
+++ b/cc-worker-stop.bat
@@ -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
diff --git a/src/main/java/com/worker/domain/entity/CpGojit.java b/src/main/java/com/worker/domain/entity/CpGojit.java
new file mode 100644
index 0000000..abaf653
--- /dev/null
+++ b/src/main/java/com/worker/domain/entity/CpGojit.java
@@ -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;
+ }
+
+}
diff --git a/src/main/java/com/worker/domain/entity/EpostSenderReg.java b/src/main/java/com/worker/domain/entity/EpostSenderReg.java
index 592a0a8..d8c9055 100644
--- a/src/main/java/com/worker/domain/entity/EpostSenderReg.java
+++ b/src/main/java/com/worker/domain/entity/EpostSenderReg.java
@@ -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;
+ }
+
}
\ No newline at end of file
diff --git a/src/main/java/com/worker/domain/repo/ep/EpSggRepository.java b/src/main/java/com/worker/domain/repo/ep/EpSggRepository.java
index cb869ce..92df47b 100644
--- a/src/main/java/com/worker/domain/repo/ep/EpSggRepository.java
+++ b/src/main/java/com/worker/domain/repo/ep/EpSggRepository.java
@@ -4,5 +4,5 @@ import com.worker.domain.entity.CpSgg;
import org.springframework.data.jpa.repository.JpaRepository;
public interface EpSggRepository extends JpaRepository {
- CpSgg findBySgDepCode(String pcdDeptV);
+ CpSgg findBySgDepCode(String sgDepCode);
}
diff --git a/src/main/java/com/worker/scheduler/epost/dto/EPostDto.java b/src/main/java/com/worker/scheduler/epost/dto/EPostDto.java
index e251c81..4d9d26a 100644
--- a/src/main/java/com/worker/scheduler/epost/dto/EPostDto.java
+++ b/src/main/java/com/worker/scheduler/epost/dto/EPostDto.java
@@ -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
diff --git a/src/main/java/com/worker/scheduler/epost/repository/EPostQueryDslRepository.java b/src/main/java/com/worker/scheduler/epost/repository/EPostQueryDslRepository.java
index 05e3b9c..5b7bc9e 100644
--- a/src/main/java/com/worker/scheduler/epost/repository/EPostQueryDslRepository.java
+++ b/src/main/java/com/worker/scheduler/epost/repository/EPostQueryDslRepository.java
@@ -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 findDelivResult(JPAQueryFactory queryFactory ,List dtos, Set cpDeptCode) {
+ public List findDelivResult(JPAQueryFactory queryFactory, List dtos, Set cpDeptCode) {
// List 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 findMakeResult(List dtos) {
+ public List findMakeResult(JPAQueryFactory queryFactory, List dtos, Set cpDeptCode) {
return null;
}
- public List findRceptResult(List dtos) {
+ public List findRceptResult(JPAQueryFactory queryFactory, List dtos, Set cpDeptCode) {
- return null;
+ List 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) {
diff --git a/src/main/java/com/worker/scheduler/epost/service/EPostService.java b/src/main/java/com/worker/scheduler/epost/service/EPostService.java
index b01fa65..9b2c575 100644
--- a/src/main/java/com/worker/scheduler/epost/service/EPostService.java
+++ b/src/main/java/com/worker/scheduler/epost/service/EPostService.java
@@ -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 cpRecvs = new ArrayList<>();
List 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 recvs) {
+ //고지 업데이트
+
+ //reg 업데이트
+
+
+ }
+
private void insertDelivResults(List delivs) {
List entities = delivs.stream()
.map(item -> EpostDelivResult.builder()
diff --git a/src/main/java/com/worker/scheduler/smg/service/DbPolling.java b/src/main/java/com/worker/scheduler/smg/service/DbPolling.java
index 8d3982d..fd9cc8f 100644
--- a/src/main/java/com/worker/scheduler/smg/service/DbPolling.java
+++ b/src/main/java/com/worker/scheduler/smg/service/DbPolling.java
@@ -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;
}
diff --git a/src/main/java/com/worker/scheduler/tax/schedule/TaxSunapScheduler.java b/src/main/java/com/worker/scheduler/tax/schedule/TaxSunapScheduler.java
index a865370..0b52cd0 100644
--- a/src/main/java/com/worker/scheduler/tax/schedule/TaxSunapScheduler.java
+++ b/src/main/java/com/worker/scheduler/tax/schedule/TaxSunapScheduler.java
@@ -29,7 +29,7 @@ public class TaxSunapScheduler {
private final TaxSunapService taxSunapService;
- @Scheduled(fixedRate = 60 * 60 * 1000)
+// @Scheduled(fixedRate = 60 * 60 * 1000)
public void taxSunapScheduler() {
//인포 세팅
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 9850c8b..2f7b592 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -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://