瀏覽代碼

vds detector validation add

shjung 3 年之前
父節點
當前提交
b2431d351d

+ 67 - 0
src/main/java/com/its/api/its/controller/vds/TbVdsDtctRlblCndtController.java

@@ -0,0 +1,67 @@
+package com.its.api.its.controller.vds;
+
+import com.its.api.its.model.dto.vds.TbVdsDtctRlblCndtDto;
+import com.its.api.its.model.entity.vds.TbVdsDtctRlblCndtKey;
+import com.its.api.its.service.vds.TbVdsDtctRlblCndtService;
+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;
+
+//NOT USE
+@Api(tags = "VDS 검지기 신뢰도 조건")
+@Validated
+//@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/tb_vds_dtct_rlbl_cndt")
+public class TbVdsDtctRlblCndtController {
+
+    private final TbVdsDtctRlblCndtService service;
+
+    @ApiOperation(value = "VDS 검지기 신뢰도 조건 전체조회(TB_VDS_DTCT_RLBL_CNDT)", response = TbVdsDtctRlblCndtDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbVdsDtctRlblCndtDto> findAll() {
+        return this.service.findAll();
+    }
+
+    @ApiOperation(value = "VDS 검지기 신뢰도 조건 개별조회(TB_VDS_DTCT_RLBL_CNDT)", response = TbVdsDtctRlblCndtDto.class)
+    @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbVdsDtctRlblCndtDto findById(@PathVariable final TbVdsDtctRlblCndtKey id) {
+        return this.service.findById(id);
+    }
+
+    @ApiOperation(value = "VDS 검지기 신뢰도 조건 정보변경(TB_VDS_DTCT_RLBL_CNDT)", response = TbVdsDtctRlblCndtDto.class)
+    @PutMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbVdsDtctRlblCndtDto updateById(@PathVariable final TbVdsDtctRlblCndtKey id, @RequestBody @Valid final TbVdsDtctRlblCndtDto.TbVdsDtctRlblCndtUpdReq req) {
+        return this.service.updateById(id, req);
+    }
+
+    @ApiOperation(value = "VDS 검지기 신뢰도 조건 정보변경/생성-목록(TB_VDS_DTCT_RLBL_CNDT)", response = TbVdsDtctRlblCndtDto.class, responseContainer = "ArrayList")
+    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbVdsDtctRlblCndtDto> mergeInfoList(@RequestBody @Valid final List<TbVdsDtctRlblCndtDto.TbVdsDtctRlblCndtUpdReq> listReq) {
+        return this.service.mergeInfoList(listReq);
+    }
+
+    @ApiOperation(value = "VDS 검지기 신뢰도 조건 정보변경/생성-개별(TB_VDS_DTCT_RLBL_CNDT)", response = TbVdsDtctRlblCndtDto.class)
+    @PostMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbVdsDtctRlblCndtDto mergeInfo(@PathVariable("id") TbVdsDtctRlblCndtKey id, @RequestBody @Valid final TbVdsDtctRlblCndtDto.TbVdsDtctRlblCndtUpdReq req) {
+        return this.service.mergeInfo(req);
+    }
+
+    @ApiOperation(value = "VDS 검지기 신뢰도 조건 정보삭제-개별(TB_VDS_DTCT_RLBL_CNDT)", response = TbVdsDtctRlblCndtDto.class)
+    @DeleteMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbVdsDtctRlblCndtDto deleteDataById(@PathVariable("id") TbVdsDtctRlblCndtKey id) {
+        return this.service.deleteById(id);
+    }
+
+    @ApiOperation(value = "VDS 검지기 신뢰도 조건 정보삭제-목록(TB_VDS_DTCT_RLBL_CNDT)", response = TbVdsDtctRlblCndtDto.class, responseContainer = "ArrayList")
+    @DeleteMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbVdsDtctRlblCndtDto> deleteDataByIds(@RequestBody @Valid final List<TbVdsDtctRlblCndtKey> ids) {
+        return this.service.deleteByIds(ids);
+    }
+
+}

+ 67 - 0
src/main/java/com/its/api/its/controller/vds/TbVdsDtctSmthParaController.java

@@ -0,0 +1,67 @@
+package com.its.api.its.controller.vds;
+
+import com.its.api.its.model.dto.vds.TbVdsDtctSmthParaDto;
+import com.its.api.its.model.entity.vds.TbVdsDtctSmthParaKey;
+import com.its.api.its.service.vds.TbVdsDtctSmthParaService;
+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;
+
+//NOT USE
+@Api(tags = "VDS 검지기 평활화 파라미터")
+@Validated
+//@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/tb_vds_dtct_smth_para")
+public class TbVdsDtctSmthParaController {
+
+    private final TbVdsDtctSmthParaService service;
+
+    @ApiOperation(value = "VDS 검지기 평활화 파라미터 전체조회(TB_VDS_DTCT_SMTH_PARA)", response = TbVdsDtctSmthParaDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbVdsDtctSmthParaDto> findAll() {
+        return this.service.findAll();
+    }
+
+    @ApiOperation(value = "VDS 검지기 평활화 파라미터 개별조회(TB_VDS_DTCT_SMTH_PARA)", response = TbVdsDtctSmthParaDto.class)
+    @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbVdsDtctSmthParaDto findById(@PathVariable final TbVdsDtctSmthParaKey id) {
+        return this.service.findById(id);
+    }
+
+    @ApiOperation(value = "VDS 검지기 평활화 파라미터 정보변경(TB_VDS_DTCT_SMTH_PARA)", response = TbVdsDtctSmthParaDto.class)
+    @PutMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbVdsDtctSmthParaDto updateById(@PathVariable final TbVdsDtctSmthParaKey id, @RequestBody @Valid final TbVdsDtctSmthParaDto.TbVdsDtctSmthParaUpdReq req) {
+        return this.service.updateById(id, req);
+    }
+
+    @ApiOperation(value = "VDS 검지기 평활화 파라미터 정보변경/생성-목록(TB_VDS_DTCT_SMTH_PARA)", response = TbVdsDtctSmthParaDto.class, responseContainer = "ArrayList")
+    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbVdsDtctSmthParaDto> mergeInfoList(@RequestBody @Valid final List<TbVdsDtctSmthParaDto.TbVdsDtctSmthParaUpdReq> listReq) {
+        return this.service.mergeInfoList(listReq);
+    }
+
+    @ApiOperation(value = "VDS 검지기 평활화 파라미터 정보변경/생성-개별(TB_VDS_DTCT_SMTH_PARA)", response = TbVdsDtctSmthParaDto.class)
+    @PostMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbVdsDtctSmthParaDto mergeInfo(@PathVariable("id") TbVdsDtctSmthParaKey id, @RequestBody @Valid final TbVdsDtctSmthParaDto.TbVdsDtctSmthParaUpdReq req) {
+        return this.service.mergeInfo(req);
+    }
+
+    @ApiOperation(value = "VDS 검지기 평활화 파라미터 정보삭제-개별(TB_VDS_DTCT_SMTH_PARA)", response = TbVdsDtctSmthParaDto.class)
+    @DeleteMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbVdsDtctSmthParaDto deleteDataById(@PathVariable("id") TbVdsDtctSmthParaKey id) {
+        return this.service.deleteById(id);
+    }
+
+    @ApiOperation(value = "VDS 검지기 평활화 파라미터 정보삭제-목록(TB_VDS_DTCT_SMTH_PARA)", response = TbVdsDtctSmthParaDto.class, responseContainer = "ArrayList")
+    @DeleteMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbVdsDtctSmthParaDto> deleteDataByIds(@RequestBody @Valid final List<TbVdsDtctSmthParaKey> ids) {
+        return this.service.deleteByIds(ids);
+    }
+
+}

+ 11 - 4
src/main/java/com/its/api/its/model/dto/vds/TbVdsDtctDto.java

@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 
 import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Positive;
 import javax.validation.constraints.PositiveOrZero;
 import javax.validation.constraints.Size;
 import java.io.Serializable;
@@ -162,12 +163,12 @@ public class TbVdsDtctDto implements Serializable {
 
         @ApiModelProperty("설치 차로, Nullable = Y, NUMBER(2)")  // Y NUMBER(2)
         @JsonProperty("istl_lane")
-        @PositiveOrZero
+        @Positive
         private Integer istlLane;
 
         @ApiModelProperty("DET 번호, Nullable = Y, VARCHAR(1)")  // Y VARCHAR(1)
         @JsonProperty("det_nmbr")
-        @Size(min=1, max=1)
+        //@Size(min=1, max=1)
         private String detNmbr;
 
         @ApiModelProperty("감도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
@@ -198,7 +199,7 @@ public class TbVdsDtctDto implements Serializable {
 
         @ApiModelProperty("채널 번호, Nullable = Y, VARCHAR(4)")  // Y VARCHAR(4)
         @JsonProperty("chnl_nmbr")
-        @Size(min=1, max=4)
+        //@Size(min=1, max=4)
         private String chnlNmbr;
 
         @ApiModelProperty("삭제 여부, Nullable = Y, CHAR(1)")  // Y CHAR(1)
@@ -219,31 +220,37 @@ public class TbVdsDtctDto implements Serializable {
 
         @ApiModelProperty("최대 교통량, Nullable = Y, NUMBER(6)")  // Y NUMBER(6)
         @JsonProperty("max_tfvl")
+        @PositiveOrZero
         private Integer maxTfvl;
 
         @ApiModelProperty("최소 교통량, Nullable = Y, NUMBER(6)")  // Y NUMBER(6)
         @JsonProperty("min_tfvl")
+        @PositiveOrZero
         private Integer minTfvl;
 
         @ApiModelProperty("최대 점유 율, , NUMBER(6,2)")  // Y NUMBER(6,2)
         @JsonProperty("max_ocpy_rate")
+        @PositiveOrZero
         private Double maxOcpyRate;
 
         @ApiModelProperty("최소 점유 율, , NUMBER(6,2)")  // Y NUMBER(6,2)
         @JsonProperty("min_ocpy_rate")
+        @PositiveOrZero
         private Double minOcpyRate;
 
         @ApiModelProperty("최대 속도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
         @JsonProperty("max_sped")
+        @PositiveOrZero
         private Integer maxSped;
 
         @ApiModelProperty("최소 속도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
         @JsonProperty("min_sped")
+        @PositiveOrZero
         private Integer minSped;
 
         @ApiModelProperty("링크ID")  // N NUMBER(10)
         @JsonProperty("link_id")
-        @PositiveOrZero
+        @Positive
         private Long linkId;
 
         @Builder

+ 188 - 0
src/main/java/com/its/api/its/model/dto/vds/TbVdsDtctRlblCndtDto.java

@@ -0,0 +1,188 @@
+package com.its.api.its.model.dto.vds;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.api.its.model.entity.vds.TbVdsDtctRlblCndt;
+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;
+
+/**
+ * VDS 검지기 신뢰도 조건 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("TbVdsDtctRlblCndtDto(VDS 검지기 신뢰도 조건)")
+public class TbVdsDtctRlblCndtDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("검지기 번호")  // N VARCHAR(8)
+    @JsonProperty("dtct_nmbr")
+    private String dtctNmbr;
+
+    @ApiModelProperty("시스템 종류 구분")  // N VARCHAR(1)
+    @JsonProperty("syst_kind_dvsn")
+    private String systKindDvsn;
+
+    @ApiModelProperty("최대 교통량")  // Y NUMBER(6)
+    @JsonProperty("max_tfvl")
+    private Integer maxTfvl;
+
+    @ApiModelProperty("최소 교통량")  // Y NUMBER(6)
+    @JsonProperty("min_tfvl")
+    private Integer minTfvl;
+
+    @ApiModelProperty("최대 점유 율")  // Y NUMBER(6,2)
+    @JsonProperty("max_ocpy_rate")
+    private Double maxOcpyRate;
+
+    @ApiModelProperty("최소 점유 율")  // Y NUMBER(6,2)
+    @JsonProperty("min_ocpy_rate")
+    private Double minOcpyRate;
+
+    @ApiModelProperty("최대 속도")  // Y NUMBER(3)
+    @JsonProperty("max_sped")
+    private Integer maxSped;
+
+    @ApiModelProperty("최소 속도")  // Y NUMBER(3)
+    @JsonProperty("min_sped")
+    private Integer minSped;
+
+    @ApiModelProperty("삭제 여부")  // Y CHAR(1)
+    @JsonProperty("del_yn")
+    private String delYn;
+
+    @ApiModelProperty("최초 등록자 번호")  // Y VARCHAR(20)
+    @JsonProperty("frst_regr_nmbr")
+    private String frstRegrNmbr;
+
+    @ApiModelProperty("최초 등록 일시")  // Y VARCHAR(14)
+    @JsonProperty("frst_rgst_dt")
+    private String frstRgstDt;
+
+    @ApiModelProperty("최종 수정자 번호")  // Y VARCHAR(20)
+    @JsonProperty("last_crpr_nmbr")
+    private String lastCrprNmbr;
+
+    @ApiModelProperty("최종 수정 일시")  // Y VARCHAR(14)
+    @JsonProperty("last_crct_dt")
+    private String lastCrctDt;
+
+    // Code Description Field
+    @ApiModelProperty("삭제 여부 설명")
+    @JsonProperty("del_desc")    // DEL_YN
+    private String delDesc;
+
+    @ApiModel("TbVdsDtctRlblCndtUpdReq(VDS 검지기 신뢰도 조건 정보변경)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class TbVdsDtctRlblCndtUpdReq {
+
+        @ApiModelProperty("검지기 번호, Nullable = N, VARCHAR(8)")  // N VARCHAR(8)
+        @JsonProperty("dtct_nmbr")
+        @Size(min=1, max=8)
+        private String dtctNmbr;
+
+        @ApiModelProperty("시스템 종류 구분, Nullable = N, VARCHAR(1)")  // N VARCHAR(1)
+        @JsonProperty("syst_kind_dvsn")
+        @Size(min=1, max=1)
+        private String systKindDvsn;
+
+        @ApiModelProperty("최대 교통량, Nullable = Y, NUMBER(6)")  // Y NUMBER(6)
+        @JsonProperty("max_tfvl")
+        @Positive
+        private Integer maxTfvl;
+
+        @ApiModelProperty("최소 교통량, Nullable = Y, NUMBER(6)")  // Y NUMBER(6)
+        @JsonProperty("min_tfvl")
+        @Positive
+        private Integer minTfvl;
+
+        @ApiModelProperty("최대 점유 율, , NUMBER(6,2)")  // Y NUMBER(6,2)
+        @JsonProperty("max_ocpy_rate")
+        private Double maxOcpyRate;
+
+        @ApiModelProperty("최소 점유 율, , NUMBER(6,2)")  // Y NUMBER(6,2)
+        @JsonProperty("min_ocpy_rate")
+        private Double minOcpyRate;
+
+        @ApiModelProperty("최대 속도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("max_sped")
+        @Positive
+        private Integer maxSped;
+
+        @ApiModelProperty("최소 속도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("min_sped")
+        @Positive
+        private Integer minSped;
+
+        @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, VARCHAR(20)")  // Y VARCHAR(20)
+        @JsonProperty("frst_regr_nmbr")
+        @Size(min=1, max=20)
+        private String frstRegrNmbr;
+
+        @ApiModelProperty("최초 등록 일시, Nullable = Y, VARCHAR(14)")  // Y VARCHAR(14)
+        @JsonProperty("frst_rgst_dt")
+        @Size(min=1, max=14)
+        private String frstRgstDt;
+
+        @ApiModelProperty("최종 수정자 번호, Nullable = Y, VARCHAR(20)")  // Y VARCHAR(20)
+        @JsonProperty("last_crpr_nmbr")
+        @Size(min=1, max=20)
+        private String lastCrprNmbr;
+
+        @ApiModelProperty("최종 수정 일시, Nullable = Y, VARCHAR(14)")  // Y VARCHAR(14)
+        @JsonProperty("last_crct_dt")
+        @Size(min=1, max=14)
+        private String lastCrctDt;
+
+        @Builder
+        public TbVdsDtctRlblCndtUpdReq(String dtct_nmbr, String syst_kind_dvsn, Integer max_tfvl, Integer min_tfvl, Double max_ocpy_rate, Double min_ocpy_rate, Integer max_sped, Integer min_sped, String del_yn, String frst_regr_nmbr, String frst_rgst_dt, String last_crpr_nmbr, String last_crct_dt) {
+            this.dtctNmbr = dtct_nmbr;
+            this.systKindDvsn = syst_kind_dvsn;
+            this.maxTfvl = max_tfvl;
+            this.minTfvl = min_tfvl;
+            this.maxOcpyRate = max_ocpy_rate;
+            this.minOcpyRate = min_ocpy_rate;
+            this.maxSped = max_sped;
+            this.minSped = min_sped;
+            this.delYn = del_yn;
+            this.frstRegrNmbr = frst_regr_nmbr;
+            this.frstRgstDt = frst_rgst_dt;
+            this.lastCrprNmbr = last_crpr_nmbr;
+            this.lastCrctDt = last_crct_dt;
+        }
+
+        public TbVdsDtctRlblCndt toEntity() {
+            return TbVdsDtctRlblCndt.builder()
+                    .dtctNmbr(this.dtctNmbr)
+                    .systKindDvsn(this.systKindDvsn)
+                    .maxTfvl(this.maxTfvl)
+                    .minTfvl(this.minTfvl)
+                    .maxOcpyRate(this.maxOcpyRate)
+                    .minOcpyRate(this.minOcpyRate)
+                    .maxSped(this.maxSped)
+                    .minSped(this.minSped)
+                    .delYn(this.delYn)
+                    .frstRegrNmbr(this.frstRegrNmbr)
+                    .frstRgstDt(this.frstRgstDt)
+                    .lastCrprNmbr(this.lastCrprNmbr)
+                    .lastCrctDt(this.lastCrctDt)
+                    .build();
+        }
+
+    }
+
+}

+ 163 - 0
src/main/java/com/its/api/its/model/dto/vds/TbVdsDtctSmthParaDto.java

@@ -0,0 +1,163 @@
+package com.its.api.its.model.dto.vds;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.api.its.model.entity.vds.TbVdsDtctSmthPara;
+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;
+
+/**
+ * VDS 검지기 평활화 파라미터 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("TbVdsDtctSmthParaDto(VDS 검지기 평활화 파라미터)")
+public class TbVdsDtctSmthParaDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("검지기 번호")  // N VARCHAR(8)
+    @JsonProperty("dtct_nmbr")
+    private String dtctNmbr;
+
+    @ApiModelProperty("시스템 종류 구분")  // N VARCHAR(1)
+    @JsonProperty("syst_kind_dvsn")
+    private String systKindDvsn;
+
+    @ApiModelProperty("교통량 계수")  // Y NUMBER(6,2)
+    @JsonProperty("tfvl_fctr")
+    private Double tfvlFctr;
+
+    @ApiModelProperty("점유 율 계수")  // Y NUMBER(6,2)
+    @JsonProperty("ocpy_rate_fctr")
+    private Double ocpyRateFctr;
+
+    @ApiModelProperty("속도 계수")  // Y NUMBER(6,2)
+    @JsonProperty("sped_fctr")
+    private Double spedFctr;
+
+    @ApiModelProperty("차두시간 계수")  // Y NUMBER(6,2)
+    @JsonProperty("hdwy_fctr")
+    private Double hdwyFctr;
+
+    @ApiModelProperty("최초 등록자 번호")  // Y VARCHAR(20)
+    @JsonProperty("frst_regr_nmbr")
+    private String frstRegrNmbr;
+
+    @ApiModelProperty("최초 등록 일시")  // Y VARCHAR(14)
+    @JsonProperty("frst_rgst_dt")
+    private String frstRgstDt;
+
+    @ApiModelProperty("최종 수정자 번호")  // Y VARCHAR(20)
+    @JsonProperty("last_crpr_nmbr")
+    private String lastCrprNmbr;
+
+    @ApiModelProperty("최종 수정 일시")  // Y VARCHAR(14)
+    @JsonProperty("last_crct_dt")
+    private String lastCrctDt;
+
+    @ApiModelProperty("삭제 여부")  // Y CHAR(1)
+    @JsonProperty("del_yn")
+    private String delYn;
+
+    // Code Description Field
+    @ApiModelProperty("삭제 여부 설명")
+    @JsonProperty("del_desc")    // DEL_YN
+    private String delDesc;
+
+    @ApiModel("TbVdsDtctSmthParaUpdReq(VDS 검지기 평활화 파라미터 정보변경)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class TbVdsDtctSmthParaUpdReq {
+
+        @ApiModelProperty("검지기 번호, Nullable = N, VARCHAR(8)")  // N VARCHAR(8)
+        @JsonProperty("dtct_nmbr")
+        @Size(min=1, max=8)
+        private String dtctNmbr;
+
+        @ApiModelProperty("시스템 종류 구분, Nullable = N, VARCHAR(1)")  // N VARCHAR(1)
+        @JsonProperty("syst_kind_dvsn")
+        @Size(min=1, max=1)
+        private String systKindDvsn;
+
+        @ApiModelProperty("교통량 계수, , NUMBER(6,2)")  // Y NUMBER(6,2)
+        @JsonProperty("tfvl_fctr")
+        private Double tfvlFctr;
+
+        @ApiModelProperty("점유 율 계수, , NUMBER(6,2)")  // Y NUMBER(6,2)
+        @JsonProperty("ocpy_rate_fctr")
+        private Double ocpyRateFctr;
+
+        @ApiModelProperty("속도 계수, , NUMBER(6,2)")  // Y NUMBER(6,2)
+        @JsonProperty("sped_fctr")
+        private Double spedFctr;
+
+        @ApiModelProperty("차두시간 계수, , NUMBER(6,2)")  // Y NUMBER(6,2)
+        @JsonProperty("hdwy_fctr")
+        private Double hdwyFctr;
+
+        @ApiModelProperty("최초 등록자 번호, Nullable = Y, VARCHAR(20)")  // Y VARCHAR(20)
+        @JsonProperty("frst_regr_nmbr")
+        @Size(min=1, max=20)
+        private String frstRegrNmbr;
+
+        @ApiModelProperty("최초 등록 일시, Nullable = Y, VARCHAR(14)")  // Y VARCHAR(14)
+        @JsonProperty("frst_rgst_dt")
+        @Size(min=1, max=14)
+        private String frstRgstDt;
+
+        @ApiModelProperty("최종 수정자 번호, Nullable = Y, VARCHAR(20)")  // Y VARCHAR(20)
+        @JsonProperty("last_crpr_nmbr")
+        @Size(min=1, max=20)
+        private String lastCrprNmbr;
+
+        @ApiModelProperty("최종 수정 일시, Nullable = Y, VARCHAR(14)")  // Y VARCHAR(14)
+        @JsonProperty("last_crct_dt")
+        @Size(min=1, max=14)
+        private String lastCrctDt;
+
+        @ApiModelProperty("삭제 여부, Nullable = Y, CHAR(1)")  // Y CHAR(1)
+        @JsonProperty("del_yn")
+        @Size(min=1, max=1)
+        @Pattern(regexp = "[YN]")
+        private String delYn;
+
+        @Builder
+        public TbVdsDtctSmthParaUpdReq(String dtct_nmbr, String syst_kind_dvsn, Double tfvl_fctr, Double ocpy_rate_fctr, Double sped_fctr, Double hdwy_fctr, String frst_regr_nmbr, String frst_rgst_dt, String last_crpr_nmbr, String last_crct_dt, String del_yn) {
+            this.dtctNmbr = dtct_nmbr;
+            this.systKindDvsn = syst_kind_dvsn;
+            this.tfvlFctr = tfvl_fctr;
+            this.ocpyRateFctr = ocpy_rate_fctr;
+            this.spedFctr = sped_fctr;
+            this.hdwyFctr = hdwy_fctr;
+            this.frstRegrNmbr = frst_regr_nmbr;
+            this.frstRgstDt = frst_rgst_dt;
+            this.lastCrprNmbr = last_crpr_nmbr;
+            this.lastCrctDt = last_crct_dt;
+            this.delYn = del_yn;
+        }
+
+        public TbVdsDtctSmthPara toEntity() {
+            return TbVdsDtctSmthPara.builder()
+                    .dtctNmbr(this.dtctNmbr)
+                    .systKindDvsn(this.systKindDvsn)
+                    .tfvlFctr(this.tfvlFctr)
+                    .ocpyRateFctr(this.ocpyRateFctr)
+                    .spedFctr(this.spedFctr)
+                    .hdwyFctr(this.hdwyFctr)
+                    .frstRegrNmbr(this.frstRegrNmbr)
+                    .frstRgstDt(this.frstRgstDt)
+                    .lastCrprNmbr(this.lastCrprNmbr)
+                    .lastCrctDt(this.lastCrctDt)
+                    .delYn(this.delYn)
+                    .build();
+        }
+
+    }
+
+}

+ 116 - 0
src/main/java/com/its/api/its/model/entity/vds/TbVdsDtctRlblCndt.java

@@ -0,0 +1,116 @@
+package com.its.api.its.model.entity.vds;
+
+import com.its.api.its.model.dto.vds.TbVdsDtctRlblCndtDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * VDS 검지기 신뢰도 조건 Entity Class
+ */
+@Getter
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@Builder
+@AllArgsConstructor
+@ApiModel("VDS 검지기 신뢰도 조건")
+@Entity
+@Table(name = "TB_VDS_DTCT_RLBL_CNDT")
+@IdClass(TbVdsDtctRlblCndtKey.class)
+public class TbVdsDtctRlblCndt implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("검지기 번호")  // N VARCHAR(8)
+    @Id
+    @Column(name = "DTCT_NMBR", nullable = false, length = 8)
+    private String dtctNmbr;
+
+    @ApiModelProperty("시스템 종류 구분")  // N VARCHAR(1)
+    @Id
+    @Column(name = "SYST_KIND_DVSN", nullable = false, length = 1)
+    private String systKindDvsn;
+
+    @ApiModelProperty("최대 교통량")  // Y NUMBER(6)
+    @Column(name = "MAX_TFVL", columnDefinition = "NUMBER", length = 6)
+    private Integer maxTfvl;
+
+    @ApiModelProperty("최소 교통량")  // Y NUMBER(6)
+    @Column(name = "MIN_TFVL", columnDefinition = "NUMBER", length = 6)
+    private Integer minTfvl;
+
+    @ApiModelProperty("최대 점유 율")  // Y NUMBER(6,2)
+    @Column(name = "MAX_OCPY_RATE", columnDefinition = "NUMBER", length = 6, precision = 2)
+    private Double maxOcpyRate;
+
+    @ApiModelProperty("최소 점유 율")  // Y NUMBER(6,2)
+    @Column(name = "MIN_OCPY_RATE", columnDefinition = "NUMBER", length = 6, precision = 2)
+    private Double minOcpyRate;
+
+    @ApiModelProperty("최대 속도")  // Y NUMBER(3)
+    @Column(name = "MAX_SPED", columnDefinition = "NUMBER", length = 3)
+    private Integer maxSped;
+
+    @ApiModelProperty("최소 속도")  // Y NUMBER(3)
+    @Column(name = "MIN_SPED", columnDefinition = "NUMBER", length = 3)
+    private Integer minSped;
+
+    @ApiModelProperty("삭제 여부")  // Y CHAR(1)
+    @Column(name = "DEL_YN", columnDefinition = "CHAR", length = 1)
+    private String delYn;
+
+    @ApiModelProperty("최초 등록자 번호")  // Y VARCHAR(20)
+    @Column(name = "FRST_REGR_NMBR", length = 20)
+    private String frstRegrNmbr;
+
+    @ApiModelProperty("최초 등록 일시")  // Y VARCHAR(14)
+    @Column(name = "FRST_RGST_DT", length = 14)
+    private String frstRgstDt;
+
+    @ApiModelProperty("최종 수정자 번호")  // Y VARCHAR(20)
+    @Column(name = "LAST_CRPR_NMBR", length = 20)
+    private String lastCrprNmbr;
+
+    @ApiModelProperty("최종 수정 일시")  // Y VARCHAR(14)
+    @Column(name = "LAST_CRCT_DT", length = 14)
+    private String lastCrctDt;
+
+    public TbVdsDtctRlblCndtDto toDto() {
+        return TbVdsDtctRlblCndtDto.builder()
+                .dtctNmbr(this.dtctNmbr)
+                .systKindDvsn(this.systKindDvsn)
+                .maxTfvl(this.maxTfvl)
+                .minTfvl(this.minTfvl)
+                .maxOcpyRate(this.maxOcpyRate)
+                .minOcpyRate(this.minOcpyRate)
+                .maxSped(this.maxSped)
+                .minSped(this.minSped)
+                .delYn(this.delYn)
+                .frstRegrNmbr(this.frstRegrNmbr)
+                .frstRgstDt(this.frstRgstDt)
+                .lastCrprNmbr(this.lastCrprNmbr)
+                .lastCrctDt(this.lastCrctDt)
+                .build();
+    }
+
+    public TbVdsDtctRlblCndt(String dtctNmbr, String systKindDvsn) {
+        this.dtctNmbr = dtctNmbr;
+        this.systKindDvsn = systKindDvsn;
+    }
+
+    public void updateInfo(TbVdsDtctRlblCndtDto.TbVdsDtctRlblCndtUpdReq req) {
+        this.maxTfvl = req.getMaxTfvl();
+        this.minTfvl = req.getMinTfvl();
+        this.maxOcpyRate = req.getMaxOcpyRate();
+        this.minOcpyRate = req.getMinOcpyRate();
+        this.maxSped = req.getMaxSped();
+        this.minSped = req.getMinSped();
+        this.delYn = req.getDelYn();
+        this.frstRegrNmbr = req.getFrstRegrNmbr();
+        this.frstRgstDt = req.getFrstRgstDt();
+        this.lastCrprNmbr = req.getLastCrprNmbr();
+        this.lastCrctDt = req.getLastCrctDt();
+    }
+
+}

+ 25 - 0
src/main/java/com/its/api/its/model/entity/vds/TbVdsDtctRlblCndtKey.java

@@ -0,0 +1,25 @@
+package com.its.api.its.model.entity.vds;
+
+import lombok.Data;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import lombok.AllArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * VDS 검지기 신뢰도 조건 Key Class
+ */
+@Data
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class TbVdsDtctRlblCndtKey implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    // DTCT_NMBR, 검지기 번호  // N VARCHAR(8)
+    private String dtctNmbr;
+
+    // SYST_KIND_DVSN, 시스템 종류 구분  // N VARCHAR(1)
+    private String systKindDvsn;
+
+}

+ 104 - 0
src/main/java/com/its/api/its/model/entity/vds/TbVdsDtctSmthPara.java

@@ -0,0 +1,104 @@
+package com.its.api.its.model.entity.vds;
+
+import com.its.api.its.model.dto.vds.TbVdsDtctSmthParaDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * VDS 검지기 평활화 파라미터 Entity Class
+ */
+@Getter
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@Builder
+@AllArgsConstructor
+@ApiModel("VDS 검지기 평활화 파라미터")
+@Entity
+@Table(name = "TB_VDS_DTCT_SMTH_PARA")
+@IdClass(TbVdsDtctSmthParaKey.class)
+public class TbVdsDtctSmthPara implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("검지기 번호")  // N VARCHAR(8)
+    @Id
+    @Column(name = "DTCT_NMBR", nullable = false, length = 8)
+    private String dtctNmbr;
+
+    @ApiModelProperty("시스템 종류 구분")  // N VARCHAR(1)
+    @Id
+    @Column(name = "SYST_KIND_DVSN", nullable = false, length = 1)
+    private String systKindDvsn;
+
+    @ApiModelProperty("교통량 계수")  // Y NUMBER(6,2)
+    @Column(name = "TFVL_FCTR", columnDefinition = "NUMBER", length = 6, precision = 2)
+    private Double tfvlFctr;
+
+    @ApiModelProperty("점유 율 계수")  // Y NUMBER(6,2)
+    @Column(name = "OCPY_RATE_FCTR", columnDefinition = "NUMBER", length = 6, precision = 2)
+    private Double ocpyRateFctr;
+
+    @ApiModelProperty("속도 계수")  // Y NUMBER(6,2)
+    @Column(name = "SPED_FCTR", columnDefinition = "NUMBER", length = 6, precision = 2)
+    private Double spedFctr;
+
+    @ApiModelProperty("차두시간 계수")  // Y NUMBER(6,2)
+    @Column(name = "HDWY_FCTR", columnDefinition = "NUMBER", length = 6, precision = 2)
+    private Double hdwyFctr;
+
+    @ApiModelProperty("최초 등록자 번호")  // Y VARCHAR(20)
+    @Column(name = "FRST_REGR_NMBR", length = 20)
+    private String frstRegrNmbr;
+
+    @ApiModelProperty("최초 등록 일시")  // Y VARCHAR(14)
+    @Column(name = "FRST_RGST_DT", length = 14)
+    private String frstRgstDt;
+
+    @ApiModelProperty("최종 수정자 번호")  // Y VARCHAR(20)
+    @Column(name = "LAST_CRPR_NMBR", length = 20)
+    private String lastCrprNmbr;
+
+    @ApiModelProperty("최종 수정 일시")  // Y VARCHAR(14)
+    @Column(name = "LAST_CRCT_DT", length = 14)
+    private String lastCrctDt;
+
+    @ApiModelProperty("삭제 여부")  // Y CHAR(1)
+    @Column(name = "DEL_YN", columnDefinition = "CHAR", length = 1)
+    private String delYn;
+
+    public TbVdsDtctSmthParaDto toDto() {
+        return TbVdsDtctSmthParaDto.builder()
+                .dtctNmbr(this.dtctNmbr)
+                .systKindDvsn(this.systKindDvsn)
+                .tfvlFctr(this.tfvlFctr)
+                .ocpyRateFctr(this.ocpyRateFctr)
+                .spedFctr(this.spedFctr)
+                .hdwyFctr(this.hdwyFctr)
+                .frstRegrNmbr(this.frstRegrNmbr)
+                .frstRgstDt(this.frstRgstDt)
+                .lastCrprNmbr(this.lastCrprNmbr)
+                .lastCrctDt(this.lastCrctDt)
+                .delYn(this.delYn)
+                .build();
+    }
+
+    public TbVdsDtctSmthPara(String dtctNmbr, String systKindDvsn) {
+        this.dtctNmbr = dtctNmbr;
+        this.systKindDvsn = systKindDvsn;
+    }
+
+    public void updateInfo(TbVdsDtctSmthParaDto.TbVdsDtctSmthParaUpdReq req) {
+        this.tfvlFctr = req.getTfvlFctr();
+        this.ocpyRateFctr = req.getOcpyRateFctr();
+        this.spedFctr = req.getSpedFctr();
+        this.hdwyFctr = req.getHdwyFctr();
+        this.frstRegrNmbr = req.getFrstRegrNmbr();
+        this.frstRgstDt = req.getFrstRgstDt();
+        this.lastCrprNmbr = req.getLastCrprNmbr();
+        this.lastCrctDt = req.getLastCrctDt();
+        this.delYn = req.getDelYn();
+    }
+
+}

+ 25 - 0
src/main/java/com/its/api/its/model/entity/vds/TbVdsDtctSmthParaKey.java

@@ -0,0 +1,25 @@
+package com.its.api.its.model.entity.vds;
+
+import lombok.Data;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import lombok.AllArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * VDS 검지기 평활화 파라미터 Key Class
+ */
+@Data
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class TbVdsDtctSmthParaKey implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    // DTCT_NMBR, 검지기 번호  // N VARCHAR(8)
+    private String dtctNmbr;
+
+    // SYST_KIND_DVSN, 시스템 종류 구분  // N VARCHAR(1)
+    private String systKindDvsn;
+
+}

+ 12 - 0
src/main/java/com/its/api/its/repository/vds/TbVdsDtctRlblCndtRepository.java

@@ -0,0 +1,12 @@
+package com.its.api.its.repository.vds;
+
+import com.its.api.its.model.entity.vds.TbVdsDtctRlblCndt;
+import com.its.api.its.model.entity.vds.TbVdsDtctRlblCndtKey;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TbVdsDtctRlblCndtRepository extends JpaRepository<TbVdsDtctRlblCndt, TbVdsDtctRlblCndtKey>, JpaSpecificationExecutor<TbVdsDtctRlblCndt> {
+
+}

+ 12 - 0
src/main/java/com/its/api/its/repository/vds/TbVdsDtctSmthParaRepository.java

@@ -0,0 +1,12 @@
+package com.its.api.its.repository.vds;
+
+import com.its.api.its.model.entity.vds.TbVdsDtctSmthPara;
+import com.its.api.its.model.entity.vds.TbVdsDtctSmthParaKey;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TbVdsDtctSmthParaRepository extends JpaRepository<TbVdsDtctSmthPara, TbVdsDtctSmthParaKey>, JpaSpecificationExecutor<TbVdsDtctSmthPara> {
+
+}

+ 99 - 0
src/main/java/com/its/api/its/service/vds/TbVdsDtctRlblCndtService.java

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

+ 8 - 0
src/main/java/com/its/api/its/service/vds/TbVdsDtctService.java

@@ -79,9 +79,11 @@ public class TbVdsDtctService {
     public List<TbVdsDtctDto> mergeInfoList(List<TbVdsDtctDto.TbVdsDtctMstrUpdReq> reqList) {
         List<TbVdsDtctDto> result = new ArrayList<>();
         for (TbVdsDtctDto.TbVdsDtctMstrUpdReq req : reqList) {
+            // 검지기 마스터 정보 저장
             TbVdsDtct obj = req.toEntity();
             this.repo.save(obj);
 
+            // 검지기 링크 관계설정 정보 저장
             TbVdsDtctLinkRltn linkRltn = new TbVdsDtctLinkRltn(req.getDtctNmbr(), req.getLinkId());
             this.linkRltnRepo.save(linkRltn);
 
@@ -97,9 +99,11 @@ public class TbVdsDtctService {
      */
     @Transactional
     public TbVdsDtctDto mergeInfo(TbVdsDtctDto.TbVdsDtctMstrUpdReq req) {
+        // 검지기 마스터 정보 저장
         TbVdsDtct obj = req.toEntity();
         this.repo.save(obj);
 
+        // 검지기 링크 관계설정 정보 저장
         TbVdsDtctLinkRltn linkRltn = new TbVdsDtctLinkRltn(req.getDtctNmbr(), req.getLinkId());
         this.linkRltnRepo.save(linkRltn);
         return obj.toDto();
@@ -113,7 +117,9 @@ public class TbVdsDtctService {
     @Transactional
     public TbVdsDtctDto deleteById(String id) {
         TbVdsDtct entity = requireOne(id);
+        // 검지기 링크 관계설정 정보 삭제
         this.linkRltnRepo.deleteById(id);
+        // 검지기 마스터 정보 삭제
         this.repo.deleteById(id);
         return entity.toDto();
     }
@@ -123,9 +129,11 @@ public class TbVdsDtctService {
     public List<TbVdsDtctDto> deleteByIds(List<String> ids) {
         List<TbVdsDtctDto> result = new ArrayList<>();
         for (String id : ids) {
+            // 검지기 링크 관계설정 정보 삭제
             this.linkRltnRepo.deleteById(id);
             Optional<TbVdsDtct> obj = this.repo.findById(id);
             if (obj.isPresent()) {
+                // 검지기 마스터 정보 삭제
                 this.repo.deleteById(id);
                 result.add(obj.get().toDto());
             }

+ 99 - 0
src/main/java/com/its/api/its/service/vds/TbVdsDtctSmthParaService.java

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