feat : taxsunap 작업중. request 작업 완료.

todo - response 바인딩 인서트
master
Kurt92 4 months ago
parent 1b291ba337
commit a9daf6d43b

@ -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");
}
}

@ -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;
}

@ -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;
}

@ -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;

@ -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<CpGojiPrt, Integer> {
}

@ -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,String> {
CpMatch findByMcMmcode(String mngItemSn6);
}

@ -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<CpGojiPrt, Integer> {
}

@ -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,String> {
CpMatch findByMcMmcode(String mngItemSn6);
}

@ -5,4 +5,6 @@ import com.worker.domain.entity.CpViolationId;
import org.springframework.data.jpa.repository.JpaRepository;
public interface EpViolationRepository extends JpaRepository<CpViolation, CpViolationId> {
CpViolation findByIdVlCode(String gpLawGb);
}

@ -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();

@ -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();

@ -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;
}

@ -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> 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; // 연계 결과 메시지
}
}
}

@ -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<TaxSunapDto.Request.GojiTarget> 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();
}
}

@ -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<TaxSunapDto.Request.GojiTarget> cpTargets = taxSunapService.findGojiTarget();
List<TaxSunapDto.Request.GojiTarget> 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<TaxSunapDto.Response> 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);
}
}

@ -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<TaxSunapDto.Request.GojiTarget> 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();
}
}

@ -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

@ -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

@ -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:

@ -12,6 +12,7 @@
<option value="update-war">Get War File from Update Server</option>
<option value="sinmungo-polling">Sinmungo Xml DB Polling</option>
<option value="sinmungo-send-answer">Create Xml Target Sinmungo Answer</option>
<option value="tax-sunap">Request Tax Sunap Result</option>
<!-- 필요한 스케쥴러 추가 -->
</select>
<button id="runSchedulerBtn">실행</button>

Loading…
Cancel
Save