Browse Source

vms manage completed

shjung 3 năm trước cách đây
mục cha
commit
29b4b9c7c3
32 tập tin đã thay đổi với 908 bổ sung130 xóa
  1. 65 0
      src/main/java/com/its/op/controller/database/TbIfscController.java
  2. 12 3
      src/main/java/com/its/op/controller/vms/TbVmsIfscController.java
  3. 37 15
      src/main/java/com/its/op/controller/vms/TbVmsIfscRltnController.java
  4. 1 1
      src/main/java/com/its/op/controller/vms/TbVmsSymbLibControllerVMP0.java
  5. 1 1
      src/main/java/com/its/op/controller/vms/TbVmsSymbLibControllerVMP1.java
  6. 1 1
      src/main/java/com/its/op/controller/vms/TbVmsSymbLibControllerVMP2.java
  7. 1 1
      src/main/java/com/its/op/controller/vms/VmsCtlrController.java
  8. 3 0
      src/main/java/com/its/op/global/CodeManager.java
  9. 209 0
      src/main/java/com/its/op/model/dto/database/TbIfscDto.java
  10. 21 21
      src/main/java/com/its/op/model/dto/vms/TbVmsCtlrDto.java
  11. 3 0
      src/main/java/com/its/op/model/dto/vms/TbVmsIfscCmtrGradDto.java
  12. 45 9
      src/main/java/com/its/op/model/dto/vms/TbVmsIfscDto.java
  13. 45 25
      src/main/java/com/its/op/model/dto/vms/TbVmsIfscRltnDto.java
  14. 26 0
      src/main/java/com/its/op/model/dto/vms/TbVmsLinkIfscDto.java
  15. 119 0
      src/main/java/com/its/op/model/entity/database/TbIfsc.java
  16. 4 0
      src/main/java/com/its/op/model/entity/vms/TbVmsCtlr.java
  17. 7 8
      src/main/java/com/its/op/model/entity/vms/TbVmsIfsc.java
  18. 5 8
      src/main/java/com/its/op/model/entity/vms/TbVmsIfscRltn.java
  19. 9 0
      src/main/java/com/its/op/model/entity/vms/TbVmsLinkIfsc.java
  20. 11 0
      src/main/java/com/its/op/repository/database/TbIfscRepository.java
  21. 12 3
      src/main/java/com/its/op/repository/vms/TbVmsIfscCmtrGradRepository.java
  22. 2 0
      src/main/java/com/its/op/repository/vms/TbVmsIfscRepository.java
  23. 7 2
      src/main/java/com/its/op/repository/vms/TbVmsIfscRltnRepository.java
  24. 13 0
      src/main/java/com/its/op/repository/vms/TbVmsLinkIfscRepository.java
  25. 90 0
      src/main/java/com/its/op/service/database/TbIfscService.java
  26. 10 0
      src/main/java/com/its/op/service/vms/TbVmsCtlrService.java
  27. 16 0
      src/main/java/com/its/op/service/vms/TbVmsIfscCmtrGradService.java
  28. 23 15
      src/main/java/com/its/op/service/vms/TbVmsIfscRltnService.java
  29. 91 15
      src/main/java/com/its/op/service/vms/TbVmsIfscService.java
  30. 17 0
      src/main/java/com/its/op/service/vms/TbVmsLinkIfscService.java
  31. 1 1
      src/main/java/com/its/op/service/vms/TbVmsSymbLibServiceVMP1.java
  32. 1 1
      src/main/java/com/its/op/service/vms/TbVmsSymbLibServiceVMP2.java

+ 65 - 0
src/main/java/com/its/op/controller/database/TbIfscController.java

@@ -0,0 +1,65 @@
+package com.its.op.controller.database;
+
+import com.its.op.model.dto.database.TbIfscDto;
+import com.its.op.service.database.TbIfscService;
+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 = "정보제공구간")
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/tb_ifsc")
+public class TbIfscController {
+
+    private final TbIfscService service;
+
+    @ApiOperation(value = "정보제공구간 전체조회(TB_IFSC)", response = TbIfscDto.class)
+    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbIfscDto> findAll() {
+        return service.findAll();
+    }
+
+    @ApiOperation(value = "정보제공구간 개별조회(TB_IFSC)", response = TbIfscDto.class)
+    @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbIfscDto findById(@PathVariable final Long id) {
+        return this.service.findById(id);
+    }
+
+    @ApiOperation(value = "정보제공구간 정보변경(TB_IFSC)", response = TbIfscDto.class)
+    @PutMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbIfscDto updateById(@PathVariable final Long id, @RequestBody @Valid final TbIfscDto.TbIfscUpdReq req) {
+        return this.service.updateById(id, req);
+    }
+
+    @ApiOperation(value = "정보제공구간 정보변경/생성-목록(TB_IFSC)", response = TbIfscDto.class)
+    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbIfscDto> mergeInfoList(@RequestBody @Valid final List<TbIfscDto.TbIfscUpdReq> listReq) {
+        return this.service.mergeInfoList(listReq);
+    }
+
+    @ApiOperation(value = "정보제공구간 정보변경/생성-개별(TB_IFSC)", response = TbIfscDto.class)
+    @PostMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbIfscDto mergeInfo(@PathVariable("id") Long id, @RequestBody @Valid final TbIfscDto.TbIfscUpdReq req) {
+        return this.service.mergeInfo(req);
+    }
+
+    @ApiOperation(value = "정보제공구간 정보삭제-개별(TB_IFSC)", response = TbIfscDto.class)
+    @DeleteMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbIfscDto deleteDataById(@PathVariable("id") Long id) {
+        return this.service.deleteById(id);
+    }
+
+    @ApiOperation(value = "정보제공구간 정보삭제-목록(TB_IFSC)", response = TbIfscDto.class)
+    @DeleteMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbIfscDto> deleteDataByIds(@RequestBody @Valid final List<Long> ids) {
+        return this.service.deleteByIds(ids);
+    }
+
+}

+ 12 - 3
src/main/java/com/its/op/controller/vms/TbVmsIfscController.java

@@ -7,13 +7,15 @@ import com.its.op.service.vms.TbVmsIfscService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import java.util.List;
 
-@Api(tags = "12.VMS-1.VMS 관리-1.VMS 정보제공구간 관리")
+@Slf4j
+@Api(tags = "12.VMS-1.정보 관리-1.VMS 정보제공구간 관리")
 @Validated
 @RestController
 @RequiredArgsConstructor
@@ -45,7 +47,8 @@ public class TbVmsIfscController {
 
     @ApiOperation(value = "VMS 정보제공구간 정보변경/생성-개별(TB_VMS_IFSC)", response = TbVmsIfscDto.class)
     @PostMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbVmsIfscDto mergeInfo(@PathVariable("id") Long id, @RequestBody @Valid final TbVmsIfscDto.TbVmsIfscUpdReq req) {
+    public TbVmsIfscDto.TbVmsIfscUpdReq mergeInfo(@PathVariable("id") Long id, @RequestBody @Valid final TbVmsIfscDto.TbVmsIfscUpdReq req) {
+        log.error("mergeInfo: {}", req);
         return this.service.mergeInfo(req);
     }
 
@@ -75,10 +78,16 @@ public class TbVmsIfscController {
         return this.cmtrGradService.saveAllIfscCmtrGradInfo(req);
     }
 
-    @ApiOperation(value = "VMS 정보제공구간 사용여부 조회(TB_VMS_SYMB_LIB)", response = Integer.class)
+    @ApiOperation(value = "VMS 정보제공구간 사용여부 조회(TB_VMS_IFSC)", response = Integer.class)
     @GetMapping(value = "/usage/{id}", produces = {"application/json; charset=utf8"})
     public Integer findUsageCountByVmsIfscId(@PathVariable final Long id) {
         return this.service.findUsageCountByVmsIfscId(id);
     }
 
+    @ApiOperation(value = "VMS 정보제공구간 신규 ID 조회(TB_VMS_IFSC)", response = Long.class)
+    @GetMapping(value = "/new-id", produces = {"application/json; charset=utf8"})
+    public Long getNewVmsIfscId() {
+        return this.service.getNewVmsIfscId();
+    }
+
 }

+ 37 - 15
src/main/java/com/its/op/controller/vms/TbVmsIfscRltnController.java

@@ -1,8 +1,11 @@
 package com.its.op.controller.vms;
 
+import com.its.op.model.dto.vms.TbVmsCtlrDto;
+import com.its.op.model.dto.vms.TbVmsIfscDto;
 import com.its.op.model.dto.vms.TbVmsIfscRltnDto;
-import com.its.op.model.entity.vms.TbVmsIfscRltnKey;
+import com.its.op.service.vms.TbVmsCtlrService;
 import com.its.op.service.vms.TbVmsIfscRltnService;
+import com.its.op.service.vms.TbVmsIfscService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -12,14 +15,28 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.Valid;
 import java.util.List;
 
-@Api(tags = "VMS 정보제공구간 관계")
+@Api(tags = "12.VMS-1.정보 관리-2.VMS 정보제공구간 설정")
 @Validated
 @RestController
 @RequiredArgsConstructor
-@RequestMapping("/api/tb_vms_ifsc_rltn")
+@RequestMapping("/api/vms/manager/vms-ifsc-rltn")
 public class TbVmsIfscRltnController {
 
     private final TbVmsIfscRltnService service;
+    private final TbVmsCtlrService vmsCtlrService;
+    private final TbVmsIfscService vmsIfscService;
+
+    @ApiOperation(value = "VMS 목록 조회(TB_VMS_CTLR)", response = TbVmsIfscRltnDto.class)
+    @GetMapping(value = "/vms", produces = {"application/json; charset=utf8"})
+    public List<TbVmsCtlrDto> findVmsCtlrAll() {
+        return vmsCtlrService.findNotDeletedAll();
+    }
+
+    @ApiOperation(value = "VMS 정보제공구간 목록 조회(TB_VMS_CTLR)", response = TbVmsIfscRltnDto.class)
+    @GetMapping(value = "/vms-ifsc", produces = {"application/json; charset=utf8"})
+    public List<TbVmsIfscDto> findVmsIfscAll() {
+        return vmsIfscService.findAll();
+    }
 
     @ApiOperation(value = "VMS 정보제공구간 관계 전체조회(TB_VMS_IFSC_RLTN)", response = TbVmsIfscRltnDto.class)
     @GetMapping(value = "", produces = {"application/json; charset=utf8"})
@@ -29,26 +46,36 @@ public class TbVmsIfscRltnController {
 
     @ApiOperation(value = "VMS 정보제공구간 관계 개별조회(TB_VMS_IFSC_RLTN)", response = TbVmsIfscRltnDto.class)
     @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbVmsIfscRltnDto findById(@PathVariable final TbVmsIfscRltnKey id) {
-        return this.service.findById(id);
+    public List<TbVmsIfscRltnDto> findDataById(@PathVariable("id") final Long vmsCtlrNmbr) {
+        return this.service.findDataById(vmsCtlrNmbr);
     }
 
+/*
     @ApiOperation(value = "VMS 정보제공구간 관계 정보변경(TB_VMS_IFSC_RLTN)", response = TbVmsIfscRltnDto.class)
     @PutMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
     public TbVmsIfscRltnDto updateById(@PathVariable final TbVmsIfscRltnKey id, @RequestBody @Valid final TbVmsIfscRltnDto.TbVmsIfscRltnUpdReq req) {
         return this.service.updateById(id, req);
     }
+*/
 
+    @ApiOperation(value = "VMS 정보제공구간 관계 정보변경/생성-개별(TB_VMS_IFSC_RLTN)", response = TbVmsIfscRltnDto.class)
+    @PostMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbVmsIfscRltnDto.TbVmsIfscRltnUpdReq mergeInfo(
+            @PathVariable("id") Long vmsCtlrNmbr, @RequestBody @Valid final TbVmsIfscRltnDto.TbVmsIfscRltnUpdReq req) {
+        return this.service.mergeInfo(req);
+    }
+
+/*
     @ApiOperation(value = "VMS 정보제공구간 관계 정보변경/생성-목록(TB_VMS_IFSC_RLTN)", response = TbVmsIfscRltnDto.class)
     @PostMapping(value = "", produces = {"application/json; charset=utf8"})
     public List<TbVmsIfscRltnDto> mergeInfoList(@RequestBody @Valid final List<TbVmsIfscRltnDto.TbVmsIfscRltnUpdReq> listReq) {
         return this.service.mergeInfoList(listReq);
     }
 
-    @ApiOperation(value = "VMS 정보제공구간 관계 정보변경/생성-개별(TB_VMS_IFSC_RLTN)", response = TbVmsIfscRltnDto.class)
-    @PostMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbVmsIfscRltnDto mergeInfo(@PathVariable("id") TbVmsIfscRltnKey id, @RequestBody @Valid final TbVmsIfscRltnDto.TbVmsIfscRltnUpdReq req) {
-        return this.service.mergeInfo(req);
+    @ApiOperation(value = "VMS 정보제공구간 관계 정보삭제-목록(TB_VMS_IFSC_RLTN)", response = TbVmsIfscRltnDto.class)
+    @DeleteMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbVmsIfscRltnDto> deleteDataByIds(@RequestBody @Valid final List<TbVmsIfscRltnKey> ids) {
+        return this.service.deleteByIds(ids);
     }
 
     @ApiOperation(value = "VMS 정보제공구간 관계 정보삭제-개별(TB_VMS_IFSC_RLTN)", response = TbVmsIfscRltnDto.class)
@@ -56,11 +83,6 @@ public class TbVmsIfscRltnController {
     public TbVmsIfscRltnDto deleteDataById(@PathVariable("id") TbVmsIfscRltnKey id) {
         return this.service.deleteById(id);
     }
-
-    @ApiOperation(value = "VMS 정보제공구간 관계 정보삭제-목록(TB_VMS_IFSC_RLTN)", response = TbVmsIfscRltnDto.class)
-    @DeleteMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbVmsIfscRltnDto> deleteDataByIds(@RequestBody @Valid final List<TbVmsIfscRltnKey> ids) {
-        return this.service.deleteByIds(ids);
-    }
+*/
 
 }

+ 1 - 1
src/main/java/com/its/op/controller/vms/TbVmsSymbLibControllerVMP0.java

@@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.Valid;
 import java.util.List;
 
-@Api(tags = "12.VMS-1.VMS 관리-4.VMS 심벌이미지 관리")
+@Api(tags = "12.VMS-1.정보 관리-3.VMS 심벌이미지 관리")
 @Validated
 @RestController
 @RequiredArgsConstructor

+ 1 - 1
src/main/java/com/its/op/controller/vms/TbVmsSymbLibControllerVMP1.java

@@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.Valid;
 import java.util.List;
 
-@Api(tags = "12.VMS-1.VMS 관리-5.VMS 소통정보 배경이미지 관리")
+@Api(tags = "12.VMS-1.정보 관리-4.VMS 소통정보 배경이미지 관리")
 @Validated
 @RestController
 @RequiredArgsConstructor

+ 1 - 1
src/main/java/com/its/op/controller/vms/TbVmsSymbLibControllerVMP2.java

@@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.Valid;
 import java.util.List;
 
-@Api(tags = "12.VMS-1.VMS 관리-6.VMS 소통정보 이미지 관리")
+@Api(tags = "12.VMS-1.정보 관리-5.VMS 소통정보 이미지 관리")
 @Validated
 @RestController
 @RequiredArgsConstructor

+ 1 - 1
src/main/java/com/its/op/controller/vms/VmsCtlrController.java

@@ -19,7 +19,7 @@ import java.util.List;
 @RequiredArgsConstructor
 @RestController
 @RequestMapping("/api/vms/manager/info")
-@Api(tags = "12.VMS-1.VMS 관리-0.제어기관리")
+@Api(tags = "12.VMS-1.정보 관리-0.제어기관리")
 public class VmsCtlrController {
 
     private final VmsCtlrService service;

+ 3 - 0
src/main/java/com/its/op/global/CodeManager.java

@@ -53,6 +53,9 @@ public class CodeManager {
 
     public static final String DTCT_TYPE_CD         = "DTT";    // 검지기유형
 
+    public static final String VMS_USAG_TYPE_CD     = "VUT";    // VMS 용도 유형 코드
+    public static final String VMS_TYPE_CD          = "VMP";    // VMS 유형 코드
+
     private static final ConcurrentHashMap<String, HashMap<String, Code>> codes = new ConcurrentHashMap<>();
 
     @PostConstruct

+ 209 - 0
src/main/java/com/its/op/model/dto/database/TbIfscDto.java

@@ -0,0 +1,209 @@
+package com.its.op.model.dto.database;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.op.model.entity.database.TbIfsc;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Positive;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * 정보제공구간 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("TbIfscDto(정보제공구간)")
+public class TbIfscDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("정보제공구간 ID")  // N NUMBER(10)
+    @JsonProperty("ifsc_id")
+    private Long ifscId;
+
+    @ApiModelProperty("정보제공구간 명")  // Y VARCHAR(100)
+    @JsonProperty("ifsc_nm")
+    private String ifscNm;
+
+    @ApiModelProperty("방향 코드")  // Y VARCHAR(7)
+    @JsonProperty("drct_cd")
+    private String drctCd;
+
+    @ApiModelProperty("시점 명")  // Y VARCHAR(100)
+    @JsonProperty("strt_nm")
+    private String strtNm;
+
+    @ApiModelProperty("종점 명")  // Y VARCHAR(100)
+    @JsonProperty("end_nm")
+    private String endNm;
+
+    @ApiModelProperty("구간 길이")  // Y NUMBER(5)
+    @JsonProperty("sect_lngt")
+    private Short sectLngt;
+
+    @ApiModelProperty("외부 연계 구간 여부")  // Y CHAR(1)
+    @JsonProperty("extr_cnct_sect_yn")
+    private String extrCnctSectYn;
+
+    @ApiModelProperty("삭제 여부")  // Y CHAR(1)
+    @JsonProperty("del_yn")
+    private String delYn;
+
+    @ApiModelProperty("비고")  // Y VARCHAR(600)
+    @JsonProperty("rmrk")
+    private String rmrk;
+
+    @ApiModelProperty("시작 노드 ID")  // Y NUMBER(10)
+    @JsonProperty("f_node_id")
+    private Long fNodeId;
+
+    @ApiModelProperty("종료 노드 ID")  // Y NUMBER(10)
+    @JsonProperty("t_node_id")
+    private Long tNodeId;
+
+    @ApiModelProperty("구간 등급 코드")  // Y VARCHAR(7)
+    @JsonProperty("sect_grad_cd")
+    private String sectGradCd;
+
+    @ApiModelProperty("지역 코드")  // Y VARCHAR(7)
+    @JsonProperty("area_cd")
+    private String areaCd;
+
+    // Code Description Field
+    @ApiModelProperty("방향 코드 설명")
+    @JsonProperty("drct_desc")    // DRCT_CD
+    private String drctDesc;
+
+    @ApiModelProperty("외부 연계 구간 여부 설명")
+    @JsonProperty("extr_cnct_sect_desc")    // EXTR_CNCT_SECT_YN
+    private String extrCnctSectDesc;
+
+    @ApiModelProperty("삭제 여부 설명")
+    @JsonProperty("del_desc")    // DEL_YN
+    private String delDesc;
+
+    @ApiModelProperty("구간 등급 코드 설명")
+    @JsonProperty("sect_grad_desc")    // SECT_GRAD_CD
+    private String sectGradDesc;
+
+    @ApiModelProperty("지역 코드 설명")
+    @JsonProperty("area_desc")    // AREA_CD
+    private String areaDesc;
+
+    @ApiModel("TbIfscUpdReq(정보제공구간 정보변경)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class TbIfscUpdReq {
+
+        @ApiModelProperty("정보제공구간 ID, Nullable = N, NUMBER(10)")  // N NUMBER(10)
+        @JsonProperty("ifsc_id")
+        @Positive
+        private Long ifscId;
+
+        @ApiModelProperty("정보제공구간 명, Nullable = Y, VARCHAR(100)")  // Y VARCHAR(100)
+        @JsonProperty("ifsc_nm")
+        @Size(min=1, max=100)
+        private String ifscNm;
+
+        @ApiModelProperty("방향 코드, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
+        @JsonProperty("drct_cd")
+        @Size(min=1, max=7)
+        private String drctCd;
+
+        @ApiModelProperty("시점 명, Nullable = Y, VARCHAR(100)")  // Y VARCHAR(100)
+        @JsonProperty("strt_nm")
+        @Size(min=1, max=100)
+        private String strtNm;
+
+        @ApiModelProperty("종점 명, Nullable = Y, VARCHAR(100)")  // Y VARCHAR(100)
+        @JsonProperty("end_nm")
+        @Size(min=1, max=100)
+        private String endNm;
+
+        @ApiModelProperty("구간 길이, Nullable = Y, NUMBER(5)")  // Y NUMBER(5)
+        @JsonProperty("sect_lngt")
+        @Positive
+        private Short sectLngt;
+
+        @ApiModelProperty("외부 연계 구간 여부, Nullable = Y, CHAR(1)")  // Y CHAR(1)
+        @JsonProperty("extr_cnct_sect_yn")
+        @Size(min=1, max=1)
+        @Pattern(regexp = "[YN]")
+        private String extrCnctSectYn;
+
+        @ApiModelProperty("삭제 여부, Nullable = Y, CHAR(1)")  // Y CHAR(1)
+        @JsonProperty("del_yn")
+        @Size(min=1, max=1)
+        @Pattern(regexp = "[YN]")
+        private String delYn;
+
+        @ApiModelProperty("비고, Nullable = Y, VARCHAR(600)")  // Y VARCHAR(600)
+        @JsonProperty("rmrk")
+        @Size(min=1, max=600)
+        private String rmrk;
+
+        @ApiModelProperty("시작 노드 ID, Nullable = Y, NUMBER(10)")  // Y NUMBER(10)
+        @JsonProperty("f_node_id")
+        @Positive
+        private Long fNodeId;
+
+        @ApiModelProperty("종료 노드 ID, Nullable = Y, NUMBER(10)")  // Y NUMBER(10)
+        @JsonProperty("t_node_id")
+        @Positive
+        private Long tNodeId;
+
+        @ApiModelProperty("구간 등급 코드, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
+        @JsonProperty("sect_grad_cd")
+        @Size(min=1, max=7)
+        private String sectGradCd;
+
+        @ApiModelProperty("지역 코드, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
+        @JsonProperty("area_cd")
+        @Size(min=1, max=7)
+        private String areaCd;
+
+        @Builder
+        public TbIfscUpdReq(Long ifsc_id, String ifsc_nm, String drct_cd, String strt_nm, String end_nm, Short sect_lngt, String extr_cnct_sect_yn, String del_yn, String rmrk, Long f_node_id, Long t_node_id, String sect_grad_cd, String area_cd) {
+            this.ifscId = ifsc_id;
+            this.ifscNm = ifsc_nm;
+            this.drctCd = drct_cd;
+            this.strtNm = strt_nm;
+            this.endNm = end_nm;
+            this.sectLngt = sect_lngt;
+            this.extrCnctSectYn = extr_cnct_sect_yn;
+            this.delYn = del_yn;
+            this.rmrk = rmrk;
+            this.fNodeId = f_node_id;
+            this.tNodeId = t_node_id;
+            this.sectGradCd = sect_grad_cd;
+            this.areaCd = area_cd;
+        }
+
+        public TbIfsc toEntity() {
+            TbIfsc entity = TbIfsc.builder()
+                    .ifscId(this.ifscId)
+                    .ifscNm(this.ifscNm)
+                    .drctCd(this.drctCd)
+                    .strtNm(this.strtNm)
+                    .endNm(this.endNm)
+                    .sectLngt(this.sectLngt)
+                    .extrCnctSectYn(this.extrCnctSectYn)
+                    .delYn(this.delYn)
+                    .rmrk(this.rmrk)
+                    .fNodeId(this.fNodeId)
+                    .tNodeId(this.tNodeId)
+                    .sectGradCd(this.sectGradCd)
+                    .areaCd(this.areaCd)
+                    .build();
+
+            return entity;
+        }
+
+    }
+
+}

+ 21 - 21
src/main/java/com/its/op/model/dto/vms/TbVmsCtlrDto.java

@@ -197,37 +197,37 @@ public class TbVmsCtlrDto implements Serializable {
     @JsonProperty("vms_usag_type_desc")    // VMS_USAG_TYPE_CD
     private String vmsUsagTypeDesc;
 
-    @ApiModelProperty("VMS 형식 유형 코드 설명")
-    @JsonProperty("vms_frm_type_desc")    // VMS_FRM_TYPE_CD
-    private String vmsFrmTypeDesc;
+    //@ApiModelProperty("VMS 형식 유형 코드 설명")
+    //@JsonProperty("vms_frm_type_desc")    // VMS_FRM_TYPE_CD
+    //private String vmsFrmTypeDesc;
 
     @ApiModelProperty("VMS 유형 코드 설명")
     @JsonProperty("vms_type_desc")    // VMS_TYPE_CD
     private String vmsTypeDesc;
 
-    @ApiModelProperty("VMS 모듈 유형 코드 설명")
-    @JsonProperty("vms_modl_type_desc")    // VMS_MODL_TYPE_CD
-    private String vmsModlTypeDesc;
+    //@ApiModelProperty("VMS 모듈 유형 코드 설명")
+    //@JsonProperty("vms_modl_type_desc")    // VMS_MODL_TYPE_CD
+    //private String vmsModlTypeDesc;
 
-    @ApiModelProperty("삭제 여부 설명")
-    @JsonProperty("del_desc")    // DEL_YN
-    private String delDesc;
+    //@ApiModelProperty("삭제 여부 설명")
+    //@JsonProperty("del_desc")    // DEL_YN
+    //private String delDesc;
 
-    @ApiModelProperty("소통정보 연계 여부 설명")
-    @JsonProperty("cmtrinfr_cnct_desc")    // CMTRINFR_CNCT_YN
-    private String cmtrinfrCnctDesc;
+    //@ApiModelProperty("소통정보 연계 여부 설명")
+    //@JsonProperty("cmtrinfr_cnct_desc")    // CMTRINFR_CNCT_YN
+    //private String cmtrinfrCnctDesc;
 
-    @ApiModelProperty("기상정보 연계 여부 설명")
-    @JsonProperty("wthrinfr_cnct_desc")    // WTHRINFR_CNCT_YN
-    private String wthrinfrCnctDesc;
+    //@ApiModelProperty("기상정보 연계 여부 설명")
+    //@JsonProperty("wthrinfr_cnct_desc")    // WTHRINFR_CNCT_YN
+    //private String wthrinfrCnctDesc;
 
-    @ApiModelProperty("환경정보 연계 여부 설명")
-    @JsonProperty("envrinfr_cnct_desc")    // ENVRINFR_CNCT_YN
-    private String envrinfrCnctDesc;
+    //@ApiModelProperty("환경정보 연계 여부 설명")
+    //@JsonProperty("envrinfr_cnct_desc")    // ENVRINFR_CNCT_YN
+    //private String envrinfrCnctDesc;
 
-    @ApiModelProperty("교통 전략 사용 여부 설명")
-    @JsonProperty("trfc_strg_use_desc")    // TRFC_STRG_USE_YN
-    private String trfcStrgUseDesc;
+    //@ApiModelProperty("교통 전략 사용 여부 설명")
+    //@JsonProperty("trfc_strg_use_desc")    // TRFC_STRG_USE_YN
+    //private String trfcStrgUseDesc;
 
     @ApiModel("TbVmsCtlrUpdReq(VMS 제어기 정보변경)")
     @Getter

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

@@ -42,6 +42,9 @@ public class TbVmsIfscCmtrGradDto implements Serializable {
 
     @Getter
     @Setter
+    @ToString
+    @NoArgsConstructor
+    @AllArgsConstructor
     public static class CmtrGrad {
         @ApiModelProperty("최저속도")  // Y NUMBER(3)
         @JsonProperty("lwstsped")

+ 45 - 9
src/main/java/com/its/op/model/dto/vms/TbVmsIfscDto.java

@@ -6,9 +6,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 
-import javax.validation.constraints.Pattern;
-import javax.validation.constraints.Positive;
-import javax.validation.constraints.Size;
+import javax.validation.constraints.*;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
@@ -59,13 +57,23 @@ public class TbVmsIfscDto implements Serializable {
     private String axisYn;
 
     // Code Description Field
-    @ApiModelProperty("편집 코드 설명")
-    @JsonProperty("edtn_desc")    // EDTN_CD
-    private String edtnDesc;
+    //@ApiModelProperty("편집 코드 설명")
+    //@JsonProperty("edtn_desc")    // EDTN_CD
+    //private String edtnDesc;
+
+    @ApiModelProperty("정체")
+    @JsonProperty("grad1")
+    private TbVmsIfscCmtrGradDto.CmtrGrad grad1;
+    @ApiModelProperty("지체")
+    @JsonProperty("grad2")
+    private TbVmsIfscCmtrGradDto.CmtrGrad grad2;
+    @ApiModelProperty("원활")
+    @JsonProperty("grad3")
+    private TbVmsIfscCmtrGradDto.CmtrGrad grad3;
 
     @ApiModelProperty("정보제공구간 목록")
     @JsonProperty("ifscs")
-    List<TbVmsIfscRltnDto> ifscs = new ArrayList<>();
+    List<TbVmsLinkIfscDto> ifscs = new ArrayList<>();
 
     @ApiModel("TbVmsIfscUpdReq(VMS 정보제공구간 정보변경)")
     @Getter
@@ -99,9 +107,10 @@ public class TbVmsIfscDto implements Serializable {
         @Size(min=1, max=30)
         private String dsplEndNodeNm;
 
-        @ApiModelProperty("우회도로 ID, Nullable = Y, NUMBER(10)")  // Y NUMBER(10)
+        @ApiModelProperty("우회도로 ID-없음=0, Nullable = Y, NUMBER(10)")  // Y NUMBER(10)
         @JsonProperty("detr_id")
-        @Positive
+        @Min(value = 0)
+        @Max(value = Long.MAX_VALUE)
         private Long detrId;
 
         @ApiModelProperty("도로명, Nullable = Y, VARCHAR(30)")  // Y VARCHAR(30)
@@ -120,6 +129,33 @@ public class TbVmsIfscDto implements Serializable {
         @Pattern(regexp = "[YN]")
         private String axisYn;
 
+        @ApiModelProperty("정체")
+        @JsonProperty("grad1")
+        private TbVmsIfscCmtrGradDto.CmtrGrad grad1;
+        @ApiModelProperty("지체")
+        @JsonProperty("grad2")
+        private TbVmsIfscCmtrGradDto.CmtrGrad grad2;
+        @ApiModelProperty("원활")
+        @JsonProperty("grad3")
+        private TbVmsIfscCmtrGradDto.CmtrGrad grad3;
+
+        @ApiModelProperty("정보제공구간 목록")
+        @JsonProperty("ifscs")
+        private List<VmsIfscLinkOrd> ifscs;
+
+        @Getter
+        @Setter
+        @Builder
+        public static class VmsIfscLinkOrd {
+            @ApiModelProperty("정보제공구간 ID")  // N NUMBER(10)
+            @JsonProperty("ifsc_id")
+            private Long ifscId;
+
+            @ApiModelProperty("순서")  // Y NUMBER(3)
+            @JsonProperty("ord")
+            private Short ord;
+        }
+
         @Builder
         public TbVmsIfscUpdReq(Long vms_ifsc_id, String vms_ifsc_nm, String edtn_cd, String dspl_strt_node_nm, String dspl_end_node_nm, Long detr_id, String road_nm, String spot_nm, String axis_yn) {
             this.vmsIfscId = vms_ifsc_id;

+ 45 - 25
src/main/java/com/its/op/model/dto/vms/TbVmsIfscRltnDto.java

@@ -8,6 +8,8 @@ import lombok.*;
 
 import javax.validation.constraints.Positive;
 import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * VMS 정보제공구간 관계 DTO Class
@@ -30,24 +32,23 @@ public class TbVmsIfscRltnDto implements Serializable {
     @JsonProperty("dspl_prrt")
     private Short dsplPrrt;
 
-    @ApiModelProperty("VMS 정보")  // Y NUMBER(2)
-    TbVmsCtlrDto vms = null;
+    @ApiModelProperty("VMS 정보제공구간 명")  // Y VARCHAR(60)
+    @JsonProperty("vms_ifsc_nm")
+    private String vmsIfscNm;
 
-    @ApiModelProperty("VMS 정보제공구간 정보")  // Y NUMBER(2)
-    TbVmsIfscDto ifsc = null;
+    @ApiModelProperty("표출 시작 노드 명")  // Y VARCHAR(30)
+    @JsonProperty("dspl_strt_node_nm")
+    private String dsplStrtNodeNm;
 
-    // Code Description Field
-    @ApiModel("TbVmsIfscRltnUpdReq(VMS 정보제공구간 관계 정보변경)")
+    @ApiModelProperty("표출 종료 노드 명")  // Y VARCHAR(30)
+    @JsonProperty("dspl_end_node_nm")
+    private String dsplEndNodeNm;
+
+    @ApiModel("VmsIfscRltn(VMS 정보제공구간 관계 정보)")
     @Getter
     @Setter
     @ToString
-    @NoArgsConstructor(access = AccessLevel.PROTECTED)
-    public static class TbVmsIfscRltnUpdReq {
-
-        @ApiModelProperty("VMS 제어기 번호, Nullable = N, NUMBER(10)")  // N NUMBER(10)
-        @JsonProperty("vms_ctlr_nmbr")
-        @Positive
-        private Long vmsCtlrNmbr;
+    public static class VmsIfscRltn {
 
         @ApiModelProperty("VMS 정보제공구간 ID, Nullable = N, NUMBER(10)")  // N NUMBER(10)
         @JsonProperty("vms_ifsc_id")
@@ -58,23 +59,42 @@ public class TbVmsIfscRltnDto implements Serializable {
         @JsonProperty("dspl_prrt")
         @Positive
         private Short dsplPrrt;
+    }
+
+    @ApiModel("TbVmsIfscRltnUpdReq(VMS 정보제공구간 관계 정보변경)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class TbVmsIfscRltnUpdReq {
+
+        @ApiModelProperty("VMS 제어기 번호, Nullable = N, NUMBER(10)")  // N NUMBER(10)
+        @JsonProperty("vms_ctlr_nmbr")
+        @Positive
+        private Long vmsCtlrNmbr;
+
+        @ApiModelProperty("VMS 정보제공구간 목록")
+        @JsonProperty("ifscs")
+        List<VmsIfscRltn> ifscs;
 
         @Builder
-        public TbVmsIfscRltnUpdReq(Long vms_ctlr_nmbr, Long vms_ifsc_id, Short dspl_prrt) {
+        public TbVmsIfscRltnUpdReq(Long vms_ctlr_nmbr, List<VmsIfscRltn> ifscs) {
             this.vmsCtlrNmbr = vms_ctlr_nmbr;
-            this.vmsIfscId = vms_ifsc_id;
-            this.dsplPrrt = dspl_prrt;
+            this.ifscs = ifscs;
         }
 
-
-        public TbVmsIfscRltn toEntity() {
-            TbVmsIfscRltn entity = TbVmsIfscRltn.builder()
-                    .vmsCtlrNmbr(this.vmsCtlrNmbr)
-                    .vmsIfscId(this.vmsIfscId)
-                    .dsplPrrt(this.dsplPrrt)
-                    .build();
-
-            return entity;
+        public List<TbVmsIfscRltn> toEntity() {
+            List<TbVmsIfscRltn> result = new ArrayList<>();
+            if (this.ifscs != null) {
+                for (VmsIfscRltn rltn : this.ifscs) {
+                    result.add(TbVmsIfscRltn.builder()
+                            .vmsCtlrNmbr(this.vmsCtlrNmbr)
+                            .vmsIfscId(rltn.getVmsIfscId())
+                            .dsplPrrt(rltn.getDsplPrrt())
+                            .build());
+                }
+            }
+            return result;
         }
 
     }

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

@@ -1,6 +1,7 @@
 package com.its.op.model.dto.vms;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.op.model.entity.database.TbIfsc;
 import com.its.op.model.entity.vms.TbVmsLinkIfsc;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -30,6 +31,31 @@ public class TbVmsLinkIfscDto implements Serializable {
     @JsonProperty("ord")
     private Short ord;
 
+    // 정보제공구간 부가 정보
+    @ApiModelProperty("정보제공구간 명")
+    @JsonProperty("ifsc_nm")
+    private String ifscNm;
+
+    @ApiModelProperty("정보제공구간 시점 명")
+    @JsonProperty("strt_nm")
+    private String strtNm;
+
+    @ApiModelProperty("정보제공구간 종점 명")
+    @JsonProperty("end_nm")
+    private String endNm;
+
+    public void setIfscInfo(TbIfsc ifsc) {
+        if (ifsc == null) {
+            this.ifscNm = "";
+            this.strtNm = "";
+            this.endNm  = "";
+        }
+        else {
+            this.ifscNm = ifsc.getIfscNm();
+            this.strtNm = ifsc.getStrtNm();
+            this.endNm  = ifsc.getEndNm();
+        }
+    }
     // Code Description Field
     @ApiModel("TbVmsLinkIfscUpdReq(VMS LINK 정보제공구간 정보변경)")
     @Getter

+ 119 - 0
src/main/java/com/its/op/model/entity/database/TbIfsc.java

@@ -0,0 +1,119 @@
+package com.its.op.model.entity.database;
+
+import com.its.op.model.dto.database.TbIfscDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.Serializable;
+
+/**
+ * 정보제공구간 Entity Class
+ */
+@Getter
+@NoArgsConstructor
+@Builder
+@AllArgsConstructor
+@ApiModel("정보제공구간")
+@Entity
+@Table(name = "TB_IFSC")
+public class TbIfsc implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("정보제공구간 ID")  // N NUMBER(10)
+    @Id
+    @Column(name = "IFSC_ID", nullable = false, columnDefinition = "NUMBER", length = 10)
+    private Long ifscId;
+
+    @ApiModelProperty("정보제공구간 명")  // Y VARCHAR(100)
+    @Column(name = "IFSC_NM", length = 100)
+    private String ifscNm;
+
+    @ApiModelProperty("방향 코드")  // Y VARCHAR(7)
+    @Column(name = "DRCT_CD", length = 7)
+    private String drctCd;
+
+    @ApiModelProperty("시점 명")  // Y VARCHAR(100)
+    @Column(name = "STRT_NM", length = 100)
+    private String strtNm;
+
+    @ApiModelProperty("종점 명")  // Y VARCHAR(100)
+    @Column(name = "END_NM", length = 100)
+    private String endNm;
+
+    @ApiModelProperty("구간 길이")  // Y NUMBER(5)
+    @Column(name = "SECT_LNGT", columnDefinition = "NUMBER", length = 5)
+    private Short sectLngt;
+
+    @ApiModelProperty("외부 연계 구간 여부")  // Y CHAR(1)
+    @Column(name = "EXTR_CNCT_SECT_YN", columnDefinition = "CHAR", length = 1)
+    private String extrCnctSectYn;
+
+    @ApiModelProperty("삭제 여부")  // Y CHAR(1)
+    @Column(name = "DEL_YN", columnDefinition = "CHAR", length = 1)
+    private String delYn;
+
+    @ApiModelProperty("비고")  // Y VARCHAR(600)
+    @Column(name = "RMRK", length = 600)
+    private String rmrk;
+
+    @ApiModelProperty("시작 노드 ID")  // Y NUMBER(10)
+    @Column(name = "F_NODE_ID", columnDefinition = "NUMBER", length = 10)
+    private Long fNodeId;
+
+    @ApiModelProperty("종료 노드 ID")  // Y NUMBER(10)
+    @Column(name = "T_NODE_ID", columnDefinition = "NUMBER", length = 10)
+    private Long tNodeId;
+
+    @ApiModelProperty("구간 등급 코드")  // Y VARCHAR(7)
+    @Column(name = "SECT_GRAD_CD", length = 7)
+    private String sectGradCd;
+
+    @ApiModelProperty("지역 코드")  // Y VARCHAR(7)
+    @Column(name = "AREA_CD", length = 7)
+    private String areaCd;
+
+    public TbIfscDto toDto() {
+        TbIfscDto dto = TbIfscDto.builder()
+                .ifscId(this.ifscId)
+                .ifscNm(this.ifscNm)
+                .drctCd(this.drctCd)
+                .strtNm(this.strtNm)
+                .endNm(this.endNm)
+                .sectLngt(this.sectLngt)
+                .extrCnctSectYn(this.extrCnctSectYn)
+                .delYn(this.delYn)
+                .rmrk(this.rmrk)
+                .fNodeId(this.fNodeId)
+                .tNodeId(this.tNodeId)
+                .sectGradCd(this.sectGradCd)
+                .areaCd(this.areaCd)
+                .build();
+
+        return dto;
+    }
+
+    public TbIfsc(Long ifscId) {
+        this.ifscId = ifscId;
+    }
+
+    public void updateInfo(TbIfscDto.TbIfscUpdReq req) {
+        this.ifscNm = req.getIfscNm();
+        this.drctCd = req.getDrctCd();
+        this.strtNm = req.getStrtNm();
+        this.endNm = req.getEndNm();
+        this.sectLngt = req.getSectLngt();
+        this.extrCnctSectYn = req.getExtrCnctSectYn();
+        this.delYn = req.getDelYn();
+        this.rmrk = req.getRmrk();
+        this.fNodeId = req.getFNodeId();
+        this.tNodeId = req.getTNodeId();
+        this.sectGradCd = req.getSectGradCd();
+        this.areaCd = req.getAreaCd();
+    }
+
+}

+ 4 - 0
src/main/java/com/its/op/model/entity/vms/TbVmsCtlr.java

@@ -1,5 +1,6 @@
 package com.its.op.model.entity.vms;
 
+import com.its.op.global.CodeManager;
 import com.its.op.model.dto.vms.TbVmsCtlrDto;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -244,6 +245,9 @@ public class TbVmsCtlr implements Serializable {
                 .strmSesnNm(this.strmSesnNm)
                 .build();
 
+        dto.setVmsUsagTypeDesc(CodeManager.getCodeDescShort(CodeManager.VMS_USAG_TYPE_CD, dto.getVmsUsagTypeCd()));
+        dto.setVmsTypeDesc(CodeManager.getCodeDescShort(CodeManager.VMS_TYPE_CD, dto.getVmsTypeCd()));
+
         return dto;
     }
 

+ 7 - 8
src/main/java/com/its/op/model/entity/vms/TbVmsIfsc.java

@@ -1,15 +1,16 @@
 package com.its.op.model.entity.vms;
 
 import com.its.op.model.dto.vms.TbVmsIfscDto;
-import com.its.op.model.dto.vms.TbVmsIfscRltnDto;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.List;
 
 /**
  * VMS 정보제공구간 Entity Class
@@ -61,10 +62,7 @@ public class TbVmsIfsc implements Serializable {
     @Column(name = "AXIS_YN", columnDefinition = "CHAR", length = 1)
     private String axisYn;
 
-    @Transient
-    List<TbVmsIfscRltn> ifscs = new ArrayList<>();
-
-    public TbVmsIfscDto toDto(List<TbVmsIfscRltnDto> ifscs) {
+    public TbVmsIfscDto toDto() {
         TbVmsIfscDto dto = TbVmsIfscDto.builder()
                 .vmsIfscId(this.vmsIfscId)
                 .vmsIfscNm(this.vmsIfscNm)
@@ -75,8 +73,9 @@ public class TbVmsIfsc implements Serializable {
                 .roadNm(this.roadNm)
                 .spotNm(this.spotNm)
                 .axisYn(this.axisYn)
-                .ifscs(ifscs)
+                .ifscs(new ArrayList<>())
                 .build();
+
         return dto;
     }
 

+ 5 - 8
src/main/java/com/its/op/model/entity/vms/TbVmsIfscRltn.java

@@ -9,7 +9,6 @@ import org.hibernate.annotations.NotFoundAction;
 
 import javax.persistence.*;
 import java.io.Serializable;
-import java.util.ArrayList;
 
 /**
  * VMS 정보제공구간 관계 Entity Class
@@ -54,10 +53,12 @@ public class TbVmsIfscRltn implements Serializable {
                 .vmsCtlrNmbr(this.vmsCtlrNmbr)
                 .vmsIfscId(this.vmsIfscId)
                 .dsplPrrt(this.dsplPrrt)
-                .vms(this.vms == null ? null : this.vms.toDto())
-                .ifsc(this.ifsc == null ? null : this.ifsc.toDto(new ArrayList<>()))
                 .build();
-
+        if (this.ifsc != null) {
+            dto.setVmsIfscNm(this.ifsc.getVmsIfscNm());
+            dto.setDsplStrtNodeNm(this.ifsc.getDsplStrtNodeNm());
+            dto.setDsplEndNodeNm(this.ifsc.getDsplEndNodeNm());
+        }
         return dto;
     }
 
@@ -66,8 +67,4 @@ public class TbVmsIfscRltn implements Serializable {
         this.vmsIfscId = vmsIfscId;
     }
 
-    public void updateInfo(TbVmsIfscRltnDto.TbVmsIfscRltnUpdReq req) {
-        this.dsplPrrt = req.getDsplPrrt();
-    }
-
 }

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

@@ -1,9 +1,12 @@
 package com.its.op.model.entity.vms;
 
 import com.its.op.model.dto.vms.TbVmsLinkIfscDto;
+import com.its.op.model.entity.database.TbIfsc;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
+import org.hibernate.annotations.NotFound;
+import org.hibernate.annotations.NotFoundAction;
 
 import javax.persistence.*;
 import java.io.Serializable;
@@ -36,6 +39,12 @@ public class TbVmsLinkIfsc implements Serializable {
     @Column(name = "ORD", columnDefinition = "NUMBER", length = 3)
     private Short ord;
 
+    @ApiModelProperty("정보제공구간정보")
+    @OneToOne//(fetch = FetchType.EAGER)
+    @JoinColumn(insertable=false, updatable=false, name="IFSC_ID", referencedColumnName = "IFSC_ID")
+    @NotFound(action = NotFoundAction.IGNORE)
+    private TbIfsc ifsc = new TbIfsc();
+
     public TbVmsLinkIfscDto toDto() {
         TbVmsLinkIfscDto dto = TbVmsLinkIfscDto.builder()
                 .vmsIfscId(this.vmsIfscId)

+ 11 - 0
src/main/java/com/its/op/repository/database/TbIfscRepository.java

@@ -0,0 +1,11 @@
+package com.its.op.repository.database;
+
+import com.its.op.model.entity.database.TbIfsc;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TbIfscRepository extends JpaRepository<TbIfsc, Long>, JpaSpecificationExecutor<TbIfsc> {
+
+}

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

@@ -8,14 +8,23 @@ import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface TbVmsIfscCmtrGradRepository extends JpaRepository<TbVmsIfscCmtrGrad, TbVmsIfscCmtrGradKey>, JpaSpecificationExecutor<TbVmsIfscCmtrGrad> {
 
-    @Modifying // select 문이 아님을 나타낸다
-    @Query(value = "DELETE from TB_VMS_IFSC_CMTR_GRAD", nativeQuery = true)
+    @Modifying
+    @Query(value = "delete from TB_VMS_IFSC_CMTR_GRAD", nativeQuery = true)
     void deleteDataAll() throws Exception;
 
-    @Modifying // select 문이 아님을 나타낸다
+    @Modifying
+    @Query("delete from TbVmsIfscCmtrGrad p where p.vmsIfscId = :vmsIfscId")
+    void deleteDataById(Long vmsIfscId);
+
+     @Query("select p from TbVmsIfscCmtrGrad p where p.vmsIfscId = :vmsIfscId")
+     List<TbVmsIfscCmtrGrad> findDataById(Long vmsIfscId);
+
+    @Modifying
     @Query(value = "insert into TB_VMS_IFSC_CMTR_GRAD(VMS_IFSC_ID, CMTR_GRAD_CD, LWSTSPED, HGHSSPED) select vms_ifsc_id, :cmtr_grad_cd, :lwstsped, :hghssped from TB_VMS_IFSC ", nativeQuery = true)
     void insertDataAll(String cmtr_grad_cd, Short lwstsped, Short hghssped);
 

+ 2 - 0
src/main/java/com/its/op/repository/vms/TbVmsIfscRepository.java

@@ -12,4 +12,6 @@ public interface TbVmsIfscRepository extends JpaRepository<TbVmsIfsc, Long>, Jpa
     @Query("select count(p.detrId) from TbVmsIfsc p where p.detrId = :vmsIfscId and p.vmsIfscId <> :vmsIfscId")
     Integer findUsageCountByVmsIfscId(Long vmsIfscId);
 
+    @Query(value = "SELECT NVL(MAX(VMS_IFSC_ID), 0) + 1 FROM TB_VMS_IFSC", nativeQuery = true)
+    Long getNewVmsIfscId();
 }

+ 7 - 2
src/main/java/com/its/op/repository/vms/TbVmsIfscRltnRepository.java

@@ -4,6 +4,7 @@ import com.its.op.model.entity.vms.TbVmsIfscRltn;
 import com.its.op.model.entity.vms.TbVmsIfscRltnKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
@@ -15,8 +16,12 @@ 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();
 
-    @Query("select p from TbVmsIfscRltn p inner join fetch p.vms inner join fetch p.ifsc where p.vmsIfscId = :vmsIfscId")
-    List<TbVmsIfscRltn> findDataById(Long vmsIfscId);
+    @Query("select p from TbVmsIfscRltn p inner join fetch p.vms inner join fetch p.ifsc where p.vmsCtlrNmbr = :vmsCtlrNmbr")
+    List<TbVmsIfscRltn> findDataById(Long vmsCtlrNmbr);
+
+    @Modifying
+    @Query("delete from TbVmsIfscRltn p where p.vmsCtlrNmbr = :vmsCtlrNmbr")
+    void deleteDataById(Long vmsCtlrNmbr);
 
     @Query("select count(p.vmsIfscId) from TbVmsIfscRltn p where p.vmsIfscId = :vmsIfscId")
     Integer findUsageCountByVmsIfscId(Long vmsIfscId);

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

@@ -4,13 +4,26 @@ 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.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface TbVmsLinkIfscRepository extends JpaRepository<TbVmsLinkIfsc, TbVmsLinkIfscKey>, JpaSpecificationExecutor<TbVmsLinkIfsc> {
 
+    @Query("select p from TbVmsLinkIfsc p inner join fetch p.ifsc")
+    List<TbVmsLinkIfsc> findDataAll();
+
+    @Query("select p from TbVmsLinkIfsc p inner join fetch p.ifsc where p.vmsIfscId = :vmsIfscId")
+    List<TbVmsLinkIfsc> findDataById(Long vmsIfscId);
+
     @Query("select count(p.vmsIfscId) from TbVmsLinkIfsc p where p.vmsIfscId = :vmsIfscId")
     Integer findUsageCountByVmsIfscId(Long vmsIfscId);
 
+    @Modifying // select 문이 아님을 나타낸다
+    @Query("delete from TbVmsLinkIfsc p where p.vmsIfscId = :vmsIfscId")
+    void deleteDataById(Long vmsIfscId);
+
 }

+ 90 - 0
src/main/java/com/its/op/service/database/TbIfscService.java

@@ -0,0 +1,90 @@
+package com.its.op.service.database;
+
+import com.its.op.model.dto.database.TbIfscDto;
+import com.its.op.model.entity.database.TbIfsc;
+import com.its.op.repository.database.TbIfscRepository;
+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 TbIfscService {
+
+    private final TbIfscRepository repo;
+
+    // 데이터 1건 조회, 없으면 exception
+    private TbIfsc requireOne(Long id) {
+        return repo.findById(id)
+                .orElseThrow(() -> new NoSuchElementException("데이터가 존재하지 않습니다: " + id));
+    }
+
+    // 전체 데이터 조회
+    public List<TbIfscDto> findAll() {
+        List<TbIfscDto> result = new ArrayList<>();
+        List<TbIfsc> data = this.repo.findAll();
+        for (TbIfsc entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
+    public TbIfscDto findById(Long id) {
+        TbIfsc entity = requireOne(id);
+        return entity.toDto();
+    }
+
+    // 데이터 변경
+    public TbIfscDto updateById(Long id, TbIfscDto.TbIfscUpdReq req) {
+        TbIfsc entity = requireOne(id);
+        entity.updateInfo(req);
+        this.repo.save(entity);
+        return entity.toDto();
+    }
+
+    // 데이터 변경 또는 생성-목록(데이터가 존재하면 업데이트 없으면 신규로 생성)
+    public List<TbIfscDto> mergeInfoList(List<TbIfscDto.TbIfscUpdReq> reqList) {
+        List<TbIfscDto> result = new ArrayList<>();
+        for (TbIfscDto.TbIfscUpdReq req : reqList) {
+            TbIfsc obj = req.toEntity();
+            this.repo.save(obj);
+            result.add(obj.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
+    public TbIfscDto mergeInfo(TbIfscDto.TbIfscUpdReq req) {
+        TbIfsc obj = req.toEntity();
+        this.repo.save(obj);
+        return obj.toDto();
+    }
+
+    // 정보 삭제-개별, 데이터 존재하지 않으면 Exception
+    public TbIfscDto deleteById(Long id) {
+        TbIfsc entity = requireOne(id);
+        this.repo.deleteById(id);
+        return entity.toDto();
+    }
+
+    // 정보 삭제-목록, 존재하는 데이터 만 삭제
+    public List<TbIfscDto> deleteByIds(List<Long> ids) {
+        List<TbIfscDto> result = new ArrayList<>();
+        for (Long id : ids) {
+            Optional<TbIfsc> obj = this.repo.findById(id);
+            if (obj.isPresent()) {
+                this.repo.deleteById(id);
+                result.add(obj.get().toDto());
+            }
+        }
+        return result;
+    }
+
+}

+ 10 - 0
src/main/java/com/its/op/service/vms/TbVmsCtlrService.java

@@ -34,6 +34,16 @@ public class TbVmsCtlrService {
         }
         return result;
     }
+    public List<TbVmsCtlrDto> findNotDeletedAll() {
+        List<TbVmsCtlrDto> result = new ArrayList<>();
+        List<TbVmsCtlr> data = this.repo.findAll();
+        for (TbVmsCtlr entity : data) {
+            if (entity.getDelYn().equals("N")) {
+                result.add(entity.toDto());
+            }
+        }
+        return result;
+    }
 
     // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
     public TbVmsCtlrDto findById(Long id) {

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

@@ -43,6 +43,17 @@ public class TbVmsIfscCmtrGradService {
         return entity.toDto();
     }
 
+    public List<TbVmsIfscCmtrGradDto> findDataById(Long id) {
+        List<TbVmsIfscCmtrGradDto> result = new ArrayList<>();
+        List<TbVmsIfscCmtrGrad> data = this.repo.findDataById(id);
+        if (data != null) {
+            for (TbVmsIfscCmtrGrad grad : data) {
+                result.add(grad.toDto());
+            }
+        }
+        return result;
+    }
+
     // 데이터 변경
     @Transactional
     public TbVmsIfscCmtrGradDto updateById(TbVmsIfscCmtrGradKey id, TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq req) {
@@ -80,6 +91,11 @@ public class TbVmsIfscCmtrGradService {
         return entity.toDto();
     }
 
+    @Transactional
+    public void deleteDataById(Long vmsIfscId) {
+         this.repo.deleteDataById(vmsIfscId);
+    }
+
     // 정보 삭제-목록, 존재하는 데이터 만 삭제
     @Transactional
     public List<TbVmsIfscCmtrGradDto> deleteByIds(List<TbVmsIfscCmtrGradKey> ids) {

+ 23 - 15
src/main/java/com/its/op/service/vms/TbVmsIfscRltnService.java

@@ -8,10 +8,10 @@ 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
@@ -43,15 +43,15 @@ public class TbVmsIfscRltnService {
     }
 
     // 데이터 변경
-    public TbVmsIfscRltnDto updateById(TbVmsIfscRltnKey id, TbVmsIfscRltnDto.TbVmsIfscRltnUpdReq req) {
+    /*public TbVmsIfscRltnDto updateById(TbVmsIfscRltnKey id, TbVmsIfscRltnDto.TbVmsIfscRltnUpdReq req) {
         TbVmsIfscRltn entity = requireOne(id);
         entity.updateInfo(req);
         this.repo.save(entity);
         return entity.toDto();
-    }
+    }*/
 
     // 데이터 변경 또는 생성-목록(데이터가 존재하면 업데이트 없으면 신규로 생성)
-    public List<TbVmsIfscRltnDto> mergeInfoList(List<TbVmsIfscRltnDto.TbVmsIfscRltnUpdReq> reqList) {
+    /*public List<TbVmsIfscRltnDto> mergeInfoList(List<TbVmsIfscRltnDto.TbVmsIfscRltnUpdReq> reqList) {
         List<TbVmsIfscRltnDto> result = new ArrayList<>();
         for (TbVmsIfscRltnDto.TbVmsIfscRltnUpdReq req : reqList) {
             TbVmsIfscRltn obj = req.toEntity();
@@ -59,24 +59,32 @@ public class TbVmsIfscRltnService {
             result.add(obj.toDto());
         }
         return result;
-    }
+    }*/
 
     // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
-    public TbVmsIfscRltnDto mergeInfo(TbVmsIfscRltnDto.TbVmsIfscRltnUpdReq req) {
-        TbVmsIfscRltn obj = req.toEntity();
-        this.repo.save(obj);
-        return obj.toDto();
+    @Transactional
+    public TbVmsIfscRltnDto.TbVmsIfscRltnUpdReq mergeInfo(TbVmsIfscRltnDto.TbVmsIfscRltnUpdReq req) {
+
+        // 기존 설정 정보를 삭제한다.
+        this.repo.deleteDataById(req.getVmsCtlrNmbr());
+
+        // 설정 정보를 저장한다.
+        List<TbVmsIfscRltn> data = req.toEntity();
+        for (TbVmsIfscRltn obj : data) {
+            this.repo.save(obj);
+        }
+        return req;
     }
 
     // 정보 삭제-개별, 데이터 존재하지 않으면 Exception
-    public TbVmsIfscRltnDto deleteById(TbVmsIfscRltnKey id) {
+    /*public TbVmsIfscRltnDto deleteById(TbVmsIfscRltnKey id) {
         TbVmsIfscRltn entity = requireOne(id);
         this.repo.deleteById(id);
         return entity.toDto();
-    }
+    }*/
 
     // 정보 삭제-목록, 존재하는 데이터 만 삭제
-    public List<TbVmsIfscRltnDto> deleteByIds(List<TbVmsIfscRltnKey> ids) {
+    /*public List<TbVmsIfscRltnDto> deleteByIds(List<TbVmsIfscRltnKey> ids) {
         List<TbVmsIfscRltnDto> result = new ArrayList<>();
         for (TbVmsIfscRltnKey id : ids) {
             Optional<TbVmsIfscRltn> obj = this.repo.findById(id);
@@ -86,7 +94,7 @@ public class TbVmsIfscRltnService {
             }
         }
         return result;
-    }
+    }*/
 
     // 도형식 VMS 에 설정된 정보제공 구간 목록 전체를 리턴
     public List<TbVmsIfscRltnDto> findFigureIfscAll() {
@@ -103,9 +111,9 @@ public class TbVmsIfscRltnService {
         return result;
     }
 
-    public List<TbVmsIfscRltnDto> findDataById(Long id) {
+    public List<TbVmsIfscRltnDto> findDataById(Long vmsCtlrNmbr) {
         List<TbVmsIfscRltnDto> result = new ArrayList<>();
-        List<TbVmsIfscRltn> list = this.repo.findDataById(id);
+        List<TbVmsIfscRltn> list = this.repo.findDataById(vmsCtlrNmbr);
         for (TbVmsIfscRltn obj : list) {
             if (obj.getIfsc() != null && obj.getVms() != null) {
                 if (!obj.getVms().getDelYn().equals("Y") && !obj.getIfsc().getEdtnCd().equals("EDI2")) {

+ 91 - 15
src/main/java/com/its/op/service/vms/TbVmsIfscService.java

@@ -1,17 +1,19 @@
 package com.its.op.service.vms;
 
+import com.its.op.model.dto.vms.TbVmsIfscCmtrGradDto;
 import com.its.op.model.dto.vms.TbVmsIfscDto;
-import com.its.op.model.dto.vms.TbVmsIfscRltnDto;
+import com.its.op.model.dto.vms.TbVmsLinkIfscDto;
 import com.its.op.model.entity.vms.TbVmsIfsc;
 import com.its.op.repository.vms.TbVmsIfscRepository;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import javax.transaction.Transactional;
 import java.util.ArrayList;
+import java.util.ConcurrentModificationException;
 import java.util.List;
 import java.util.NoSuchElementException;
-import java.util.Optional;
 
 @Slf4j
 @RequiredArgsConstructor
@@ -22,6 +24,7 @@ public class TbVmsIfscService {
     private final TbVmsIfscRltnService ifscRltnService;
     private final TbVmsFormObjectService formObjectService;
     private final TbVmsLinkIfscService linkIfscService;
+    private final TbVmsIfscCmtrGradService cmtrGradService;
 
     // 데이터 1건 조회, 없으면 exception
     private TbVmsIfsc requireOne(Long id) {
@@ -34,7 +37,7 @@ public class TbVmsIfscService {
         List<TbVmsIfscDto> result = new ArrayList<>();
         List<TbVmsIfsc> data = this.repo.findAll();
         for (TbVmsIfsc entity : data) {
-            result.add(entity.toDto(new ArrayList<>()));
+            result.add(entity.toDto());
         }
         return result;
     }
@@ -42,8 +45,35 @@ public class TbVmsIfscService {
     // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
     public TbVmsIfscDto findById(Long id) {
         TbVmsIfsc entity = requireOne(id);
-        List<TbVmsIfscRltnDto> list = this.ifscRltnService.findDataById(id);
-        return entity.toDto(list);
+        List<TbVmsLinkIfscDto> list = this.linkIfscService.findDataById(id);
+        TbVmsIfscDto dto = entity.toDto();
+        dto.setIfscs(list);
+
+        TbVmsIfscCmtrGradDto.CmtrGrad grad1 = new TbVmsIfscCmtrGradDto.CmtrGrad((short)0, (short)0);
+        TbVmsIfscCmtrGradDto.CmtrGrad grad2 = new TbVmsIfscCmtrGradDto.CmtrGrad((short)0, (short)0);
+        TbVmsIfscCmtrGradDto.CmtrGrad grad3 = new TbVmsIfscCmtrGradDto.CmtrGrad((short)0, (short)0);
+        List<TbVmsIfscCmtrGradDto> gradList = this.cmtrGradService.findDataById(id);
+        if (gradList != null) {
+            for (TbVmsIfscCmtrGradDto grad : gradList) {
+                if (grad.getCmtrGradCd().equals("1")) {
+                    grad1.setHghssped(grad.getHghssped());
+                    grad1.setLwstsped(grad.getLwstsped());
+                }
+                else if (grad.getCmtrGradCd().equals("2")) {
+                    grad2.setHghssped(grad.getHghssped());
+                    grad2.setLwstsped(grad.getLwstsped());
+                }
+                else if (grad.getCmtrGradCd().equals("3")) {
+                    grad3.setHghssped(grad.getHghssped());
+                    grad3.setLwstsped(grad.getLwstsped());
+                }
+            }
+        }
+        dto.setGrad1(grad1);
+        dto.setGrad2(grad2);
+        dto.setGrad3(grad3);
+
+        return dto;
     }
 
     // 데이터 변경
@@ -51,7 +81,7 @@ public class TbVmsIfscService {
         TbVmsIfsc entity = requireOne(id);
         entity.updateInfo(req);
         this.repo.save(entity);
-        return entity.toDto(new ArrayList<>());
+        return entity.toDto();
     }
 
     // 데이터 변경 또는 생성-목록(데이터가 존재하면 업데이트 없으면 신규로 생성)
@@ -60,34 +90,76 @@ public class TbVmsIfscService {
         for (TbVmsIfscDto.TbVmsIfscUpdReq req : reqList) {
             TbVmsIfsc obj = req.toEntity();
             this.repo.save(obj);
-            result.add(obj.toDto(new ArrayList<>()));
+            result.add(obj.toDto());
         }
         return result;
     }
 
     // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
-    public TbVmsIfscDto mergeInfo(TbVmsIfscDto.TbVmsIfscUpdReq req) {
+    @Transactional
+    public TbVmsIfscDto.TbVmsIfscUpdReq mergeInfo(TbVmsIfscDto.TbVmsIfscUpdReq req) {
+
+        if (req.getDetrId() == 0) {
+            req.setDetrId(null);
+        }
+
+        // VMS 정보제공구간 정보 저장
+        req.setEdtnCd("EDI1");  // 편집코드를 수정으로 설정
         TbVmsIfsc obj = req.toEntity();
         this.repo.save(obj);
-        return obj.toDto(new ArrayList<>());
+
+        // 소통등급 정보 저장(merge)
+        TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq grad1 = new TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq(req.getVmsIfscId(), "1", req.getGrad1().getLwstsped(), req.getGrad1().getHghssped());
+        TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq grad2 = new TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq(req.getVmsIfscId(), "2", req.getGrad2().getLwstsped(), req.getGrad2().getHghssped());
+        TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq grad3 = new TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq(req.getVmsIfscId(), "3", req.getGrad3().getLwstsped(), req.getGrad3().getHghssped());
+        this.cmtrGradService.mergeInfo(grad1);
+        this.cmtrGradService.mergeInfo(grad2);
+        this.cmtrGradService.mergeInfo(grad3);
+
+        // VMS LINK 정보제공구간 정보 삭제
+        this.linkIfscService.deleteDataById(req.getVmsIfscId());
+        // VMS LINK 정보제공구간 정보 저장
+        for (TbVmsIfscDto.TbVmsIfscUpdReq.VmsIfscLinkOrd ifsc : req.getIfscs()) {
+            TbVmsLinkIfscDto.TbVmsLinkIfscUpdReq ifscReq = new TbVmsLinkIfscDto.TbVmsLinkIfscUpdReq(req.getVmsIfscId(), ifsc.getIfscId(), ifsc.getOrd());
+            TbVmsLinkIfscDto ifscDto = this.linkIfscService.mergeInfo(ifscReq);
+        }
+
+        return req;
     }
 
     // 정보 삭제-개별, 데이터 존재하지 않으면 Exception
+    @Transactional
     public TbVmsIfscDto deleteById(Long id) {
+        int usageCount = findUsageCountByVmsIfscId(id);
+        if (usageCount > 0) {
+            throw new ConcurrentModificationException("사용중인 정보제공구간 입니다. 삭제할 수 없습니다: " + id);
+        }
+
+        //VMS_정보제공구간 소통 등급
+        //sQry = "DELETE FROM TB_VMS_IFSC_CMTR_GRAD WHERE VMS_IFSC_ID = :p01";
+        //VMS LINK 정보제공구간
+        //sQry = "DELETE FROM TB_VMS_LINK_IFSC WHERE VMS_IFSC_ID = :p01";
+        //VMS 정보제공구간 관계
+        //sQry = "DELETE FROM TB_VMS_IFSC_RLTN WHERE VMS_IFSC_ID = :p01";
+        //VMS_소통정보
+        //sQry = "DELETE FROM TB_VMS_CMTRINFR WHERE VMS_IFSC_ID = :p01";
+
         TbVmsIfsc entity = requireOne(id);
+
+        // VMS 정보제공구간 소통등급 정보 삭제
+        this.cmtrGradService.deleteDataById(id);
+        // VMS LINK 정보제공구간에 속하는 정보제공구간 정보 목록 삭제
+        this.linkIfscService.deleteDataById(id);
+        // VMS 정보제공구간 정보 삭제
         this.repo.deleteById(id);
-        return entity.toDto(new ArrayList<>());
+        return entity.toDto();
     }
 
     // 정보 삭제-목록, 존재하는 데이터 만 삭제
     public List<TbVmsIfscDto> deleteByIds(List<Long> ids) {
         List<TbVmsIfscDto> result = new ArrayList<>();
         for (Long id : ids) {
-            Optional<TbVmsIfsc> obj = this.repo.findById(id);
-            if (obj.isPresent()) {
-                this.repo.deleteById(id);
-                result.add(obj.get().toDto(new ArrayList<>()));
-            }
+            result.add(deleteById(id));
         }
         return result;
     }
@@ -119,4 +191,8 @@ public class TbVmsIfscService {
 
         return 0;
     }
+
+    public Long getNewVmsIfscId() {
+        return this.repo.getNewVmsIfscId();
+    }
 }

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

@@ -93,4 +93,21 @@ public class TbVmsLinkIfscService {
         return this.repo.findUsageCountByVmsIfscId(vmsIfscId);
     }
 
+    public List<TbVmsLinkIfscDto> findDataById(Long id) {
+        List<TbVmsLinkIfscDto> result = new ArrayList<>();
+        List<TbVmsLinkIfsc> list = this.repo.findDataById(id);
+        for (TbVmsLinkIfsc obj : list) {
+            if (obj.getIfsc() != null && obj.getIfsc().getDelYn().equals("N")) {
+                // 삭제 된것 제외
+                TbVmsLinkIfscDto dto = obj.toDto();
+                dto.setIfscInfo(obj.getIfsc()); // 정보제공구간 정보 설정
+                result.add(dto);
+            }
+        }
+        return result;
+    }
+
+    public void deleteDataById(Long id) {
+        this.repo.deleteDataById(id);
+    }
 }

+ 1 - 1
src/main/java/com/its/op/service/vms/TbVmsSymbLibServiceVMP1.java

@@ -39,7 +39,7 @@ public class TbVmsSymbLibServiceVMP1 extends TbVmsSymbLibService {
     public TbVmsSymbLibDto deleteDataById(Short id) {
         int usageCount = findUsageCountBySymbolId(id);
         if (usageCount > 0) {
-            throw new ConcurrentModificationException("사용중인 심볼 라이브러리 입니다. 삭제할 수 없습니다: " + id);
+            throw new ConcurrentModificationException("사용중인 소통정보 배경이미지 입니다. 삭제할 수 없습니다: " + id);
         }
         this.ifscService.deleteDataById(id);
 

+ 1 - 1
src/main/java/com/its/op/service/vms/TbVmsSymbLibServiceVMP2.java

@@ -58,7 +58,7 @@ public class TbVmsSymbLibServiceVMP2 extends TbVmsSymbLibService {
     public TbVmsSymbLibDto deleteDataById(Short id) {
         int usageCount = findUsageCountBySymbolId(id);
         if (usageCount > 0) {
-            throw new ConcurrentModificationException("사용중인 심볼 라이브러리 입니다. 삭제할 수 없습니다: " + id);
+            throw new ConcurrentModificationException("사용중인 소통정보 이미지 입니다. 삭제할 수 없습니다: " + id);
         }
         Short cellId = 1;
         TbVmsSymbIfscKey key = new TbVmsSymbIfscKey(id, cellId);