shjung 3 ani în urmă
părinte
comite
7aec554b60

+ 27 - 33
src/main/java/com/its/op/controller/its/cctv/TbRespCmraMonitoringController.java

@@ -1,10 +1,11 @@
 package com.its.op.controller.its.cctv;
 
 import com.its.op.dto.its.cctv.TbRespCmraMonitoringDto;
-import com.its.op.entity.its.cctv.TbRespCmraMonitoringKey;
+import com.its.op.dto.its.common.MonitoringListDto;
 import com.its.op.service.its.cctv.TbRespCmraMonitoringService;
 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.*;
@@ -21,46 +22,39 @@ public class TbRespCmraMonitoringController {
 
     private final TbRespCmraMonitoringService service;
 
-    @ApiOperation(value = "감응 카메라 모니터링 화면 전체조회(TB_RESP_CMRA_MONITORING)", response = TbRespCmraMonitoringDto.class, responseContainer = "ArrayList")
-    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbRespCmraMonitoringDto> findAll() {
-        return this.service.findAll();
-    }
-
-    @ApiOperation(value = "감응 카메라 모니터링 화면 개별조회(TB_RESP_CMRA_MONITORING)", response = TbRespCmraMonitoringDto.class)
-    @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbRespCmraMonitoringDto findById(@PathVariable final TbRespCmraMonitoringKey id) {
-        return this.service.findById(id);
+    @ApiOperation(value = "감응 카메라 모니터링 화면 목록 조회(TB_RESP_CMRA_MONITORING)", response = MonitoringListDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/camera/list", produces = {"application/json; charset=utf8"})
+    public List<MonitoringListDto> findAllMonitoringList() {
+        return service.findAllMonitoringList(3);
     }
 
-    @ApiOperation(value = "감응 카메라 모니터링 화면 정보변경(TB_RESP_CMRA_MONITORING)", response = TbRespCmraMonitoringDto.class)
-    @PutMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbRespCmraMonitoringDto updateById(@PathVariable final TbRespCmraMonitoringKey id, @RequestBody @Valid final TbRespCmraMonitoringDto.TbRespCmraMonitoringUpdReq req) {
-        return this.service.updateById(id, req);
-    }
-
-    @ApiOperation(value = "감응 카메라 모니터링 화면 정보변경/생성-목록(TB_RESP_CMRA_MONITORING)", response = TbRespCmraMonitoringDto.class, responseContainer = "ArrayList")
-    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbRespCmraMonitoringDto> mergeInfoList(@RequestBody @Valid final List<TbRespCmraMonitoringDto.TbRespCmraMonitoringUpdReq> listReq) {
-        return this.service.mergeInfoList(listReq);
+    @ApiOperation(value = "감응 카메라 모니터링 화면 전체조회(TB_RESP_CMRA_MONITORING)", response = TbRespCmraMonitoringDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/camera", produces = {"application/json; charset=utf8"})
+    public List<TbRespCmraMonitoringDto> findAll() {
+        return service.findAllMonitoring(3);
     }
 
-    @ApiOperation(value = "감응 카메라 모니터링 화면 정보변경/생성-개별(TB_RESP_CMRA_MONITORING)", response = TbRespCmraMonitoringDto.class)
-    @PostMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbRespCmraMonitoringDto mergeInfo(@PathVariable("id") TbRespCmraMonitoringKey id, @RequestBody @Valid final TbRespCmraMonitoringDto.TbRespCmraMonitoringUpdReq req) {
-        return this.service.mergeInfo(req);
+    @ApiOperation(value = "감응 카메라 모니터링 화면 개별조회-모니터링 명칭(TB_RESP_CMRA_MONITORING)", response = TbRespCmraMonitoringDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/camera/{name}", produces = {"application/json; charset=utf8"})
+    public List<TbRespCmraMonitoringDto> findByName(
+            @ApiParam(name = "name", value = "모니터링이름", example = "Default", required = true)
+            @PathVariable final String name) {
+        //	모니터링유형(1:예비,2,예비,3,영상,4:예비)
+        return service.findByName(3, name);
     }
 
-    @ApiOperation(value = "감응 카메라 모니터링 화면 정보삭제-개별(TB_RESP_CMRA_MONITORING)", response = TbRespCmraMonitoringDto.class)
-    @DeleteMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbRespCmraMonitoringDto deleteDataById(@PathVariable("id") TbRespCmraMonitoringKey id) {
-        return this.service.deleteById(id);
+    @ApiOperation(value = "감응 카메라 모니터링 화면 정보변경/생성(TB_RESP_CMRA_MONITORING)", response = TbRespCmraMonitoringDto.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/camera", produces = {"application/json; charset=utf8"})
+    public List<TbRespCmraMonitoringDto> mergeInfo(
+            @ApiParam(name = "req", value = "모니터링 목록", example = "Default", required = true)
+            @RequestBody @Valid final TbRespCmraMonitoringDto.TbRespCmraMonitoringUpdReq req) {
+        return this.service.mergeInfo(3, req.getMonitoringNm(), req);
     }
 
-    @ApiOperation(value = "감응 카메라 모니터링 화면 정보삭제-목록(TB_RESP_CMRA_MONITORING)", response = TbRespCmraMonitoringDto.class, responseContainer = "ArrayList")
-    @DeleteMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbRespCmraMonitoringDto> deleteDataByIds(@RequestBody @Valid final List<TbRespCmraMonitoringKey> ids) {
-        return this.service.deleteByIds(ids);
+    @ApiOperation(value = "감응 카메라 모니터링 화면 정보삭제-모니터링 명칭(TB_RESP_CMRA_MONITORING)", response = TbRespCmraMonitoringDto.class, responseContainer = "ArrayList")
+    @DeleteMapping(value = "/camera/{name}", produces = {"application/json; charset=utf8"})
+    public List<TbRespCmraMonitoringDto> deleteByName(@PathVariable("name") String name) {
+        return this.service.deleteByName(3, name);
     }
 
 }

+ 17 - 25
src/main/java/com/its/op/dto/its/cctv/TbRespCmraMonitoringDto.java

@@ -1,15 +1,16 @@
 package com.its.op.dto.its.cctv;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
-import com.its.op.entity.its.cctv.TbRespCmraMonitoring;
+import com.its.op.dto.its.common.MonitoringInfoDto;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 
 import javax.persistence.Column;
-import javax.validation.constraints.Positive;
+import javax.validation.constraints.PositiveOrZero;
 import javax.validation.constraints.Size;
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * 감응 카메라 모니터링 화면 DTO Class
@@ -60,43 +61,34 @@ public class TbRespCmraMonitoringDto implements Serializable {
     @NoArgsConstructor//(access = AccessLevel.PROTECTED)
     public static class TbRespCmraMonitoringUpdReq {
 
-        @ApiModelProperty("모니터링유형(1:영상), Nullable = N, NUMBER(3)")  // N NUMBER(3)
+        @ApiModelProperty("모니터링유형(1:예비,2,예비,3,영상,4:예비), Nullable = N, NUMBER(3)")  // N NUMBER(3)
         @JsonProperty("monitoring_type")
-        @Positive
+        @PositiveOrZero
         private Integer monitoringType;
 
+        @ApiModelProperty("모니터링명칭-원천, Nullable = N, VARCHAR(40)")  // N VARCHAR(40)
+        @JsonProperty("org_monitoring_nm")
+        @Size(min=1, max=40)
+        private String orgMonitoringNm;
+
         @ApiModelProperty("모니터링명칭, Nullable = N, VARCHAR(40)")  // N VARCHAR(40)
         @JsonProperty("monitoring_nm")
         @Size(min=1, max=40)
         private String monitoringNm;
 
-        @ApiModelProperty("모니터링순서, Nullable = N, NUMBER(3)")  // N NUMBER(3)
-        @JsonProperty("monitoring_seq")
-        @Positive
-        private Integer monitoringSeq;
-
-        @ApiModelProperty("카메라 관리 번호, Nullable = N, NUMBER(10)")  // N NUMBER(10)
-        @JsonProperty("resp_cmra_nmbr")
-        @Positive
-        private Long respCmraNmbr;
+        private List<MonitoringInfoDto> infos;
 
         @Builder
-        public TbRespCmraMonitoringUpdReq(Integer monitoring_type, String monitoring_nm, Integer monitoring_seq, Long resp_cmra_nmbr) {
+        public TbRespCmraMonitoringUpdReq(Integer monitoring_type, String org_monitoring_nm, String monitoring_nm, List<MonitoringInfoDto> infos) {
             this.monitoringType = monitoring_type;
+            this.orgMonitoringNm = org_monitoring_nm;
             this.monitoringNm = monitoring_nm;
-            this.monitoringSeq = monitoring_seq;
-            this.respCmraNmbr = resp_cmra_nmbr;
-        }
 
-        public TbRespCmraMonitoring toEntity() {
-            return TbRespCmraMonitoring.builder()
-                    .monitoringType(this.monitoringType)
-                    .monitoringNm(this.monitoringNm)
-                    .monitoringSeq(this.monitoringSeq)
-                    .respCmraNmbr(this.respCmraNmbr)
-                    .build();
+            // FOR KISA Secure Coding pass
+            //this.infos = infos;
+            List<MonitoringInfoDto> temp = infos;
+            this.infos = temp;
         }
-
     }
 
 }

+ 4 - 4
src/main/java/com/its/op/entity/its/cctv/TbRespCmraMonitoring.java

@@ -51,6 +51,10 @@ public class TbRespCmraMonitoring implements Serializable {
     @NotFound(action = NotFoundAction.IGNORE)
     private TbRespCmra cctv = new TbRespCmra();
 
+    public void setType(Integer monitoringType) {
+        this.monitoringType = monitoringType;
+    }
+
     public TbRespCmraMonitoringDto toDto() {
         TbRespCmraMonitoringDto dto = TbRespCmraMonitoringDto.builder()
                 .monitoringType(this.monitoringType)
@@ -79,8 +83,4 @@ public class TbRespCmraMonitoring implements Serializable {
         this.monitoringSeq = monitoringSeq;
     }
 
-    public void updateInfo(TbRespCmraMonitoringDto.TbRespCmraMonitoringUpdReq req) {
-        this.respCmraNmbr = req.getRespCmraNmbr();
-    }
-
 }

+ 90 - 55
src/main/java/com/its/op/service/its/cctv/TbRespCmraMonitoringService.java

@@ -1,9 +1,12 @@
 package com.its.op.service.its.cctv;
 
 import com.its.op.dao.repository.its.cctv.TbRespCmraMonitoringRepository;
+import com.its.op.dto.its.cctv.TbRespCmraDto;
 import com.its.op.dto.its.cctv.TbRespCmraMonitoringDto;
+import com.its.op.dto.its.common.MonitoringInfoDto;
+import com.its.op.dto.its.common.MonitoringListDto;
+import com.its.op.dto.its.common.MonitoringListInf;
 import com.its.op.entity.its.cctv.TbRespCmraMonitoring;
-import com.its.op.entity.its.cctv.TbRespCmraMonitoringKey;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -11,8 +14,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.Optional;
 
 @Slf4j
 @RequiredArgsConstructor
@@ -20,23 +21,12 @@ import java.util.Optional;
 public class TbRespCmraMonitoringService {
 
     private final TbRespCmraMonitoringRepository repo;
+    private final TbRespCmraService ctlrService;
 
-    // 데이터 1건 조회, 없으면 exception
-    private TbRespCmraMonitoring requireOne(TbRespCmraMonitoringKey id) throws NoSuchElementException {
-        Optional<TbRespCmraMonitoring> info = this.repo.findById(id);
-        if (info.isPresent()) {
-            return info.get();
-        }
-        else {
-            throw new NoSuchElementException("데이터가 존재하지 않습니다: " + id);
-        }
-//        return this.repo.findById(id)
-//                .orElseThrow(() -> new NoSuchElementException("데이터가 존재하지 않습니다: " + id));
-    }
 
     // 전체 데이터 조회
     @Transactional(readOnly = true)
-    public List<TbRespCmraMonitoringDto> findAll() {
+    public List<TbRespCmraMonitoringDto> findAll(Integer monitoringType) {
         List<TbRespCmraMonitoringDto> result = new ArrayList<>();
         List<TbRespCmraMonitoring> data = this.repo.findAll();
         for (TbRespCmraMonitoring entity : data) {
@@ -44,63 +34,108 @@ public class TbRespCmraMonitoringService {
         }
         return result;
     }
-
-    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
+    // 모니터링 유형에 속한 모든 데이터 조회
     @Transactional(readOnly = true)
-    public TbRespCmraMonitoringDto findById(TbRespCmraMonitoringKey id) {
-        TbRespCmraMonitoring entity = requireOne(id);
-        return entity.toDto();
+    public List<TbRespCmraMonitoringDto> findAllMonitoring(Integer monitoringType) {
+        List<TbRespCmraMonitoringDto> result = new ArrayList<>();
+        List<TbRespCmraMonitoring> data = this.repo.findAllMonitoring(monitoringType);
+        if (data != null) {
+            data.forEach(obj -> {
+                result.add(obj.toDto());
+            });
+        }
+        return result;
     }
 
-    // 데이터 변경
-    @Transactional
-    public TbRespCmraMonitoringDto updateById(TbRespCmraMonitoringKey id, TbRespCmraMonitoringDto.TbRespCmraMonitoringUpdReq req) {
-        TbRespCmraMonitoring entity = requireOne(id);
-        entity.updateInfo(req);
-        this.repo.save(entity);
-        return entity.toDto();
-    }
+    // 모니터링 이름으로 모니터링목록 조회
+    @Transactional(readOnly = true)
+    public List<TbRespCmraMonitoringDto> findByName(Integer monitoringType, String name) {
 
-    // 데이터 변경 또는 생성-목록(데이터가 존재하면 업데이트 없으면 신규로 생성)
-    @Transactional
-    public List<TbRespCmraMonitoringDto> mergeInfoList(List<TbRespCmraMonitoringDto.TbRespCmraMonitoringUpdReq> reqList) {
+        //	모니터링유형(1:예비,2,예비,3,영상,4:예비)
         List<TbRespCmraMonitoringDto> result = new ArrayList<>();
-        for (TbRespCmraMonitoringDto.TbRespCmraMonitoringUpdReq req : reqList) {
-            TbRespCmraMonitoring obj = req.toEntity();
-            this.repo.save(obj);
-            result.add(obj.toDto());
+        List<TbRespCmraMonitoring> data = this.repo.findByName(monitoringType, name.trim());
+        if (data != null) {
+            data.forEach(obj -> {
+                result.add(obj.toDto());
+            });
         }
         return result;
     }
 
     // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
-    @Transactional
-    public TbRespCmraMonitoringDto mergeInfo(TbRespCmraMonitoringDto.TbRespCmraMonitoringUpdReq req) {
-        TbRespCmraMonitoring obj = req.toEntity();
-        this.repo.save(obj);
-        return obj.toDto();
+    public List<TbRespCmraMonitoringDto> mergeInfo(Integer monitoringType, String name, TbRespCmraMonitoringDto.TbRespCmraMonitoringUpdReq req) {
+
+        // Repository 에서 Transaction 처리를 수행
+
+        // 이름에 해당하는 데이터 삭제
+        this.repo.deleteByName(monitoringType, req.getOrgMonitoringNm().trim());
+
+        // 이름에 해당하는 모든 데이터 저장
+        for (MonitoringInfoDto reqObj : req.getInfos()) {
+            TbRespCmraMonitoring obj = TbRespCmraMonitoring.builder()
+                    .monitoringType(monitoringType)
+                    .monitoringNm(name.trim())
+                    .monitoringSeq(reqObj.getMonitoringSeq())
+                    .respCmraNmbr(reqObj.getCtlrNmbr())
+                    .build();
+            obj.setType(monitoringType);
+            this.repo.save(obj);
+        }
+
+        // 저장된 데이터 리턴
+        return findByName(monitoringType, name);
     }
 
     // 정보 삭제-개별, 데이터 존재하지 않으면 Exception
     @Transactional
-    public TbRespCmraMonitoringDto deleteById(TbRespCmraMonitoringKey id) {
-        TbRespCmraMonitoring entity = requireOne(id);
-        this.repo.deleteById(id);
-        return entity.toDto();
+    public List<TbRespCmraMonitoringDto> deleteByName(Integer monitoringType, String name) {
+
+        List<TbRespCmraMonitoringDto> result = findByName(monitoringType, name.trim());
+        if (result != null) {
+            this.repo.deleteByName(monitoringType, name.trim());
+        }
+        return result;
     }
 
-    // 정보 삭제-목록, 존재하는 데이터 만 삭제
-    @Transactional
-    public List<TbRespCmraMonitoringDto> deleteByIds(List<TbRespCmraMonitoringKey> ids) {
-        List<TbRespCmraMonitoringDto> result = new ArrayList<>();
-        for (TbRespCmraMonitoringKey id : ids) {
-            Optional<TbRespCmraMonitoring> obj = this.repo.findById(id);
-            if (obj.isPresent()) {
-                this.repo.deleteById(id);
-                result.add(obj.get().toDto());
+    /**
+     * 모니터링 화면 리스트 소회
+     * @param monitoringType
+     * @return
+     */
+    public List<MonitoringListDto> findAllMonitoringList(Integer monitoringType) {
+        List<MonitoringListDto> result = new ArrayList<>();
+        List<MonitoringListInf> data = this.repo.findAllMonitoringList(monitoringType);
+        data.forEach(obj -> {
+            result.add(MonitoringListDto.builder()
+                    .monitoringType(monitoringType)
+                    .monitoringNm(obj.getName().trim())
+                    .count(obj.getCount().intValue())
+                    .build());
+        });
+
+        if (result.size() == 0) {
+            // 모니터링 화면이 없으면 Default 화면 목록을 만든다
+            List<TbRespCmraDto> ctlrList = this.ctlrService.findAllList();
+            int seq = 1;
+            for (int ii = 0; ii < ctlrList.size(); ii++) {
+                TbRespCmraDto obj = ctlrList.get(ii);
+                TbRespCmraMonitoring entity = TbRespCmraMonitoring.builder()
+                        .monitoringType(monitoringType)
+                        .monitoringNm("Default")
+                        .monitoringSeq(seq++)
+                        .respCmraNmbr(obj.getRespCmraNmbr())
+                        .build();
+                this.repo.save(entity);
+                if (seq == 16) {
+                    break;
+                }
             }
+            result.add(MonitoringListDto.builder()
+                    .monitoringType(monitoringType)
+                    .monitoringNm("Default")
+                    .count(seq)
+                    .build());
         }
         return result;
     }
-
 }