Browse Source

비행이력, 비행계획서 관계 mapping 작업

Test
노승철 2 years ago
parent
commit
398afd694b
  1. 5
      src/main/java/com/palnet/biz/jpa/entity/FltPlanCtrCntrlRel.java
  2. 1
      src/main/java/com/palnet/biz/jpa/repository/com/ComIdntBasRepository.java
  3. 17
      src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java
  4. 34
      src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java
  5. 7
      src/main/java/com/palnet/biz/message/consumer/MessageConsumer.java
  6. 82
      src/main/java/com/palnet/biz/message/service/impl/MessageServiceImpl.java

5
src/main/java/com/palnet/biz/jpa/entity/FltPlanCtrCntrlRel.java

@ -1,9 +1,14 @@
package com.palnet.biz.jpa.entity; package com.palnet.biz.jpa.entity;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*; import javax.persistence.*;
@Entity @Entity
@Table(name = "FLT_PLAN_CTR_CNTRL_REL") @Table(name = "FLT_PLAN_CTR_CNTRL_REL")
@Getter
@Setter
public class FltPlanCtrCntrlRel { public class FltPlanCtrCntrlRel {
@Column(name = "CNTRL_ID") @Column(name = "CNTRL_ID")

1
src/main/java/com/palnet/biz/jpa/repository/com/ComIdntBasRepository.java

@ -1,6 +1,7 @@
package com.palnet.biz.jpa.repository.com; package com.palnet.biz.jpa.repository.com;
import java.util.List; import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Modifying;

17
src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java

@ -20,17 +20,7 @@ public interface FltPlanBasRepository extends JpaRepository<FltPlanBas, Integer>
+ "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 >= :schFltStDt) and SCH_FLT_END_DT <= :schFltEndDt)"
+ "or (SCH_FLT_ST_DT >= :schFltStDt and SCH_FLT_END_DT <= :schFltEndDt)) and DEL_YN='N'") + "or (SCH_FLT_ST_DT >= :schFltStDt and SCH_FLT_END_DT <= :schFltEndDt)) and DEL_YN='N'")
List<FltPlanBas> findByStartEndDate(@Param("schFltStDt") Date schFltStDt,@Param("schFltEndDt") Date schFltEndDt); List<FltPlanBas> 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<FltPlanBas> findByDate(@Param("schFltStDt") Date schFltStDt, @Param("schFltEndDt") Date schFltEndDt);
//
Optional<FltPlanBas> findByPlanSnoAndDelYnNot(Integer planSno, String delYn);
@Query("select f from FltPlanBas f " + @Query("select f from FltPlanBas f " +
"where f.planSno = :planSno " + "where f.planSno = :planSno " +
@ -40,12 +30,13 @@ public interface FltPlanBasRepository extends JpaRepository<FltPlanBas, Integer>
Optional<FltPlanBas> findByGroupFlightPlan(@Param("planSno") Integer planSno, Optional<FltPlanBas> findByGroupFlightPlan(@Param("planSno") Integer planSno,
@Param("aprvlYn") String aprvlYn, @Param("aprvlYn") String aprvlYn,
@Param("fltNowDt") Date fltNowDt); @Param("fltNowDt") Date fltNowDt);
@Transactional @Transactional
@Modifying @Modifying
@Query("update FltPlanBas f set f.aprvlYn = :aprvlYn where f.planSno in :planSno") @Query("update FltPlanBas f set f.aprvlYn = :aprvlYn where f.planSno in :planSno")
int updateAprvlYnByPlanSnoIn(@Param("planSno") List<Integer> planSnos, @Param("aprvlYn") String aprvlYn); int updateAprvlYnByPlanSnoIn(@Param("planSno") List<Integer> planSnos, @Param("aprvlYn") String aprvlYn);
Optional<FltPlanBas> findByPlanSnoAndDelYnNot(Integer planSno, String delYn);
} }

34
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.biz.jpa.entity.*;
import com.palnet.comn.utils.DateUtils; import com.palnet.comn.utils.DateUtils;
import com.querydsl.core.BooleanBuilder; import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.Tuple;
import com.querydsl.core.group.GroupBy; import com.querydsl.core.group.GroupBy;
import com.querydsl.core.types.ConstantImpl;
import com.querydsl.core.types.ExpressionUtils; import com.querydsl.core.types.ExpressionUtils;
import com.querydsl.core.types.Predicate;
import com.querydsl.core.types.Projections; import com.querydsl.core.types.Projections;
import com.querydsl.core.types.dsl.CaseBuilder; import com.querydsl.core.types.dsl.CaseBuilder;
import com.querydsl.core.types.dsl.DateTemplate; import com.querydsl.core.types.dsl.DateTemplate;
import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.Expressions;
import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.JPAExpressions;
import com.querydsl.jpa.impl.JPAQuery;
import com.querydsl.jpa.impl.JPAQueryFactory; import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -448,4 +442,30 @@ public class FltPlanQueryRepository {
return querys; return querys;
} }
public List<FltPlanBas> findByFlightPlanArcrft(String idntfNum, String serverReceiveDate) {
QFltPlanBas fltPlanBas = QFltPlanBas.fltPlanBas;
QFltPlanArcrft fltPlanArcrft = QFltPlanArcrft.fltPlanArcrft;
BooleanBuilder parameter = new BooleanBuilder();
DateTemplate<Date> flightStartDate = Expressions.dateTemplate(
Date.class,"DATE({0})", fltPlanBas.schFltStDt);
DateTemplate<Date> 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<FltPlanBas> result = query.select(fltPlanBas)
.from(fltPlanBas)
.leftJoin(fltPlanArcrft)
.on(fltPlanBas.planSno.eq(fltPlanArcrft.planSno))
.where(parameter)
.fetch();
return result;
}
} }

7
src/main/java/com/palnet/biz/message/consumer/MessageConsumer.java

@ -24,7 +24,7 @@ public class MessageConsumer {
} }
@RabbitHandler @RabbitHandler
@RabbitListener(queues = {"app.drone.queue"}, concurrency = "8") @RabbitListener(queues = {"app.drone.queue"})
public void receivedDroneMessage(final String message) { public void receivedDroneMessage(final String message) {
log.info("application message : {}", message); log.info("application message : {}", message);
@ -36,12 +36,7 @@ public class MessageConsumer {
e.printStackTrace(); e.printStackTrace();
} }
// GPModel mapper = messageService.mapper(model);
messageService.insert(model); // GPS 정보 DB 동기화 처리 messageService.insert(model); // GPS 정보 DB 동기화 처리
/* Websocket Model 메세지 서버로 위임 */
// messageService.sendToMessage(mapper);
} }
} }

82
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.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; 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.bas.flight.model.BasFlightPlanModel;
import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlPlanContainsRq; import com.palnet.biz.jpa.entity.*;
import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlPlanContainsRs; import com.palnet.biz.jpa.repository.com.ComIdntBasRepository;
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.repository.ctr.CtrCntrlBasRepository; import com.palnet.biz.jpa.repository.ctr.CtrCntrlBasRepository;
import com.palnet.biz.jpa.repository.ctr.CtrCntrlHstryRepository; 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.repository.pty.PtyDronQueryRepository;
import com.palnet.biz.jpa.service.ctr.CtrCntrlJpaService; import com.palnet.biz.jpa.service.ctr.CtrCntrlJpaService;
import com.palnet.biz.api.comn.model.ControlGpsDataContext; import com.palnet.biz.api.comn.model.ControlGpsDataContext;
import com.palnet.biz.message.service.MessageService; import com.palnet.biz.message.service.MessageService;
import com.palnet.comn.model.GPDatabaseModel; import com.palnet.comn.model.GPDatabaseModel;
import com.palnet.comn.model.GPModel; import com.palnet.comn.model.GPModel;
import com.palnet.comn.utils.AreaUtils;
import com.palnet.comn.utils.DateUtils; import com.palnet.comn.utils.DateUtils;
import com.palnet.comn.utils.JsonUtils; import com.palnet.comn.utils.JsonUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -38,43 +38,48 @@ import java.util.UUID;
@Slf4j @Slf4j
public class MessageServiceImpl implements MessageService { public class MessageServiceImpl implements MessageService {
private final CtrCntrlService ctrCntrlService; private final CtrCntrlJpaService ctrCntrlJpaService;
private final CtrCntrlBasRepository ctrCntrlBasRepository; private final CtrCntrlBasRepository ctrCntrlBasRepository;
private final CtrCntrlHstryRepository ctrCntrlHstryRepository; private final CtrCntrlHstryRepository ctrCntrlHstryRepository;
private final CtrCntrlJpaService ctrCntrlJpaService;
private final PtyDronQueryRepository ptyDronQueryRepository; private final PtyDronQueryRepository ptyDronQueryRepository;
private final ComIdntBasRepository idntBasRepository;
private final FltPlanQueryRepository fltPlanQueryRepository;
private final FltPlanCtrCntrlRelRepository ctrCntrlRelRepository;
private final ControlGpsDataContext shareContext; private final ControlGpsDataContext shareContext;
private final RabbitTemplate rabbitTemplate; private final RabbitTemplate rabbitTemplate;
private final Environment env; private final Environment env;
private final ObjectMapper objectMapper; private final ObjectMapper objectMapper;
private final CtrCntrlWarnLogRepository warnLogRepository;
private final AreaUtils areaUtils;
public MessageServiceImpl(CtrCntrlJpaService ctrCntrlJpaService, public MessageServiceImpl(CtrCntrlJpaService ctrCntrlJpaService,
CtrCntrlBasRepository ctrCntrlBasRepository, CtrCntrlBasRepository ctrCntrlBasRepository,
CtrCntrlHstryRepository ctrCntrlHstryRepository, CtrCntrlHstryRepository ctrCntrlHstryRepository,
PtyDronQueryRepository ptyDronQueryRepository, PtyDronQueryRepository ptyDronQueryRepository,
ComIdntBasRepository idntBasRepository,
FltPlanQueryRepository fltPlanQueryRepository,
FltPlanCtrCntrlRelRepository ctrCntrlRelRepository,
ControlGpsDataContext shareContext, ControlGpsDataContext shareContext,
RabbitTemplate rabbitTemplate, RabbitTemplate rabbitTemplate,
Environment env, Environment env
CtrCntrlService ctrCntrlService,
CtrCntrlWarnLogRepository warnLogRepository,
AreaUtils areaUtils
) { ) {
this.ctrCntrlJpaService = ctrCntrlJpaService; this.ctrCntrlJpaService = ctrCntrlJpaService;
this.ctrCntrlBasRepository = ctrCntrlBasRepository; this.ctrCntrlBasRepository = ctrCntrlBasRepository;
this.ctrCntrlHstryRepository = ctrCntrlHstryRepository; this.ctrCntrlHstryRepository = ctrCntrlHstryRepository;
this.ptyDronQueryRepository = ptyDronQueryRepository; this.ptyDronQueryRepository = ptyDronQueryRepository;
this.idntBasRepository = idntBasRepository;
this.fltPlanQueryRepository = fltPlanQueryRepository;
this.ctrCntrlRelRepository = ctrCntrlRelRepository;
this.shareContext = shareContext; this.shareContext = shareContext;
this.rabbitTemplate = rabbitTemplate; this.rabbitTemplate = rabbitTemplate;
this.env = env; this.env = env;
this.objectMapper = JsonUtils.getObjectMapper(); this.objectMapper = JsonUtils.getObjectMapper();
this.ctrCntrlService = ctrCntrlService;
this.warnLogRepository = warnLogRepository;
this.areaUtils = areaUtils;
} }
/**
* TODO Control-Id
*
* @param model
* @return
*/
@Override @Override
@Transactional(readOnly = true) @Transactional(readOnly = true)
public GPModel mapper(GPModel model) { public GPModel mapper(GPModel model) {
@ -118,18 +123,47 @@ public class MessageServiceImpl implements MessageService {
@Override @Override
@Transactional @Transactional
@Async // @Async
public void insert(GPModel model) { public void insert(GPModel model) {
GPDatabaseModel dbModel = new GPDatabaseModel(); GPDatabaseModel dbModel = new GPDatabaseModel();
BeanUtils.copyProperties(model, dbModel); BeanUtils.copyProperties(model, dbModel);
if(model.getTypeCd().equals("01")) { if(model.getTypeCd().equals("01")) {
//마스터 정보에저장
//식별번호로 제작번호 알아오기
String prodNumber = ptyDronQueryRepository.findIdntfNumByProdNumber(model.getObjectId()); String prodNumber = ptyDronQueryRepository.findIdntfNumByProdNumber(model.getObjectId());
dbModel.setProdNumber(prodNumber); 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<FltPlanBas> 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 생성 // Drone인 경우에만 history 생성

Loading…
Cancel
Save