From 57f0eb7e053bde5318f70fc26c3b10effb83f05e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Fri, 6 Oct 2023 15:03:10 +0900 Subject: [PATCH] =?UTF-8?q?=EC=8A=B9=EC=9D=B8=EC=8B=9C=20=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=EC=A0=84=EC=86=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bas/laanc/service/BasLaancService.java | 23 ++++ .../api/comn/file/model/LaancPdfModel.java | 1 - .../sms/model/ComnSmsLaancAprovModel.java | 36 ++++++ .../api/comn/sms/service/ComnSmsMapper.java | 28 +++++ .../api/comn/sms/service/ComnSmsService.java | 108 ++++++++++++++++++ .../palnet/biz/jpa/entity/SuredataEntity.java | 3 + .../resources/templates/sms/SmsLaancAprov.txt | 16 +++ 7 files changed, 214 insertions(+), 1 deletion(-) create mode 100644 pav-server/src/main/java/com/palnet/biz/api/comn/sms/model/ComnSmsLaancAprovModel.java create mode 100644 pav-server/src/main/java/com/palnet/biz/api/comn/sms/service/ComnSmsMapper.java create mode 100644 pav-server/src/main/java/com/palnet/biz/api/comn/sms/service/ComnSmsService.java create mode 100644 pav-server/src/main/resources/templates/sms/SmsLaancAprov.txt diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java index 06315285..e83f162f 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java @@ -6,6 +6,8 @@ import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; import com.palnet.biz.api.bas.laanc.model.*; import com.palnet.biz.api.comn.file.model.LaancPdfModel; import com.palnet.biz.api.comn.file.service.ComnFileService; +import com.palnet.biz.api.comn.sms.model.ComnSmsLaancAprovModel; +import com.palnet.biz.api.comn.sms.service.ComnSmsService; import com.palnet.biz.api.external.model.PilotValidRq; import com.palnet.biz.api.external.model.PilotValidRs; import com.palnet.biz.api.external.service.TsService; @@ -64,6 +66,7 @@ public class BasLaancService { private final TsService tsService; private final CtrTrnsLctnService ctrTrnsLctnService; private final ComnFileService comnFileService; + private final ComnSmsService comnSmsService; private final JwtTokenUtil jwtTokenUtil; private final AreaUtils areaUtils; @@ -291,6 +294,26 @@ public class BasLaancService { String sb = FILE_DOWNLOAD_URL + "?fileSno=" + comFileBas.getFileSno(); + // SMS 전송 + try { + + ComnSmsLaancAprovModel comnSmsLaancAprovModel = new ComnSmsLaancAprovModel(); + comnSmsLaancAprovModel.setPilotName(cstmrInfo.getMemberName()); + comnSmsLaancAprovModel.setCallphone(cstmrInfo.getHpno()); + comnSmsLaancAprovModel.setSchFltStDt(InstantUtils.toDatetimeStringByFormat(rq.getSchFltStDt(), "yyyy년 MM월 dd일 HH시 mm분")); + comnSmsLaancAprovModel.setSchFltEndDt(InstantUtils.toDatetimeStringByFormat(rq.getSchFltEndDt(), "yyyy년 MM월 dd일 HH시 mm분")); + comnSmsLaancAprovModel.setFltPurpose(rq.getFltPurpose().getValue()); + comnSmsLaancAprovModel.setAddress(address); + + if (rq.getAreaList() != null && !rq.getAreaList().isEmpty()) { + comnSmsLaancAprovModel.setElev(rq.getAreaList().get(0).getFltElev()); + } + + comnSmsService.sendLaancAprovSms(comnSmsLaancAprovModel); + + } catch (Exception e){ + log.error("ERROR: ", e); + } BasLaancLastRs rs = BasLaancLastRs.builder() .pdfUrl(sb) diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/file/model/LaancPdfModel.java b/pav-server/src/main/java/com/palnet/biz/api/comn/file/model/LaancPdfModel.java index d84e3813..8cacf086 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/comn/file/model/LaancPdfModel.java +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/file/model/LaancPdfModel.java @@ -9,7 +9,6 @@ import lombok.*; @EqualsAndHashCode(callSuper = true) public class LaancPdfModel extends PdfBaseModel { - // TODO : 아직 파라미터가 정해지지 않음 private String pilotName; // 조종사 이름 private String birthDate; // 조종사 생년월일 private String schFltStDt; // 비행시작일시 diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/sms/model/ComnSmsLaancAprovModel.java b/pav-server/src/main/java/com/palnet/biz/api/comn/sms/model/ComnSmsLaancAprovModel.java new file mode 100644 index 00000000..81dbdd7d --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/sms/model/ComnSmsLaancAprovModel.java @@ -0,0 +1,36 @@ +package com.palnet.biz.api.comn.sms.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * packageName : com.palnet.biz.api.comn.sms.model + * fileName : ComnSmsLaancAprov + * author : dhji + * date : 2023-10-06(006) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-06(006) dhji 최초 생성 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class ComnSmsLaancAprovModel { + private String callphone; // 수신번호 + + private String pilotName; // 조종사 이름 +// private String birthDate; // 조종사 생년월일 + private String schFltStDt; // 비행시작일시 + private String schFltEndDt; // 비행종료일시 + private String fltPurpose; // 비행목적 +// private String arcrftType; // 등록 종류 +// private String idntfNum; // 신고번호 + private String address; // 주소 + private String elev; // 고도 +// private String createDt; // 신청일자 +} diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/sms/service/ComnSmsMapper.java b/pav-server/src/main/java/com/palnet/biz/api/comn/sms/service/ComnSmsMapper.java new file mode 100644 index 00000000..a56f55e1 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/sms/service/ComnSmsMapper.java @@ -0,0 +1,28 @@ +package com.palnet.biz.api.comn.sms.service; + +import com.palnet.biz.api.bas.laanc.service.BasLaancMapper; +import com.palnet.biz.api.comn.sms.model.ComnSmsLaancAprovModel; +import com.palnet.biz.jpa.entity.SuredataEntity; +import org.mapstruct.Mapper; +import org.mapstruct.NullValuePropertyMappingStrategy; +import org.mapstruct.ReportingPolicy; +import org.mapstruct.factory.Mappers; + +/** + * packageName : com.palnet.biz.api.comn.sms.service + * fileName : ComnSmsMapper + * author : dhji + * date : 2023-10-06(006) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-06(006) dhji 최초 생성 + */ +@Mapper(unmappedSourcePolicy = ReportingPolicy.IGNORE, unmappedTargetPolicy = ReportingPolicy.IGNORE, nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE) +public interface ComnSmsMapper { + ComnSmsMapper MAPPER = Mappers.getMapper(ComnSmsMapper.class); + + + SuredataEntity toEntity(ComnSmsLaancAprovModel model); +} diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/sms/service/ComnSmsService.java b/pav-server/src/main/java/com/palnet/biz/api/comn/sms/service/ComnSmsService.java new file mode 100644 index 00000000..198f635d --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/sms/service/ComnSmsService.java @@ -0,0 +1,108 @@ +package com.palnet.biz.api.comn.sms.service; + +import com.palnet.biz.api.comn.sms.model.ComnSmsLaancAprovModel; +import com.palnet.biz.jpa.entity.SuredataEntity; +import com.palnet.biz.jpa.repository.pty.SuredataRepository; +import com.palnet.comn.utils.InstantUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.io.ClassPathResource; +import org.springframework.stereotype.Service; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.time.Instant; + +/** + * packageName : com.palnet.biz.api.comn.sms.service + * fileName : ComnSmsService + * author : dhji + * date : 2023-10-06(006) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-06(006) dhji 최초 생성 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class ComnSmsService { + + private final SuredataRepository suredataRepository; + + public void sendLaancAprovSms(ComnSmsLaancAprovModel model) { + log.info("sendSms : {}", model); + ClassPathResource resource = new ClassPathResource("templates/sms/SmsLaancAprov.txt"); + + String template = ""; + try(BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8))){ + StringBuilder stringBuilder = new StringBuilder(); + String line; + boolean firstLine = true; // 첫 번째 줄은 개행 문자를 추가하지 않음 + while ((line = br.readLine()) != null) { + if (firstLine) { + firstLine = false; + } else { + stringBuilder.append("\n"); // 개행 문자 추가 + } + stringBuilder.append(line); + } + template = stringBuilder.toString(); + } catch (IOException e) { + throw new RuntimeException(e); + } + + template = template.replace("${pilotName}", model.getPilotName()); + template = template.replace("${schFltStDt}", model.getSchFltStDt()); + template = template.replace("${schFltEndDt}", model.getSchFltEndDt()); + template = template.replace("${fltPurpose}", model.getFltPurpose()); + template = template.replace("${address}", model.getAddress()); + template = template.replace("${elev}", model.getElev()); + + SuredataEntity entity = getInitialEntity(); + entity.setSubject("[비행승인 완료]"); + entity.setMsg(template); + entity.setCallname(model.getPilotName()); + entity.setCallphone(model.getCallphone()); + entity.setKind("M"); + + log.info("entity : {}", entity); + log.info("========================================"); + log.info("message : {}", template); + log.info("========================================"); + log.info("message : {}", entity.getMsg()); + + suredataRepository.save(entity); + } + + private String getMessage(String templateStr, ComnSmsLaancAprovModel model) { + String message = templateStr; + message = message.replace("${pilotName}", model.getPilotName()); + message = message.replace("${schFltStDt}", model.getSchFltStDt()); + message = message.replace("${schFltEndDt}", model.getSchFltEndDt()); + message = message.replace("${fltPurpose}", model.getFltPurpose()); + message = message.replace("${address}", model.getAddress()); + message = message.replace("${elev}", model.getElev()); + return message; + } + + public SuredataEntity getInitialEntity() { + String nowStr = InstantUtils.toDatetimeStringByFormat(Instant.now(), "yyyyMMddHHmmss"); + SuredataEntity entity = new SuredataEntity(); + entity.setUsercode("palnet"); + entity.setIntime(nowStr); + entity.setReqname("한국공항공사"); + entity.setReqphone("0262003912"); // 1661-2626 +// entity.setCallname("지대한"); +// entity.setCallphone("010-0000-0000"); +// entity.setSubject("주제"); +// entity.setMsg(""); + entity.setReqtime("00000000000000"); + entity.setResult("0"); + entity.setKind("S"); + return entity; + } +} diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/entity/SuredataEntity.java b/pav-server/src/main/java/com/palnet/biz/jpa/entity/SuredataEntity.java index 6ea31df6..6a8fe0b7 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/entity/SuredataEntity.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/entity/SuredataEntity.java @@ -22,6 +22,9 @@ public class SuredataEntity { @Column(name = "USERCODE") private String usercode; + @Column(name = "INTIME") + private String intime; // date_format(now(), '%y%m%d%H%i%s') + @Column(name = "DEPTCODE") private String deptcode; diff --git a/pav-server/src/main/resources/templates/sms/SmsLaancAprov.txt b/pav-server/src/main/resources/templates/sms/SmsLaancAprov.txt new file mode 100644 index 00000000..7f960678 --- /dev/null +++ b/pav-server/src/main/resources/templates/sms/SmsLaancAprov.txt @@ -0,0 +1,16 @@ +[비행승인 완료] + +${pilotName}님비행승인이 완료되었습니다. + +가. 비행개요 + 1. 비행일시 : ${schFltStDt} ~ ${schFltEndDt}까지 + 2. 비행목적 : ${fltPurpose} + 3. 비행경로 / 고도 : ${address} / ${elev}m + +나. 비행 준수사항 + 1. 승인된 시간, 장소 및 고도를 반드시 준수해 주십시오. + 2. 군작전, 경호 관련 안전위해요소과위규사항(지정된 장소, 고도, 시간 미준수)발생 시 비행이 취소 될 수 있습니다. + 3. 비행에 관련된 모든 책임은 해당 업체(개인)에 있으니 유의 하시기 바랍니다. + 4. 비행전/ 군 수방사로 반드시 연락 후 비행하시기 바랍니다. + +* 조종자 준수사항 미 준수시 항공안전법 제 161조, 같은 법 제 166조 등 관련 법령에 따라 처벌받을 수 있습니다.