Bladeren bron

facility fail history management add

shjung 3 jaren geleden
bovenliggende
commit
804175033f

+ 68 - 0
src/main/java/com/its/api/its/controller/facility/TbFcltFailHsController.java

@@ -0,0 +1,68 @@
+package com.its.api.its.controller.facility;
+
+import com.its.api.its.model.dto.facility.TbFcltFailHsDto;
+import com.its.api.its.service.facility.TbFcltFailHsService;
+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 = "01.시설물관리-1.시설물-3.시설물 장애관리-0.장애내역")
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/facility/fail-hs")
+public class TbFcltFailHsController {
+
+    private final TbFcltFailHsService service;
+
+    @ApiOperation(value = "시설물 장애 내역 조회(TB_FCLT_FAIL_HS)", response = TbFcltFailHsDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/{fcltId}", produces = {"application/json; charset=utf8"})
+    public List<TbFcltFailHsDto> findAllFailList(
+            @ApiParam(name = "fcltId", value = "시설물 ID", example = "010800E406000006", required = true)
+            @PathVariable final String fcltId) {
+        return this.service.findAllFailList(fcltId);
+    }
+
+    @ApiOperation(value = "시설물 장애 내역 신규 장애이력일련번호 조회(TB_FCLT_FAIL_HS)", response = String.class)
+    @GetMapping(value = "/new-hs-seq", produces = {"application/json; charset=utf8"})
+    public String findNewHsSeq() {
+        return this.service.findNewHsSeq();
+    }
+
+    @ApiOperation(value = "시설물 장애 내역 정보변경(TB_FCLT_FAIL_HS)", response = TbFcltFailHsDto.class)
+    @PutMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbFcltFailHsDto updateById(@PathVariable final String id, @RequestBody @Valid final TbFcltFailHsDto.TbFcltFailHsUpdReq req) {
+        return this.service.updateById(id, req);
+    }
+
+    @ApiOperation(value = "시설물 장애 내역 정보변경/생성-목록(TB_FCLT_FAIL_HS)", response = TbFcltFailHsDto.class, responseContainer = "ArrayList")
+    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbFcltFailHsDto> mergeInfoList(@RequestBody @Valid final List<TbFcltFailHsDto.TbFcltFailHsUpdReq> listReq) {
+        return this.service.mergeInfoList(listReq);
+    }
+
+    @ApiOperation(value = "시설물 장애 내역 정보변경/생성-개별(TB_FCLT_FAIL_HS)", response = TbFcltFailHsDto.class)
+    @PostMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbFcltFailHsDto mergeInfo(@PathVariable("id") String id, @RequestBody @Valid final TbFcltFailHsDto.TbFcltFailHsUpdReq req) {
+        return this.service.mergeInfo(req);
+    }
+
+    @ApiOperation(value = "시설물 장애 내역 정보삭제-개별(TB_FCLT_FAIL_HS)", response = TbFcltFailHsDto.class)
+    @DeleteMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbFcltFailHsDto deleteDataById(@PathVariable("id") String id) {
+        return this.service.deleteById(id);
+    }
+
+    @ApiOperation(value = "시설물 장애 내역 정보삭제-목록(TB_FCLT_FAIL_HS)", response = TbFcltFailHsDto.class, responseContainer = "ArrayList")
+    @DeleteMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbFcltFailHsDto> deleteDataByIds(@RequestBody @Valid final List<String> ids) {
+        return this.service.deleteByIds(ids);
+    }
+
+}

+ 63 - 0
src/main/java/com/its/api/its/controller/facility/TbFcltFailRparHsController.java

@@ -0,0 +1,63 @@
+package com.its.api.its.controller.facility;
+
+import com.its.api.its.model.dto.facility.TbFcltFailRparHsDto;
+import com.its.api.its.model.entity.facility.TbFcltFailRparHsKey;
+import com.its.api.its.service.facility.TbFcltFailRparHsService;
+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 = "01.시설물관리-1.시설물-3.시설물 장애관리-1.장애조치내역")
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/facility/fail-pair")
+public class TbFcltFailRparHsController {
+
+    private final TbFcltFailRparHsService service;
+
+    @ApiOperation(value = "시설물 장애 조치 내역 조회(TB_FCLT_FAIL_RPAR_HS)", response = TbFcltFailRparHsDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/{failHsSeq}", produces = {"application/json; charset=utf8"})
+    public List<TbFcltFailRparHsDto> findAllFailHsList(
+            @ApiParam(name = "failHsSeq", value = "장애이력 일련번호", example = "2022030001", required = true)
+            @PathVariable final String failHsSeq) {
+        return this.service.findAllFailHsList(failHsSeq);
+    }
+
+    @ApiOperation(value = "시설물 장애 조치 내역 정보변경(TB_FCLT_FAIL_RPAR_HS)", response = TbFcltFailRparHsDto.class)
+    @PutMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbFcltFailRparHsDto updateById(@PathVariable final TbFcltFailRparHsKey id, @RequestBody @Valid final TbFcltFailRparHsDto.TbFcltFailRparHsUpdReq req) {
+        return this.service.updateById(id, req);
+    }
+
+    @ApiOperation(value = "시설물 장애 조치 내역 정보변경/생성-목록(TB_FCLT_FAIL_RPAR_HS)", response = TbFcltFailRparHsDto.class, responseContainer = "ArrayList")
+    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbFcltFailRparHsDto> mergeInfoList(@RequestBody @Valid final List<TbFcltFailRparHsDto.TbFcltFailRparHsUpdReq> listReq) {
+        return this.service.mergeInfoList(listReq);
+    }
+
+    @ApiOperation(value = "시설물 장애 조치 내역 정보변경/생성-개별(TB_FCLT_FAIL_RPAR_HS)", response = TbFcltFailRparHsDto.class)
+    @PostMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbFcltFailRparHsDto mergeInfo(@PathVariable("id") TbFcltFailRparHsKey id, @RequestBody @Valid final TbFcltFailRparHsDto.TbFcltFailRparHsUpdReq req) {
+        return this.service.mergeInfo(req);
+    }
+
+    @ApiOperation(value = "시설물 장애 조치 내역 정보삭제-개별(TB_FCLT_FAIL_RPAR_HS)", response = TbFcltFailRparHsDto.class)
+    @DeleteMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbFcltFailRparHsDto deleteDataById(@PathVariable("id") TbFcltFailRparHsKey id) {
+        return this.service.deleteById(id);
+    }
+
+    @ApiOperation(value = "시설물 장애 조치 내역 정보삭제-목록(TB_FCLT_FAIL_RPAR_HS)", response = TbFcltFailRparHsDto.class, responseContainer = "ArrayList")
+    @DeleteMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbFcltFailRparHsDto> deleteDataByIds(@RequestBody @Valid final List<TbFcltFailRparHsKey> ids) {
+        return this.service.deleteByIds(ids);
+    }
+
+}

+ 150 - 0
src/main/java/com/its/api/its/model/dto/facility/TbFcltFailHsDto.java

@@ -0,0 +1,150 @@
+package com.its.api.its.model.dto.facility;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.api.its.model.entity.facility.TbFcltFailHs;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * 시설물 장애 내역 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("TbFcltFailHsDto(시설물 장애 내역)")
+public class TbFcltFailHsDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("장애 이력 일련번호")  // N VARCHAR(10)
+    @JsonProperty("fail_hs_seq")
+    private String failHsSeq;
+
+    @ApiModelProperty("발생 일시")  // Y VARCHAR(14)
+    @JsonProperty("ocrr_dt")
+    private String ocrrDt;
+
+    @ApiModelProperty("접수자 명")  // Y VARCHAR(30)
+    @JsonProperty("rcpr_nm")
+    private String rcprNm;
+
+    @ApiModelProperty("추가자 명")  // Y VARCHAR(30)
+    @JsonProperty("adtn_nm")
+    private String adtnNm;
+
+    @ApiModelProperty("추가 일시")  // Y VARCHAR(14)
+    @JsonProperty("adtn_dt")
+    private String adtnDt;
+
+    @ApiModelProperty("변경자 명")  // Y VARCHAR(30)
+    @JsonProperty("chng_nm")
+    private String chngNm;
+
+    @ApiModelProperty("변경 일시")  // Y VARCHAR(14)
+    @JsonProperty("chng_dt")
+    private String chngDt;
+
+    @ApiModelProperty("장애 유형")  // Y VARCHAR(7)
+    @JsonProperty("fail_type")
+    private String failType;
+
+    @ApiModelProperty("장애 내용")  // Y VARCHAR(600)
+    @JsonProperty("fail_cont")
+    private String failCont;
+
+    @ApiModelProperty("시설물 ID")  // Y VARCHAR(50)
+    @JsonProperty("fclt_id")
+    private String fcltId;
+
+    // Code Description Field
+    @ApiModel("TbFcltFailHsUpdReq(시설물 장애 내역 정보변경)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class TbFcltFailHsUpdReq {
+
+        @ApiModelProperty("장애 이력 일련번호, Nullable = N, VARCHAR(10)")  // N VARCHAR(10)
+        @JsonProperty("fail_hs_seq")
+        @Size(min=1, max=10)
+        private String failHsSeq;
+
+        @ApiModelProperty("발생 일시, Nullable = Y, VARCHAR(14)")  // Y VARCHAR(14)
+        @JsonProperty("ocrr_dt")
+        @Size(min=1, max=14)
+        private String ocrrDt;
+
+        @ApiModelProperty("접수자 명, Nullable = Y, VARCHAR(30)")  // Y VARCHAR(30)
+        @JsonProperty("rcpr_nm")
+        @Size(min=1, max=30)
+        private String rcprNm;
+
+        @ApiModelProperty("추가자 명, Nullable = Y, VARCHAR(30)")  // Y VARCHAR(30)
+        @JsonProperty("adtn_nm")
+        @Size(min=1, max=30)
+        private String adtnNm;
+
+        @ApiModelProperty("추가 일시, Nullable = Y, VARCHAR(14)")  // Y VARCHAR(14)
+        @JsonProperty("adtn_dt")
+        @Size(min=1, max=14)
+        private String adtnDt;
+
+        @ApiModelProperty("변경자 명, Nullable = Y, VARCHAR(30)")  // Y VARCHAR(30)
+        @JsonProperty("chng_nm")
+        @Size(min=1, max=30)
+        private String chngNm;
+
+        @ApiModelProperty("변경 일시, Nullable = Y, VARCHAR(14)")  // Y VARCHAR(14)
+        @JsonProperty("chng_dt")
+        @Size(min=1, max=14)
+        private String chngDt;
+
+        @ApiModelProperty("장애 유형, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
+        @JsonProperty("fail_type")
+        @Size(min=1, max=7)
+        private String failType;
+
+        @ApiModelProperty("장애 내용, Nullable = Y, VARCHAR(600)")  // Y VARCHAR(600)
+        @JsonProperty("fail_cont")
+        @Size(min=1, max=600)
+        private String failCont;
+
+        @ApiModelProperty("시설물 ID, Nullable = Y, VARCHAR(50)")  // Y VARCHAR(50)
+        @JsonProperty("fclt_id")
+        @Size(min=1, max=50)
+        private String fcltId;
+
+        @Builder
+        public TbFcltFailHsUpdReq(String fail_hs_seq, String ocrr_dt, String rcpr_nm, String adtn_nm, String adtn_dt, String chng_nm, String chng_dt, String fail_type, String fail_cont, String fclt_id) {
+            this.failHsSeq = fail_hs_seq;
+            this.ocrrDt = ocrr_dt;
+            this.rcprNm = rcpr_nm;
+            this.adtnNm = adtn_nm;
+            this.adtnDt = adtn_dt;
+            this.chngNm = chng_nm;
+            this.chngDt = chng_dt;
+            this.failType = fail_type;
+            this.failCont = fail_cont;
+            this.fcltId = fclt_id;
+        }
+
+        public TbFcltFailHs toEntity() {
+            return TbFcltFailHs.builder()
+                    .failHsSeq(this.failHsSeq)
+                    .ocrrDt(this.ocrrDt)
+                    .rcprNm(this.rcprNm)
+                    .adtnNm(this.adtnNm)
+                    .adtnDt(this.adtnDt)
+                    .chngNm(this.chngNm)
+                    .chngDt(this.chngDt)
+                    .failType(this.failType)
+                    .failCont(this.failCont)
+                    .fcltId(this.fcltId)
+                    .build();
+        }
+
+    }
+
+}

+ 156 - 0
src/main/java/com/its/api/its/model/dto/facility/TbFcltFailRparHsDto.java

@@ -0,0 +1,156 @@
+package com.its.api.its.model.dto.facility;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.api.its.model.entity.facility.TbFcltFailRparHs;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * 시설물 장애 조치 내역 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("TbFcltFailRparHsDto(시설물 장애 조치 내역)")
+public class TbFcltFailRparHsDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("생성 일시")  // N VARCHAR(14)
+    @JsonProperty("crtn_dt")
+    private String crtnDt;
+
+    @ApiModelProperty("장애 이력 일련번호")  // N VARCHAR(10)
+    @JsonProperty("fail_hs_seq")
+    private String failHsSeq;
+
+    @ApiModelProperty("작업자 명")  // Y VARCHAR(30)
+    @JsonProperty("wrkr_nm")
+    private String wrkrNm;
+
+    @ApiModelProperty("작업 내용")  // Y VARCHAR(600)
+    @JsonProperty("work_cont")
+    private String workCont;
+
+    @ApiModelProperty("작업 시작 일시")  // Y VARCHAR(14)
+    @JsonProperty("work_strt_dt")
+    private String workStrtDt;
+
+    @ApiModelProperty("작업 종료 일시")  // Y VARCHAR(14)
+    @JsonProperty("work_end_dt")
+    private String workEndDt;
+
+    @ApiModelProperty("작업 완료 여부")  // Y CHAR(1)
+    @JsonProperty("work_fins_yn")
+    private String workFinsYn;
+
+    @ApiModelProperty("추가자 명")  // Y VARCHAR(30)
+    @JsonProperty("adtn_nm")
+    private String adtnNm;
+
+    @ApiModelProperty("변경자 명")  // Y VARCHAR(30)
+    @JsonProperty("chng_nm")
+    private String chngNm;
+
+    @ApiModelProperty("변경 일시")  // Y VARCHAR(14)
+    @JsonProperty("chng_dt")
+    private String chngDt;
+
+    // Code Description Field
+    @ApiModelProperty("작업 완료 여부 설명")
+    @JsonProperty("work_fins_desc")    // WORK_FINS_YN
+    private String workFinsDesc;
+
+    @ApiModel("TbFcltFailRparHsUpdReq(시설물 장애 조치 내역 정보변경)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class TbFcltFailRparHsUpdReq {
+
+        @ApiModelProperty("생성 일시, Nullable = N, VARCHAR(14)")  // N VARCHAR(14)
+        @JsonProperty("crtn_dt")
+        @Size(min=1, max=14)
+        private String crtnDt;
+
+        @ApiModelProperty("장애 이력 일련번호, Nullable = N, VARCHAR(10)")  // N VARCHAR(10)
+        @JsonProperty("fail_hs_seq")
+        @Size(min=1, max=10)
+        private String failHsSeq;
+
+        @ApiModelProperty("작업자 명, Nullable = Y, VARCHAR(30)")  // Y VARCHAR(30)
+        @JsonProperty("wrkr_nm")
+        @Size(min=1, max=30)
+        private String wrkrNm;
+
+        @ApiModelProperty("작업 내용, Nullable = Y, VARCHAR(600)")  // Y VARCHAR(600)
+        @JsonProperty("work_cont")
+        @Size(min=1, max=600)
+        private String workCont;
+
+        @ApiModelProperty("작업 시작 일시, Nullable = Y, VARCHAR(14)")  // Y VARCHAR(14)
+        @JsonProperty("work_strt_dt")
+        @Size(min=1, max=14)
+        private String workStrtDt;
+
+        @ApiModelProperty("작업 종료 일시, Nullable = Y, VARCHAR(14)")  // Y VARCHAR(14)
+        @JsonProperty("work_end_dt")
+        @Size(min=1, max=14)
+        private String workEndDt;
+
+        @ApiModelProperty("작업 완료 여부, Nullable = Y, CHAR(1)")  // Y CHAR(1)
+        @JsonProperty("work_fins_yn")
+        @Size(min=1, max=1)
+        @Pattern(regexp = "[YN]")
+        private String workFinsYn;
+
+        @ApiModelProperty("추가자 명, Nullable = Y, VARCHAR(30)")  // Y VARCHAR(30)
+        @JsonProperty("adtn_nm")
+        @Size(min=1, max=30)
+        private String adtnNm;
+
+        @ApiModelProperty("변경자 명, Nullable = Y, VARCHAR(30)")  // Y VARCHAR(30)
+        @JsonProperty("chng_nm")
+        @Size(min=1, max=30)
+        private String chngNm;
+
+        @ApiModelProperty("변경 일시, Nullable = Y, VARCHAR(14)")  // Y VARCHAR(14)
+        @JsonProperty("chng_dt")
+        @Size(min=1, max=14)
+        private String chngDt;
+
+        @Builder
+        public TbFcltFailRparHsUpdReq(String crtn_dt, String fail_hs_seq, String wrkr_nm, String work_cont, String work_strt_dt, String work_end_dt, String work_fins_yn, String adtn_nm, String chng_nm, String chng_dt) {
+            this.crtnDt = crtn_dt;
+            this.failHsSeq = fail_hs_seq;
+            this.wrkrNm = wrkr_nm;
+            this.workCont = work_cont;
+            this.workStrtDt = work_strt_dt;
+            this.workEndDt = work_end_dt;
+            this.workFinsYn = work_fins_yn;
+            this.adtnNm = adtn_nm;
+            this.chngNm = chng_nm;
+            this.chngDt = chng_dt;
+        }
+
+        public TbFcltFailRparHs toEntity() {
+            return TbFcltFailRparHs.builder()
+                    .crtnDt(this.crtnDt)
+                    .failHsSeq(this.failHsSeq)
+                    .wrkrNm(this.wrkrNm)
+                    .workCont(this.workCont)
+                    .workStrtDt(this.workStrtDt)
+                    .workEndDt(this.workEndDt)
+                    .workFinsYn(this.workFinsYn)
+                    .adtnNm(this.adtnNm)
+                    .chngNm(this.chngNm)
+                    .chngDt(this.chngDt)
+                    .build();
+        }
+
+    }
+
+}

+ 99 - 0
src/main/java/com/its/api/its/model/entity/facility/TbFcltFailHs.java

@@ -0,0 +1,99 @@
+package com.its.api.its.model.entity.facility;
+
+import com.its.api.its.model.dto.facility.TbFcltFailHsDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.Serializable;
+
+/**
+ * 시설물 장애 내역 Entity Class
+ */
+@Getter
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@Builder
+@AllArgsConstructor
+@ApiModel("시설물 장애 내역")
+@Entity
+@Table(name = "TB_FCLT_FAIL_HS")
+public class TbFcltFailHs implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("장애 이력 일련번호")  // N VARCHAR(10)
+    @Id
+    @Column(name = "FAIL_HS_SEQ", nullable = false, length = 10)
+    private String failHsSeq;
+
+    @ApiModelProperty("발생 일시")  // Y VARCHAR(14)
+    @Column(name = "OCRR_DT", length = 14)
+    private String ocrrDt;
+
+    @ApiModelProperty("접수자 명")  // Y VARCHAR(30)
+    @Column(name = "RCPR_NM", length = 30)
+    private String rcprNm;
+
+    @ApiModelProperty("추가자 명")  // Y VARCHAR(30)
+    @Column(name = "ADTN_NM", length = 30)
+    private String adtnNm;
+
+    @ApiModelProperty("추가 일시")  // Y VARCHAR(14)
+    @Column(name = "ADTN_DT", length = 14)
+    private String adtnDt;
+
+    @ApiModelProperty("변경자 명")  // Y VARCHAR(30)
+    @Column(name = "CHNG_NM", length = 30)
+    private String chngNm;
+
+    @ApiModelProperty("변경 일시")  // Y VARCHAR(14)
+    @Column(name = "CHNG_DT", length = 14)
+    private String chngDt;
+
+    @ApiModelProperty("장애 유형")  // Y VARCHAR(7)
+    @Column(name = "FAIL_TYPE", length = 7)
+    private String failType;
+
+    @ApiModelProperty("장애 내용")  // Y VARCHAR(600)
+    @Column(name = "FAIL_CONT", length = 600)
+    private String failCont;
+
+    @ApiModelProperty("시설물 ID")  // Y VARCHAR(50)
+    @Column(name = "FCLT_ID", length = 50)
+    private String fcltId;
+
+    public TbFcltFailHsDto toDto() {
+        return TbFcltFailHsDto.builder()
+                .failHsSeq(this.failHsSeq)
+                .ocrrDt(this.ocrrDt)
+                .rcprNm(this.rcprNm)
+                .adtnNm(this.adtnNm)
+                .adtnDt(this.adtnDt)
+                .chngNm(this.chngNm)
+                .chngDt(this.chngDt)
+                .failType(this.failType)
+                .failCont(this.failCont)
+                .fcltId(this.fcltId)
+                .build();
+    }
+
+    public TbFcltFailHs(String failHsSeq) {
+        this.failHsSeq = failHsSeq;
+    }
+
+    public void updateInfo(TbFcltFailHsDto.TbFcltFailHsUpdReq req) {
+        this.ocrrDt = req.getOcrrDt();
+        this.rcprNm = req.getRcprNm();
+        this.adtnNm = req.getAdtnNm();
+        this.adtnDt = req.getAdtnDt();
+        this.chngNm = req.getChngNm();
+        this.chngDt = req.getChngDt();
+        this.failType = req.getFailType();
+        this.failCont = req.getFailCont();
+        this.fcltId = req.getFcltId();
+    }
+
+}

+ 98 - 0
src/main/java/com/its/api/its/model/entity/facility/TbFcltFailRparHs.java

@@ -0,0 +1,98 @@
+package com.its.api.its.model.entity.facility;
+
+import com.its.api.its.model.dto.facility.TbFcltFailRparHsDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * 시설물 장애 조치 내역 Entity Class
+ */
+@Getter
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@Builder
+@AllArgsConstructor
+@ApiModel("시설물 장애 조치 내역")
+@Entity
+@Table(name = "TB_FCLT_FAIL_RPAR_HS")
+@IdClass(TbFcltFailRparHsKey.class)
+public class TbFcltFailRparHs implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("생성 일시")  // N VARCHAR(14)
+    @Id
+    @Column(name = "CRTN_DT", nullable = false, length = 14)
+    private String crtnDt;
+
+    @ApiModelProperty("장애 이력 일련번호")  // N VARCHAR(10)
+    @Id
+    @Column(name = "FAIL_HS_SEQ", nullable = false, length = 10)
+    private String failHsSeq;
+
+    @ApiModelProperty("작업자 명")  // Y VARCHAR(30)
+    @Column(name = "WRKR_NM", length = 30)
+    private String wrkrNm;
+
+    @ApiModelProperty("작업 내용")  // Y VARCHAR(600)
+    @Column(name = "WORK_CONT", length = 600)
+    private String workCont;
+
+    @ApiModelProperty("작업 시작 일시")  // Y VARCHAR(14)
+    @Column(name = "WORK_STRT_DT", length = 14)
+    private String workStrtDt;
+
+    @ApiModelProperty("작업 종료 일시")  // Y VARCHAR(14)
+    @Column(name = "WORK_END_DT", length = 14)
+    private String workEndDt;
+
+    @ApiModelProperty("작업 완료 여부")  // Y CHAR(1)
+    @Column(name = "WORK_FINS_YN", columnDefinition = "CHAR", length = 1)
+    private String workFinsYn;
+
+    @ApiModelProperty("추가자 명")  // Y VARCHAR(30)
+    @Column(name = "ADTN_NM", length = 30)
+    private String adtnNm;
+
+    @ApiModelProperty("변경자 명")  // Y VARCHAR(30)
+    @Column(name = "CHNG_NM", length = 30)
+    private String chngNm;
+
+    @ApiModelProperty("변경 일시")  // Y VARCHAR(14)
+    @Column(name = "CHNG_DT", length = 14)
+    private String chngDt;
+
+    public TbFcltFailRparHsDto toDto() {
+        return TbFcltFailRparHsDto.builder()
+                .crtnDt(this.crtnDt)
+                .failHsSeq(this.failHsSeq)
+                .wrkrNm(this.wrkrNm)
+                .workCont(this.workCont)
+                .workStrtDt(this.workStrtDt)
+                .workEndDt(this.workEndDt)
+                .workFinsYn(this.workFinsYn)
+                .adtnNm(this.adtnNm)
+                .chngNm(this.chngNm)
+                .chngDt(this.chngDt)
+                .build();
+    }
+
+    public TbFcltFailRparHs(String crtnDt, String failHsSeq) {
+        this.crtnDt = crtnDt;
+        this.failHsSeq = failHsSeq;
+    }
+
+    public void updateInfo(TbFcltFailRparHsDto.TbFcltFailRparHsUpdReq req) {
+        this.wrkrNm = req.getWrkrNm();
+        this.workCont = req.getWorkCont();
+        this.workStrtDt = req.getWorkStrtDt();
+        this.workEndDt = req.getWorkEndDt();
+        this.workFinsYn = req.getWorkFinsYn();
+        this.adtnNm = req.getAdtnNm();
+        this.chngNm = req.getChngNm();
+        this.chngDt = req.getChngDt();
+    }
+
+}

+ 25 - 0
src/main/java/com/its/api/its/model/entity/facility/TbFcltFailRparHsKey.java

@@ -0,0 +1,25 @@
+package com.its.api.its.model.entity.facility;
+
+import lombok.Data;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import lombok.AllArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 시설물 장애 조치 내역 Key Class
+ */
+@Data
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class TbFcltFailRparHsKey implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    // CRTN_DT, 생성 일시  // N VARCHAR(14)
+    private String crtnDt;
+
+    // FAIL_HS_SEQ, 장애 이력 일련번호  // N VARCHAR(10)
+    private String failHsSeq;
+
+}

+ 1 - 3
src/main/java/com/its/api/its/model/entity/facility/TbFcltInfr.java

@@ -118,7 +118,7 @@ public class TbFcltInfr implements Serializable {
     private String rfidId;
 
     public TbFcltInfrDto toDto() {
-        TbFcltInfrDto dto = TbFcltInfrDto.builder()
+        return TbFcltInfrDto.builder()
                 .fcltId(this.fcltId)
                 .fcltType(this.fcltType)
                 .fcltLctn(this.fcltLctn)
@@ -143,8 +143,6 @@ public class TbFcltInfr implements Serializable {
                 .mnfcCmpyId(this.mnfcCmpyId)
                 .rfidId(this.rfidId)
                 .build();
-
-        return dto;
     }
 
     public TbFcltInfr(String fcltId) {

+ 21 - 0
src/main/java/com/its/api/its/repository/facility/TbFcltFailHsRepository.java

@@ -0,0 +1,21 @@
+package com.its.api.its.repository.facility;
+
+import com.its.api.its.model.entity.facility.TbFcltFailHs;
+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 TbFcltFailHsRepository extends JpaRepository<TbFcltFailHs, String>, JpaSpecificationExecutor<TbFcltFailHs> {
+
+    @Query("select p from TbFcltFailHs p where p.fcltId = :fcltId")
+    List<TbFcltFailHs> findAllFailList(String fcltId);
+
+    @Query(value = "SELECT TO_NUMBER(LPAD(NVL(MAX(SUBSTR(FAIL_HS_SEQ, -4)), '0000') + 1, 4, '0')) AS NEWID " +
+                   "  FROM TB_FCLT_FAIL_HS                                                                 " +
+                   " WHERE SUBSTR(FAIL_HS_SEQ, 1, 6) = '202203'", nativeQuery = true)
+    Integer findNewHsSeq(String currYear);
+}

+ 17 - 0
src/main/java/com/its/api/its/repository/facility/TbFcltFailRparHsRepository.java

@@ -0,0 +1,17 @@
+package com.its.api.its.repository.facility;
+
+import com.its.api.its.model.entity.facility.TbFcltFailRparHs;
+import com.its.api.its.model.entity.facility.TbFcltFailRparHsKey;
+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 TbFcltFailRparHsRepository extends JpaRepository<TbFcltFailRparHs, TbFcltFailRparHsKey>, JpaSpecificationExecutor<TbFcltFailRparHs> {
+
+    @Query("select p from TbFcltFailRparHs p where p.failHsSeq = :failHsSeq")
+    List<TbFcltFailRparHs> findAllFailHsList(String failHsSeq);
+}

+ 126 - 0
src/main/java/com/its/api/its/service/facility/TbFcltFailHsService.java

@@ -0,0 +1,126 @@
+package com.its.api.its.service.facility;
+
+import com.its.api.its.model.dto.facility.TbFcltFailHsDto;
+import com.its.api.its.model.entity.facility.TbFcltFailHs;
+import com.its.api.its.repository.facility.TbFcltFailHsRepository;
+import com.its.api.utils.ItsUtils;
+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 TbFcltFailHsService {
+
+    private final TbFcltFailHsRepository repo;
+
+    // 데이터 1건 조회, 없으면 exception
+    private TbFcltFailHs requireOne(String id) {
+        return this.repo.findById(id)
+                .orElseThrow(() -> new NoSuchElementException("데이터가 존재하지 않습니다: " + id));
+    }
+
+    // 전체 데이터 조회
+    @Transactional(readOnly = true)
+    public List<TbFcltFailHsDto> findAll() {
+        List<TbFcltFailHsDto> result = new ArrayList<>();
+        List<TbFcltFailHs> data = this.repo.findAll();
+        for (TbFcltFailHs entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
+    @Transactional(readOnly = true)
+    public TbFcltFailHsDto findById(String id) {
+        TbFcltFailHs entity = requireOne(id);
+        return entity.toDto();
+    }
+
+    // 데이터 변경
+    @Transactional
+    public TbFcltFailHsDto updateById(String id, TbFcltFailHsDto.TbFcltFailHsUpdReq req) {
+        TbFcltFailHs entity = requireOne(id);
+        entity.updateInfo(req);
+        this.repo.save(entity);
+        return entity.toDto();
+    }
+
+    // 데이터 변경 또는 생성-목록(데이터가 존재하면 업데이트 없으면 신규로 생성)
+    @Transactional
+    public List<TbFcltFailHsDto> mergeInfoList(List<TbFcltFailHsDto.TbFcltFailHsUpdReq> reqList) {
+        List<TbFcltFailHsDto> result = new ArrayList<>();
+        for (TbFcltFailHsDto.TbFcltFailHsUpdReq req : reqList) {
+            TbFcltFailHs obj = req.toEntity();
+            this.repo.save(obj);
+            result.add(obj.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
+    @Transactional
+    public TbFcltFailHsDto mergeInfo(TbFcltFailHsDto.TbFcltFailHsUpdReq req) {
+        TbFcltFailHs obj = req.toEntity();
+        this.repo.save(obj);
+        return obj.toDto();
+    }
+
+    // 정보 삭제-개별, 데이터 존재하지 않으면 Exception
+    @Transactional
+    public TbFcltFailHsDto deleteById(String id) {
+        TbFcltFailHs entity = requireOne(id);
+        this.repo.deleteById(id);
+        return entity.toDto();
+    }
+
+    // 정보 삭제-목록, 존재하는 데이터 만 삭제
+    @Transactional
+    public List<TbFcltFailHsDto> deleteByIds(List<String> ids) {
+        List<TbFcltFailHsDto> result = new ArrayList<>();
+        for (String id : ids) {
+            Optional<TbFcltFailHs> obj = this.repo.findById(id);
+            if (obj.isPresent()) {
+                this.repo.deleteById(id);
+                result.add(obj.get().toDto());
+            }
+        }
+        return result;
+    }
+
+    /**
+     * 시설물 ID에 해당하는 장애 내용 목록을 조회
+     * @param fcltId
+     * @return
+     */
+    @Transactional(readOnly = true)
+    public List<TbFcltFailHsDto> findAllFailList(String fcltId) {
+
+        List<TbFcltFailHsDto> result = new ArrayList<>();
+        List<TbFcltFailHs> data = this.repo.findAllFailList(fcltId);
+        data.forEach(obj -> {
+            result.add(obj.toDto());
+        });
+        return result;
+    }
+
+    /**
+     * 시설물 장애이력 신규 ID 조회
+     * @param
+     * @return
+     */
+    @Transactional(readOnly = true)
+    public String findNewHsSeq() {
+        String currYear = ItsUtils.getSysTime("yyyyMM");
+        Integer newId =  this.repo.findNewHsSeq(currYear);
+        return String.format("%s%04d", currYear, newId);
+    }
+}

+ 114 - 0
src/main/java/com/its/api/its/service/facility/TbFcltFailRparHsService.java

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