Browse Source

anls/hstry 패키지 주석추가

feature/document/spring-rest-docs
lkd9125(이경도) 10 months ago
parent
commit
d66b221762
  1. 52
      pav-server/src/main/java/com/palnet/biz/api/anls/hstry/controller/AnlsHstryController.java
  2. 49
      pav-server/src/main/java/com/palnet/biz/api/anls/hstry/service/AnlsHstryService.java
  3. 164
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java

52
pav-server/src/main/java/com/palnet/biz/api/anls/hstry/controller/AnlsHstryController.java

@ -33,6 +33,12 @@ public class AnlsHstryController {
private final AnlsHstryService service;
/**
* 비행현황 목록 리스트 조회하는 기능,
* AnlsHstryGroupModel에 따른 리스트를 조회함.
* @param rq
* @return
*/
@GetMapping(value = "/list")
@ApiOperation(value = "비행 현황 목록 출력")
@Tag(name = "비행 이력 현황", description = "비행 이력 현황 관련 API")
@ -40,16 +46,24 @@ public class AnlsHstryController {
List<AnlsHstryModel> rs = null;
ComnPagingRs<AnlsHstryModel> response;
//입력값 검증
// 검색 시작일 날짜[stDate], 검색 끝일 날짜 날짜값[endDate], 날짜값이 10자리인지 확인[정해진 포맷팅인지 확인하는 것] 입력값 검증처리
if(rq.getStDate() == null || !(rq.getStDate().length() == 10) || rq.getEndDate() ==null || !(rq.getEndDate().length() == 10) ) {
return ResponseEntity.status(HttpStatus.OK)
// 검증통과하지 못할 시 서버에서 "의도적인" 에러 반환
return ResponseEntity.status(HttpStatus.OK) // "의도적인" 에러 반환코드
.body(new ErrorResponse(RSErrorCode.ER_PARAM));
}
try {
response = service.list(rq);
response = service.list(rq); // 비행현황 목록 조회하는 기능.
} catch (Exception e) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1"));
@ -59,6 +73,12 @@ public class AnlsHstryController {
}
/**
* 비행현황의 상세정보를 조회함,
* 비행ID[CNTRL_ID] 조회함
* @param id
* @return
*/
@GetMapping(value = "/detail/{id}")
@ApiOperation(value = "비행 현황 상세")
@Tag(name = "비행 이력 현황", description = "비행 이력 현황 관련 API")
@ -67,9 +87,16 @@ public class AnlsHstryController {
AnlsHstryModel result = null;
try {
result = service.detail(id);
result = service.detail(id); // 비행ID[CNTRL_ID]로 비행 상세정보를 조회하는 기능.
} catch (Exception e) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1"));
@ -80,16 +107,29 @@ public class AnlsHstryController {
}
/**
* 비행이력을 조회함,
* 비행ID[CNTRL_ID] 조회함
* @param id
* @return
*/
@GetMapping(value = "/log/{id}")
@ApiOperation(value = "비행 이력 데이터")
@Tag(name = "비행 이력 현황", description = "비행 이력 현황 관련 API")
@ApiImplicitParam(name = "id",value = "관제ID", dataTypeClass = String.class)
public ResponseEntity<? extends BasicResponse> log(@PathVariable String id) {
List<AnlsHstryDetailModel> result = null;
try {
result = service.hstryList(id);
result = service.hstryList(id); // 비행이력을 비행ID[CNTRL_ID] 조회하는 기능.
} catch (Exception e) {
/**
* try{
...
}
* try 영역 코드들중 문제가 생기면 오는 .
* log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
*/
log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1"));

49
pav-server/src/main/java/com/palnet/biz/api/anls/hstry/service/AnlsHstryService.java

@ -67,18 +67,27 @@ public class AnlsHstryService {
@Autowired
private JwtTokenUtil jwtTokenUtil;
//비행이력현황 list
/**
* 비행현황 목록 조회하는 기능.
* @param rq
* @return
*/
public ComnPagingRs<AnlsHstryModel> list(AnlsHstryGroupModel rq){
// 조회에 필요한 기본값 선언
Integer cstmrSno = jwtTokenUtil.getCstmrSnoByToken();
List<JwtGroupModel> groupAuthList = jwtTokenUtil.getGroupAuthByToken();
List<JwtGroupModel> adminAuth = new ArrayList<>();
String groupAuth = null;
String appAuth = jwtTokenUtil.getUserAuthByToken();
// 페이징 처리를 위한 객체 선언
PageImpl<AnlsHstryModel>resultList;
ComnPagingRs<AnlsHstryModel> response = new ComnPagingRs<>();
Pageable pageable = PageRequest.of(rq.getPage()-1, rq.getRecord());
// 유저의 권한은 확인함
if("USER".equals(appAuth) || "ROLE_USER".equals(appAuth)) {
for(JwtGroupModel list : groupAuthList) {
if(list.getGroupId().equals(rq.getGroupId())) {
@ -86,23 +95,30 @@ public class AnlsHstryService {
}
}
}
// 그룹에서의 권한이 NORMAL인 경우
if("NORMAL".equals(groupAuth)) {
for (JwtGroupModel list : groupAuthList) {
if("MASTER".equals(list.getGroupAuthCd()) || "LEADER".equals(list.getGroupAuthCd())) {
adminAuth.add(list);
}
}
List<ComIdntfBas> idntfList = comIdntBasRepository.findIdntfNumber(cstmrSno);
List<FltPlanBas> basResult = fltPlanBasRepository.findByPlanSno(cstmrSno);
List<FltPlanPilot> pilotList = fltPlanPilotRepository.findByPlanSno(cstmrSno);
List<ComIdntfBas> idntfList = comIdntBasRepository.findIdntfNumber(cstmrSno); // 회원 고유번호와 맞는 기체 고유번호 조회
List<FltPlanBas> basResult = fltPlanBasRepository.findByPlanSno(cstmrSno); // 회원 고유번호와 맞는 비행계획서 조회
List<FltPlanPilot> pilotList = fltPlanPilotRepository.findByPlanSno(cstmrSno); // 회원 고유번호와 맞는 조종사 조회
List<FltPlanBas> pilotResult = new ArrayList<>();
for(FltPlanPilot list : pilotList) {
pilotResult = fltPlanBasRepository.findBasList(list.getPlanSno());
pilotResult = fltPlanBasRepository.findBasList(list.getPlanSno()); // 조종사번호와 맞는 비행계획서 조회
}
// 위 조건들에 부합하는 데이터를 조회함
resultList = query.cntrlBasNormalHstryList(rq, pageable, idntfList, basResult, pilotResult);
// 위 조건들에 부합하여 조회한 데이터의 갯수를 조회함
long total = query.cntrlBasNormalHstryCount(rq, idntfList, basResult, pilotResult);
long totalPage = total % rq.getRecord() > 0 ? total/rq.getRecord() + 1 : total/rq.getRecord();
@ -125,19 +141,27 @@ public class AnlsHstryService {
return response;
}
/**
* 비행ID[CNTRL_ID] 비행 상세정보를 조회하는 기능.
* @param cntrlId
* @return
* @throws Exception
*/
public AnlsHstryModel detail(String cntrlId) throws Exception{
AnlsHstryModel model = new AnlsHstryModel();
Optional<CtrCntrlBas> optional = ctrCntrlBasRepository.findById(cntrlId);
Optional<CtrCntrlBas> optional = ctrCntrlBasRepository.findById(cntrlId); //
if (!optional.isPresent()) {
// 데이터베이스에 조회하려는 데이터가 없을시 서버에서 파라미터가 없다는 "의도적인" 에러 반환
throw new CustomException(ErrorCode.DATA_NOTFIND);
}
CtrCntrlBas entity = optional.get();
// Entity에 담겨있는 값을 반환 model로 복제함
BeanUtils.copyProperties(entity , model);
@ -145,6 +169,11 @@ public class AnlsHstryService {
}
/**
* 비행이력을 비행ID[CNTRL_ID] 조회하는 기능.
* @param id
* @return
*/
public List<AnlsHstryDetailModel> hstryList(@PathVariable String id) {
List<AnlsHstryDetailModel> result = query.listCntrlHstryPage(id);

164
pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java

@ -259,6 +259,17 @@ public class CtrCntrlQueryRepository{
return result;
}
/**
* 조건들에 부합하는 비행 현황 목록을 조회하는 SQL 기능.
* @param rq AnlsHstryGroupModel 객체로 조회 조건을 전달
* @param pageable 페이징 정보
* @param idntfList 기체 식별 기본 정보 리스트
* @param basResult 비행 계획 기본 정보 리스트
* @param pilotResult 파일럿 비행 계획 기본 정보 리스트
* @return 페이징된 AnlsHstryModel 목록
* @return
*/
public PageImpl<AnlsHstryModel> cntrlBasNormalHstryList(AnlsHstryGroupModel rq,
Pageable pageable,
List<ComIdntfBas> idntfList,
@ -279,34 +290,98 @@ public class CtrCntrlQueryRepository{
end.setTime(Date.from(DateUtils.stringToDate(rq.getEndDate())));
end.add(Calendar.DATE, 1);
Date endDate = end.getTime();
/**
* 조건1. 그룹아이디가 맞는지,
* 조건2. 검색시작일 이후
* 조건3. 검색끝일
* 조건4. status가 99[비행중]인지
* 조건5. 승인이 된건인지
*/
builder.and(qFltPlanCtrCntrlRelEntity.groupId.eq(rq.getGroupId()));
builder.and(qCntrlBasEntity.cntrlStDt.after(DateUtils.stringToDate(rq.getStDate())));
builder.and(qCntrlBasEntity.cntrlEndDt.before(endDate.toInstant()));
builder.and(qCntrlBasEntity.statusCd.eq("99"));
builder.and(qFltPlanBasEntity.aprvlYn.eq("Y"));
// 회원 고유번호와 맞는 기체고유번호 조건추가
if(idntfList.size()>0) {
for(ComIdntfBas list : idntfList) {
idntfBuilder.or(qCntrlBasEntity.idntfNum.eq(list.getIdntfNum()));
}
}
// 회원 고유번호와 맞는 비행계획서 고유번호 조건 추가
if(basResult.size()>0) {
for(FltPlanBas list : basResult) {
basBuilder.or(qFltPlanCtrCntrlRelEntity.planSno.eq(list.getPlanSno()));
}
}
// 회원 고유번호와 맞는 파일럿번호로 조회한 비행계획서 번호 조건 추가
if(pilotResult.size()>0) {
for(FltPlanBas list : pilotResult) {
pilotBuilder.or(qFltPlanCtrCntrlRelEntity.planSno.eq(list.getPlanSno()));
}
}
// 입력받은 검색 키워드 조건추가
if(!StringUtils.isEmpty(rq.getSearch1())) {
builder.and(qCntrlBasEntity.idntfNum.like("%" + rq.getSearch1() + "%"));
}
List<AnlsHstryModel> result = new ArrayList<>();
/**
* 조건들과 부합한 데이터베이스 내용을 조회하는 SQL입니다.
* SELECT
* CCB.CNTRL_ID ,
* CCB.IDNTF_NUM ,
* CCB.STATUS_CD ,
* CCB.OBJECT_TYPE_CD ,
* CCB.FLGHT_ST_DT ,
* CCB.FLGHT_END_DT ,
* CCB.CNTRL_ST_DT ,
* CCB.CNTRL_END_DT ,
* CCB.TTL_TIME ,
* CCB.TTL_TIME_TYPE ,
* CCB.TTL_DSTNC ,
* CCB.TTL_DSTNC_TYPE ,
* CCB.AVRG_SPEED ,
* CCB.AVRG_SPEED_TYPE ,
* CCB.BTTR_CNSMPTN ,
* CCB.END_TYPE_CD ,
* CCB.CREATE_DT ,
* CCB.UPDATE_DT ,
* CCHA.ACTN_TYPE ,
* CCHA.AREA1 ,
* CCHA.AREA2 ,
* CCHA.AREA3 ,
* CCHA.AREA_NM ,
* CCHA.AREA_TYPE ,
* CCHA.LAND_NM ,
* CCHA.LAND_NUM ,
* CCHA.ZIP_CD
* FROM CTR_CNTRL_BAS CCB
* LEFT OUTER JOIN CTR_CNTRL_HSTRY_AREA CCHA
* ON CCB.CNTRL_ID = CCHA.CNTRL_ID
* AND CCHA.ACTN_TYPE = '01'
* LEFT OUTER JOIN FLT_PLAN_CTR_CNTRL_REL FPCCR
* ON CCB.CNTRL_ID = FPCCR.CNTRL_ID
* LEFT OUTER JOIN FLT_PLAN_BAS FPB
* ON FPCCR.PLAN_SNO = FPB.PLAN_SNO
* WHERE FPCCR.GROUP_ID = #{groupId}
* AND CCB.CNTRL_ST_DT > #{stDate}
* AND CCB.CNTRL_END_DT < #{endDate}
* AND CCB.STATUS_CD = '99'
* AND FPB.APRVL_YN = 'Y'
* AND CCB.IDNTF_NUM LIKE CONCAT('%', #{search1}, '%');
* AND(
* CCB.IDNTF_NUM = #{idntfNum} -- #{idntfNum}값이 여러개 경우 OR연산을 붙혀 조건이 늘어남
* OR FPCCR.PLAN_SNO = #{planSno} -- #{planSno}값이 여러개 경우 OR연산을 붙혀 조건이 늘어남
* OR FPCCR.PLAN_SNO = #{planSno} -- #{planSno}값이 여러개 경우 OR연산을 붙혀 조건이 늘어남
* )
*/
List<AnlsHstryModel> queryList = query.select(Projections.bean(AnlsHstryModel.class ,
qCntrlBasEntity.cntrlId,
qCntrlBasEntity.idntfNum,
@ -335,17 +410,15 @@ public class CtrCntrlQueryRepository{
qCntrlHstryAreaEntity.landNm,
qCntrlHstryAreaEntity.landNum,
qCntrlHstryAreaEntity.zipCd
))
.from(qCntrlBasEntity)
.leftJoin(qCntrlHstryAreaEntity)
.on(qCntrlBasEntity.cntrlId.eq(qCntrlHstryAreaEntity.cntrlId))
.on(qCntrlHstryAreaEntity.actnType.eq("01"))
.on(qCntrlBasEntity.cntrlId.eq(qCntrlHstryAreaEntity.cntrlId))
.on(qCntrlHstryAreaEntity.actnType.eq("01"))
.leftJoin(qFltPlanCtrCntrlRelEntity)
.on(qCntrlBasEntity.cntrlId.eq(qFltPlanCtrCntrlRelEntity.cntrlId))
.on(qCntrlBasEntity.cntrlId.eq(qFltPlanCtrCntrlRelEntity.cntrlId))
.leftJoin(qFltPlanBasEntity)
.on(qFltPlanCtrCntrlRelEntity.planSno.eq(qFltPlanBasEntity.planSno))
.on(qFltPlanCtrCntrlRelEntity.planSno.eq(qFltPlanBasEntity.planSno))
.where((builder)
.and(
(idntfBuilder)
@ -387,6 +460,7 @@ public class CtrCntrlQueryRepository{
return new PageImpl<>(result, pageable, result.size());
}
public PageImpl<AnlsHstryModel> cntrlBasNormalSmltList(AnlsHstryRqModel rq,
Pageable pageable,
List<JwtGroupModel> adminAuth,
@ -522,6 +596,7 @@ public class CtrCntrlQueryRepository{
return new PageImpl<>(result, pageable, result.size());
}
public List<AnlsHstryModel> cntrlBasNormalList(AnlsHstryRqModel rq, String idntfNum){
QCtrCntrlBas qCntrlBasEntity = QCtrCntrlBas.ctrCntrlBas;
@ -614,6 +689,14 @@ public class CtrCntrlQueryRepository{
return result;
}
/**
* 조건들에 부합하는 비행 현황 목록 데이터의 갯수를 조회하는 SQL 기능.
* @param rq
* @param idntfList
* @param basResult
* @param pilotResult
* @return
*/
public long cntrlBasNormalHstryCount(AnlsHstryGroupModel rq,
List<ComIdntfBas> idntfList,
List<FltPlanBas> basResult,
@ -634,34 +717,70 @@ public class CtrCntrlQueryRepository{
end.add(Calendar.DATE, 1);
Date endDate = end.getTime();
/**
* 조건1. 그룹아이디가 맞는지,
* 조건2. 검색시작일 이후
* 조건3. 검색끝일
* 조건4. status가 99[비행중]인지
* 조건5. 승인이 된건인지
*/
builder.and(qFltPlanCtrCntrlRelEntity.groupId.eq(rq.getGroupId()));
builder.and(qCntrlBasEntity.cntrlStDt.after(DateUtils.stringToDate(rq.getStDate())));
builder.and(qCntrlBasEntity.cntrlEndDt.before(endDate.toInstant()));
builder.and(qFltPlanBasEntity.aprvlYn.eq("Y"));
builder.and(qCntrlBasEntity.statusCd.eq("99"));
// 회원 고유번호와 맞는 기체고유번호 조건추가
if(idntfList.size()>0) {
for(ComIdntfBas list : idntfList) {
idntfBuilder.or(qCntrlBasEntity.idntfNum.eq(list.getIdntfNum()));
}
}
// 회원 고유번호와 맞는 비행계획서 고유번호 조건 추가
if(basResult.size()>0) {
for(FltPlanBas list : basResult) {
basBuilder.or(qFltPlanCtrCntrlRelEntity.planSno.eq(list.getPlanSno()));
}
}
// 회원 고유번호와 맞는 파일럿번호로 조회한 비행계획서 번호 조건 추가
if(pilotResult.size()>0) {
for(FltPlanBas list : pilotResult) {
pilotBuilder.or(qFltPlanCtrCntrlRelEntity.planSno.eq(list.getPlanSno()));
}
}
// 입력받은 검색 키워드 조건추가
if(!StringUtils.isEmpty(rq.getSearch1())) {
builder.and(qCntrlBasEntity.idntfNum.like("%" + rq.getSearch1() + "%"));
}
/**
* 조건들과 부합한 데이터베이스 내용의 갯수를 조회하는 SQL입니다.
* SELECT
* COUNT(*)
* FROM CTR_CNTRL_BAS CCB
* LEFT OUTER JOIN CTR_CNTRL_HSTRY_AREA CCHA
* ON CCB.CNTRL_ID = CCHA.CNTRL_ID
* AND CCHA.ACTN_TYPE = '01'
* LEFT OUTER JOIN FLT_PLAN_CTR_CNTRL_REL FPCCR
* ON CCB.CNTRL_ID = FPCCR.CNTRL_ID
* LEFT OUTER JOIN FLT_PLAN_BAS FPB
* ON FPCCR.PLAN_SNO = FPB.PLAN_SNO
* WHERE FPCCR.GROUP_ID = #{groupId}
* AND CCB.CNTRL_ST_DT > #{stDate}
* AND CCB.CNTRL_END_DT < #{endDate}
* AND CCB.STATUS_CD = '99'
* AND FPB.APRVL_YN = 'Y'
* AND CCB.IDNTF_NUM LIKE CONCAT('%', #{search1}, '%');
* AND(
* CCB.IDNTF_NUM = #{idntfNum} -- #{idntfNum}값이 여러개 경우 OR연산을 붙혀 조건이 늘어남
* OR FPCCR.PLAN_SNO = #{planSno} -- #{planSno}값이 여러개 경우 OR연산을 붙혀 조건이 늘어남
* OR FPCCR.PLAN_SNO = #{planSno} -- #{planSno}값이 여러개 경우 OR연산을 붙혀 조건이 늘어남
* )
*/
long result = query.select(Projections.bean(AnlsHstryModel.class ,
qCntrlBasEntity.cntrlId,
qCntrlBasEntity.idntfNum,
@ -1031,7 +1150,7 @@ public class CtrCntrlQueryRepository{
}
/**
* 비행 이력 데이터 조회
* 비행 이력 데이터 조회하는 SQL.
* @param id
* @return
*/
@ -1043,6 +1162,33 @@ public class CtrCntrlQueryRepository{
BooleanBuilder builder = new BooleanBuilder();
builder.and(qCtrCntrHstry.cntrlId.eq(id));
/**
* 비행번호[CNTRL_ID] 이력현황을 조회하는 SQL입니다.
* SELECT
* CCH.CNTRL_ID ,
* CCH.HSTRY_SNO ,
* CCH.TRMNL_ID ,
* CCH.MSSG_TYPE_CD ,
* CCH.STATUS_CD ,
* CCH.LAT ,
* CCH.LON ,
* CCH.SPEED ,
* CCH.SPEED_TYPE ,
* CCH.HEADING ,
* CCH.ELEV ,
* CCH.ELEV_TYPE ,
* CCH.MV_DSTNC ,
* CCH.MV_DSTNC_TYPE ,
* CCH.BTTR_LVL ,
* CCH.BTTR_VLTG ,
* CCH.TRMNL_RCV_DT ,
* CCH.SRVR_RCV_DT ,
* CCB.IDNTF_NUM
* FROM CTR_CNTRL_BAS CCB
* LEFT OUTER JOIN CTR_CNTRL_HSTRY CCH
* ON CCB.CNTRL_ID = CCH.CNTRL_ID
* WHERE CCB.CNTRL_ID = #{cntrlId}
*/
List<AnlsHstryDetailModel> result = query.select(Projections.bean(AnlsHstryDetailModel.class ,
qCtrCntrHstry.cntrlId ,
qCtrCntrHstry.hstrySno ,

Loading…
Cancel
Save