Browse Source

비행 시뮬레이션 - 앱권한 , 그룹권한에 따른 표출범위 필터기능 추가

Test
qkr7828(박재우) 2 years ago
parent
commit
c8b7918ca9
  1. 84
      src/main/java/com/palnet/biz/api/anls/smlt/service/AnlsSmltService.java
  2. 4
      src/main/java/com/palnet/biz/jpa/repository/com/ComIdntBasRepository.java
  3. 284
      src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java
  4. 4
      src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java
  5. 13
      src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanPilotRepository.java

84
src/main/java/com/palnet/biz/api/anls/smlt/service/AnlsSmltService.java

@ -1,6 +1,9 @@
package com.palnet.biz.api.anls.smlt.service; package com.palnet.biz.api.anls.smlt.service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator;
import java.util.List; import java.util.List;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -9,14 +12,23 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel;
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil;
import com.palnet.biz.api.anls.hstry.model.AnlsHstryDetailModel; import com.palnet.biz.api.anls.hstry.model.AnlsHstryDetailModel;
import com.palnet.biz.api.anls.hstry.model.AnlsHstryModel; import com.palnet.biz.api.anls.hstry.model.AnlsHstryModel;
import com.palnet.biz.api.anls.hstry.model.AnlsHstryRqModel; import com.palnet.biz.api.anls.hstry.model.AnlsHstryRqModel;
import com.palnet.biz.api.anls.smlt.model.AnlsSmltDetailModel; import com.palnet.biz.api.anls.smlt.model.AnlsSmltDetailModel;
import com.palnet.biz.api.anls.smlt.model.AnlsSmltStcsModel; import com.palnet.biz.api.anls.smlt.model.AnlsSmltStcsModel;
import com.palnet.biz.jpa.entity.ComIdntfBas;
import com.palnet.biz.jpa.entity.CtrCntrlHstryArea; import com.palnet.biz.jpa.entity.CtrCntrlHstryArea;
import com.palnet.biz.jpa.entity.FltPlanBas;
import com.palnet.biz.jpa.entity.FltPlanPilot;
import com.palnet.biz.jpa.repository.com.ComIdntBasRepository;
import com.palnet.biz.jpa.repository.ctr.CtrCntrlBasRepository; import com.palnet.biz.jpa.repository.ctr.CtrCntrlBasRepository;
import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository; import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository;
import com.palnet.biz.jpa.repository.flt.FltPlanBasRepository;
import com.palnet.biz.jpa.repository.flt.FltPlanPilotRepository;
import com.palnet.comn.utils.DateUtils;
import com.palnet.comn.utils.NumberUtils; import com.palnet.comn.utils.NumberUtils;
@Service @Service
@ -30,6 +42,18 @@ public class AnlsSmltService {
@Autowired @Autowired
private CtrCntrlQueryRepository query; private CtrCntrlQueryRepository query;
@Autowired
private ComIdntBasRepository comIdntBasRepository;
@Autowired
private FltPlanBasRepository fltPlanBasRepository;
@Autowired
private FltPlanPilotRepository fltPlanPilotRepository;
@Autowired
private JwtTokenUtil jwtTokenUtil;
/** /**
* 비행 현황 목록 * 비행 현황 목록
@ -37,9 +61,63 @@ public class AnlsSmltService {
* @return * @return
*/ */
public List<AnlsHstryModel> list(AnlsHstryRqModel rq){ public List<AnlsHstryModel> list(AnlsHstryRqModel rq){
String appAuth = jwtTokenUtil.getUserAuthByToken();
List<AnlsHstryModel> resultList = query.listCntrlBas(rq); List<JwtGroupModel> groupAuth = jwtTokenUtil.getGroupAuthByToken();
int cstmrSno = jwtTokenUtil.getCstmrSnoByToken();
List<JwtGroupModel> groupAdminList = new ArrayList<>();
for(JwtGroupModel list : groupAuth) {
if(list.getGroupAuthCd().equals("MASTER") || list.getGroupAuthCd().equals("LEADER")) {
groupAdminList.add(list);
}
}
List<AnlsHstryModel> resultList = new ArrayList<>();
if(appAuth.equals("SUPER")||appAuth.equals("ADMIN")) { // App 권한이 수퍼 / 어드민일 경우 목록 전부 표출
resultList = query.listCntrlBas(rq);
} else if(groupAdminList.size()>0) { // App 권한은 user이지만 group 권한이 LEADER / MASTER인 그룹이 있는 경우 해당 그룹의 비행 이력 목록 표출
for (JwtGroupModel list : groupAdminList) {
List<AnlsHstryModel> result = query.cntrlBasAuthList(rq, list.getGroupId());
if (result.size() > 0) {
resultList.addAll(result);
}
}
}
if (resultList == null || resultList.size() == 0) { /* App 권한이 유저이면서 group 권한도 모두 NORMAL인 ID인 경우 본인이 생성한
기체만 조회 */
List<ComIdntfBas> idntfList = comIdntBasRepository.findIdntfNumber(cstmrSno);
if (idntfList.size() > 0) {
for (ComIdntfBas list : idntfList) {
List<AnlsHstryModel> result = query.cntrlBasNormalList(rq, list.getIdntfNum());
if (result.size() > 0) {
resultList.addAll(result);
}
}
}
List<FltPlanBas> basResult = fltPlanBasRepository.findByPlanSno(cstmrSno); /* App 권한이 유저이면서 group 권한도 모두
NORMAL인 ID인 경우 cstmrSno로 비행계획서 조회 */
for (FltPlanBas list : basResult) {
resultList.addAll(query.cntrlBasNormalPlanList(rq, list.getPlanSno()));
}
List<FltPlanPilot> pilotResult = fltPlanPilotRepository.findByPlanSno(cstmrSno); /* App 권한이 유저이면서 group 권한도
모두 NORMAL인 ID인 경우 cstmrSno로 조종사 조회 */
for (FltPlanPilot list : pilotResult) {
resultList.addAll(query.cntrlBasNormalPlanList(rq, list.getPlanSno()));
}
Comparator<AnlsHstryModel> comparator = new Comparator<AnlsHstryModel>() {
@Override
public int compare(AnlsHstryModel o1, AnlsHstryModel o2) {
// TODO Auto-generated method stub
return (int) DateUtils.diffSecond(o1.getCntrlStDt(), o2.getCntrlStDt());
}
};
Collections.sort(resultList, comparator);
}
return resultList; return resultList;
} }

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

@ -21,4 +21,8 @@ public interface ComIdntBasRepository extends JpaRepository<ComIdntfBas, String>
@Query("select c from ComIdntfBas c " + @Query("select c from ComIdntfBas c " +
"where c.arcrftSno = :arcrftSno " ) "where c.arcrftSno = :arcrftSno " )
List<ComIdntfBas> findIdntfNum(@Param("arcrftSno") int arcrftSno); List<ComIdntfBas> findIdntfNum(@Param("arcrftSno") int arcrftSno);
@Query("select c from ComIdntfBas c " +
"where c.cstmrSno = :cstmrSno ")
List<ComIdntfBas> findIdntfNumber(@Param("cstmrSno") int cstmrSno);
} }

284
src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java

@ -37,6 +37,7 @@ import com.palnet.biz.jpa.entity.QComIdntfBas;
import com.palnet.biz.jpa.entity.QCtrCntrlBas; import com.palnet.biz.jpa.entity.QCtrCntrlBas;
import com.palnet.biz.jpa.entity.QCtrCntrlHstry; import com.palnet.biz.jpa.entity.QCtrCntrlHstry;
import com.palnet.biz.jpa.entity.QCtrCntrlHstryArea; import com.palnet.biz.jpa.entity.QCtrCntrlHstryArea;
import com.palnet.biz.jpa.entity.QFltPlanCtrCntrlRel;
import com.palnet.biz.jpa.entity.QPtyCstmrBas; import com.palnet.biz.jpa.entity.QPtyCstmrBas;
import com.palnet.biz.jpa.entity.QPtyCstmrGroup; import com.palnet.biz.jpa.entity.QPtyCstmrGroup;
import com.palnet.biz.jpa.entity.QPtyGroupBas; import com.palnet.biz.jpa.entity.QPtyGroupBas;
@ -73,6 +74,7 @@ public class CtrCntrlQueryRepository{
QCtrCntrlBas qCntrlBasEntity = QCtrCntrlBas.ctrCntrlBas; QCtrCntrlBas qCntrlBasEntity = QCtrCntrlBas.ctrCntrlBas;
QCtrCntrlHstryArea qCntrlHstryAreaEntity = QCtrCntrlHstryArea.ctrCntrlHstryArea; QCtrCntrlHstryArea qCntrlHstryAreaEntity = QCtrCntrlHstryArea.ctrCntrlHstryArea;
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
builder.and(qCntrlBasEntity.statusCd.eq("99")); builder.and(qCntrlBasEntity.statusCd.eq("99"));
@ -125,6 +127,101 @@ public class CtrCntrlQueryRepository{
.on(qCntrlBasEntity.cntrlId.eq(qCntrlHstryAreaEntity.cntrlId)) .on(qCntrlBasEntity.cntrlId.eq(qCntrlHstryAreaEntity.cntrlId))
.on(qCntrlHstryAreaEntity.actnType.eq("01")) .on(qCntrlHstryAreaEntity.actnType.eq("01"))
.where(builder) .where(builder)
.orderBy(qCntrlBasEntity.cntrlStDt.desc())
.fetch();
for(AnlsHstryModel model: queryList) {
String addr = "";
if(!StringUtils.isEmpty(model.getArea1())) {
addr = addr + " " + model.getArea1();
}
if(!StringUtils.isEmpty(model.getArea2())) {
addr = addr + " " + model.getArea2();
}
if(!StringUtils.isEmpty(model.getArea3())) {
addr = addr + " " + model.getArea3();
}
if(!StringUtils.isEmpty(model.getLandNm())) {
addr = addr + " " + model.getLandNm();
}
if(!StringUtils.isEmpty(model.getLandNum())) {
addr = addr + " " + model.getLandNum();
}
model.setStArea(addr);
result.add(model);
}
return result;
}
public List<AnlsHstryModel> cntrlBasAuthList(AnlsHstryRqModel rq, String groupId){
QCtrCntrlBas qCntrlBasEntity = QCtrCntrlBas.ctrCntrlBas;
QCtrCntrlHstryArea qCntrlHstryAreaEntity = QCtrCntrlHstryArea.ctrCntrlHstryArea;
QFltPlanCtrCntrlRel qFltPlanCtrCntrlRelEntity = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
BooleanBuilder builder = new BooleanBuilder();
builder.and(qCntrlBasEntity.statusCd.eq("99"));
log.debug("Params ===> " +rq.toString());
Calendar end = Calendar.getInstance();
end.setTime(DateUtils.stringToDate(rq.getEndDate()));
end.add(Calendar.DATE, 1);
Date endDate = end.getTime();
builder.and(qCntrlBasEntity.cntrlStDt.after(DateUtils.stringToDate(rq.getStDate())));
builder.and(qCntrlBasEntity.cntrlEndDt.before(endDate));
builder.and(qFltPlanCtrCntrlRelEntity.groupId.eq(groupId));
if(!StringUtils.isEmpty(rq.getSearch1())) {
builder.and(qCntrlBasEntity.idntfNum.like("%" + rq.getSearch1() + "%"));
}
ArrayList<AnlsHstryModel> result = new ArrayList<AnlsHstryModel>();
List<AnlsHstryModel> queryList = query.select(Projections.bean(AnlsHstryModel.class ,
qCntrlBasEntity.cntrlId,
qCntrlBasEntity.idntfNum,
qCntrlBasEntity.statusCd,
qCntrlBasEntity.objectTypeCd,
qCntrlBasEntity.flghtStDt,
qCntrlBasEntity.flghtEndDt,
qCntrlBasEntity.cntrlStDt,
qCntrlBasEntity.cntrlEndDt,
qCntrlBasEntity.ttlTime,
qCntrlBasEntity.ttlTimeType,
qCntrlBasEntity.ttlDstnc,
qCntrlBasEntity.ttlDstncType,
qCntrlBasEntity.avrgSpeed,
qCntrlBasEntity.avrgSpeedType,
qCntrlBasEntity.bttrCnsmptn,
qCntrlBasEntity.endTypeCd,
qCntrlBasEntity.createDt,
qCntrlBasEntity.updateDt,
qCntrlHstryAreaEntity.actnType,
qCntrlHstryAreaEntity.area1,
qCntrlHstryAreaEntity.area2,
qCntrlHstryAreaEntity.area3,
qCntrlHstryAreaEntity.areaNm,
qCntrlHstryAreaEntity.areaType,
qCntrlHstryAreaEntity.landNm,
qCntrlHstryAreaEntity.landNum,
qCntrlHstryAreaEntity.zipCd
))
.from(qCntrlBasEntity)
.leftJoin(qCntrlHstryAreaEntity)
.on(qCntrlBasEntity.cntrlId.eq(qCntrlHstryAreaEntity.cntrlId))
.on(qCntrlHstryAreaEntity.actnType.eq("01"))
.leftJoin(qFltPlanCtrCntrlRelEntity)
.on(qCntrlBasEntity.cntrlId.eq(qFltPlanCtrCntrlRelEntity.cntrlId))
.where(builder)
.orderBy(qCntrlBasEntity.cntrlStDt.asc()) .orderBy(qCntrlBasEntity.cntrlStDt.asc())
.fetch(); .fetch();
@ -158,7 +255,194 @@ public class CtrCntrlQueryRepository{
return result; return result;
} }
public List<AnlsHstryModel> cntrlBasNormalList(AnlsHstryRqModel rq, String idntfNum){
QCtrCntrlBas qCntrlBasEntity = QCtrCntrlBas.ctrCntrlBas;
QCtrCntrlHstryArea qCntrlHstryAreaEntity = QCtrCntrlHstryArea.ctrCntrlHstryArea;
BooleanBuilder builder = new BooleanBuilder();
log.debug("Params ===> " +rq.toString());
Calendar end = Calendar.getInstance();
end.setTime(DateUtils.stringToDate(rq.getEndDate()));
end.add(Calendar.DATE, 1);
Date endDate = end.getTime();
builder.and(qCntrlBasEntity.cntrlStDt.after(DateUtils.stringToDate(rq.getStDate())));
builder.and(qCntrlBasEntity.cntrlEndDt.before(endDate));
builder.and(qCntrlBasEntity.statusCd.eq("99"));
builder.and(qCntrlBasEntity.idntfNum.eq(idntfNum));
if(!StringUtils.isEmpty(rq.getSearch1())) {
builder.and(qCntrlBasEntity.idntfNum.like("%" + rq.getSearch1() + "%"));
}
ArrayList<AnlsHstryModel> result = new ArrayList<AnlsHstryModel>();
List<AnlsHstryModel> queryList = query.select(Projections.bean(AnlsHstryModel.class ,
qCntrlBasEntity.cntrlId,
qCntrlBasEntity.idntfNum,
qCntrlBasEntity.statusCd,
qCntrlBasEntity.objectTypeCd,
qCntrlBasEntity.flghtStDt,
qCntrlBasEntity.flghtEndDt,
qCntrlBasEntity.cntrlStDt,
qCntrlBasEntity.cntrlEndDt,
qCntrlBasEntity.ttlTime,
qCntrlBasEntity.ttlTimeType,
qCntrlBasEntity.ttlDstnc,
qCntrlBasEntity.ttlDstncType,
qCntrlBasEntity.avrgSpeed,
qCntrlBasEntity.avrgSpeedType,
qCntrlBasEntity.bttrCnsmptn,
qCntrlBasEntity.endTypeCd,
qCntrlBasEntity.createDt,
qCntrlBasEntity.updateDt,
qCntrlHstryAreaEntity.actnType,
qCntrlHstryAreaEntity.area1,
qCntrlHstryAreaEntity.area2,
qCntrlHstryAreaEntity.area3,
qCntrlHstryAreaEntity.areaNm,
qCntrlHstryAreaEntity.areaType,
qCntrlHstryAreaEntity.landNm,
qCntrlHstryAreaEntity.landNum,
qCntrlHstryAreaEntity.zipCd
))
.from(qCntrlBasEntity)
.leftJoin(qCntrlHstryAreaEntity)
.on(qCntrlBasEntity.cntrlId.eq(qCntrlHstryAreaEntity.cntrlId))
.on(qCntrlHstryAreaEntity.actnType.eq("01"))
.where(builder)
.orderBy(qCntrlBasEntity.cntrlStDt.asc())
.fetch();
for(AnlsHstryModel model: queryList) {
String addr = "";
if(!StringUtils.isEmpty(model.getArea1())) {
addr = addr + " " + model.getArea1();
}
if(!StringUtils.isEmpty(model.getArea2())) {
addr = addr + " " + model.getArea2();
}
if(!StringUtils.isEmpty(model.getArea3())) {
addr = addr + " " + model.getArea3();
}
if(!StringUtils.isEmpty(model.getLandNm())) {
addr = addr + " " + model.getLandNm();
}
if(!StringUtils.isEmpty(model.getLandNum())) {
addr = addr + " " + model.getLandNum();
}
model.setStArea(addr);
result.add(model);
}
return result;
}
public List<AnlsHstryModel> cntrlBasNormalPlanList(AnlsHstryRqModel rq, int planSno){
QCtrCntrlBas qCntrlBasEntity = QCtrCntrlBas.ctrCntrlBas;
QCtrCntrlHstryArea qCntrlHstryAreaEntity = QCtrCntrlHstryArea.ctrCntrlHstryArea;
QFltPlanCtrCntrlRel qFltPlanCtrCntrlRelEntity = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel;
BooleanBuilder builder = new BooleanBuilder();
log.debug("Params ===> " +rq.toString());
Calendar end = Calendar.getInstance();
end.setTime(DateUtils.stringToDate(rq.getEndDate()));
end.add(Calendar.DATE, 1);
Date endDate = end.getTime();
builder.and(qCntrlBasEntity.cntrlStDt.after(DateUtils.stringToDate(rq.getStDate())));
builder.and(qCntrlBasEntity.cntrlEndDt.before(endDate));
builder.and(qFltPlanCtrCntrlRelEntity.planSno.eq(planSno));
builder.and(qCntrlBasEntity.statusCd.eq("99"));
if(!StringUtils.isEmpty(rq.getSearch1())) {
builder.and(qCntrlBasEntity.idntfNum.like("%" + rq.getSearch1() + "%"));
}
ArrayList<AnlsHstryModel> result = new ArrayList<AnlsHstryModel>();
List<AnlsHstryModel> queryList = query.select(Projections.bean(AnlsHstryModel.class ,
qCntrlBasEntity.cntrlId,
qCntrlBasEntity.idntfNum,
qCntrlBasEntity.statusCd,
qCntrlBasEntity.objectTypeCd,
qCntrlBasEntity.flghtStDt,
qCntrlBasEntity.flghtEndDt,
qCntrlBasEntity.cntrlStDt,
qCntrlBasEntity.cntrlEndDt,
qCntrlBasEntity.ttlTime,
qCntrlBasEntity.ttlTimeType,
qCntrlBasEntity.ttlDstnc,
qCntrlBasEntity.ttlDstncType,
qCntrlBasEntity.avrgSpeed,
qCntrlBasEntity.avrgSpeedType,
qCntrlBasEntity.bttrCnsmptn,
qCntrlBasEntity.endTypeCd,
qCntrlBasEntity.createDt,
qCntrlBasEntity.updateDt,
qCntrlHstryAreaEntity.actnType,
qCntrlHstryAreaEntity.area1,
qCntrlHstryAreaEntity.area2,
qCntrlHstryAreaEntity.area3,
qCntrlHstryAreaEntity.areaNm,
qCntrlHstryAreaEntity.areaType,
qCntrlHstryAreaEntity.landNm,
qCntrlHstryAreaEntity.landNum,
qCntrlHstryAreaEntity.zipCd
))
.from(qCntrlBasEntity)
.leftJoin(qCntrlHstryAreaEntity)
.on(qCntrlBasEntity.cntrlId.eq(qCntrlHstryAreaEntity.cntrlId))
.on(qCntrlHstryAreaEntity.actnType.eq("01"))
.leftJoin(qFltPlanCtrCntrlRelEntity)
.on(qCntrlBasEntity.cntrlId.eq(qFltPlanCtrCntrlRelEntity.cntrlId))
.where(builder)
.orderBy(qCntrlBasEntity.cntrlStDt.asc())
.fetch();
for(AnlsHstryModel model: queryList) {
String addr = "";
if(!StringUtils.isEmpty(model.getArea1())) {
addr = addr + " " + model.getArea1();
}
if(!StringUtils.isEmpty(model.getArea2())) {
addr = addr + " " + model.getArea2();
}
if(!StringUtils.isEmpty(model.getArea3())) {
addr = addr + " " + model.getArea3();
}
if(!StringUtils.isEmpty(model.getLandNm())) {
addr = addr + " " + model.getLandNm();
}
if(!StringUtils.isEmpty(model.getLandNum())) {
addr = addr + " " + model.getLandNum();
}
model.setStArea(addr);
result.add(model);
}
return result;
}
@Cacheable(value = "cntrl-count") @Cacheable(value = "cntrl-count")
public long countCntrlBasRs(AnlsHstryGroupModel rq, int cstmrSno) { public long countCntrlBasRs(AnlsHstryGroupModel rq, int cstmrSno) {
QCtrCntrlBas qCntrlBasEntity = QCtrCntrlBas.ctrCntrlBas; QCtrCntrlBas qCntrlBasEntity = QCtrCntrlBas.ctrCntrlBas;

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

@ -38,5 +38,7 @@ public interface FltPlanBasRepository extends JpaRepository<FltPlanBas, Integer>
Optional<FltPlanBas> findByPlanSnoAndDelYnNot(Integer planSno, String delYn); Optional<FltPlanBas> findByPlanSnoAndDelYnNot(Integer planSno, String delYn);
@Query("Select f from FltPlanBas f " +
"where f.cstmrSno = :cstmrSno " )
List<FltPlanBas> findByPlanSno(@Param("cstmrSno")int cstmrSno);
} }

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

@ -1,12 +1,17 @@
package com.palnet.biz.jpa.repository.flt; package com.palnet.biz.jpa.repository.flt;
import com.palnet.biz.jpa.entity.FltPlanPilot; import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List; import com.palnet.biz.jpa.entity.FltPlanPilot;
import java.util.Optional;
public interface FltPlanPilotRepository extends JpaRepository<FltPlanPilot, Integer> { public interface FltPlanPilotRepository extends JpaRepository<FltPlanPilot, Integer> {
List<FltPlanPilot> findByPlanSnoOrderByPlanPilotSnoAsc(Integer planSno); List<FltPlanPilot> findByPlanSnoOrderByPlanPilotSnoAsc(Integer planSno);
@Query("select f from FltPlanPilot f " +
"where f.cstmrSno = :cstmrSno " )
List<FltPlanPilot> findByPlanSno(@Param("cstmrSno") int cstmrSno);
} }

Loading…
Cancel
Save