shjung 3 éve
szülő
commit
e35d4040cc
32 módosított fájl, 1140 hozzáadás és 542 törlés
  1. 1 1
      src/main/java/com/its/api/its/controller/vms/TbVmsDsplHsController.java
  2. 76 33
      src/main/java/com/its/api/its/controller/vms/TbVmsTrfcInfrDsplSchAutoController.java
  3. 169 0
      src/main/java/com/its/api/its/controller/vms/TbVmsTrfcInfrDsplSchController.java
  4. 20 46
      src/main/java/com/its/api/its/controller/vms/TbVmsTrfcInfrDsplSchDefaultController.java
  5. 21 47
      src/main/java/com/its/api/its/controller/vms/TbVmsTrfcInfrDsplSchFixedController.java
  6. 21 80
      src/main/java/com/its/api/its/controller/vms/VmsCommonController.java
  7. 2 0
      src/main/java/com/its/api/its/global/CodeManager.java
  8. 130 0
      src/main/java/com/its/api/its/model/dto/vms/TbVmsDsplPrstDto.java
  9. 4 0
      src/main/java/com/its/api/its/model/dto/vms/TbVmsFormDto.java
  10. 40 0
      src/main/java/com/its/api/its/model/dto/vms/TbVmsTrfcInfrDsplSchDto.java
  11. 8 0
      src/main/java/com/its/api/its/model/dto/vms/VwVmsDsplPrstDto.java
  12. 13 4
      src/main/java/com/its/api/its/model/entity/vds/TbVdsCtlrStts.java
  13. 13 4
      src/main/java/com/its/api/its/model/entity/vds/TbVdsCtlrSttsHs.java
  14. 136 0
      src/main/java/com/its/api/its/model/entity/vms/TbVmsDsplPrst.java
  15. 25 0
      src/main/java/com/its/api/its/model/entity/vms/TbVmsDsplPrstKey.java
  16. 15 6
      src/main/java/com/its/api/its/model/entity/vms/TbVmsStts.java
  17. 15 6
      src/main/java/com/its/api/its/model/entity/vms/TbVmsSttsHs.java
  18. 7 1
      src/main/java/com/its/api/its/model/entity/vms/TbVmsTrfcInfrDsplSch.java
  19. 5 0
      src/main/java/com/its/api/its/model/entity/vms/VwVmsDsplPrst.java
  20. 25 0
      src/main/java/com/its/api/its/repository/vms/TbVmsDsplPrstRepository.java
  21. 1 1
      src/main/java/com/its/api/its/repository/vms/TbVmsSymbIfscRepository.java
  22. 14 0
      src/main/java/com/its/api/its/repository/vms/TbVmsTrfcInfrDsplSchRepository.java
  23. 22 1
      src/main/java/com/its/api/its/service/vms/TbVmsCtlrService.java
  24. 1 1
      src/main/java/com/its/api/its/service/vms/TbVmsDsplHsService.java
  25. 62 0
      src/main/java/com/its/api/its/service/vms/TbVmsDsplPrstService.java
  26. 9 5
      src/main/java/com/its/api/its/service/vms/TbVmsFormService.java
  27. 1 1
      src/main/java/com/its/api/its/service/vms/TbVmsSymbLibService.java
  28. 0 99
      src/main/java/com/its/api/its/service/vms/TbVmsTrfcInfrDsplSchAutoService.java
  29. 0 101
      src/main/java/com/its/api/its/service/vms/TbVmsTrfcInfrDsplSchDefaultService.java
  30. 0 101
      src/main/java/com/its/api/its/service/vms/TbVmsTrfcInfrDsplSchFixedService.java
  31. 247 0
      src/main/java/com/its/api/its/service/vms/TbVmsTrfcInfrDsplSchService.java
  32. 37 4
      src/main/java/com/its/api/utils/ItsUtils.java

+ 1 - 1
src/main/java/com/its/api/its/controller/vms/TbVmsDsplHsController.java

@@ -40,7 +40,7 @@ public class TbVmsDsplHsController {
     @ApiOperation(value = "VMS 표출 이력 조회-이미지(TB_VMS_DSPL_HS)", response = TbVmsDsplHsImageDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/images", produces = {"application/json; charset=utf8"})
     public List<TbVmsDsplHsImageDto> findAllImageByDateRange(
-            @ApiParam(name = "id", value = "VMS 관리번호 목록", example = "10016", required = true)
+            @ApiParam(name = "id", value = "VMS 관리번호", example = "10016", required = true)
             @RequestParam Long id,
             @ApiParam(name = "DSPL_DT", value = "조회시작시각(YYYYMMDDHH24MI00)", example = "20220302151210", required = true)
             @RequestParam String DSPL_DT

+ 76 - 33
src/main/java/com/its/api/its/controller/vms/TbVmsTrfcInfrDsplSchAutoController.java

@@ -1,15 +1,17 @@
 package com.its.api.its.controller.vms;
 
 import com.its.api.its.model.dto.vms.TbVmsTrfcInfrDsplSchDto;
-import com.its.api.its.model.entity.vms.TbVmsTrfcInfrDsplSchKey;
-import com.its.api.its.service.vms.TbVmsTrfcInfrDsplSchDefaultService;
+import com.its.api.its.service.vms.TbVmsTrfcInfrDsplSchService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import lombok.RequiredArgsConstructor;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
-import javax.validation.Valid;
 import java.util.List;
 
 @Api(tags = "12.VMS-3.스케줄관리-1.자동 스케줄 관리")
@@ -19,48 +21,89 @@ import java.util.List;
 @RequestMapping("/api/vms/schedule/auto")
 public class TbVmsTrfcInfrDsplSchAutoController {
 
-    private final TbVmsTrfcInfrDsplSchDefaultService service;
+    private final TbVmsTrfcInfrDsplSchService service;
 
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 전체조회(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
-    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbVmsTrfcInfrDsplSchDto> findAll() {
-        return service.findAll();
+    /**
+     * VMS 제어기 관리 번호로 폼 표출 스케줄 목록 조회
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "VMS 폼 스케줄 목록 조회(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/list/{id}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsTrfcInfrDsplSchDto> findAllVmsDsplSchedule(
+            @ApiParam(name = "id", value = "VMS 제어기 관리번호", example = "10005", required = true)
+            @PathVariable final Long id
+    ) {
+        return this.service.findAllVmsDsplSchedule(id);
+    }
+    // 교통정보
+    @ApiOperation(value = "VMS 폼 정보 조회-교통정보(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/list/traffic/{id}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsTrfcInfrDsplSchDto> findAllTrafficByVmsType(
+            @ApiParam(name = "id", value = "VMS 제어기 관리번호", example = "10005", required = true)
+            @PathVariable final Long id
+    ) {
+        return this.service.findAllTraffic(id);
     }
 
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 개별조회(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class)
-    @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbVmsTrfcInfrDsplSchDto findById(@PathVariable final TbVmsTrfcInfrDsplSchKey id) {
-        return this.service.findById(id);
+    // 정체
+    @ApiOperation(value = "VMS 폼 정보 조회-정체(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/list/congest/{id}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsTrfcInfrDsplSchDto> findAllCongestByVmsType(
+            @ApiParam(name = "id", value = "VMS 제어기 관리번호", example = "10005", required = true)
+            @PathVariable final Long id
+    ) {
+        return this.service.findAllCongest(id);
     }
 
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보변경(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class)
-    @PutMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbVmsTrfcInfrDsplSchDto updateById(@PathVariable final TbVmsTrfcInfrDsplSchKey id, @RequestBody @Valid final TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq req) {
-        return this.service.updateById(id, req);
+    // 돌발
+    @ApiOperation(value = "VMS 폼 정보 조회-돌발(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/list/incident/{id}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsTrfcInfrDsplSchDto> findAllIncidentByVmsType(
+            @ApiParam(name = "id", value = "VMS 제어기 관리번호", example = "10005", required = true)
+            @PathVariable final Long id
+    ) {
+        return this.service.findAllIncident(id);
     }
 
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보변경/생성-목록(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
-    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbVmsTrfcInfrDsplSchDto> mergeInfoList(@RequestBody @Valid final List<TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq> listReq) {
-        return this.service.mergeInfoList(listReq);
+    // 공사/행사
+    @ApiOperation(value = "VMS 폼 정보 조회-공사/행사(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/list/event/{id}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsTrfcInfrDsplSchDto> findAllEventByVmsType(
+            @ApiParam(name = "id", value = "VMS 제어기 관리번호", example = "10005", required = true)
+            @PathVariable final Long id
+    ) {
+        return this.service.findAllEvent(id);
     }
 
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보변경/생성-개별(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class)
-    @PostMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbVmsTrfcInfrDsplSchDto mergeInfo(@PathVariable("id") TbVmsTrfcInfrDsplSchKey id, @RequestBody @Valid final TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq req) {
-        return this.service.mergeInfo(req);
+    // 홍보
+    @ApiOperation(value = "VMS 폼 정보 조회-홍보(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/list/notice/{id}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsTrfcInfrDsplSchDto> findAllHongboByVmsType(
+            @ApiParam(name = "id", value = "VMS 제어기 관리번호", example = "10005", required = true)
+            @PathVariable final Long id
+    ) {
+        return this.service.findAllHongbo(id);
     }
 
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보삭제-개별(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class)
-    @DeleteMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbVmsTrfcInfrDsplSchDto deleteDataById(@PathVariable("id") TbVmsTrfcInfrDsplSchKey id) {
-        return this.service.deleteById(id);
+    // 우회도로
+    @ApiOperation(value = "VMS 폼 정보 조회-우회도로(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/list/detour/{id}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsTrfcInfrDsplSchDto> findAllDetourByVmsType(
+            @ApiParam(name = "id", value = "VMS 제어기 관리번호", example = "10005", required = true)
+            @PathVariable final Long id
+    ) {
+        return this.service.findAllDetour(id);
     }
 
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보삭제-목록(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
-    @DeleteMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbVmsTrfcInfrDsplSchDto> deleteDataByIds(@RequestBody @Valid final List<TbVmsTrfcInfrDsplSchKey> ids) {
-        return this.service.deleteByIds(ids);
+    // 재난안전
+    @ApiOperation(value = "VMS 폼 정보 조회-재난안전(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/list/safety/{id}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsTrfcInfrDsplSchDto> findAllSafetyByVmsType(
+            @ApiParam(name = "id", value = "VMS 제어기 관리번호", example = "10005", required = true)
+            @PathVariable final Long id
+    ) {
+        return this.service.findAllSafety(id);
     }
 
 }

+ 169 - 0
src/main/java/com/its/api/its/controller/vms/TbVmsTrfcInfrDsplSchController.java

@@ -0,0 +1,169 @@
+package com.its.api.its.controller.vms;
+
+import com.its.api.its.model.dto.vms.TbVmsFormDto;
+import com.its.api.its.model.dto.vms.TbVmsTrfcInfrDsplSchDto;
+import com.its.api.its.service.vms.TbVmsFormService;
+import com.its.api.its.service.vms.TbVmsTrfcInfrDsplSchService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+@Api(tags = "12.VMS-3.스케줄관리-0.공통 스케줄 관리 공통")
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/vms/schedule/common")
+public class TbVmsTrfcInfrDsplSchController {
+
+    private final TbVmsTrfcInfrDsplSchService service;
+    private final TbVmsFormService formService;
+
+    /*
+     * 스케쥴 관리에서 VMS 크기 유형이 변경될때 등록되어 있는 폼 을 조회한다.
+     * 자동, 고정, 기본 스케쥴에 따라 등록되어 있는 폼 유형을 조회한다.(고정, 기본 스케줄은 홍보 폼 만 등록 가능하다)
+     */
+    /**
+     * VMS 크기유형에 따른 모든 폼을 조회(조회 속도 때문에 사용하지 말자)
+     * @param type
+     * @return
+     */
+    @ApiOperation(value = "VMS 폼 정보 조회(TB_VMS_FORM)", response = TbVmsFormDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/form/{type}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsFormDto> findAllByVmsType(
+            @ApiParam(name = "type", value = "VMS 유형(크기) 코드", example = "VMP2", required = true)
+            @PathVariable final String type
+    ) {
+        return this.formService.findAllByVmsType(type);
+    }
+
+    /**
+     * 자동스케줄: 교통정보, 정체, 돌발, 공사/행사, 홍보, 우회도로, 재난안전
+     * 고정스케줄: 홍보
+     * 기본스케줄: 홍보
+     */
+    // 교통정보
+    @ApiOperation(value = "VMS 폼 정보 조회-교통정보(TB_VMS_FORM)", response = TbVmsFormDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/form/traffic/{type}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsFormDto> findAllTrafficByVmsType(
+            @ApiParam(name = "type", value = "VMS 유형(크기) 코드", example = "VMP2", required = true)
+            @PathVariable final String type
+    ) {
+        return this.formService.findAllTraffic(type);
+    }
+
+    // 정체
+    @ApiOperation(value = "VMS 폼 정보 조회-정체(TB_VMS_FORM)", response = TbVmsFormDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/form/congest/{type}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsFormDto> findAllCongestByVmsType(
+            @ApiParam(name = "type", value = "VMS 유형(크기) 코드", example = "VMP2", required = true)
+            @PathVariable final String type
+    ) {
+        return this.formService.findAllCongest(type);
+    }
+
+    // 돌발
+    @ApiOperation(value = "VMS 폼 정보 조회-돌발(TB_VMS_FORM)", response = TbVmsFormDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/form/incident/{type}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsFormDto> findAllIncidentByVmsType(
+            @ApiParam(name = "type", value = "VMS 유형(크기) 코드", example = "VMP2", required = true)
+            @PathVariable final String type
+    ) {
+        return this.formService.findAllIncident(type);
+    }
+
+    // 공사/행사
+    @ApiOperation(value = "VMS 폼 정보 조회-공사/행사(TB_VMS_FORM)", response = TbVmsFormDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/form/event/{type}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsFormDto> findAllEventByVmsType(
+            @ApiParam(name = "type", value = "VMS 유형(크기) 코드", example = "VMP2", required = true)
+            @PathVariable final String type
+    ) {
+        return this.formService.findAllEvent(type);
+    }
+
+    // 홍보
+    @ApiOperation(value = "VMS 폼 정보 조회-홍보(TB_VMS_FORM)", response = TbVmsFormDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/form/notice/{type}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsFormDto> findAllHongboByVmsType(
+            @ApiParam(name = "type", value = "VMS 유형(크기) 코드", example = "VMP2", required = true)
+            @PathVariable final String type
+    ) {
+        return this.formService.findAllHongbo(type);
+    }
+
+    // 우회도로
+    @ApiOperation(value = "VMS 폼 정보 조회-우회도로(TB_VMS_FORM)", response = TbVmsFormDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/form/detour/{type}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsFormDto> findAllDetourByVmsType(
+            @ApiParam(name = "type", value = "VMS 유형(크기) 코드", example = "VMP2", required = true)
+            @PathVariable final String type
+    ) {
+        return this.formService.findAllDetour(type);
+    }
+
+    // 재난안전
+    @ApiOperation(value = "VMS 폼 정보 조회-재난안전(TB_VMS_FORM)", response = TbVmsFormDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/form/safety/{type}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsFormDto> findAllSafetyByVmsType(
+            @ApiParam(name = "type", value = "VMS 유형(크기) 코드", example = "VMP2", required = true)
+            @PathVariable final String type
+    ) {
+        return this.formService.findAllSafety(type);
+    }
+
+
+    /**
+     * VMS 폼 표출 스케줄 저장
+     * @param listReq
+     * @return
+     */
+    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보변경/생성-목록(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsTrfcInfrDsplSchDto> mergeInfoList(
+            @ApiParam(name = "id", value = "VMS 제어기 관리번호", example = "10005", required = true)
+            @PathVariable final Long id,
+            @RequestBody @Valid final List<TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq> listReq) {
+        return this.service.mergeInfoList(id, listReq);
+    }
+
+    /**
+     * VMS 폼 표출 스케줄 일괄 등록[전체 VMS 등록 - 저장]
+     * @param listReq
+     * @return
+     */
+    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보변경/생성-목록[전체 VMS 등록 - 저장](TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/batch", produces = {"application/json; charset=utf8"})
+    public List<TbVmsTrfcInfrDsplSchDto> batchCreateInfoList(@RequestBody @Valid final List<TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq> listReq) {
+        return this.service.batchCreateInfoList(listReq);
+    }
+
+    /**
+     * VMS 폼 표출 스케줄 일괄 저장[전체 VMS 편집 - 저장]
+     * @param listReq
+     * @return
+     */
+    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보변경/생성-목록[전체 VMS 편집 - 저장](TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
+    @PutMapping(value = "/batch", produces = {"application/json; charset=utf8"})
+    public List<TbVmsTrfcInfrDsplSchDto> batchMergeInfoList(@RequestBody @Valid final List<TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq> listReq) {
+        return this.service.batchMergeInfoList(listReq);
+    }
+
+    /**
+     * VMS 폼 표출 스케줄 일괄 삭제[전체 VMS 편집 - 삭제]
+     * @param ids
+     * @return
+     */
+    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보삭제-목록-[전체 VMS 편집 - 삭제](TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchDelReq.class, responseContainer = "ArrayList")
+    @DeleteMapping(value = "/batch", produces = {"application/json; charset=utf8"})
+    public List<TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchDelReq> batchDeleteDataByIds(
+            @RequestBody @Valid final List<TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchDelReq> ids) {
+        return this.service.batchDeleteByIds(ids);
+    }
+
+}

+ 20 - 46
src/main/java/com/its/api/its/controller/vms/TbVmsTrfcInfrDsplSchDefaultController.java

@@ -1,15 +1,17 @@
 package com.its.api.its.controller.vms;
 
 import com.its.api.its.model.dto.vms.TbVmsTrfcInfrDsplSchDto;
-import com.its.api.its.model.entity.vms.TbVmsTrfcInfrDsplSchKey;
-import com.its.api.its.service.vms.TbVmsTrfcInfrDsplSchDefaultService;
+import com.its.api.its.service.vms.TbVmsTrfcInfrDsplSchService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import lombok.RequiredArgsConstructor;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
-import javax.validation.Valid;
 import java.util.List;
 
 @Api(tags = "12.VMS-3.스케줄관리-3.기본 스케줄 관리")
@@ -19,48 +21,20 @@ import java.util.List;
 @RequestMapping("/api/vms/schedule/default")
 public class TbVmsTrfcInfrDsplSchDefaultController {
 
-    private final TbVmsTrfcInfrDsplSchDefaultService service;
-
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 전체조회(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
-    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbVmsTrfcInfrDsplSchDto> findAll() {
-        return service.findAll();
-    }
-
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 개별조회(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class)
-    @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbVmsTrfcInfrDsplSchDto findById(@PathVariable final TbVmsTrfcInfrDsplSchKey id) {
-        return this.service.findById(id);
-    }
-
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보변경(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class)
-    @PutMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbVmsTrfcInfrDsplSchDto updateById(@PathVariable final TbVmsTrfcInfrDsplSchKey id, @RequestBody @Valid final TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq req) {
-        return this.service.updateById(id, req);
-    }
-
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보변경/생성-목록(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
-    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbVmsTrfcInfrDsplSchDto> mergeInfoList(@RequestBody @Valid final List<TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq> listReq) {
-        return this.service.mergeInfoList(listReq);
-    }
-
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보변경/생성-개별(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class)
-    @PostMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbVmsTrfcInfrDsplSchDto mergeInfo(@PathVariable("id") TbVmsTrfcInfrDsplSchKey id, @RequestBody @Valid final TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq req) {
-        return this.service.mergeInfo(req);
-    }
-
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보삭제-개별(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class)
-    @DeleteMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbVmsTrfcInfrDsplSchDto deleteDataById(@PathVariable("id") TbVmsTrfcInfrDsplSchKey id) {
-        return this.service.deleteById(id);
-    }
-
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보삭제-목록(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
-    @DeleteMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbVmsTrfcInfrDsplSchDto> deleteDataByIds(@RequestBody @Valid final List<TbVmsTrfcInfrDsplSchKey> ids) {
-        return this.service.deleteByIds(ids);
+    private final TbVmsTrfcInfrDsplSchService service;
+
+    /**
+     * VMS 제어기 관리 번호로 폼 표출 스케줄 목록 조회
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "VMS 폼 스케줄 목록 조회(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/list/{id}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsTrfcInfrDsplSchDto> findAllVmsDsplSchedule(
+            @ApiParam(name = "id", value = "VMS 제어기 관리번호", example = "10005", required = true)
+            @PathVariable final Long id
+    ) {
+        return this.service.findAllDefault(id);
     }
 
 }

+ 21 - 47
src/main/java/com/its/api/its/controller/vms/TbVmsTrfcInfrDsplSchFixedController.java

@@ -1,66 +1,40 @@
 package com.its.api.its.controller.vms;
 
 import com.its.api.its.model.dto.vms.TbVmsTrfcInfrDsplSchDto;
-import com.its.api.its.model.entity.vms.TbVmsTrfcInfrDsplSchKey;
-import com.its.api.its.service.vms.TbVmsTrfcInfrDsplSchDefaultService;
+import com.its.api.its.service.vms.TbVmsTrfcInfrDsplSchService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import lombok.RequiredArgsConstructor;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
-import javax.validation.Valid;
 import java.util.List;
 
-@Api(tags = "12.VMS-3.스케줄관리-1.자동 스케줄 관리")
+@Api(tags = "12.VMS-3.스케줄관리-2.고정 스케줄 관리")
 @Validated
 @RestController
 @RequiredArgsConstructor
 @RequestMapping("/api/vms/schedule/fixed")
 public class TbVmsTrfcInfrDsplSchFixedController {
 
-    private final TbVmsTrfcInfrDsplSchDefaultService service;
-
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 전체조회(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
-    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbVmsTrfcInfrDsplSchDto> findAll() {
-        return service.findAll();
-    }
-
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 개별조회(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class)
-    @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbVmsTrfcInfrDsplSchDto findById(@PathVariable final TbVmsTrfcInfrDsplSchKey id) {
-        return this.service.findById(id);
-    }
-
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보변경(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class)
-    @PutMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbVmsTrfcInfrDsplSchDto updateById(@PathVariable final TbVmsTrfcInfrDsplSchKey id, @RequestBody @Valid final TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq req) {
-        return this.service.updateById(id, req);
-    }
-
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보변경/생성-목록(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
-    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbVmsTrfcInfrDsplSchDto> mergeInfoList(@RequestBody @Valid final List<TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq> listReq) {
-        return this.service.mergeInfoList(listReq);
-    }
-
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보변경/생성-개별(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class)
-    @PostMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbVmsTrfcInfrDsplSchDto mergeInfo(@PathVariable("id") TbVmsTrfcInfrDsplSchKey id, @RequestBody @Valid final TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq req) {
-        return this.service.mergeInfo(req);
-    }
-
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보삭제-개별(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class)
-    @DeleteMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbVmsTrfcInfrDsplSchDto deleteDataById(@PathVariable("id") TbVmsTrfcInfrDsplSchKey id) {
-        return this.service.deleteById(id);
-    }
-
-    @ApiOperation(value = "VMS 교통 정보 표출 일정 정보삭제-목록(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
-    @DeleteMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbVmsTrfcInfrDsplSchDto> deleteDataByIds(@RequestBody @Valid final List<TbVmsTrfcInfrDsplSchKey> ids) {
-        return this.service.deleteByIds(ids);
+    private final TbVmsTrfcInfrDsplSchService service;
+
+    /**
+     * VMS 제어기 관리 번호로 폼 표출 스케줄 목록 조회
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "VMS 폼 스케줄 목록 조회(TB_VMS_TRFC_INFR_DSPL_SCH)", response = TbVmsTrfcInfrDsplSchDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/list/{id}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsTrfcInfrDsplSchDto> findAllVmsDsplSchedule(
+            @ApiParam(name = "id", value = "VMS 제어기 관리번호", example = "10005", required = true)
+            @PathVariable final Long id
+    ) {
+        return this.service.findAllFixed(id);
     }
 
 }

+ 21 - 80
src/main/java/com/its/api/its/controller/vms/VmsCommonController.java

@@ -7,10 +7,7 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.RequiredArgsConstructor;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -30,7 +27,7 @@ public class VmsCommonController {
     private final TbVmsFontShpeService fontShpeService;
     private final TbVmsFormObjectTypeService objectTypeService;
     private final TbVmsFontColrService fontColrService;
-    private final TbVmsFormService formService;
+    private final TbVmsDsplPrstService dsplPrstService;
 
     @ApiOperation(value = "VMS 목록 조회(TB_VMS_CTLR)", response = TbVmsIfscRltnDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/vms-list", produces = {"application/json; charset=utf8"})
@@ -38,6 +35,15 @@ public class VmsCommonController {
         return this.vmsCtlrService.findNotDeletedAll();
     }
 
+    @ApiOperation(value = "VMS 목록 조회-크기유형별(TB_VMS_CTLR)", response = TbVmsIfscRltnDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/vms-list/{type}", produces = {"application/json; charset=utf8"})
+    public List<TbVmsCtlrDto> findVmsCtlrAllByType(
+            @ApiParam(name = "type", value = "VMS 유형 코드", example = "VMP2", required = true)
+            @PathVariable final String type
+    ) {
+        return this.vmsCtlrService.findNotDeletedAllByType(type);
+    }
+
     @ApiOperation(value = "VMS 제어기 용도 유형 조회(TB_VMS_USAG_TYPE)", response = TbVmsUsagTypeDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/vms-usage", produces = {"application/json; charset=utf8"})
     public List<TbVmsUsagTypeDto> findAllVmsUsageType() {
@@ -95,83 +101,18 @@ public class VmsCommonController {
         return this.objectTypeService.findAllByFormType(type);
     }
 
-    @ApiOperation(value = "VMS 폼 정보 조회(TB_VMS_FORM)", response = TbVmsFormDto.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/vms-form/{type}", produces = {"application/json; charset=utf8"})
-    public List<TbVmsFormDto> findAllByVmsType(
-            @ApiParam(name = "type", value = "VMS 유형(크기) 코드", example = "VMP2", required = true)
-            @PathVariable final String type
-    ) {
-        return this.formService.findAllByVmsType(type);
-    }
-
-    // 교통정보
-    @ApiOperation(value = "VMS 폼 정보 조회-교통정보(TB_VMS_FORM)", response = TbVmsFormDto.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/vms-form/traffic/{type}", produces = {"application/json; charset=utf8"})
-    public List<TbVmsFormDto> findAllTrafficByVmsType(
-            @ApiParam(name = "type", value = "VMS 유형(크기) 코드", example = "VMP2", required = true)
-            @PathVariable final String type
-    ) {
-        return this.formService.findAllTraffic(type);
-    }
-
-    // 정체
-    @ApiOperation(value = "VMS 폼 정보 조회-정체(TB_VMS_FORM)", response = TbVmsFormDto.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/vms-form/congest/{type}", produces = {"application/json; charset=utf8"})
-    public List<TbVmsFormDto> findAllCongestByVmsType(
-            @ApiParam(name = "type", value = "VMS 유형(크기) 코드", example = "VMP2", required = true)
-            @PathVariable final String type
-    ) {
-        return this.formService.findAllCongest(type);
-    }
-
-    // 돌발
-    @ApiOperation(value = "VMS 폼 정보 조회-돌발(TB_VMS_FORM)", response = TbVmsFormDto.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/vms-form/incident/{type}", produces = {"application/json; charset=utf8"})
-    public List<TbVmsFormDto> findAllIncidentByVmsType(
-            @ApiParam(name = "type", value = "VMS 유형(크기) 코드", example = "VMP2", required = true)
-            @PathVariable final String type
-    ) {
-        return this.formService.findAllIncident(type);
-    }
-
-    // 공사/행사
-    @ApiOperation(value = "VMS 폼 정보 조회-공사/행사(TB_VMS_FORM)", response = TbVmsFormDto.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/vms-form/event/{type}", produces = {"application/json; charset=utf8"})
-    public List<TbVmsFormDto> findAllEventByVmsType(
-            @ApiParam(name = "type", value = "VMS 유형(크기) 코드", example = "VMP2", required = true)
-            @PathVariable final String type
-    ) {
-        return this.formService.findAllEvent(type);
-    }
-
-    // 홍보
-    @ApiOperation(value = "VMS 폼 정보 조회-홍보(TB_VMS_FORM)", response = TbVmsFormDto.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/vms-form/notice/{type}", produces = {"application/json; charset=utf8"})
-    public List<TbVmsFormDto> findAllHongboByVmsType(
-            @ApiParam(name = "type", value = "VMS 유형(크기) 코드", example = "VMP2", required = true)
-            @PathVariable final String type
-    ) {
-        return this.formService.findAllHongbo(type);
-    }
-
-    // 우회도로
-    @ApiOperation(value = "VMS 폼 정보 조회-우회도로(TB_VMS_FORM)", response = TbVmsFormDto.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/vms-form/detour/{type}", produces = {"application/json; charset=utf8"})
-    public List<TbVmsFormDto> findAllDetourByVmsType(
-            @ApiParam(name = "type", value = "VMS 유형(크기) 코드", example = "VMP2", required = true)
-            @PathVariable final String type
-    ) {
-        return this.formService.findAllDetour(type);
+    @ApiOperation(value = "VMS 표출 현재 폼 조회-전체(TB_VMS_DSPL_PRST)", response = TbVmsDsplPrstDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/vms-form/dspl-prst/all", produces = {"application/json; charset=utf8"})
+    public List<TbVmsDsplPrstDto> findAllVmsDsplPrst() {
+        return this.dsplPrstService.findAll();
     }
 
-    // 재난안전
-    @ApiOperation(value = "VMS 폼 정보 조회-재난안전(TB_VMS_FORM)", response = TbVmsFormDto.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/vms-form/safety/{type}", produces = {"application/json; charset=utf8"})
-    public List<TbVmsFormDto> findAllSafetyByVmsType(
-            @ApiParam(name = "type", value = "VMS 유형(크기) 코드", example = "VMP2", required = true)
-            @PathVariable final String type
-    ) {
-        return this.formService.findAllSafety(type);
+    @ApiOperation(value = "VMS 표출 현재 폼 조회-목록(TB_VMS_DSPL_PRST)", response = TbVmsDsplPrstDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/vms-form/dspl-prst", produces = {"application/json; charset=utf8"})
+    public List<TbVmsDsplPrstDto> findAllVmsDsplPrst(
+            @ApiParam(name = "id", value = "VMS 제어기 관리번호 목록", example = "10005", required = true)
+            @RequestParam final List<Long> id) {
+        return this.dsplPrstService.findAllByIds(id);
     }
 
 }

+ 2 - 0
src/main/java/com/its/api/its/global/CodeManager.java

@@ -85,6 +85,8 @@ public class CodeManager {
     public static final String HLDY_DAY_CD          = "LHT";    // 휴일유형코드
     public static final String CNCT_INTN_TYPE_CD    = "COT";    // 연계기관유형코드
 
+    public static final String STTS_UNKNOWN         = "-";
+    public static final String CMNC_STTS_NORMAL     = "CMS0";
     public static final String CMNC_STTS_CD         = "CMS";    // 통신상태코드
     public static final String MODL_STTS_CD         = "MOS";    // 모듈상태
     public static final String PWER_STTS_CD         = "PWS";    // 전원상태

+ 130 - 0
src/main/java/com/its/api/its/model/dto/vms/TbVmsDsplPrstDto.java

@@ -0,0 +1,130 @@
+package com.its.api.its.model.dto.vms;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * VMS 표출 현재 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("TbVmsDsplPrstDto(VMS 표출 현재)")
+public class TbVmsDsplPrstDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("VMS 제어기 번호")  // N NUMBER(10)
+    @JsonProperty("vms_ctlr_nmbr")
+    private Long vmsCtlrNmbr;
+
+    @ApiModelProperty("PHASE")  // N NUMBER(2)
+    @JsonProperty("phase")
+    private Integer phase;
+
+    //@ApiModelProperty("VMS 표출 메시지 데이터")  // Y VARCHAR(1200)
+    //@JsonProperty("vms_dspl_msg_data")
+    @JsonIgnore
+    private String vmsDsplMsgData;
+
+    @ApiModelProperty("VMS 표출 메시지 이미지")  // Y BLOB
+    @JsonProperty("vms_dspl_msg_imag")
+    private byte[] vmsDsplMsgImag;
+
+    //@ApiModelProperty("VMS 표출 메시지 텍스트")  // Y VARCHAR(400)
+    //@JsonProperty("vms_dspl_msg_txt")
+    @JsonIgnore
+    private String vmsDsplMsgTxt;
+
+    //@ApiModelProperty("교통 상황 유형 코드")  // Y VARCHAR(7)
+    //@JsonProperty("trfc_situ_type_cd")
+    @JsonIgnore
+    private String trfcSituTypeCd;
+
+    //@ApiModelProperty("VMS 메시지 표출 방향 코드")  // N NUMBER(3)
+    //@JsonProperty("vms_msg_dspl_drct_cd")
+    @JsonIgnore
+    private Integer vmsMsgDsplDrctCd;
+
+    @ApiModelProperty("표출 일시")  // Y VARCHAR(14)
+    @JsonProperty("dspl_dt")
+    private String dsplDt;
+
+    //@ApiModelProperty("심벌라이브러리 번호")  // Y NUMBER(4)
+    //@JsonProperty("symblib_nmbr")
+    @JsonIgnore
+    private Integer symblibNmbr;
+
+    //@ApiModelProperty("VMS 메시지 표출 방법 코드")  // Y NUMBER(3)
+    //@JsonProperty("vms_msg_dspl_mthd_cd")
+    @JsonIgnore
+    private Integer vmsMsgDsplMthdCd;
+
+    @ApiModelProperty("표출 시간")  // Y NUMBER(3)
+    @JsonProperty("dspl_hh")
+    private Integer dsplHh;
+
+    @ApiModelProperty("VMS FORM ID")  // Y NUMBER(5)
+    @JsonProperty("vms_form_id")
+    private Integer vmsFormId;
+
+    //@ApiModelProperty("VMS 정보제공구간 ID")  // Y NUMBER(10)
+    //@JsonProperty("vms_ifsc_id")
+    @JsonIgnore
+    private Long vmsIfscId;
+
+    //@ApiModelProperty("돌발상황 발생 ID")  // Y VARCHAR(12)
+    //@JsonProperty("incd_ocrr_id")
+    @JsonIgnore
+    private String incdOcrrId;
+
+    //@ApiModelProperty("우회도로 ID")  // Y NUMBER(10)
+    //@JsonProperty("detr_id")
+    @JsonIgnore
+    private Long detrId;
+
+    @ApiModelProperty("제어기다운로드 여부(Y:성공,N:실패)")  // Y CHAR(1)
+    @JsonProperty("dnld_yn")
+    private String dnldYn;
+
+    // Code Description Field
+    //@ApiModelProperty("교통 상황 유형 코드 설명")
+    //@JsonProperty("trfc_situ_type_desc")    // TRFC_SITU_TYPE_CD
+    @JsonIgnore
+    private String trfcSituTypeDesc;
+
+    //@ApiModelProperty("VMS 메시지 표출 방향 코드 설명")
+    //@JsonProperty("vms_msg_dspl_drct_desc")    // VMS_MSG_DSPL_DRCT_CD
+    @JsonIgnore
+    private Integer vmsMsgDsplDrctDesc;
+
+    //@ApiModelProperty("VMS 메시지 표출 방법 코드 설명")
+    //@JsonProperty("vms_msg_dspl_mthd_desc")    // VMS_MSG_DSPL_MTHD_CD
+    @JsonIgnore
+    private Integer vmsMsgDsplMthdDesc;
+
+    @ApiModelProperty("제어기다운로드 여부(Y:성공,N:실패) 설명")
+    @JsonProperty("dnld_desc")    // DNLD_YN
+    private String dnldDesc;
+
+    @ApiModelProperty("이미지 형식(bmp, png)")
+    @JsonProperty("imag_fmt")
+    private String imagFmt;
+
+    @ApiModelProperty("서비스 여부(Y:성공,N:실패)")
+    @JsonProperty("svc_yn")
+    private String svcYn;
+
+    @ApiModelProperty("운영모드")
+    @JsonProperty("oper_mode")
+    private String operMode;
+
+    @ApiModelProperty("운영모드설명")
+    @JsonProperty("oper_mode_desc")
+    private String operModeDesc;
+
+}

+ 4 - 0
src/main/java/com/its/api/its/model/dto/vms/TbVmsFormDto.java

@@ -84,6 +84,10 @@ public class TbVmsFormDto implements Serializable {
     @JsonProperty("vms_msg_dspl_mthd_desc")    // VMS_MSG_DSPL_MTHD_CD
     private Integer vmsMsgDsplMthdDesc;
 
+    @ApiModelProperty("이미지 형식(bmp, png)")
+    @JsonProperty("imag_fmt")
+    private String imagFmt;
+
     @ApiModel("TbVmsFormUpdReq(VMS FORM 정보변경)")
     @Getter
     @Setter

+ 40 - 0
src/main/java/com/its/api/its/model/dto/vms/TbVmsTrfcInfrDsplSchDto.java

@@ -105,6 +105,10 @@ public class TbVmsTrfcInfrDsplSchDto implements Serializable {
     @JsonProperty("vms_form_imag")
     private byte[] vmsFormImag;
 
+    @ApiModelProperty("VMS FORM 이미지 형식(bmp, png)")
+    @JsonProperty("imag_fmt")
+    private String imagFmt;
+
     @ApiModel("TbVmsTrfcInfrDsplSchUpdReq(VMS 교통 정보 표출 일정 정보변경)")
     @Getter
     @Setter
@@ -244,5 +248,41 @@ public class TbVmsTrfcInfrDsplSchDto implements Serializable {
         }
 
     }
+    @ApiModel("TbVmsTrfcInfrDsplSchDelReq(VMS 교통 정보 표출 일정 정보삭제)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class TbVmsTrfcInfrDsplSchDelReq {
+
+        @ApiModelProperty("VMS 제어기 번호, Nullable = N, NUMBER(10)")  // N NUMBER(10)
+        @JsonProperty("vms_ctlr_nmbr")
+        @Positive
+        private Long vmsCtlrNmbr;
+
+        @ApiModelProperty("스케줄 유형 코드(0:교통정보,1:돌발,2:공사/행사문안,3:홍보문안,4:우회도로,5:고정스케줄, 6:기본스케줄), Nullable = N, VARCHAR(7)")
+        // N VARCHAR(7)
+        @JsonProperty("trfc_situ_type_cd")
+        @Size(min = 1, max = 7)
+        private String trfcSituTypeCd;
+
+        @ApiModelProperty("PHASE, Nullable = N, NUMBER(2)")  // N NUMBER(2)
+        @JsonProperty("phase")
+        @Positive
+        private Integer phase;
+
+        @ApiModelProperty("VMS FORM ID, Nullable = Y, NUMBER(5)")  // Y NUMBER(5)
+        @JsonProperty("vms_form_id")
+        @Positive
+        private Integer vmsFormId;
+
+        @Builder
+        public TbVmsTrfcInfrDsplSchDelReq(Long vms_ctlr_nmbr, String trfc_situ_type_cd, Integer phase, Integer vms_form_id) {
+            this.vmsCtlrNmbr = vms_ctlr_nmbr;
+            this.trfcSituTypeCd = trfc_situ_type_cd;
+            this.phase = phase;
+            this.vmsFormId = vms_form_id;
+        }
+    }
 
 }

+ 8 - 0
src/main/java/com/its/api/its/model/dto/vms/VwVmsDsplPrstDto.java

@@ -66,4 +66,12 @@ public class VwVmsDsplPrstDto implements Serializable {
     private byte[] vmsDsplMsgImag;
 
     // Code Description Field
+    @ApiModelProperty("이미지 형식(bmp, png)")
+    @JsonProperty("imag_fmt")
+    private String imagFmt;
+
+    @ApiModelProperty("서비스 여부(Y:성공,N:실패)")
+    @JsonProperty("svc_yn")
+    private String svcYn;
+
 }

+ 13 - 4
src/main/java/com/its/api/its/model/entity/vds/TbVdsCtlrStts.java

@@ -91,10 +91,19 @@ public class TbVdsCtlrStts implements Serializable {
                 .build();
 
         dto.setCmncSttsDesc(CodeManager.getCodeDescShort(CodeManager.CMNC_STTS_CD, this.cmncSttsCd));           // 통신상태
-        dto.setPrntPwerSttsDesc(CodeManager.getCodeDescShort(CodeManager.PWER_STTS_CD, this.prntPwerSttsCd));   // 전원상태
-        dto.setCboxDoorSttsDesc(CodeManager.getCodeDescShort(CodeManager.DOOR_STTS_CD, this.cboxDoorSttsCd));   // 도어
-        dto.setFanSttsDesc(CodeManager.getCodeDescShort(CodeManager.FAN_STTS_CD,  this.fanSttsCd));             // 팬상태
-        dto.setHetrSttsDesc(CodeManager.getCodeDescShort(CodeManager.HETR_STTS_CD, this.hetrSttsCd));           // 히터상태
+        if (CodeManager.CMNC_STTS_NORMAL.equals(dto.getCmncSttsCd())) {
+            dto.setPrntPwerSttsDesc(CodeManager.getCodeDescShort(CodeManager.PWER_STTS_CD, this.prntPwerSttsCd));   // 전원상태
+            dto.setCboxDoorSttsDesc(CodeManager.getCodeDescShort(CodeManager.DOOR_STTS_CD, this.cboxDoorSttsCd));   // 도어
+            dto.setFanSttsDesc(CodeManager.getCodeDescShort(CodeManager.FAN_STTS_CD, this.fanSttsCd));              // 팬상태
+            dto.setHetrSttsDesc(CodeManager.getCodeDescShort(CodeManager.HETR_STTS_CD, this.hetrSttsCd));           // 히터상태
+        }
+        else {
+            dto.setPrntPwerSttsDesc(CodeManager.STTS_UNKNOWN);      // 전원상태
+            dto.setCboxDoorSttsDesc(CodeManager.STTS_UNKNOWN);      // 도어
+            dto.setFanSttsDesc(CodeManager.STTS_UNKNOWN);           // 팬상태
+            dto.setHetrSttsDesc(CodeManager.STTS_UNKNOWN);          // 히터상태
+            dto.setCboxTmpr(255);
+        }
 
         if (this.vds != null) {
             dto.setVdsCtlrId(this.vds.getVdsCtlrId());

+ 13 - 4
src/main/java/com/its/api/its/model/entity/vds/TbVdsCtlrSttsHs.java

@@ -97,10 +97,19 @@ public class TbVdsCtlrSttsHs implements Serializable {
                 .build();
 
         dto.setCmncSttsDesc(CodeManager.getCodeDescShort(CodeManager.CMNC_STTS_CD, this.cmncSttsCd));           // 통신상태
-        dto.setPrntPwerSttsDesc(CodeManager.getCodeDescShort(CodeManager.PWER_STTS_CD, this.prntPwerSttsCd));   // 전원상태
-        dto.setCboxDoorSttsDesc(CodeManager.getCodeDescShort(CodeManager.DOOR_STTS_CD, this.cboxDoorSttsCd));   // 도어
-        dto.setFanSttsDesc(CodeManager.getCodeDescShort(CodeManager.FAN_STTS_CD,  this.fanSttsCd));             // 팬상태
-        dto.setHetrSttsDesc(CodeManager.getCodeDescShort(CodeManager.HETR_STTS_CD, this.hetrSttsCd));           // 히터상태
+        if (CodeManager.CMNC_STTS_NORMAL.equals(dto.getCmncSttsCd())) {
+            dto.setPrntPwerSttsDesc(CodeManager.getCodeDescShort(CodeManager.PWER_STTS_CD, this.prntPwerSttsCd));   // 전원상태
+            dto.setCboxDoorSttsDesc(CodeManager.getCodeDescShort(CodeManager.DOOR_STTS_CD, this.cboxDoorSttsCd));   // 도어
+            dto.setFanSttsDesc(CodeManager.getCodeDescShort(CodeManager.FAN_STTS_CD, this.fanSttsCd));              // 팬상태
+            dto.setHetrSttsDesc(CodeManager.getCodeDescShort(CodeManager.HETR_STTS_CD, this.hetrSttsCd));           // 히터상태
+        }
+        else {
+            dto.setPrntPwerSttsDesc(CodeManager.STTS_UNKNOWN);      // 전원상태
+            dto.setCboxDoorSttsDesc(CodeManager.STTS_UNKNOWN);      // 도어
+            dto.setFanSttsDesc(CodeManager.STTS_UNKNOWN);           // 팬상태
+            dto.setHetrSttsDesc(CodeManager.STTS_UNKNOWN);          // 히터상태
+            dto.setCboxTmpr(255);
+        }
 
         if (this.vds != null) {
             dto.setVdsCtlrId(this.vds.getVdsCtlrId());

+ 136 - 0
src/main/java/com/its/api/its/model/entity/vms/TbVmsDsplPrst.java

@@ -0,0 +1,136 @@
+package com.its.api.its.model.entity.vms;
+
+import com.its.api.its.model.dto.vms.TbVmsDsplPrstDto;
+import com.its.api.utils.ItsUtils;
+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;
+
+/**
+ * VMS 표출 현재 Entity Class
+ */
+@Getter
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@Builder
+@AllArgsConstructor
+@ApiModel("VMS 표출 현재")
+@Entity
+@Table(name = "TB_VMS_DSPL_PRST")
+@IdClass(TbVmsDsplPrstKey.class)
+public class TbVmsDsplPrst implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("VMS 제어기 번호")  // N NUMBER(10)
+    @Id
+    @Column(name = "VMS_CTLR_NMBR", nullable = false, columnDefinition = "NUMBER", length = 10)
+    private Long vmsCtlrNmbr;
+
+    @ApiModelProperty("PHASE")  // N NUMBER(2)
+    @Id
+    @Column(name = "PHASE", nullable = false, columnDefinition = "NUMBER", length = 2)
+    private Integer phase;
+
+    @ApiModelProperty("VMS 표출 메시지 데이터")  // Y VARCHAR(1200)
+    @Column(name = "VMS_DSPL_MSG_DATA", length = 1200)
+    private String vmsDsplMsgData;
+
+    @ApiModelProperty("VMS 표출 메시지 이미지")  // Y BLOB
+    @Lob
+    @Column(name = "VMS_DSPL_MSG_IMAG")
+    private byte[] vmsDsplMsgImag;
+
+    @ApiModelProperty("VMS 표출 메시지 텍스트")  // Y VARCHAR(400)
+    @Column(name = "VMS_DSPL_MSG_TXT", length = 400)
+    private String vmsDsplMsgTxt;
+
+    @ApiModelProperty("교통 상황 유형 코드")  // Y VARCHAR(7)
+    @Column(name = "TRFC_SITU_TYPE_CD", length = 7)
+    private String trfcSituTypeCd;
+
+    @ApiModelProperty("VMS 메시지 표출 방향 코드")  // N NUMBER(3)
+    @Column(name = "VMS_MSG_DSPL_DRCT_CD", nullable = false, columnDefinition = "NUMBER", length = 3)
+    private Integer vmsMsgDsplDrctCd;
+
+    @ApiModelProperty("표출 일시")  // Y VARCHAR(14)
+    @Column(name = "DSPL_DT", length = 14)
+    private String dsplDt;
+
+    @ApiModelProperty("심벌라이브러리 번호")  // Y NUMBER(4)
+    @Column(name = "SYMBLIB_NMBR", columnDefinition = "NUMBER", length = 4)
+    private Integer symblibNmbr;
+
+    @ApiModelProperty("VMS 메시지 표출 방법 코드")  // Y NUMBER(3)
+    @Column(name = "VMS_MSG_DSPL_MTHD_CD", columnDefinition = "NUMBER", length = 3)
+    private Integer vmsMsgDsplMthdCd;
+
+    @ApiModelProperty("표출 시간")  // Y NUMBER(3)
+    @Column(name = "DSPL_HH", columnDefinition = "NUMBER", length = 3)
+    private Integer dsplHh;
+
+    @ApiModelProperty("VMS FORM ID")  // Y NUMBER(5)
+    @Column(name = "VMS_FORM_ID", columnDefinition = "NUMBER", length = 5)
+    private Integer vmsFormId;
+
+    @ApiModelProperty("VMS 정보제공구간 ID")  // Y NUMBER(10)
+    @Column(name = "VMS_IFSC_ID", columnDefinition = "NUMBER", length = 10)
+    private Long vmsIfscId;
+
+    @ApiModelProperty("돌발상황 발생 ID")  // Y VARCHAR(12)
+    @Column(name = "INCD_OCRR_ID", length = 12)
+    private String incdOcrrId;
+
+    @ApiModelProperty("우회도로 ID")  // Y NUMBER(10)
+    @Column(name = "DETR_ID", columnDefinition = "NUMBER", length = 10)
+    private Long detrId;
+
+    @ApiModelProperty("제어기다운로드 여부(Y:성공,N:실패)")  // Y CHAR(1)
+    @Column(name = "DNLD_YN", columnDefinition = "CHAR", length = 1)
+    private String dnldYn;
+
+    @OneToOne
+    @JoinColumn(insertable=false, updatable=false, name="VMS_CTLR_NMBR", referencedColumnName = "VMS_CTLR_NMBR")
+    @NotFound(action = NotFoundAction.IGNORE)
+    private TbVmsCtlr vms = new TbVmsCtlr();
+
+    public TbVmsDsplPrstDto toDto() {
+        TbVmsDsplPrstDto dto = TbVmsDsplPrstDto.builder()
+                .vmsCtlrNmbr(this.vmsCtlrNmbr)
+                .phase(this.phase)
+                .vmsDsplMsgData(this.vmsDsplMsgData)
+                .vmsDsplMsgImag(this.vmsDsplMsgImag)
+                .vmsDsplMsgTxt(this.vmsDsplMsgTxt)
+                .trfcSituTypeCd(this.trfcSituTypeCd)
+                .vmsMsgDsplDrctCd(this.vmsMsgDsplDrctCd)
+                .dsplDt(this.dsplDt)
+                .symblibNmbr(this.symblibNmbr)
+                .vmsMsgDsplMthdCd(this.vmsMsgDsplMthdCd)
+                .dsplHh(this.dsplHh)
+                .vmsFormId(this.vmsFormId)
+                .vmsIfscId(this.vmsIfscId)
+                .incdOcrrId(this.incdOcrrId)
+                .detrId(this.detrId)
+                .dnldYn(this.dnldYn)
+                .build();
+
+        dto.setVmsDsplMsgImag(ItsUtils.convertBmpToPng(dto.getVmsDsplMsgImag()));
+        dto.setImagFmt("png");
+        dto.setSvcYn(ItsUtils.getServiceYn(dto.getDsplDt()));
+
+        if (this.vms != null) {
+            dto.setOperMode(this.vms.getOperMode());
+            if (("A").equals(dto.getOperMode()))
+                dto.setOperModeDesc("자동");
+            if (("F").equals(dto.getOperMode()))
+                dto.setOperModeDesc("고정");
+            else //if (("D").equals(dto.getOperMode()))
+                dto.setOperModeDesc("기본");
+        }
+        return dto;
+    }
+
+}

+ 25 - 0
src/main/java/com/its/api/its/model/entity/vms/TbVmsDsplPrstKey.java

@@ -0,0 +1,25 @@
+package com.its.api.its.model.entity.vms;
+
+import lombok.Data;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import lombok.AllArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * VMS 표출 현재 Key Class
+ */
+@Data
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class TbVmsDsplPrstKey implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    // VMS_CTLR_NMBR, VMS 제어기 번호  // N NUMBER(10)
+    private Long vmsCtlrNmbr;
+
+    // PHASE, PHASE  // N NUMBER(2)
+    private Integer phase;
+
+}

+ 15 - 6
src/main/java/com/its/api/its/model/entity/vms/TbVmsStts.java

@@ -103,12 +103,21 @@ public class TbVmsStts implements Serializable {
                 .build();
 
         dto.setCmncSttsDesc(CodeManager.getCodeDescShort(CodeManager.CMNC_STTS_CD, dto.getCmncSttsCd()));       // 통신상태
-        dto.setModlSttsDesc(CodeManager.getCodeDescShort(CodeManager.MODL_STTS_CD, dto.getModlSttsCd()));       // 모듈상태
-        dto.setPwerSttsDesc(CodeManager.getCodeDescShort(CodeManager.PWER_STTS_CD, dto.getPwerSttsCd()));       // 전원상태
-
-        dto.setCboxDoorSttsDesc(CodeManager.getCodeDescShort(CodeManager.DOOR_STTS_CD, dto.getCboxDoorSttsCd()));   // 도어
-        dto.setFanSttsDesc(CodeManager.getCodeDescShort(CodeManager.FAN_STTS_CD,  dto.getFanSttsCd()));             // 팬상태
-        dto.setHetrSttsDesc(CodeManager.getCodeDescShort(CodeManager.HETR_STTS_CD, dto.getFanSttsCd()));            // 히터상태
+        if (CodeManager.CMNC_STTS_NORMAL.equals(dto.getCmncSttsCd())) {
+            dto.setModlSttsDesc(CodeManager.getCodeDescShort(CodeManager.MODL_STTS_CD, dto.getModlSttsCd()));           // 모듈상태
+            dto.setPwerSttsDesc(CodeManager.getCodeDescShort(CodeManager.PWER_STTS_CD, dto.getPwerSttsCd()));           // 전원상태
+            dto.setCboxDoorSttsDesc(CodeManager.getCodeDescShort(CodeManager.DOOR_STTS_CD, dto.getCboxDoorSttsCd()));   // 도어
+            dto.setFanSttsDesc(CodeManager.getCodeDescShort(CodeManager.FAN_STTS_CD, dto.getFanSttsCd()));              // 팬상태
+            dto.setHetrSttsDesc(CodeManager.getCodeDescShort(CodeManager.HETR_STTS_CD, dto.getFanSttsCd()));            // 히터상태
+        }
+        else {
+            dto.setModlSttsDesc(CodeManager.STTS_UNKNOWN);       // 모듈상태
+            dto.setPwerSttsDesc(CodeManager.STTS_UNKNOWN);       // 전원상태
+            dto.setCboxDoorSttsDesc(CodeManager.STTS_UNKNOWN);   // 도어
+            dto.setFanSttsDesc(CodeManager.STTS_UNKNOWN);        // 팬상태
+            dto.setHetrSttsDesc(CodeManager.STTS_UNKNOWN);       // 히터상태
+            dto.setCboxTmpr(255);
+        }
 
         if (this.vms != null) {
             dto.setVmsCtlrId(this.vms.getVmsCtlrId());

+ 15 - 6
src/main/java/com/its/api/its/model/entity/vms/TbVmsSttsHs.java

@@ -104,12 +104,21 @@ public class TbVmsSttsHs implements Serializable {
                 .build();
 
         dto.setCmncSttsDesc(CodeManager.getCodeDescShort(CodeManager.CMNC_STTS_CD, dto.getCmncSttsCd()));       // 통신상태
-        dto.setModlSttsDesc(CodeManager.getCodeDescShort(CodeManager.MODL_STTS_CD, dto.getModlSttsCd()));       // 모듈상태
-        dto.setPwerSttsDesc(CodeManager.getCodeDescShort(CodeManager.PWER_STTS_CD, dto.getPwerSttsCd()));       // 전원상태
-
-        dto.setCboxDoorSttsDesc(CodeManager.getCodeDescShort(CodeManager.DOOR_STTS_CD, dto.getCboxDoorSttsCd()));   // 도어
-        dto.setFanSttsDesc(CodeManager.getCodeDescShort(CodeManager.FAN_STTS_CD,  dto.getFanSttsCd()));             // 팬상태
-        dto.setHetrSttsDesc(CodeManager.getCodeDescShort(CodeManager.HETR_STTS_CD, dto.getFanSttsCd()));            // 히터상태
+        if (CodeManager.CMNC_STTS_NORMAL.equals(dto.getCmncSttsCd())) {
+            dto.setModlSttsDesc(CodeManager.getCodeDescShort(CodeManager.MODL_STTS_CD, dto.getModlSttsCd()));           // 모듈상태
+            dto.setPwerSttsDesc(CodeManager.getCodeDescShort(CodeManager.PWER_STTS_CD, dto.getPwerSttsCd()));           // 전원상태
+            dto.setCboxDoorSttsDesc(CodeManager.getCodeDescShort(CodeManager.DOOR_STTS_CD, dto.getCboxDoorSttsCd()));   // 도어
+            dto.setFanSttsDesc(CodeManager.getCodeDescShort(CodeManager.FAN_STTS_CD, dto.getFanSttsCd()));              // 팬상태
+            dto.setHetrSttsDesc(CodeManager.getCodeDescShort(CodeManager.HETR_STTS_CD, dto.getFanSttsCd()));            // 히터상태
+        }
+        else {
+            dto.setModlSttsDesc(CodeManager.STTS_UNKNOWN);       // 모듈상태
+            dto.setPwerSttsDesc(CodeManager.STTS_UNKNOWN);       // 전원상태
+            dto.setCboxDoorSttsDesc(CodeManager.STTS_UNKNOWN);   // 도어
+            dto.setFanSttsDesc(CodeManager.STTS_UNKNOWN);        // 팬상태
+            dto.setHetrSttsDesc(CodeManager.STTS_UNKNOWN);       // 히터상태
+            dto.setCboxTmpr(255);
+        }
 
         if (this.vms != null) {
             dto.setVmsCtlrId(this.vms.getVmsCtlrId());

+ 7 - 1
src/main/java/com/its/api/its/model/entity/vms/TbVmsTrfcInfrDsplSch.java

@@ -1,6 +1,7 @@
 package com.its.api.its.model.entity.vms;
 
 import com.its.api.its.model.dto.vms.TbVmsTrfcInfrDsplSchDto;
+import com.its.api.utils.ItsUtils;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
@@ -95,6 +96,10 @@ public class TbVmsTrfcInfrDsplSch implements Serializable {
     @Column(name = "FOUR_IMG_IFSC_ID", columnDefinition = "NUMBER", length = 10)
     private Long fourImgIfscId;
 
+    public void setPhase(int phase) {
+        this.phase = phase;
+    }
+
     @OneToOne
     @JoinColumn(insertable=false, updatable=false, name="VMS_FORM_ID", referencedColumnName = "VMS_FORM_ID")
     @NotFound(action = NotFoundAction.IGNORE)
@@ -122,7 +127,8 @@ public class TbVmsTrfcInfrDsplSch implements Serializable {
                 .build();
 
         if (this.form != null) {
-            dto.setVmsFormImag(this.form.getVmsFormImag());
+            dto.setVmsFormImag(ItsUtils.convertBmpToPng(this.form.getVmsFormImag()));
+            dto.setImagFmt("png");
         }
         return dto;
     }

+ 5 - 0
src/main/java/com/its/api/its/model/entity/vms/VwVmsDsplPrst.java

@@ -1,6 +1,7 @@
 package com.its.api.its.model.entity.vms;
 
 import com.its.api.its.model.dto.vms.VwVmsDsplPrstDto;
+import com.its.api.utils.ItsUtils;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
@@ -89,6 +90,10 @@ public class VwVmsDsplPrst implements Serializable {
                 .vmsDsplMsgImag(this.vmsDsplMsgImag)
                 .build();
 
+        dto.setVmsDsplMsgImag(ItsUtils.convertBmpToPng(dto.getVmsDsplMsgImag()));
+        dto.setImagFmt("png");
+        dto.setSvcYn(ItsUtils.getServiceYn(dto.getDsplDt()));
+
         return dto;
     }
 

+ 25 - 0
src/main/java/com/its/api/its/repository/vms/TbVmsDsplPrstRepository.java

@@ -0,0 +1,25 @@
+package com.its.api.its.repository.vms;
+
+import com.its.api.its.model.entity.vms.TbVmsDsplPrst;
+import com.its.api.its.model.entity.vms.TbVmsDsplPrstKey;
+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 TbVmsDsplPrstRepository extends JpaRepository<TbVmsDsplPrst, TbVmsDsplPrstKey>, JpaSpecificationExecutor<TbVmsDsplPrst> {
+
+    @Query("select p from TbVmsDsplPrst p inner join p.vms vms " +
+           " where vms.delYn = 'N' " +
+           "   and (p.vmsCtlrNmbr, p.dsplDt) in (select s.vmsCtlrNmbr, max(s.dsplDt) from TbVmsDsplPrst s group by s.vmsCtlrNmbr)")
+    List<TbVmsDsplPrst> findAll();
+
+    @Query("select p from TbVmsDsplPrst p inner join p.vms vms " +
+            " where vms.delYn = 'N' " +
+            "   and p.vmsCtlrNmbr in :vmsCtlrNmbr " +
+            "   and (p.vmsCtlrNmbr, p.dsplDt) in (select s.vmsCtlrNmbr, max(s.dsplDt) from TbVmsDsplPrst s group by s.vmsCtlrNmbr)")
+    List<TbVmsDsplPrst> findAllByIds(List<Long> vmsCtlrNmbr);
+}

+ 1 - 1
src/main/java/com/its/api/its/repository/vms/TbVmsSymbIfscRepository.java

@@ -16,7 +16,7 @@ public interface TbVmsSymbIfscRepository extends JpaRepository<TbVmsSymbIfsc, Tb
     @Query("select p from TbVmsSymbIfsc p where p.symbLibNmbr = :id")
     List<TbVmsSymbIfsc> findDataById(Integer id);
 
-    @Modifying // select 문이 아님을 나타낸다
+    @Modifying
     @Query("delete from TbVmsSymbIfsc p where p.symbLibNmbr = :id")
     void deleteDataById(Integer id);
 }

+ 14 - 0
src/main/java/com/its/api/its/repository/vms/TbVmsTrfcInfrDsplSchRepository.java

@@ -4,9 +4,23 @@ import com.its.api.its.model.entity.vms.TbVmsTrfcInfrDsplSch;
 import com.its.api.its.model.entity.vms.TbVmsTrfcInfrDsplSchKey;
 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 TbVmsTrfcInfrDsplSchRepository extends JpaRepository<TbVmsTrfcInfrDsplSch, TbVmsTrfcInfrDsplSchKey>, JpaSpecificationExecutor<TbVmsTrfcInfrDsplSch> {
 
+    @Modifying
+    @Query("delete from TbVmsTrfcInfrDsplSch p where p.vmsCtlrNmbr = :vmsCtlrNmbr and p.trfcSituTypeCd in :trfcSituTypeCd")
+    void deleteDataByVmsCtrlTrfcSituTypeCd(Long vmsCtlrNmbr, List<String> trfcSituTypeCd);
+
+    @Query("select p from TbVmsTrfcInfrDsplSch p where p.vmsCtlrNmbr = :vmsCtlrNmbr and p.trfcSituTypeCd in :trfcSituTypeCd")
+    List<TbVmsTrfcInfrDsplSch> findAllByVmsCtrlTrfcSituTypeCd(Long vmsCtlrNmbr, List<String> trfcSituTypeCd);
+
+    @Query("select nvl(max(p.phase), 0) + 1 as maxPhase from TbVmsTrfcInfrDsplSch p where p.vmsCtlrNmbr = :vmsCtlrNmbr and p.trfcSituTypeCd = :trfcSituTypeCd")
+    Integer findMaxPhaseByVmsCtrlTrfcSituTypeCd(Long vmsCtlrNmbr, String trfcSituTypeCd);
+
 }

+ 22 - 1
src/main/java/com/its/api/its/service/vms/TbVmsCtlrService.java

@@ -40,6 +40,11 @@ public class TbVmsCtlrService {
         }
         return result;
     }
+
+    /**
+     * 삭제되지 않은 전체 VMS 목록 조회
+     * @return
+     */
     @Transactional(readOnly = true)
     public List<TbVmsCtlrDto> findNotDeletedAll() {
         List<TbVmsCtlrDto> result = new ArrayList<>();
@@ -52,6 +57,23 @@ public class TbVmsCtlrService {
         return result;
     }
 
+    /**
+     * 삭제되지 않은 VMS 중 유형에 해당하는 VMS 목록 조회
+     * @param type
+     * @return
+     */
+    @Transactional(readOnly = true)
+    public List<TbVmsCtlrDto> findNotDeletedAllByType(String type) {
+        List<TbVmsCtlrDto> result = new ArrayList<>();
+        List<TbVmsCtlr> data = this.repo.findAll();
+        for (TbVmsCtlr entity : data) {
+            if (("N").equals(entity.getDelYn()) && type.equals(entity.getVmsTypeCd())) {
+                result.add(entity.toDto());
+            }
+        }
+        return result;
+    }
+
     // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
     public TbVmsCtlrDto findById(Long id) {
         TbVmsCtlr entity = requireOne(id);
@@ -141,5 +163,4 @@ public class TbVmsCtlrService {
         }
         return result;
     }
-
 }

+ 1 - 1
src/main/java/com/its/api/its/service/vms/TbVmsDsplHsService.java

@@ -241,7 +241,7 @@ public class TbVmsDsplHsService {
             }
         }
 
-        ItsUtils.saveImageFile(formImage, imagFmt, saveDir + obj.getVmsCtlrNmbr() + "_" + phaseNum + "." + imagFmt);
+        //ItsUtils.saveImageFile(formImage, imagFmt, saveDir + obj.getVmsCtlrNmbr() + "_" + phaseNum + "." + imagFmt);
 
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         ImageIO.write(formImage, imagFmt, out);

+ 62 - 0
src/main/java/com/its/api/its/service/vms/TbVmsDsplPrstService.java

@@ -0,0 +1,62 @@
+package com.its.api.its.service.vms;
+
+import com.its.api.its.model.dto.vms.TbVmsDsplPrstDto;
+import com.its.api.its.model.entity.vms.TbVmsDsplPrst;
+import com.its.api.its.model.entity.vms.TbVmsDsplPrstKey;
+import com.its.api.its.repository.vms.TbVmsDsplPrstRepository;
+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;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbVmsDsplPrstService {
+
+    private final TbVmsDsplPrstRepository repo;
+
+    // 데이터 1건 조회, 없으면 exception
+    private TbVmsDsplPrst requireOne(TbVmsDsplPrstKey id) {
+        return this.repo.findById(id)
+                .orElseThrow(() -> new NoSuchElementException("데이터가 존재하지 않습니다: " + id));
+    }
+
+    /**
+     * 현재 표출 VMS 메시지 전체 조회
+     * @return
+     */
+    @Transactional(readOnly = true)
+    public List<TbVmsDsplPrstDto> findAll() {
+        List<TbVmsDsplPrstDto> result = new ArrayList<>();
+        List<TbVmsDsplPrst> data = this.repo.findAll();
+        for (TbVmsDsplPrst entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
+    @Transactional(readOnly = true)
+    public TbVmsDsplPrstDto findById(TbVmsDsplPrstKey id) {
+        TbVmsDsplPrst entity = requireOne(id);
+        return entity.toDto();
+    }
+
+    /**
+     * 현재 표출 VMS 메시지 개별 조회
+     * @return
+     */
+    public List<TbVmsDsplPrstDto> findAllByIds(List<Long> id) {
+        List<TbVmsDsplPrstDto> result = new ArrayList<>();
+        List<TbVmsDsplPrst> data = this.repo.findAllByIds(id);
+        for (TbVmsDsplPrst entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+}

+ 9 - 5
src/main/java/com/its/api/its/service/vms/TbVmsFormService.java

@@ -3,6 +3,7 @@ package com.its.api.its.service.vms;
 import com.its.api.its.model.dto.vms.TbVmsFormDto;
 import com.its.api.its.model.entity.vms.TbVmsForm;
 import com.its.api.its.repository.vms.TbVmsFormRepository;
+import com.its.api.utils.ItsUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -42,13 +43,13 @@ public class TbVmsFormService {
     @Transactional(readOnly = true)
     public List<TbVmsFormDto> findAllByVmsType(String vmsTypeCd) {
         List<TbVmsFormDto> result = new ArrayList<>();
-        log.error("SELECT");
         List<TbVmsForm> data = this.repo.findAllByVmsType(vmsTypeCd);
-        log.error("FETCH");
         for (TbVmsForm entity : data) {
-            result.add(entity.toDto());
+            TbVmsFormDto dto = entity.toDto();
+            dto.setVmsFormImag(ItsUtils.convertBmpToPng(dto.getVmsFormImag()));
+            dto.setImagFmt("png");
+            result.add(dto);
         }
-        log.error("END");
         return result;
     }
 
@@ -63,7 +64,10 @@ public class TbVmsFormService {
         List<TbVmsFormDto> result = new ArrayList<>();
         List<TbVmsForm> data = this.repo.findAllByVmsTypeAndFormType(vmsTypeCd, formTypeCd);
         for (TbVmsForm entity : data) {
-            result.add(entity.toDto());
+            TbVmsFormDto dto = entity.toDto();
+            dto.setVmsFormImag(ItsUtils.convertBmpToPng(dto.getVmsFormImag()));
+            dto.setImagFmt("png");
+            result.add(dto);
         }
         return result;
     }

+ 1 - 1
src/main/java/com/its/api/its/service/vms/TbVmsSymbLibService.java

@@ -45,7 +45,7 @@ public class TbVmsSymbLibService {
         if (data != null) {
             data.forEach(obj -> {
                 result.add(obj.toDto());
-                ItsUtils.saveByteArrayToFile(saveDir + obj.getSymbLibNmbr() + ".bmp", obj.getImagData());
+                //ItsUtils.saveByteArrayToFile(saveDir + obj.getSymbLibNmbr() + ".bmp", obj.getImagData());
             });
         }
         return result;

+ 0 - 99
src/main/java/com/its/api/its/service/vms/TbVmsTrfcInfrDsplSchAutoService.java

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

+ 0 - 101
src/main/java/com/its/api/its/service/vms/TbVmsTrfcInfrDsplSchDefaultService.java

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

+ 0 - 101
src/main/java/com/its/api/its/service/vms/TbVmsTrfcInfrDsplSchFixedService.java

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

+ 247 - 0
src/main/java/com/its/api/its/service/vms/TbVmsTrfcInfrDsplSchService.java

@@ -0,0 +1,247 @@
+package com.its.api.its.service.vms;
+
+import com.its.api.its.model.dto.vms.TbVmsTrfcInfrDsplSchDto;
+import com.its.api.its.model.entity.vms.TbVmsTrfcInfrDsplSch;
+import com.its.api.its.model.entity.vms.TbVmsTrfcInfrDsplSchKey;
+import com.its.api.its.repository.vms.TbVmsTrfcInfrDsplSchRepository;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbVmsTrfcInfrDsplSchService {
+
+    private final TbVmsTrfcInfrDsplSchRepository repo;
+
+    // 데이터 1건 조회, 없으면 exception
+    private TbVmsTrfcInfrDsplSch requireOne(TbVmsTrfcInfrDsplSchKey id) {
+        return this.repo.findById(id)
+                .orElseThrow(() -> new NoSuchElementException("데이터가 존재하지 않습니다: " + id));
+    }
+
+    // 전체 데이터 조회
+    @Transactional(readOnly = true)
+    public List<TbVmsTrfcInfrDsplSchDto> findAll() {
+        List<TbVmsTrfcInfrDsplSchDto> result = new ArrayList<>();
+        List<TbVmsTrfcInfrDsplSch> data = this.repo.findAll();
+        data.forEach(obj -> {
+            if (!("5").equals(obj.getTrfcSituTypeCd()) &&
+                !("6").equals(obj.getTrfcSituTypeCd())) {
+                result.add(obj.toDto());
+            }
+        });
+        return result;
+    }
+
+    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
+    @Transactional(readOnly = true)
+    public TbVmsTrfcInfrDsplSchDto findById(TbVmsTrfcInfrDsplSchKey id) {
+        TbVmsTrfcInfrDsplSch entity = requireOne(id);
+        return entity.toDto();
+    }
+
+    // 데이터 변경
+    @Transactional
+    public TbVmsTrfcInfrDsplSchDto updateById(TbVmsTrfcInfrDsplSchKey id, TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq req) {
+        TbVmsTrfcInfrDsplSch entity = requireOne(id);
+        entity.updateInfo(req);
+        this.repo.save(entity);
+        return entity.toDto();
+    }
+
+    // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
+    @Transactional
+    public TbVmsTrfcInfrDsplSchDto mergeInfo(TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq req) {
+        TbVmsTrfcInfrDsplSch obj = req.toEntity();
+        this.repo.save(obj);
+        return obj.toDto();
+    }
+
+    // 정보 삭제-개별, 데이터 존재하지 않으면 Exception
+    @Transactional
+    public TbVmsTrfcInfrDsplSchDto deleteById(TbVmsTrfcInfrDsplSchKey id) {
+        TbVmsTrfcInfrDsplSch entity = requireOne(id);
+        this.repo.deleteById(id);
+        return entity.toDto();
+    }
+
+    /**
+     * VMS 폼 표출 스케줄 조회
+     * @param id
+     * @param trfcSituTypeCd
+     * @return
+     */
+    public List<TbVmsTrfcInfrDsplSchDto> findAllVmsDsplSchedule(Long id, List<String> trfcSituTypeCd) {
+        List<TbVmsTrfcInfrDsplSchDto> result = new ArrayList<>();
+        List<TbVmsTrfcInfrDsplSch> data = this.repo.findAllByVmsCtrlTrfcSituTypeCd(id, trfcSituTypeCd);
+        data.forEach(obj -> {
+            result.add(obj.toDto());
+        });
+        return result;
+    }
+
+    /**
+     * 자동 스케줄 목록 조회
+     * @param id
+     * @return
+     */
+    public List<TbVmsTrfcInfrDsplSchDto> findAllVmsDsplSchedule(Long id) {
+        List<String> trfcSituTypeCd = Arrays.asList("0", "1", "2", "3", "4", "7", "8");
+        return findAllVmsDsplSchedule(id, trfcSituTypeCd);
+    }
+    // 교통정보
+    public List<TbVmsTrfcInfrDsplSchDto> findAllTraffic(Long id) {
+        List<String> formTypeCd = Collections.singletonList("0");
+        return findAllVmsDsplSchedule(id, formTypeCd);
+    }
+    // 정체
+    public List<TbVmsTrfcInfrDsplSchDto> findAllCongest(Long id) {
+        List<String> formTypeCd = Collections.singletonList("7");
+        return findAllVmsDsplSchedule(id, formTypeCd);
+    }
+    // 돌발
+    public List<TbVmsTrfcInfrDsplSchDto> findAllIncident(Long id) {
+        List<String> formTypeCd = Collections.singletonList("1");
+        return findAllVmsDsplSchedule(id, formTypeCd);
+    }
+    // 공사/행사
+    public List<TbVmsTrfcInfrDsplSchDto> findAllEvent(Long id) {
+        List<String> formTypeCd = Collections.singletonList("2");
+        return findAllVmsDsplSchedule(id, formTypeCd);
+    }
+    // 홍보
+    public List<TbVmsTrfcInfrDsplSchDto> findAllHongbo(Long id) {
+        List<String> formTypeCd = Collections.singletonList("3");
+        return findAllVmsDsplSchedule(id, formTypeCd);
+    }
+    // 우회도로
+    public List<TbVmsTrfcInfrDsplSchDto> findAllDetour(Long id) {
+        List<String> formTypeCd = Collections.singletonList("4");
+        return findAllVmsDsplSchedule(id, formTypeCd);
+    }
+    // 재난안전
+    public List<TbVmsTrfcInfrDsplSchDto> findAllSafety(Long id) {
+        List<String> formTypeCd = Collections.singletonList("8");
+        return findAllVmsDsplSchedule(id, formTypeCd);
+    }
+
+    /**
+     * 기본 스케줄 목록 조회
+     * @param id
+     * @return
+     */
+    public List<TbVmsTrfcInfrDsplSchDto> findAllDefault(Long id) {
+        List<String> trfcSituTypeCd = Collections.singletonList("6");
+        return findAllVmsDsplSchedule(id, trfcSituTypeCd);
+    }
+
+    /**
+     * 고정 스케줄 목록 조회(홍보폼)
+     * @param id
+     * @return
+     */
+    public List<TbVmsTrfcInfrDsplSchDto> findAllFixed(Long id) {
+        List<String> trfcSituTypeCd = Collections.singletonList("5");
+        return findAllVmsDsplSchedule(id, trfcSituTypeCd);
+    }
+
+    /**
+     * VMS 폼 표출 스케줄 일괄 등록(전체 VMS 편집 - 저장)
+     * 기존 데이터 삭제(DELETE)
+     * 요청 데이터 저장(INSERT)
+     * @param id
+     * @param reqList
+     * @return
+     */
+    @Transactional
+    public List<TbVmsTrfcInfrDsplSchDto> mergeInfoList(Long id, List<TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq> reqList) {
+        List<TbVmsTrfcInfrDsplSchDto> result = new ArrayList<>();
+
+        HashSet<String> trfcSituTypeCdSet = new HashSet<>();
+        reqList.forEach(obj -> {
+            // 제어기 ID를 모두 동일하게 설정
+            if (!Objects.equals(id, obj.getVmsCtlrNmbr())) {
+                log.error("VmsCtlrNmbr different: {}, {}", id, obj.getVmsCtlrNmbr());
+                obj.setVmsCtlrNmbr(id);
+            }
+            trfcSituTypeCdSet.add(obj.getTrfcSituTypeCd());
+        });
+        List<String> trfcSituTypeCd = new ArrayList<>(trfcSituTypeCdSet);
+        this.repo.deleteDataByVmsCtrlTrfcSituTypeCd(id, trfcSituTypeCd);
+
+        for (TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq req : reqList) {
+            TbVmsTrfcInfrDsplSch obj = req.toEntity();
+            this.repo.save(obj);    // INSERT
+            result.add(obj.toDto());
+        }
+        return result;
+    }
+
+    /**
+     * VMS 폼 표출 스케줄 일괄 등록(전체 VMS 등록 - 저장)
+     * 신규 데이터를 저장한다.(INSERT only)
+     * PHASE 번호를 증가 시켜야 한다. 재난안전은 스케줄당 1개가 존재해야 하므로 기존것에 덮어 저장한다(UPDATE)
+     * @param reqList
+     * @return
+     */
+    @Transactional
+    public List<TbVmsTrfcInfrDsplSchDto> batchCreateInfoList(List<TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq> reqList) {
+        List<TbVmsTrfcInfrDsplSchDto> result = new ArrayList<>();
+        for (TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq req : reqList) {
+            TbVmsTrfcInfrDsplSch obj = req.toEntity();
+            if (!("8".equals(req.getTrfcSituTypeCd()))) {
+                // 재난 안전 폼이 아닌경우 해당 폼 유형에서 최대 PHASE 로 설정 한다.
+                int maxPhase = this.repo.findMaxPhaseByVmsCtrlTrfcSituTypeCd(req.getVmsCtlrNmbr(), req.getTrfcSituTypeCd());
+                obj.setPhase(maxPhase);
+                log.error("MAX Phase: {}, {}, {}", maxPhase, req.getVmsCtlrNmbr(), req.getTrfcSituTypeCd());
+            }
+            this.repo.save(obj);    // INSERT only
+            result.add(obj.toDto());
+        }
+        return result;
+    }
+
+    /**
+     * VMS 폼 표출 스케줄 일괄 등록(전체 VMS 편집 - 저장)
+     * 데이터를 저장한다.(INSERT or UPDATE)
+     * @param reqList
+     * @return
+     */
+    @Transactional
+    public List<TbVmsTrfcInfrDsplSchDto> batchMergeInfoList(List<TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq> reqList) {
+        List<TbVmsTrfcInfrDsplSchDto> result = new ArrayList<>();
+        for (TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchUpdReq req : reqList) {
+            TbVmsTrfcInfrDsplSch obj = req.toEntity();
+            this.repo.save(obj);    // INSERT or UPDATE
+            result.add(obj.toDto());
+        }
+        return result;
+    }
+
+    /**
+     * 스케쥴 정보 일괄삭제(전체 VMS 편집 - 삭제)
+     * @param ids
+     * @return
+     */
+    @Transactional
+    public List<TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchDelReq> batchDeleteByIds(List<TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchDelReq> ids) {
+        List<TbVmsTrfcInfrDsplSchDto.TbVmsTrfcInfrDsplSchDelReq> result = new ArrayList<>();
+        ids.forEach(obj -> {
+            TbVmsTrfcInfrDsplSchKey key = new TbVmsTrfcInfrDsplSchKey(obj.getVmsCtlrNmbr(), obj.getTrfcSituTypeCd(), obj.getPhase());
+            try {
+                this.repo.deleteById(key);
+                result.add(obj);
+            }
+            catch (Exception e) {
+                log.error("Not Found: {}", key);
+            }
+        });
+        return result;
+    }
+
+}

+ 37 - 4
src/main/java/com/its/api/utils/ItsUtils.java

@@ -5,10 +5,7 @@ import org.apache.commons.io.FileUtils;
 
 import javax.imageio.ImageIO;
 import java.awt.image.BufferedImage;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
+import java.io.*;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -62,6 +59,28 @@ public final class ItsUtils
 		return min > 10 ? "Y" : "N";
 	}
 
+	public static String getServiceYn(String prcsDt) {
+
+		if (prcsDt == null || prcsDt.length() != 14) {
+			return "N";
+		}
+
+		Date startDateTime = getPrcsDt(prcsDt);
+		if (startDateTime == null) {
+			return "N";
+		}
+		Calendar currDateTime = Calendar.getInstance();
+
+		GregorianCalendar gcStartDateTime = new GregorianCalendar();
+		GregorianCalendar gcEndDateTime = new GregorianCalendar();
+		gcStartDateTime.setTime(startDateTime);
+		gcEndDateTime.setTime(currDateTime.getTime());
+
+		long gap = gcEndDateTime.getTimeInMillis() - gcStartDateTime.getTimeInMillis();
+		long min = gap / 1000L / 60L;
+		return min > 10 ? "N" : "Y";
+	}
+
 	public static String getMissYn(String prcsDt, String CMTR_GRAD_CD) {
 
 		if (CMTR_GRAD_CD.equals("LTC0")) {
@@ -173,6 +192,20 @@ public final class ItsUtils
 		}
 	}
 
+	public static byte[] convertBmpToPng(byte[] bmpArrayData) {
+		try {
+			ByteArrayOutputStream out = new ByteArrayOutputStream();
+			ByteArrayInputStream inStream = new ByteArrayInputStream(bmpArrayData);
+			BufferedImage newImage = ImageIO.read(inStream);
+			ImageIO.write(newImage, "png", out);
+			return out.toByteArray();
+		}
+		catch (IOException e) {
+			log.error("saveByteArrayToFile: {}", e.getMessage());
+		}
+		return null;
+	}
+
 	public static String createUserDir(String userDir) {
 
 		final String sysDir = System.getProperty("user.dir");