shjung hace 2 años
padre
commit
e74c5269c4

+ 25 - 8
src/main/java/com/its/op/controller/its/scrs/TbScIxrCmraSttsHsController.java

@@ -1,13 +1,16 @@
 package com.its.op.controller.its.scrs;
 
+import com.its.op.dto.its.cctv.TbCctvCtlrSttsHsDto;
 import com.its.op.dto.its.scrs.TbScIxrCmraSttsHsDto;
 import com.its.op.service.its.scrs.TbScIxrCmraSttsHsService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import lombok.RequiredArgsConstructor;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
@@ -21,16 +24,30 @@ public class TbScIxrCmraSttsHsController {
 
     private final TbScIxrCmraSttsHsService service;
 
-    @ApiOperation(value = "카메라 상태 이력 전체조회(TB_SC_IXR_CMRA_STTS_HS)", response = TbScIxrCmraSttsHsDto.class, responseContainer = "ArrayList")
-    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbScIxrCmraSttsHsDto> findAll() {
-        return this.service.findAll();
+    @ApiOperation(value = "카메라 상태 이력 조회(TB_SC_IXR_CMRA_STTS_HS)", response = TbScIxrCmraSttsHsDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/stts-hs", produces = {"application/json; charset=utf8"})
+    public List<TbScIxrCmraSttsHsDto> findAllByDateRange(
+            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24MI00)", example = "20210112152000", required = true)
+            @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24MI59)", example = "20221112152000", required = true)
+            @RequestParam String TO_DT,
+            @ApiParam(name = "id", value = "카메라 관리번호 목록", example = "[1,2]", required = true)
+            @RequestParam List<String> id
+    ) {
+        return this.service.findAllByDateRange(FROM_DT, TO_DT, id);
     }
 
-    @ApiOperation(value = "카메라 상태 이력 전체조회(TB_SC_IXR_CMRA_STTS_HS)", response = TbScIxrCmraSttsHsDto.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/list", produces = {"application/json; charset=utf8"})
-    public List<TbScIxrCmraSttsHsDto> findAllList() {
-        return this.service.findAllList();
+    @ApiOperation(value = "카메라 장애 이력 조회(TB_SC_IXR_CMRA_STTS_HS)", response = TbScIxrCmraSttsHsDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/stts-hs/fail", produces = {"application/json; charset=utf8"})
+    public List<TbScIxrCmraSttsHsDto> findAllFailByDateRange(
+            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24MI00)", example = "20210112152000", required = true)
+            @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24MI59)", example = "20221112152000", required = true)
+            @RequestParam String TO_DT,
+            @ApiParam(name = "id", value = "카메라 관리번호 목록", example = "[1,2]", required = true)
+            @RequestParam List<String> id
+    ) {
+        return this.service.findAllFailByDateRange(FROM_DT, TO_DT, id);
     }
 
 }

+ 8 - 0
src/main/java/com/its/op/dao/repository/its/scrs/TbScIxrCmraSttsHsRepository.java

@@ -34,4 +34,12 @@ public interface TbScIxrCmraSttsHsRepository extends JpaRepository<TbScIxrCmraSt
             , nativeQuery = true)
     List<FcltSttsErrorInf> findAllSttsErrorByDateRange(@Param("fromDt") String fromDt, @Param("toDt") String toDt);
 
+    @Query("select p from TbScIxrCmraSttsHs p inner join fetch p.cmra cmra where p.clctDt between :fromDt and :toDt and p.cmraId in :ids")
+    List<TbScIxrCmraSttsHs> findAllByDateRange(@Param("fromDt") String fromDt, @Param("toDt") String toDt, @Param("ids") List<String> ids);
+
+    @Query("select p from TbScIxrCmraSttsHs p inner join fetch p.cmra cmra " +
+            " where p.clctDt between :fromDt and :toDt " +
+            "   and p.cmraStts <> 1 " +
+            "   and p.cmraId in :ids")
+    List<TbScIxrCmraSttsHs> findAllFailByDateRange(@Param("fromDt") String fromDt, @Param("toDt") String toDt, @Param("ids") List<String> ids);
 }

+ 18 - 0
src/main/java/com/its/op/dto/its/scrs/TbScIxrCmraSttsHsDto.java

@@ -42,4 +42,22 @@ public class TbScIxrCmraSttsHsDto implements Serializable {
     @JsonProperty("drct_dvsn_desc")    // DRCT_DVSN_CD
     private String drctDvsnDesc;
 
+    @ApiModelProperty("설치 위치")  // Y VARCHAR2(40)
+    @JsonProperty("istl_lctn")
+    private String istlLctn;
+
+    @ApiModelProperty("통신 상태 코드('CMS')")  // Y VARCHAR2(7)
+    @JsonProperty("cmnc_stts_cd")
+    private String cmncSttsCd;
+
+    @ApiModelProperty("수집건수")
+    @JsonProperty("coll_cnt")
+    private Integer collCnt;
+
+    // Code Description Field
+    @ApiModelProperty("통신 상태 코드('CMS') 설명")
+    @JsonProperty("cmnc_stts_desc")    // CMNC_STTS_CD
+    private String cmncSttsDesc;
+
+
 }

+ 11 - 1
src/main/java/com/its/op/dto/its/scrs/TbScSgnlCtlrDto.java

@@ -95,6 +95,10 @@ public class TbScSgnlCtlrDto implements Serializable {
     @JsonProperty("bring_8phas_cd")
     private Integer bring8phasCd;
 
+    @ApiModelProperty("교차로 명")  // Y NUMBER(7)
+    @JsonProperty("ixr_nm")
+    private String ixrNm;
+
     @ApiModel("TbScSgnlCtlrUpdReq(신호 제어기 정보변경)")
     @Getter
     @Setter
@@ -197,8 +201,12 @@ public class TbScSgnlCtlrDto implements Serializable {
         @PositiveOrZero
         private Integer bring8phasCd;
 
+        @ApiModelProperty("교차로 명")  // Y NUMBER(7)
+        @JsonProperty("ixr_nm")
+        private String ixrNm;
+
         @Builder
-        public TbScSgnlCtlrUpdReq(Integer sgnl_ixr_nmbr, Double x_crdn, Double y_crdn, Integer aring_1phas_cd, Integer aring_2phas_cd, Integer aring_3phas_cd, Integer aring_4phas_cd, Integer aring_5phas_cd, Integer aring_6phas_cd, Integer aring_7phas_cd, Integer aring_8phas_cd, Integer bring_1phas_cd, Integer bring_2phas_cd, Integer bring_3phas_cd, Integer bring_4phas_cd, Integer bring_5phas_cd, Integer bring_6phas_cd, Integer bring_7phas_cd, Integer bring_8phas_cd) {
+        public TbScSgnlCtlrUpdReq(Integer sgnl_ixr_nmbr, Double x_crdn, Double y_crdn, Integer aring_1phas_cd, Integer aring_2phas_cd, Integer aring_3phas_cd, Integer aring_4phas_cd, Integer aring_5phas_cd, Integer aring_6phas_cd, Integer aring_7phas_cd, Integer aring_8phas_cd, Integer bring_1phas_cd, Integer bring_2phas_cd, Integer bring_3phas_cd, Integer bring_4phas_cd, Integer bring_5phas_cd, Integer bring_6phas_cd, Integer bring_7phas_cd, Integer bring_8phas_cd, String ixr_nm) {
             this.sgnlIxrNmbr = sgnl_ixr_nmbr;
             this.xCrdn = x_crdn;
             this.yCrdn = y_crdn;
@@ -218,6 +226,7 @@ public class TbScSgnlCtlrDto implements Serializable {
             this.bring6phasCd = bring_6phas_cd;
             this.bring7phasCd = bring_7phas_cd;
             this.bring8phasCd = bring_8phas_cd;
+            this.ixrNm = ixr_nm;
         }
 
         public TbScSgnlCtlr toEntity() {
@@ -241,6 +250,7 @@ public class TbScSgnlCtlrDto implements Serializable {
                     .bring6phasCd(this.bring6phasCd)
                     .bring7phasCd(this.bring7phasCd)
                     .bring8phasCd(this.bring8phasCd)
+                    .ixrNm(this.ixrNm)
                     .build();
         }
 

+ 3 - 1
src/main/java/com/its/op/entity/its/scrs/TbScIxrCmraStts.java

@@ -47,13 +47,15 @@ public class TbScIxrCmraStts implements Serializable {
     private Integer cmraStts;
 
     public TbScIxrCmraSttsDto toDto() {
-        return TbScIxrCmraSttsDto.builder()
+        TbScIxrCmraSttsDto dto = TbScIxrCmraSttsDto.builder()
                 .ixrId(this.ixrId)
                 .cmraId(this.cmraId)
                 .drctDvsnCd(this.drctDvsnCd)
                 .clctDt(this.clctDt)
                 .cmraStts(this.cmraStts)
                 .build();
+
+        return dto;
     }
 
     public TbScIxrCmraStts(String ixrId, String cmraId, Integer drctDvsnCd) {

+ 24 - 1
src/main/java/com/its/op/entity/its/scrs/TbScIxrCmraSttsHs.java

@@ -1,12 +1,15 @@
 package com.its.op.entity.its.scrs;
 
 import com.its.op.dto.its.scrs.TbScIxrCmraSttsHsDto;
+import com.its.op.global.CodeManager;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
+import org.hibernate.annotations.NotFound;
+import org.hibernate.annotations.NotFoundAction;
 
 import javax.persistence.*;
 import java.io.Serializable;
@@ -49,14 +52,34 @@ public class TbScIxrCmraSttsHs implements Serializable {
     @Column(name = "CMRA_STTS", columnDefinition = "NUMBER", length = 1)
     private Integer cmraStts;
 
+    @OneToOne
+    @JoinColumns({
+            @JoinColumn(insertable=false, updatable=false, name = "IXR_ID", referencedColumnName = "IXR_ID"),
+            @JoinColumn(insertable=false, updatable=false, name = "CMRA_ID", referencedColumnName = "CMRA_ID"),
+            @JoinColumn(insertable=false, updatable=false, name = "DRCT_DVSN_CD", referencedColumnName = "DRCT_DVSN_CD")
+    })
+    @NotFound(action = NotFoundAction.IGNORE)
+    private TbScIxrCmraMngm cmra;
+
     public TbScIxrCmraSttsHsDto toDto() {
-        return TbScIxrCmraSttsHsDto.builder()
+        TbScIxrCmraSttsHsDto dto = TbScIxrCmraSttsHsDto.builder()
                 .clctDt(this.clctDt)
                 .ixrId(this.ixrId)
                 .cmraId(this.cmraId)
                 .drctDvsnCd(this.drctDvsnCd)
                 .cmraStts(this.cmraStts)
                 .build();
+
+        dto.setCollCnt(0);
+        dto.setCmncSttsCd(this.cmraStts == 1 ? "CMS0" : "CMS1");
+        if (this.cmra != null) {
+            dto.setIstlLctn(this.cmra.getIstlLctn());
+        }
+        else {
+            dto.setIstlLctn("-");
+        }
+        dto.setCmncSttsDesc(CodeManager.getCodeDescShort(CodeManager.CMNC_STTS_CD, dto.getCmncSttsCd()));
+        return dto;
     }
 
 }

+ 72 - 2
src/main/java/com/its/op/service/its/facility/TbFcltInfrService.java

@@ -7,14 +7,22 @@ import com.its.op.dto.its.common.NewIdLongDto;
 import com.its.op.dto.its.facility.FcltWorkStepDto;
 import com.its.op.dto.its.facility.TbFcltInfrDto;
 import com.its.op.dto.its.facility.UnRegisteredFcltInfrDto;
+import com.its.op.dto.its.rse.TbRseCtlrDto;
+import com.its.op.dto.its.scrs.TbScIxrCmraMngmDto;
+import com.its.op.dto.its.scrs.TbScSgnlCtlrDto;
 import com.its.op.dto.its.vds.TbVdsCtlrDto;
 import com.its.op.dto.its.vms.TbVmsCtlrDto;
+import com.its.op.dto.its.wcam.TbWcamCtlrDto;
 import com.its.op.entity.its.code.TbCmmnCd;
 import com.its.op.entity.its.facility.TbFcltInfr;
 import com.its.op.global.CodeManager;
 import com.its.op.service.its.cctv.TbCctvCtlrService;
+import com.its.op.service.its.rse.TbRseCtlrService;
+import com.its.op.service.its.scrs.TbScIxrCmraMngmService;
+import com.its.op.service.its.scrs.TbScSgnlCtlrService;
 import com.its.op.service.its.vds.TbVdsCtlrService;
 import com.its.op.service.its.vms.TbVmsCtlrService;
+import com.its.op.service.its.wcam.TbWcamCtlrService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -28,9 +36,13 @@ import java.util.*;
 public class TbFcltInfrService {
 
     private final TbFcltInfrRepository repo;
+    private final TbWcamCtlrService wcamCtlrService;
+    private final TbCctvCtlrService cctvCtlrService;
     private final TbVmsCtlrService vmsCtlrService;
     private final TbVdsCtlrService vdsCtlrService;
-    private final TbCctvCtlrService cctvCtlrService;
+    private final TbRseCtlrService dsrcCtlrService;
+    private final TbScSgnlCtlrService sigCtlrService;
+    private final TbScIxrCmraMngmService ccamCtlrService;
     private final TbCmmnCdRepository cmmnCdRepo;
 
     // 데이터 1건 조회, 없으면 exception
@@ -164,6 +176,20 @@ public class TbFcltInfrService {
             regMap.put(obj.getFcltId(), obj);
         });
 
+        if (fcltType == null || "WCAM".equals(fcltType)) {
+            List<TbWcamCtlrDto> wcamList = this.wcamCtlrService.findAllList();
+            wcamList.forEach(obj -> {
+                TbFcltInfrDto regObj = regMap.get(obj.getWcamCtlrId());
+                if (regObj == null) {
+                    result.add(UnRegisteredFcltInfrDto.builder()
+                            .fcltType("WCAM")
+                            .fcltId(obj.getWcamCtlrId())
+                            .fcltLctn(obj.getIstlLctnNm())
+                            .build());
+                }
+            });
+        }
+
         if (fcltType == null || "VMS".equals(fcltType)) {
             List<TbVmsCtlrDto> vmsList = this.vmsCtlrService.findAllList();
             vmsList.forEach(obj -> {
@@ -206,7 +232,51 @@ public class TbFcltInfrService {
             });
         }
 
-        //TODO: DSRC, SIG, 스마트교차로
+        // DSRC
+        if (fcltType == null || "DSRC".equals(fcltType)) {
+            List<TbRseCtlrDto> dsrcList = this.dsrcCtlrService.findAllList();
+            dsrcList.forEach(obj -> {
+                TbFcltInfrDto regObj = regMap.get(obj.getRseCtlrId());
+                if (regObj == null) {
+                    result.add(UnRegisteredFcltInfrDto.builder()
+                            .fcltType("DSRC")
+                            .fcltId(obj.getRseCtlrId())
+                            .fcltLctn(obj.getIstlLctnNm())
+                            .build());
+                }
+            });
+        }
+
+        // 신호제어기
+        if (fcltType == null || "SIG".equals(fcltType)) {
+            List<TbScSgnlCtlrDto> sigList = this.sigCtlrService.findAllList();
+            sigList.forEach(obj -> {
+                TbFcltInfrDto regObj = regMap.get(String.valueOf(obj.getSgnlIxrNmbr()));
+                if (regObj == null) {
+                    result.add(UnRegisteredFcltInfrDto.builder()
+                            .fcltType("SIG")
+                            .fcltId(String.valueOf(obj.getSgnlIxrNmbr()))
+                            .fcltLctn(obj.getIxrNm())
+                            .build());
+                }
+            });
+        }
+
+        // 교차로 카메라
+        if (fcltType == null || "CCAM".equals(fcltType)) {
+            List<TbScIxrCmraMngmDto> ccamList = this.ccamCtlrService.findAllList();
+            ccamList.forEach(obj -> {
+                TbFcltInfrDto regObj = regMap.get(obj.getCmraId());
+                if (regObj == null) {
+                    result.add(UnRegisteredFcltInfrDto.builder()
+                            .fcltType("CCAM")
+                            .fcltId(obj.getCmraId())
+                            .fcltLctn(obj.getIstlLctn())
+                            .build());
+                }
+            });
+        }
+
         return result;
     }
 

+ 43 - 0
src/main/java/com/its/op/service/its/scrs/TbScIxrCmraSttsHsService.java

@@ -40,4 +40,47 @@ public class TbScIxrCmraSttsHsService {
         return result;
     }
 
+    /**
+     * 상태 이력 조회
+     * @param fromDt
+     * @param toDt
+     * @param ids
+     * @return
+     */
+    @Transactional(readOnly = true)
+    public List<TbScIxrCmraSttsHsDto> findAllByDateRange(String fromDt, String toDt, List<String> ids) {
+
+        List<TbScIxrCmraSttsHsDto> result = new ArrayList<>();
+        List<TbScIxrCmraSttsHs> data = this.repo.findAllByDateRange(fromDt, toDt, ids);
+        if (data != null) {
+            data.forEach(obj -> {
+                if (obj.getCmra() != null) {
+                    result.add(obj.toDto());
+                }
+            });
+        }
+        return result;
+    }
+
+    /**
+     * 장애 이력 조회
+     * @param fromDt
+     * @param toDt
+     * @param ids
+     * @return
+     */
+    @Transactional(readOnly = true)
+    public List<TbScIxrCmraSttsHsDto> findAllFailByDateRange(String fromDt, String toDt, List<String> ids) {
+
+        List<TbScIxrCmraSttsHsDto> result = new ArrayList<>();
+        List<TbScIxrCmraSttsHs> data = this.repo.findAllFailByDateRange(fromDt, toDt, ids);
+        if (data != null) {
+            data.forEach(obj -> {
+                if (obj.getCmra() != null) {
+                    result.add(obj.toDto());
+                }
+            });
+        }
+        return result;
+    }
 }