diff --git a/src/main/java/com/palnet/biz/jpa/entity/FltPlanCtrCntrlRel.java b/src/main/java/com/palnet/biz/jpa/entity/FltPlanCtrCntrlRel.java index a0f4bd2..82e7cbd 100644 --- a/src/main/java/com/palnet/biz/jpa/entity/FltPlanCtrCntrlRel.java +++ b/src/main/java/com/palnet/biz/jpa/entity/FltPlanCtrCntrlRel.java @@ -1,9 +1,14 @@ package com.palnet.biz.jpa.entity; +import lombok.Getter; +import lombok.Setter; + import javax.persistence.*; @Entity @Table(name = "FLT_PLAN_CTR_CNTRL_REL") +@Getter +@Setter public class FltPlanCtrCntrlRel { @Column(name = "CNTRL_ID") diff --git a/src/main/java/com/palnet/biz/jpa/repository/com/ComIdntBasRepository.java b/src/main/java/com/palnet/biz/jpa/repository/com/ComIdntBasRepository.java index eb6dac9..da7c207 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/com/ComIdntBasRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/com/ComIdntBasRepository.java @@ -1,6 +1,7 @@ package com.palnet.biz.jpa.repository.com; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; diff --git a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java index 69bc74e..e7b9a9e 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java @@ -20,17 +20,7 @@ public interface FltPlanBasRepository extends JpaRepository + "or ((SCH_FLT_ST_DT <= :schFltStDt and SCH_FLT_END_DT >= :schFltStDt) and SCH_FLT_END_DT <= :schFltEndDt)" + "or (SCH_FLT_ST_DT >= :schFltStDt and SCH_FLT_END_DT <= :schFltEndDt)) and DEL_YN='N'") List findByStartEndDate(@Param("schFltStDt") Date schFltStDt,@Param("schFltEndDt") Date schFltEndDt); - -// @Query("select f from FltPlanBas f " + -// "where f.schFltStDt >= :schFltStDt " + -// "and f.schFltEndDt <= :schFltEndDt "+ -// "and f.delYn = 'N'") -// List findByDate(@Param("schFltStDt") Date schFltStDt, @Param("schFltEndDt") Date schFltEndDt); -// - - - Optional findByPlanSnoAndDelYnNot(Integer planSno, String delYn); @Query("select f from FltPlanBas f " + "where f.planSno = :planSno " + @@ -40,12 +30,13 @@ public interface FltPlanBasRepository extends JpaRepository Optional findByGroupFlightPlan(@Param("planSno") Integer planSno, @Param("aprvlYn") String aprvlYn, @Param("fltNowDt") Date fltNowDt); - - + @Transactional @Modifying @Query("update FltPlanBas f set f.aprvlYn = :aprvlYn where f.planSno in :planSno") int updateAprvlYnByPlanSnoIn(@Param("planSno") List planSnos, @Param("aprvlYn") String aprvlYn); - + Optional findByPlanSnoAndDelYnNot(Integer planSno, String delYn); + + } diff --git a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java index 8946652..c2c0131 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java @@ -4,26 +4,20 @@ import com.palnet.biz.api.bas.flight.model.*; import com.palnet.biz.jpa.entity.*; import com.palnet.comn.utils.DateUtils; import com.querydsl.core.BooleanBuilder; -import com.querydsl.core.Tuple; import com.querydsl.core.group.GroupBy; -import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.ExpressionUtils; -import com.querydsl.core.types.Predicate; import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.CaseBuilder; import com.querydsl.core.types.dsl.DateTemplate; import com.querydsl.core.types.dsl.Expressions; import com.querydsl.jpa.JPAExpressions; +import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Repository; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; import java.util.Date; import java.util.List; @@ -448,4 +442,30 @@ public class FltPlanQueryRepository { return querys; } + + public List findByFlightPlanArcrft(String idntfNum, String serverReceiveDate) { + QFltPlanBas fltPlanBas = QFltPlanBas.fltPlanBas; + QFltPlanArcrft fltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; + + BooleanBuilder parameter = new BooleanBuilder(); + + DateTemplate flightStartDate = Expressions.dateTemplate( + Date.class,"DATE({0})", fltPlanBas.schFltStDt); + + DateTemplate flightEndDate = Expressions.dateTemplate( + Date.class,"DATE({0})", fltPlanBas.schFltEndDt); + + parameter.and(flightStartDate.loe(DateUtils.stringToDatetime(serverReceiveDate))) + .and(flightEndDate.goe(DateUtils.stringToDatetime(serverReceiveDate))) + .and(fltPlanArcrft.idntfNum.eq(idntfNum)); + + List result = query.select(fltPlanBas) + .from(fltPlanBas) + .leftJoin(fltPlanArcrft) + .on(fltPlanBas.planSno.eq(fltPlanArcrft.planSno)) + .where(parameter) + .fetch(); + + return result; + } } \ No newline at end of file diff --git a/src/main/java/com/palnet/biz/message/consumer/MessageConsumer.java b/src/main/java/com/palnet/biz/message/consumer/MessageConsumer.java index 5893c8c..965d694 100644 --- a/src/main/java/com/palnet/biz/message/consumer/MessageConsumer.java +++ b/src/main/java/com/palnet/biz/message/consumer/MessageConsumer.java @@ -24,7 +24,7 @@ public class MessageConsumer { } @RabbitHandler - @RabbitListener(queues = {"app.drone.queue"}, concurrency = "8") + @RabbitListener(queues = {"app.drone.queue"}) public void receivedDroneMessage(final String message) { log.info("application message : {}", message); @@ -36,12 +36,7 @@ public class MessageConsumer { e.printStackTrace(); } -// GPModel mapper = messageService.mapper(model); - messageService.insert(model); // GPS 정보 DB 동기화 처리 - - /* Websocket Model 메세지 서버로 위임 */ -// messageService.sendToMessage(mapper); } } diff --git a/src/main/java/com/palnet/biz/message/service/impl/MessageServiceImpl.java b/src/main/java/com/palnet/biz/message/service/impl/MessageServiceImpl.java index c0c32f1..49d86fa 100644 --- a/src/main/java/com/palnet/biz/message/service/impl/MessageServiceImpl.java +++ b/src/main/java/com/palnet/biz/message/service/impl/MessageServiceImpl.java @@ -2,23 +2,23 @@ package com.palnet.biz.message.service.impl; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; + +import com.palnet.biz.api.bas.flight.model.BasFlightPlanArcrftModel; import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel; -import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlPlanContainsRq; -import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlPlanContainsRs; -import com.palnet.biz.api.ctr.cntrl.service.CtrCntrlService; -import com.palnet.biz.jpa.entity.CtrCntrlBas; -import com.palnet.biz.jpa.entity.CtrCntrlHstry; -import com.palnet.biz.jpa.entity.CtrCntrlWarnLog; +import com.palnet.biz.jpa.entity.*; +import com.palnet.biz.jpa.repository.com.ComIdntBasRepository; import com.palnet.biz.jpa.repository.ctr.CtrCntrlBasRepository; import com.palnet.biz.jpa.repository.ctr.CtrCntrlHstryRepository; -import com.palnet.biz.jpa.repository.ctr.CtrCntrlWarnLogRepository; +import com.palnet.biz.jpa.repository.flt.FltPlanArcrftRepository; +import com.palnet.biz.jpa.repository.flt.FltPlanBasRepository; +import com.palnet.biz.jpa.repository.flt.FltPlanCtrCntrlRelRepository; +import com.palnet.biz.jpa.repository.flt.FltPlanQueryRepository; import com.palnet.biz.jpa.repository.pty.PtyDronQueryRepository; import com.palnet.biz.jpa.service.ctr.CtrCntrlJpaService; import com.palnet.biz.api.comn.model.ControlGpsDataContext; import com.palnet.biz.message.service.MessageService; import com.palnet.comn.model.GPDatabaseModel; import com.palnet.comn.model.GPModel; -import com.palnet.comn.utils.AreaUtils; import com.palnet.comn.utils.DateUtils; import com.palnet.comn.utils.JsonUtils; import lombok.extern.slf4j.Slf4j; @@ -38,43 +38,48 @@ import java.util.UUID; @Slf4j public class MessageServiceImpl implements MessageService { - private final CtrCntrlService ctrCntrlService; + private final CtrCntrlJpaService ctrCntrlJpaService; private final CtrCntrlBasRepository ctrCntrlBasRepository; private final CtrCntrlHstryRepository ctrCntrlHstryRepository; - private final CtrCntrlJpaService ctrCntrlJpaService; private final PtyDronQueryRepository ptyDronQueryRepository; + private final ComIdntBasRepository idntBasRepository; + private final FltPlanQueryRepository fltPlanQueryRepository; + private final FltPlanCtrCntrlRelRepository ctrCntrlRelRepository; private final ControlGpsDataContext shareContext; private final RabbitTemplate rabbitTemplate; private final Environment env; private final ObjectMapper objectMapper; - private final CtrCntrlWarnLogRepository warnLogRepository; - private final AreaUtils areaUtils; - public MessageServiceImpl(CtrCntrlJpaService ctrCntrlJpaService, CtrCntrlBasRepository ctrCntrlBasRepository, CtrCntrlHstryRepository ctrCntrlHstryRepository, PtyDronQueryRepository ptyDronQueryRepository, + ComIdntBasRepository idntBasRepository, + FltPlanQueryRepository fltPlanQueryRepository, + FltPlanCtrCntrlRelRepository ctrCntrlRelRepository, ControlGpsDataContext shareContext, RabbitTemplate rabbitTemplate, - Environment env, - CtrCntrlService ctrCntrlService, - CtrCntrlWarnLogRepository warnLogRepository, - AreaUtils areaUtils + Environment env ) { this.ctrCntrlJpaService = ctrCntrlJpaService; this.ctrCntrlBasRepository = ctrCntrlBasRepository; this.ctrCntrlHstryRepository = ctrCntrlHstryRepository; this.ptyDronQueryRepository = ptyDronQueryRepository; + this.idntBasRepository = idntBasRepository; + this.fltPlanQueryRepository = fltPlanQueryRepository; + this.ctrCntrlRelRepository = ctrCntrlRelRepository; this.shareContext = shareContext; this.rabbitTemplate = rabbitTemplate; this.env = env; this.objectMapper = JsonUtils.getObjectMapper(); - this.ctrCntrlService = ctrCntrlService; - this.warnLogRepository = warnLogRepository; - this.areaUtils = areaUtils; } + /** + * TODO Control-Id + * + * @param model + * @return + */ @Override @Transactional(readOnly = true) public GPModel mapper(GPModel model) { @@ -118,18 +123,47 @@ public class MessageServiceImpl implements MessageService { @Override @Transactional - @Async +// @Async public void insert(GPModel model) { GPDatabaseModel dbModel = new GPDatabaseModel(); BeanUtils.copyProperties(model, dbModel); if(model.getTypeCd().equals("01")) { - //마스터 정보에저장 - //식별번호로 제작번호 알아오기 String prodNumber = ptyDronQueryRepository.findIdntfNumByProdNumber(model.getObjectId()); dbModel.setProdNumber(prodNumber); - ctrCntrlJpaService.insertCtrCntrlBas(dbModel); + // 비행 이력 생성 + CtrCntrlBas ctrCntrlBas = ctrCntrlJpaService.insertCtrCntrlBas(dbModel); + + // 비행 이력, 비행 계획서 mapping + if (model.getObjectId().indexOf("PALDRONE") > -1) { + FltPlanCtrCntrlRel fltPlanCtrCntrlRel = new FltPlanCtrCntrlRel(); + + // 1. 식별번호의 소유자 정보 저장. + ComIdntfBas idntfBas = idntBasRepository.findById(model.getObjectId()).orElse(null); + + if (idntfBas != null) { + fltPlanCtrCntrlRel.setCntrlId(ctrCntrlBas.getCntrlId()); + fltPlanCtrCntrlRel.setIdntfNum(ctrCntrlBas.getIdntfNum()); + fltPlanCtrCntrlRel.setIdntfCstmrSno(idntfBas.getCstmrSno()); + } + + // 2. 해당 되는 비행계획서 정보 저장. + List planArcrft = + fltPlanQueryRepository.findByFlightPlanArcrft(ctrCntrlBas.getIdntfNum(), dbModel.getServerRcvDt()); + + if (!planArcrft.isEmpty()) { + for (FltPlanBas plan : planArcrft) { + fltPlanCtrCntrlRel.setPlanSno(plan.getPlanSno()); + fltPlanCtrCntrlRel.setGroupId(plan.getGroupId()); + } + } + + // 3. mapping 정보 주입. + if (!fltPlanCtrCntrlRel.getCntrlId().isEmpty()) { + ctrCntrlRelRepository.save(fltPlanCtrCntrlRel); + } + } } // Drone인 경우에만 history 생성