瀏覽代碼

atrd 업데이트 reamin....

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

+ 60 - 25
src/main/java/com/its/op/controller/database/TbAtrdController.java

@@ -1,51 +1,86 @@
 package com.its.op.controller.database;
 
-import com.its.op.controller.AbstractDatabaseController;
-import com.its.op.service.database.impl.TbAtrdServiceImpl;
-import com.its.op.model.vo.database.TbAtrdRoadRltnVo;
-import com.its.op.model.vo.database.TbIfscVo;
+import com.its.op.model.dto.AtrdDto;
+import com.its.op.model.dto.AtrdRoadRltnDto;
+import com.its.op.model.dto.RoadIfscRltnDto;
+import com.its.op.model.entity.Atrd;
+import com.its.op.model.entity.AtrdRoadRltn;
+import com.its.op.service.database.TbAtrdService;
 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.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
 import java.util.List;
 
 @Slf4j
+@RequiredArgsConstructor
 @RestController
 @RequestMapping("/api/database/tb-atrd")
 @Api(tags = "09.기초데이터관리-05.간선도로관리", description="간선도로관리")
-public class TbAtrdController extends AbstractDatabaseController<TbIfscVo> {
+public class TbAtrdController {
 
-    private final TbAtrdServiceImpl service;
+    private final TbAtrdService service;
 
-    public TbAtrdController(TbAtrdServiceImpl service) {
-        super(service);
-        this.service = service;
+    @ApiOperation(value = "전체조회(TB_ATRD)", response = AtrdDto.AtrdInfo.class)
+    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdDto.AtrdInfo>> findAll() {
+        List<Atrd> data = this.service.findAll();
+        List<AtrdDto.AtrdInfo> result = new ArrayList<>();
+        for (Atrd obj: data) {
+            result.add(new AtrdDto.AtrdInfo(obj));
+        }
+        return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
-    @ApiOperation(value = "도로구성정보전체조회(TB_ATRD, TB_ATRD_ROAD_RLTN, TB_ROAD)", response = TbAtrdRoadRltnVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/road/", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<List<TbAtrdRoadRltnVo>> findAllRoadRltn(HttpServletRequest request) {
-        List<TbAtrdRoadRltnVo> result = this.service.findAllRoadRltn();
-        return new ResponseEntity<>(result, HttpStatus.OK);
+    @ApiOperation(value = "서비스링크개별조회(TB_ATRD)", response = AtrdDto.AtrdInfo.class)
+    @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<AtrdDto.AtrdInfo> findById(@PathVariable final String id) {
+        Atrd obj = this.service.findById(id);
+        if (obj != null) {
+            return new ResponseEntity<>(new AtrdDto.AtrdInfo(obj), HttpStatus.OK);
+        }
+        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
     }
 
-    @ApiOperation(value = "도로구성정보전체조회(TB_ATRD, TB_ATRD_ROAD_RLTN, TB_ROAD)", response = TbAtrdRoadRltnVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/road/{id}", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<TbAtrdRoadRltnVo> findByIdRoadRltn(@PathVariable("id") String id, HttpServletRequest request) {
-        TbAtrdRoadRltnVo result = this.service.findByIdRoadRltn(id);
-        return new ResponseEntity<>(result, HttpStatus.OK);
+    @ApiOperation(value = "구간명변경(TB_ATRD)", response = AtrdDto.AtrdInfo.class)
+    @PutMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<AtrdDto.AtrdInfo> updateNameById(@PathVariable final String id, @RequestBody final AtrdDto.AtrdNameUpdateReq req) {
+        Atrd obj = this.service.updateNameById(id, req);
+        if (obj != null) {
+            return new ResponseEntity<>(new AtrdDto.AtrdInfo(obj), HttpStatus.OK);
+        }
+        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
+    }
+
+    @ApiOperation(value = "간선도로구간개별구성정보조회(TB_ATRD_ROAD_RLTN)", response = RoadIfscRltnDto.RoadIfscRltnUpdateReq.class)
+    @GetMapping(value = "/atrd-rltn/{id}", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdRoadRltnDto.AtrdRoadRltnInfo>> findLinkRltnById(@PathVariable final String id) {
+        List<AtrdRoadRltn> objs = this.service.findLinkRltnById(id);
+        if (objs != null) {
+            List<AtrdRoadRltnDto.AtrdRoadRltnInfo> result = new ArrayList<>();
+            for (AtrdRoadRltn obj : objs) {
+                result.add(new AtrdRoadRltnDto.AtrdRoadRltnInfo(obj));
+            }
+            return new ResponseEntity<>(result, HttpStatus.OK);
+        }
+        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
     }
 
-    @ApiOperation(value = "도로구성정보업데이트(TB_ATRD, TB_ATRD_ROAD_RLTN, TB_ROAD)", response = TbAtrdRoadRltnVo.class, responseContainer = "ArrayList")
-    @PutMapping(value = "/road/", produces = {"application/json; charset=utf8"})
-    public int updateByIdRoadRltn(@RequestBody TbAtrdRoadRltnVo obj, HttpServletRequest request) {
-        log.error("{}", obj);
-        return this.service.updateByIdRoadRltn(obj);
+    @ApiOperation(value = "간선도로구간개별구성정보변경/생성(TB_ATRD_ROAD_RLTN)", response = AtrdDto.AtrdInfo.class)
+    @PutMapping(value = "/atrd-rltn/{id}", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdRoadRltnDto.AtrdRoadRltnUpdateReq>> updateNameById(
+            @PathVariable final String id,
+            @RequestBody final List<AtrdRoadRltnDto.AtrdRoadRltnUpdateReq> req) {
+        List<AtrdRoadRltnDto.AtrdRoadRltnUpdateReq> obj = this.service.updateLinkRltn(id, req);
+        if (obj != null) {
+            return new ResponseEntity<>(obj, HttpStatus.OK);
+        }
+        return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
     }
 
 }

+ 51 - 0
src/main/java/com/its/op/controller/database/mybatis/TbAtrdControllerMybatis.java

@@ -0,0 +1,51 @@
+package com.its.op.controller.database.mybatis;
+
+import com.its.op.controller.AbstractDatabaseController;
+import com.its.op.model.vo.database.TbAtrdRoadRltnVo;
+import com.its.op.model.vo.database.TbIfscVo;
+import com.its.op.service.database.impl.TbAtrdServiceImpl;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+@Slf4j
+@RestController
+@RequestMapping("/api-mybatis/database/tb-atrd")
+@Api(tags = "09.기초데이터관리-05.간선도로관리", description="간선도로관리")
+public class TbAtrdControllerMybatis extends AbstractDatabaseController<TbIfscVo> {
+
+    private final TbAtrdServiceImpl service;
+
+    public TbAtrdControllerMybatis(TbAtrdServiceImpl service) {
+        super(service);
+        this.service = service;
+    }
+
+    @ApiOperation(value = "도로구성정보전체조회(TB_ATRD, TB_ATRD_ROAD_RLTN, TB_ROAD)", response = TbAtrdRoadRltnVo.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/road/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<TbAtrdRoadRltnVo>> findAllRoadRltn(HttpServletRequest request) {
+        List<TbAtrdRoadRltnVo> result = this.service.findAllRoadRltn();
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "도로구성정보전체조회(TB_ATRD, TB_ATRD_ROAD_RLTN, TB_ROAD)", response = TbAtrdRoadRltnVo.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/road/{id}", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<TbAtrdRoadRltnVo> findByIdRoadRltn(@PathVariable("id") String id, HttpServletRequest request) {
+        TbAtrdRoadRltnVo result = this.service.findByIdRoadRltn(id);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "도로구성정보업데이트(TB_ATRD, TB_ATRD_ROAD_RLTN, TB_ROAD)", response = TbAtrdRoadRltnVo.class, responseContainer = "ArrayList")
+    @PutMapping(value = "/road/", produces = {"application/json; charset=utf8"})
+    public int updateByIdRoadRltn(@RequestBody TbAtrdRoadRltnVo obj, HttpServletRequest request) {
+        log.error("{}", obj);
+        return this.service.updateByIdRoadRltn(obj);
+    }
+
+}

+ 5 - 4
src/main/java/com/its/op/model/dto/AtrdDto.java

@@ -11,7 +11,7 @@ import java.io.Serializable;
 public class AtrdDto implements Serializable {
 
     @Getter
-    public static class Info {
+    public static class AtrdInfo {
         private final String ATRD_ID;     //	N	VARCHAR2(10)	N			간선도로 ID
         private final String ATRD_NM;     //	N	VARCHAR2(30)	Y			간선도로 명
         private final String DRCT_CD;     //	N	VARCHAR2(7)	    Y			방향 코드
@@ -20,12 +20,13 @@ public class AtrdDto implements Serializable {
 
         private final String DRCT_CD_DESC;    // 방향코드 설명
 
-        public Info(Atrd entity) {
+        public AtrdInfo(Atrd entity) {
             this.ATRD_ID = entity.getATRD_ID();
             this.ATRD_NM = entity.getATRD_NM();
             this.DRCT_CD = entity.getDRCT_CD();
             this.AREA_CD = entity.getAREA_CD();
             this.DEL_YN  = entity.getDEL_YN();
+
             if (this.DRCT_CD.equals("0"))
                 this.DRCT_CD_DESC = "상행";
             else
@@ -35,12 +36,12 @@ public class AtrdDto implements Serializable {
 
     @Getter
     @NoArgsConstructor(access = AccessLevel.PROTECTED)
-    public static class NameUpdateReq {
+    public static class AtrdNameUpdateReq {
 
         private String ATRD_NM;
 
         @Builder
-        public NameUpdateReq(String Name) {
+        public AtrdNameUpdateReq(String Name) {
             this.ATRD_NM = Name;
         }
     }

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

@@ -0,0 +1,66 @@
+package com.its.op.model.dto;
+
+import com.its.op.global.CodeManager;
+import com.its.op.global.NodeManager;
+import com.its.op.model.entity.AtrdRoadRltn;
+import lombok.*;
+
+import java.io.Serializable;
+
+public class AtrdRoadRltnDto implements Serializable {
+
+    @Getter
+    public static class AtrdRoadRltnInfo {
+        private final String  ATRD_ID;          //	N	VARCHAR2(10)	N			간선도로 ID
+        private final Long    ROAD_ID;          //	N	NUMBER(10)	    N			도로 ID
+        private final Integer ORD;              //	N	NUMBER(3)	    N			링크 ID
+
+        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 FROM_NODE;
+        private final String TO_NODE;
+        private final String SECT_GRAD_CD_DESC;
+
+        public AtrdRoadRltnInfo(AtrdRoadRltn entity) {
+            this.ATRD_ID      = entity.getATRD_ID();
+            this.ROAD_ID      = entity.getROAD_ID();
+            this.ORD          = entity.getORD();
+
+            this.STRT_NM      = entity.getRoad().getSTRT_NM();
+            this.END_NM       = entity.getRoad().getEND_NM();
+            this.SECT_LNGT    = entity.getRoad().getSECT_LNGT();
+            this.F_NODE_ID    = entity.getRoad().getF_NODE_ID();
+            this.T_NODE_ID    = entity.getRoad().getT_NODE_ID();
+            this.SECT_GRAD_CD = entity.getRoad().getSECT_GRAD_CD();
+
+            this.FROM_NODE = NodeManager.getNodeName(this.F_NODE_ID);
+            this.TO_NODE = NodeManager.getNodeName(this.T_NODE_ID);
+
+            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 AtrdRoadRltnUpdateReq {
+
+        private String  ATRD_ID;
+        private Long    ROAD_ID;
+        private Integer ORD;
+
+        @Builder
+        public AtrdRoadRltnUpdateReq(String ATRD_ID, Long ROAD_ID, Integer ORD) {
+            this.ATRD_ID = ATRD_ID;
+            this.ROAD_ID = ROAD_ID;
+            this.ORD = ORD;
+        }
+    }
+
+}

+ 16 - 32
src/main/java/com/its/op/model/dto/RoadIfscRltnDto.java

@@ -1,6 +1,7 @@
 package com.its.op.model.dto;
 
 import com.its.op.global.CodeManager;
+import com.its.op.global.NodeManager;
 import com.its.op.model.entity.RoadIfscRltn;
 import lombok.*;
 
@@ -10,53 +11,36 @@ 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    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  DRCT_CD;        //	N	VARCHAR2(7)	    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 FROM_NODE;
         private final String TO_NODE;
-        private final String ROAD_RANK_DESC;
-        private final String ROAD_TYPE_DESC;
-*/
+        private final String DRCT_CD_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.DRCT_CD      = entity.getIfsc().getDRCT_CD();
+            this.F_NODE_ID    = entity.getIfsc().getF_NODE_ID();
+            this.T_NODE_ID    = entity.getIfsc().getT_NODE_ID();
+            this.SECT_LNGT    = entity.getIfsc().getSECT_LNGT();
             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.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);
         }
     }

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

@@ -40,7 +40,7 @@ public class Atrd {
     @ColumnDefault(value = "N")
     private String DEL_YN;      //	N	CHAR(1)	        Y	'N'		삭제 여부
 
-    public void updateName(AtrdDto.NameUpdateReq req) {
+    public void updateName(AtrdDto.AtrdNameUpdateReq req) {
         this.ATRD_NM = req.getATRD_NM();
     }
 

+ 31 - 0
src/main/java/com/its/op/model/entity/AtrdRoadRltn.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_ATRD_ROAD_RLTN")
+@IdClass(AtrdRoadRltnKey.class)
+public class AtrdRoadRltn {
+
+    @Id @Column(nullable = false, length = 10)
+    private String  ATRD_ID;            //	N	VARCHAR2(10)    N			간선도로 ID
+    @Id @Column(nullable = false, length = 10)
+    private Long    ROAD_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="ROAD_ID", referencedColumnName = "ROAD_ID")
+    Road road = new Road();
+}

+ 22 - 0
src/main/java/com/its/op/model/entity/AtrdRoadRltnKey.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 AtrdRoadRltnKey implements Serializable {
+
+    //@Id @Column(nullable = false, length = 10)
+    private String  ATRD_ID;            //	N	VARCHAR2(10)    N			간선도로 ID
+    //@Id @Column(nullable = false, length = 10)
+    private Long    ROAD_ID;            //	N	NUMBER(10)	    N			도로 ID
+    //@Id @Column(nullable = false, length = 3)
+    private Integer ORD;                //	N	NUMBER(3)	    N			링크 ID
+
+}

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

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

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

@@ -0,0 +1,17 @@
+package com.its.op.repository;
+
+import com.its.op.model.entity.AtrdRoadRltn;
+import com.its.op.model.entity.AtrdRoadRltnKey;
+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 AtrdRoadRltnRepository extends JpaRepository<AtrdRoadRltn, AtrdRoadRltnKey> {
+
+    @Query(value = "select distinct p from AtrdRoadRltn p inner join fetch p.road where p.ATRD_ID = ?1")
+    List<AtrdRoadRltn> findRltnById(String ATRD_ID);
+
+}

+ 64 - 20
src/main/java/com/its/op/service/database/TbAtrdService.java

@@ -1,55 +1,99 @@
 package com.its.op.service.database;
 
-import com.its.op.model.vo.database.TbAtrdRoadRltnVo;
-import com.its.op.repository.mapper.database.TbAtrdMapper;
-import lombok.Getter;
+import com.its.op.model.dto.AtrdDto;
+import com.its.op.model.dto.AtrdRoadRltnDto;
+import com.its.op.model.entity.Atrd;
+import com.its.op.model.entity.AtrdRoadRltn;
+import com.its.op.model.entity.AtrdRoadRltnKey;
+import com.its.op.repository.AtrdRepository;
+import com.its.op.repository.AtrdRoadRltnRepository;
 import lombok.RequiredArgsConstructor;
-import lombok.Setter;
-import lombok.ToString;
 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
-@Getter
-@Setter
-@ToString
 @RequiredArgsConstructor
 @Service
 public class TbAtrdService {
 
-    private final TbAtrdMapper mapper;
+    private final AtrdRepository repo;
+    private final AtrdRoadRltnRepository repoRltn;
 
-    public List<TbAtrdRoadRltnVo> findAllRoadRltn() {
+    public List<Atrd> findAll() {
         try {
-            return this.mapper.findAllRoadRltn();
+            return this.repo.findAll();
         }
         catch (Exception e) {
-            log.error("{}.findAllRoadRltn: Exception: {}", getClass().getSimpleName(), e.getMessage());
+            log.error("{}.findAll: Exception: {}", getClass().getSimpleName(), e.getMessage());
         }
-        return new ArrayList<TbAtrdRoadRltnVo>();
+        return new ArrayList<Atrd>();
+    }
+    public Atrd findById(String id) {
+        try {
+            Optional<Atrd> 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 TbAtrdRoadRltnVo findByIdRoadRltn(String id) {
+    // 도로명 변경
+    public Atrd updateNameById(String id, AtrdDto.AtrdNameUpdateReq req) {
         try {
-            return this.mapper.findByIdRoadRltn(id);
+            Optional<Atrd> data = this.repo.findById(id);
+            if (data.isPresent()) {
+                Atrd obj = data.get();
+                obj.updateName(req);
+                this.repo.save(obj);
+                return obj;
+            }
         }
         catch (Exception e) {
-            log.error("{}.findByIdRoadRltn: ID: {}, Exception: {}", getClass().getSimpleName(), id, e.getMessage());
+            log.error("{}.updateNameById: Object: {}, Exception: {}", getClass().getSimpleName(), req, e.getMessage());
         }
         return null;
     }
 
-    public int updateByIdRoadRltn(TbAtrdRoadRltnVo obj) {
+    public List<AtrdRoadRltn> findLinkRltnById(String id) {
         try {
-            return this.mapper.updateByIdRoadRltn(obj);
+            List<AtrdRoadRltn> data = this.repoRltn.findRltnById(id);
+            return data;
         }
         catch (Exception e) {
-            log.error("{}.updateByIdRoadRltn: Object: {}, Exception: {}", getClass().getSimpleName(), obj, e.getMessage());
+            log.error("{}.findById: Object: {}, Exception: {}", getClass().getSimpleName(), id, e.getMessage());
         }
-        return 0;
+        return null;
+    }
+
+    @Transactional
+    public List<AtrdRoadRltnDto.AtrdRoadRltnUpdateReq> updateLinkRltn(String id, List<AtrdRoadRltnDto.AtrdRoadRltnUpdateReq> req) {
+        try {
+            // 기존 데이터를 모두 삭제
+            List<AtrdRoadRltn> lists = this.repoRltn.findRltnById(id);
+            for (AtrdRoadRltn delObj : lists) {
+                this.repoRltn.deleteById(new AtrdRoadRltnKey(delObj.getATRD_ID(), delObj.getROAD_ID(), delObj.getORD()));
+            }
+
+            // 데이터 다시 입력
+            for (AtrdRoadRltnDto.AtrdRoadRltnUpdateReq obj : req) {
+                AtrdRoadRltn data = new AtrdRoadRltn(obj.getATRD_ID(), obj.getROAD_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;
     }
 
 }