shjung 2 vuotta sitten
vanhempi
commit
0999ea507c

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

@@ -0,0 +1,21 @@
+package com.its.op.dao.repository.its.scrs;
+
+import com.its.op.entity.its.scrs.TbScIxrCmraSttsHs;
+import com.its.op.entity.its.scrs.TbScIxrCmraSttsHsKey;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface TbScIxrCmraSttsHsRepository extends JpaRepository<TbScIxrCmraSttsHs, TbScIxrCmraSttsHsKey>, JpaSpecificationExecutor<TbScIxrCmraSttsHs> {
+
+    @Query("select p from TbScIxrCmraSttsHs p")
+    List<TbScIxrCmraSttsHs> findAll();
+
+    @Query("select p from TbScIxrCmraSttsHs p")
+    List<TbScIxrCmraSttsHs> findAllList();
+
+}

+ 21 - 0
src/main/java/com/its/op/dao/repository/its/scrs/TbScIxrCmraSttsRepository.java

@@ -0,0 +1,21 @@
+package com.its.op.dao.repository.its.scrs;
+
+import com.its.op.entity.its.scrs.TbScIxrCmraStts;
+import com.its.op.entity.its.scrs.TbScIxrCmraSttsKey;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface TbScIxrCmraSttsRepository extends JpaRepository<TbScIxrCmraStts, TbScIxrCmraSttsKey>, JpaSpecificationExecutor<TbScIxrCmraStts> {
+
+    @Query("select p from TbScIxrCmraStts p")
+    List<TbScIxrCmraStts> findAll();
+
+    @Query("select p from TbScIxrCmraStts p")
+    List<TbScIxrCmraStts> findAllList();
+
+}

+ 71 - 0
src/main/java/com/its/op/dto/its/scrs/TbScIxrCmraSttsDto.java

@@ -0,0 +1,71 @@
+package com.its.op.dto.its.scrs;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 카메라 상태 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("TbScIxrCmraSttsDto(카메라 상태)")
+public class TbScIxrCmraSttsDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("교차로 ID")  // N VARCHAR2(10)
+    @JsonProperty("ixr_id")
+    private String ixrId;
+
+    @ApiModelProperty("카메라 ID")  // N VARCHAR2(10)
+    @JsonProperty("cmra_id")
+    private String cmraId;
+
+    @ApiModelProperty("방향 구분 코드")  // N NUMBER(1)
+    @JsonProperty("drct_dvsn_cd")
+    private Integer drctDvsnCd;
+
+    @ApiModelProperty("수집 일시")  // N VARCHAR2(14)
+    @JsonProperty("clct_dt")
+    private String clctDt;
+
+    @ApiModelProperty("카메라 상태(0:비정상, 1:정상)")  // Y NUMBER(1)
+    @JsonProperty("cmra_stts")
+    private Integer cmraStts;
+
+    // Code Description Field
+    @ApiModelProperty("방향 구분 코드 설명")
+    @JsonProperty("drct_dvsn_desc")    // DRCT_DVSN_CD
+    private String drctDvsnDesc;
+
+    @ApiModelProperty("설치 위치")  // Y VARCHAR2(40)
+    @JsonProperty("istl_lctn")
+    private String istlLctn;
+
+    @ApiModelProperty("수집 일시")  // N VARCHAR2(14)
+    @JsonProperty("updt_dt")
+    private String updtDt;
+
+    @ApiModelProperty("통신 상태 코드('CMS')")  // Y VARCHAR2(7)
+    @JsonProperty("cmnc_stts_cd")
+    private String cmncSttsCd;
+
+    @ApiModelProperty("수집건수")
+    @JsonProperty("coll_cnt")
+    private Integer collCnt;
+
+    @ApiModelProperty("상태정보 결측 여부")
+    @JsonProperty("miss_stts_yn")
+    private String missSttsYn;
+
+    // Code Description Field
+    @ApiModelProperty("통신 상태 코드('CMS') 설명")
+    @JsonProperty("cmnc_stts_desc")    // CMNC_STTS_CD
+    private String cmncSttsDesc;
+
+
+}

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

@@ -0,0 +1,45 @@
+package com.its.op.dto.its.scrs;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 카메라 상태 이력 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("TbScIxrCmraSttsHsDto(카메라 상태 이력)")
+public class TbScIxrCmraSttsHsDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("수집 일시")  // N VARCHAR2(14)
+    @JsonProperty("clct_dt")
+    private String clctDt;
+
+    @ApiModelProperty("교차로 ID")  // N VARCHAR2(10)
+    @JsonProperty("ixr_id")
+    private String ixrId;
+
+    @ApiModelProperty("카메라 ID")  // N VARCHAR2(10)
+    @JsonProperty("cmra_id")
+    private String cmraId;
+
+    @ApiModelProperty("방향 구분 코드")  // N NUMBER(1)
+    @JsonProperty("drct_dvsn_cd")
+    private Integer drctDvsnCd;
+
+    @ApiModelProperty("카메라 상태(0:비정상, 1:정상)")  // Y NUMBER(1)
+    @JsonProperty("cmra_stts")
+    private Integer cmraStts;
+
+    // Code Description Field
+    @ApiModelProperty("방향 구분 코드 설명")
+    @JsonProperty("drct_dvsn_desc")    // DRCT_DVSN_CD
+    private String drctDvsnDesc;
+
+}

+ 40 - 0
src/main/java/com/its/op/entity/its/scrs/TbScIxrCmraMngm.java

@@ -1,12 +1,17 @@
 package com.its.op.entity.its.scrs;
 
 import com.its.op.dto.its.scrs.TbScIxrCmraMngmDto;
+import com.its.op.dto.its.scrs.TbScIxrCmraSttsDto;
+import com.its.op.global.CodeManager;
+import com.its.utils.ItsUtils;
 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;
@@ -108,6 +113,15 @@ public class TbScIxrCmraMngm implements Serializable {
     @Column(name = "LANE_CNT", columnDefinition = "NUMBER", length = 2)
     private Integer laneCnt;
 
+    @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 TbScIxrCmraStts stts;
+
     public TbScIxrCmraMngmDto toDto() {
         return TbScIxrCmraMngmDto.builder()
                 .ixrId(this.ixrId)
@@ -133,6 +147,32 @@ public class TbScIxrCmraMngm implements Serializable {
                 .build();
     }
 
+    public TbScIxrCmraSttsDto toSttsDto() {
+        TbScIxrCmraSttsDto dto = TbScIxrCmraSttsDto.builder()
+                .ixrId(this.ixrId)
+                .cmraId(this.cmraId)
+                .drctDvsnCd(this.drctDvsnCd)
+                .istlLctn(this.istlLctn)
+                .updtDt(CodeManager.CMNC_STTS_ERROR_DT)
+                .cmncSttsCd(CodeManager.CMNC_STTS_ERROR)
+                .build();
+
+        if (this.stts != null) {
+            dto.setUpdtDt(this.stts.getClctDt());
+            dto.setCmraStts(this.stts.getCmraStts());
+            if (1 == this.stts.getCmraStts()) {
+                dto.setCmncSttsCd(CodeManager.CMNC_STTS_NORMAL);
+            }
+        }
+        dto.setMissSttsYn(ItsUtils.getMissSttsYn(dto.getUpdtDt()));
+        if (("Y").equals(dto.getMissSttsYn())) {
+            // 기준시각 보다 크기 때문에 상태정보를 통신두절로 설정
+            dto.setCmncSttsCd(CodeManager.CMNC_STTS_ERROR);
+        }
+        dto.setCmncSttsDesc(CodeManager.getCodeDescShort(CodeManager.CMNC_STTS_CD, dto.getCmncSttsCd()));
+        return dto;
+    }
+
     public TbScIxrCmraMngm(String ixrId, String cmraId, Integer drctDvsnCd) {
         this.ixrId = ixrId;
         this.cmraId = cmraId;

+ 67 - 0
src/main/java/com/its/op/entity/its/scrs/TbScIxrCmraStts.java

@@ -0,0 +1,67 @@
+package com.its.op.entity.its.scrs;
+
+import com.its.op.dto.its.scrs.TbScIxrCmraSttsDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * 카메라 상태 Entity Class
+ */
+@Getter
+@NoArgsConstructor//(access = AccessLevel.PROTECTED)
+@Builder
+@AllArgsConstructor
+@ApiModel("카메라 상태")
+@Entity
+@Table(name = "TB_SC_IXR_CMRA_STTS")
+@IdClass(TbScIxrCmraSttsKey.class)
+public class TbScIxrCmraStts implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("교차로 ID")  // N VARCHAR2(10)
+    @Id
+    @Column(name = "IXR_ID", nullable = false, length = 10)
+    private String ixrId;
+
+    @ApiModelProperty("카메라 ID")  // N VARCHAR2(10)
+    @Id
+    @Column(name = "CMRA_ID", nullable = false, length = 10)
+    private String cmraId;
+
+    @ApiModelProperty("방향 구분 코드")  // N NUMBER(1)
+    @Id
+    @Column(name = "DRCT_DVSN_CD", nullable = false, columnDefinition = "NUMBER", length = 1)
+    private Integer drctDvsnCd;
+
+    @ApiModelProperty("수집 일시")  // N VARCHAR2(14)
+    @Column(name = "CLCT_DT", nullable = false, length = 14)
+    private String clctDt;
+
+    @ApiModelProperty("카메라 상태(0:비정상, 1:정상)")  // Y NUMBER(1)
+    @Column(name = "CMRA_STTS", columnDefinition = "NUMBER", length = 1)
+    private Integer cmraStts;
+
+    public TbScIxrCmraSttsDto toDto() {
+        return TbScIxrCmraSttsDto.builder()
+                .ixrId(this.ixrId)
+                .cmraId(this.cmraId)
+                .drctDvsnCd(this.drctDvsnCd)
+                .clctDt(this.clctDt)
+                .cmraStts(this.cmraStts)
+                .build();
+    }
+
+    public TbScIxrCmraStts(String ixrId, String cmraId, Integer drctDvsnCd) {
+        this.ixrId = ixrId;
+        this.cmraId = cmraId;
+        this.drctDvsnCd = drctDvsnCd;
+    }
+
+}

+ 62 - 0
src/main/java/com/its/op/entity/its/scrs/TbScIxrCmraSttsHs.java

@@ -0,0 +1,62 @@
+package com.its.op.entity.its.scrs;
+
+import com.its.op.dto.its.scrs.TbScIxrCmraSttsHsDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * 카메라 상태 이력 Entity Class
+ */
+@Getter
+@NoArgsConstructor//(access = AccessLevel.PROTECTED)
+@Builder
+@AllArgsConstructor
+@ApiModel("카메라 상태 이력")
+@Entity
+@Table(name = "TB_SC_IXR_CMRA_STTS_HS")
+@IdClass(TbScIxrCmraSttsHsKey.class)
+public class TbScIxrCmraSttsHs implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("수집 일시")  // N VARCHAR2(14)
+    @Id
+    @Column(name = "CLCT_DT", nullable = false, length = 14)
+    private String clctDt;
+
+    @ApiModelProperty("교차로 ID")  // N VARCHAR2(10)
+    @Id
+    @Column(name = "IXR_ID", nullable = false, length = 10)
+    private String ixrId;
+
+    @ApiModelProperty("카메라 ID")  // N VARCHAR2(10)
+    @Id
+    @Column(name = "CMRA_ID", nullable = false, length = 10)
+    private String cmraId;
+
+    @ApiModelProperty("방향 구분 코드")  // N NUMBER(1)
+    @Id
+    @Column(name = "DRCT_DVSN_CD", nullable = false, columnDefinition = "NUMBER", length = 1)
+    private Integer drctDvsnCd;
+
+    @ApiModelProperty("카메라 상태(0:비정상, 1:정상)")  // Y NUMBER(1)
+    @Column(name = "CMRA_STTS", columnDefinition = "NUMBER", length = 1)
+    private Integer cmraStts;
+
+    public TbScIxrCmraSttsHsDto toDto() {
+        return TbScIxrCmraSttsHsDto.builder()
+                .clctDt(this.clctDt)
+                .ixrId(this.ixrId)
+                .cmraId(this.cmraId)
+                .drctDvsnCd(this.drctDvsnCd)
+                .cmraStts(this.cmraStts)
+                .build();
+    }
+
+}

+ 29 - 0
src/main/java/com/its/op/entity/its/scrs/TbScIxrCmraSttsHsKey.java

@@ -0,0 +1,29 @@
+package com.its.op.entity.its.scrs;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 카메라 상태 이력 Key Class
+ */
+@Data
+@NoArgsConstructor//(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class TbScIxrCmraSttsHsKey implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String clctDt;
+
+    // IXR_ID, 교차로 ID  // N VARCHAR2(10)
+    private String ixrId;
+
+    // CMRA_ID, 카메라 ID  // N VARCHAR2(10)
+    private String cmraId;
+
+    // DRCT_DVSN_CD, 방향 구분 코드  // N NUMBER(1)
+    private Integer drctDvsnCd;
+
+}

+ 27 - 0
src/main/java/com/its/op/entity/its/scrs/TbScIxrCmraSttsKey.java

@@ -0,0 +1,27 @@
+package com.its.op.entity.its.scrs;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 카메라 상태 Key Class
+ */
+@Data
+@NoArgsConstructor//(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class TbScIxrCmraSttsKey implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    // IXR_ID, 교차로 ID  // N VARCHAR2(10)
+    private String ixrId;
+
+    // CMRA_ID, 카메라 ID  // N VARCHAR2(10)
+    private String cmraId;
+
+    // DRCT_DVSN_CD, 방향 구분 코드  // N NUMBER(1)
+    private Integer drctDvsnCd;
+
+}

+ 6 - 7
src/main/java/com/its/op/entity/its/scrs/TbScSgnlCtlr.java

@@ -128,14 +128,14 @@ public class TbScSgnlCtlr implements Serializable {
         return y_crdn;
     }
     public TbScSgnlCtlrDto toDto() {
-        String xCrdn = String.format("%09d", this.xCrdn);
-        String yCrdn = String.format("%09d", this.yCrdn);
-        Double x_crdn = (Integer.parseInt(xCrdn) / 1000000.);
-        Double y_crdn = (Integer.parseInt(yCrdn) / 1000000.);
+//        String xCrdn = String.format("%09d", this.xCrdn);
+//        String yCrdn = String.format("%09d", this.yCrdn);
+//        Double x_crdn = (Integer.parseInt(xCrdn) / 1000000.);
+//        Double y_crdn = (Integer.parseInt(yCrdn) / 1000000.);
         return TbScSgnlCtlrDto.builder()
                 .sgnlIxrNmbr(this.sgnlIxrNmbr)
-                .xCrdn(x_crdn)
-                .yCrdn(y_crdn)
+                .xCrdn(getXPos())
+                .yCrdn(getYPos())
                 .aring1phasCd(this.aring1phasCd)
                 .aring2phasCd(this.aring2phasCd)
                 .aring3phasCd(this.aring3phasCd)
@@ -246,7 +246,6 @@ public class TbScSgnlCtlr implements Serializable {
                 dto.setDegBO(dto.getDegBO() - 360);
             }
         }
-
         return dto;
     }
 

+ 5 - 2
src/main/java/com/its/op/service/its/common/CommonSttsService.java

@@ -6,6 +6,7 @@ import com.its.op.dto.its.facility.FcltSttsCntDto;
 import com.its.op.dto.its.facility.FcltSttsDto;
 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;
@@ -30,9 +31,9 @@ public class CommonSttsService {
     private final TbVdsCtlrService vdsService;
     private final TbRseCtlrService rseService;
     private final TbScSgnlCtlrService sgnlService;
+    private final TbScIxrCmraMngmService ccamService;
     private final Environment environment;
     private boolean isRunUtis = false;
-    //private RsemstService rseService = null;
 
     @PostConstruct
     void init() {
@@ -72,7 +73,9 @@ public class CommonSttsService {
         FcltSttsListDto sgnl = this.sgnlService.findAllSttsListTotal(true);
         result.getFcltList().add(sgnl.getFcltList().get(0));
 
-        // TODO: 스마트교차로카메라
+        // 스마트교차로 카메라
+        FcltSttsListDto ccam = this.ccamService.findAllSttsListTotal(true);
+        result.getFcltList().add(ccam.getFcltList().get(0));
 
         return result;
     }

+ 59 - 0
src/main/java/com/its/op/service/its/scrs/TbScIxrCmraMngmService.java

@@ -1,9 +1,14 @@
 package com.its.op.service.its.scrs;
 
 import com.its.op.dao.repository.its.scrs.TbScIxrCmraMngmRepository;
+import com.its.op.dto.its.common.FcltSttsDto;
+import com.its.op.dto.its.common.FcltSttsListDto;
+import com.its.op.dto.its.common.FcltSttsSummaryDto;
 import com.its.op.dto.its.scrs.TbScIxrCmraMngmDto;
+import com.its.op.dto.its.scrs.TbScIxrCmraSttsDto;
 import com.its.op.entity.its.scrs.TbScIxrCmraMngm;
 import com.its.op.entity.its.scrs.TbScIxrCmraMngmKey;
+import com.its.op.global.CodeManager;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -13,6 +18,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.NoSuchElementException;
 import java.util.Optional;
+import java.util.concurrent.atomic.AtomicInteger;
 
 @Slf4j
 @RequiredArgsConstructor
@@ -112,4 +118,57 @@ public class TbScIxrCmraMngmService {
         return result;
     }
 
+    @Transactional(readOnly = true)
+    public FcltSttsListDto findAllSttsListTotal(boolean total) {
+
+        String fcltType = "CCAM";
+        FcltSttsListDto result = new FcltSttsListDto();
+
+        AtomicInteger error = new AtomicInteger(0);
+        AtomicInteger normal = new AtomicInteger(0);
+
+        List<FcltSttsDto> sttsDtoList = new ArrayList<>();
+        List<TbScIxrCmraMngm> ctlrList = this.repo.findAllList();
+        ctlrList.forEach(obj -> {
+            TbScIxrCmraSttsDto dto = obj.toSttsDto();
+            if (total) {
+                FcltSttsDto stts = FcltSttsDto.builder()
+                        .fcltType(fcltType)
+                        .fcltNmbr(obj.getCmraId())
+                        .fcltId(String.valueOf(obj.getCmraId()))
+                        .fcltNm(obj.getIstlLctn())
+                        .fcltKind(String.valueOf(obj.getDrctDvsnCd()))
+                        .xCrdn(Double.parseDouble(obj.getCmraYCrdn()))
+                        .yCrdn(Double.parseDouble(obj.getCmraXCrdn()))
+                        .sttsCd(dto.getCmncSttsCd())
+                        .sttsDesc(dto.getCmncSttsDesc())
+                        .build();
+
+                sttsDtoList.add(stts);
+            }
+            if (CodeManager.CMNC_STTS_NORMAL.equals(dto.getCmncSttsCd())) {
+                normal.getAndIncrement();
+            }
+            else {
+                error.getAndIncrement();
+            }
+        });
+
+        FcltSttsSummaryDto summaryDto = FcltSttsSummaryDto.builder()
+                .fcltType(fcltType)
+                .fcltNm(fcltType)
+                .totalCnt(ctlrList.size())
+                .normalCnt(normal.get())
+                .errorCnt(error.get())
+                .colErrCnt(0)
+                .build();
+
+        summaryDto.init();
+        if (total) {
+            summaryDto.setFcltObjs(sttsDtoList);
+        }
+        result.getFcltList().add(summaryDto);
+
+        return result;
+    }
 }

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

@@ -0,0 +1,43 @@
+package com.its.op.service.its.scrs;
+
+import com.its.op.dao.repository.its.scrs.TbScIxrCmraSttsHsRepository;
+import com.its.op.dto.its.scrs.TbScIxrCmraSttsHsDto;
+import com.its.op.entity.its.scrs.TbScIxrCmraSttsHs;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbScIxrCmraSttsHsService {
+
+    private final TbScIxrCmraSttsHsRepository repo;
+
+    // 전체 데이터 조회
+    @Transactional(readOnly = true)
+    public List<TbScIxrCmraSttsHsDto> findAll() {
+        List<TbScIxrCmraSttsHsDto> result = new ArrayList<>();
+        List<TbScIxrCmraSttsHs> data = this.repo.findAll();
+        for (TbScIxrCmraSttsHs entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+    // 전체 데이터 조회
+    @Transactional(readOnly = true)
+    public List<TbScIxrCmraSttsHsDto> findAllList() {
+        List<TbScIxrCmraSttsHsDto> result = new ArrayList<>();
+        List<TbScIxrCmraSttsHs> data = this.repo.findAllList();
+        for (TbScIxrCmraSttsHs entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+}

+ 70 - 0
src/main/java/com/its/op/service/its/scrs/TbScIxrCmraSttsService.java

@@ -0,0 +1,70 @@
+package com.its.op.service.its.scrs;
+
+import com.its.op.dao.repository.its.scrs.TbScIxrCmraSttsRepository;
+import com.its.op.dto.its.common.FcltSttsDto;
+import com.its.op.dto.its.common.FcltSttsListDto;
+import com.its.op.dto.its.common.FcltSttsSummaryDto;
+import com.its.op.dto.its.scrs.TbScIxrCmraSttsDto;
+import com.its.op.entity.its.scrs.TbScIxrCmraMngm;
+import com.its.op.entity.its.scrs.TbScIxrCmraStts;
+import com.its.op.entity.its.scrs.TbScIxrCmraSttsKey;
+import com.its.op.global.CodeManager;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Optional;
+import java.util.concurrent.atomic.AtomicInteger;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbScIxrCmraSttsService {
+
+    private final TbScIxrCmraSttsRepository repo;
+
+    // 데이터 1건 조회, 없으면 exception
+    private TbScIxrCmraStts requireOne(TbScIxrCmraSttsKey ixrId) throws NoSuchElementException {
+        Optional<TbScIxrCmraStts> info = this.repo.findById(ixrId);
+        if (info.isPresent()) {
+            return info.get();
+        }
+        else {
+            throw new NoSuchElementException("데이터가 존재하지 않습니다: " + ixrId);
+        }
+    }
+
+    // 전체 데이터 조회
+    @Transactional(readOnly = true)
+    public List<TbScIxrCmraSttsDto> findAll() {
+        List<TbScIxrCmraSttsDto> result = new ArrayList<>();
+        List<TbScIxrCmraStts> data = this.repo.findAll();
+        for (TbScIxrCmraStts entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+    // 전체 데이터 조회
+    @Transactional(readOnly = true)
+    public List<TbScIxrCmraSttsDto> findAllList() {
+        List<TbScIxrCmraSttsDto> result = new ArrayList<>();
+        List<TbScIxrCmraStts> data = this.repo.findAllList();
+        for (TbScIxrCmraStts entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
+    @Transactional(readOnly = true)
+    public TbScIxrCmraSttsDto findById(TbScIxrCmraSttsKey ixrId) {
+        TbScIxrCmraStts entity = requireOne(ixrId);
+        return entity.toDto();
+    }
+
+}