Browse Source

last week....

shjung 3 years ago
parent
commit
ea2c4e9a84

+ 15 - 2
src/main/java/com/its/op/controller/database/TbIfscController.java

@@ -56,7 +56,7 @@ public class TbIfscController {
         return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
     }
 
-    @ApiOperation(value = "서비스링크개별구성정보조회(TB_IFSC)", response = IfscLinkRltnDto.IfscLinkRltnInfo.class)
+    @ApiOperation(value = "서비스링크개별구성정보조회(TB_IFSC_LINK_RLTN)", response = IfscLinkRltnDto.IfscLinkRltnInfo.class)
     @GetMapping(value = "/link-rltn/{id}", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<IfscLinkRltnDto.IfscLinkRltnInfo>> findLinkRltnById(@PathVariable final Long id) {
         List<IfscLinkRltn> objs = this.service.findLinkRltnById(id);
@@ -65,9 +65,22 @@ public class TbIfscController {
             for (IfscLinkRltn obj : objs) {
                 result.add(new IfscLinkRltnDto.IfscLinkRltnInfo(obj));
             }
-            log.error("{}", result);
             return new ResponseEntity<>(result, HttpStatus.OK);
         }
         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"})
+    public ResponseEntity<List<IfscLinkRltnDto.IfscLinkRltnUpdateReq>> updateNameById(
+            @PathVariable final Long id,
+            @RequestBody final List<IfscLinkRltnDto.IfscLinkRltnUpdateReq> req) {
+        List<IfscLinkRltnDto.IfscLinkRltnUpdateReq> obj = this.service.updateLinkRltn(id, req);
+        if (obj != null) {
+            return new ResponseEntity<>(obj, HttpStatus.OK);
+        }
+        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
+    }
+
 }

+ 69 - 18
src/main/java/com/its/op/controller/database/TbRoadController.java

@@ -1,35 +1,86 @@
 package com.its.op.controller.database;
 
-import com.its.op.controller.AbstractDatabaseController;
-import com.its.op.service.database.impl.TbRoadServiceImpl;
-import com.its.op.model.vo.database.TbRoadVo;
+import com.its.op.model.dto.RoadDto;
+import com.its.op.model.dto.RoadIfscRltnDto;
+import com.its.op.model.entity.Road;
+import com.its.op.model.entity.RoadIfscRltn;
+import com.its.op.service.database.TbRoadService;
 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 java.util.ArrayList;
+import java.util.List;
 
 @Slf4j
+@RequiredArgsConstructor
 @RestController
-@RequestMapping("/api/database//tb-road")
+@RequestMapping("/api/database/tb-road")
 @Api(tags = "09.기초데이터관리-04.도로", description="도로")
-public class TbRoadController extends AbstractDatabaseController<TbRoadVo> {
+public class TbRoadController {
 
-    private final TbRoadServiceImpl service;
+    private final TbRoadService service;
 
-    public TbRoadController(TbRoadServiceImpl service) {
-        super(service);
-        this.service = service;
+    @ApiOperation(value = "전체조회(TB_IFSC)", response = RoadDto.RoadInfo.class)
+    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<RoadDto.RoadInfo>> findAll() {
+        List<Road> data = this.service.findAll();
+        List<RoadDto.RoadInfo> result = new ArrayList<>();
+        for (Road obj: data) {
+            result.add(new RoadDto.RoadInfo(obj));
+        }
+        return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
-    @ApiOperation(value = "이름변경(TB_ROAD)", response = TbRoadVo.class)
-    @PutMapping(value = "/name/", produces = {"application/json; charset=utf8"})
-    public int updateNameById(@RequestBody TbRoadVo obj, HttpServletRequest request) {
-        return this.service.updateNameById(obj);
+    @ApiOperation(value = "서비스링크개별조회(TB_IFSC)", 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);
+        if (obj != null) {
+            return new ResponseEntity<>(new RoadDto.RoadInfo(obj), HttpStatus.OK);
+        }
+        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
+    }
+
+    @ApiOperation(value = "구간명변경(TB_IFSC)", 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);
+        if (obj != null) {
+            return new ResponseEntity<>(new RoadDto.RoadInfo(obj), HttpStatus.OK);
+        }
+        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
+    }
+
+    @ApiOperation(value = "도로구간개별구성정보조회(TB_ROAD_IFSC_RLTN)", response = RoadIfscRltnDto.RoadIfscRltnUpdateReq.class)
+    @GetMapping(value = "/road-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) {
+            List<RoadIfscRltnDto.RoadIfscRltnInfo> result = new ArrayList<>();
+            for (RoadIfscRltn obj : objs) {
+                result.add(new RoadIfscRltnDto.RoadIfscRltnInfo(obj));
+            }
+            return new ResponseEntity<>(result, HttpStatus.OK);
+        }
+        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
+    }
+
+
+    @ApiOperation(value = "도로구간개별구성정보변경/생성(TB_ROAD_IFSC_RLTN)", response = RoadDto.RoadInfo.class)
+    @PutMapping(value = "/road-rltn/{id}", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<RoadIfscRltnDto.RoadIfscRltnUpdateReq>> updateNameById(
+            @PathVariable final Long id,
+            @RequestBody final List<RoadIfscRltnDto.RoadIfscRltnUpdateReq> req) {
+        List<RoadIfscRltnDto.RoadIfscRltnUpdateReq> obj = this.service.updateLinkRltn(id, req);
+        if (obj != null) {
+            return new ResponseEntity<>(obj, HttpStatus.OK);
+        }
+        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
     }
 
 }

+ 1 - 1
src/main/java/com/its/op/controller/database/TbIfscControllerMybatis.java → src/main/java/com/its/op/controller/database/mybatis/TbIfscControllerMybatis.java

@@ -1,4 +1,4 @@
-package com.its.op.controller.database;
+package com.its.op.controller.database.mybatis;
 
 import com.its.op.controller.AbstractDatabaseController;
 import com.its.op.model.vo.database.TbIfscVo;

+ 1 - 1
src/main/java/com/its/op/controller/database/TbLinkControllerMybatis.java → src/main/java/com/its/op/controller/database/mybatis/TbLinkControllerMybatis.java

@@ -1,4 +1,4 @@
-package com.its.op.controller.database;
+package com.its.op.controller.database.mybatis;
 
 import com.its.op.controller.AbstractDatabaseController;
 import com.its.op.model.vo.database.TbLinkVo;

+ 1 - 1
src/main/java/com/its/op/controller/database/TbNodeControllerMybatis.java → src/main/java/com/its/op/controller/database/mybatis/TbNodeControllerMybatis.java

@@ -1,4 +1,4 @@
-package com.its.op.controller.database;
+package com.its.op.controller.database.mybatis;
 
 import com.its.op.controller.AbstractDatabaseController;
 import com.its.op.model.vo.database.TbNodeVo;

+ 35 - 0
src/main/java/com/its/op/controller/database/mybatis/TbRoadControllerMybatis.java

@@ -0,0 +1,35 @@
+package com.its.op.controller.database.mybatis;
+
+import com.its.op.controller.AbstractDatabaseController;
+import com.its.op.model.vo.database.TbRoadVo;
+import com.its.op.service.database.impl.TbRoadServiceImpl;
+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 org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Slf4j
+@RestController
+@RequestMapping("/api-mybatis/database/tb-road")
+@Api(tags = "09.기초데이터관리-04.도로", description="도로")
+public class TbRoadControllerMybatis extends AbstractDatabaseController<TbRoadVo> {
+
+    private final TbRoadServiceImpl service;
+
+    public TbRoadControllerMybatis(TbRoadServiceImpl service) {
+        super(service);
+        this.service = service;
+    }
+
+    @ApiOperation(value = "이름변경(TB_ROAD)", response = TbRoadVo.class)
+    @PutMapping(value = "/name/", produces = {"application/json; charset=utf8"})
+    public int updateNameById(@RequestBody TbRoadVo obj, HttpServletRequest request) {
+        return this.service.updateNameById(obj);
+    }
+
+}

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

@@ -10,7 +10,6 @@ import java.io.Serializable;
 public class IfscLinkRltnDto implements Serializable {
 
     @Getter
-    @ToString
     public static class IfscLinkRltnInfo {
         private final Long    IFSC_ID;            //	N	NUMBER(10)	    N			정보제공구간 ID
         private final Long    LINK_ID;            //	N	NUMBER(10)	    N			링크 ID

+ 60 - 17
src/main/java/com/its/op/model/dto/RoadDto.java

@@ -1,26 +1,69 @@
 package com.its.op.model.dto;
 
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
+import com.its.op.global.CodeManager;
+import com.its.op.global.NodeManager;
+import com.its.op.model.entity.Road;
+import lombok.*;
 
 import java.io.Serializable;
 
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
 public class RoadDto implements Serializable {
 
-    private Long    ROAD_ID;        //	N	NUMBER(10)	    N			도로 ID
-    private String  ROAD_NAME;      //	N	VARCHAR2(100)	Y			도로 명
-    private String  DRCT_CD;        //	N	VARCHAR2(7)	    Y			방향 코드
-    private String  STRT_NM;        //	N	VARCHAR2(100)	Y			시점 명
-    private String  END_NM;         //	N	VARCHAR2(100)	Y			종점 명
-    private Integer SECT_LNGT;      //	N	NUMBER(5)	    Y			구간 길이
-    private Long    F_NODE_ID;      //	N	NUMBER(10)	    Y			시작 노드 ID
-    private Long    T_NODE_ID;      //	N	NUMBER(10)	    Y			종료 노드 ID
-    private String  SECT_GRAD_CD;   //	N	VARCHAR2(7)	    Y			구간 등급 코드
-    private String  AREA_CD;        //	N	VARCHAR2(7)	    Y			지역 코드
-    private String  DEL_YN;         //	N	CHAR(1)	        Y	'N'		삭제 여부
+    @Getter
+    public static class RoadInfo {
+        private final Long    ROAD_ID;        //	N	NUMBER(10)	    N			도로 ID
+        private final String  ROAD_NAME;      //	N	VARCHAR2(100)	Y			도로 명
+        private final String  DRCT_CD;        //	N	VARCHAR2(7)	    Y			방향 코드
+        private final String  STRT_NM;        //	N	VARCHAR2(100)	Y			시점 명
+        private final String  END_NM;         //	N	VARCHAR2(100)	Y			종점 명
+        private final Integer SECT_LNGT;      //	N	NUMBER(5)	    Y			구간 길이
+        private final Long    F_NODE_ID;      //	N	NUMBER(10)	    Y			시작 노드 ID
+        private final Long    T_NODE_ID;      //	N	NUMBER(10)	    Y			종료 노드 ID
+        private final String  SECT_GRAD_CD;   //	N	VARCHAR2(7)	    Y			구간 등급 코드
+        private final String  AREA_CD;        //	N	VARCHAR2(7)	    Y			지역 코드
+        private final String  DEL_YN;         //	N	CHAR(1)	        Y	'N'		삭제 여부
 
+        private final String FROM_NODE;
+        private final String TO_NODE;
+        private final String DRCT_CD_DESC;
+        private final String SECT_GRAD_CD_DESC;
+
+        public RoadInfo(Road entity) {
+            this.ROAD_ID           = entity.getROAD_ID();
+            this.ROAD_NAME         = entity.getROAD_NAME();
+            this.DRCT_CD           = entity.getDRCT_CD();
+            this.STRT_NM           = entity.getSTRT_NM();
+            this.END_NM            = entity.getEND_NM();
+            this.SECT_LNGT         = entity.getSECT_LNGT();
+            this.F_NODE_ID         = entity.getF_NODE_ID();
+            this.T_NODE_ID         = entity.getT_NODE_ID();
+            this.SECT_GRAD_CD      = entity.getSECT_GRAD_CD();
+            this.AREA_CD           = entity.getAREA_CD();
+            this.DEL_YN            = entity.getDEL_YN();
+
+            this.FROM_NODE = NodeManager.getNodeName(this.F_NODE_ID);
+            this.TO_NODE = NodeManager.getNodeName(this.T_NODE_ID);
+
+            this.DRCT_CD_DESC = CodeManager.getCodeDesc(CodeManager.DRCT_CD, this.DRCT_CD);
+            this.SECT_GRAD_CD_DESC = CodeManager.getCodeDesc(CodeManager.SECT_GRAD_CD, this.SECT_GRAD_CD);
+        }
+    }
+
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class RoadNameUpdateReq {
+
+        private String ROAD_NAME;
+        private String STRT_NM;
+        private String END_NM;
+
+        @Builder
+        public RoadNameUpdateReq(String ROAD_NAME, String STRT_NM, String END_NM) {
+            this.ROAD_NAME = ROAD_NAME;
+            this.STRT_NM = STRT_NM;
+            this.END_NM = END_NM;
+        }
+    }
 }

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

@@ -0,0 +1,82 @@
+package com.its.op.model.dto;
+
+import com.its.op.global.CodeManager;
+import com.its.op.model.entity.RoadIfscRltn;
+import lombok.*;
+
+import java.io.Serializable;
+
+public class RoadIfscRltnDto implements Serializable {
+
+    @Getter
+    public static class RoadIfscRltnInfo {
+        private final Long    ROAD_ID;            //	N	NUMBER(10)	    N			도로 ID
+        private final Long    IFSC_ID;            //	N	NUMBER(10)	    N			정보제공구간 ID
+        private final Integer ORD;                //	N	NUMBER(3)	    N			링크 ID
+
+/*
+        private final Long    F_NODE_ID;          //	N	NUMBER(10)	    Y			시작노드ID
+        private final Long    T_NODE_ID;          //	N	NUMBER(10)	    Y			종료노드ID
+        private final Integer LANES;              //	N	NUMBER(4)	    Y			차로수
+        private final String  ROAD_RANK;          //	N	VARCHAR2(3)	    Y			도로등급
+        private final String  ROAD_TYPE;          //	N	VARCHAR2(3)	    Y			도로유형
+        private final String  ROAD_NO;            //	N	VARCHAR2(5)	    Y			도로번호
+        private final String  ROAD_NAME;          //	N	VARCHAR2(50)	Y			도로명
+        private final Integer LINK_LENG;          //	N	NUMBER(5)	    Y			연장
+*/
+        private final String  SECT_GRAD_CD;       //	N	VARCHAR2(7)	    Y			구간 등급 코드
+
+/*
+        private final String FROM_NODE;
+        private final String TO_NODE;
+        private final String ROAD_RANK_DESC;
+        private final String ROAD_TYPE_DESC;
+*/
+        private final String SECT_GRAD_CD_DESC;
+
+        public RoadIfscRltnInfo(RoadIfscRltn entity) {
+            this.ROAD_ID      = entity.getROAD_ID();
+            this.IFSC_ID      = entity.getIFSC_ID();
+            this.ORD          = entity.getORD();
+/*
+            this.F_NODE_ID    = entity.getLink().getF_NODE();
+            this.T_NODE_ID    = entity.getLink().getT_NODE();
+            this.LANES        = entity.getLink().getLANES();
+            this.ROAD_RANK    = entity.getLink().getROAD_RANK();
+            this.ROAD_TYPE    = entity.getLink().getROAD_TYPE();
+            this.ROAD_NO      = entity.getLink().getROAD_NO();
+            this.ROAD_NAME    = entity.getLink().getROAD_NAME();
+            this.LINK_LENG    = entity.getLink().getLINK_LENG();
+*/
+            this.SECT_GRAD_CD = entity.getIfsc().getSECT_GRAD_CD();
+
+/*
+            this.FROM_NODE = NodeManager.getNodeName(this.F_NODE_ID);
+            this.TO_NODE = NodeManager.getNodeName(this.T_NODE_ID);
+
+            this.ROAD_RANK_DESC = CodeManager.getCodeDesc(CodeManager.ROAD_RANK, this.ROAD_RANK);
+            this.ROAD_TYPE_DESC = CodeManager.getCodeDesc(CodeManager.ROAD_TYPE, this.ROAD_TYPE);
+*/
+            this.SECT_GRAD_CD_DESC = CodeManager.getCodeDesc(CodeManager.SECT_GRAD_CD, this.SECT_GRAD_CD);
+        }
+    }
+
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class RoadIfscRltnUpdateReq {
+
+        private Long    ROAD_ID;
+        private Long    IFSC_ID;
+        private Integer ORD;
+
+        @Builder
+        public RoadIfscRltnUpdateReq(Long ROAD_ID, Long IFSC_ID, Integer ORD) {
+            this.ROAD_ID = ROAD_ID;
+            this.IFSC_ID = IFSC_ID;
+            this.ORD = ORD;
+        }
+    }
+
+}

+ 1 - 1
src/main/java/com/its/op/model/entity/IfscLinkRltn.java

@@ -25,7 +25,7 @@ public class IfscLinkRltn {
     @Id @Column(nullable = false, length = 3)
     private Integer ORD;                //	N	NUMBER(3)	    N			링크 ID
 
-    @OneToOne(fetch = FetchType.EAGER)
+    @OneToOne//(fetch = FetchType.EAGER)
     @JoinColumn(insertable=false, updatable=false, name="LINK_ID", referencedColumnName = "LINK_ID")
     Link link = new Link();
 }

+ 7 - 0
src/main/java/com/its/op/model/entity/Road.java

@@ -1,5 +1,6 @@
 package com.its.op.model.entity;
 
+import com.its.op.model.dto.RoadDto;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
@@ -49,4 +50,10 @@ public class Road {
     @ColumnDefault(value = "N")
     private String  DEL_YN;         //	N	CHAR(1)	        Y	'N'		삭제 여부
 
+
+    public void updateName(RoadDto.RoadNameUpdateReq req) {
+        this.ROAD_NAME = req.getROAD_NAME();
+        this.STRT_NM = req.getSTRT_NM();
+        this.END_NM = req.getEND_NM();
+    }
 }

+ 31 - 0
src/main/java/com/its/op/model/entity/RoadIfscRltn.java

@@ -0,0 +1,31 @@
+package com.its.op.model.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.*;
+
+@DynamicInsert
+@DynamicUpdate
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+@Entity
+@Table(name = "TB_ROAD_IFSC_RLTN")
+@IdClass(RoadIfscRltnKey.class)
+public class RoadIfscRltn {
+
+    @Id @Column(nullable = false, length = 10)
+    private Long    ROAD_ID;            //	N	NUMBER(10)	    N			도로 ID
+    @Id @Column(nullable = false, length = 10)
+    private Long    IFSC_ID;            //	N	NUMBER(10)	    N			정보제공구간 ID
+    @Id @Column(nullable = false, length = 3)
+    private Integer ORD;                //	N	NUMBER(3)	    N			링크 ID
+
+    @OneToOne//(fetch = FetchType.EAGER)
+    @JoinColumn(insertable=false, updatable=false, name="IFSC_ID", referencedColumnName = "IFSC_ID")
+    Ifsc ifsc = new Ifsc();
+}

+ 22 - 0
src/main/java/com/its/op/model/entity/RoadIfscRltnKey.java

@@ -0,0 +1,22 @@
+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 RoadIfscRltnKey implements Serializable {
+
+    //@Id @Column(nullable = false, length = 10)
+    private Long    ROAD_ID;            //	N	NUMBER(10)	    N			도로 ID
+    //@Id @Column(nullable = false, length = 10)
+    private Long    IFSC_ID;            //	N	NUMBER(10)	    N			정보제공구간 ID
+    //@Id @Column(nullable = false, length = 3)
+    private Integer ORD;                //	N	NUMBER(3)	    N			링크 ID
+
+}

+ 4 - 2
src/main/java/com/its/op/repository/IfscLinkRltnRepository.java

@@ -1,6 +1,7 @@
 package com.its.op.repository;
 
 import com.its.op.model.entity.IfscLinkRltn;
+import com.its.op.model.entity.IfscLinkRltnKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
@@ -8,10 +9,11 @@ import org.springframework.stereotype.Repository;
 import java.util.List;
 
 @Repository
-public interface IfscLinkRltnRepository extends JpaRepository<IfscLinkRltn, Long> {
+public interface IfscLinkRltnRepository extends JpaRepository<IfscLinkRltn, IfscLinkRltnKey> {
 
     @Query(value = "select distinct p from IfscLinkRltn p inner join fetch p.link where p.IFSC_ID = ?1")
     //@Query(value = "select p from IfscLinkRltn p where p.IFSC_ID = ?1")
     //@Query(value = "SELECT distinct t FROM Ifsc t inner join t.from_node inner join t.to_node left outer join fetch t.traf ")
-    List<IfscLinkRltn> findLinkRltnById(Long IFSC_ID);
+    List<IfscLinkRltn> findRltnById(Long IFSC_ID);
+
 }

+ 17 - 0
src/main/java/com/its/op/repository/RoadIfscRltnRepository.java

@@ -0,0 +1,17 @@
+package com.its.op.repository;
+
+import com.its.op.model.entity.RoadIfscRltn;
+import com.its.op.model.entity.RoadIfscRltnKey;
+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 RoadIfscRltnRepository extends JpaRepository<RoadIfscRltn, RoadIfscRltnKey> {
+
+    @Query(value = "select distinct p from RoadIfscRltn p inner join fetch p.ifsc where p.ROAD_ID = ?1")
+    List<RoadIfscRltn> findRltnById(Long ROAD_ID);
+
+}

+ 27 - 2
src/main/java/com/its/op/service/database/TbIfscService.java

@@ -1,14 +1,17 @@
 package com.its.op.service.database;
 
 import com.its.op.model.dto.IfscDto;
+import com.its.op.model.dto.IfscLinkRltnDto;
 import com.its.op.model.entity.Ifsc;
 import com.its.op.model.entity.IfscLinkRltn;
+import com.its.op.model.entity.IfscLinkRltnKey;
 import com.its.op.repository.IfscLinkRltnRepository;
 import com.its.op.repository.IfscRepository;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import javax.transaction.Transactional;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
@@ -19,7 +22,7 @@ import java.util.Optional;
 public class TbIfscService {
 
     private final IfscRepository repo;
-    private final IfscLinkRltnRepository repoLinkRltn;
+    private final IfscLinkRltnRepository repoRltn;
 
     public List<Ifsc> findAll() {
         try {
@@ -62,7 +65,7 @@ public class TbIfscService {
 
     public List<IfscLinkRltn> findLinkRltnById(Long id) {
         try {
-            List<IfscLinkRltn> data = this.repoLinkRltn.findLinkRltnById(id);
+            List<IfscLinkRltn> data = this.repoRltn.findRltnById(id);
             return data;
         }
         catch (Exception e) {
@@ -70,4 +73,26 @@ public class TbIfscService {
         }
         return null;
     }
+
+    @Transactional
+    public List<IfscLinkRltnDto.IfscLinkRltnUpdateReq> updateLinkRltn(Long id, List<IfscLinkRltnDto.IfscLinkRltnUpdateReq> req) {
+        try {
+            // 기존 데이터를 모두 삭제
+            List<IfscLinkRltn> lists = this.repoRltn.findRltnById(id);
+            for (IfscLinkRltn delObj : lists) {
+                this.repoRltn.deleteById(new IfscLinkRltnKey(delObj.getIFSC_ID(), delObj.getLINK_ID(), delObj.getORD()));
+            }
+
+            // 데이터 다시 입력
+            for (IfscLinkRltnDto.IfscLinkRltnUpdateReq obj : req) {
+                IfscLinkRltn data = new IfscLinkRltn(obj.getIFSC_ID(), obj.getLINK_ID(), obj.getORD(), null);
+                this.repoRltn.save(data);
+            }
+            return req;
+        }
+        catch (Exception e) {
+            log.error("{}.updateLinkRltn: Object: {}, {}, Exception: {}", getClass().getSimpleName(), id, req, e.getMessage());
+        }
+        return null;
+    }
 }

+ 98 - 0
src/main/java/com/its/op/service/database/TbRoadService.java

@@ -0,0 +1,98 @@
+package com.its.op.service.database;
+
+import com.its.op.model.dto.RoadDto;
+import com.its.op.model.dto.RoadIfscRltnDto;
+import com.its.op.model.entity.Road;
+import com.its.op.model.entity.RoadIfscRltn;
+import com.its.op.model.entity.RoadIfscRltnKey;
+import com.its.op.repository.RoadIfscRltnRepository;
+import com.its.op.repository.RoadRepository;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbRoadService {
+
+    private final RoadRepository repo;
+    private final RoadIfscRltnRepository repoRltn;
+
+    public List<Road> findAll() {
+        try {
+            return this.repo.findAll();
+        }
+        catch (Exception e) {
+            log.error("{}.findAll: Exception: {}", getClass().getSimpleName(), e.getMessage());
+        }
+        return new ArrayList<Road>();
+    }
+    public Road findById(Long id) {
+        try {
+            Optional<Road> 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 Road updateNameById(Long id, RoadDto.RoadNameUpdateReq req) {
+        try {
+            Optional<Road> data = this.repo.findById(id);
+            if (data.isPresent()) {
+                Road obj = data.get();
+                obj.updateName(req);
+                this.repo.save(obj);
+                return obj;
+            }
+        }
+        catch (Exception e) {
+            log.error("{}.updateNameById: Object: {}, Exception: {}", getClass().getSimpleName(), req, e.getMessage());
+        }
+        return null;
+    }
+
+    public List<RoadIfscRltn> findLinkRltnById(Long id) {
+        try {
+            List<RoadIfscRltn> data = this.repoRltn.findRltnById(id);
+            return data;
+        }
+        catch (Exception e) {
+            log.error("{}.findById: Object: {}, Exception: {}", getClass().getSimpleName(), id, e.getMessage());
+        }
+        return null;
+    }
+
+    @Transactional
+    public List<RoadIfscRltnDto.RoadIfscRltnUpdateReq> updateLinkRltn(Long id, List<RoadIfscRltnDto.RoadIfscRltnUpdateReq> req) {
+        try {
+            // 기존 데이터를 모두 삭제
+            List<RoadIfscRltn> lists = this.repoRltn.findRltnById(id);
+            for (RoadIfscRltn delObj : lists) {
+                this.repoRltn.deleteById(new RoadIfscRltnKey(delObj.getROAD_ID(), delObj.getIFSC_ID(), delObj.getORD()));
+            }
+
+            // 데이터 다시 입력
+            for (RoadIfscRltnDto.RoadIfscRltnUpdateReq obj : req) {
+                RoadIfscRltn data = new RoadIfscRltn(obj.getROAD_ID(), obj.getIFSC_ID(), obj.getORD(), null);
+                this.repoRltn.save(data);
+            }
+            return req;
+        }
+        catch (Exception e) {
+            log.error("{}.updateLinkRltn: Object: {}, {}, Exception: {}", getClass().getSimpleName(), id, req, e.getMessage());
+        }
+        return null;
+    }
+}