shjung 2 年之前
父節點
當前提交
cf09797794

+ 72 - 0
src/main/java/com/its/op/controller/its/scrs/TbScIxrCmraMngmController.java

@@ -0,0 +1,72 @@
+package com.its.op.controller.its.scrs;
+
+import com.its.op.dto.its.scrs.TbScIxrCmraMngmDto;
+import com.its.op.entity.its.scrs.TbScIxrCmraMngmKey;
+import com.its.op.service.its.scrs.TbScIxrCmraMngmService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+@Api(tags = "14.스마트교차로-0.관리-1.스마트교차로카메라 관리")
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/scrs/tb_sc_ixr_cmra_mngm")
+public class TbScIxrCmraMngmController {
+
+    private final TbScIxrCmraMngmService service;
+
+    @ApiOperation(value = "카메라 관리 전체조회(TB_SC_IXR_CMRA_MNGM)", response = TbScIxrCmraMngmDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbScIxrCmraMngmDto> findAll() {
+        return this.service.findAll();
+    }
+
+    @ApiOperation(value = "카메라 관리 전체조회(TB_SC_IXR_CMRA_MNGM)", response = TbScIxrCmraMngmDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/list", produces = {"application/json; charset=utf8"})
+    public List<TbScIxrCmraMngmDto> findAllList() {
+        return this.service.findAllList();
+    }
+
+    @ApiOperation(value = "카메라 관리 개별조회(TB_SC_IXR_CMRA_MNGM)", response = TbScIxrCmraMngmDto.class)
+    @GetMapping(value = "/{ixrId}", produces = {"application/json; charset=utf8"})
+    public TbScIxrCmraMngmDto findById(@PathVariable("ixrId") final TbScIxrCmraMngmKey ixrId) {
+        return this.service.findById(ixrId);
+    }
+
+    @ApiOperation(value = "카메라 관리 정보변경(TB_SC_IXR_CMRA_MNGM)", response = TbScIxrCmraMngmDto.class)
+    @PutMapping(value = "/{ixrId}", produces = {"application/json; charset=utf8"})
+    public TbScIxrCmraMngmDto updateById(@PathVariable("ixrId") final TbScIxrCmraMngmKey ixrId, @RequestBody @Valid final TbScIxrCmraMngmDto.TbScIxrCmraMngmUpdReq req) {
+        return this.service.updateById(ixrId, req);
+    }
+
+    @ApiOperation(value = "카메라 관리 정보변경/생성-목록(TB_SC_IXR_CMRA_MNGM)", response = TbScIxrCmraMngmDto.class, responseContainer = "ArrayList")
+    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbScIxrCmraMngmDto> mergeInfoList(@RequestBody @Valid final List<TbScIxrCmraMngmDto.TbScIxrCmraMngmUpdReq> listReq) {
+        return this.service.mergeInfoList(listReq);
+    }
+
+    @ApiOperation(value = "카메라 관리 정보변경/생성-개별(TB_SC_IXR_CMRA_MNGM)", response = TbScIxrCmraMngmDto.class)
+    @PostMapping(value = "/{ixrId}", produces = {"application/json; charset=utf8"})
+    public TbScIxrCmraMngmDto mergeInfo(@PathVariable("ixrId") final TbScIxrCmraMngmKey ixrId, @RequestBody @Valid final TbScIxrCmraMngmDto.TbScIxrCmraMngmUpdReq req) {
+        return this.service.mergeInfo(req);
+    }
+
+    @ApiOperation(value = "카메라 관리 정보삭제-개별(TB_SC_IXR_CMRA_MNGM)", response = TbScIxrCmraMngmDto.class)
+    @DeleteMapping(value = "/{ixrId}", produces = {"application/json; charset=utf8"})
+    public TbScIxrCmraMngmDto deleteDataById(@PathVariable("ixrId") final TbScIxrCmraMngmKey ixrId) {
+        return this.service.deleteById(ixrId);
+    }
+
+    @ApiOperation(value = "카메라 관리 정보삭제-목록(TB_SC_IXR_CMRA_MNGM)", response = TbScIxrCmraMngmDto.class, responseContainer = "ArrayList")
+    @DeleteMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbScIxrCmraMngmDto> deleteDataByIds(@RequestBody @Valid final List<TbScIxrCmraMngmKey> ids) {
+        return this.service.deleteByIds(ids);
+    }
+
+}

+ 71 - 0
src/main/java/com/its/op/controller/its/scrs/TbScIxrMngmController.java

@@ -0,0 +1,71 @@
+package com.its.op.controller.its.scrs;
+
+import com.its.op.dto.its.scrs.TbScIxrMngmDto;
+import com.its.op.service.its.scrs.TbScIxrMngmService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+@Api(tags = "14.스마트교차로-0.관리-0.교차로 관리")
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/scrs/tb_sc_ixr_mngm")
+public class TbScIxrMngmController {
+
+    private final TbScIxrMngmService service;
+
+    @ApiOperation(value = "교차로 관리 전체조회(TB_SC_IXR_MNGM)", response = TbScIxrMngmDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbScIxrMngmDto> findAll() {
+        return this.service.findAll();
+    }
+
+    @ApiOperation(value = "교차로 관리 전체조회(TB_SC_IXR_MNGM)", response = TbScIxrMngmDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/list", produces = {"application/json; charset=utf8"})
+    public List<TbScIxrMngmDto> findAllList() {
+        return this.service.findAllList();
+    }
+
+    @ApiOperation(value = "교차로 관리 개별조회(TB_SC_IXR_MNGM)", response = TbScIxrMngmDto.class)
+    @GetMapping(value = "/{ixrId}", produces = {"application/json; charset=utf8"})
+    public TbScIxrMngmDto findById(@PathVariable("ixrId") final String ixrId) {
+        return this.service.findById(ixrId);
+    }
+
+    @ApiOperation(value = "교차로 관리 정보변경(TB_SC_IXR_MNGM)", response = TbScIxrMngmDto.class)
+    @PutMapping(value = "/{ixrId}", produces = {"application/json; charset=utf8"})
+    public TbScIxrMngmDto updateById(@PathVariable("ixrId") final String ixrId, @RequestBody @Valid final TbScIxrMngmDto.TbScIxrMngmUpdReq req) {
+        return this.service.updateById(ixrId, req);
+    }
+
+    @ApiOperation(value = "교차로 관리 정보변경/생성-목록(TB_SC_IXR_MNGM)", response = TbScIxrMngmDto.class, responseContainer = "ArrayList")
+    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbScIxrMngmDto> mergeInfoList(@RequestBody @Valid final List<TbScIxrMngmDto.TbScIxrMngmUpdReq> listReq) {
+        return this.service.mergeInfoList(listReq);
+    }
+
+    @ApiOperation(value = "교차로 관리 정보변경/생성-개별(TB_SC_IXR_MNGM)", response = TbScIxrMngmDto.class)
+    @PostMapping(value = "/{ixrId}", produces = {"application/json; charset=utf8"})
+    public TbScIxrMngmDto mergeInfo(@PathVariable("ixrId") final String ixrId, @RequestBody @Valid final TbScIxrMngmDto.TbScIxrMngmUpdReq req) {
+        return this.service.mergeInfo(req);
+    }
+
+    @ApiOperation(value = "교차로 관리 정보삭제-개별(TB_SC_IXR_MNGM)", response = TbScIxrMngmDto.class)
+    @DeleteMapping(value = "/{ixrId}", produces = {"application/json; charset=utf8"})
+    public TbScIxrMngmDto deleteDataById(@PathVariable("ixrId") final String ixrId) {
+        return this.service.deleteById(ixrId);
+    }
+
+    @ApiOperation(value = "교차로 관리 정보삭제-목록(TB_SC_IXR_MNGM)", response = TbScIxrMngmDto.class, responseContainer = "ArrayList")
+    @DeleteMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbScIxrMngmDto> deleteDataByIds(@RequestBody @Valid final List<String> ids) {
+        return this.service.deleteByIds(ids);
+    }
+
+}

+ 7 - 1
src/main/java/com/its/op/dao/repository/its/link/TbClctSystSttsHsRepository.java

@@ -23,6 +23,8 @@ public interface TbClctSystSttsHsRepository extends JpaRepository<TbClctSystStts
             "      nvl(sum(case when p.clctSystCd = 'UTIS01' then p.clctNum end), 0) AS utis01, " +
             "      nvl(sum(case when p.clctSystCd = 'UTIS02' then p.clctNum end), 0) AS utis02, " +
             "      nvl(sum(case when p.clctSystCd = 'VDS01'  then p.clctNum end), 0) AS vds01,  " +
+            "      nvl(sum(case when p.clctSystCd = 'DSRC01' then p.clctNum end), 0) AS dsrc01, " +
+            "      nvl(sum(case when p.clctSystCd = 'GITS01' then p.clctNum end), 0) AS gits01, " +
             "      nvl(sum(case when p.clctSystCd = 'MOCT01' then p.clctNum end), 0) AS moct01  " +
             "  FROM TbClctSystSttsHs p " +
             " WHERE p.prcnDt BETWEEN :fromDt AND :toDt " +
@@ -34,7 +36,9 @@ public interface TbClctSystSttsHsRepository extends JpaRepository<TbClctSystStts
             "       a.oper01 as oper01, " +
             "       a.utis01 as utis01, " +
             "       a.utis02 as utis02, " +
-            "       a.vds01  as vds01, " +
+            "       a.vds01  as vds01,  " +
+            "       a.dsrc01 as dsrc01, " +
+            "       a.gits01 as gits01, " +
             "       a.moct01 as moct01, " +
             "       b.missNum as missNum, " +
             "       b.adjsNum as adjsNum, " +
@@ -45,6 +49,8 @@ public interface TbClctSystSttsHsRepository extends JpaRepository<TbClctSystStts
             "      nvl(sum(case when p.CLCT_SYST_CD = 'UTIS01' then p.FUSN_NUM end), 0) AS utis01, " +
             "      nvl(sum(case when p.CLCT_SYST_CD = 'UTIS02' then p.FUSN_NUM end), 0) AS utis02, " +
             "      nvl(sum(case when p.CLCT_SYST_CD = 'VDS01'  then p.FUSN_NUM end), 0) AS vds01,  " +
+            "      nvl(sum(case when p.CLCT_SYST_CD = 'DSRC01' then p.FUSN_NUM end), 0) AS dsrc01, " +
+            "      nvl(sum(case when p.CLCT_SYST_CD = 'GITS01' then p.FUSN_NUM end), 0) AS gits01, " +
             "      nvl(sum(case when p.CLCT_SYST_CD = 'MOCT01' then p.FUSN_NUM end), 0) AS moct01  " +
             "  FROM TB_CLCT_SYST_STTS_HS p " +
             " WHERE p.PRCN_DT BETWEEN :fromDt AND :toDt " +

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

@@ -0,0 +1,21 @@
+package com.its.op.dao.repository.its.scrs;
+
+import com.its.op.entity.its.scrs.TbScIxrCmraMngm;
+import com.its.op.entity.its.scrs.TbScIxrCmraMngmKey;
+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 TbScIxrCmraMngmRepository extends JpaRepository<TbScIxrCmraMngm, TbScIxrCmraMngmKey>, JpaSpecificationExecutor<TbScIxrCmraMngm> {
+
+    @Query("select p from TbScIxrCmraMngm p")
+    List<TbScIxrCmraMngm> findAll();
+
+    @Query("select p from TbScIxrCmraMngm p")
+    List<TbScIxrCmraMngm> findAllList();
+
+}

+ 20 - 0
src/main/java/com/its/op/dao/repository/its/scrs/TbScIxrMngmRepository.java

@@ -0,0 +1,20 @@
+package com.its.op.dao.repository.its.scrs;
+
+import com.its.op.entity.its.scrs.TbScIxrMngm;
+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 TbScIxrMngmRepository extends JpaRepository<TbScIxrMngm, String>, JpaSpecificationExecutor<TbScIxrMngm> {
+
+    @Query("select p from TbScIxrMngm p")
+    List<TbScIxrMngm> findAll();
+
+    @Query("select p from TbScIxrMngm p")
+    List<TbScIxrMngm> findAllList();
+
+}

+ 12 - 2
src/main/java/com/its/op/dto/its/analysis/TbClctSystSttsHsClctDto.java

@@ -46,6 +46,14 @@ public class TbClctSystSttsHsClctDto implements Serializable {
     @JsonProperty("VDS01")
     private Integer vds01;
 
+    @ApiModelProperty("DSRC 속도")  // Y NUMBER(3)
+    @JsonProperty("DSRC01")
+    private Integer dsrc01;
+
+    @ApiModelProperty("GITS 속도")  // Y NUMBER(3)
+    @JsonProperty("GITS01")
+    private Integer gits01;
+
     @ApiModelProperty("민간정보 속도")  // Y NUMBER(3)
     @JsonProperty("MOCT01")
     private Integer moct01;
@@ -54,12 +62,14 @@ public class TbClctSystSttsHsClctDto implements Serializable {
         this.clctTot = this.oper01 + this.utis01 + this.utis02 + this.vds01 + this.moct01;
     }
 
-    public TbClctSystSttsHsClctDto(String prcnDt, BigDecimal OPER01, BigDecimal UTIS01, BigDecimal UTIS02, BigDecimal VDS01, BigDecimal MOCT01) {
+    public TbClctSystSttsHsClctDto(String prcnDt, BigDecimal OPER01, BigDecimal UTIS01, BigDecimal UTIS02, BigDecimal VDS01, BigDecimal DSRC01, BigDecimal GITS01, BigDecimal MOCT01) {
         this.prcnDt = prcnDt;
         this.oper01 = OPER01.intValue();
         this.utis01 = UTIS01.intValue();
         this.utis02 = UTIS02.intValue();
-        this.vds01 = VDS01.intValue();
+        this.vds01  = VDS01.intValue();
+        this.dsrc01 = DSRC01.intValue();
+        this.gits01 = GITS01.intValue();
         this.moct01 = MOCT01.intValue();
         this.clctTot = 0;
     }

+ 2 - 0
src/main/java/com/its/op/dto/its/analysis/TbClctSystSttsHsClctInf.java

@@ -12,6 +12,8 @@ public interface TbClctSystSttsHsClctInf {
     BigDecimal getUtis01();
     BigDecimal getUtis02();
     BigDecimal getVds01();
+    BigDecimal getDsrc01();
+    BigDecimal getGits01();
     BigDecimal getMoct01();
 
 }

+ 254 - 0
src/main/java/com/its/op/dto/its/scrs/TbScIxrCmraMngmDto.java

@@ -0,0 +1,254 @@
+package com.its.op.dto.its.scrs;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.op.entity.its.scrs.TbScIxrCmraMngm;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.validation.constraints.PositiveOrZero;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * 카메라 관리 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("TbScIxrCmraMngmDto(카메라 관리)")
+public class TbScIxrCmraMngmDto 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("설치 위치")  // Y VARCHAR2(40)
+    @JsonProperty("istl_lctn")
+    private String istlLctn;
+
+    @ApiModelProperty("카메라 IP")  // Y VARCHAR2(16)
+    @JsonProperty("cmra_ip")
+    private String cmraIp;
+
+    @ApiModelProperty("카메라 PORT")  // Y VARCHAR2(4)
+    @JsonProperty("cmra_port")
+    private String cmraPort;
+
+    @ApiModelProperty("사용 유무")  // Y NUMBER(1)
+    @JsonProperty("use_en")
+    private Integer useEn;
+
+    @ApiModelProperty("카메라 로그인 ID")  // Y VARCHAR2(16)
+    @JsonProperty("cmra_logn_id")
+    private String cmraLognId;
+
+    @ApiModelProperty("카메라 로그인 비밀번호")  // Y VARCHAR2(16)
+    @JsonProperty("cmra_logn_pw")
+    private String cmraLognPw;
+
+    @ApiModelProperty("카메라 HTTP PORT")  // Y NUMBER(2)
+    @JsonProperty("cmra_http_port")
+    private Integer cmraHttpPort;
+
+    @ApiModelProperty("스트림 URL")  // Y VARCHAR2(32)
+    @JsonProperty("stre_url")
+    private String streUrl;
+
+    @ApiModelProperty("카메라 URL")  // Y VARCHAR2(100)
+    @JsonProperty("cmra_url")
+    private String cmraUrl;
+
+    @ApiModelProperty("카메라 유형")  // Y NUMBER(1)
+    @JsonProperty("cmra_type")
+    private Integer cmraType;
+
+    @ApiModelProperty("카메라 X 좌표")  // Y VARCHAR2(20)
+    @JsonProperty("cmra_x_crdn")
+    private String cmraXCrdn;
+
+    @ApiModelProperty("카메라 Y 좌표")  // Y VARCHAR2(20)
+    @JsonProperty("cmra_y_crdn")
+    private String cmraYCrdn;
+
+    @ApiModelProperty("카메라 각도")  // Y NUMBER(3)
+    @JsonProperty("cmra_angl")
+    private Integer cmraAngl;
+
+    @ApiModelProperty("홈페이지 표출 유무")  // Y NUMBER(1)
+    @JsonProperty("hmpg_dspl_en")
+    private Integer hmpgDsplEn;
+
+    @ApiModelProperty("버스 전용 차로 유무")  // Y NUMBER(1)
+    @JsonProperty("bus_dvrs_lane_en")
+    private Integer busDvrsLaneEn;
+
+    @ApiModelProperty("서비스 분석 유무")  // Y NUMBER(1)
+    @JsonProperty("srvc_anly_en")
+    private Integer srvcAnlyEn;
+
+    // Code Description Field
+    @ApiModelProperty("방향 구분 코드 설명")
+    @JsonProperty("drct_dvsn_desc")    // DRCT_DVSN_CD
+    private String drctDvsnDesc;
+
+    @ApiModel("TbScIxrCmraMngmUpdReq(카메라 관리 정보변경)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor//(access = AccessLevel.PROTECTED)
+    public static class TbScIxrCmraMngmUpdReq {
+
+        @ApiModelProperty("교차로 ID, Nullable = N, VARCHAR2(10)")  // N VARCHAR2(10)
+        @JsonProperty("ixr_id")
+        @Size(min=1, max=10)
+        private String ixrId;
+
+        @ApiModelProperty("카메라 ID, Nullable = N, VARCHAR2(10)")  // N VARCHAR2(10)
+        @JsonProperty("cmra_id")
+        @Size(min=1, max=10)
+        private String cmraId;
+
+        @ApiModelProperty("방향 구분 코드, Nullable = N, NUMBER(1)")  // N NUMBER(1)
+        @JsonProperty("drct_dvsn_cd")
+        @PositiveOrZero
+        private Integer drctDvsnCd;
+
+        @ApiModelProperty("설치 위치, Nullable = Y, VARCHAR2(40)")  // Y VARCHAR2(40)
+        @JsonProperty("istl_lctn")
+        @Size(min=1, max=40)
+        private String istlLctn;
+
+        @ApiModelProperty("카메라 IP, Nullable = Y, VARCHAR2(16)")  // Y VARCHAR2(16)
+        @JsonProperty("cmra_ip")
+        @Size(min=1, max=16)
+        private String cmraIp;
+
+        @ApiModelProperty("카메라 PORT, Nullable = Y, VARCHAR2(4)")  // Y VARCHAR2(4)
+        @JsonProperty("cmra_port")
+        @Size(min=1, max=4)
+        private String cmraPort;
+
+        @ApiModelProperty("사용 유무, Nullable = Y, NUMBER(1)")  // Y NUMBER(1)
+        @JsonProperty("use_en")
+        @PositiveOrZero
+        private Integer useEn;
+
+        @ApiModelProperty("카메라 로그인 ID, Nullable = Y, VARCHAR2(16)")  // Y VARCHAR2(16)
+        @JsonProperty("cmra_logn_id")
+        @Size(min=1, max=16)
+        private String cmraLognId;
+
+        @ApiModelProperty("카메라 로그인 비밀번호, Nullable = Y, VARCHAR2(16)")  // Y VARCHAR2(16)
+        @JsonProperty("cmra_logn_pw")
+        @Size(min=1, max=16)
+        private String cmraLognPw;
+
+        @ApiModelProperty("카메라 HTTP PORT, Nullable = Y, NUMBER(2)")  // Y NUMBER(2)
+        @JsonProperty("cmra_http_port")
+        @PositiveOrZero
+        private Integer cmraHttpPort;
+
+        @ApiModelProperty("스트림 URL, Nullable = Y, VARCHAR2(32)")  // Y VARCHAR2(32)
+        @JsonProperty("stre_url")
+        @Size(min=1, max=32)
+        private String streUrl;
+
+        @ApiModelProperty("카메라 URL, Nullable = Y, VARCHAR2(100)")  // Y VARCHAR2(100)
+        @JsonProperty("cmra_url")
+        @Size(min=1, max=100)
+        private String cmraUrl;
+
+        @ApiModelProperty("카메라 유형, Nullable = Y, NUMBER(1)")  // Y NUMBER(1)
+        @JsonProperty("cmra_type")
+        @PositiveOrZero
+        private Integer cmraType;
+
+        @ApiModelProperty("카메라 X 좌표, Nullable = Y, VARCHAR2(20)")  // Y VARCHAR2(20)
+        @JsonProperty("cmra_x_crdn")
+        @Size(min=1, max=20)
+        private String cmraXCrdn;
+
+        @ApiModelProperty("카메라 Y 좌표, Nullable = Y, VARCHAR2(20)")  // Y VARCHAR2(20)
+        @JsonProperty("cmra_y_crdn")
+        @Size(min=1, max=20)
+        private String cmraYCrdn;
+
+        @ApiModelProperty("카메라 각도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("cmra_angl")
+        @PositiveOrZero
+        private Integer cmraAngl;
+
+        @ApiModelProperty("홈페이지 표출 유무, Nullable = Y, NUMBER(1)")  // Y NUMBER(1)
+        @JsonProperty("hmpg_dspl_en")
+        @PositiveOrZero
+        private Integer hmpgDsplEn;
+
+        @ApiModelProperty("버스 전용 차로 유무, Nullable = Y, NUMBER(1)")  // Y NUMBER(1)
+        @JsonProperty("bus_dvrs_lane_en")
+        @PositiveOrZero
+        private Integer busDvrsLaneEn;
+
+        @ApiModelProperty("서비스 분석 유무, Nullable = Y, NUMBER(1)")  // Y NUMBER(1)
+        @JsonProperty("srvc_anly_en")
+        @PositiveOrZero
+        private Integer srvcAnlyEn;
+
+        @Builder
+        public TbScIxrCmraMngmUpdReq(String ixr_id, String cmra_id, Integer drct_dvsn_cd, String istl_lctn, String cmra_ip, String cmra_port, Integer use_en, String cmra_logn_id, String cmra_logn_pw, Integer cmra_http_port, String stre_url, String cmra_url, Integer cmra_type, String cmra_x_crdn, String cmra_y_crdn, Integer cmra_angl, Integer hmpg_dspl_en, Integer bus_dvrs_lane_en, Integer srvc_anly_en) {
+            this.ixrId = ixr_id;
+            this.cmraId = cmra_id;
+            this.drctDvsnCd = drct_dvsn_cd;
+            this.istlLctn = istl_lctn;
+            this.cmraIp = cmra_ip;
+            this.cmraPort = cmra_port;
+            this.useEn = use_en;
+            this.cmraLognId = cmra_logn_id;
+            this.cmraLognPw = cmra_logn_pw;
+            this.cmraHttpPort = cmra_http_port;
+            this.streUrl = stre_url;
+            this.cmraUrl = cmra_url;
+            this.cmraType = cmra_type;
+            this.cmraXCrdn = cmra_x_crdn;
+            this.cmraYCrdn = cmra_y_crdn;
+            this.cmraAngl = cmra_angl;
+            this.hmpgDsplEn = hmpg_dspl_en;
+            this.busDvrsLaneEn = bus_dvrs_lane_en;
+            this.srvcAnlyEn = srvc_anly_en;
+        }
+
+        public TbScIxrCmraMngm toEntity() {
+            return TbScIxrCmraMngm.builder()
+                    .ixrId(this.ixrId)
+                    .cmraId(this.cmraId)
+                    .drctDvsnCd(this.drctDvsnCd)
+                    .istlLctn(this.istlLctn)
+                    .cmraIp(this.cmraIp)
+                    .cmraPort(this.cmraPort)
+                    .useEn(this.useEn)
+                    .cmraLognId(this.cmraLognId)
+                    .cmraLognPw(this.cmraLognPw)
+                    .cmraHttpPort(this.cmraHttpPort)
+                    .streUrl(this.streUrl)
+                    .cmraUrl(this.cmraUrl)
+                    .cmraType(this.cmraType)
+                    .cmraXCrdn(this.cmraXCrdn)
+                    .cmraYCrdn(this.cmraYCrdn)
+                    .cmraAngl(this.cmraAngl)
+                    .hmpgDsplEn(this.hmpgDsplEn)
+                    .busDvrsLaneEn(this.busDvrsLaneEn)
+                    .srvcAnlyEn(this.srvcAnlyEn)
+                    .build();
+        }
+
+    }
+
+}

+ 140 - 0
src/main/java/com/its/op/dto/its/scrs/TbScIxrMngmDto.java

@@ -0,0 +1,140 @@
+package com.its.op.dto.its.scrs;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.op.entity.its.scrs.TbScIxrMngm;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.validation.constraints.PositiveOrZero;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * 교차로 관리 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("TbScIxrMngmDto(교차로 관리)")
+public class TbScIxrMngmDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("교차로 ID")  // N VARCHAR2(10)
+    @JsonProperty("ixr_id")
+    private String ixrId;
+
+    @ApiModelProperty("교차로 명")  // Y VARCHAR2(50)
+    @JsonProperty("ixr_nm")
+    private String ixrNm;
+
+    @ApiModelProperty("현시 수")  // Y NUMBER(1)
+    @JsonProperty("phas_cnt")
+    private Integer phasCnt;
+
+    @ApiModelProperty("지점 특성")  // Y VARCHAR2(20)
+    @JsonProperty("spot_fetr")
+    private String spotFetr;
+
+    @ApiModelProperty("교차로 X 좌표")  // Y VARCHAR2(20)
+    @JsonProperty("ixr_x_crdn")
+    private String ixrXCrdn;
+
+    @ApiModelProperty("교차로 Y 좌표")  // Y VARCHAR2(20)
+    @JsonProperty("ixr_y_crdn")
+    private String ixrYCrdn;
+
+    @ApiModelProperty("교차로 유형")  // Y NUMBER(1)
+    @JsonProperty("ixr_type")
+    private Integer ixrType;
+
+    @ApiModelProperty("구분")  // Y NUMBER(1)
+    @JsonProperty("dvsn")
+    private Integer dvsn;
+
+    @ApiModelProperty("사용 유무")  // Y NUMBER(1)
+    @JsonProperty("use_en")
+    private Integer useEn;
+
+    // Code Description Field
+    @ApiModel("TbScIxrMngmUpdReq(교차로 관리 정보변경)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor//(access = AccessLevel.PROTECTED)
+    public static class TbScIxrMngmUpdReq {
+
+        @ApiModelProperty("교차로 ID, Nullable = N, VARCHAR2(10)")  // N VARCHAR2(10)
+        @JsonProperty("ixr_id")
+        @Size(min=1, max=10)
+        private String ixrId;
+
+        @ApiModelProperty("교차로 명, Nullable = Y, VARCHAR2(50)")  // Y VARCHAR2(50)
+        @JsonProperty("ixr_nm")
+        @Size(min=1, max=50)
+        private String ixrNm;
+
+        @ApiModelProperty("현시 수, Nullable = Y, NUMBER(1)")  // Y NUMBER(1)
+        @JsonProperty("phas_cnt")
+        @PositiveOrZero
+        private Integer phasCnt;
+
+        @ApiModelProperty("지점 특성, Nullable = Y, VARCHAR2(20)")  // Y VARCHAR2(20)
+        @JsonProperty("spot_fetr")
+        @Size(min=1, max=20)
+        private String spotFetr;
+
+        @ApiModelProperty("교차로 X 좌표, Nullable = Y, VARCHAR2(20)")  // Y VARCHAR2(20)
+        @JsonProperty("ixr_x_crdn")
+        @Size(min=1, max=20)
+        private String ixrXCrdn;
+
+        @ApiModelProperty("교차로 Y 좌표, Nullable = Y, VARCHAR2(20)")  // Y VARCHAR2(20)
+        @JsonProperty("ixr_y_crdn")
+        @Size(min=1, max=20)
+        private String ixrYCrdn;
+
+        @ApiModelProperty("교차로 유형, Nullable = Y, NUMBER(1)")  // Y NUMBER(1)
+        @JsonProperty("ixr_type")
+        @PositiveOrZero
+        private Integer ixrType;
+
+        @ApiModelProperty("구분, Nullable = Y, NUMBER(1)")  // Y NUMBER(1)
+        @JsonProperty("dvsn")
+        @PositiveOrZero
+        private Integer dvsn;
+
+        @ApiModelProperty("사용 유무, Nullable = Y, NUMBER(1)")  // Y NUMBER(1)
+        @JsonProperty("use_en")
+        @PositiveOrZero
+        private Integer useEn;
+
+        @Builder
+        public TbScIxrMngmUpdReq(String ixr_id, String ixr_nm, Integer phas_cnt, String spot_fetr, String ixr_x_crdn, String ixr_y_crdn, Integer ixr_type, Integer dvsn, Integer use_en) {
+            this.ixrId = ixr_id;
+            this.ixrNm = ixr_nm;
+            this.phasCnt = phas_cnt;
+            this.spotFetr = spot_fetr;
+            this.ixrXCrdn = ixr_x_crdn;
+            this.ixrYCrdn = ixr_y_crdn;
+            this.ixrType = ixr_type;
+            this.dvsn = dvsn;
+            this.useEn = use_en;
+        }
+
+        public TbScIxrMngm toEntity() {
+            return TbScIxrMngm.builder()
+                    .ixrId(this.ixrId)
+                    .ixrNm(this.ixrNm)
+                    .phasCnt(this.phasCnt)
+                    .spotFetr(this.spotFetr)
+                    .ixrXCrdn(this.ixrXCrdn)
+                    .ixrYCrdn(this.ixrYCrdn)
+                    .ixrType(this.ixrType)
+                    .dvsn(this.dvsn)
+                    .useEn(this.useEn)
+                    .build();
+        }
+
+    }
+
+}

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

@@ -0,0 +1,156 @@
+package com.its.op.entity.its.scrs;
+
+import com.its.op.dto.its.scrs.TbScIxrCmraMngmDto;
+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_MNGM")
+@IdClass(TbScIxrCmraMngmKey.class)
+public class TbScIxrCmraMngm 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("설치 위치")  // Y VARCHAR2(40)
+    @Column(name = "ISTL_LCTN", length = 40)
+    private String istlLctn;
+
+    @ApiModelProperty("카메라 IP")  // Y VARCHAR2(16)
+    @Column(name = "CMRA_IP", length = 16)
+    private String cmraIp;
+
+    @ApiModelProperty("카메라 PORT")  // Y VARCHAR2(4)
+    @Column(name = "CMRA_PORT", length = 4)
+    private String cmraPort;
+
+    @ApiModelProperty("사용 유무")  // Y NUMBER(1)
+    @Column(name = "USE_EN", columnDefinition = "NUMBER", length = 1)
+    private Integer useEn;
+
+    @ApiModelProperty("카메라 로그인 ID")  // Y VARCHAR2(16)
+    @Column(name = "CMRA_LOGN_ID", length = 16)
+    private String cmraLognId;
+
+    @ApiModelProperty("카메라 로그인 비밀번호")  // Y VARCHAR2(16)
+    @Column(name = "CMRA_LOGN_PW", length = 16)
+    private String cmraLognPw;
+
+    @ApiModelProperty("카메라 HTTP PORT")  // Y NUMBER(2)
+    @Column(name = "CMRA_HTTP_PORT", columnDefinition = "NUMBER", length = 2)
+    private Integer cmraHttpPort;
+
+    @ApiModelProperty("스트림 URL")  // Y VARCHAR2(32)
+    @Column(name = "STRE_URL", length = 32)
+    private String streUrl;
+
+    @ApiModelProperty("카메라 URL")  // Y VARCHAR2(100)
+    @Column(name = "CMRA_URL", length = 100)
+    private String cmraUrl;
+
+    @ApiModelProperty("카메라 유형")  // Y NUMBER(1)
+    @Column(name = "CMRA_TYPE", columnDefinition = "NUMBER", length = 1)
+    private Integer cmraType;
+
+    @ApiModelProperty("카메라 X 좌표")  // Y VARCHAR2(20)
+    @Column(name = "CMRA_X_CRDN", length = 20)
+    private String cmraXCrdn;
+
+    @ApiModelProperty("카메라 Y 좌표")  // Y VARCHAR2(20)
+    @Column(name = "CMRA_Y_CRDN", length = 20)
+    private String cmraYCrdn;
+
+    @ApiModelProperty("카메라 각도")  // Y NUMBER(3)
+    @Column(name = "CMRA_ANGL", columnDefinition = "NUMBER", length = 3)
+    private Integer cmraAngl;
+
+    @ApiModelProperty("홈페이지 표출 유무")  // Y NUMBER(1)
+    @Column(name = "HMPG_DSPL_EN", columnDefinition = "NUMBER", length = 1)
+    private Integer hmpgDsplEn;
+
+    @ApiModelProperty("버스 전용 차로 유무")  // Y NUMBER(1)
+    @Column(name = "BUS_DVRS_LANE_EN", columnDefinition = "NUMBER", length = 1)
+    private Integer busDvrsLaneEn;
+
+    @ApiModelProperty("서비스 분석 유무")  // Y NUMBER(1)
+    @Column(name = "SRVC_ANLY_EN", columnDefinition = "NUMBER", length = 1)
+    private Integer srvcAnlyEn;
+
+    public TbScIxrCmraMngmDto toDto() {
+        return TbScIxrCmraMngmDto.builder()
+                .ixrId(this.ixrId)
+                .cmraId(this.cmraId)
+                .drctDvsnCd(this.drctDvsnCd)
+                .istlLctn(this.istlLctn)
+                .cmraIp(this.cmraIp)
+                .cmraPort(this.cmraPort)
+                .useEn(this.useEn)
+                .cmraLognId(this.cmraLognId)
+                .cmraLognPw(this.cmraLognPw)
+                .cmraHttpPort(this.cmraHttpPort)
+                .streUrl(this.streUrl)
+                .cmraUrl(this.cmraUrl)
+                .cmraType(this.cmraType)
+                .cmraXCrdn(this.cmraXCrdn)
+                .cmraYCrdn(this.cmraYCrdn)
+                .cmraAngl(this.cmraAngl)
+                .hmpgDsplEn(this.hmpgDsplEn)
+                .busDvrsLaneEn(this.busDvrsLaneEn)
+                .srvcAnlyEn(this.srvcAnlyEn)
+                .build();
+    }
+
+    public TbScIxrCmraMngm(String ixrId, String cmraId, Integer drctDvsnCd) {
+        this.ixrId = ixrId;
+        this.cmraId = cmraId;
+        this.drctDvsnCd = drctDvsnCd;
+    }
+
+    public void updateInfo(TbScIxrCmraMngmDto.TbScIxrCmraMngmUpdReq req) {
+        this.istlLctn = req.getIstlLctn();
+        this.cmraIp = req.getCmraIp();
+        this.cmraPort = req.getCmraPort();
+        this.useEn = req.getUseEn();
+        this.cmraLognId = req.getCmraLognId();
+        this.cmraLognPw = req.getCmraLognPw();
+        this.cmraHttpPort = req.getCmraHttpPort();
+        this.streUrl = req.getStreUrl();
+        this.cmraUrl = req.getCmraUrl();
+        this.cmraType = req.getCmraType();
+        this.cmraXCrdn = req.getCmraXCrdn();
+        this.cmraYCrdn = req.getCmraYCrdn();
+        this.cmraAngl = req.getCmraAngl();
+        this.hmpgDsplEn = req.getHmpgDsplEn();
+        this.busDvrsLaneEn = req.getBusDvrsLaneEn();
+        this.srvcAnlyEn = req.getSrvcAnlyEn();
+    }
+
+}

+ 27 - 0
src/main/java/com/its/op/entity/its/scrs/TbScIxrCmraMngmKey.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 TbScIxrCmraMngmKey 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;
+
+}

+ 96 - 0
src/main/java/com/its/op/entity/its/scrs/TbScIxrMngm.java

@@ -0,0 +1,96 @@
+package com.its.op.entity.its.scrs;
+
+import com.its.op.dto.its.scrs.TbScIxrMngmDto;
+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.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.Serializable;
+
+/**
+ * 교차로 관리 Entity Class
+ */
+@Getter
+@NoArgsConstructor//(access = AccessLevel.PROTECTED)
+@Builder
+@AllArgsConstructor
+@ApiModel("교차로 관리")
+@Entity
+@Table(name = "TB_SC_IXR_MNGM")
+public class TbScIxrMngm 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("교차로 명")  // Y VARCHAR2(50)
+    @Column(name = "IXR_NM", length = 50)
+    private String ixrNm;
+
+    @ApiModelProperty("현시 수")  // Y NUMBER(1)
+    @Column(name = "PHAS_CNT", columnDefinition = "NUMBER", length = 1)
+    private Integer phasCnt;
+
+    @ApiModelProperty("지점 특성")  // Y VARCHAR2(20)
+    @Column(name = "SPOT_FETR", length = 20)
+    private String spotFetr;
+
+    @ApiModelProperty("교차로 X 좌표")  // Y VARCHAR2(20)
+    @Column(name = "IXR_X_CRDN", length = 20)
+    private String ixrXCrdn;
+
+    @ApiModelProperty("교차로 Y 좌표")  // Y VARCHAR2(20)
+    @Column(name = "IXR_Y_CRDN", length = 20)
+    private String ixrYCrdn;
+
+    @ApiModelProperty("교차로 유형")  // Y NUMBER(1)
+    @Column(name = "IXR_TYPE", columnDefinition = "NUMBER", length = 1)
+    private Integer ixrType;
+
+    @ApiModelProperty("구분")  // Y NUMBER(1)
+    @Column(name = "DVSN", columnDefinition = "NUMBER", length = 1)
+    private Integer dvsn;
+
+    @ApiModelProperty("사용 유무")  // Y NUMBER(1)
+    @Column(name = "USE_EN", columnDefinition = "NUMBER", length = 1)
+    private Integer useEn;
+
+    public TbScIxrMngmDto toDto() {
+        return TbScIxrMngmDto.builder()
+                .ixrId(this.ixrId)
+                .ixrNm(this.ixrNm)
+                .phasCnt(this.phasCnt)
+                .spotFetr(this.spotFetr)
+                .ixrXCrdn(this.ixrXCrdn)
+                .ixrYCrdn(this.ixrYCrdn)
+                .ixrType(this.ixrType)
+                .dvsn(this.dvsn)
+                .useEn(this.useEn)
+                .build();
+    }
+
+    public TbScIxrMngm(String ixrId) {
+        this.ixrId = ixrId;
+    }
+
+    public void updateInfo(TbScIxrMngmDto.TbScIxrMngmUpdReq req) {
+        this.ixrNm = req.getIxrNm();
+        this.phasCnt = req.getPhasCnt();
+        this.spotFetr = req.getSpotFetr();
+        this.ixrXCrdn = req.getIxrXCrdn();
+        this.ixrYCrdn = req.getIxrYCrdn();
+        this.ixrType = req.getIxrType();
+        this.dvsn = req.getDvsn();
+        this.useEn = req.getUseEn();
+    }
+
+}

+ 2 - 0
src/main/java/com/its/op/service/its/link/TbClctSystSttsHsService.java

@@ -52,6 +52,8 @@ public class TbClctSystSttsHsService {
                         .utis01(obj.getUtis01().intValue())
                         .utis02(obj.getUtis02().intValue())
                         .vds01(obj.getVds01().intValue())
+                        .dsrc01(obj.getDsrc01().intValue())
+                        .gits01(obj.getGits01().intValue())
                         .build();
                 dto.makeClctTot();
                 result.add(dto);

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

@@ -0,0 +1,115 @@
+package com.its.op.service.its.scrs;
+
+import com.its.op.dao.repository.its.scrs.TbScIxrCmraMngmRepository;
+import com.its.op.dto.its.scrs.TbScIxrCmraMngmDto;
+import com.its.op.entity.its.scrs.TbScIxrCmraMngm;
+import com.its.op.entity.its.scrs.TbScIxrCmraMngmKey;
+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;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbScIxrCmraMngmService {
+
+    private final TbScIxrCmraMngmRepository repo;
+
+    // 데이터 1건 조회, 없으면 exception
+    private TbScIxrCmraMngm requireOne(TbScIxrCmraMngmKey ixrId) throws NoSuchElementException {
+        Optional<TbScIxrCmraMngm> info = this.repo.findById(ixrId);
+        if (info.isPresent()) {
+            return info.get();
+        }
+        else {
+            throw new NoSuchElementException("데이터가 존재하지 않습니다: " + ixrId);
+        }
+    }
+
+    // 전체 데이터 조회
+    @Transactional(readOnly = true)
+    public List<TbScIxrCmraMngmDto> findAll() {
+        List<TbScIxrCmraMngmDto> result = new ArrayList<>();
+        List<TbScIxrCmraMngm> data = this.repo.findAll();
+        for (TbScIxrCmraMngm entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+    // 전체 데이터 조회
+    @Transactional(readOnly = true)
+    public List<TbScIxrCmraMngmDto> findAllList() {
+        List<TbScIxrCmraMngmDto> result = new ArrayList<>();
+        List<TbScIxrCmraMngm> data = this.repo.findAllList();
+        for (TbScIxrCmraMngm entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
+    @Transactional(readOnly = true)
+    public TbScIxrCmraMngmDto findById(TbScIxrCmraMngmKey ixrId) {
+        TbScIxrCmraMngm entity = requireOne(ixrId);
+        return entity.toDto();
+    }
+
+    // 데이터 변경
+    @Transactional
+    public TbScIxrCmraMngmDto updateById(TbScIxrCmraMngmKey ixrId, TbScIxrCmraMngmDto.TbScIxrCmraMngmUpdReq req) {
+        TbScIxrCmraMngm entity = requireOne(ixrId);
+        entity.updateInfo(req);
+        this.repo.save(entity);
+        return entity.toDto();
+    }
+
+    // 데이터 변경 또는 생성-목록(데이터가 존재하면 업데이트 없으면 신규로 생성)
+    @Transactional
+    public List<TbScIxrCmraMngmDto> mergeInfoList(List<TbScIxrCmraMngmDto.TbScIxrCmraMngmUpdReq> reqList) {
+        List<TbScIxrCmraMngmDto> result = new ArrayList<>();
+        for (TbScIxrCmraMngmDto.TbScIxrCmraMngmUpdReq req : reqList) {
+            TbScIxrCmraMngm obj = req.toEntity();
+            this.repo.save(obj);
+            result.add(obj.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
+    @Transactional
+    public TbScIxrCmraMngmDto mergeInfo(TbScIxrCmraMngmDto.TbScIxrCmraMngmUpdReq req) {
+        TbScIxrCmraMngm obj = req.toEntity();
+        this.repo.save(obj);
+        return obj.toDto();
+    }
+
+    // 정보 삭제-개별, 데이터 존재하지 않으면 Exception
+    @Transactional
+    public TbScIxrCmraMngmDto deleteById(TbScIxrCmraMngmKey ixrId) {
+        TbScIxrCmraMngm entity = requireOne(ixrId);
+        this.repo.deleteById(ixrId);
+        return entity.toDto();
+    }
+
+    // 정보 삭제-목록, 존재하는 데이터 만 삭제
+    @Transactional
+    public List<TbScIxrCmraMngmDto> deleteByIds(List<TbScIxrCmraMngmKey> ids) {
+        List<TbScIxrCmraMngmDto> result = new ArrayList<>();
+        for (TbScIxrCmraMngmKey id : ids) {
+            Optional<TbScIxrCmraMngm> obj = this.repo.findById(id);
+            if (obj.isPresent()) {
+                this.repo.deleteById(id);
+                result.add(obj.get().toDto());
+            }
+        }
+        return result;
+    }
+
+}

+ 114 - 0
src/main/java/com/its/op/service/its/scrs/TbScIxrMngmService.java

@@ -0,0 +1,114 @@
+package com.its.op.service.its.scrs;
+
+import com.its.op.dao.repository.its.scrs.TbScIxrMngmRepository;
+import com.its.op.dto.its.scrs.TbScIxrMngmDto;
+import com.its.op.entity.its.scrs.TbScIxrMngm;
+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;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbScIxrMngmService {
+
+    private final TbScIxrMngmRepository repo;
+
+    // 데이터 1건 조회, 없으면 exception
+    private TbScIxrMngm requireOne(String ixrId) throws NoSuchElementException {
+        Optional<TbScIxrMngm> info = this.repo.findById(ixrId);
+        if (info.isPresent()) {
+            return info.get();
+        }
+        else {
+            throw new NoSuchElementException("데이터가 존재하지 않습니다: " + ixrId);
+        }
+    }
+
+    // 전체 데이터 조회
+    @Transactional(readOnly = true)
+    public List<TbScIxrMngmDto> findAll() {
+        List<TbScIxrMngmDto> result = new ArrayList<>();
+        List<TbScIxrMngm> data = this.repo.findAll();
+        for (TbScIxrMngm entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+    // 전체 데이터 조회
+    @Transactional(readOnly = true)
+    public List<TbScIxrMngmDto> findAllList() {
+        List<TbScIxrMngmDto> result = new ArrayList<>();
+        List<TbScIxrMngm> data = this.repo.findAllList();
+        for (TbScIxrMngm entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
+    @Transactional(readOnly = true)
+    public TbScIxrMngmDto findById(String ixrId) {
+        TbScIxrMngm entity = requireOne(ixrId);
+        return entity.toDto();
+    }
+
+    // 데이터 변경
+    @Transactional
+    public TbScIxrMngmDto updateById(String ixrId, TbScIxrMngmDto.TbScIxrMngmUpdReq req) {
+        TbScIxrMngm entity = requireOne(ixrId);
+        entity.updateInfo(req);
+        this.repo.save(entity);
+        return entity.toDto();
+    }
+
+    // 데이터 변경 또는 생성-목록(데이터가 존재하면 업데이트 없으면 신규로 생성)
+    @Transactional
+    public List<TbScIxrMngmDto> mergeInfoList(List<TbScIxrMngmDto.TbScIxrMngmUpdReq> reqList) {
+        List<TbScIxrMngmDto> result = new ArrayList<>();
+        for (TbScIxrMngmDto.TbScIxrMngmUpdReq req : reqList) {
+            TbScIxrMngm obj = req.toEntity();
+            this.repo.save(obj);
+            result.add(obj.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
+    @Transactional
+    public TbScIxrMngmDto mergeInfo(TbScIxrMngmDto.TbScIxrMngmUpdReq req) {
+        TbScIxrMngm obj = req.toEntity();
+        this.repo.save(obj);
+        return obj.toDto();
+    }
+
+    // 정보 삭제-개별, 데이터 존재하지 않으면 Exception
+    @Transactional
+    public TbScIxrMngmDto deleteById(String ixrId) {
+        TbScIxrMngm entity = requireOne(ixrId);
+        this.repo.deleteById(ixrId);
+        return entity.toDto();
+    }
+
+    // 정보 삭제-목록, 존재하는 데이터 만 삭제
+    @Transactional
+    public List<TbScIxrMngmDto> deleteByIds(List<String> ids) {
+        List<TbScIxrMngmDto> result = new ArrayList<>();
+        for (String id : ids) {
+            Optional<TbScIxrMngm> obj = this.repo.findById(id);
+            if (obj.isPresent()) {
+                this.repo.deleteById(id);
+                result.add(obj.get().toDto());
+            }
+        }
+        return result;
+    }
+
+}