Browse Source

비행계획서 CRUD 구성

feature/auth
지대한 2 years ago
parent
commit
3bec8453f6
  1. 197
      src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java
  2. 12
      src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAprovRq.java
  3. 35
      src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanArcrftModel.java
  4. 16
      src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaCoordModel.java
  5. 23
      src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaModel.java
  6. 14
      src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanListRq.java
  7. 33
      src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanModel.java
  8. 27
      src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanPilotModel.java
  9. 105
      src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightMapper.java
  10. 257
      src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java
  11. 4
      src/main/java/com/palnet/biz/jpa/entity/FltPlanPilot.java
  12. 3
      src/main/java/com/palnet/biz/jpa/repository/com/ComArcrftBasRepository.java
  13. 5
      src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanArcrftRepository.java
  14. 4
      src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaCoordRepository.java
  15. 5
      src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaRepository.java
  16. 16
      src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java
  17. 5
      src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanPilotRepository.java
  18. 122
      src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java
  19. 15
      src/main/java/com/palnet/biz/jpa/repository/pty/PtyGroupQueryRepository.java

197
src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java

@ -1,27 +1,38 @@
package com.palnet.biz.api.bas.flight.controller;
import com.palnet.biz.api.bas.flight.model.*;
import com.palnet.biz.api.bas.flight.service.BasFlightService;
import com.palnet.biz.api.comn.response.BasicResponse;
import com.palnet.biz.api.comn.response.ErrorResponse;
import com.palnet.biz.api.comn.response.SuccessResponse;
import com.palnet.comn.exception.CustomException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@Slf4j
@RequiredArgsConstructor
@RestController
@RequestMapping(value = "/api/bas/flight", produces = {MediaType.APPLICATION_JSON_VALUE})
public class BasFlightController {
private final BasFlightService basFlightService;
@GetMapping("/area")
public ResponseEntity<Object> getAirArea() throws IOException, ParseException {
// 1. file read
@ -42,4 +53,182 @@ public class BasFlightController {
return ResponseEntity.ok().body(airArea);
}
// 비행계획서 조회
@GetMapping(value = "/plan/list")
public ResponseEntity<? extends BasicResponse> listPlan(BasFlightPlanListRq rq) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
List<BasFlightPlanModel> result = basFlightService.listPlan(rq);
resultMap.put("result", result);
} catch (CustomException e) {
log.error("IGNORE : {}", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
} catch (Exception e) {
log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1"));
}
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
}
// 비행계획서 상세 조회
@GetMapping(value = "/plan/detail/{planSno}")
public ResponseEntity<? extends BasicResponse> detailPlan(@PathVariable("planSno") Integer planSno) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
BasFlightPlanModel result = basFlightService.detailPlan(planSno);
resultMap.put("result", result);
} catch (CustomException e) {
log.error("IGNORE : {}", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
} catch (Exception e) {
log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1"));
}
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
}
// 비행계획서 등록
@PostMapping(value = "/plan/create")
public ResponseEntity<? extends BasicResponse> createPlan(@RequestBody BasFlightPlanModel rq) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
log.info(">>> rq : {}", rq);
boolean result = basFlightService.createPlan(rq);
resultMap.put("result", result);
} catch (CustomException e) {
log.error("IGNORE : {}", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
} catch (Exception e) {
log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1"));
}
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
}
// 비행계획서 수정
@PutMapping(value = "/plan/update")
public ResponseEntity<? extends BasicResponse> updatePlan(@RequestBody BasFlightPlanModel rq) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
boolean result = basFlightService.updatePlan(rq);
resultMap.put("result", result);
} catch (CustomException e) {
log.error("IGNORE : {}", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
} catch (Exception e) {
log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1"));
}
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
}
// 비행계획서 삭제
@DeleteMapping(value = "/plan/delete/{planSno}")
public ResponseEntity<? extends BasicResponse> deletePlan(@PathVariable("planSno") Integer planSno) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
boolean result = basFlightService.deletePlan(planSno);
resultMap.put("result", result);
} catch (CustomException e) {
log.error("IGNORE : {}", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
} catch (Exception e) {
log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1"));
}
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
}
// 비행계획서 승인/미승인
@PutMapping(value = "/plan/aprove")
public ResponseEntity<? extends BasicResponse> aprovePlan(@RequestBody BasFlightPlanAprovRq rq) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
int result = basFlightService.aprovePlan(rq);
resultMap.put("result", result);
} catch (CustomException e) {
log.error("IGNORE : {}", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
} catch (Exception e) {
log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1"));
}
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
}
// 그룹 조종사 조회
@GetMapping(value = "/plan/pilot/{groupId}")
public ResponseEntity<? extends BasicResponse> findPilot(@PathVariable("groupId") String groupId) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
List<BasFlightPlanPilotModel> result = basFlightService.listPilotByGroup(groupId);
resultMap.put("result", result);
} catch (CustomException e) {
log.error("IGNORE : {}", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
} catch (Exception e) {
log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1"));
}
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
}
// 그룹 기체 조회
@GetMapping(value = "/plan/arcrft/{groupId}")
public ResponseEntity<? extends BasicResponse> findArcrft(@PathVariable("groupId") String groupId) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
List<BasFlightPlanArcrftModel> result = basFlightService.listArcrftByGroup(groupId);
resultMap.put("result", result);
} catch (CustomException e) {
log.error("IGNORE : {}", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
} catch (Exception e) {
log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1"));
}
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap));
}
}

12
src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAprovRq.java

@ -0,0 +1,12 @@
package com.palnet.biz.api.bas.flight.model;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
public class BasFlightPlanAprovRq {
private List<Integer> planSnoList;
private String aprvlYn;
}

35
src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanArcrftModel.java

@ -0,0 +1,35 @@
package com.palnet.biz.api.bas.flight.model;
import lombok.Data;
import java.util.Date;
@Data
public class BasFlightPlanArcrftModel {
private Integer planArcrftSno;
private Integer planSno;
private Integer arcrftSno;
private String idntfNum;
private String groupNm;
private String prdctNum;
private String arcrftTypeCd;
private String arcrftModelNm;
private String prdctCmpnNm;
private Date prdctDate;
private double arcrftLngth;
private double arcrftWdth;
private double arcrftHght;
private double arcrftWght;
private String wghtTypeCd;
private String imageUrl;
private double takeoffWght;
private String useYn;
private String cameraYn;
private String insrncYn;
private String ownerNm;
private String createUserId;
private Date createDt;
private String updateUserId;
private Date updateDt;
private String docState = "R";
}

16
src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaCoordModel.java

@ -0,0 +1,16 @@
package com.palnet.biz.api.bas.flight.model;
import lombok.Data;
import java.util.Date;
@Data
public class BasFlightPlanAreaCoordModel {
private Integer planAreaCoordSno;
private Integer planAreaSno;
private double lat;
private double lon;
private String createUserId;
private Date createDt;
private String docState = "R";
}

23
src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanAreaModel.java

@ -0,0 +1,23 @@
package com.palnet.biz.api.bas.flight.model;
import lombok.Data;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Data
public class BasFlightPlanAreaModel {
private Integer planAreaSno;
private Integer planSno;
private String areaType;
private String fltMethod;
private Integer bufferZone;
private String fltElev;
private String createUserId;
private Date createDt;
private String updateUserId;
private Date updateDt;
private String docState = "R";
private List<BasFlightPlanAreaCoordModel> coords;
}

14
src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanListRq.java

@ -0,0 +1,14 @@
package com.palnet.biz.api.bas.flight.model;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.Date;
@Data
public class BasFlightPlanListRq {
private Date schFltStDt;
private Date schFltEndDt;
private LocalDateTime datetime;
private String aprvlYn;
}

33
src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanModel.java

@ -0,0 +1,33 @@
package com.palnet.biz.api.bas.flight.model;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
public class BasFlightPlanModel {
private Integer planSno;
private String groupId;
private Integer cstmrSno;
private String memberName;
private String email;
private String hpno;
private String clncd;
private String addr;
private String addrDtlCn;
private String zip;
private Date schFltStDt;
private Date schFltEndDt;
private String fltPurpose;
private String aprvlYn;
private String delYn;
private String createUserId;
private Date createDt;
private String updateUserId;
private Date updateDt;
private String docState = "R";
private List<BasFlightPlanAreaModel> area;
private List<BasFlightPlanPilotModel> pilot;
private List<BasFlightPlanArcrftModel> arcrft;
}

27
src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanPilotModel.java

@ -0,0 +1,27 @@
package com.palnet.biz.api.bas.flight.model;
import lombok.Data;
import java.util.Date;
@Data
public class BasFlightPlanPilotModel {
private Integer planPilotSno;
private Integer planSno;
private Integer cstmrSno;
private String groupNm;
private String memberName;
private String email;
private String hpno;
private String clncd;
private String addr;
private String addrDtlCn;
private String zip;
private String qlfcNo;
private String carrer;
private String createUserId;
private Date createDt;
private String updateUserId;
private Date updateDt;
private String docState = "R";
}

105
src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightMapper.java

@ -0,0 +1,105 @@
package com.palnet.biz.api.bas.flight.service;
import com.palnet.biz.api.bas.flight.model.*;
import com.palnet.biz.jpa.entity.*;
import org.mapstruct.IterableMapping;
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper
public interface BasFlightMapper {
BasFlightMapper mapper = Mappers.getMapper(BasFlightMapper.class);
// to entity
@Named("toPlanEntity")
FltPlanBas modelToEntity(BasFlightPlanModel model);
@Named("toAreaEntity")
FltPlanArea modelToEntity(BasFlightPlanAreaModel model);
@Named("toCoordEntity")
FltPlanAreaCoord modelToEntity(BasFlightPlanAreaCoordModel model);
@Named("toPilotEntity")
FltPlanPilot modelToEntity(BasFlightPlanPilotModel model);
@Named("toArcrftEntity")
FltPlanArcrft modelToEntity(BasFlightPlanArcrftModel model);
// to entity merge
@Named("toPlanEntityForMergeModel")
void updateEntityByModel(@MappingTarget FltPlanBas entity, BasFlightPlanModel model);
@Named("toAreaEntityForMergeModel")
void updateEntityByModel(@MappingTarget FltPlanArea entity, BasFlightPlanAreaModel model);
@Named("toCoordEntityForMergeModel")
void updateEntityByModel(@MappingTarget FltPlanAreaCoord entity, BasFlightPlanAreaCoordModel model);
@Named("toPilotEntityForMergeModel")
void updateEntityByModel(@MappingTarget FltPlanPilot entity, BasFlightPlanPilotModel model);
@Named("toArcrftEntityForMergeModel")
void updateEntityByModel(@MappingTarget FltPlanArcrft entity, BasFlightPlanArcrftModel model);
// to model
@Named("toPlanModel")
BasFlightPlanModel entityToModel(FltPlanBas entity);
@Named("toAreaModel")
BasFlightPlanAreaModel entityToModel(FltPlanArea entity);
@Named("toCoordModel")
BasFlightPlanAreaCoordModel entityToModel(FltPlanAreaCoord entity);
@Named("toPilotModel")
BasFlightPlanPilotModel entityToModel(FltPlanPilot entity);
@Named("toArcrftModel")
BasFlightPlanArcrftModel entityToModel(FltPlanArcrft entity);
@Named("comArcrftBasToArcrftModel")
BasFlightPlanArcrftModel entityToModel(ComArcrftBas entity);
// to entity - list
@Named("toPlanEntity")
List<FltPlanBas> modelToEntityPlanList(List<BasFlightPlanModel> model);
@Named("toAreaEntity")
List<FltPlanArea> modelToEntityAreaList(List<BasFlightPlanAreaModel> model);
@Named("toCoordEntity")
List<FltPlanAreaCoord> modelToEntityCoordList(List<BasFlightPlanAreaCoordModel> model);
@Named("toPilotEntity")
List<FltPlanPilot> modelToEntityPilotList(List<BasFlightPlanPilotModel> model);
@Named("toArcrftEntity")
List<FltPlanArcrft> modelToEntityArcrftList(List<BasFlightPlanArcrftModel> model);
// to model - list
@Named("toPlanModel")
List<BasFlightPlanModel> entityToModelPlanList(List<FltPlanBas> entity);
@Named("toAreaModel")
List<BasFlightPlanAreaModel> entityToModeArealList(List<FltPlanArea> entity);
@Named("toCoordModel")
List<BasFlightPlanAreaCoordModel> entityToModelCoordList(List<FltPlanAreaCoord> entity);
@Named("toPilotModel")
List<BasFlightPlanPilotModel> entityToModelPilotList(List<FltPlanPilot> entity);
@Named("toArcrftModel")
List<BasFlightPlanArcrftModel> entityToModelArcrftList(List<FltPlanArcrft> entity);
@Named("comArcrftBasToArcrftModel")
List<BasFlightPlanArcrftModel> comArcrftEntityToModelArcrftList(List<ComArcrftBas> entity);
}

257
src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java

@ -0,0 +1,257 @@
package com.palnet.biz.api.bas.flight.service;
import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel;
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil;
import com.palnet.biz.api.bas.flight.model.*;
import com.palnet.biz.jpa.entity.*;
import com.palnet.biz.jpa.repository.com.ComArcrftBasRepository;
import com.palnet.biz.jpa.repository.flt.*;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@Log4j2
@RequiredArgsConstructor
@Service
public class BasFlightService {
private final FltPlanBasRepository fltPlanBasRepository;
private final FltPlanArcrftRepository fltPlanArcrftRepository;
private final FltPlanAreaRepository fltPlanAreaRepository;
private final FltPlanAreaCoordRepository fltPlanAreaCoordRepository;
private final FltPlanPilotRepository fltPlanPilotRepository;
private final FltPlanQueryRepository fltPlanQueryRepository;
private final ComArcrftBasRepository comArcrftBasRepository;
private final JwtTokenUtil jwtTokenUtil;
// 비행계획서 조회
public List<BasFlightPlanModel> listPlan(BasFlightPlanListRq rq) {
List<JwtGroupModel> groupAuthList = jwtTokenUtil.getGroupAuthByToken();
return fltPlanQueryRepository.listPlan(rq);
}
// 비행계획서 상세 조회
public BasFlightPlanModel detailPlan(Integer planSno) {
BasFlightPlanModel rs = new BasFlightPlanModel();
// 비행계획서
FltPlanBas planEntity = fltPlanBasRepository.findByPlanSnoAndDelYnNot(planSno, "Y").orElse(null);
if(planEntity != null){
rs = BasFlightMapper.mapper.entityToModel(planEntity);
// 버퍼영역
List<FltPlanArea> areaEntityList = fltPlanAreaRepository.findByPlanSnoOrderByPlanAreaSnoAsc(planSno);
if (areaEntityList != null && !areaEntityList.isEmpty()) {
List<BasFlightPlanAreaModel> area = new ArrayList<>();
for (FltPlanArea areaEntity : areaEntityList) {
BasFlightPlanAreaModel areaModel = BasFlightMapper.mapper.entityToModel(areaEntity);
List<FltPlanAreaCoord> coordEntityList = fltPlanAreaCoordRepository.findFirstByPlanAreaSnoOrderByPlanAreaCoordSnoAsc(areaEntity.getPlanAreaSno());
if (coordEntityList != null && !coordEntityList.isEmpty()) {
areaModel.setCoords(BasFlightMapper.mapper.entityToModelCoordList(coordEntityList));
}
area.add(areaModel);
}
rs.setArea(area);
}
// 조종사
List<FltPlanPilot> pilotList = fltPlanPilotRepository.findByPlanSnoOrderByPlanPilotSnoAsc(planSno);
if (pilotList != null && !pilotList.isEmpty()) {
rs.setPilot(BasFlightMapper.mapper.entityToModelPilotList(pilotList));
}
// 기체
List<FltPlanArcrft> arcrft = fltPlanArcrftRepository.findByPlanSnoOrderByPlanArcrftSnoAsc(planSno);
if (arcrft != null && !arcrft.isEmpty()) {
rs.setArcrft(BasFlightMapper.mapper.entityToModelArcrftList(arcrft));
}
}
return rs;
}
// 비행계획서 등록
public boolean createPlan(BasFlightPlanModel rq) {
// 비행계획서
FltPlanBas basEntity = BasFlightMapper.mapper.modelToEntity(rq);
FltPlanBas rBasEntity = fltPlanBasRepository.save(basEntity);
Integer planSno = rBasEntity.getPlanSno();
// 비행구역
List<BasFlightPlanAreaModel> areaModelList = rq.getArea();
if (areaModelList != null && !areaModelList.isEmpty()) {
for (BasFlightPlanAreaModel areaModel : areaModelList) {
FltPlanArea areaEntity = BasFlightMapper.mapper.modelToEntity(areaModel);
areaEntity.setPlanSno(planSno);
FltPlanArea rAreaEntity = fltPlanAreaRepository.save(areaEntity);
Integer planAreaSno = rAreaEntity.getPlanAreaSno();
List<BasFlightPlanAreaCoordModel> coordModelList = areaModel.getCoords();
if (coordModelList != null && !coordModelList.isEmpty()) {
for (BasFlightPlanAreaCoordModel coordModel : coordModelList) {
FltPlanAreaCoord coordEntity = BasFlightMapper.mapper.modelToEntity(coordModel);
coordEntity.setPlanAreaSno(planAreaSno);
fltPlanAreaCoordRepository.save(coordEntity);
}
}
}
}
// 조종사
List<BasFlightPlanPilotModel> pilotModelList = rq.getPilot();
if (pilotModelList != null && !pilotModelList.isEmpty()) {
for (BasFlightPlanPilotModel pilotModel : pilotModelList) {
FltPlanPilot pilotEntity = BasFlightMapper.mapper.modelToEntity(pilotModel);
pilotEntity.setPlanSno(planSno);
fltPlanPilotRepository.save(pilotEntity);
}
}
// 기체
List<BasFlightPlanArcrftModel> arcrftModelList = rq.getArcrft();
if (arcrftModelList != null && !arcrftModelList.isEmpty()) {
for (BasFlightPlanArcrftModel arcrftModel : arcrftModelList) {
FltPlanArcrft arcrftEntity = BasFlightMapper.mapper.modelToEntity(arcrftModel);
arcrftEntity.setPlanSno(planSno);
fltPlanArcrftRepository.save(arcrftEntity);
}
}
return true;
}
// 비행계획서 수정
public boolean updatePlan(BasFlightPlanModel rq) {
if (rq != null && rq.getPlanSno() != null) {
Integer planSno = rq.getPlanSno();
// 비행계획서
FltPlanBas planEntity = fltPlanBasRepository.findById(planSno).orElseThrow();
BasFlightMapper.mapper.updateEntityByModel(planEntity, rq);
fltPlanBasRepository.save(planEntity);
// 비행구역
List<BasFlightPlanAreaModel> areaModelList = rq.getArea();
if (areaModelList != null && !areaModelList.isEmpty()) {
List<FltPlanArea> areaEntityList = fltPlanAreaRepository.findByPlanSnoOrderByPlanAreaSnoAsc(planSno);
for (BasFlightPlanAreaModel areaModel : areaModelList) {
// FltPlanArea areaEntity = fltPlanAreaRepository.findById(areaModel.getPlanAreaSno()).orElse(null);
FltPlanArea areaEntity = areaEntityList.stream().filter(fltPlanArea -> fltPlanArea.getPlanAreaSno() == areaModel.getPlanAreaSno()).findFirst().orElse(null);
if (areaEntity == null) {
areaEntity = BasFlightMapper.mapper.modelToEntity(areaModel);
} else {
BasFlightMapper.mapper.updateEntityByModel(areaEntity, areaModel);
}
fltPlanAreaRepository.save(areaEntity);
List<BasFlightPlanAreaCoordModel> coordsModelList = areaModel.getCoords();
if (coordsModelList != null && !coordsModelList.isEmpty()) {
Integer areaSno = areaModel.getPlanAreaSno();
List<FltPlanAreaCoord> coordEntityList = fltPlanAreaCoordRepository.findFirstByPlanAreaSnoOrderByPlanAreaCoordSnoAsc(areaSno);
for (BasFlightPlanAreaCoordModel coordModel : coordsModelList) {
FltPlanAreaCoord coordEntity = coordEntityList.stream().filter(fltPlanAreaCoord -> fltPlanAreaCoord.getPlanAreaCoordSno() == coordModel.getPlanAreaCoordSno()).findFirst().orElse(null);
if (coordEntity == null) {
coordEntity = BasFlightMapper.mapper.modelToEntity(coordModel);
} else {
BasFlightMapper.mapper.updateEntityByModel(coordEntity, coordModel);
}
fltPlanAreaCoordRepository.save(coordEntity);
}
List<FltPlanAreaCoord> deleteCoordEntity = coordEntityList.stream().filter(fltPlanAreaCoord -> {
for (BasFlightPlanAreaCoordModel coordModel : coordsModelList) {
if (coordModel.getPlanAreaCoordSno() == fltPlanAreaCoord.getPlanAreaCoordSno())
return false;
}
return true;
}).collect(Collectors.toList());
fltPlanAreaCoordRepository.deleteAll(deleteCoordEntity);
}
}
List<FltPlanArea> deleteAreaEntity = areaEntityList.stream().filter(fltPlanArea -> {
for (BasFlightPlanAreaModel areaModel : areaModelList) {
if (areaModel.getPlanAreaSno() == fltPlanArea.getPlanAreaSno())
return false;
}
return true;
}).collect(Collectors.toList());
fltPlanAreaRepository.deleteAll(deleteAreaEntity);
}
// 조종사
List<BasFlightPlanPilotModel> pilotModelList = rq.getPilot();
if(pilotModelList != null && !pilotModelList.isEmpty()){
List<FltPlanPilot> pilotEntityList = fltPlanPilotRepository.findByPlanSnoOrderByPlanPilotSnoAsc(planSno);
for(BasFlightPlanPilotModel pilotModel : pilotModelList){
FltPlanPilot pilotEntity = pilotEntityList.stream().filter(fltPlanPilot -> fltPlanPilot.getPlanPilotSno() == pilotModel.getPlanPilotSno()).findFirst().orElse(null);
if(pilotEntity != null){
BasFlightMapper.mapper.updateEntityByModel(pilotEntity, pilotModel);
fltPlanPilotRepository.save(pilotEntity);
}
}
List<FltPlanPilot> deletePilotEntity = pilotEntityList.stream().filter(fltPlanPilot -> {
for (BasFlightPlanPilotModel pilotModel : pilotModelList) {
if (pilotModel.getPlanPilotSno() == fltPlanPilot.getPlanPilotSno())
return false;
}
return true;
}).collect(Collectors.toList());
fltPlanPilotRepository.deleteAll(deletePilotEntity);
}
// 기체
List<BasFlightPlanArcrftModel> arcrftModelList = rq.getArcrft();
if(arcrftModelList != null && !arcrftModelList.isEmpty()){
List<FltPlanArcrft> arcrftEntityList = fltPlanArcrftRepository.findByPlanSnoOrderByPlanArcrftSnoAsc(planSno);
for(BasFlightPlanArcrftModel arcrftModel : arcrftModelList){
FltPlanArcrft arcrftEntity = arcrftEntityList.stream().filter(fltPlanArcrft -> fltPlanArcrft.getPlanArcrftSno() == arcrftModel.getPlanArcrftSno()).findFirst().orElse(null);
if(arcrftEntity != null){
BasFlightMapper.mapper.updateEntityByModel(arcrftEntity, arcrftModel);
fltPlanArcrftRepository.save(arcrftEntity);
}
}
List<FltPlanArcrft> deleteArcrftEntity = arcrftEntityList.stream().filter(fltPlanArcrft -> {
for (BasFlightPlanArcrftModel arcrftModel : arcrftModelList) {
if (arcrftModel.getPlanArcrftSno() == fltPlanArcrft.getPlanArcrftSno())
return false;
}
return true;
}).collect(Collectors.toList());
fltPlanArcrftRepository.deleteAll(deleteArcrftEntity);
}
}
return true;
}
// 비행계획서 삭제
public boolean deletePlan(Integer planSno) {
FltPlanBas planEntity = fltPlanBasRepository.findById(planSno).orElseThrow();
planEntity.setDelYn("Y");
fltPlanBasRepository.save(planEntity);
return true;
}
// 비행계획서 승인/미승인
public int aprovePlan(BasFlightPlanAprovRq rq) {
int cnt = fltPlanBasRepository.updateAprvlYnByPlanSnoIn(rq.getPlanSnoList(), rq.getAprvlYn());
return cnt;
}
// 그룹 조종사 조회
public List<BasFlightPlanPilotModel> listPilotByGroup(String groupId) {
List<BasFlightPlanPilotModel> pilotList = fltPlanQueryRepository.listPilot(groupId);
return pilotList;
}
// 그룹 기체 조회
public List<BasFlightPlanArcrftModel> listArcrftByGroup(String groupId) {
List<ComArcrftBas> arcrftEntityList = comArcrftBasRepository.findByGroupIdOrderByArcrftSnoAsc(groupId);
List<BasFlightPlanArcrftModel> arcrftModelList = BasFlightMapper.mapper.comArcrftEntityToModelArcrftList(arcrftEntityList);
return arcrftModelList;
}
}

4
src/main/java/com/palnet/biz/jpa/entity/FltPlanPilot.java

@ -50,8 +50,8 @@ public class FltPlanPilot {
@Column(name = "QLFC_NO")
private String qlfcNo;
@Column(name = "CARREA")
private String carrea;
@Column(name = "CARRER")
private String carrer;
@Column(name = "CREATE_USER_ID")
private String createUserId;

3
src/main/java/com/palnet/biz/jpa/repository/com/ComArcrftBasRepository.java

@ -8,8 +8,11 @@ import com.palnet.biz.jpa.entity.CtrCntrlBas;
import com.palnet.biz.jpa.entity.PtyCstmrGroup;
import com.palnet.biz.jpa.entity.PtyTermsBas;
import java.util.List;
@Repository
public interface ComArcrftBasRepository extends JpaRepository<ComArcrftBas, Integer>{
List<ComArcrftBas> findByGroupIdOrderByArcrftSnoAsc(String groupId);

5
src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanArcrftRepository.java

@ -1,8 +1,11 @@
package com.palnet.biz.jpa.repository.flt;
import com.palnet.biz.jpa.entity.FltPlanArcrft;
import com.palnet.biz.jpa.entity.FltPlanBas;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface FltPlanArcrftRepository extends JpaRepository<FltPlanArcrft, Integer> {
List<FltPlanArcrft> findByPlanSnoOrderByPlanArcrftSnoAsc(Integer planSno);
}

4
src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaCoordRepository.java

@ -4,5 +4,9 @@ import com.palnet.biz.jpa.entity.FltPlanAreaCoord;
import com.palnet.biz.jpa.entity.FltPlanBas;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Optional;
public interface FltPlanAreaCoordRepository extends JpaRepository<FltPlanAreaCoord, Integer> {
List<FltPlanAreaCoord> findFirstByPlanAreaSnoOrderByPlanAreaCoordSnoAsc(Integer planAreaSno);
}

5
src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanAreaRepository.java

@ -4,5 +4,10 @@ import com.palnet.biz.jpa.entity.FltPlanArea;
import com.palnet.biz.jpa.entity.FltPlanBas;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Optional;
public interface FltPlanAreaRepository extends JpaRepository<FltPlanArea, Integer> {
List<FltPlanArea> findByPlanSnoOrderByPlanAreaSnoAsc(Integer planSno);
}

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

@ -2,6 +2,22 @@ package com.palnet.biz.jpa.repository.flt;
import com.palnet.biz.jpa.entity.FltPlanBas;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
public interface FltPlanBasRepository extends JpaRepository<FltPlanBas, Integer> {
Optional<FltPlanBas> findByPlanSnoAndDelYnNot(Integer planSno, String delYn);
@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);
}

5
src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanPilotRepository.java

@ -3,5 +3,10 @@ package com.palnet.biz.jpa.repository.flt;
import com.palnet.biz.jpa.entity.FltPlanPilot;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Optional;
public interface FltPlanPilotRepository extends JpaRepository<FltPlanPilot, Integer> {
List<FltPlanPilot> findByPlanSnoOrderByPlanPilotSnoAsc(Integer planSno);
}

122
src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java

@ -0,0 +1,122 @@
package com.palnet.biz.jpa.repository.flt;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaModel;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanListRq;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanPilotModel;
import com.palnet.biz.jpa.entity.*;
import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.group.GroupBy;
import com.querydsl.core.types.Projections;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Repository;
import java.util.List;
@Log4j2
@Repository
@RequiredArgsConstructor
public class FltPlanQueryRepository {
private final JPAQueryFactory query;
// 비행계획서 목록
// TODO 현재 모두 조회 - 권한에 따른 조회 필요
public List<BasFlightPlanModel> listPlan(BasFlightPlanListRq rq) {
QFltPlanBas bas = QFltPlanBas.fltPlanBas;
QFltPlanArea area = QFltPlanArea.fltPlanArea;
BooleanBuilder builder = new BooleanBuilder();
if (rq.getSchFltEndDt() != null) {
builder.and(bas.schFltStDt.goe(rq.getSchFltEndDt()));
}
if (rq.getSchFltStDt() != null) {
builder.and(bas.schFltEndDt.loe(rq.getSchFltStDt()));
}
if ("Y".equals(rq.getAprvlYn()) || "N".equals(rq.getAprvlYn())) {
builder.and(bas.aprvlYn.eq(rq.getAprvlYn()));
}
builder.and(bas.delYn.ne("Y"));
List<BasFlightPlanModel> r = query
.from(bas)
.leftJoin(area)
.on(bas.planSno.eq(area.planSno))
.where(builder)
.transform(
GroupBy.groupBy(bas.planSno)
.list(Projections.bean(
BasFlightPlanModel.class,
bas.planSno,
bas.groupId,
bas.cstmrSno,
bas.memberName,
bas.email,
bas.hpno,
bas.clncd,
bas.addr,
bas.addrDtlCn,
bas.zip,
bas.schFltStDt,
bas.schFltEndDt,
bas.fltPurpose,
bas.aprvlYn,
bas.delYn,
bas.createUserId,
bas.createDt,
bas.updateUserId,
bas.updateDt,
GroupBy.list(Projections.bean(
BasFlightPlanAreaModel.class,
area.planAreaSno,
area.planSno,
area.areaType,
area.fltMethod,
area.bufferZone,
area.fltElev,
area.createUserId,
area.createDt,
area.updateUserId,
area.updateDt
).skipNulls()).as("area")
))
);
return r;
}
// 조종사 조회
public List<BasFlightPlanPilotModel> listPilot(String groupId) {
// QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas;
QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl;
QPtyCstmrGroup group = QPtyCstmrGroup.ptyCstmrGroup;
BooleanBuilder builder = new BooleanBuilder();
builder.and(group.groupId.eq(groupId));
List<BasFlightPlanPilotModel> r = query
.select(Projections.bean(
BasFlightPlanPilotModel.class,
dtl.cstmrSno,
dtl.memberName,
dtl.email,
dtl.hpno,
dtl.clncd,
dtl.addr,
dtl.addrDtlCn,
dtl.zip
))
.from(dtl)
.leftJoin(group)
.on(dtl.cstmrSno.eq(group.cstmrSno))
.where(builder)
.fetch();
return r;
}
}

15
src/main/java/com/palnet/biz/jpa/repository/pty/PtyGroupQueryRepository.java

@ -1,18 +1,7 @@
package com.palnet.biz.jpa.repository.pty;
import com.palnet.biz.api.acnt.jwt.model.JwtProfileRsModel;
import com.palnet.biz.api.anls.hstry.model.AnlsHstryRqModel;
import com.palnet.biz.api.bas.group.model.BasGroupAprvModel;
import com.palnet.biz.api.bas.group.model.BasGroupAprvRqModel;
import com.palnet.biz.api.bas.group.model.BasGroupJoinModel;
import com.palnet.biz.api.bas.group.model.BasGroupJoinRqModel;
import com.palnet.biz.api.bas.group.model.BasGroupModel;
import com.palnet.biz.api.bas.group.model.BasGroupRqModel;
import com.palnet.biz.api.bas.group.model.BasGroupUserModel;
import com.palnet.biz.api.bas.group.model.BasGroupUserRqModel;
import com.palnet.biz.jpa.entity.PtyCrtfyhpBas;
import com.palnet.biz.jpa.entity.QPtyCrtfyhpBas;
import com.palnet.biz.api.bas.group.model.*;
import com.palnet.biz.jpa.entity.QPtyCstmrBas;
import com.palnet.biz.jpa.entity.QPtyCstmrDtl;
import com.palnet.biz.jpa.entity.QPtyCstmrGroup;
@ -24,11 +13,9 @@ import com.querydsl.jpa.JPAExpressions;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

Loading…
Cancel
Save