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

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

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 <= :schFltEndDt)) and DEL_YN='N'")
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 " +
"where f.planSno = :planSno " +
@ -40,12 +30,13 @@ public interface FltPlanBasRepository extends JpaRepository<FltPlanBas, Integer>
Optional<FltPlanBas> 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<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.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<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
@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);
}
}

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.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<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 생성

Loading…
Cancel
Save