diff --git a/src/main/java/com/manual/controller/RunController.java b/src/main/java/com/manual/controller/RunController.java index 69c6d32..983ea9b 100644 --- a/src/main/java/com/manual/controller/RunController.java +++ b/src/main/java/com/manual/controller/RunController.java @@ -1,6 +1,7 @@ package com.manual.controller; import com.worker.scheduler.smg.schedule.SinmungoInOutScheduler; +import com.worker.scheduler.tax.schedule.TaxSunapScheduler; import com.worker.scheduler.update.schedule.WarSyncScheduler; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -17,6 +18,7 @@ public class RunController { private final WarSyncScheduler warSyncScheduler; private final SinmungoInOutScheduler sinmungoInOutScheduler; + private final TaxSunapScheduler taxSunapScheduler; @PostMapping("/menual/update-war") @@ -55,6 +57,7 @@ public class RunController { @PostMapping("/menual/tax-sunap") public ResponseEntity taxSunap() throws IOException { + taxSunapScheduler.taxSunapScheduler(); return ResponseEntity.ok("Success"); } } diff --git a/src/main/java/com/worker/domain/entity/CpGojiPrt.java b/src/main/java/com/worker/domain/entity/CpGojiPrt.java new file mode 100644 index 0000000..6f3e1c7 --- /dev/null +++ b/src/main/java/com/worker/domain/entity/CpGojiPrt.java @@ -0,0 +1,211 @@ +package com.worker.domain.entity; + +import jakarta.persistence.*; +import lombok.Getter; + +@Entity +@Getter +@Table(name = "cp_goji_prt", + indexes = { + @Index(name = "CP_GOJI_PRT_IDX1", columnList = "GP_MMCODE, GP_SDATE"), + @Index(name = "CP_GOJI_PRT_IDX2", columnList = "GP_SGGCODE, GP_LAWGB, GP_PRTGB, GP_STATE, GP_SEND_DATE, GP_SEND_TIME"), + @Index(name = "CP_GOJI_PRT_IDX3", columnList = "GP_SGGCODE, GP_TTCODE"), + @Index(name = "CP_GOJI_PRT_IDX4", columnList = "GP_SGGCODE, GP_GTCODE"), + @Index(name = "CP_GOJI_PRT_IDX6", columnList = "GP_REGIST_NO"), + @Index(name = "CP_GOJI_PRT_IDX7", columnList = "GP_SGGCODE, GP_MM_CARNO"), + @Index(name = "CP_GOJI_PRT_IDX8", columnList = "GP_SGGCODE, GP_ACC_YEAR, GP_LVY_NO"), + @Index(name = "CP_GOJI_PRT_IDX9", columnList = "GP_CON_KEY, GP_REGIST_NO") + }) +public class CpGojiPrt { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "GP_CODE", nullable = false) + private Long gpCode; + + @Column(name = "GP_LAWGB", length = 2) + private String gpLawgb; + + @Column(name = "GP_PRTGB", length = 1) + private String gpPrtgb; + + @Column(name = "GP_TTCODE") + private Long gpTtcode; + + @Column(name = "GP_GTCODE") + private Long gpGtcode; + + @Column(name = "GP_SGGCODE", length = 5) + private String gpSggcode; + + @Column(name = "GP_MMCODE", length = 16) + private String gpMmcode; + + @Column(name = "GP_MM_CARNO", length = 100) + private String gpMmCarno; + + @Column(name = "GP_MM_WDATETIME", length = 30) + private String gpMmWdatetime; + + @Column(name = "GP_MM_SGPOS", length = 200) + private String gpMmSgpos; + + @Column(name = "GP_LVY_KEY", length = 20) + private String gpLvyKey; + + @Column(name = "GP_ACC_YEAR", length = 6) + private String gpAccYear; + + @Column(name = "GP_LVY_NO", length = 6) + private String gpLvyNo; + + @Column(name = "GP_ACCOUNT_NO", length = 20) + private String gpAccountNo; + + @Column(name = "GP_ERC_NO", length = 19) + private String gpErcNo; + + @Column(name = "GP_SDATE", length = 8) + private String gpSdate; + + @Column(name = "GP_EDATE", length = 8) + private String gpEdate; + + @Column(name = "GP_KEUM_T") + private Integer gpKeumT; + + @Column(name = "GP_KEUM_A") + private Integer gpKeumA; + + @Column(name = "GP_KEUM_B") + private Integer gpKeumB; + + @Column(name = "GP_NAME", length = 100) + private String gpName; + + @Column(name = "GP_JNO", length = 100) + private String gpJno; + + @Column(name = "GP_JUSO", length = 100) + private String gpJuso; + + @Column(name = "GP_BUNJI", length = 100) + private String gpBunji; + + @Column(name = "GP_ZIP", length = 6) + private String gpZip; + + @Column(name = "GP_REGIST_NO", length = 15) + private String gpRegistNo; + + @Column(name = "GP_SEND_DATE", length = 8) + private String gpSendDate; + + @Column(name = "GP_SEND_TIME", length = 8) + private String gpSendTime; + + @Column(name = "GP_RETURN_CD", length = 100) + private String gpReturnCd; + + @Column(name = "GP_RECV_NAME", length = 30) + private String gpRecvName; + + @Column(name = "GP_RECV_RELT", length = 30) + private String gpRecvRelt; + + @Column(name = "GP_STATE", length = 1) + private String gpState; + + @Column(name = "GP_STATE_OLD", length = 1) + private String gpStateOld; + + @Column(name = "GP_SEND_DATE_OLD", length = 8) + private String gpSendDateOld; + + @Column(name = "GP_SEND_TIME_OLD", length = 8) + private String gpSendTimeOld; + + @Column(name = "GP_SUNAP", length = 1) + private String gpSunap; + + @Column(name = "GP_ADDR_UPDATE", length = 1) + private String gpAddrUpdate; + + @Column(name = "GP_KEUM", length = 7) + private String gpKeum; + + @Column(name = "GP_CON_KEY", length = 30) + private String gpConKey; + + @Column(name = "GP_ACCOUNT_NO2", length = 20) + private String gpAccountNo2; + + @Column(name = "GP_ACCOUNT_NO3", length = 20) + private String gpAccountNo3; + + @Column(name = "GP_BANK_NM", length = 20) + private String gpBankNm; + + @Column(name = "GP_BANK_NM2", length = 20) + private String gpBankNm2; + + @Column(name = "GP_BANK_NM3", length = 20) + private String gpBankNm3; + + @Column(name = "GP_ACCOUNT_NO4", length = 20) + private String gpAccountNo4; + + @Column(name = "GP_ACCOUNT_NO5", length = 20) + private String gpAccountNo5; + + @Column(name = "GP_ACCOUNT_NO6", length = 20) + private String gpAccountNo6; + + @Column(name = "GP_ACCOUNT_NO7", length = 20) + private String gpAccountNo7; + + @Column(name = "GP_ACCOUNT_NO8", length = 20) + private String gpAccountNo8; + + @Column(name = "GP_ACCOUNT_NO9", length = 20) + private String gpAccountNo9; + + @Column(name = "GP_ACCOUNT_NO10", length = 20) + private String gpAccountNo10; + + @Column(name = "GP_ACCOUNT_NO11", length = 20) + private String gpAccountNo11; + + @Column(name = "GP_BANK_NM4", length = 20) + private String gpBankNm4; + + @Column(name = "GP_BANK_NM5", length = 20) + private String gpBankNm5; + + @Column(name = "GP_BANK_NM6", length = 20) + private String gpBankNm6; + + @Column(name = "GP_BANK_NM7", length = 20) + private String gpBankNm7; + + @Column(name = "GP_BANK_NM8", length = 20) + private String gpBankNm8; + + @Column(name = "GP_BANK_NM9", length = 20) + private String gpBankNm9; + + @Column(name = "GP_BANK_NM10", length = 20) + private String gpBankNm10; + + @Column(name = "GP_BANK_NM11", length = 20) + private String gpBankNm11; + + @Column(name = "GP_TAXNO", length = 40) + private String gpTaxno; + + @Column(name = "GP_PAY_OUT_DATE", length = 8) + private String gpPayOutDate; + + @Column(name = "GP_ELPOST_STATE", length = 2) + private String gpElpostState; +} diff --git a/src/main/java/com/worker/domain/entity/CpMatch.java b/src/main/java/com/worker/domain/entity/CpMatch.java new file mode 100644 index 0000000..2630f3c --- /dev/null +++ b/src/main/java/com/worker/domain/entity/CpMatch.java @@ -0,0 +1,134 @@ +package com.worker.domain.entity; + + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Table(name = "cp_match") +@Getter +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class CpMatch { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "MC_CODE", nullable = false) + private Long mcCode; + + @Column(name = "MC_MMCODE", length = 16) + private String mcMmcode; + + @Column(name = "MC_MM_WDATETIME", length = 30) + private String mcMmWdatetime; + + @Column(name = "MC_MM_SGPOS", length = 200) + private String mcMmSgpos; + + @Column(name = "MC_BDONG", length = 30) + private String mcBdong; + + @Column(name = "MC_LVY_KEY_0", length = 20) + private String mcLvyKey0; + + @Column(name = "MC_LVY_KEY", length = 20) + private String mcLvyKey; + + @Column(name = "MC_ACC_YEAR", length = 6) + private String mcAccYear; + + @Column(name = "MC_LVY_NO", length = 6) + private String mcLvyNo; + + @Column(name = "MC_ACCOUNT_NO", length = 20) + private String mcAccountNo; + + @Column(name = "MC_ERC_NO", length = 19) + private String mcErcNo; + + @Column(name = "MC_KEUM_T", length = 8) + private String mcKeumT; + + @Column(name = "MC_KEUM_A", length = 8) + private String mcKeumA; + + @Column(name = "MC_KEUM_B", length = 8) + private String mcKeumB; + + @Column(name = "MC_INDT", length = 14) + private String mcIndt; + + @Column(name = "MC_EDITDT", length = 14) + private String mcEditdt; + + @Column(name = "MC_STATE", length = 1) + private String mcState; + + @Column(name = "MC_ACCOUNT_NO2", length = 20) + private String mcAccountNo2; + + @Column(name = "MC_ACCOUNT_NO3", length = 20) + private String mcAccountNo3; + + @Column(name = "MC_BANK_NM", length = 20) + private String mcBankNm; + + @Column(name = "MC_BANK_NM2", length = 20) + private String mcBankNm2; + + @Column(name = "MC_BANK_NM3", length = 20) + private String mcBankNm3; + + @Column(name = "MC_ACCOUNT_NO4", length = 20) + private String mcAccountNo4; + + @Column(name = "MC_ACCOUNT_NO5", length = 20) + private String mcAccountNo5; + + @Column(name = "MC_ACCOUNT_NO6", length = 20) + private String mcAccountNo6; + + @Column(name = "MC_ACCOUNT_NO7", length = 20) + private String mcAccountNo7; + + @Column(name = "MC_ACCOUNT_NO8", length = 20) + private String mcAccountNo8; + + @Column(name = "MC_ACCOUNT_NO9", length = 20) + private String mcAccountNo9; + + @Column(name = "MC_ACCOUNT_NO10", length = 20) + private String mcAccountNo10; + + @Column(name = "MC_ACCOUNT_NO11", length = 20) + private String mcAccountNo11; + + @Column(name = "MC_BANK_NM4", length = 20) + private String mcBankNm4; + + @Column(name = "MC_BANK_NM5", length = 20) + private String mcBankNm5; + + @Column(name = "MC_BANK_NM6", length = 20) + private String mcBankNm6; + + @Column(name = "MC_BANK_NM7", length = 20) + private String mcBankNm7; + + @Column(name = "MC_BANK_NM8", length = 20) + private String mcBankNm8; + + @Column(name = "MC_BANK_NM9", length = 20) + private String mcBankNm9; + + @Column(name = "MC_BANK_NM10", length = 20) + private String mcBankNm10; + + @Column(name = "MC_BANK_NM11", length = 20) + private String mcBankNm11; + + +} diff --git a/src/main/java/com/worker/domain/entity/CpSgg.java b/src/main/java/com/worker/domain/entity/CpSgg.java index 73f2379..1279829 100644 --- a/src/main/java/com/worker/domain/entity/CpSgg.java +++ b/src/main/java/com/worker/domain/entity/CpSgg.java @@ -13,7 +13,7 @@ public class CpSgg { @Id @Column(name = "SG_SGGCODE", length = 5, nullable = false) - private String sgSggCode; + private String sgSggcode; @Column(name = "SG_SGGNAME", length = 20) private String sgSggName; diff --git a/src/main/java/com/worker/domain/repo/cp/CpGojiPrtRepository.java b/src/main/java/com/worker/domain/repo/cp/CpGojiPrtRepository.java new file mode 100644 index 0000000..275ea58 --- /dev/null +++ b/src/main/java/com/worker/domain/repo/cp/CpGojiPrtRepository.java @@ -0,0 +1,7 @@ +package com.worker.domain.repo.cp; + +import com.worker.domain.entity.CpGojiPrt; +import org.springframework.data.repository.CrudRepository; + +public interface CpGojiPrtRepository extends CrudRepository { +} diff --git a/src/main/java/com/worker/domain/repo/cp/CpMatchRepository.java b/src/main/java/com/worker/domain/repo/cp/CpMatchRepository.java new file mode 100644 index 0000000..12b6699 --- /dev/null +++ b/src/main/java/com/worker/domain/repo/cp/CpMatchRepository.java @@ -0,0 +1,8 @@ +package com.worker.domain.repo.cp; + +import com.worker.domain.entity.CpMatch; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface CpMatchRepository extends JpaRepository { + CpMatch findByMcMmcode(String mngItemSn6); +} diff --git a/src/main/java/com/worker/domain/repo/ep/EpGojiPrtRepository.java b/src/main/java/com/worker/domain/repo/ep/EpGojiPrtRepository.java new file mode 100644 index 0000000..2aae13e --- /dev/null +++ b/src/main/java/com/worker/domain/repo/ep/EpGojiPrtRepository.java @@ -0,0 +1,7 @@ +package com.worker.domain.repo.ep; + +import com.worker.domain.entity.CpGojiPrt; +import org.springframework.data.repository.CrudRepository; + +public interface EpGojiPrtRepository extends CrudRepository { +} diff --git a/src/main/java/com/worker/domain/repo/ep/EpMatchRepository.java b/src/main/java/com/worker/domain/repo/ep/EpMatchRepository.java new file mode 100644 index 0000000..0525e74 --- /dev/null +++ b/src/main/java/com/worker/domain/repo/ep/EpMatchRepository.java @@ -0,0 +1,8 @@ +package com.worker.domain.repo.ep; + +import com.worker.domain.entity.CpMatch; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface EpMatchRepository extends JpaRepository { + CpMatch findByMcMmcode(String mngItemSn6); +} diff --git a/src/main/java/com/worker/domain/repo/ep/EpViolationRepository.java b/src/main/java/com/worker/domain/repo/ep/EpViolationRepository.java index e8a0067..a044c91 100644 --- a/src/main/java/com/worker/domain/repo/ep/EpViolationRepository.java +++ b/src/main/java/com/worker/domain/repo/ep/EpViolationRepository.java @@ -5,4 +5,6 @@ import com.worker.domain.entity.CpViolationId; import org.springframework.data.jpa.repository.JpaRepository; public interface EpViolationRepository extends JpaRepository { + + CpViolation findByIdVlCode(String gpLawGb); } diff --git a/src/main/java/com/worker/scheduler/smg/repository/DbPollingQueryDslRepository.java b/src/main/java/com/worker/scheduler/smg/repository/DbPollingQueryDslRepository.java index 47ec337..65c8582 100644 --- a/src/main/java/com/worker/scheduler/smg/repository/DbPollingQueryDslRepository.java +++ b/src/main/java/com/worker/scheduler/smg/repository/DbPollingQueryDslRepository.java @@ -31,7 +31,7 @@ public class DbPollingQueryDslRepository { ) ) .from(cpUser) - .leftJoin(cpSgg).on(cpSgg.sgSggCode.eq(cpUser.umSggcode)) + .leftJoin(cpSgg).on(cpSgg.sgSggcode.eq(cpUser.umSggcode)) .where(cpUser.umCode.eq(umCode)) .fetch(); diff --git a/src/main/java/com/worker/scheduler/smg/repository/XmlSendQueryDslRepository.java b/src/main/java/com/worker/scheduler/smg/repository/XmlSendQueryDslRepository.java index 895a828..b110c95 100644 --- a/src/main/java/com/worker/scheduler/smg/repository/XmlSendQueryDslRepository.java +++ b/src/main/java/com/worker/scheduler/smg/repository/XmlSendQueryDslRepository.java @@ -44,7 +44,7 @@ public class XmlSendQueryDslRepository { .from(cpAnswer) .innerJoin(cpMain).on(cpAnswer.asMmcode.eq(cpMain.mmCode)) .innerJoin(cpUser).on(cpAnswer.asReuser.eq(cpUser.umCode)) - .innerJoin(cpSgg).on(cpUser.umSggcode.eq(cpSgg.sgSggCode)) + .innerJoin(cpSgg).on(cpUser.umSggcode.eq(cpSgg.sgSggcode)) .leftJoin(cpCancel).on(cpAnswer.asMmcode.eq(cpCancel.ccMmcode)) .where(cpAnswer.asState.eq(state)) .fetch(); 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 16bb5ed..e454d99 100644 --- a/src/main/java/com/worker/scheduler/smg/service/DbPolling.java +++ b/src/main/java/com/worker/scheduler/smg/service/DbPolling.java @@ -454,8 +454,8 @@ 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(); - else sggCode = epSggRepository.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/dto/TaxSunapDto.java b/src/main/java/com/worker/scheduler/tax/dto/TaxSunapDto.java index 34e986c..787320a 100644 --- a/src/main/java/com/worker/scheduler/tax/dto/TaxSunapDto.java +++ b/src/main/java/com/worker/scheduler/tax/dto/TaxSunapDto.java @@ -3,6 +3,8 @@ package com.worker.scheduler.tax.dto; import com.worker.domain.entity.CpSetinfo; import lombok.*; +import java.util.List; + public class TaxSunapDto { @@ -18,6 +20,17 @@ public class TaxSunapDto { private CpSetinfo epSetinfo; } + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class GojiTarget { + private String gpLvyNo; + private String gpLawgb; + private String gpAccYear; + } + @Getter @Setter @NoArgsConstructor @@ -74,9 +87,127 @@ public class TaxSunapDto { @Builder public static class Response { + + private String state; // Success/Fail private int code; // 200/500 ... - private String data; // 상세 메시지 + private List result; // 상세 메시지 + + + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class Result { + + private String sgbCd; // 지방자치단체코드 + private String lvyKey; // 부과키 + private String dptNm; // 부서명 + private String dptCd; // 부서코드 + private String sgbNm; // 자치단체명 + private String fyr; // 회계년도 + private String actSeCd; // 회계구분 + private String rprsTxmCd; // 대표세입과목코드 + private String rprsTxmNm; // 대표세입과목명 + private String lvyNo; // 부과번호 + private String itmSn; // 분납일련번호 + private String rcvmtSeNm; // 수납구분명 + private String szrSeNm; // 압류구분명 + private String pyrSeCd; // 납부자구분코드 + private String pyrMngNo; // 납부자관리번호 + private String pyrAddrSn; // 납부자주소일련번호 + private String pyrNo; // 납부자번호 + private String pyrNm; // 납부자명 + private String pyrSttCd; // 납부자상태코드 + private String pyrSttNm; // 납부자상태명 + private String zip; // 우편번호 + private String pyrAddr; // 납세자주소 + private String lotnoRoadAddrSeCd; // 지번도로주소구분코드 + private String pyrCnpcNo; // 전화번호 + private String pyrMblCnpcNo; // 휴대폰번호 + private String lvySeCd; // 부과구분코드 + private String lvyYmd; // 부과일자 + private String frstPidYmd; // 최초납기일자 + private String lastPidYmd; // 납기일자 + private String pidAfYmd; // 납기후일자 + private String pidAfAmt; // 납기후금액 + private String frstPctAmt; // 최초부과금액 + private String lvySttSeNm; // 부과상태구분 + private String lastPctAmt; // 최종본세(본세) + private String lastAdtnAmt; // 가산금 + private String lastItmIntrAmt; // 분납이자 + private String itmSeNm; // 분납구분 + private String untyLvyDataSeNm; // 통합구분 + private String glNm; // 물건지명 + private String glMngNo; // 물건지관리번호 + private String glLotnoRoadAddrSeCd; // 물건지지번도로주소구분코드 + private String glZip; // 물건지우편번호 + private String glAddr; // 물건지주소 + + private String vtlacBankNm1; // 통합가상계좌은행명1 + private String vrActno1; // 통합가상계좌번호1 + private String vtlacBankNm2; + private String vrActno2; + private String vtlacBankNm3; + private String vrActno3; + private String vtlacBankNm4; + private String vrActno4; + private String vtlacBankNm5; + private String vrActno5; + private String vtlacBankNm6; + private String vrActno6; + private String vtlacBankNm7; + private String vrActno7; + private String vtlacBankNm8; + private String vrActno8; + private String vtlacBankNm9; + private String vrActno9; + private String vtlacBankNm10; + private String vrActno10; + private String vtlacBankNm11; + private String vrActno11; + private String vtlacBankNm12; + private String vrActno12; + private String vtlacBankNm13; + private String vrActno13; + private String vtlacBankNm14; + private String vrActno14; + private String vtlacBankNm15; + private String vrActno15; + private String vtlacBankNm16; + private String vrActno16; + private String vtlacBankNm17; + private String vrActno17; + private String vtlacBankNm18; + private String vrActno18; + private String vtlacBankNm19; + private String vrActno19; + private String vtlacBankNm20; + private String vrActno20; + + private String epayNo; // 전자납부번호 + private String mngItemSn1; // 관리항목1 + private String mngItemSn2; // 관리항목2 + private String mngItemSn3; // 관리항목3 + private String mngItemSn4; // 관리항목4 + private String mngItemSn5; // 관리항목5 + private String mngItemSn6; // 관리항목6 + private String arrRsnCd; // 체납사유코드 + private String arrRsnNm; // 체납사유 + private String dftSeNm; // 결손구분명 + private String pyrEmlAddr; // 납부자이메일 + private String autoPaySeCd; // 자동납부구분코드 + private String rdtSeNm; // 감경구분 + private String rpmSzrVhrno; // 대체압류자동차등록번호 + private String untyRprsKey; // 통합대표키 + private String linkRstCd; // 연계 결과 코드 + private String linkRstMsg; // 연계 결과 메시지 + + } + + } } diff --git a/src/main/java/com/worker/scheduler/tax/repository/TaxSunapQueryDslRepository.java b/src/main/java/com/worker/scheduler/tax/repository/TaxSunapQueryDslRepository.java new file mode 100644 index 0000000..193a562 --- /dev/null +++ b/src/main/java/com/worker/scheduler/tax/repository/TaxSunapQueryDslRepository.java @@ -0,0 +1,52 @@ +package com.worker.scheduler.tax.repository; + +import com.querydsl.core.types.Projections; +import com.querydsl.jpa.impl.JPAQueryFactory; +import com.worker.scheduler.tax.dto.TaxSunapDto; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Repository; + +import java.util.List; + +import static com.worker.domain.entity.QCpGojiPrt.cpGojiPrt; +import static com.worker.domain.entity.QCpMain.cpMain; +import static com.worker.domain.entity.QCpSgg.cpSgg; + +@Repository +@RequiredArgsConstructor +public class TaxSunapQueryDslRepository { + + private final JPAQueryFactory queryFactory; + + public List findGojiTarget(){ + return queryFactory + .select( + Projections.fields( + TaxSunapDto.Request.GojiTarget.class, + cpGojiPrt.gpLvyNo, + cpGojiPrt.gpLawgb, + cpGojiPrt.gpAccYear + ) + ) + .from(cpGojiPrt) + .innerJoin(cpMain).on(cpMain.mmCode.eq(cpGojiPrt.gpMmcode)) + .innerJoin(cpSgg).on(cpSgg.sgSggcode.eq(cpGojiPrt.gpSggcode)) + .where( + cpGojiPrt.gpSdate.loe("20250704"), + cpGojiPrt.gpEdate.goe("20250717"), + cpGojiPrt.gpState.goe("2"), + cpGojiPrt.gpSunap.isNull().or(cpGojiPrt.gpSunap.lt("1")) + ) + .fetch(); + + + + + } + + + + +} + 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 0aad7e8..8ee1e96 100644 --- a/src/main/java/com/worker/scheduler/tax/schedule/TaxSunapScheduler.java +++ b/src/main/java/com/worker/scheduler/tax/schedule/TaxSunapScheduler.java @@ -7,6 +7,7 @@ import com.worker.scheduler.tax.service.TaxSunapService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.env.Environment; import org.springframework.http.MediaType; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -15,34 +16,48 @@ import reactor.core.publisher.Mono; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.List; @Component @RequiredArgsConstructor @Slf4j public class TaxSunapScheduler { + private final Environment env; private final WebClient webClient; - private final TaxSunapService taxSunapService; - private final CpSetinfoRepository cpSetinfoRepository; @Scheduled(fixedRate = 60 * 60 * 1000) - public void TaxSunapScheduler() { + public void taxSunapScheduler() { + + //인포 세팅 + TaxSunapDto.Request.SetInfo setInfo = taxSunapService.findSetinfo(); - // setinfo 조회 + //cp_goji_prt 조회 후 갯수만큼 반복 + List cpTargets = taxSunapService.findGojiTarget(); + List epTargets = taxSunapService.findGojiTarget(); + for (TaxSunapDto.Request.GojiTarget target : cpTargets) taxSunap("cp", setInfo.getCpSetinfo(), target); + for (TaxSunapDto.Request.GojiTarget target : epTargets) taxSunap("ep", setInfo.getEpSetinfo(), target); + + } -// private String PORT = ""; -// private String DIR = "/mediate/ltis"; + public void taxSunap(String kind, CpSetinfo setInfo, TaxSunapDto.Request.GojiTarget target) { + String PROTOCOL = env.getProperty("tax-else.protocol");; + String DOMAIN = env.getProperty("tax-else.domain"); + String PORT = env.getProperty("tax-else.port"); + String DIR = env.getProperty("tax-else.path.sunap"); + log.info("Tax Sunap Http request make Start"); + log.info(target.getGpLvyNo()); Mono taxSunapDtoMono = webClient.post() - .uri("") + .uri(PROTOCOL + DOMAIN + PORT + DIR) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) - .bodyValue(taxSunapService.taxSunapFindReqInfo()) + .bodyValue(taxSunapService.taxSunapFindReqInfo(kind, setInfo, target)) .retrieve() .bodyToMono(TaxSunapDto.Response.class); TaxSunapDto.Response res = taxSunapDtoMono.block(); @@ -50,9 +65,12 @@ public class TaxSunapScheduler { log.info("[TAX] response: retCode={}, retName={}, retMsg={}", res != null ? res.getState() : null, res != null ? res.getCode() : null, - res != null ? res.getData() : null); + res != null ? res.getResult() : null); + log.info(res.getResult().size() + "건 조회 완료."); - taxSunapService.taxSunapUpdate(res); + for(int i = 0; i < res.getResult().size(); i++) { + taxSunapService.taxSunapUpdate(res.getResult().get(i), kind); + } } diff --git a/src/main/java/com/worker/scheduler/tax/service/TaxSunapService.java b/src/main/java/com/worker/scheduler/tax/service/TaxSunapService.java index cc5eb9a..34ab7d9 100644 --- a/src/main/java/com/worker/scheduler/tax/service/TaxSunapService.java +++ b/src/main/java/com/worker/scheduler/tax/service/TaxSunapService.java @@ -1,58 +1,109 @@ package com.worker.scheduler.tax.service; +import com.worker.domain.entity.CpMatch; import com.worker.domain.entity.CpSetinfo; import com.worker.domain.entity.CpSetinfoId; +import com.worker.domain.entity.CpViolation; +import com.worker.domain.repo.cp.CpMatchRepository; import com.worker.domain.repo.cp.CpSetinfoRepository; +import com.worker.domain.repo.cp.CpViolationRepository; +import com.worker.domain.repo.ep.EpMatchRepository; import com.worker.domain.repo.ep.EpSetinfoRepository; +import com.worker.domain.repo.ep.EpViolationRepository; import com.worker.scheduler.tax.dto.TaxSunapDto; +import com.worker.scheduler.tax.repository.TaxSunapQueryDslRepository; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; -import reactor.core.publisher.Mono; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.List; import java.util.UUID; @Service @RequiredArgsConstructor +@Slf4j public class TaxSunapService { private final Environment env; private final CpSetinfoRepository cpSetinfoRepository; private final EpSetinfoRepository epSetinfoRepository; + private final CpMatchRepository cpMatchRepository; + private final EpMatchRepository epMatchRepository; + private final CpViolationRepository cpViolationRepository; + private final EpViolationRepository epViolationRepository; + private final TaxSunapQueryDslRepository taxSunapQueryDslRepository; - public TaxSunapDto.Request.SendReq taxSunapFindReqInfo() { - TaxSunapDto.Request.SetInfo setInfo = findSetinfo(); + public TaxSunapDto.Request.SetInfo findSetinfo() { + String result = null; + + CpSetinfo cpSetinfo = cpSetinfoRepository.findById( + CpSetinfoId.builder() + .codeName(env.getProperty("esb.info.cp.codeName")) + .groupCode(env.getProperty("esb.info.cp.groupCode")) + .detailCode(env.getProperty("esb.info.cp.detailCode")) + .build() + ).orElse(null); + + CpSetinfo epSetInfo = epSetinfoRepository.findById( + CpSetinfoId.builder() + .codeName(env.getProperty("esb.info.ep.codeName")) + .groupCode(env.getProperty("esb.info.ep.groupCode")) + .detailCode(env.getProperty("esb.info.ep.detailCode")) + .build() + ).orElse(null); + + return TaxSunapDto.Request.SetInfo.builder() + .cpSetinfo(cpSetinfo) + .epSetinfo(epSetInfo) + .build(); + + } + + public List findGojiTarget() { + return taxSunapQueryDslRepository.findGojiTarget(); + } + + public TaxSunapDto.Request.SendReq taxSunapFindReqInfo(String kind, CpSetinfo setInfo, TaxSunapDto.Request.GojiTarget target) { + + + CpViolation cpViolation = epViolationRepository.findByIdVlCode(target.getGpLawgb()); + log.info("taxSunapFindReqInfo 세목1: " + cpViolation.getVlSemok1()); + log.info("taxSunapFindReqInfo 세목2: " + cpViolation.getVlSemok2()); + + + log.info("Http req Body Make start"); TaxSunapDto.Request.SendReq sendReq = TaxSunapDto.Request.SendReq.builder() .header( TaxSunapDto.Request.Header.builder() .ifDate(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))) .ifMsgKEy(createIfMsgKey()) .ifId("ERR_Z000012LGS_1741000NIS_0002") - .source(createIfSource(setInfo)) // 시군구 코드 + + .source(createIfSource(setInfo, kind)) // 시군구 코드 + .target("1741000NIS") .ifType("S") .ifFormat("J") - .retName("") - .retCode("") + //.retName("") + //.retCode("") .build()) .body( TaxSunapDto.Request.Body.builder() .dmndSeCd("2") - .sgbCd("") - .pyrSeCd("") - .pyrNo("") - .dptCd("") - .spacBizCd("") - .fyr("") - .actSeCd("") - .rprsTxmCd("") - .lvyNo("") + .sgbCd(getSgbCd(setInfo)) + //.pyrSeCd("") + //.pyrNo("") + .dptCd(setInfo.getIntValue2().toString()) //부서코드 + .spacBizCd("") //특별회계사업코드 + .fyr(target.getGpAccYear()) //회계연도 + .actSeCd(cpViolation.getVlSemok1()) //회계구분 + .rprsTxmCd(cpViolation.getVlSemok2()) //대표세입과목코드 + .lvyNo(target.getGpLvyNo()) //부과번호 .itmSn("00") .build()) .build(); @@ -60,8 +111,62 @@ public class TaxSunapService { return sendReq; } - public void taxSunapUpdate(TaxSunapDto.Response result) { - + public void taxSunapUpdate(TaxSunapDto.Response.Result result, String kind) { + + CpMatch cpMatch = null; + if(kind.equals("cp")) cpMatch = cpMatchRepository.findByMcMmcode(result.getMngItemSn6()); + else cpMatch = epMatchRepository.findByMcMmcode(result.getMngItemSn6()); + + if(cpMatch != null) { + // 매치자료가 있으면 업데이트 + + + } else { + // 매치자료가 없으면 인서트 + cpMatch = CpMatch.builder() + .mcMmcode(result.getMngItemSn6()) + .mcLvyKey(result.getLvyKey()) + .mcLvyNo(result.getLvyNo()) +// .mcAccYear(result.) + .mcMmWdatetime("") + .mcMmSgpos("") + .mcBdong("") + .mcLvyKey("") + .mcAccYear("") + .mcLvyNo("") + .mcAccountNo("") + .mcAccountNo2("") + .mcAccountNo3("") + .mcAccountNo4("") + .mcAccountNo5("") + .mcAccountNo6("") + .mcAccountNo7("") + .mcAccountNo8("") + .mcAccountNo9("") + .mcAccountNo10("") + .mcAccountNo11("") + .mcBankNm("") + .mcBankNm2("") + .mcBankNm3("") + .mcBankNm4("") + .mcBankNm5("") + .mcBankNm6("") + .mcBankNm7("") + .mcBankNm8("") + .mcBankNm9("") + .mcBankNm10("") + .mcBankNm11("") + .mcErcNo("") + .mcKeumT("") + .mcKeumA("") + .mcKeumB("") + .mcIndt("") + .mcEditdt("") + .build(); + } + + if(kind.equals("cp")) cpMatchRepository.save(cpMatch); + else epMatchRepository.save(cpMatch); } @@ -76,38 +181,18 @@ public class TaxSunapService { return ifMsgKey; } - private String createIfSource(TaxSunapDto.Request.SetInfo setInfo) { + private String createIfSource(CpSetinfo setInfo, String kind) { - if(setInfo.getCpSetinfo() != null) return setInfo.getCpSetinfo().getIntValue2().toString() + "DPV"; - else return setInfo.getEpSetinfo().getIntValue2().toString() + "ECA"; + if(kind.equals("cp")) return setInfo.getIntValue2().toString() + "DPV"; + else return setInfo.getIntValue2().toString() + "ECA"; } - private TaxSunapDto.Request.SetInfo findSetinfo() { - - String result = null; - - CpSetinfo cpSetinfo = cpSetinfoRepository.findById( - CpSetinfoId.builder() - .codeName(env.getProperty("esb.info.cp.codeName")) - .groupCode(env.getProperty("esb.info.cp.groupCode")) - .detailCode(env.getProperty("esb.info.cp.detailCode")) - .build() - ).orElse(null); - - CpSetinfo epSetInfo = epSetinfoRepository.findById( - CpSetinfoId.builder() - .codeName(env.getProperty("esb.info.ep.codeName")) - .groupCode(env.getProperty("esb.info.ep.groupCode")) - .detailCode(env.getProperty("esb.info.ep.detailCode")) - .build() - ).orElse(null); + private String getSgbCd(CpSetinfo setInfo) { + if(setInfo != null) return setInfo.getIntValue2().toString(); + else return setInfo.getIntValue2().toString(); + } - return TaxSunapDto.Request.SetInfo.builder() - .cpSetinfo(cpSetinfo) - .epSetinfo(epSetInfo) - .build(); - } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 74cc4f8..7631828 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -39,6 +39,14 @@ esb: groupCode: INFO detailCode: DEV +tax-else: + protocol: http:// + domain: 211.119.124.122 + port: :8888 + path: + sunap: /mediate/ltis + + logging: level: root: info diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index fac38fb..eeba52b 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -39,6 +39,13 @@ esb: groupCode: INFO detailCode: LOCAL +tax-else: + protocol: http:// + domain: localhost + port: :8888 + path: + sunap: /mediate/ltis + logging: level: root: info diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 746209e..f3a5d73 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -29,6 +29,13 @@ esb: groupCode: DIRECTORY detailCode: IMAGE +tax-else: + protocol: https:// + domain: 211.119.124.122 + port: :8088 + path: + sunap: /mediate/ltis + logging: level: diff --git a/src/main/resources/templates/home.html b/src/main/resources/templates/home.html index 3a5ab28..1bd33ec 100644 --- a/src/main/resources/templates/home.html +++ b/src/main/resources/templates/home.html @@ -12,6 +12,7 @@ +