Procházet zdrojové kódy

history api example add

shjung před 3 roky
rodič
revize
e8d14893b0
18 změnil soubory, kde provedl 708 přidání a 212 odebrání
  1. 65 0
      src/main/java/com/its/api/op/controller/database/TbUnitSystController.java
  2. 45 0
      src/main/java/com/its/api/op/controller/history/TbUnitSystSttsHsController.java
  3. 6 1
      src/main/java/com/its/api/op/controller/history/TbUserCnncHsController.java
  4. 0 53
      src/main/java/com/its/api/op/controller/history/UnitSystSttsHsController.java
  5. 171 0
      src/main/java/com/its/api/op/model/dto/database/TbUnitSystDto.java
  6. 56 0
      src/main/java/com/its/api/op/model/dto/history/TbUnitSystSttsHsDto.java
  7. 0 60
      src/main/java/com/its/api/op/model/dto/history/UnitSystSttsHsDto.java
  8. 108 0
      src/main/java/com/its/api/op/model/entity/database/TbUnitSyst.java
  9. 53 0
      src/main/java/com/its/api/op/model/entity/history/TbUnitSystSttsHs.java
  10. 25 0
      src/main/java/com/its/api/op/model/entity/history/TbUnitSystSttsHsKey.java
  11. 0 32
      src/main/java/com/its/api/op/model/entity/history/UnitSystSttsHs.java
  12. 0 21
      src/main/java/com/its/api/op/model/entity/history/UnitSystSttsHsKey.java
  13. 11 0
      src/main/java/com/its/api/op/repository/database/TbUnitSystRepository.java
  14. 17 0
      src/main/java/com/its/api/op/repository/history/TbUnitSystSttsHsRepository.java
  15. 0 16
      src/main/java/com/its/api/op/repository/history/UnitSystSttsHsRepository.java
  16. 101 0
      src/main/java/com/its/api/op/service/database/TbUnitSystService.java
  17. 50 0
      src/main/java/com/its/api/op/service/history/TbUnitSystSttsHsService.java
  18. 0 29
      src/main/java/com/its/api/op/service/history/UnitSystSttsHsService.java

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

@@ -0,0 +1,65 @@
+package com.its.api.op.controller.database;
+
+import com.its.api.op.model.dto.database.TbUnitSystDto;
+import com.its.api.op.service.database.TbUnitSystService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+@Api(tags = "단위 시스템")
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/tb_unit_syst")
+public class TbUnitSystController {
+
+    private final TbUnitSystService service;
+
+    @ApiOperation(value = "단위 시스템 전체조회(TB_UNIT_SYST)", response = TbUnitSystDto.class)
+    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbUnitSystDto> findAll() {
+        return service.findAll();
+    }
+
+    @ApiOperation(value = "단위 시스템 개별조회(TB_UNIT_SYST)", response = TbUnitSystDto.class)
+    @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbUnitSystDto findById(@PathVariable final String id) {
+        return this.service.findById(id);
+    }
+
+    @ApiOperation(value = "단위 시스템 정보변경(TB_UNIT_SYST)", response = TbUnitSystDto.class)
+    @PutMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbUnitSystDto updateById(@PathVariable final String id, @RequestBody @Valid final TbUnitSystDto.TbUnitSystUpdReq req) {
+        return this.service.updateById(id, req);
+    }
+
+    @ApiOperation(value = "단위 시스템 정보변경/생성-목록(TB_UNIT_SYST)", response = TbUnitSystDto.class)
+    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbUnitSystDto> mergeInfoList(@RequestBody @Valid final List<TbUnitSystDto.TbUnitSystUpdReq> listReq) {
+        return this.service.mergeInfoList(listReq);
+    }
+
+    @ApiOperation(value = "단위 시스템 정보변경/생성-개별(TB_UNIT_SYST)", response = TbUnitSystDto.class)
+    @PostMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbUnitSystDto mergeInfo(@PathVariable("id") String id, @RequestBody @Valid final TbUnitSystDto.TbUnitSystUpdReq req) {
+        return this.service.mergeInfo(req);
+    }
+
+    @ApiOperation(value = "단위 시스템 정보삭제-개별(TB_UNIT_SYST)", response = TbUnitSystDto.class)
+    @DeleteMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbUnitSystDto deleteDataById(@PathVariable("id") String id) {
+        return this.service.deleteById(id);
+    }
+
+    @ApiOperation(value = "단위 시스템 정보삭제-목록(TB_UNIT_SYST)", response = TbUnitSystDto.class)
+    @DeleteMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbUnitSystDto> deleteDataByIds(@RequestBody @Valid final List<String> ids) {
+        return this.service.deleteByIds(ids);
+    }
+
+}

+ 45 - 0
src/main/java/com/its/api/op/controller/history/TbUnitSystSttsHsController.java

@@ -0,0 +1,45 @@
+package com.its.api.op.controller.history;
+
+import com.its.api.op.model.dto.database.TbUnitSystDto;
+import com.its.api.op.model.dto.history.TbUnitSystSttsHsDto;
+import com.its.api.op.service.database.TbUnitSystService;
+import com.its.api.op.service.history.TbUnitSystSttsHsService;
+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.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@Api(tags = "02.이력조회-1.프로세스상태이력")
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/history/unit-syst-stts-hs")
+public class TbUnitSystSttsHsController {
+
+    private final TbUnitSystSttsHsService service;
+    private final TbUnitSystService unitService;
+
+    @ApiOperation(value = "프로세스목록조회(TB_UNIT_SYST)", response = TbUnitSystDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/type", produces = {"application/json; charset=utf8"})
+    public List<TbUnitSystDto> findProcessAll() {
+        return this.unitService.findProcessAll();
+    }
+
+    @ApiOperation(value = "이력조회(TB_UNIT_SYST_STTS_HS, TB_UNIT_SYST)", response = TbUnitSystSttsHsDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbUnitSystSttsHsDto> findAll(
+            @ApiParam(name = "SYST_ID", value = "시스템 ID(syst_id)", example = "UTP01", required = true)
+            @RequestParam String SYST_ID,
+            @ApiParam(name = "CRTN_DT", value = "이력조회일자(YYYYMMDD)", example = "20220125", required = true)
+            @RequestParam String CRTN_DT) {
+        return service.findAllByDateRange(SYST_ID, CRTN_DT);
+    }
+
+}

+ 6 - 1
src/main/java/com/its/api/op/controller/history/TbUserCnncHsController.java

@@ -4,6 +4,7 @@ import com.its.api.op.model.dto.history.TbUserCnncHsDto;
 import com.its.api.op.service.history.TbUserCnncHsService;
 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.GetMapping;
@@ -24,7 +25,11 @@ public class TbUserCnncHsController {
 
     @ApiOperation(value = "사용자접속이력 전체조회(TB_USERCNNC_HS)", response = TbUserCnncHsDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<TbUserCnncHsDto> findAllByDateRange(@RequestParam String FROM_DT, @RequestParam String TO_DT) {
+    public List<TbUserCnncHsDto> findAllByDateRange(
+            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24MI00)", example = "20220119135000", required = true)
+            @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24MI59)", example = "20220208122859", required = true)
+            @RequestParam String TO_DT) {
         return service.findAllByDateRange(FROM_DT, TO_DT);
     }
 

+ 0 - 53
src/main/java/com/its/api/op/controller/history/UnitSystSttsHsController.java

@@ -1,53 +0,0 @@
-package com.its.api.op.controller.history;
-
-import com.its.api.op.model.dto.database.UnitSystDto;
-import com.its.api.op.model.dto.history.UnitSystSttsHsDto;
-import com.its.api.op.model.entity.database.UnitSyst;
-import com.its.api.op.service.database.UnitSystService;
-import com.its.api.op.model.entity.history.UnitSystSttsHs;
-import com.its.api.op.service.history.UnitSystSttsHsService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-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 java.util.ArrayList;
-import java.util.List;
-
-@Slf4j
-@RequiredArgsConstructor
-@RestController
-@RequestMapping("/api/history/unit-syst-stts-hs")
-@Api(tags = "02.이력조회-1.프로세스상태이력")
-public class UnitSystSttsHsController {
-
-    private final UnitSystSttsHsService service;
-    private final UnitSystService unitService;
-
-    @ApiOperation(value = "이력조회(TB_UNIT_SYST_STTS_HS, TB_UNIT_SYST)", response = UnitSystSttsHsDto.UnitSystSttsHsInfo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<List<UnitSystSttsHsDto.UnitSystSttsHsInfo>> findAllByDateRange(@RequestParam String SYST_ID, @RequestParam String CRTN_DT) {
-        List<UnitSystSttsHs> result = this.service.findAllByDateRange(SYST_ID, CRTN_DT+"000000", CRTN_DT+"235959");
-        return new ResponseEntity<>(UnitSystSttsHsDto.makeUnitSystSttsHsInfo(SYST_ID, result), HttpStatus.OK);
-    }
-
-    @ApiOperation(value = "프로세스목록조회(TB_UNIT_SYST)", response = UnitSystDto.UnitSystInfo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/type", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<List<UnitSystDto.UnitSystInfo>> findProcess() {
-        List<UnitSyst> data = this.unitService.findAll();
-        List<UnitSystDto.UnitSystInfo> result = new ArrayList<>();
-        for (UnitSyst obj: data) {
-            if (obj.getDEL_YN().equals("N") && obj.getSTTS_DSPL_YN().equals("Y")) {
-                result.add(new UnitSystDto.UnitSystInfo(obj));
-            }
-        }
-        return new ResponseEntity<>(result, HttpStatus.OK);
-    }
-
-}

+ 171 - 0
src/main/java/com/its/api/op/model/dto/database/TbUnitSystDto.java

@@ -0,0 +1,171 @@
+package com.its.api.op.model.dto.database;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.api.op.model.entity.database.TbUnitSyst;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Positive;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * 단위 시스템 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("TbUnitSystDto(단위 시스템)")
+public class TbUnitSystDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("시스템 ID")  // N VARCHAR(30)
+    @JsonProperty("syst_id")
+    private String systId;
+
+    @ApiModelProperty("시스템 유형")  // Y VARCHAR(7)
+    @JsonProperty("syst_type")
+    private String systType;
+
+    @ApiModelProperty("시스템 번호")  // Y NUMBER(3)
+    @JsonProperty("syst_nmbr")
+    private Short systNmbr;
+
+    @ApiModelProperty("시스템 명")  // Y VARCHAR(100)
+    @JsonProperty("syst_nm")
+    private String systNm;
+
+    @ApiModelProperty("시스템 IP_1")  // Y VARCHAR(20)
+    @JsonProperty("syst_ip_1")
+    private String systIp1;
+
+    @ApiModelProperty("시스템 IP_2")  // Y VARCHAR(20)
+    @JsonProperty("syst_ip_2")
+    private String systIp2;
+
+    @ApiModelProperty("프로그램 포트")  // Y VARCHAR(5)
+    @JsonProperty("prgm_port")
+    private String prgmPort;
+
+    @ApiModelProperty("호스트 명")  // Y VARCHAR(100)
+    @JsonProperty("host_nm")
+    private String hostNm;
+
+    @ApiModelProperty("운영체제 명")  // Y VARCHAR(100)
+    @JsonProperty("os_nm")
+    private String osNm;
+
+    @ApiModelProperty("삭제 여부")  // Y CHAR(1)
+    @JsonProperty("del_yn")
+    private String delYn;
+
+    @ApiModelProperty("상태 표출 여부")  // Y CHAR(1)
+    @JsonProperty("stts_dspl_yn")
+    private String sttsDsplYn;
+
+    // Code Description Field
+    @ApiModelProperty("시스템 설명")  // N VARCHAR(30)
+    @JsonProperty("syst_desc")
+    private String systDesc;
+
+    @ApiModel("TbUnitSystUpdReq(단위 시스템 정보변경)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class TbUnitSystUpdReq {
+
+        @ApiModelProperty("시스템 ID, Nullable = N, VARCHAR(30)")  // N VARCHAR(30)
+        @JsonProperty("syst_id")
+        @Size(min=1, max=30)
+        private String systId;
+
+        @ApiModelProperty("시스템 유형, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
+        @JsonProperty("syst_type")
+        @Size(min=1, max=7)
+        private String systType;
+
+        @ApiModelProperty("시스템 번호, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("syst_nmbr")
+        @Positive
+        private Short systNmbr;
+
+        @ApiModelProperty("시스템 명, Nullable = Y, VARCHAR(100)")  // Y VARCHAR(100)
+        @JsonProperty("syst_nm")
+        @Size(min=1, max=100)
+        private String systNm;
+
+        @ApiModelProperty("시스템 IP_1, Nullable = Y, VARCHAR(20)")  // Y VARCHAR(20)
+        @JsonProperty("syst_ip_1")
+        @Size(min=1, max=20)
+        private String systIp1;
+
+        @ApiModelProperty("시스템 IP_2, Nullable = Y, VARCHAR(20)")  // Y VARCHAR(20)
+        @JsonProperty("syst_ip_2")
+        @Size(min=1, max=20)
+        private String systIp2;
+
+        @ApiModelProperty("프로그램 포트, Nullable = Y, VARCHAR(5)")  // Y VARCHAR(5)
+        @JsonProperty("prgm_port")
+        @Size(min=1, max=5)
+        private String prgmPort;
+
+        @ApiModelProperty("호스트 명, Nullable = Y, VARCHAR(100)")  // Y VARCHAR(100)
+        @JsonProperty("host_nm")
+        @Size(min=1, max=100)
+        private String hostNm;
+
+        @ApiModelProperty("운영체제 명, Nullable = Y, VARCHAR(100)")  // Y VARCHAR(100)
+        @JsonProperty("os_nm")
+        @Size(min=1, max=100)
+        private String osNm;
+
+        @ApiModelProperty("삭제 여부, Nullable = Y, CHAR(1)")  // Y CHAR(1)
+        @JsonProperty("del_yn")
+        @Size(min=1, max=1)
+        @Pattern(regexp = "[YN]")
+        private String delYn;
+
+        @ApiModelProperty("상태 표출 여부, Nullable = Y, CHAR(1)")  // Y CHAR(1)
+        @JsonProperty("stts_dspl_yn")
+        @Size(min=1, max=1)
+        @Pattern(regexp = "[YN]")
+        private String sttsDsplYn;
+
+        @Builder
+        public TbUnitSystUpdReq(String syst_id, String syst_type, Short syst_nmbr, String syst_nm, String syst_ip_1, String syst_ip_2, String prgm_port, String host_nm, String os_nm, String del_yn, String stts_dspl_yn) {
+            this.systId = syst_id;
+            this.systType = syst_type;
+            this.systNmbr = syst_nmbr;
+            this.systNm = syst_nm;
+            this.systIp1 = syst_ip_1;
+            this.systIp2 = syst_ip_2;
+            this.prgmPort = prgm_port;
+            this.hostNm = host_nm;
+            this.osNm = os_nm;
+            this.delYn = del_yn;
+            this.sttsDsplYn = stts_dspl_yn;
+        }
+
+        public TbUnitSyst toEntity() {
+            TbUnitSyst entity = TbUnitSyst.builder()
+                    .systId(this.systId)
+                    .systType(this.systType)
+                    .systNmbr(this.systNmbr)
+                    .systNm(this.systNm)
+                    .systIp1(this.systIp1)
+                    .systIp2(this.systIp2)
+                    .prgmPort(this.prgmPort)
+                    .hostNm(this.hostNm)
+                    .osNm(this.osNm)
+                    .delYn(this.delYn)
+                    .sttsDsplYn(this.sttsDsplYn)
+                    .build();
+
+            return entity;
+        }
+
+    }
+
+}

+ 56 - 0
src/main/java/com/its/api/op/model/dto/history/TbUnitSystSttsHsDto.java

@@ -0,0 +1,56 @@
+package com.its.api.op.model.dto.history;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 단위 시스템 상태 이력 DTO Class
+ */
+@Data
+@NoArgsConstructor
+@Builder
+@AllArgsConstructor
+@ApiModel("TbUnitSystSttsHsDto(단위 시스템 상태 이력)")
+public class TbUnitSystSttsHsDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("시간 인덱스(1~288)")  // N VARCHAR(30)
+    @JsonProperty("crtn_idx")
+    private Integer crtnIdx;
+
+    @ApiModelProperty("시분(HH24MI)")  // N VARCHAR(30)
+    @JsonProperty("hhmm")
+    private String hhmm;
+
+    @ApiModelProperty("시스템 ID")  // N VARCHAR(30)
+    @JsonProperty("syst_id")
+    private String systId;
+
+    @ApiModelProperty("생성 일시")  // N VARCHAR(14)
+    @JsonProperty("crtn_dt")
+    private String crtnDt;
+
+    @ApiModelProperty("시스템 상태 코드")  // Y VARCHAR(7)
+    @JsonProperty("syst_stts_cd")
+    private String systSttsCd;
+
+    @ApiModelProperty("시스템 상태 코드 설명")
+    @JsonProperty("syst_stts_desc")    // SYST_STTS_CD
+    private String systSttsDesc;
+
+    public TbUnitSystSttsHsDto(int crtnIdx, String hhmm, String systId) {
+        this.crtnIdx = crtnIdx;
+        this.hhmm = hhmm;
+        this.systId = systId;
+        this.systSttsCd = "";
+        this.systSttsDesc = "-";
+    }
+
+}

+ 0 - 60
src/main/java/com/its/api/op/model/dto/history/UnitSystSttsHsDto.java

@@ -1,60 +0,0 @@
-package com.its.api.op.model.dto.history;
-
-import com.its.api.op.global.CodeManager;
-import com.its.api.op.model.entity.history.UnitSystSttsHs;
-import lombok.Getter;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-public class UnitSystSttsHsDto implements Serializable {
-
-    @Getter
-    public static class UnitSystSttsHsInfo {
-        private final Integer CRTN_IDX;
-        private final String  HHMM;
-        private final String  SYST_ID;          //	N	VARCHAR2(30)	N			시스템 ID
-        private String  CRTN_DT;                //	N	VARCHAR2(14)	N			생성 일시
-        private String  SYST_STTS_CD;           //	N	VARCHAR2(7)	    Y			시스템 상태 코드
-        private String  SYST_STTS_DESC;
-
-        public UnitSystSttsHsInfo(int idx, String HHMM, String SYST_ID) {
-            this.CRTN_IDX = idx;
-            this.HHMM = HHMM;
-            this.SYST_ID = SYST_ID;
-            this.SYST_STTS_CD = "";
-            this.SYST_STTS_DESC = "-";
-        }
-        public void setSYST_STTS_CD(String SYST_STTS_CD) {
-            this.SYST_STTS_CD = SYST_STTS_CD;
-            this.SYST_STTS_DESC = CodeManager.getCodeDesc(CodeManager.SYST_STTS_CD, this.SYST_STTS_CD);
-        }
-    }
-
-    public static List<UnitSystSttsHsInfo> makeUnitSystSttsHsInfo(String SYST_ID, List<UnitSystSttsHs> lists) {
-
-        List<UnitSystSttsHsInfo> result = new ArrayList<>();
-        int idx = 1;
-        for (int ii = 0; ii < 24; ii++) {
-            for (int jj = 0; jj < 12; jj++) {
-                String HHMM = String.format("%02d:%02d", ii, jj*5);
-                UnitSystSttsHsInfo info = new UnitSystSttsHsInfo(idx++, HHMM, SYST_ID);
-                result.add(info);
-            }
-        }
-
-        for (UnitSystSttsHs obj : lists) {
-            try {
-                String HH = obj.getCRTN_DT().substring(8, 10);
-                String MI = obj.getCRTN_DT().substring(10, 12);
-                int crtnIdx = ((Integer.parseInt(HH) * 60 + Integer.parseInt(MI)) / 5);
-                result.get(crtnIdx).CRTN_DT = obj.getCRTN_DT();
-                result.get(crtnIdx).setSYST_STTS_CD(obj.getSYST_STTS_CD());
-            }
-            catch (Exception e) {}
-        }
-
-        return result;
-    }
-}

+ 108 - 0
src/main/java/com/its/api/op/model/entity/database/TbUnitSyst.java

@@ -0,0 +1,108 @@
+package com.its.api.op.model.entity.database;
+
+import com.its.api.op.model.dto.database.TbUnitSystDto;
+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_UNIT_SYST")
+public class TbUnitSyst implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("시스템 ID")  // N VARCHAR(30)
+    @Id
+    @Column(name = "SYST_ID", nullable = false, length = 30)
+    private String systId;
+
+    @ApiModelProperty("시스템 유형")  // Y VARCHAR(7)
+    @Column(name = "SYST_TYPE", length = 7)
+    private String systType;
+
+    @ApiModelProperty("시스템 번호")  // Y NUMBER(3)
+    @Column(name = "SYST_NMBR", columnDefinition = "NUMBER", length = 3)
+    private Short systNmbr;
+
+    @ApiModelProperty("시스템 명")  // Y VARCHAR(100)
+    @Column(name = "SYST_NM", length = 100)
+    private String systNm;
+
+    @ApiModelProperty("시스템 IP_1")  // Y VARCHAR(20)
+    @Column(name = "SYST_IP_1", length = 20)
+    private String systIp1;
+
+    @ApiModelProperty("시스템 IP_2")  // Y VARCHAR(20)
+    @Column(name = "SYST_IP_2", length = 20)
+    private String systIp2;
+
+    @ApiModelProperty("프로그램 포트")  // Y VARCHAR(5)
+    @Column(name = "PRGM_PORT", length = 5)
+    private String prgmPort;
+
+    @ApiModelProperty("호스트 명")  // Y VARCHAR(100)
+    @Column(name = "HOST_NM", length = 100)
+    private String hostNm;
+
+    @ApiModelProperty("운영체제 명")  // Y VARCHAR(100)
+    @Column(name = "OS_NM", length = 100)
+    private String osNm;
+
+    @ApiModelProperty("삭제 여부")  // Y CHAR(1)
+    @Column(name = "DEL_YN", columnDefinition = "CHAR", length = 1)
+    private String delYn;
+
+    @ApiModelProperty("상태 표출 여부")  // Y CHAR(1)
+    @Column(name = "STTS_DSPL_YN", columnDefinition = "CHAR", length = 1)
+    private String sttsDsplYn;
+
+    public TbUnitSystDto toDto() {
+        TbUnitSystDto dto = TbUnitSystDto.builder()
+                .systId(this.systId)
+                .systType(this.systType)
+                .systNmbr(this.systNmbr)
+                .systNm(this.systNm)
+                .systIp1(this.systIp1)
+                .systIp2(this.systIp2)
+                .prgmPort(this.prgmPort)
+                .hostNm(this.hostNm)
+                .osNm(this.osNm)
+                .delYn(this.delYn)
+                .sttsDsplYn(this.sttsDsplYn)
+                .build();
+
+        dto.setSystDesc("[" + this.systId + "] " +  this.systNm);
+        return dto;
+    }
+
+    public TbUnitSyst(String systId) {
+        this.systId = systId;
+    }
+
+    public void updateInfo(TbUnitSystDto.TbUnitSystUpdReq req) {
+        this.systType = req.getSystType();
+        this.systNmbr = req.getSystNmbr();
+        this.systNm = req.getSystNm();
+        this.systIp1 = req.getSystIp1();
+        this.systIp2 = req.getSystIp2();
+        this.prgmPort = req.getPrgmPort();
+        this.hostNm = req.getHostNm();
+        this.osNm = req.getOsNm();
+        this.delYn = req.getDelYn();
+        this.sttsDsplYn = req.getSttsDsplYn();
+    }
+
+}

+ 53 - 0
src/main/java/com/its/api/op/model/entity/history/TbUnitSystSttsHs.java

@@ -0,0 +1,53 @@
+package com.its.api.op.model.entity.history;
+
+import com.its.api.op.model.dto.history.TbUnitSystSttsHsDto;
+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_UNIT_SYST_STTS_HS")
+@IdClass(TbUnitSystSttsHsKey.class)
+public class TbUnitSystSttsHs implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("시스템 ID")  // N VARCHAR(30)
+    @Id
+    @Column(name = "SYST_ID", nullable = false, length = 30)
+    private String systId;
+
+    @ApiModelProperty("생성 일시")  // N VARCHAR(14)
+    @Id
+    @Column(name = "CRTN_DT", nullable = false, length = 14)
+    private String crtnDt;
+
+    @ApiModelProperty("시스템 상태 코드")  // Y VARCHAR(7)
+    @Column(name = "SYST_STTS_CD", length = 7)
+    private String systSttsCd;
+
+    @ApiModelProperty("비고")  // Y VARCHAR(100)
+    @Column(name = "RMRK", length = 100)
+    private String rmrk;
+
+    public TbUnitSystSttsHsDto toDto() {
+        TbUnitSystSttsHsDto dto = TbUnitSystSttsHsDto.builder()
+                .systId(this.systId)
+                .crtnDt(this.crtnDt)
+                .systSttsCd(this.systSttsCd)
+                .build();
+
+        return dto;
+    }
+
+}

+ 25 - 0
src/main/java/com/its/api/op/model/entity/history/TbUnitSystSttsHsKey.java

@@ -0,0 +1,25 @@
+package com.its.api.op.model.entity.history;
+
+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 TbUnitSystSttsHsKey implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    // SYST_ID, 시스템 ID  // N VARCHAR(30)
+    private String systId;
+
+    // CRTN_DT, 생성 일시  // N VARCHAR(14)
+    private String crtnDt;
+
+}

+ 0 - 32
src/main/java/com/its/api/op/model/entity/history/UnitSystSttsHs.java

@@ -1,32 +0,0 @@
-package com.its.api.op.model.entity.history;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import org.hibernate.annotations.DynamicInsert;
-import org.hibernate.annotations.DynamicUpdate;
-
-import javax.persistence.*;
-
-@DynamicInsert
-@DynamicUpdate
-@Getter
-@NoArgsConstructor
-@Builder
-@AllArgsConstructor
-@Entity
-@Table(name = "TB_UNIT_SYST_STTS_HS")
-@IdClass(UnitSystSttsHsKey.class)
-public class UnitSystSttsHs {
-
-    @Id
-    @Column(nullable = false, length = 30)
-    private String SYST_ID;         //	N	VARCHAR2(30)	N			시스템 ID
-    @Id
-    @Column(nullable = false, length = 14)
-    private String CRTN_DT;         //	N	VARCHAR2(14)	N			생성 일시
-
-    @Column(length = 7)
-    private String SYST_STTS_CD;    //	N	VARCHAR2(7)	    Y			시스템 상태 코드
-}

+ 0 - 21
src/main/java/com/its/api/op/model/entity/history/UnitSystSttsHsKey.java

@@ -1,21 +0,0 @@
-package com.its.api.op.model.entity.history;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-//@Embeddable
-public class UnitSystSttsHsKey implements Serializable {
-
-    //@Id @Column(nullable = false, length = 30)
-    private String SYST_ID;
-
-    //@Id @Column(nullable = false, length = 14)
-    private String CRTN_DT;
-
-}

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

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

+ 17 - 0
src/main/java/com/its/api/op/repository/history/TbUnitSystSttsHsRepository.java

@@ -0,0 +1,17 @@
+package com.its.api.op.repository.history;
+
+import com.its.api.op.model.entity.history.TbUnitSystSttsHs;
+import com.its.api.op.model.entity.history.TbUnitSystSttsHsKey;
+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 TbUnitSystSttsHsRepository extends JpaRepository<TbUnitSystSttsHs, TbUnitSystSttsHsKey>, JpaSpecificationExecutor<TbUnitSystSttsHs> {
+
+    @Query(value = "select p from TbUnitSystSttsHs p where p.systId = :systId and p.crtnDt between :fromDt and :toDt")
+    List<TbUnitSystSttsHs> findAllByDateRange(String systId, String fromDt, String toDt);
+}

+ 0 - 16
src/main/java/com/its/api/op/repository/history/UnitSystSttsHsRepository.java

@@ -1,16 +0,0 @@
-package com.its.api.op.repository.history;
-
-import com.its.api.op.model.entity.history.UnitSystSttsHs;
-import com.its.api.op.model.entity.history.UnitSystSttsHsKey;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-@Repository
-public interface UnitSystSttsHsRepository extends JpaRepository<UnitSystSttsHs, UnitSystSttsHsKey> {
-
-    @Query(value = "select distinct p from UnitSystSttsHs p where p.SYST_ID = ?1 and p.CRTN_DT between ?2 and ?3")
-    List<UnitSystSttsHs> findAllByDateRange(String SYST_ID, String fromDT, String toDT);
-}

+ 101 - 0
src/main/java/com/its/api/op/service/database/TbUnitSystService.java

@@ -0,0 +1,101 @@
+package com.its.api.op.service.database;
+
+import com.its.api.op.model.dto.database.TbUnitSystDto;
+import com.its.api.op.model.entity.database.TbUnitSyst;
+import com.its.api.op.repository.database.TbUnitSystRepository;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Optional;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbUnitSystService {
+
+    private final TbUnitSystRepository repo;
+
+    // 데이터 1건 조회, 없으면 exception
+    private TbUnitSyst requireOne(String id) {
+        return repo.findById(id)
+                .orElseThrow(() -> new NoSuchElementException("데이터가 존재하지 않습니다: " + id));
+    }
+
+    // 전체 데이터 조회
+    public List<TbUnitSystDto> findAll() {
+        List<TbUnitSystDto> result = new ArrayList<>();
+        List<TbUnitSyst> data = this.repo.findAll();
+        for (TbUnitSyst entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
+    public TbUnitSystDto findById(String id) {
+        TbUnitSyst entity = requireOne(id);
+        return entity.toDto();
+    }
+
+    // 데이터 변경
+    public TbUnitSystDto updateById(String id, TbUnitSystDto.TbUnitSystUpdReq req) {
+        TbUnitSyst entity = requireOne(id);
+        entity.updateInfo(req);
+        this.repo.save(entity);
+        return entity.toDto();
+    }
+
+    // 데이터 변경 또는 생성-목록(데이터가 존재하면 업데이트 없으면 신규로 생성)
+    public List<TbUnitSystDto> mergeInfoList(List<TbUnitSystDto.TbUnitSystUpdReq> reqList) {
+        List<TbUnitSystDto> result = new ArrayList<>();
+        for (TbUnitSystDto.TbUnitSystUpdReq req : reqList) {
+            TbUnitSyst obj = req.toEntity();
+            this.repo.save(obj);
+            result.add(obj.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
+    public TbUnitSystDto mergeInfo(TbUnitSystDto.TbUnitSystUpdReq req) {
+        TbUnitSyst obj = req.toEntity();
+        this.repo.save(obj);
+        return obj.toDto();
+    }
+
+    // 정보 삭제-개별, 데이터 존재하지 않으면 Exception
+    public TbUnitSystDto deleteById(String id) {
+        TbUnitSyst entity = requireOne(id);
+        this.repo.deleteById(id);
+        return entity.toDto();
+    }
+
+    // 정보 삭제-목록, 존재하는 데이터 만 삭제
+    public List<TbUnitSystDto> deleteByIds(List<String> ids) {
+        List<TbUnitSystDto> result = new ArrayList<>();
+        for (String id : ids) {
+            Optional<TbUnitSyst> obj = this.repo.findById(id);
+            if (obj.isPresent()) {
+                this.repo.deleteById(id);
+                result.add(obj.get().toDto());
+            }
+        }
+        return result;
+    }
+
+    // 프로세스 목록 조회(이력조회-프로세스상태이력)
+    public List<TbUnitSystDto> findProcessAll() {
+        List<TbUnitSystDto> result = new ArrayList<>();
+        List<TbUnitSyst> data = this.repo.findAll();
+        for (TbUnitSyst obj: data) {
+            if (obj.getDelYn().equals("N") && obj.getSttsDsplYn().equals("Y")) {
+                result.add(obj.toDto());
+            }
+        }
+        return result;
+    }
+}

+ 50 - 0
src/main/java/com/its/api/op/service/history/TbUnitSystSttsHsService.java

@@ -0,0 +1,50 @@
+package com.its.api.op.service.history;
+
+import com.its.api.op.global.CodeManager;
+import com.its.api.op.model.dto.history.TbUnitSystSttsHsDto;
+import com.its.api.op.model.entity.history.TbUnitSystSttsHs;
+import com.its.api.op.repository.history.TbUnitSystSttsHsRepository;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbUnitSystSttsHsService {
+
+    private final TbUnitSystSttsHsRepository repo;
+
+    public List<TbUnitSystSttsHsDto> findAllByDateRange(String systId, String crtnDt) {
+        String fromDt = crtnDt + "000000";
+        String toDt = crtnDt + "235959";
+
+        List<TbUnitSystSttsHsDto> result = new ArrayList<>();
+        int idx = 1;
+        for (int ii = 0; ii < 24; ii++) {
+            for (int jj = 0; jj < 12; jj++) {
+                String HHMM = String.format("%02d:%02d", ii, jj*5);
+                TbUnitSystSttsHsDto info = new TbUnitSystSttsHsDto(idx++, HHMM, systId);
+                result.add(info);
+            }
+        }
+
+        List<TbUnitSystSttsHs> data = repo.findAllByDateRange(systId, fromDt, toDt);
+        for (TbUnitSystSttsHs obj : data) {
+            try {
+                String HH = obj.getCrtnDt().substring(8, 10);
+                String MI = obj.getCrtnDt().substring(10, 12);
+                int crtnIdx = ((Integer.parseInt(HH) * 60 + Integer.parseInt(MI)) / 5);
+                result.get(crtnIdx).setCrtnDt((obj.getCrtnDt()));
+                result.get(crtnIdx).setSystSttsCd(obj.getSystSttsCd());
+                result.get(crtnIdx).setSystSttsDesc(CodeManager.getCodeDesc(CodeManager.SYST_STTS_CD, obj.getSystSttsCd()));
+            }
+            catch (Exception e) {}
+        }
+
+        return result;
+    }
+}

+ 0 - 29
src/main/java/com/its/api/op/service/history/UnitSystSttsHsService.java

@@ -1,29 +0,0 @@
-package com.its.api.op.service.history;
-
-import com.its.api.op.model.entity.history.UnitSystSttsHs;
-import com.its.api.op.repository.history.UnitSystSttsHsRepository;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@Slf4j
-@RequiredArgsConstructor
-@Service
-public class UnitSystSttsHsService {
-
-    private final UnitSystSttsHsRepository repo;
-
-
-    public List<UnitSystSttsHs> findAllByDateRange(String SYST_ID, String FROM_DT, String TO_DT) {
-        try {
-            return repo.findAllByDateRange(SYST_ID, FROM_DT, TO_DT);
-        }
-        catch (Exception e) {
-            log.error("{}.findAllByDateRange: Exception: {}", getClass().getSimpleName(), e.getMessage());
-        }
-        return new ArrayList<>();
-    }
-}