feat: NICE CI 소켓 통신 추가
parent
6771f69594
commit
dca46fa392
File diff suppressed because one or more lines are too long
@ -0,0 +1,37 @@
|
|||||||
|
package cokr.xit.ens.modules.nice.presentation;
|
||||||
|
|
||||||
|
import org.springframework.http.*;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import cokr.xit.ens.modules.nice.service.*;
|
||||||
|
import io.swagger.v3.oas.annotations.*;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.*;
|
||||||
|
import lombok.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* description :
|
||||||
|
* packageName : cokr.xit.ens.modules.nice.presentation
|
||||||
|
* fileName : NiceCiController
|
||||||
|
* author : limju
|
||||||
|
* date : 2024 9월 27
|
||||||
|
* ======================================================================
|
||||||
|
* 변경일 변경자 변경 내용
|
||||||
|
* ----------------------------------------------------------------------
|
||||||
|
* 2024 9월 27 limju 최초 생성
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@Tag(name = "NiceCiController", description = "NICE CI 인증톡")
|
||||||
|
@RestController
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RequestMapping(value = "/nice/talk")
|
||||||
|
public class NiceCiController {
|
||||||
|
private final NiceCiService niceCiService;
|
||||||
|
|
||||||
|
@Operation(summary = "(대량)전송요청")
|
||||||
|
@PostMapping(value = "/send/bulk", produces = MediaType.APPLICATION_JSON_VALUE)
|
||||||
|
public ResponseEntity<?> sendBulk() {
|
||||||
|
return new ResponseEntity<>(niceCiService.requestSendBulk(), HttpStatus.OK);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,104 @@
|
|||||||
|
package cokr.xit.ens.modules.nice.service;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.*;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.*;
|
||||||
|
|
||||||
|
import cokr.xit.ens.core.aop.*;
|
||||||
|
import cokr.xit.ens.modules.nice.cmm.*;
|
||||||
|
import cokr.xit.ens.modules.nice.model.*;
|
||||||
|
import cokr.xit.ens.modules.nice.service.support.*;
|
||||||
|
import lombok.*;
|
||||||
|
import lombok.extern.slf4j.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* description :
|
||||||
|
* packageName : cokr.xit.ens.modules.nice.service
|
||||||
|
* fileName : NiceCiService
|
||||||
|
* author : limju
|
||||||
|
* date : 2024 9월 27
|
||||||
|
* ======================================================================
|
||||||
|
* 변경일 변경자 변경 내용
|
||||||
|
* ----------------------------------------------------------------------
|
||||||
|
* 2024 9월 27 limju 최초 생성
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class NiceCiService {
|
||||||
|
@Value("${contract.niceCi.orgId}")
|
||||||
|
private String ORG_ID;
|
||||||
|
|
||||||
|
@Value("${contract.niceCi.clientId}")
|
||||||
|
private String CLIENT_ID;
|
||||||
|
|
||||||
|
private final NiceCiApiService niceCiApiService;
|
||||||
|
|
||||||
|
final String msg = "민자도로 관리지원센터에서 김해찬님께 발송한 미납통행료 고지서가 도착했습니다.\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "민자도로 미납통행료 고지서\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "□ 차량번호 : 19너0914\n"
|
||||||
|
+ "□ 미납발생 노선 : 서울-문산\n"
|
||||||
|
+ "□ 미납발생 기간 : 2021년 04월 12일~2023년 08월 30일\n"
|
||||||
|
+ "□ 납부금액 : 819,500원(42건)\n"
|
||||||
|
+ "□ 납부기한 : 2024년10월01일\n"
|
||||||
|
+ "□ 납부방법 : \n"
|
||||||
|
+ "① 하단의 (납부하기) 클릭\n"
|
||||||
|
+ "② 가상계좌 납부\n"
|
||||||
|
+ "-(가상계좌) : 농협은행 792000-36-986609\n"
|
||||||
|
+ "국민은행 731190-72-253083\n"
|
||||||
|
+ "우리은행 283752-73-918780\n"
|
||||||
|
+ "신한은행 562146-27-470101\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "※ 알림톡 수신 시 종이고지서는 발송되지 않습니다.\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "문의처 : 044-211-3377";
|
||||||
|
|
||||||
|
public EnsResponseVO<?> requestSendBulk() {
|
||||||
|
NiceCiDTO.Request ciRequest = new NiceCiDTO.Request();
|
||||||
|
//ciRequest.setTrCode("0000006150");
|
||||||
|
// // 공통부
|
||||||
|
//
|
||||||
|
// // 개별요청부
|
||||||
|
// nr.setQueryReason(StringUtils.EMPTY);
|
||||||
|
// nr.setQueryReqCnt(46);
|
||||||
|
// nr.setSmsSndReqCode("1");
|
||||||
|
String tmp = NiceCiUtils.rightPadKr(msg, 2000, StringUtils.SPACE);
|
||||||
|
System.out.println(
|
||||||
|
String.format("[%s] kr length - %d, utf-8 length - %d", tmp, NiceCiUtils.lengthKr(tmp), tmp.length()));
|
||||||
|
ciRequest.setSndMessage(msg);
|
||||||
|
// nr.setSndPhoneNo("010");
|
||||||
|
// nr.setContactSearchCode("1");
|
||||||
|
|
||||||
|
// 공통부
|
||||||
|
NiceCiCommon nc = new NiceCiCommon();
|
||||||
|
// nc.setGrpCode("grpCode");
|
||||||
|
//nc.setTrType("Type");
|
||||||
|
nc.setTrClassification("31895"); // 거래구분
|
||||||
|
nc.setOrgId(ORG_ID); // 참가기관Id - property 에서
|
||||||
|
nc.setOrgMngNo("0000000103"); // 기관관리번호
|
||||||
|
nc.setOrgSndDt("20240919");
|
||||||
|
|
||||||
|
NiceCiDTO.QueryRequest qr = new NiceCiDTO.QueryRequest();
|
||||||
|
NiceCiDTO.ButtonRequest br = new NiceCiDTO.ButtonRequest();
|
||||||
|
|
||||||
|
ciRequest.setNiceCommon(nc);
|
||||||
|
ciRequest.getQueryRequests().add(qr);
|
||||||
|
ciRequest.getButtonRequests().add(br);
|
||||||
|
// nc.setNiceMngNo(StringUtils.EMPTY);
|
||||||
|
// nc.setNiceSndDt(StringUtils.EMPTY);
|
||||||
|
String ciTxt = ciRequest.ofString();
|
||||||
|
String ft = String.format("%s%s", StringUtils.leftPad(String.valueOf(NiceCiUtils.lengthKr(ciTxt)), 10, "0"),
|
||||||
|
ciTxt);
|
||||||
|
System.out.println(
|
||||||
|
String.format("[%s] kr length - %d, utf-8 length - %d", ft, NiceCiUtils.lengthKr(ft), ft.length()));
|
||||||
|
|
||||||
|
// String rtnMsg = niceCiApiService.requestSendBulk(ciRequest);
|
||||||
|
// NiceCiDTO.Response resDTO = NiceCiDTO.Response.parse(rtnMsg);
|
||||||
|
return niceCiApiService.requestSendBulk(ciRequest);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,127 @@
|
|||||||
|
package cokr.xit.ens.modules.nice.service.support;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.*;
|
||||||
|
import java.nio.charset.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.*;
|
||||||
|
|
||||||
|
import javax.validation.*;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.*;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.*;
|
||||||
|
|
||||||
|
import cokr.xit.ens.core.aop.*;
|
||||||
|
import cokr.xit.ens.core.exception.*;
|
||||||
|
import cokr.xit.ens.core.exception.code.*;
|
||||||
|
import cokr.xit.ens.modules.nice.cmm.*;
|
||||||
|
import cokr.xit.ens.modules.nice.model.*;
|
||||||
|
import lombok.*;
|
||||||
|
import lombok.extern.slf4j.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* description :
|
||||||
|
* packageName : cokr.xit.ens.modules.nice.service.support
|
||||||
|
* fileName : NiceCiService
|
||||||
|
* author : limju
|
||||||
|
* date : 2024 9월 27
|
||||||
|
* ======================================================================
|
||||||
|
* 변경일 변경자 변경 내용
|
||||||
|
* ----------------------------------------------------------------------
|
||||||
|
* 2024 9월 27 limju 최초 생성
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class NiceCiApiService {
|
||||||
|
|
||||||
|
@Value("${contract.niceCi.host}")
|
||||||
|
private String HOST;
|
||||||
|
|
||||||
|
@Value("${contract.niceCi.port}")
|
||||||
|
private int PORT;
|
||||||
|
|
||||||
|
@Value("${contract.niceCi.timeout}")
|
||||||
|
private int TIMEOUT;
|
||||||
|
|
||||||
|
private static final Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
|
||||||
|
|
||||||
|
public EnsResponseVO<?> requestSendBulk(final NiceCiDTO.Request reqDTO) {
|
||||||
|
List<String> errors = new ArrayList<>();
|
||||||
|
final Set<ConstraintViolation<NiceCiDTO.Request>> list = validator.validate(reqDTO);
|
||||||
|
if (!list.isEmpty()) {
|
||||||
|
errors.addAll(list.stream()
|
||||||
|
.map(row -> String.format("%s=%s", row.getPropertyPath(), row.getMessageTemplate()))
|
||||||
|
.collect(Collectors.toList())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!errors.isEmpty()){
|
||||||
|
return EnsResponseVO.errBuilder()
|
||||||
|
.errCode(EnsErrCd.INVALID_DATA)
|
||||||
|
.errMsg(errors.toString())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
String ciTxt = reqDTO.ofString();
|
||||||
|
String ft = String.format("%s%s", StringUtils.leftPad(String.valueOf(NiceCiUtils.lengthKr(ciTxt)), 10, "0"),
|
||||||
|
ciTxt);
|
||||||
|
log.info("[{}] kr length - {}, utf-8 length - {}", ft, NiceCiUtils.lengthKr(ft), ft.length());
|
||||||
|
|
||||||
|
final String rtnMsg;
|
||||||
|
try {
|
||||||
|
rtnMsg = sendNiceCiSocket(ft);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return EnsResponseVO.errBuilder()
|
||||||
|
.errCode(EnsErrCd.API_COMM_ERROR)
|
||||||
|
.errMsg(e.getMessage())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
NiceCiDTO.Response resDTO = NiceCiDTO.Response.parse(rtnMsg);
|
||||||
|
return EnsResponseVO.okBuilder()
|
||||||
|
.resultInfo(resDTO)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String sendNiceCiSocket(final String binTxt) {
|
||||||
|
String rtnMsg = "";
|
||||||
|
|
||||||
|
try (Socket socket = new Socket(HOST, PORT); // 서버에 연결
|
||||||
|
BufferedWriter out = new BufferedWriter(
|
||||||
|
new OutputStreamWriter(socket.getOutputStream(), Charset.forName("EUC-KR")));
|
||||||
|
//new OutputStreamWriter(socket.getOutputStream()));
|
||||||
|
BufferedReader in = new BufferedReader(
|
||||||
|
new InputStreamReader(socket.getInputStream(), Charset.forName("EUC-KR")))) {
|
||||||
|
|
||||||
|
socket.setSoTimeout(TIMEOUT); // 읽기 타임아웃 설정
|
||||||
|
|
||||||
|
out.write(binTxt);
|
||||||
|
// FIXME: 테스트 소켓서버 통신을 위해 임시로 추가 : 테스트 완료후 제거
|
||||||
|
out.write("\nEXIT");
|
||||||
|
|
||||||
|
out.newLine();
|
||||||
|
out.flush();
|
||||||
|
|
||||||
|
String message;
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
while((message = in.readLine()) != null) {
|
||||||
|
sb.append(message);
|
||||||
|
};
|
||||||
|
rtnMsg = sb.toString();
|
||||||
|
System.out.println("=============>>>서버 응답(EUC-KR로 읽어온 값)<<<====================================");
|
||||||
|
System.out.println(rtnMsg);
|
||||||
|
System.out.println("=============>>>서버 응답(EUC-KR로 읽어온 값)<<<====================================");
|
||||||
|
} catch (SocketTimeoutException e) {
|
||||||
|
// 타임아웃 발생 시 처리
|
||||||
|
log.error("NICE CI Socket 서버 응답 시간 초과: " + e.getMessage());
|
||||||
|
throw BizRuntimeException.create("NICE CI Socket 서버 응답 시간 초과로 인해 통신이 종료되었습니다.");
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw BizRuntimeException.create(e.getMessage());
|
||||||
|
}
|
||||||
|
return rtnMsg;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue