shjung 3 anni fa
parent
commit
ab19f46855
35 ha cambiato i file con 1082 aggiunte e 131 eliminazioni
  1. 5 6
      src/main/java/com/its/op/controller/database/TbAtrdController.java
  2. 59 0
      src/main/java/com/its/op/controller/database/TbCmtrGradClsfController.java
  3. 54 11
      src/main/java/com/its/op/controller/database/TbCnctIntnController.java
  4. 4 5
      src/main/java/com/its/op/controller/database/TbIfscController.java
  5. 0 1
      src/main/java/com/its/op/controller/database/TbLeglHldyInfrController.java
  6. 0 1
      src/main/java/com/its/op/controller/database/TbParkingLotController.java
  7. 7 8
      src/main/java/com/its/op/controller/database/TbRoadController.java
  8. 0 36
      src/main/java/com/its/op/controller/database/TbSectGradStupController.java
  9. 0 1
      src/main/java/com/its/op/controller/database/TbUnitSystController.java
  10. 59 16
      src/main/java/com/its/op/controller/database/TbUserInfrController.java
  11. 23 0
      src/main/java/com/its/op/controller/database/mybatis/TbCnctIntnControllerMybatis.java
  12. 34 0
      src/main/java/com/its/op/controller/database/mybatis/TbUserInfrControllerMybatis.java
  13. 19 18
      src/main/java/com/its/op/global/CodeManager.java
  14. 3 0
      src/main/java/com/its/op/model/dto/AtrdRoadRltnDto.java
  15. 70 0
      src/main/java/com/its/op/model/dto/CmtrGradClsfDto.java
  16. 80 0
      src/main/java/com/its/op/model/dto/CnctIntnDto.java
  17. 4 0
      src/main/java/com/its/op/model/dto/IfscLinkRltnDto.java
  18. 7 3
      src/main/java/com/its/op/model/dto/ParkingLotDto.java
  19. 4 0
      src/main/java/com/its/op/model/dto/RoadIfscRltnDto.java
  20. 117 15
      src/main/java/com/its/op/model/dto/UserInfrDto.java
  21. 54 0
      src/main/java/com/its/op/model/entity/CmmnCdSingle.java
  22. 70 0
      src/main/java/com/its/op/model/entity/CmtrGradClsf.java
  23. 21 0
      src/main/java/com/its/op/model/entity/CmtrGradClsfKey.java
  24. 62 0
      src/main/java/com/its/op/model/entity/CnctIntn.java
  25. 3 3
      src/main/java/com/its/op/model/entity/ParkingLot.java
  26. 6 2
      src/main/java/com/its/op/model/entity/SectGradClsf.java
  27. 34 2
      src/main/java/com/its/op/model/entity/UserInfr.java
  28. 1 1
      src/main/java/com/its/op/model/vo/database/TbCnctIntnVo.java
  29. 2 2
      src/main/java/com/its/op/repository/CmmnCdSingleRepository.java
  30. 18 0
      src/main/java/com/its/op/repository/CmtrGradClsfRepository.java
  31. 9 0
      src/main/java/com/its/op/repository/CnctIntnRepository.java
  32. 10 0
      src/main/java/com/its/op/repository/SectGradClsfRepository.java
  33. 64 0
      src/main/java/com/its/op/service/database/TbCmtrGradClsfService.java
  34. 78 0
      src/main/java/com/its/op/service/database/TbCnctIntnService.java
  35. 101 0
      src/main/java/com/its/op/service/database/TbUserInfrService.java

+ 5 - 6
src/main/java/com/its/op/controller/database/TbAtrdController.java

@@ -58,8 +58,8 @@ public class TbAtrdController {
         return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
     }
 
-    @ApiOperation(value = "간선도로구간개별구성정보조회(TB_ATRD_ROAD_RLTN)", response = RoadIfscRltnDto.RoadIfscRltnUpdateReq.class)
-    @GetMapping(value = "/road-rltn/{id}", produces = {"application/json; charset=utf8"})
+    @ApiOperation(value = "개별구성정보조회(TB_ATRD_ROAD_RLTN)", response = RoadIfscRltnDto.RoadIfscRltnUpdateReq.class)
+    @GetMapping(value = "/rltn/{id}", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<AtrdRoadRltnDto.AtrdRoadRltnInfo>> findLinkRltnById(@PathVariable final String id) {
         List<AtrdRoadRltn> objs = this.service.findRltnById(id);
         if (objs != null) {
@@ -73,8 +73,8 @@ public class TbAtrdController {
     }
 
     // 간선도로정보 + 도로구성정보
-    @ApiOperation(value = "간선도로구간개별구성정보변경/생성(TB_ATRD_ROAD_RLTN)", response = AtrdDto.AtrdInfo.class)
-    @PostMapping(value = "/road-rltn/{id}", produces = {"application/json; charset=utf8"})
+    @ApiOperation(value = "개별구성정보변경/생성(TB_ATRD_ROAD_RLTN)", response = AtrdDto.AtrdInfo.class)
+    @PostMapping(value = "/rltn/{id}", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<AtrdRoadRltnDto.AtrdRoadRltnUpdateReq>> updateRltn(
             @PathVariable final String id,
             @RequestBody final List<AtrdRoadRltnDto.AtrdRoadRltnUpdateReq> req) {
@@ -87,11 +87,10 @@ public class TbAtrdController {
     }
 
     // 간선도로정보 생성-업데이트
-    @ApiOperation(value = "간선도로정보변경/생성(TB_ATRD)", response = AtrdDto.AtrdInfo.class)
+    @ApiOperation(value = "정보변경/생성(TB_ATRD)", response = AtrdDto.AtrdInfo.class)
     @PostMapping(value = "", produces = {"application/json; charset=utf8"})
     public ResponseEntity<AtrdDto.AtrdInfo> mergeInfo(@RequestBody @Valid final AtrdDto.AtrdUpdateReq req) {
 
-        log.error("{}", req);
         Atrd obj = this.service.mergeInfo(req);
         if (obj != null) {
             return new ResponseEntity<>(new AtrdDto.AtrdInfo(obj), HttpStatus.OK);

+ 59 - 0
src/main/java/com/its/op/controller/database/TbCmtrGradClsfController.java

@@ -0,0 +1,59 @@
+package com.its.op.controller.database;
+
+import com.its.op.model.dto.CmtrGradClsfDto;
+import com.its.op.model.dto.CnctIntnDto;
+import com.its.op.model.entity.CmtrGradClsf;
+import com.its.op.service.database.TbCmtrGradClsfService;
+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.*;
+
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/api/database/tb-cmtr-grad-clsf")
+@Api(tags = "09.기초데이터관리-07.소통등급관리", description="소통등급관리")
+public class TbCmtrGradClsfController {
+
+    private final TbCmtrGradClsfService service;
+
+    @ApiOperation(value = "전체조회(TB_CMTR_GRAD_CLSF)", response = CmtrGradClsfDto.CmtrGradClsfInfo.class)
+    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<CmtrGradClsfDto.CmtrGradClsfInfo>> findAll() {
+        List<CmtrGradClsf> data = this.service.findAll();
+        List<CmtrGradClsfDto.CmtrGradClsfInfo> result = new ArrayList<>();
+        for (CmtrGradClsf obj: data) {
+            result.add(new CmtrGradClsfDto.CmtrGradClsfInfo(obj));
+        }
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "개별조회(TB_CMTR_GRAD_CLSF)", response = CmtrGradClsfDto.CmtrGradClsfInfo.class)
+    @GetMapping(value = "/{id}/{sub}", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<CmtrGradClsfDto.CmtrGradClsfInfo> findById(@PathVariable("id") String id, @PathVariable("sub") String sub) {
+        CmtrGradClsf obj = this.service.findById(id, sub);
+        if (obj != null) {
+            return new ResponseEntity<>(new CmtrGradClsfDto.CmtrGradClsfInfo(obj), HttpStatus.OK);
+        }
+        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
+    }
+
+    @ApiOperation(value = "정보변경TB_CMTR_GRAD_CLSF)", response = CnctIntnDto.CnctIntnInfo.class)
+    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<CmtrGradClsfDto.CmtrGradClsfInfo> mergeInfo(@RequestBody @Valid final CmtrGradClsfDto.CmtrGradClsfUpdateReq req) {
+        CmtrGradClsf obj = this.service.updateInfo(req);
+        if (obj != null) {
+            return new ResponseEntity<>(new CmtrGradClsfDto.CmtrGradClsfInfo(obj), HttpStatus.OK);
+        }
+        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
+    }
+
+}

+ 54 - 11
src/main/java/com/its/op/controller/database/TbCnctIntnController.java

@@ -1,24 +1,67 @@
 package com.its.op.controller.database;
 
-import com.its.op.controller.AbstractDatabaseController;
-import com.its.op.service.database.impl.TbCnctIntnServiceImpl;
-import com.its.op.model.vo.database.TbCnctIntnVo;
+import com.its.op.model.dto.CnctIntnDto;
+import com.its.op.model.entity.CnctIntn;
+import com.its.op.service.database.TbCnctIntnService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
 
 @Slf4j
+@RequiredArgsConstructor
 @RestController
-@RequestMapping("/api/database//tb-cnct-intn")
+@RequestMapping("/api/database/tb-cnct-intn")
 @Api(tags = "09.기초데이터관리-12.연계기관관리", description="연계기관관리")
-public class TbCnctIntnController extends AbstractDatabaseController<TbCnctIntnVo> {
+public class TbCnctIntnController {
+
+    private final TbCnctIntnService service;
+
+    @ApiOperation(value = "전체조회(TB_CNCT_INTN)", response = CnctIntnDto.CnctIntnInfo.class)
+    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<CnctIntnDto.CnctIntnInfo>> findAll() {
+        List<CnctIntn> data = this.service.findAll();
+        List<CnctIntnDto.CnctIntnInfo> result = new ArrayList<>();
+        for (CnctIntn obj: data) {
+            result.add(new CnctIntnDto.CnctIntnInfo(obj));
+        }
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
 
-    private final TbCnctIntnServiceImpl service;
+    @ApiOperation(value = "개별조회(TB_CNCT_INTN)", response = CnctIntnDto.CnctIntnInfo.class)
+    @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<CnctIntnDto.CnctIntnInfo> findById(@PathVariable final Long id) {
+        CnctIntn obj = this.service.findById(id);
+        if (obj != null) {
+            return new ResponseEntity<>(new CnctIntnDto.CnctIntnInfo(obj), HttpStatus.OK);
+        }
+        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
+    }
 
-    public TbCnctIntnController(TbCnctIntnServiceImpl service) {
-        super(service);
-        this.service = service;
+    @ApiOperation(value = "정보변경/생성(TB_CNCT_INTN)", response = CnctIntnDto.CnctIntnInfo.class)
+    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<CnctIntnDto.CnctIntnInfo> mergeInfo(@RequestBody @Valid final CnctIntnDto.CnctIntnUpdateReq req) {
+        CnctIntn obj = this.service.mergeInfo(req);
+        if (obj != null) {
+            return new ResponseEntity<>(new CnctIntnDto.CnctIntnInfo(obj), HttpStatus.OK);
+        }
+        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
     }
 
+    @ApiOperation(value = "정보삭제(TB_CNCT_INTN)", response = CnctIntnDto.CnctIntnInfo.class)
+    @DeleteMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<CnctIntnDto.CnctIntnInfo> deleteDataById(@PathVariable("id") Long id) {
+        CnctIntn obj = this.service.deleteById(id);
+        if (obj != null) {
+            return new ResponseEntity<>(new CnctIntnDto.CnctIntnInfo(obj), HttpStatus.OK);
+        }
+        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
+    }
 }

+ 4 - 5
src/main/java/com/its/op/controller/database/TbIfscController.java

@@ -56,8 +56,8 @@ public class TbIfscController {
         return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
     }
 
-    @ApiOperation(value = "서비스링크개별구성정보조회(TB_IFSC_LINK_RLTN)", response = IfscLinkRltnDto.IfscLinkRltnInfo.class)
-    @GetMapping(value = "/link-rltn/{id}", produces = {"application/json; charset=utf8"})
+    @ApiOperation(value = "개별구성정보조회(TB_IFSC_LINK_RLTN)", response = IfscLinkRltnDto.IfscLinkRltnInfo.class)
+    @GetMapping(value = "/rltn/{id}", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<IfscLinkRltnDto.IfscLinkRltnInfo>> findLinkRltnById(@PathVariable final Long id) {
         List<IfscLinkRltn> objs = this.service.findLinkRltnById(id);
         if (objs != null) {
@@ -70,9 +70,8 @@ public class TbIfscController {
         return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
     }
 
-
-    @ApiOperation(value = "서비스링크개별구성정보변경/생성(TB_IFSC_LINK_RLTN)", response = IfscDto.IfscInfo.class)
-    @PutMapping(value = "/link-rltn/{id}", produces = {"application/json; charset=utf8"})
+    @ApiOperation(value = "개별구성정보변경/생성(TB_IFSC_LINK_RLTN)", response = IfscDto.IfscInfo.class)
+    @PutMapping(value = "/rltn/{id}", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<IfscLinkRltnDto.IfscLinkRltnUpdateReq>> updateRltn(
             @PathVariable final Long id,
             @RequestBody final List<IfscLinkRltnDto.IfscLinkRltnUpdateReq> req) {

+ 0 - 1
src/main/java/com/its/op/controller/database/TbLeglHldyInfrController.java

@@ -48,7 +48,6 @@ public class TbLeglHldyInfrController {
     @ApiOperation(value = "정보변경/생성(TB_LEGL_HLDY_INFR)", response = LeglHldyInfrDto.LeglHldyInfo.class)
     @PostMapping(value = "", produces = {"application/json; charset=utf8"})
     public ResponseEntity<LeglHldyInfrDto.LeglHldyInfo> mergeInfo(@RequestBody @Valid final LeglHldyInfrDto.LeglHldyUpdateReq req) {
-
         LeglHldyInfr obj = this.service.mergeInfo(req);
         if (obj != null) {
             return new ResponseEntity<>(new LeglHldyInfrDto.LeglHldyInfo(obj), HttpStatus.OK);

+ 0 - 1
src/main/java/com/its/op/controller/database/TbParkingLotController.java

@@ -48,7 +48,6 @@ public class TbParkingLotController {
     @ApiOperation(value = "정보변경/생성(PARKINGLOT)", response = ParkingLotDto.ParkingLotInfo.class)
     @PostMapping(value = "", produces = {"application/json; charset=utf8"})
     public ResponseEntity<ParkingLotDto.ParkingLotInfo> mergeInfo(@RequestBody @Valid final ParkingLotDto.ParkingLotUpdateReq req) {
-
         ParkingLot obj = this.service.mergeInfo(req);
         if (obj != null) {
             return new ResponseEntity<>(new ParkingLotDto.ParkingLotInfo(obj), HttpStatus.OK);

+ 7 - 8
src/main/java/com/its/op/controller/database/TbRoadController.java

@@ -25,7 +25,7 @@ public class TbRoadController {
 
     private final TbRoadService service;
 
-    @ApiOperation(value = "전체조회(TB_IFSC)", response = RoadDto.RoadInfo.class)
+    @ApiOperation(value = "전체조회(TB_ROAD)", response = RoadDto.RoadInfo.class)
     @GetMapping(value = "", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<RoadDto.RoadInfo>> findAll() {
         List<Road> data = this.service.findAll();
@@ -36,7 +36,7 @@ public class TbRoadController {
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
-    @ApiOperation(value = "서비스링크개별조회(TB_IFSC)", response = RoadDto.RoadInfo.class)
+    @ApiOperation(value = "개별조회(TB_ROAD)", response = RoadDto.RoadInfo.class)
     @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
     public ResponseEntity<RoadDto.RoadInfo> findById(@PathVariable final Long id) {
         Road obj = this.service.findById(id);
@@ -46,7 +46,7 @@ public class TbRoadController {
         return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
     }
 
-    @ApiOperation(value = "구간명변경(TB_IFSC)", response = RoadDto.RoadInfo.class)
+    @ApiOperation(value = "구간명변경(TB_ROAD)", response = RoadDto.RoadInfo.class)
     @PutMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
     public ResponseEntity<RoadDto.RoadInfo> updateNameById(@PathVariable final Long id, @RequestBody final RoadDto.RoadNameUpdateReq req) {
         Road obj = this.service.updateNameById(id, req);
@@ -56,8 +56,8 @@ public class TbRoadController {
         return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
     }
 
-    @ApiOperation(value = "도로구간개별구성정보조회(TB_ROAD_IFSC_RLTN)", response = RoadIfscRltnDto.RoadIfscRltnUpdateReq.class)
-    @GetMapping(value = "/ifsc-rltn/{id}", produces = {"application/json; charset=utf8"})
+    @ApiOperation(value = "개별구성정보조회(TB_ROAD_IFSC_RLTN)", response = RoadIfscRltnDto.RoadIfscRltnUpdateReq.class)
+    @GetMapping(value = "/rltn/{id}", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<RoadIfscRltnDto.RoadIfscRltnInfo>> findLinkRltnById(@PathVariable final Long id) {
         List<RoadIfscRltn> objs = this.service.findLinkRltnById(id);
         if (objs != null) {
@@ -70,9 +70,8 @@ public class TbRoadController {
         return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
     }
 
-
-    @ApiOperation(value = "도로구간개별구성정보변경/생성(TB_ROAD_IFSC_RLTN)", response = RoadDto.RoadInfo.class)
-    @PutMapping(value = "/ifsc-rltn/{id}", produces = {"application/json; charset=utf8"})
+    @ApiOperation(value = "개별구성정보변경/생성(TB_ROAD_IFSC_RLTN)", response = RoadDto.RoadInfo.class)
+    @PutMapping(value = "/rltn/{id}", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<RoadIfscRltnDto.RoadIfscRltnUpdateReq>> updateRltn(
             @PathVariable final Long id,
             @RequestBody final List<RoadIfscRltnDto.RoadIfscRltnUpdateReq> req) {

+ 0 - 36
src/main/java/com/its/op/controller/database/TbSectGradStupController.java

@@ -1,36 +0,0 @@
-package com.its.op.controller.database;
-
-import com.its.op.controller.AbstractDatabaseController;
-import com.its.op.service.database.impl.TbSectGradStupServiceImpl;
-import com.its.op.model.vo.database.TbSectGradStupVo;
-import io.swagger.annotations.Api;
-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.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.servlet.http.HttpServletRequest;
-
-@Slf4j
-@RestController
-@RequestMapping("/api/database/tb-sect-grad-stup")
-@Api(tags = "09.기초데이터관리-07.소통등급관리", description="소통등급관리")
-public class TbSectGradStupController extends AbstractDatabaseController<TbSectGradStupVo> {
-
-    private final TbSectGradStupServiceImpl service;
-
-    public TbSectGradStupController(TbSectGradStupServiceImpl service) {
-        super(service);
-        this.service = service;
-    }
-
-    @GetMapping(value = "/{id}/{sub}", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<TbSectGradStupVo> findById(@PathVariable("id") String id, @PathVariable("sub") String sub, HttpServletRequest request) {
-        TbSectGradStupVo result = this.service.findById(id, sub);
-        return new ResponseEntity<>(result, HttpStatus.OK);
-    }
-
-}

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

@@ -48,7 +48,6 @@ public class TbUnitSystController {
     @ApiOperation(value = "정보변경/생성(TB_UNIT_SYST)", response = UnitSystDto.UnitSystInfo.class)
     @PostMapping(value = "", produces = {"application/json; charset=utf8"})
     public ResponseEntity<UnitSystDto.UnitSystInfo> mergeInfo(@RequestBody @Valid final UnitSystDto.UnitSystUpdateReq req) {
-
         UnitSyst obj = this.service.mergeInfo(req);
         if (obj != null) {
             return new ResponseEntity<>(new UnitSystDto.UnitSystInfo(obj), HttpStatus.OK);

+ 59 - 16
src/main/java/com/its/op/controller/database/TbUserInfrController.java

@@ -1,35 +1,78 @@
 package com.its.op.controller.database;
 
-import com.its.op.controller.AbstractRepositoryController;
+import com.its.op.model.dto.UserInfrDto;
 import com.its.op.model.entity.UserInfr;
-import com.its.op.service.database.impl.TbUserInfrServiceImpl;
+import com.its.op.service.database.TbUserInfrService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
 
 @Slf4j
+@RequiredArgsConstructor
 @RestController
-@RequestMapping("/api/database//tb-user-infr")
+@RequestMapping("/api/database/tb-user-infr")
 @Api(tags = "09.기초데이터관리-10.운영자관리", description="운영자관리")
-public class TbUserInfrController extends AbstractRepositoryController<UserInfr, String> {
+public class TbUserInfrController {
 
-    private final TbUserInfrServiceImpl service;
+    private final TbUserInfrService service;
 
-    public TbUserInfrController(TbUserInfrServiceImpl service) {
-        super(service);
-        this.service = service;
+    @ApiOperation(value = "전체조회(TB_USER_INFR)", response = UserInfrDto.UserInfo.class)
+    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<UserInfrDto.UserInfo>> findAll() {
+        List<UserInfr> data = this.service.findAll();
+        List<UserInfrDto.UserInfo> result = new ArrayList<>();
+        for (UserInfr obj: data) {
+            result.add(new UserInfrDto.UserInfo(obj));
+        }
+        return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
+    @ApiOperation(value = "개별조회(TB_USER_INFR)", response = UserInfrDto.UserInfo.class)
+    @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<UserInfrDto.UserInfo> findById(@PathVariable final String id) {
+        UserInfr obj = this.service.findById(id);
+        if (obj != null) {
+            return new ResponseEntity<>(new UserInfrDto.UserInfo(obj), HttpStatus.OK);
+        }
+        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
+    }
+
+    @ApiOperation(value = "정보변경/생성(TB_USER_INFR)", response = UserInfrDto.UserInfo.class)
+    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<UserInfrDto.UserInfo> mergeInfo(@RequestBody @Valid final UserInfrDto.UserInfoUpdateReq req) {
+        UserInfr obj = this.service.mergeInfo(req);
+        if (obj != null) {
+            return new ResponseEntity<>(new UserInfrDto.UserInfo(obj), HttpStatus.OK);
+        }
+        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
+    }
+
+    @ApiOperation(value = "정보삭제(TB_USER_INFR)", response = UserInfrDto.UserInfo.class)
+    @DeleteMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<UserInfrDto.UserInfo> deleteDataById(@PathVariable("id") String id) {
+        UserInfr obj = this.service.deleteById(id);
+        if (obj != null) {
+            return new ResponseEntity<>(new UserInfrDto.UserInfo(obj), HttpStatus.OK);
+        }
+        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
+    }
+    
     @ApiOperation(value = "비밀번호변경(TB_USER_INFR)", response = UserInfr.class)
-    @PutMapping(value = "/pswd/", produces = {"application/json; charset=utf8"})
-    public int updatePswdById(@RequestBody UserInfr obj, HttpServletRequest request) {
-        return this.service.updatePswdById(obj);
+    @PutMapping(value = "/pswd/{id}", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<UserInfrDto.UserInfo>  updatePswdById(@PathVariable("id") String id, @RequestBody UserInfrDto.UserPswdUpdateReq req) {
+        UserInfr obj = this.service.updatePswdById(id, req);
+        if (obj != null) {
+            return new ResponseEntity<>(new UserInfrDto.UserInfo(obj), HttpStatus.OK);
+        }
+        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
     }
 
 }

+ 23 - 0
src/main/java/com/its/op/controller/database/mybatis/TbCnctIntnControllerMybatis.java

@@ -0,0 +1,23 @@
+package com.its.op.controller.database.mybatis;
+
+import com.its.op.controller.AbstractDatabaseController;
+import com.its.op.model.vo.database.TbCnctIntnVo;
+import com.its.op.service.database.impl.TbCnctIntnServiceImpl;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Slf4j
+//@RestController
+@RequestMapping("/api-mybatis/database/tb-cnct-intn")
+@Api(tags = "09.기초데이터관리-12.연계기관관리", description="연계기관관리")
+public class TbCnctIntnControllerMybatis extends AbstractDatabaseController<TbCnctIntnVo> {
+
+    private final TbCnctIntnServiceImpl service;
+
+    public TbCnctIntnControllerMybatis(TbCnctIntnServiceImpl service) {
+        super(service);
+        this.service = service;
+    }
+
+}

+ 34 - 0
src/main/java/com/its/op/controller/database/mybatis/TbUserInfrControllerMybatis.java

@@ -0,0 +1,34 @@
+package com.its.op.controller.database.mybatis;
+
+import com.its.op.controller.AbstractRepositoryController;
+import com.its.op.model.entity.UserInfr;
+import com.its.op.service.database.impl.TbUserInfrServiceImpl;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Slf4j
+//@RestController
+@RequestMapping("/api-mybatis/database/tb-user-infr")
+@Api(tags = "09.기초데이터관리-10.운영자관리", description="운영자관리")
+public class TbUserInfrControllerMybatis extends AbstractRepositoryController<UserInfr, String> {
+
+    private final TbUserInfrServiceImpl service;
+
+    public TbUserInfrControllerMybatis(TbUserInfrServiceImpl service) {
+        super(service);
+        this.service = service;
+    }
+
+    @ApiOperation(value = "비밀번호변경(TB_USER_INFR)", response = UserInfr.class)
+    @PutMapping(value = "/pswd/", produces = {"application/json; charset=utf8"})
+    public int updatePswdById(@RequestBody UserInfr obj, HttpServletRequest request) {
+        return this.service.updatePswdById(obj);
+    }
+
+}

+ 19 - 18
src/main/java/com/its/op/global/CodeManager.java

@@ -1,9 +1,9 @@
 package com.its.op.global;
 
 import com.its.op.model.entity.CmmnCd;
-import com.its.op.model.entity.SectGradStup;
+import com.its.op.model.entity.SectGradClsf;
 import com.its.op.repository.CmmnCdRepository;
-import com.its.op.repository.SectGradStupRepository;
+import com.its.op.repository.SectGradClsfRepository;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -21,24 +21,25 @@ import java.util.concurrent.ConcurrentHashMap;
 public class CodeManager {
 
     private final CmmnCdRepository repo;
-    private final SectGradStupRepository sectGradStupRepository;
+    private final SectGradClsfRepository sectGradClsfRepository;
 
     private static final String defUnknownCode = "X";
     private static final String defUnknownDesc = "UNKNOWN";
 
-    public static final String DAY_TYPE_CD      = "DTW";    // 요일유형
-    public static final String CMTR_GRAD_CD     = "LTC";    // 소통등급
-    public static final String ADJS_SORC        = "MCS";    // 보정소스
-    public static final String NODE_TYPE        = "NDT";    // 노드유형
-    public static final String ROAD_USE         = "RDU";    // 도로사용여부
-    public static final String ROAD_RANK        = "RDR";    // 도로등급
-    public static final String ROAD_TYPE        = "RDT";    // 도로유형
-    public static final String MULTI_LINK       = "MLT";    // 중용구간
-    public static final String LINK_CONNECT     = "CTR";    // 연결로
-    public static final String REST_VEH         = "PLV";    // 통행제한차량
-    public static final String SECT_GRAD_CD     = "SRT";    // 구간 등급 코드
-    public static final String DRCT_CD          = "IFD";    // 방향 코드
-    public static final String HLDY_DAY_CD      = "LHT";    // 휴일유형코드
+    public static final String DAY_TYPE_CD          = "DTW";    // 요일유형
+    public static final String CMTR_GRAD_CD         = "LTC";    // 소통등급
+    public static final String ADJS_SORC            = "MCS";    // 보정소스
+    public static final String NODE_TYPE            = "NDT";    // 노드유형
+    public static final String ROAD_USE             = "RDU";    // 도로사용여부
+    public static final String ROAD_RANK            = "RDR";    // 도로등급
+    public static final String ROAD_TYPE            = "RDT";    // 도로유형
+    public static final String MULTI_LINK           = "MLT";    // 중용구간
+    public static final String LINK_CONNECT         = "CTR";    // 연결로
+    public static final String REST_VEH             = "PLV";    // 통행제한차량
+    public static final String SECT_GRAD_CD         = "SRT";    // 구간 등급 코드
+    public static final String DRCT_CD              = "IFD";    // 방향 코드
+    public static final String HLDY_DAY_CD          = "LHT";    // 휴일유형코드
+    public static final String CNCT_INTN_TYPE_CD    = "COT";    // 연계기관유형코드
 
     private static final ConcurrentHashMap<String, HashMap<String, Code>> codes = new ConcurrentHashMap<>();
 
@@ -73,8 +74,8 @@ public class CodeManager {
 
     private void loadSectGradStup() {
         HashMap<String, Code> codeMap = new HashMap<>();
-        List<SectGradStup> codeList = sectGradStupRepository.findAll();
-        for (SectGradStup cd : codeList) {
+        List<SectGradClsf> codeList = sectGradClsfRepository.findAll();
+        for (SectGradClsf cd : codeList) {
             codeMap.put(cd.getSECT_GRAD_CD(), new Code(cd.getSECT_GRAD_CD(), cd.getSECT_GRAD_NM(), cd.getSECT_GRAD_NM()));
         }
         codes.put(SECT_GRAD_CD, codeMap);

+ 3 - 0
src/main/java/com/its/op/model/dto/AtrdRoadRltnDto.java

@@ -5,6 +5,7 @@ import com.its.op.global.NodeManager;
 import com.its.op.model.entity.AtrdRoadRltn;
 import lombok.*;
 
+import javax.validation.constraints.Positive;
 import java.io.Serializable;
 import java.util.List;
 
@@ -53,7 +54,9 @@ public class AtrdRoadRltnDto implements Serializable {
     public static class AtrdRoadRltnUpdateReq {
 
         private String  ATRD_ID;
+        @Positive
         private Long    ROAD_ID;
+        @Positive
         private Integer ORD;
 
         @Builder

+ 70 - 0
src/main/java/com/its/op/model/dto/CmtrGradClsfDto.java

@@ -0,0 +1,70 @@
+package com.its.op.model.dto;
+
+import com.its.op.model.entity.CmtrGradClsf;
+import lombok.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Positive;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+public class CmtrGradClsfDto implements Serializable {
+
+    @Getter
+    public static class CmtrGradClsfInfo {
+        private final String  SECT_GRAD_CD;       //	N	VARCHAR2(7)	N			구간 등급 코드
+        private final String  CMTR_GRAD_CD;       //	N	VARCHAR2(7)	N			소통 등급 코드
+        private final Integer LWST_TRVL_SPED;     //	N	NUMBER(3)	Y	0		최저 통행 속도
+        private final Integer HGHS_TRVL_SPED;     //	N	NUMBER(3)	Y	0		최고 통행 속도
+        private final String  CNGS_GRAD_YN;       //	N	CHAR(1)	    Y	'N'		정체 등급 여부
+
+        private final String SECT_GRAD_DESC;
+        //private final String CMTR_GRAD_DESC;
+
+        public CmtrGradClsfInfo(CmtrGradClsf entity) {
+            this.SECT_GRAD_CD   = entity.getSECT_GRAD_CD();
+            this.CMTR_GRAD_CD   = entity.getCMTR_GRAD_CD();
+            this.LWST_TRVL_SPED = entity.getLWST_TRVL_SPED();
+            this.HGHS_TRVL_SPED = entity.getHGHS_TRVL_SPED();
+            this.CNGS_GRAD_YN   = entity.getCNGS_GRAD_YN();
+
+            this.SECT_GRAD_DESC = "[" + this.SECT_GRAD_CD + "]" + entity.getSect().getSECT_GRAD_NM();
+            //this.CMTR_GRAD_DESC = "[" + this.CMTR_GRAD_CD + "]" + entity.getGrad().getCMMN_CD_KOR_NM();
+        }
+    }
+
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class CmtrGradClsfUpdateReq {
+
+        @NotEmpty
+        @Size(min=1, max=7)
+        private String  SECT_GRAD_CD;       //	N	VARCHAR2(7)	N			구간 등급 코드
+        @NotEmpty
+        @Size(min=1, max=7)
+        private String  CMTR_GRAD_CD;       //	N	VARCHAR2(7)	N			소통 등급 코드
+
+        @Positive
+        private Integer LWST_TRVL_SPED;     //	N	NUMBER(3)	Y	0		최저 통행 속도
+        @Positive
+        private Integer HGHS_TRVL_SPED;     //	N	NUMBER(3)	Y	0		최고 통행 속도
+
+        @Size(min=1, max=1)
+        @Pattern(regexp = "[YN]")
+        private String CNGS_GRAD_YN;        //	N	CHAR(1)	        Y	'N'		정체 등급 여부
+
+
+        @Builder
+        public CmtrGradClsfUpdateReq(String  SECT_GRAD_CD, String  CMTR_GRAD_CD, Integer LWST_TRVL_SPED, Integer HGHS_TRVL_SPED, String CNGS_GRAD_YN) {
+            this.SECT_GRAD_CD   = SECT_GRAD_CD;
+            this.CMTR_GRAD_CD   = CMTR_GRAD_CD;
+            this.LWST_TRVL_SPED = LWST_TRVL_SPED;
+            this.HGHS_TRVL_SPED = HGHS_TRVL_SPED;
+            this.CNGS_GRAD_YN = CNGS_GRAD_YN;
+        }
+    }
+
+}

+ 80 - 0
src/main/java/com/its/op/model/dto/CnctIntnDto.java

@@ -0,0 +1,80 @@
+package com.its.op.model.dto;
+
+import com.its.op.global.CodeManager;
+import com.its.op.model.entity.CnctIntn;
+import lombok.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Positive;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+public class CnctIntnDto implements Serializable {
+
+    @Getter
+    public static class CnctIntnInfo {
+        private final Long   CNCT_INTN_MNGM_NMBR;     //	N	NUMBER(10)	    N			연계 기관 관리 번호
+        private final String CNCT_INTN_NM;            //	N	VARCHAR2(50)	Y			연계 기관 명
+        private final String CNCT_INTN_TYPE_CD;       //	N	VARCHAR2(7)	    Y			연계 기관 유형 코드
+        private final String CNCT_INTN_TEL;           //	N	VARCHAR2(128)	Y			연계 기관 전화번호
+        private final String CNCT_INTN_ADDR;          //	N	VARCHAR2(200)	Y			연계 기관 주소
+        private final String RMRK;                    //	N	VARCHAR2(600)	Y			비고
+        private final String DEL_YN;                  //	N	CHAR(1)	        Y	'N'		삭제 여부
+
+        private final String CNCT_INTN_TYPE_DESC;
+
+        public CnctIntnInfo(CnctIntn entity) {
+            this.CNCT_INTN_MNGM_NMBR = entity.getCNCT_INTN_MNGM_NMBR();
+            this.CNCT_INTN_NM        = entity.getCNCT_INTN_NM();
+            this.CNCT_INTN_TYPE_CD   = entity.getCNCT_INTN_TYPE_CD();
+            this.CNCT_INTN_TEL       = entity.getCNCT_INTN_TEL();
+            this.CNCT_INTN_ADDR      = entity.getCNCT_INTN_ADDR();
+            this.RMRK                = entity.getRMRK();
+            this.DEL_YN              = entity.getDEL_YN();
+
+            this.CNCT_INTN_TYPE_DESC = CodeManager.getCodeDesc(CodeManager.CNCT_INTN_TYPE_CD, this.CNCT_INTN_TYPE_CD);
+        }
+    }
+
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class CnctIntnUpdateReq {
+
+        @Positive
+        private Long   CNCT_INTN_MNGM_NMBR;     //	N	NUMBER(10)	    N			연계 기관 관리 번호
+
+        @NotEmpty
+        @Size(min=1, max = 50)
+        private String CNCT_INTN_NM;            //	N	VARCHAR2(50)	Y			연계 기관 명
+
+        @NotEmpty
+        @Size(max = 7)
+        private String CNCT_INTN_TYPE_CD;       //	N	VARCHAR2(7)	    Y			연계 기관 유형 코드
+
+        @Size(max = 128)
+        private String CNCT_INTN_TEL;           //	N	VARCHAR2(128)	Y			연계 기관 전화번호
+        @Size(max = 200)
+        private String CNCT_INTN_ADDR;          //	N	VARCHAR2(200)	Y			연계 기관 주소
+        @Size(max = 600)
+        private String RMRK;                    //	N	VARCHAR2(600)	Y			비고
+
+        @Size(min=1, max=1)
+        @Pattern(regexp = "[YN]")
+        private String DEL_YN;          //	N	CHAR(1)	        Y	'N'		삭제 여부
+
+        @Builder
+        public CnctIntnUpdateReq(Long CNCT_INTN_MNGM_NMBR, String CNCT_INTN_NM, String CNCT_INTN_TYPE_CD, String CNCT_INTN_TEL, String CNCT_INTN_ADDR, String RMRK, String DEL_YN) {
+            this.CNCT_INTN_MNGM_NMBR = CNCT_INTN_MNGM_NMBR;
+            this.CNCT_INTN_NM = CNCT_INTN_NM;
+            this.CNCT_INTN_TYPE_CD = CNCT_INTN_TYPE_CD;
+            this.CNCT_INTN_TEL = CNCT_INTN_TEL;
+            this.CNCT_INTN_ADDR = CNCT_INTN_ADDR;
+            this.RMRK = RMRK;
+            this.DEL_YN = DEL_YN;
+        }
+    }
+
+}

+ 4 - 0
src/main/java/com/its/op/model/dto/IfscLinkRltnDto.java

@@ -5,6 +5,7 @@ import com.its.op.global.NodeManager;
 import com.its.op.model.entity.IfscLinkRltn;
 import lombok.*;
 
+import javax.validation.constraints.Positive;
 import java.io.Serializable;
 
 public class IfscLinkRltnDto implements Serializable {
@@ -60,8 +61,11 @@ public class IfscLinkRltnDto implements Serializable {
     @NoArgsConstructor(access = AccessLevel.PROTECTED)
     public static class IfscLinkRltnUpdateReq {
 
+        @Positive
         private Long    IFSC_ID;
+        @Positive
         private Long    LINK_ID;
+        @Positive
         private Integer ORD;
 
         @Builder

+ 7 - 3
src/main/java/com/its/op/model/dto/ParkingLotDto.java

@@ -5,6 +5,7 @@ import lombok.*;
 
 import javax.validation.constraints.DecimalMax;
 import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.Positive;
 import javax.validation.constraints.Size;
 import java.io.Serializable;
 
@@ -17,9 +18,12 @@ public class ParkingLotDto implements Serializable {
         private final String LOCATION;        //	N	VARCHAR2(120)	Y   위치
         private final String ADDRESS;         //	N	VARCHAR2(100)	Y   주소
         private final String PHONE;           //	N	VARCHAR2(20)	Y   전화번호
-        private final int    PARKINGCNT;      //	N	NUMBER(3)	    Y   주차면수
-        private final double COORDX;          //	N	NUMBER	        Y   위치 X
-        private final double COORDY;          //	N	NUMBER	        Y   위치 Y
+        @Positive
+        private final Integer PARKINGCNT;      //	N	NUMBER(3)	    Y   주차면수
+        @Positive
+        private final Double COORDX;          //	N	NUMBER	        Y   위치 X
+        @Positive
+        private final Double COORDY;          //	N	NUMBER	        Y   위치 Y
         private final String PISFLAG;         //	N	CHAR(1)	        Y
         private final String DISTRICTID;      //	N	VARCHAR2(5)	    Y
         private final String PARKINGENAME;    //	N	VARCHAR2(30)	Y   영문명

+ 4 - 0
src/main/java/com/its/op/model/dto/RoadIfscRltnDto.java

@@ -5,6 +5,7 @@ import com.its.op.global.NodeManager;
 import com.its.op.model.entity.RoadIfscRltn;
 import lombok.*;
 
+import javax.validation.constraints.Positive;
 import java.io.Serializable;
 
 public class RoadIfscRltnDto implements Serializable {
@@ -51,8 +52,11 @@ public class RoadIfscRltnDto implements Serializable {
     @NoArgsConstructor(access = AccessLevel.PROTECTED)
     public static class RoadIfscRltnUpdateReq {
 
+        @Positive
         private Long    ROAD_ID;
+        @Positive
         private Long    IFSC_ID;
+        @Positive
         private Integer ORD;
 
         @Builder

+ 117 - 15
src/main/java/com/its/op/model/dto/UserInfrDto.java

@@ -1,25 +1,127 @@
 package com.its.op.model.dto;
 
+import com.its.op.model.entity.UserInfr;
 import lombok.*;
 
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Size;
 import java.io.Serializable;
 
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
 public class UserInfrDto implements Serializable {
 
-    private String USER_ID;         //	N	VARCHAR2(20)	N			사용자ID
-    private String NAME;            //	N	VARCHAR2(30)	Y			성명
-    private String COMP;            //	N	VARCHAR2(50)	Y			회사
-    private String TEL;             //	N	VARCHAR2(128)	Y			전화번호
-    private String ADDR;            //	N	VARCHAR2(200)	Y			주소
-    private String MOBILE;          //	N	VARCHAR2(128)	Y			이동전화
-    private String EMAL;            //	N	VARCHAR2(128)	Y			이메일
-    private String HINT_QUES;       //	N	VARCHAR2(7)	    Y			힌트질문
-    private String HINT_ANS;        //	N	VARCHAR2(100)	Y			힌트질문답
-    private String GROP_ID;         //	N	VARCHAR2(30)	Y			그룹ID
-    private String OPER_SYST_ID;    //	N	VARCHAR2(30)	Y			운영시스템ID
-    private String DEL_YN;          //	N	CHAR(1)	        Y	'N'		삭제 여부
+    @Getter
+    public static class UserInfo {
+        private final String USER_ID;         //	N	VARCHAR2(20)	N			사용자ID
+        private final String PWD;             //	N	VARCHAR2(64)	Y			암호
+        private final String NAME;            //	N	VARCHAR2(30)	Y			성명
+        private final String COMP;            //	N	VARCHAR2(50)	Y			회사
+        private final String TEL;             //	N	VARCHAR2(128)	Y			전화번호
+        private final String ADDR;            //	N	VARCHAR2(200)	Y			주소
+        private final String MOBILE;          //	N	VARCHAR2(128)	Y			이동전화
+        private final String EMAL;            //	N	VARCHAR2(128)	Y			이메일
+        private final String HINT_QUES;       //	N	VARCHAR2(7)	    Y			힌트질문
+        private final String HINT_ANS;        //	N	VARCHAR2(100)	Y			힌트질문답
+        private final String GROP_ID;         //	N	VARCHAR2(30)	Y			그룹ID
+        private final String OPER_SYST_ID;    //	N	VARCHAR2(30)	Y			운영시스템ID
+        private final String DEL_YN;          //	N	CHAR(1)	        Y	'N'		삭제 여부
 
+        public UserInfo(UserInfr entity) {
+            this.USER_ID      = entity.getUSER_ID();
+            this.PWD          = entity.getPWD();
+            this.NAME         = entity.getNAME();
+            this.COMP         = entity.getCOMP();
+            this.TEL          = entity.getTEL();
+            this.ADDR         = entity.getADDR();
+            this.MOBILE       = entity.getMOBILE();
+            this.EMAL         = entity.getEMAL();
+            this.HINT_QUES    = entity.getHINT_QUES();
+            this.HINT_ANS     = entity.getHINT_ANS();
+            this.GROP_ID      = entity.getGROP_ID();
+            this.OPER_SYST_ID = entity.getOPER_SYST_ID();
+            this.DEL_YN       = entity.getDEL_YN();
+
+        }
+    }
+
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class UserInfoUpdateReq {
+
+        @NotEmpty
+        @Size(min=1, max=20)
+        private String USER_ID;         //	N	VARCHAR2(20)	N			사용자ID
+
+        @NotEmpty
+        @Size(min=1, max=64)
+        private String PWD;             //	N	VARCHAR2(64)	Y			암호
+        @NotEmpty
+        @Size(min=1, max=30)
+        private String NAME;            //	N	VARCHAR2(30)	Y			성명
+
+        @Size(max=50)
+        private String COMP;            //	N	VARCHAR2(50)	Y			회사
+
+        @Size(max=128)
+        private String TEL;             //	N	VARCHAR2(128)	Y			전화번호
+
+        @Size(max=200)
+        private String ADDR;            //	N	VARCHAR2(200)	Y			주소
+
+        @Size(max=128)
+        private String MOBILE;          //	N	VARCHAR2(128)	Y			이동전화
+
+        @Email
+        private String EMAL;            //	N	VARCHAR2(128)	Y			이메일
+
+        @Size(max=7)
+        private String HINT_QUES;       //	N	VARCHAR2(7)	    Y			힌트질문
+        @Size(max=100)
+        private String HINT_ANS;        //	N	VARCHAR2(100)	Y			힌트질문답
+
+        @Size(max=30)
+        private String GROP_ID;         //	N	VARCHAR2(30)	Y			그룹ID
+        @Size(max=30)
+        private String OPER_SYST_ID;    //	N	VARCHAR2(30)	Y			운영시스템ID
+
+        @Size(min=1, max=1)
+        @Pattern(regexp = "[YN]")
+        private String DEL_YN;          //	N	CHAR(1)	        Y	'N'		삭제 여부
+
+        @Builder
+        public UserInfoUpdateReq(String USER_ID, String PWD, String NAME, String COMP, String TEL, String ADDR, String MOBILE, String EMAL, String HINT_QUES, String HINT_ANS, String GROP_ID, String OPER_SYST_ID, String DEL_YN) {
+            this.USER_ID = USER_ID;
+            this.PWD = PWD;
+            this.NAME = NAME;
+            this.COMP = COMP;
+            this.TEL = TEL;
+            this.ADDR = ADDR;
+            this.MOBILE = MOBILE;
+            this.EMAL = EMAL;
+            this.HINT_QUES = HINT_QUES;
+            this.HINT_ANS = HINT_ANS;
+            this.GROP_ID = GROP_ID;
+            this.OPER_SYST_ID = OPER_SYST_ID;
+            this.DEL_YN = DEL_YN;
+        }
+    }
+
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class UserPswdUpdateReq {
+
+        @NotEmpty
+        @Size(min=1, max=64)
+        private String PWD;             //	N	VARCHAR2(64)	Y			암호
+
+        @Builder
+        public UserPswdUpdateReq(String PWD) {
+            this.PWD = PWD;
+        }
+    }
 }

+ 54 - 0
src/main/java/com/its/op/model/entity/CmmnCdSingle.java

@@ -0,0 +1,54 @@
+package com.its.op.model.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import org.hibernate.annotations.ColumnDefault;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@DynamicInsert @DynamicUpdate
+@Getter
+@NoArgsConstructor
+@Builder
+@AllArgsConstructor
+@Entity
+@Table(name = "TB_CMMN_CD")
+@IdClass(CmmnCdKey.class)
+public class CmmnCdSingle implements Serializable {
+
+    @Id
+    @Column(nullable = false, length = 7)
+    private String CMMN_CD;             //	N	VARCHAR2(7)	    N			공통 코드
+
+    @Id
+    @Column(nullable = false, length = 5)
+    private String CMMN_CLSF_CD;        //	N	VARCHAR2(5)	    N			공통 분류 코드
+
+    @Column(nullable = false, length = 100)
+    private String CMMN_CD_KOR_NM;      //	N	VARCHAR2(100)	Y			공통 코드 한글 명
+
+    @Column(length = 100)
+    private String CMMN_CD_ENGL_NM;     //	N	VARCHAR2(100)	Y			공통 코드 영문 명
+
+    @Column(length = 40)
+    private String CMMN_CD_ABBR;        //	N	VARCHAR2(40)	Y			공통 코드 약어
+
+    @Column(length = 600)
+    private String RMRK;                //	N	VARCHAR2(600)	Y			비고
+
+    @Column(length = 60)
+    private String ATRB1;               //	N	VARCHAR2(60)	Y			속성1
+
+    @Column(length = 60)
+    private String ATRB2;               //	N	VARCHAR2(60)	Y			속성2
+
+    @Column(columnDefinition = "CHAR", length = 1)
+    @ColumnDefault(value = "Y")
+    private String USE_YN;              //	N	CHAR(1)	        Y	'N'		사용 여부
+
+}

+ 70 - 0
src/main/java/com/its/op/model/entity/CmtrGradClsf.java

@@ -0,0 +1,70 @@
+package com.its.op.model.entity;
+
+import com.its.op.model.dto.CmtrGradClsfDto;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.hibernate.annotations.*;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import javax.persistence.*;
+
+@DynamicInsert
+@DynamicUpdate
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Entity
+@Table(name = "TB_CMTR_GRAD_CLSF")
+@IdClass(CmtrGradClsfKey.class)
+public class CmtrGradClsf {
+
+    @Id
+    @Column(nullable = false, unique = true, length = 7)
+    private String  SECT_GRAD_CD;       //	N	VARCHAR2(7)	N			구간 등급 코드
+
+    @Id
+    @Column(nullable = false, unique = true, length = 7)
+    private String  CMTR_GRAD_CD;       //	N	VARCHAR2(7)	N			소통 등급 코드
+
+    @Column(nullable = false, length = 3)
+    private Integer LWST_TRVL_SPED;     //	N	NUMBER(3)	Y	0		최저 통행 속도
+    @Column(nullable = false, length = 3)
+    private Integer HGHS_TRVL_SPED;     //	N	NUMBER(3)	Y	0		최고 통행 속도
+
+    @Column(columnDefinition = "CHAR", length = 1)
+    @ColumnDefault(value = "N")
+    private String CNGS_GRAD_YN;        //	N	CHAR(1)	    Y	'N'		정체 등급 여부
+
+    @OneToOne
+    @JoinColumn(insertable=false, updatable=false, name="SECT_GRAD_CD", referencedColumnName = "SECT_GRAD_CD")
+    private SectGradClsf sect = new SectGradClsf();
+
+    /*@OneToOne//(fetch = FetchType.EAGER)
+    @JoinColumn(insertable=false, updatable=false, name="CMTR_GRAD_CD", referencedColumnName = "CMMN_CD")*/
+    /*@JoinColumns({
+            @JoinColumn(name="CMTR_GRAD_CD", referencedColumnName="CMMN_CD"),
+            @JoinColumn(name="CMTR_GRAD_CD", referencedColumnName="CMMN_CLSF_CD")
+    })
+    private CmmnCd grad = new CmmnCd();*/
+    /*private CmmnCdSingle grad = new CmmnCdSingle();
+    public CmmnCdSingle getGrad() {
+        return this.grad;
+    }*/
+   /* @ManyToOne
+    //@Fetch(FetchMode.JOIN)
+    @JoinColumn(insertable=false, updatable=false, name="CMMN_CLSF_CD")
+    @NotFound(action = NotFoundAction.IGNORE) // 값이 발견되지 않으면 무시
+    private CmmnCd grad = new CmmnCd();*/
+
+    public void updateInfo(CmtrGradClsfDto.CmtrGradClsfUpdateReq req) {
+        this.LWST_TRVL_SPED = req.getLWST_TRVL_SPED();
+        this.HGHS_TRVL_SPED = req.getHGHS_TRVL_SPED();
+        this.CNGS_GRAD_YN   = req.getCNGS_GRAD_YN();
+
+    }
+
+}

+ 21 - 0
src/main/java/com/its/op/model/entity/CmtrGradClsfKey.java

@@ -0,0 +1,21 @@
+package com.its.op.model.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+//@Embeddable
+public class CmtrGradClsfKey implements Serializable {
+
+    //@Id @Column(nullable = false, length = 7)
+    private String  SECT_GRAD_CD;       //	N	VARCHAR2(7)	N			구간 등급 코드
+
+    //@Id @Column(nullable = false, length = 7)
+    private String  CMTR_GRAD_CD;       //	N	VARCHAR2(7)	N			소통 등급 코드
+
+}

+ 62 - 0
src/main/java/com/its/op/model/entity/CnctIntn.java

@@ -0,0 +1,62 @@
+package com.its.op.model.entity;
+
+import com.its.op.model.dto.CnctIntnDto;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.hibernate.annotations.ColumnDefault;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@DynamicInsert
+@DynamicUpdate
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Entity
+@Table(name = "TB_CNCT_INTN")
+public class CnctIntn {
+
+    @Id
+    @Column(nullable = false, unique = true, length = 10)
+    private Long   CNCT_INTN_MNGM_NMBR;     //	N	NUMBER(10)	    N			연계 기관 관리 번호
+
+    @Column(nullable = false, length = 50)
+    private String CNCT_INTN_NM;            //	N	VARCHAR2(50)	Y			연계 기관 명
+
+    @Column(nullable = false, length = 7)
+    private String CNCT_INTN_TYPE_CD;       //	N	VARCHAR2(7)	    Y			연계 기관 유형 코드
+
+    @Column(length = 128)
+    private String CNCT_INTN_TEL;           //	N	VARCHAR2(128)	Y			연계 기관 전화번호
+    @Column(length = 200)
+    private String CNCT_INTN_ADDR;          //	N	VARCHAR2(200)	Y			연계 기관 주소
+    @Column(length = 600)
+    private String RMRK;                    //	N	VARCHAR2(600)	Y			비고
+    @Column(columnDefinition = "CHAR", length = 1)
+    @ColumnDefault(value = "N")
+    private String DEL_YN;                  //	N	CHAR(1)	        Y	'N'		삭제 여부
+
+    public CnctIntn(Long CNCT_INTN_MNGM_NMBR) {
+        this.CNCT_INTN_MNGM_NMBR = CNCT_INTN_MNGM_NMBR;
+    }
+
+    public void updateInfo(CnctIntnDto.CnctIntnUpdateReq req) {
+        //this.CNCT_INTN_MNGM_NMBR = req.getCNCT_INTN_MNGM_NMBR();
+        this.CNCT_INTN_NM        = req.getCNCT_INTN_NM();
+        this.CNCT_INTN_TYPE_CD   = req.getCNCT_INTN_TYPE_CD();
+        this.CNCT_INTN_TEL       = req.getCNCT_INTN_TEL();
+        this.CNCT_INTN_ADDR      = req.getCNCT_INTN_ADDR();
+        this.RMRK                = req.getRMRK();
+        this.DEL_YN              = req.getDEL_YN();
+
+    }
+
+}

+ 3 - 3
src/main/java/com/its/op/model/entity/ParkingLot.java

@@ -29,11 +29,11 @@ public class ParkingLot {
     private String ADDRESS;         //	N	VARCHAR2(100)	Y   주소
     private String PHONE;           //	N	VARCHAR2(20)	Y   전화번호
     @Column(columnDefinition = "NUMBER", length = 3)
-    private int    PARKINGCNT;      //	N	NUMBER(3)	    Y   주차면수
+    private Integer PARKINGCNT;      //	N	NUMBER(3)	    Y   주차면수
     @Column(columnDefinition = "NUMBER", length = 11, precision = 8)
-    private double COORDX;          //	N	NUMBER	        Y   위치 X
+    private Double COORDX;          //	N	NUMBER	        Y   위치 X
     @Column(columnDefinition = "NUMBER", length = 10, precision = 8)
-    private double COORDY;          //	N	NUMBER	        Y   위치 Y
+    private Double COORDY;          //	N	NUMBER	        Y   위치 Y
     @Column(columnDefinition = "CHAR", length = 1)
     private String PISFLAG;         //	N	CHAR(1)	        Y
     private String DISTRICTID;      //	N	VARCHAR2(5)	    Y

+ 6 - 2
src/main/java/com/its/op/model/entity/SectGradStup.java → src/main/java/com/its/op/model/entity/SectGradClsf.java

@@ -7,6 +7,7 @@ import lombok.Setter;
 import org.hibernate.annotations.DynamicInsert;
 import org.hibernate.annotations.DynamicUpdate;
 
+import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.Id;
 import javax.persistence.Table;
@@ -19,10 +20,13 @@ import javax.persistence.Table;
 @AllArgsConstructor
 @Entity
 @Table(name = "TB_SECT_GRAD_CLSF")
-public class SectGradStup {
+public class SectGradClsf {
 
     @Id
+    @Column(nullable = false, unique = true, length = 7)
     private String SECT_GRAD_CD;    //	N	VARCHAR2(7)	    N			구간 등급 코드
-    private String SECT_GRAD_NM;    //	N	VARCHAR2(40)	N			구간 등급 명
+    @Column(nullable = false, length = 40)
+    private String SECT_GRAD_NM;    //	N	VARCHAR2(40)	Y			구간 등급 명
+
     // TB_SECT_GRAD_CLSF ==> TB_SECT_GRAD_STUP
 }

+ 34 - 2
src/main/java/com/its/op/model/entity/UserInfr.java

@@ -1,11 +1,18 @@
 package com.its.op.model.entity;
 
-import lombok.*;
+import com.its.op.model.dto.UserInfrDto;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
 import org.hibernate.annotations.ColumnDefault;
 import org.hibernate.annotations.DynamicInsert;
 import org.hibernate.annotations.DynamicUpdate;
 
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
 
 @DynamicInsert
 @DynamicUpdate
@@ -55,4 +62,29 @@ public class UserInfr {
     @ColumnDefault(value = "N")
     private String DEL_YN;          //	N	CHAR(1)	        Y	'N'		삭제 여부
 
+    public UserInfr(String USER_ID) {
+        this.USER_ID = USER_ID;
+    }
+
+    public void updateInfo(UserInfrDto.UserInfoUpdateReq req) {
+        //this.USER_ID      = req.getUSER_ID();
+        this.PWD          = req.getPWD();
+        this.NAME         = req.getNAME();
+        this.COMP         = req.getCOMP();
+        this.TEL          = req.getTEL();
+        this.ADDR         = req.getADDR();
+        this.MOBILE       = req.getMOBILE();
+        this.EMAL         = req.getEMAL();
+        this.HINT_QUES    = req.getHINT_QUES();
+        this.HINT_ANS     = req.getHINT_ANS();
+        this.GROP_ID      = req.getGROP_ID();
+        this.OPER_SYST_ID = req.getOPER_SYST_ID();
+        this.DEL_YN       = req.getDEL_YN();
+
+    }
+
+    public void updatePswd(UserInfrDto.UserPswdUpdateReq req) {
+        this.PWD          = req.getPWD();
+    }
+
 }

+ 1 - 1
src/main/java/com/its/op/model/vo/database/TbCnctIntnVo.java

@@ -10,7 +10,7 @@ import lombok.ToString;
 @ToString
 @Builder
 public class TbCnctIntnVo {
-    private long   CNCT_INTN_MNGM_NMBR;     //	N	NUMBER(10)	    N			연계 기관 관리 번호
+    private Long   CNCT_INTN_MNGM_NMBR;     //	N	NUMBER(10)	    N			연계 기관 관리 번호
     private String CNCT_INTN_NM;            //	N	VARCHAR2(50)	Y			연계 기관 명
     private String CNCT_INTN_TYPE_CD;       //	N	VARCHAR2(7)	    Y			연계 기관 유형 코드
     private String CNCT_INTN_TEL;           //	N	VARCHAR2(128)	Y			연계 기관 전화번호

+ 2 - 2
src/main/java/com/its/op/repository/SectGradStupRepository.java → src/main/java/com/its/op/repository/CmmnCdSingleRepository.java

@@ -1,10 +1,10 @@
 package com.its.op.repository;
 
-import com.its.op.model.entity.SectGradStup;
+import com.its.op.model.entity.CmmnCdSingle;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface SectGradStupRepository extends JpaRepository<SectGradStup, String> {
+public interface CmmnCdSingleRepository extends JpaRepository<CmmnCdSingle, String> {
 
 }

+ 18 - 0
src/main/java/com/its/op/repository/CmtrGradClsfRepository.java

@@ -0,0 +1,18 @@
+package com.its.op.repository;
+
+import com.its.op.model.entity.CmtrGradClsf;
+import com.its.op.model.entity.CmtrGradClsfKey;
+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 CmtrGradClsfRepository extends JpaRepository<CmtrGradClsf, CmtrGradClsfKey> {
+
+    //@Query(value = "select distinct p from CmtrGradClsf p inner join fetch p.sect inner join fetch p.grad where p.grad.CMMN_CLSF_CD = 'LTC' and p.grad.CMMN_CD = p.CMTR_GRAD_CD")
+    @Query(value = "select distinct p from CmtrGradClsf p inner join fetch p.sect")
+    List<CmtrGradClsf> findAll();
+
+}

+ 9 - 0
src/main/java/com/its/op/repository/CnctIntnRepository.java

@@ -0,0 +1,9 @@
+package com.its.op.repository;
+
+import com.its.op.model.entity.CnctIntn;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface CnctIntnRepository extends JpaRepository<CnctIntn, Long> {
+}

+ 10 - 0
src/main/java/com/its/op/repository/SectGradClsfRepository.java

@@ -0,0 +1,10 @@
+package com.its.op.repository;
+
+import com.its.op.model.entity.SectGradClsf;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface SectGradClsfRepository extends JpaRepository<SectGradClsf, String> {
+
+}

+ 64 - 0
src/main/java/com/its/op/service/database/TbCmtrGradClsfService.java

@@ -0,0 +1,64 @@
+package com.its.op.service.database;
+
+import com.its.op.model.dto.CmtrGradClsfDto;
+import com.its.op.model.entity.CmtrGradClsf;
+import com.its.op.model.entity.CmtrGradClsfKey;
+import com.its.op.repository.CmtrGradClsfRepository;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbCmtrGradClsfService {
+
+    private final CmtrGradClsfRepository repo;
+
+    public List<CmtrGradClsf> findAll() {
+        try {
+            return this.repo.findAll();
+        }
+        catch (Exception e) {
+            log.error("{}.findAll: Exception: {}", getClass().getSimpleName(), e.getMessage());
+        }
+        return new ArrayList<CmtrGradClsf>();
+    }
+
+    public CmtrGradClsf findById(String id, String subId) {
+        try {
+            CmtrGradClsfKey key = new CmtrGradClsfKey(id, subId);
+            Optional<CmtrGradClsf> data = this.repo.findById(key);
+            if (data.isPresent()) {
+                return data.get();
+            }
+        }
+        catch (Exception e) {
+            log.error("{}.findById: Object: {}, Exception: {}", getClass().getSimpleName(), id, e.getMessage());
+        }
+        return null;
+    }
+
+    public CmtrGradClsf updateInfo(CmtrGradClsfDto.CmtrGradClsfUpdateReq req) {
+        try {
+            CmtrGradClsfKey key = new CmtrGradClsfKey(req.getSECT_GRAD_CD(), req.getCMTR_GRAD_CD());
+            Optional<CmtrGradClsf> data = this.repo.findById(key);
+            CmtrGradClsf obj;
+            if (data.isPresent()) {
+                obj = data.get();
+                obj.updateInfo(req);
+                this.repo.save(obj);
+                return obj;
+            }
+        }
+        catch (Exception e) {
+            log.error("{}.updateInfo: Object: {}, Exception: {}", getClass().getSimpleName(), req, e.getMessage());
+        }
+        return null;
+    }
+
+}

+ 78 - 0
src/main/java/com/its/op/service/database/TbCnctIntnService.java

@@ -0,0 +1,78 @@
+package com.its.op.service.database;
+
+import com.its.op.model.dto.CnctIntnDto;
+import com.its.op.model.entity.CnctIntn;
+import com.its.op.repository.CnctIntnRepository;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbCnctIntnService {
+
+    private final CnctIntnRepository repo;
+
+    public List<CnctIntn> findAll() {
+        try {
+            return this.repo.findAll();
+        }
+        catch (Exception e) {
+            log.error("{}.findAll: Exception: {}", getClass().getSimpleName(), e.getMessage());
+        }
+        return new ArrayList<CnctIntn>();
+    }
+    public CnctIntn findById(Long id) {
+        try {
+            Optional<CnctIntn> data = this.repo.findById(id);
+            if (data.isPresent()) {
+                return data.get();
+            }
+        }
+        catch (Exception e) {
+            log.error("{}.findById: Object: {}, Exception: {}", getClass().getSimpleName(), id, e.getMessage());
+        }
+        return null;
+    }
+
+    public CnctIntn mergeInfo(CnctIntnDto.CnctIntnUpdateReq req) {
+        try {
+            Optional<CnctIntn> data = this.repo.findById(req.getCNCT_INTN_MNGM_NMBR());
+            CnctIntn obj;
+            if (data.isPresent()) {
+                obj = data.get();
+            }
+            else {
+                obj = new CnctIntn(req.getCNCT_INTN_MNGM_NMBR());
+            }
+            obj.updateInfo(req);
+            this.repo.save(obj);
+            return obj;
+        }
+        catch (Exception e) {
+            log.error("{}.mergeInfo: Object: {}, Exception: {}", getClass().getSimpleName(), req, e.getMessage());
+        }
+        return null;
+    }
+
+    public CnctIntn deleteById(Long id) {
+        try {
+            Optional<CnctIntn> data = this.repo.findById(id);
+            if (data.isPresent()) {
+                CnctIntn obj = data.get();
+                this.repo.deleteById(id);
+                return obj;
+            }
+        }
+        catch (Exception e) {
+            log.error("{}.deleteById: Object: {}, Exception: {}", getClass().getSimpleName(), id, e.getMessage());
+        }
+        return null;
+    }
+
+}

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

@@ -0,0 +1,101 @@
+package com.its.op.service.database;
+
+import com.its.op.model.dto.UserInfrDto;
+import com.its.op.model.entity.UserInfr;
+import com.its.op.repository.UserInfrRepository;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbUserInfrService {
+
+    private final UserInfrRepository repo;
+
+    /*public ResponseEntity<List<UserInfrDto>> findAll(HttpServletRequest request) {
+        List<UserInfr> result = this.repository.findAll();
+        List<UserInfrDto> response = this.modelMapper.map(result, new TypeToken<List<UserInfrDto>>() {}.getType());
+        return new ResponseEntity<>(response, HttpStatus.OK);
+    }*/
+
+    public List<UserInfr> findAll() {
+        try {
+            return this.repo.findAll();
+        }
+        catch (Exception e) {
+            log.error("{}.findAll: Exception: {}", getClass().getSimpleName(), e.getMessage());
+        }
+        return new ArrayList<UserInfr>();
+    }
+    public UserInfr findById(String id) {
+        try {
+            Optional<UserInfr> data = this.repo.findById(id);
+            if (data.isPresent()) {
+                return data.get();
+            }
+        }
+        catch (Exception e) {
+            log.error("{}.findById: Object: {}, Exception: {}", getClass().getSimpleName(), id, e.getMessage());
+        }
+        return null;
+    }
+
+    public UserInfr mergeInfo(UserInfrDto.UserInfoUpdateReq req) {
+        try {
+            Optional<UserInfr> data = this.repo.findById(req.getUSER_ID());
+            UserInfr obj;
+            if (data.isPresent()) {
+                obj = data.get();
+            }
+            else {
+                obj = new UserInfr(req.getUSER_ID());
+            }
+            obj.updateInfo(req);
+            this.repo.save(obj);
+            return obj;
+        }
+        catch (Exception e) {
+            log.error("{}.mergeInfo: Object: {}, Exception: {}", getClass().getSimpleName(), req, e.getMessage());
+        }
+        return null;
+    }
+
+    public UserInfr deleteById(String id) {
+        try {
+            Optional<UserInfr> data = this.repo.findById(id);
+            if (data.isPresent()) {
+                UserInfr obj = data.get();
+                this.repo.deleteById(id);
+                return obj;
+            }
+        }
+        catch (Exception e) {
+            log.error("{}.deleteById: Object: {}, Exception: {}", getClass().getSimpleName(), id, e.getMessage());
+        }
+        return null;
+    }
+    
+    // 비밀번호 변경, USER_ID, PWD 항목만 확인
+    public UserInfr updatePswdById(String id, UserInfrDto.UserPswdUpdateReq req) {
+        try {
+            Optional<UserInfr> data = this.repo.findById(id);
+            if (data.isPresent()) {
+                UserInfr obj = data.get();
+                obj.updatePswd(req);
+                this.repo.save(obj);
+                return obj;
+            }
+        }
+        catch (Exception e) {
+            log.error("{}.updatePswdById: Object: {}, {}, Exception: {}", getClass().getSimpleName(), id, req, e.getMessage());
+        }
+        return null;
+    }
+
+}