Parcourir la source

link prcs param delete modify

shjung il y a 3 ans
Parent
commit
0ec6ad9da0

+ 2 - 1
src/main/java/com/its/op/controller/database/LinkPrcsParaController.java

@@ -10,6 +10,7 @@ import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
 import java.util.List;
 
 @Slf4j
@@ -32,7 +33,7 @@ public class LinkPrcsParaController {
     @PostMapping(value = "/{ids}", produces = {"application/json; charset=utf8"})
     public ResponseEntity<LinkPrcsParaDto.LinkPrcsParaUpdateReq> mergeById(
             @PathVariable final List<Long> ids,
-            @RequestBody final LinkPrcsParaDto.LinkPrcsParaUpdateReq req) {
+            @RequestBody @Valid final LinkPrcsParaDto.LinkPrcsParaUpdateReq req) {
 
         log.error("{}, [{}]", ids.size(), ids);
         log.error("{}", req);

+ 27 - 8
src/main/java/com/its/op/controller/vms/TbVmsIfscController.java

@@ -1,6 +1,8 @@
 package com.its.op.controller.vms;
 
+import com.its.op.model.dto.vms.TbVmsIfscCmtrGradDto;
 import com.its.op.model.dto.vms.TbVmsIfscDto;
+import com.its.op.service.vms.TbVmsIfscCmtrGradService;
 import com.its.op.service.vms.TbVmsIfscService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -11,14 +13,15 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.Valid;
 import java.util.List;
 
-@Api(tags = "VMS 정보제공구간")
+@Api(tags = "12.VMS-1.VMS 관리-1.VMS 정보제공구간 관리")
 @Validated
 @RestController
 @RequiredArgsConstructor
-@RequestMapping("/api/tb_vms_ifsc")
+@RequestMapping("/api/vms/manager/vms-ifsc")
 public class TbVmsIfscController {
 
     private final TbVmsIfscService service;
+    private final TbVmsIfscCmtrGradService cmtrGradService;
 
     @ApiOperation(value = "VMS 정보제공구간 전체조회(TB_VMS_IFSC)", response = TbVmsIfscDto.class)
     @GetMapping(value = "", produces = {"application/json; charset=utf8"})
@@ -32,17 +35,13 @@ public class TbVmsIfscController {
         return this.service.findById(id);
     }
 
+/*
     @ApiOperation(value = "VMS 정보제공구간 정보변경(TB_VMS_IFSC)", response = TbVmsIfscDto.class)
     @PutMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
     public TbVmsIfscDto updateById(@PathVariable final Long id, @RequestBody @Valid final TbVmsIfscDto.TbVmsIfscUpdReq req) {
         return this.service.updateById(id, req);
     }
-
-    @ApiOperation(value = "VMS 정보제공구간 정보변경/생성-목록(TB_VMS_IFSC)", response = TbVmsIfscDto.class)
-    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbVmsIfscDto> mergeInfoList(@RequestBody @Valid final List<TbVmsIfscDto.TbVmsIfscUpdReq> listReq) {
-        return this.service.mergeInfoList(listReq);
-    }
+*/
 
     @ApiOperation(value = "VMS 정보제공구간 정보변경/생성-개별(TB_VMS_IFSC)", response = TbVmsIfscDto.class)
     @PostMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
@@ -56,10 +55,30 @@ public class TbVmsIfscController {
         return this.service.deleteById(id);
     }
 
+/*
+    @ApiOperation(value = "VMS 정보제공구간 정보변경/생성-목록(TB_VMS_IFSC)", response = TbVmsIfscDto.class)
+    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbVmsIfscDto> mergeInfoList(@RequestBody @Valid final List<TbVmsIfscDto.TbVmsIfscUpdReq> listReq) {
+        return this.service.mergeInfoList(listReq);
+    }
+
     @ApiOperation(value = "VMS 정보제공구간 정보삭제-목록(TB_VMS_IFSC)", response = TbVmsIfscDto.class)
     @DeleteMapping(value = "", produces = {"application/json; charset=utf8"})
     public List<TbVmsIfscDto> deleteDataByIds(@RequestBody @Valid final List<Long> ids) {
         return this.service.deleteByIds(ids);
     }
+*/
+
+    @ApiOperation(value = "VMS 정보제공구간 속도정보 전체 적용(TB_VMS_IFSC, TB_VMS_IFSC_CMTR_GRAD)", response = TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradAllUpdReq.class)
+    @PostMapping(value = "/ifsc-grad", produces = {"application/json; charset=utf8"})
+    public TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradAllUpdReq saveAllIfscCmtrGradInfo(@RequestBody @Valid final TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradAllUpdReq req) {
+        return this.cmtrGradService.saveAllIfscCmtrGradInfo(req);
+    }
+
+    @ApiOperation(value = "VMS 소통정보 배경이미지 사용여부 조회(TB_VMS_SYMB_LIB)", response = Integer.class)
+    @GetMapping(value = "/usage/{id}", produces = {"application/json; charset=utf8"})
+    public Integer findUsageCountBySymbolId(@PathVariable final Short id) {
+        return this.service.findUsageCountBySymbolId(id);
+    }
 
 }

+ 120 - 0
src/main/java/com/its/op/model/dto/vms/TbVmsIfscCmtrGradDto.java

@@ -0,0 +1,120 @@
+package com.its.op.model.dto.vms;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.op.model.entity.vms.TbVmsIfscCmtrGrad;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.validation.constraints.Positive;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * VMS_정보제공구간 소통 등급 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("TbVmsIfscCmtrGradDto(VMS_정보제공구간 소통 등급)")
+public class TbVmsIfscCmtrGradDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("VMS 정보제공구간 ID")  // N NUMBER(10)
+    @JsonProperty("vms_ifsc_id")
+    private Long vmsIfscId;
+
+    @ApiModelProperty("소통 등급 코드")  // N VARCHAR(7)
+    @JsonProperty("cmtr_grad_cd")
+    private String cmtrGradCd;
+
+    @ApiModelProperty("최저속도")  // Y NUMBER(3)
+    @JsonProperty("lwstsped")
+    private Short lwstsped;
+
+    @ApiModelProperty("최고속도")  // Y NUMBER(3)
+    @JsonProperty("hghssped")
+    private Short hghssped;
+
+    // Code Description Field
+    @ApiModelProperty("소통 등급 코드 설명")
+    @JsonProperty("cmtr_grad_desc")    // CMTR_GRAD_CD
+    private String cmtrGradDesc;
+
+    public class CmtrGrad {
+        @ApiModelProperty("최저속도")  // Y NUMBER(3)
+        @JsonProperty("lwstsped")
+        private Short lwstsped;
+
+        @ApiModelProperty("최고속도")  // Y NUMBER(3)
+        @JsonProperty("hghssped")
+        private Short hghssped;
+    }
+
+    @ApiModel("TbVmsIfscCmtrGradAllUpdReq(VMS 정보제공구간 소통등급 전체변경)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class TbVmsIfscCmtrGradAllUpdReq {
+
+        @ApiModelProperty("정체")
+        @JsonProperty("grad1")
+        private CmtrGrad grad1;
+        @ApiModelProperty("지체")
+        @JsonProperty("grad2")
+        private CmtrGrad grad2;
+        @ApiModelProperty("원활")
+        @JsonProperty("grad3")
+        private CmtrGrad grad3;
+
+    }
+
+    @ApiModel("TbVmsIfscCmtrGradUpdReq(VMS 정보제공구간 소통등급 정보변경)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class TbVmsIfscCmtrGradUpdReq {
+
+        @ApiModelProperty("VMS 정보제공구간 ID, Nullable = N, NUMBER(10)")  // N NUMBER(10)
+        @JsonProperty("vms_ifsc_id")
+        @Positive
+        private Long vmsIfscId;
+
+        @ApiModelProperty("소통 등급 코드, Nullable = N, VARCHAR(7)")  // N VARCHAR(7)
+        @JsonProperty("cmtr_grad_cd")
+        @Size(min=1, max=7)
+        private String cmtrGradCd;
+
+        @ApiModelProperty("최저속도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("lwstsped")
+        @Positive
+        private Short lwstsped;
+
+        @ApiModelProperty("최고속도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("hghssped")
+        @Positive
+        private Short hghssped;
+
+        @Builder
+        public TbVmsIfscCmtrGradUpdReq(Long vms_ifsc_id, String cmtr_grad_cd, Short lwstsped, Short hghssped) {
+            this.vmsIfscId = vms_ifsc_id;
+            this.cmtrGradCd = cmtr_grad_cd;
+            this.lwstsped = lwstsped;
+            this.hghssped = hghssped;
+        }
+
+        public TbVmsIfscCmtrGrad toEntity() {
+            TbVmsIfscCmtrGrad entity = TbVmsIfscCmtrGrad.builder()
+                    .vmsIfscId(this.vmsIfscId)
+                    .cmtrGradCd(this.cmtrGradCd)
+                    .lwstsped(this.lwstsped)
+                    .hghssped(this.hghssped)
+                    .build();
+
+            return entity;
+        }
+
+    }
+
+}

+ 75 - 0
src/main/java/com/its/op/model/dto/vms/TbVmsLinkIfscDto.java

@@ -0,0 +1,75 @@
+package com.its.op.model.dto.vms;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.op.model.entity.vms.TbVmsLinkIfsc;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.validation.constraints.Positive;
+import java.io.Serializable;
+
+/**
+ * VMS LINK 정보제공구간 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("TbVmsLinkIfscDto(VMS LINK 정보제공구간)")
+public class TbVmsLinkIfscDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("VMS 정보제공구간 ID")  // N NUMBER(10)
+    @JsonProperty("vms_ifsc_id")
+    private Long vmsIfscId;
+
+    @ApiModelProperty("정보제공구간 ID")  // N NUMBER(10)
+    @JsonProperty("ifsc_id")
+    private Long ifscId;
+
+    @ApiModelProperty("순서")  // Y NUMBER(3)
+    @JsonProperty("ord")
+    private Short ord;
+
+    // Code Description Field
+    @ApiModel("TbVmsLinkIfscUpdReq(VMS LINK 정보제공구간 정보변경)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class TbVmsLinkIfscUpdReq {
+
+        @ApiModelProperty("VMS 정보제공구간 ID, Nullable = N, NUMBER(10)")  // N NUMBER(10)
+        @JsonProperty("vms_ifsc_id")
+        @Positive
+        private Long vmsIfscId;
+
+        @ApiModelProperty("정보제공구간 ID, Nullable = N, NUMBER(10)")  // N NUMBER(10)
+        @JsonProperty("ifsc_id")
+        @Positive
+        private Long ifscId;
+
+        @ApiModelProperty("순서, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("ord")
+        @Positive
+        private Short ord;
+
+        @Builder
+        public TbVmsLinkIfscUpdReq(Long vms_ifsc_id, Long ifsc_id, Short ord) {
+            this.vmsIfscId = vms_ifsc_id;
+            this.ifscId = ifsc_id;
+            this.ord = ord;
+        }
+
+        public TbVmsLinkIfsc toEntity() {
+            TbVmsLinkIfsc entity = TbVmsLinkIfsc.builder()
+                    .vmsIfscId(this.vmsIfscId)
+                    .ifscId(this.ifscId)
+                    .ord(this.ord)
+                    .build();
+
+            return entity;
+        }
+
+    }
+
+}

+ 64 - 0
src/main/java/com/its/op/model/entity/vms/TbVmsIfscCmtrGrad.java

@@ -0,0 +1,64 @@
+package com.its.op.model.entity.vms;
+
+import com.its.op.model.dto.vms.TbVmsIfscCmtrGradDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * VMS_정보제공구간 소통 등급 Entity Class
+ */
+@Getter
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@Builder
+@AllArgsConstructor
+@ApiModel("VMS_정보제공구간 소통 등급")
+@Entity
+@Table(name = "TB_VMS_IFSC_CMTR_GRAD")
+@IdClass(TbVmsIfscCmtrGradKey.class)
+public class TbVmsIfscCmtrGrad implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("VMS 정보제공구간 ID")  // N NUMBER(10)
+    @Id
+    @Column(name = "VMS_IFSC_ID", nullable = false, columnDefinition = "NUMBER", length = 10)
+    private Long vmsIfscId;
+
+    @ApiModelProperty("소통 등급 코드")  // N VARCHAR(7)
+    @Id
+    @Column(name = "CMTR_GRAD_CD", nullable = false, length = 7)
+    private String cmtrGradCd;
+
+    @ApiModelProperty("최저속도")  // Y NUMBER(3)
+    @Column(name = "LWSTSPED", columnDefinition = "NUMBER", length = 3)
+    private Short lwstsped;
+
+    @ApiModelProperty("최고속도")  // Y NUMBER(3)
+    @Column(name = "HGHSSPED", columnDefinition = "NUMBER", length = 3)
+    private Short hghssped;
+
+    public TbVmsIfscCmtrGradDto toDto() {
+        TbVmsIfscCmtrGradDto dto = TbVmsIfscCmtrGradDto.builder()
+                .vmsIfscId(this.vmsIfscId)
+                .cmtrGradCd(this.cmtrGradCd)
+                .lwstsped(this.lwstsped)
+                .hghssped(this.hghssped)
+                .build();
+
+        return dto;
+    }
+
+    public TbVmsIfscCmtrGrad(Long vmsIfscId, String cmtrGradCd) {
+        this.vmsIfscId = vmsIfscId;
+        this.cmtrGradCd = cmtrGradCd;
+    }
+
+    public void updateInfo(TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq req) {
+        this.lwstsped = req.getLwstsped();
+        this.hghssped = req.getHghssped();
+    }
+
+}

+ 25 - 0
src/main/java/com/its/op/model/entity/vms/TbVmsIfscCmtrGradKey.java

@@ -0,0 +1,25 @@
+package com.its.op.model.entity.vms;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * VMS_정보제공구간 소통 등급 Key Class
+ */
+@Data
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class TbVmsIfscCmtrGradKey implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    // VMS_IFSC_ID, VMS 정보제공구간 ID  // N NUMBER(10)
+    private Long vmsIfscId;
+
+    // CMTR_GRAD_CD, 소통 등급 코드  // N VARCHAR(7)
+    private String cmtrGradCd;
+
+}

+ 58 - 0
src/main/java/com/its/op/model/entity/vms/TbVmsLinkIfsc.java

@@ -0,0 +1,58 @@
+package com.its.op.model.entity.vms;
+
+import com.its.op.model.dto.vms.TbVmsLinkIfscDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * VMS LINK 정보제공구간 Entity Class
+ */
+@Getter
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@Builder
+@AllArgsConstructor
+@ApiModel("VMS LINK 정보제공구간")
+@Entity
+@Table(name = "TB_VMS_LINK_IFSC")
+@IdClass(TbVmsLinkIfscKey.class)
+public class TbVmsLinkIfsc implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("VMS 정보제공구간 ID")  // N NUMBER(10)
+    @Id
+    @Column(name = "VMS_IFSC_ID", nullable = false, columnDefinition = "NUMBER", length = 10)
+    private Long vmsIfscId;
+
+    @ApiModelProperty("정보제공구간 ID")  // N NUMBER(10)
+    @Id
+    @Column(name = "IFSC_ID", nullable = false, columnDefinition = "NUMBER", length = 10)
+    private Long ifscId;
+
+    @ApiModelProperty("순서")  // Y NUMBER(3)
+    @Column(name = "ORD", columnDefinition = "NUMBER", length = 3)
+    private Short ord;
+
+    public TbVmsLinkIfscDto toDto() {
+        TbVmsLinkIfscDto dto = TbVmsLinkIfscDto.builder()
+                .vmsIfscId(this.vmsIfscId)
+                .ifscId(this.ifscId)
+                .ord(this.ord)
+                .build();
+
+        return dto;
+    }
+
+    public TbVmsLinkIfsc(Long vmsIfscId, Long ifscId) {
+        this.vmsIfscId = vmsIfscId;
+        this.ifscId = ifscId;
+    }
+
+    public void updateInfo(TbVmsLinkIfscDto.TbVmsLinkIfscUpdReq req) {
+        this.ord = req.getOrd();
+    }
+
+}

+ 25 - 0
src/main/java/com/its/op/model/entity/vms/TbVmsLinkIfscKey.java

@@ -0,0 +1,25 @@
+package com.its.op.model.entity.vms;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * VMS LINK 정보제공구간 Key Class
+ */
+@Data
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class TbVmsLinkIfscKey implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    // VMS_IFSC_ID, VMS 정보제공구간 ID  // N NUMBER(10)
+    private Long vmsIfscId;
+
+    // IFSC_ID, 정보제공구간 ID  // N NUMBER(10)
+    private Long ifscId;
+
+}

+ 1 - 1
src/main/java/com/its/op/repository/database/LinkParaClctSystRepository.java

@@ -21,6 +21,6 @@ public interface LinkParaClctSystRepository extends JpaRepository<LinkParaClctSy
     void deleteDataAll() throws Exception;
 
     @Modifying // select 문이 아님을 나타낸다
-    @Query(value = "DELETE from LinkParaClctSyst m where m.LINK_ID = :link_id", nativeQuery = true)
+    @Query(value = "DELETE from TB_LINK_PARA_CLCT_SYST where LINK_ID = :link_id", nativeQuery = true)
     void deleteListById(@Param("link_id")Long link_id) throws Exception;
 }

+ 12 - 0
src/main/java/com/its/op/repository/vms/TbVmsIfscCmtrGradRepository.java

@@ -0,0 +1,12 @@
+package com.its.op.repository.vms;
+
+import com.its.op.model.entity.vms.TbVmsIfscCmtrGrad;
+import com.its.op.model.entity.vms.TbVmsIfscCmtrGradKey;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TbVmsIfscCmtrGradRepository extends JpaRepository<TbVmsIfscCmtrGrad, TbVmsIfscCmtrGradKey>, JpaSpecificationExecutor<TbVmsIfscCmtrGrad> {
+
+}

+ 1 - 0
src/main/java/com/its/op/repository/vms/TbVmsIfscRltnRepository.java

@@ -14,4 +14,5 @@ public interface TbVmsIfscRltnRepository extends JpaRepository<TbVmsIfscRltn, Tb
 
     @Query("select p from TbVmsIfscRltn p inner join fetch p.vms inner join fetch p.ifsc")
     List<TbVmsIfscRltn> findDataAll();
+
 }

+ 12 - 0
src/main/java/com/its/op/repository/vms/TbVmsLinkIfscRepository.java

@@ -0,0 +1,12 @@
+package com.its.op.repository.vms;
+
+import com.its.op.model.entity.vms.TbVmsLinkIfsc;
+import com.its.op.model.entity.vms.TbVmsLinkIfscKey;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TbVmsLinkIfscRepository extends JpaRepository<TbVmsLinkIfsc, TbVmsLinkIfscKey>, JpaSpecificationExecutor<TbVmsLinkIfsc> {
+
+}

+ 101 - 0
src/main/java/com/its/op/service/vms/TbVmsIfscCmtrGradService.java

@@ -0,0 +1,101 @@
+package com.its.op.service.vms;
+
+import com.its.op.model.dto.vms.TbVmsIfscCmtrGradDto;
+import com.its.op.model.entity.vms.TbVmsIfscCmtrGrad;
+import com.its.op.model.entity.vms.TbVmsIfscCmtrGradKey;
+import com.its.op.repository.vms.TbVmsIfscCmtrGradRepository;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Optional;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbVmsIfscCmtrGradService {
+
+    private final TbVmsIfscCmtrGradRepository repo;
+
+    // 데이터 1건 조회, 없으면 exception
+    private TbVmsIfscCmtrGrad requireOne(TbVmsIfscCmtrGradKey id) {
+        return repo.findById(id)
+                .orElseThrow(() -> new NoSuchElementException("데이터가 존재하지 않습니다: " + id));
+    }
+
+    // 전체 데이터 조회
+    public List<TbVmsIfscCmtrGradDto> findAll() {
+        List<TbVmsIfscCmtrGradDto> result = new ArrayList<>();
+        List<TbVmsIfscCmtrGrad> data = this.repo.findAll();
+        for (TbVmsIfscCmtrGrad entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
+    public TbVmsIfscCmtrGradDto findById(TbVmsIfscCmtrGradKey id) {
+        TbVmsIfscCmtrGrad entity = requireOne(id);
+        return entity.toDto();
+    }
+
+    // 데이터 변경
+    @Transactional
+    public TbVmsIfscCmtrGradDto updateById(TbVmsIfscCmtrGradKey id, TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq req) {
+        TbVmsIfscCmtrGrad entity = requireOne(id);
+        entity.updateInfo(req);
+        this.repo.save(entity);
+        return entity.toDto();
+    }
+
+    // 데이터 변경 또는 생성-목록(데이터가 존재하면 업데이트 없으면 신규로 생성)
+    @Transactional
+    public List<TbVmsIfscCmtrGradDto> mergeInfoList(List<TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq> reqList) {
+        List<TbVmsIfscCmtrGradDto> result = new ArrayList<>();
+        for (TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq req : reqList) {
+            TbVmsIfscCmtrGrad obj = req.toEntity();
+            this.repo.save(obj);
+            result.add(obj.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
+    @Transactional
+    public TbVmsIfscCmtrGradDto mergeInfo(TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq req) {
+        TbVmsIfscCmtrGrad obj = req.toEntity();
+        this.repo.save(obj);
+        return obj.toDto();
+    }
+
+    // 정보 삭제-개별, 데이터 존재하지 않으면 Exception
+    @Transactional
+    public TbVmsIfscCmtrGradDto deleteById(TbVmsIfscCmtrGradKey id) {
+        TbVmsIfscCmtrGrad entity = requireOne(id);
+        this.repo.deleteById(id);
+        return entity.toDto();
+    }
+
+    // 정보 삭제-목록, 존재하는 데이터 만 삭제
+    @Transactional
+    public List<TbVmsIfscCmtrGradDto> deleteByIds(List<TbVmsIfscCmtrGradKey> ids) {
+        List<TbVmsIfscCmtrGradDto> result = new ArrayList<>();
+        for (TbVmsIfscCmtrGradKey id : ids) {
+            Optional<TbVmsIfscCmtrGrad> obj = this.repo.findById(id);
+            if (obj.isPresent()) {
+                this.repo.deleteById(id);
+                result.add(obj.get().toDto());
+            }
+        }
+        return result;
+    }
+
+    @Transactional
+    public TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradAllUpdReq saveAllIfscCmtrGradInfo(TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradAllUpdReq req) {
+        return req;
+    }
+}

+ 5 - 0
src/main/java/com/its/op/service/vms/TbVmsIfscService.java

@@ -87,4 +87,9 @@ public class TbVmsIfscService {
         return result;
     }
 
+    // 정보 제공구간이 사용되는 갯수 리턴
+    public Integer findUsageCountBySymbolId(Short id) {
+        int useCount = 0;
+        return useCount;
+    }
 }

+ 91 - 0
src/main/java/com/its/op/service/vms/TbVmsLinkIfscService.java

@@ -0,0 +1,91 @@
+package com.its.op.service.vms;
+
+import com.its.op.model.dto.vms.TbVmsLinkIfscDto;
+import com.its.op.model.entity.vms.TbVmsLinkIfsc;
+import com.its.op.model.entity.vms.TbVmsLinkIfscKey;
+import com.its.op.repository.vms.TbVmsLinkIfscRepository;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Optional;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbVmsLinkIfscService {
+
+    private final TbVmsLinkIfscRepository repo;
+
+    // 데이터 1건 조회, 없으면 exception
+    private TbVmsLinkIfsc requireOne(TbVmsLinkIfscKey id) {
+        return repo.findById(id)
+                .orElseThrow(() -> new NoSuchElementException("데이터가 존재하지 않습니다: " + id));
+    }
+
+    // 전체 데이터 조회
+    public List<TbVmsLinkIfscDto> findAll() {
+        List<TbVmsLinkIfscDto> result = new ArrayList<>();
+        List<TbVmsLinkIfsc> data = this.repo.findAll();
+        for (TbVmsLinkIfsc entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
+    public TbVmsLinkIfscDto findById(TbVmsLinkIfscKey id) {
+        TbVmsLinkIfsc entity = requireOne(id);
+        return entity.toDto();
+    }
+
+    // 데이터 변경
+    public TbVmsLinkIfscDto updateById(TbVmsLinkIfscKey id, TbVmsLinkIfscDto.TbVmsLinkIfscUpdReq req) {
+        TbVmsLinkIfsc entity = requireOne(id);
+        entity.updateInfo(req);
+        this.repo.save(entity);
+        return entity.toDto();
+    }
+
+    // 데이터 변경 또는 생성-목록(데이터가 존재하면 업데이트 없으면 신규로 생성)
+    public List<TbVmsLinkIfscDto> mergeInfoList(List<TbVmsLinkIfscDto.TbVmsLinkIfscUpdReq> reqList) {
+        List<TbVmsLinkIfscDto> result = new ArrayList<>();
+        for (TbVmsLinkIfscDto.TbVmsLinkIfscUpdReq req : reqList) {
+            TbVmsLinkIfsc obj = req.toEntity();
+            this.repo.save(obj);
+            result.add(obj.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
+    public TbVmsLinkIfscDto mergeInfo(TbVmsLinkIfscDto.TbVmsLinkIfscUpdReq req) {
+        TbVmsLinkIfsc obj = req.toEntity();
+        this.repo.save(obj);
+        return obj.toDto();
+    }
+
+    // 정보 삭제-개별, 데이터 존재하지 않으면 Exception
+    public TbVmsLinkIfscDto deleteById(TbVmsLinkIfscKey id) {
+        TbVmsLinkIfsc entity = requireOne(id);
+        this.repo.deleteById(id);
+        return entity.toDto();
+    }
+
+    // 정보 삭제-목록, 존재하는 데이터 만 삭제
+    public List<TbVmsLinkIfscDto> deleteByIds(List<TbVmsLinkIfscKey> ids) {
+        List<TbVmsLinkIfscDto> result = new ArrayList<>();
+        for (TbVmsLinkIfscKey id : ids) {
+            Optional<TbVmsLinkIfsc> obj = this.repo.findById(id);
+            if (obj.isPresent()) {
+                this.repo.deleteById(id);
+                result.add(obj.get().toDto());
+            }
+        }
+        return result;
+    }
+
+}