shjung il y a 2 ans
Parent
commit
639685cc5d

+ 69 - 40
src/main/java/com/its/op/controller/its/rse/TbRseCtlrSttsHsController.java

@@ -1,15 +1,17 @@
 package com.its.op.controller.its.rse;
 
 import com.its.op.dto.its.rse.TbRseCtlrSttsHsDto;
-import com.its.op.entity.its.rse.TbRseCtlrSttsHsKey;
 import com.its.op.service.its.rse.TbRseCtlrSttsHsService;
 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.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
-import javax.validation.Valid;
 import java.util.List;
 
 @Api(tags = "14.RSE-1.RSE 관리-RSE 상태 이력")
@@ -21,46 +23,73 @@ public class TbRseCtlrSttsHsController {
 
     private final TbRseCtlrSttsHsService service;
 
-    @ApiOperation(value = "RSE 상태 이력 전체조회(TB_RSE_CTLR_STTS_HS)", response = TbRseCtlrSttsHsDto.class, responseContainer = "ArrayList")
+    @ApiOperation(value = "RSE 제어기 상태 이력조회(TB_RSE_CTLR_STTS_HS)", response = TbRseCtlrSttsHsDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbRseCtlrSttsHsDto> findAll() {
-        return this.service.findAll();
+    public List<TbRseCtlrSttsHsDto> findAllByDateRange(
+            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24MI00)", example = "20210112152000", required = true)
+            @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24MI59)", example = "20221112152000", required = true)
+            @RequestParam String TO_DT,
+            @ApiParam(name = "id", value = "RSE 관리번호 목록", example = "[00000001,00000002]", required = true)
+            @RequestParam List<Long> id
+    ) {
+        return this.service.findAllByDateRange(FROM_DT, TO_DT, id);
     }
 
-    @ApiOperation(value = "RSE 상태 이력 개별조회(TB_RSE_CTLR_STTS_HS)", response = TbRseCtlrSttsHsDto.class)
-    @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbRseCtlrSttsHsDto findById(@PathVariable final TbRseCtlrSttsHsKey id) {
-        return this.service.findById(id);
-    }
-
-    @ApiOperation(value = "RSE 상태 이력 정보변경(TB_RSE_CTLR_STTS_HS)", response = TbRseCtlrSttsHsDto.class)
-    @PutMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbRseCtlrSttsHsDto updateById(@PathVariable final TbRseCtlrSttsHsKey id, @RequestBody @Valid final TbRseCtlrSttsHsDto.TbRseCtlrSttsHsUpdReq req) {
-        return this.service.updateById(id, req);
-    }
-
-    @ApiOperation(value = "RSE 상태 이력 정보변경/생성-목록(TB_RSE_CTLR_STTS_HS)", response = TbRseCtlrSttsHsDto.class, responseContainer = "ArrayList")
-    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbRseCtlrSttsHsDto> mergeInfoList(@RequestBody @Valid final List<TbRseCtlrSttsHsDto.TbRseCtlrSttsHsUpdReq> listReq) {
-        return this.service.mergeInfoList(listReq);
-    }
-
-    @ApiOperation(value = "RSE 상태 이력 정보변경/생성-개별(TB_RSE_CTLR_STTS_HS)", response = TbRseCtlrSttsHsDto.class)
-    @PostMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbRseCtlrSttsHsDto mergeInfo(@PathVariable("id") TbRseCtlrSttsHsKey id, @RequestBody @Valid final TbRseCtlrSttsHsDto.TbRseCtlrSttsHsUpdReq req) {
-        return this.service.mergeInfo(req);
-    }
-
-    @ApiOperation(value = "RSE 상태 이력 정보삭제-개별(TB_RSE_CTLR_STTS_HS)", response = TbRseCtlrSttsHsDto.class)
-    @DeleteMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
-    public TbRseCtlrSttsHsDto deleteDataById(@PathVariable("id") TbRseCtlrSttsHsKey id) {
-        return this.service.deleteById(id);
-    }
-
-    @ApiOperation(value = "RSE 상태 이력 정보삭제-목록(TB_RSE_CTLR_STTS_HS)", response = TbRseCtlrSttsHsDto.class, responseContainer = "ArrayList")
-    @DeleteMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbRseCtlrSttsHsDto> deleteDataByIds(@RequestBody @Valid final List<TbRseCtlrSttsHsKey> ids) {
-        return this.service.deleteByIds(ids);
+    @ApiOperation(value = "RSE 제어기 장애 이력조회(TB_RSE_CTLR_STTS_HS)", response = TbRseCtlrSttsHsDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/fail", produces = {"application/json; charset=utf8"})
+    public List<TbRseCtlrSttsHsDto> findAllFailByDateRange(
+            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24MI00)", example = "20210112152000", required = true)
+            @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24MI59)", example = "20221112152000", required = true)
+            @RequestParam String TO_DT,
+            @ApiParam(name = "id", value = "RSE 관리번호 목록", example = "[00000001,00000002]", required = true)
+            @RequestParam List<Long> id
+    ) {
+        return this.service.findAllFailByDateRange(FROM_DT, TO_DT, id);
     }
+//
+//
+//    @ApiOperation(value = "RSE 상태 이력 전체조회(TB_RSE_CTLR_STTS_HS)", response = TbRseCtlrSttsHsDto.class, responseContainer = "ArrayList")
+//    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
+//    public List<TbRseCtlrSttsHsDto> findAll() {
+//        return this.service.findAll();
+//    }
+//
+//    @ApiOperation(value = "RSE 상태 이력 개별조회(TB_RSE_CTLR_STTS_HS)", response = TbRseCtlrSttsHsDto.class)
+//    @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+//    public TbRseCtlrSttsHsDto findById(@PathVariable final TbRseCtlrSttsHsKey id) {
+//        return this.service.findById(id);
+//    }
+//
+//    @ApiOperation(value = "RSE 상태 이력 정보변경(TB_RSE_CTLR_STTS_HS)", response = TbRseCtlrSttsHsDto.class)
+//    @PutMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+//    public TbRseCtlrSttsHsDto updateById(@PathVariable final TbRseCtlrSttsHsKey id, @RequestBody @Valid final TbRseCtlrSttsHsDto.TbRseCtlrSttsHsUpdReq req) {
+//        return this.service.updateById(id, req);
+//    }
+//
+//    @ApiOperation(value = "RSE 상태 이력 정보변경/생성-목록(TB_RSE_CTLR_STTS_HS)", response = TbRseCtlrSttsHsDto.class, responseContainer = "ArrayList")
+//    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
+//    public List<TbRseCtlrSttsHsDto> mergeInfoList(@RequestBody @Valid final List<TbRseCtlrSttsHsDto.TbRseCtlrSttsHsUpdReq> listReq) {
+//        return this.service.mergeInfoList(listReq);
+//    }
+//
+//    @ApiOperation(value = "RSE 상태 이력 정보변경/생성-개별(TB_RSE_CTLR_STTS_HS)", response = TbRseCtlrSttsHsDto.class)
+//    @PostMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+//    public TbRseCtlrSttsHsDto mergeInfo(@PathVariable("id") TbRseCtlrSttsHsKey id, @RequestBody @Valid final TbRseCtlrSttsHsDto.TbRseCtlrSttsHsUpdReq req) {
+//        return this.service.mergeInfo(req);
+//    }
+//
+//    @ApiOperation(value = "RSE 상태 이력 정보삭제-개별(TB_RSE_CTLR_STTS_HS)", response = TbRseCtlrSttsHsDto.class)
+//    @DeleteMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+//    public TbRseCtlrSttsHsDto deleteDataById(@PathVariable("id") TbRseCtlrSttsHsKey id) {
+//        return this.service.deleteById(id);
+//    }
+//
+//    @ApiOperation(value = "RSE 상태 이력 정보삭제-목록(TB_RSE_CTLR_STTS_HS)", response = TbRseCtlrSttsHsDto.class, responseContainer = "ArrayList")
+//    @DeleteMapping(value = "", produces = {"application/json; charset=utf8"})
+//    public List<TbRseCtlrSttsHsDto> deleteDataByIds(@RequestBody @Valid final List<TbRseCtlrSttsHsKey> ids) {
+//        return this.service.deleteByIds(ids);
+//    }
 
 }

+ 10 - 0
src/main/java/com/its/op/dao/repository/its/rse/TbRseCtlrSttsHsRepository.java

@@ -5,6 +5,7 @@ import com.its.op.entity.its.rse.TbRseCtlrSttsHsKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -18,4 +19,13 @@ public interface TbRseCtlrSttsHsRepository extends JpaRepository<TbRseCtlrSttsHs
     @Query("select p from TbRseCtlrSttsHs p")
     List<TbRseCtlrSttsHs> findAllList();
 
+    @Query("select p from TbRseCtlrSttsHs p inner join fetch p.rse where p.crtnDt between :fromDt and :toDt and p.rseCtlrNmbr in :ids")
+    List<TbRseCtlrSttsHs> findAllByDateRange(@Param("fromDt") String fromDt, @Param("toDt") String toDt, @Param("ids") List<Long> ids);
+
+    @Query("select p from TbRseCtlrSttsHs p inner join fetch p.rse " +
+            " where p.crtnDt between :fromDt and :toDt " +
+            "   and (p.cmncSttsCd <> 'CMS0' or p.cboxDoorSttsCd <> 'CDS0' or p.cboxTmpr > 40)" +
+            "   and p.rseCtlrNmbr in :ids")
+    List<TbRseCtlrSttsHs> findAllFailByDateRange(@Param("fromDt") String fromDt, @Param("toDt") String toDt, @Param("ids") List<Long> ids);
+
 }

+ 0 - 1
src/main/java/com/its/op/dto/its/rse/TbRseCtlrSttsDto.java

@@ -146,5 +146,4 @@ public class TbRseCtlrSttsDto implements Serializable {
     @JsonProperty("coll_cnt")
     private Integer collCnt;
 
-
 }

+ 79 - 106
src/main/java/com/its/op/dto/its/rse/TbRseCtlrSttsHsDto.java

@@ -1,13 +1,11 @@
 package com.its.op.dto.its.rse;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
-import com.its.op.entity.its.rse.TbRseCtlrSttsHs;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.*;
+import lombok.Builder;
+import lombok.Data;
 
-import javax.validation.constraints.PositiveOrZero;
-import javax.validation.constraints.Size;
 import java.io.Serializable;
 
 /**
@@ -67,111 +65,86 @@ public class TbRseCtlrSttsHsDto implements Serializable {
     @JsonProperty("atn_4_mtns")
     private String atn4Mtns;
 
+    @ApiModelProperty("함체 문 상태 코드('CDS')-앞문/뒷문상태가 모두닫힌경우 닫힘")  // Y VARCHAR2(7)
+    @JsonProperty("cbox_door_stts_cd")
+    private String cboxDoorSttsCd;
+
+    @ApiModelProperty("앞문 상태 코드('CDS')")  // Y VARCHAR2(7)
+    @JsonProperty("front_door_stts_cd")
+    private String frontDoorSttsCd;
+
+    @ApiModelProperty("뒷문 상태 코드('CDS')")  // Y VARCHAR2(7)
+    @JsonProperty("back_door_stts_cd")
+    private String backDoorSttsCd;
+
+    @ApiModelProperty("팬 상태 코드('PAS')")  // Y VARCHAR2(7)
+    @JsonProperty("fan_stts_cd")
+    private String fanSttsCd;
+
+    @ApiModelProperty("히터 상태 코드('HTS')")  // Y VARCHAR2(7)
+    @JsonProperty("hetr_stts_cd")
+    private String hetrSttsCd;
+
+    @ApiModelProperty("RTU 상태 코드('RTU')")  // Y VARCHAR2(7)
+    @JsonProperty("rtu_stts_cd")
+    private String rtuSttsCd;
+
+    @ApiModelProperty("함체 온도")  // Y NUMBER(3)
+    @JsonProperty("cbox_tmpr")
+    private Integer cboxTmpr;
+
+    @ApiModelProperty("함체 습도")  // Y NUMBER(3)
+    @JsonProperty("cbox_hmdt")
+    private Integer cboxHmdt;
+
     // Code Description Field
-    @ApiModelProperty("통신 상태 설명")
+    @ApiModelProperty("RSE 제어기 ID")  // Y VARCHAR2(30)
+    @JsonProperty("rse_ctlr_id")
+    private String rseCtlrId;
+
+    @ApiModelProperty("RSE 명칭")  // Y VARCHAR2(40)
+    @JsonProperty("rse_nm")
+    private String rseNm;
+
+    @ApiModelProperty("설치 위치 명")  // Y VARCHAR2(40)
+    @JsonProperty("istl_lctn_nm")
+    private String istlLctnNm;
+
+    @ApiModelProperty("통신 상태 코드('CMS') 설명")
     @JsonProperty("cmnc_stts_desc")    // CMNC_STTS_CD
     private String cmncSttsDesc;
 
-    @ApiModel("TbRseCtlrSttsHsUpdReq(RSE 상태 이력 정보변경)")
-    @Getter
-    @Setter
-    @ToString
-    @NoArgsConstructor//(access = AccessLevel.PROTECTED)
-    public static class TbRseCtlrSttsHsUpdReq {
-
-        @ApiModelProperty("생성 일시, Nullable = N, VARCHAR2(14)")  // N VARCHAR2(14)
-        @JsonProperty("crtn_dt")
-        @Size(min=1, max=14)
-        private String crtnDt;
-
-        @ApiModelProperty("RSE 제어기 번호, Nullable = N, NUMBER(10)")  // N NUMBER(10)
-        @JsonProperty("rse_ctlr_nmbr")
-        @PositiveOrZero
-        private Long rseCtlrNmbr;
-
-        @ApiModelProperty("통신 상태, Nullable = Y, VARCHAR2(7)")  // Y VARCHAR2(7)
-        @JsonProperty("cmnc_stts_cd")
-        @Size(min=1, max=7)
-        private String cmncSttsCd;
-
-        @ApiModelProperty("제어 장치 상태, Nullable = Y, VARCHAR2(7)")  // Y VARCHAR2(7)
-        @JsonProperty("cntl_devc_stts")
-        @Size(min=1, max=7)
-        private String cntlDevcStts;
-
-        @ApiModelProperty("안테나 1 상태, Nullable = Y, VARCHAR2(7)")  // Y VARCHAR2(7)
-        @JsonProperty("atn_1_stts")
-        @Size(min=1, max=7)
-        private String atn1Stts;
-
-        @ApiModelProperty("안테나 2 상태, Nullable = Y, VARCHAR2(7)")  // Y VARCHAR2(7)
-        @JsonProperty("atn_2_stts")
-        @Size(min=1, max=7)
-        private String atn2Stts;
-
-        @ApiModelProperty("안테나 3 상태, Nullable = Y, VARCHAR2(7)")  // Y VARCHAR2(7)
-        @JsonProperty("atn_3_stts")
-        @Size(min=1, max=7)
-        private String atn3Stts;
-
-        @ApiModelProperty("안테나 4 상태, Nullable = Y, VARCHAR2(7)")  // Y VARCHAR2(7)
-        @JsonProperty("atn_4_stts")
-        @Size(min=1, max=7)
-        private String atn4Stts;
-
-        @ApiModelProperty("안테나 1 동작, Nullable = Y, VARCHAR2(7)")  // Y VARCHAR2(7)
-        @JsonProperty("atn_1_mtns")
-        @Size(min=1, max=7)
-        private String atn1Mtns;
-
-        @ApiModelProperty("안테나 2 동작, Nullable = Y, VARCHAR2(7)")  // Y VARCHAR2(7)
-        @JsonProperty("atn_2_mtns")
-        @Size(min=1, max=7)
-        private String atn2Mtns;
-
-        @ApiModelProperty("안테나 3 동작, Nullable = Y, VARCHAR2(7)")  // Y VARCHAR2(7)
-        @JsonProperty("atn_3_mtns")
-        @Size(min=1, max=7)
-        private String atn3Mtns;
-
-        @ApiModelProperty("안테나 4 동작, Nullable = Y, VARCHAR2(7)")  // Y VARCHAR2(7)
-        @JsonProperty("atn_4_mtns")
-        @Size(min=1, max=7)
-        private String atn4Mtns;
-
-        @Builder
-        public TbRseCtlrSttsHsUpdReq(String crtn_dt, Long rse_ctlr_nmbr, String cmnc_stts_cd, String cntl_devc_stts, String atn_1_stts, String atn_2_stts, String atn_3_stts, String atn_4_stts, String atn_1_mtns, String atn_2_mtns, String atn_3_mtns, String atn_4_mtns) {
-            this.crtnDt = crtn_dt;
-            this.rseCtlrNmbr = rse_ctlr_nmbr;
-            this.cmncSttsCd = cmnc_stts_cd;
-            this.cntlDevcStts = cntl_devc_stts;
-            this.atn1Stts = atn_1_stts;
-            this.atn2Stts = atn_2_stts;
-            this.atn3Stts = atn_3_stts;
-            this.atn4Stts = atn_4_stts;
-            this.atn1Mtns = atn_1_mtns;
-            this.atn2Mtns = atn_2_mtns;
-            this.atn3Mtns = atn_3_mtns;
-            this.atn4Mtns = atn_4_mtns;
-        }
-
-        public TbRseCtlrSttsHs toEntity() {
-            return TbRseCtlrSttsHs.builder()
-                    .crtnDt(this.crtnDt)
-                    .rseCtlrNmbr(this.rseCtlrNmbr)
-                    .cmncSttsCd(this.cmncSttsCd)
-                    .cntlDevcStts(this.cntlDevcStts)
-                    .atn1Stts(this.atn1Stts)
-                    .atn2Stts(this.atn2Stts)
-                    .atn3Stts(this.atn3Stts)
-                    .atn4Stts(this.atn4Stts)
-                    .atn1Mtns(this.atn1Mtns)
-                    .atn2Mtns(this.atn2Mtns)
-                    .atn3Mtns(this.atn3Mtns)
-                    .atn4Mtns(this.atn4Mtns)
-                    .build();
-        }
-
-    }
+    @ApiModelProperty("함체 문 상태 코드('CDS')-앞문/뒷문상태가 모두닫힌경우 닫힘 설명")
+    @JsonProperty("cbox_door_stts_desc")    // CBOX_DOOR_STTS_CD
+    private String cboxDoorSttsDesc;
+
+    @ApiModelProperty("앞문 상태 코드('CDS') 설명")
+    @JsonProperty("front_door_stts_desc")    // FRONT_DOOR_STTS_CD
+    private String frontDoorSttsDesc;
+
+    @ApiModelProperty("뒷문 상태 코드('CDS') 설명")
+    @JsonProperty("back_door_stts_desc")    // BACK_DOOR_STTS_CD
+    private String backDoorSttsDesc;
+
+    @ApiModelProperty("팬 상태 코드('PAS') 설명")
+    @JsonProperty("fan_stts_desc")    // FAN_STTS_CD
+    private String fanSttsDesc;
+
+    @ApiModelProperty("히터 상태 코드('HTS') 설명")
+    @JsonProperty("hetr_stts_desc")    // HETR_STTS_CD
+    private String hetrSttsDesc;
+
+    @ApiModelProperty("RTU 상태 코드('RTU') 설명")
+    @JsonProperty("rtu_stts_desc")    // RTU_STTS_CD
+    private String rtuSttsDesc;
+
+    @ApiModelProperty("상태정보 결측 여부")
+    @JsonProperty("miss_stts_yn")
+    private String missSttsYn;
+
+    @ApiModelProperty("수집건수")
+    @JsonProperty("coll_cnt")
+    private Integer collCnt;
+
 
 }

+ 81 - 14
src/main/java/com/its/op/entity/its/rse/TbRseCtlrSttsHs.java

@@ -1,12 +1,15 @@
 package com.its.op.entity.its.rse;
 
 import com.its.op.dto.its.rse.TbRseCtlrSttsHsDto;
+import com.its.op.global.CodeManager;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
+import org.hibernate.annotations.NotFound;
+import org.hibernate.annotations.NotFoundAction;
 
 import javax.persistence.*;
 import java.io.Serializable;
@@ -75,8 +78,46 @@ public class TbRseCtlrSttsHs implements Serializable {
     @Column(name = "ATN_4_MTNS", length = 7)
     private String atn4Mtns;
 
+    @ApiModelProperty("함체 문 상태 코드('CDS')-앞문/뒷문상태가 모두닫힌경우 닫힘")  // Y VARCHAR2(7)
+    @Column(name = "CBOX_DOOR_STTS_CD", length = 7)
+    private String cboxDoorSttsCd;
+
+    @ApiModelProperty("앞문 상태 코드('CDS')")  // Y VARCHAR2(7)
+    @Column(name = "FRONT_DOOR_STTS_CD", length = 7)
+    private String frontDoorSttsCd;
+
+    @ApiModelProperty("뒷문 상태 코드('CDS')")  // Y VARCHAR2(7)
+    @Column(name = "BACK_DOOR_STTS_CD", length = 7)
+    private String backDoorSttsCd;
+
+    @ApiModelProperty("팬 상태 코드('PAS')")  // Y VARCHAR2(7)
+    @Column(name = "FAN_STTS_CD", length = 7)
+    private String fanSttsCd;
+
+    @ApiModelProperty("히터 상태 코드('HTS')")  // Y VARCHAR2(7)
+    @Column(name = "HETR_STTS_CD", length = 7)
+    private String hetrSttsCd;
+
+    @ApiModelProperty("RTU 상태 코드('RTU')")  // Y VARCHAR2(7)
+    @Column(name = "RTU_STTS_CD", length = 7)
+    private String rtuSttsCd;
+
+    @ApiModelProperty("함체 온도")  // Y NUMBER(3)
+    @Column(name = "CBOX_TMPR", columnDefinition = "NUMBER", length = 3)
+    private Integer cboxTmpr;
+
+    @ApiModelProperty("함체 습도")  // Y NUMBER(3)
+    @Column(name = "CBOX_HMDT", columnDefinition = "NUMBER", length = 3)
+    private Integer cboxHmdt;
+
+
+    @OneToOne
+    @JoinColumn(insertable=false, updatable=false, name="RSE_CTLR_NMBR", referencedColumnName = "RSE_CTLR_NMBR")
+    @NotFound(action = NotFoundAction.IGNORE)
+    private TbRseCtlr rse;
+
     public TbRseCtlrSttsHsDto toDto() {
-        return TbRseCtlrSttsHsDto.builder()
+        TbRseCtlrSttsHsDto dto = TbRseCtlrSttsHsDto.builder()
                 .crtnDt(this.crtnDt)
                 .rseCtlrNmbr(this.rseCtlrNmbr)
                 .cmncSttsCd(this.cmncSttsCd)
@@ -89,7 +130,46 @@ public class TbRseCtlrSttsHs implements Serializable {
                 .atn2Mtns(this.atn2Mtns)
                 .atn3Mtns(this.atn3Mtns)
                 .atn4Mtns(this.atn4Mtns)
+                .cboxDoorSttsCd(this.cboxDoorSttsCd)
+                .frontDoorSttsCd(this.frontDoorSttsCd)
+                .backDoorSttsCd(this.backDoorSttsCd)
+                .fanSttsCd(this.fanSttsCd)
+                .hetrSttsCd(this.hetrSttsCd)
+                .rtuSttsCd(this.rtuSttsCd)
+                .cboxTmpr(this.cboxTmpr)
+                .cboxHmdt(this.cboxHmdt)
                 .build();
+
+        dto.setCmncSttsDesc(CodeManager.getCodeDescShort(CodeManager.CMNC_STTS_CD, dto.getCmncSttsCd()));       // 통신상태
+        if (CodeManager.CMNC_STTS_NORMAL.equals(dto.getCmncSttsCd())) {
+            dto.setCboxDoorSttsDesc(CodeManager.getCodeDescShort(CodeManager.DOOR_STTS_CD, dto.getCboxDoorSttsCd()));   // 도어
+            dto.setFrontDoorSttsDesc(CodeManager.getCodeDescShort(CodeManager.DOOR_STTS_CD, dto.getFrontDoorSttsCd()));   // 도어
+            dto.setBackDoorSttsDesc(CodeManager.getCodeDescShort(CodeManager.DOOR_STTS_CD, dto.getBackDoorSttsCd()));   // 도어
+            dto.setFanSttsDesc(CodeManager.getCodeDescShort(CodeManager.FAN_STTS_CD, dto.getFanSttsCd()));              // 팬상태
+            dto.setHetrSttsDesc(CodeManager.getCodeDescShort(CodeManager.HETR_STTS_CD, dto.getHetrSttsCd()));            // 히터상태
+            dto.setRtuSttsDesc(CodeManager.getCodeDescShort("RTU", dto.getRtuSttsCd()));
+        }
+        else {
+            dto.setCboxDoorSttsDesc(CodeManager.STTS_UNKNOWN);   // 도어
+            dto.setFrontDoorSttsDesc(CodeManager.STTS_UNKNOWN);   // 도어
+            dto.setBackDoorSttsDesc(CodeManager.STTS_UNKNOWN);   // 도어
+            dto.setFanSttsDesc(CodeManager.STTS_UNKNOWN);        // 팬상태
+            dto.setHetrSttsDesc(CodeManager.STTS_UNKNOWN);       // 히터상태
+            dto.setRtuSttsDesc(CodeManager.getCodeDescShort("RTU", "RTU2"));
+            dto.setCboxTmpr(255);
+        }
+
+        if (this.rse != null) {
+            dto.setRseCtlrId(this.rse.getRseCtlrId());
+            dto.setRseNm(this.rse.getRseNm());
+            dto.setIstlLctnNm(this.rse.getIstlLctnNm());
+        }
+        else {
+            dto.setRseCtlrId("-");
+            dto.setRseNm("?");
+            dto.setIstlLctnNm("?");
+        }
+        return dto;
     }
 
     public TbRseCtlrSttsHs(String crtnDt, Long rseCtlrNmbr) {
@@ -97,17 +177,4 @@ public class TbRseCtlrSttsHs implements Serializable {
         this.rseCtlrNmbr = rseCtlrNmbr;
     }
 
-    public void updateInfo(TbRseCtlrSttsHsDto.TbRseCtlrSttsHsUpdReq req) {
-        this.cmncSttsCd = req.getCmncSttsCd();
-        this.cntlDevcStts = req.getCntlDevcStts();
-        this.atn1Stts = req.getAtn1Stts();
-        this.atn2Stts = req.getAtn2Stts();
-        this.atn3Stts = req.getAtn3Stts();
-        this.atn4Stts = req.getAtn4Stts();
-        this.atn1Mtns = req.getAtn1Mtns();
-        this.atn2Mtns = req.getAtn2Mtns();
-        this.atn3Mtns = req.getAtn3Mtns();
-        this.atn4Mtns = req.getAtn4Mtns();
-    }
-
 }

+ 17 - 62
src/main/java/com/its/op/service/its/rse/TbRseCtlrSttsHsService.java

@@ -3,7 +3,6 @@ package com.its.op.service.its.rse;
 import com.its.op.dao.repository.its.rse.TbRseCtlrSttsHsRepository;
 import com.its.op.dto.its.rse.TbRseCtlrSttsHsDto;
 import com.its.op.entity.its.rse.TbRseCtlrSttsHs;
-import com.its.op.entity.its.rse.TbRseCtlrSttsHsKey;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -11,8 +10,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
@@ -21,19 +18,6 @@ public class TbRseCtlrSttsHsService {
 
     private final TbRseCtlrSttsHsRepository repo;
 
-    // 데이터 1건 조회, 없으면 exception
-    private TbRseCtlrSttsHs requireOne(TbRseCtlrSttsHsKey id) throws NoSuchElementException {
-        Optional<TbRseCtlrSttsHs> 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<TbRseCtlrSttsHsDto> findAll() {
@@ -45,62 +29,33 @@ public class TbRseCtlrSttsHsService {
         return result;
     }
 
-    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
     @Transactional(readOnly = true)
-    public TbRseCtlrSttsHsDto findById(TbRseCtlrSttsHsKey id) {
-        TbRseCtlrSttsHs entity = requireOne(id);
-        return entity.toDto();
-    }
-
-    // 데이터 변경
-    @Transactional
-    public TbRseCtlrSttsHsDto updateById(TbRseCtlrSttsHsKey id, TbRseCtlrSttsHsDto.TbRseCtlrSttsHsUpdReq req) {
-        TbRseCtlrSttsHs entity = requireOne(id);
-        entity.updateInfo(req);
-        this.repo.save(entity);
-        return entity.toDto();
-    }
+    public List<TbRseCtlrSttsHsDto> findAllByDateRange(String fromDt, String toDt, List<Long> ids) {
 
-    // 데이터 변경 또는 생성-목록(데이터가 존재하면 업데이트 없으면 신규로 생성)
-    @Transactional
-    public List<TbRseCtlrSttsHsDto> mergeInfoList(List<TbRseCtlrSttsHsDto.TbRseCtlrSttsHsUpdReq> reqList) {
         List<TbRseCtlrSttsHsDto> result = new ArrayList<>();
-        for (TbRseCtlrSttsHsDto.TbRseCtlrSttsHsUpdReq req : reqList) {
-            TbRseCtlrSttsHs obj = req.toEntity();
-            this.repo.save(obj);
-            result.add(obj.toDto());
+        List<TbRseCtlrSttsHs> data = this.repo.findAllByDateRange(fromDt, toDt, ids);
+        if (data != null) {
+            data.forEach(obj -> {
+                if (obj.getRse() != null && ("N").equals(obj.getRse().getDelYn())) {
+                    result.add(obj.toDto());
+                }
+            });
         }
         return result;
     }
 
-    // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
-    @Transactional
-    public TbRseCtlrSttsHsDto mergeInfo(TbRseCtlrSttsHsDto.TbRseCtlrSttsHsUpdReq req) {
-        TbRseCtlrSttsHs obj = req.toEntity();
-        this.repo.save(obj);
-        return obj.toDto();
-    }
-
-    // 정보 삭제-개별, 데이터 존재하지 않으면 Exception
-    @Transactional
-    public TbRseCtlrSttsHsDto deleteById(TbRseCtlrSttsHsKey id) {
-        TbRseCtlrSttsHs entity = requireOne(id);
-        this.repo.deleteById(id);
-        return entity.toDto();
-    }
+    @Transactional(readOnly = true)
+    public List<TbRseCtlrSttsHsDto> findAllFailByDateRange(String fromDt, String toDt, List<Long> ids) {
 
-    // 정보 삭제-목록, 존재하는 데이터 만 삭제
-    @Transactional
-    public List<TbRseCtlrSttsHsDto> deleteByIds(List<TbRseCtlrSttsHsKey> ids) {
         List<TbRseCtlrSttsHsDto> result = new ArrayList<>();
-        for (TbRseCtlrSttsHsKey id : ids) {
-            Optional<TbRseCtlrSttsHs> obj = this.repo.findById(id);
-            if (obj.isPresent()) {
-                this.repo.deleteById(id);
-                result.add(obj.get().toDto());
-            }
+        List<TbRseCtlrSttsHs> data = this.repo.findAllFailByDateRange(fromDt, toDt, ids);
+        if (data != null) {
+            data.forEach(obj -> {
+                if (obj.getRse() != null && ("N").equals(obj.getRse().getDelYn())) {
+                    result.add(obj.toDto());
+                }
+            });
         }
         return result;
     }
-
 }