Przeglądaj źródła

add group menu management

shjung 3 lat temu
rodzic
commit
fb45371f76

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

@@ -46,7 +46,7 @@ public class TbCmtrGradClsfController {
         return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);//NO_CONTENT);
     }
 
-    @ApiOperation(value = "정보변경TB_CMTR_GRAD_CLSF)", response = CnctIntnDto.CnctIntnInfo.class)
+    @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);

+ 54 - 0
src/main/java/com/its/op/controller/database/TbGropMenuAthrController.java

@@ -0,0 +1,54 @@
+package com.its.op.controller.database;
+
+import com.its.op.model.dto.GropMenuAthrDto;
+import com.its.op.model.entity.GropMenuAthr;
+import com.its.op.service.database.TbGropMenuAthrService;
+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-grop-menu-athr")
+@Api(tags = "09.기초데이터관리-13.운영자그룹메뉴관리", description="운영자그룹메뉴관리")
+public class TbGropMenuAthrController {
+
+    private final TbGropMenuAthrService service;
+
+    @ApiOperation(value = "전체조회(TB_GROP_MENU_ATHR)", response = GropMenuAthrDto.GropMenuAthrInfo.class)
+    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<GropMenuAthrDto.GropMenuAthrInfo>> findAll() {
+        List<GropMenuAthrDto.GropMenuAthrInfo> result = this.service.findAll();
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "개별조회(TB_GROP_MENU_ATHR)", response = GropMenuAthrDto.GropMenuAthrInfo.class)
+    @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<GropMenuAthrDto.GropMenuAthrInfo>> findById(@PathVariable("id") String id) {
+        List<GropMenuAthrDto.GropMenuAthrInfo> result = this.service.findById(id);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "메뉴권한변경(TB_GROP_MENU_ATHR))", response = GropMenuAthrDto.GropMenuAthrInfo.class)
+    @PostMapping(value = "", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<GropMenuAthrDto.GropMenuAthrInfo>> mergeInfo(@RequestBody @Valid final List<GropMenuAthrDto.GropMenuAthrUpdateReq> req) {
+        List<GropMenuAthrDto.GropMenuAthrInfo> result = new ArrayList<>();
+        List<GropMenuAthr> objList = this.service.mergeInfo(req);
+        if (objList != null) {
+            for (GropMenuAthr obj : objList) {
+                result.add(new GropMenuAthrDto.GropMenuAthrInfo(obj));
+            }
+        }
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+}

+ 77 - 0
src/main/java/com/its/op/model/dto/GropMenuAthrDto.java

@@ -0,0 +1,77 @@
+package com.its.op.model.dto;
+
+import com.its.op.model.entity.GropMenuAthr;
+import com.its.op.model.entity.OperSystMenu;
+import com.its.op.model.entity.UserGropInfr;
+import lombok.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+public class GropMenuAthrDto implements Serializable {
+
+    @Getter
+    public static class GropMenuAthrInfo {
+        private final String GROP_ID;             //	N	VARCHAR2(30)	N			그룹ID
+        private final String OPERSYST_MENU_ID;    //	N	VARCHAR2(30)	N			운영시스템메뉴ID
+        private String ATHR_YN;             //	N	CHAR(1)	        Y	'N'		권한 여부
+
+        private String ATHR_YN_DESC;
+        private final String GROP_NM;
+        private final String MENU_NAME;
+
+        public GropMenuAthrInfo(GropMenuAthr entity) {
+            this.GROP_ID   = entity.getGROP_ID();
+            this.OPERSYST_MENU_ID   = entity.getOPERSYST_MENU_ID();
+            this.ATHR_YN = entity.getATHR_YN();
+
+            this.ATHR_YN_DESC = this.ATHR_YN.equals("Y") ? "[Y] 권한있음" : "[N] 권한없음";
+            this.GROP_NM = entity.getUserGrop().getGROP_NM();
+            this.MENU_NAME = entity.getOperMenu().getMENU_NAME();
+        }
+
+        public GropMenuAthrInfo(UserGropInfr userGrop, OperSystMenu systMenu) {
+            this.GROP_ID   = userGrop.getGROP_ID();
+            this.OPERSYST_MENU_ID   = systMenu.getOPERSYST_MENU_ID();
+            this.ATHR_YN = "Y";
+
+            this.ATHR_YN_DESC = "[Y] 권한있음";
+            this.GROP_NM = userGrop.getGROP_NM();
+            this.MENU_NAME = systMenu.getMENU_NAME();
+        }
+
+        public void updateMenuAuth(GropMenuAthr entity) {
+            this.ATHR_YN = entity.getATHR_YN();
+            this.ATHR_YN_DESC = this.ATHR_YN.equals("Y") ? "[Y] 권한있음" : "[N] 권한없음";
+        }
+    }
+
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class GropMenuAthrUpdateReq {
+
+        @NotEmpty
+        @Size(min=1, max=30)
+        private String GROP_ID;             //	N	VARCHAR2(30)	N			그룹ID
+        @NotEmpty
+        @Size(min=1, max=30)
+        private String OPERSYST_MENU_ID;    //	N	VARCHAR2(30)	N			운영시스템메뉴ID
+
+        @NotEmpty
+        @Size(min=1, max=1)
+        @Pattern(regexp = "[YN]")
+        private String ATHR_YN;             //	N	CHAR(1)	        Y	'N'		권한 여부
+
+        @Builder
+        public GropMenuAthrUpdateReq(String GROP_ID, String OPERSYST_MENU_ID, String ATHR_YN) {
+            this.GROP_ID = GROP_ID;
+            this.OPERSYST_MENU_ID = OPERSYST_MENU_ID;
+            this.ATHR_YN = ATHR_YN;
+        }
+    }
+
+}

+ 52 - 0
src/main/java/com/its/op/model/entity/GropMenuAthr.java

@@ -0,0 +1,52 @@
+package com.its.op.model.entity;
+
+import com.its.op.model.dto.GropMenuAthrDto;
+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.*;
+
+@DynamicInsert
+@DynamicUpdate
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Entity
+@Table(name = "TB_GROP_MENU_ATHR")
+@IdClass(GropMenuAthrKey.class)
+public class GropMenuAthr {
+
+    @Id
+    @Column(nullable = false, length = 30)
+    private String GROP_ID;             //	N	VARCHAR2(30)	N			그룹ID
+    @Id
+    @Column(nullable = false, length = 30)
+    private String OPERSYST_MENU_ID;    //	N	VARCHAR2(30)	N			운영시스템메뉴ID
+
+    @Column(columnDefinition = "CHAR", length = 1)
+    @ColumnDefault(value = "N")
+    private String ATHR_YN;             //	N	CHAR(1)	        Y	'N'		권한 여부
+
+    @OneToOne
+    @JoinColumn(insertable=false, updatable=false, name = "GROP_ID", referencedColumnName = "GROP_ID")
+    private UserGropInfr userGrop = new UserGropInfr();
+
+    @OneToOne
+    @JoinColumn(insertable=false, updatable=false, name = "OPERSYST_MENU_ID", referencedColumnName = "OPERSYST_MENU_ID")
+    private OperSystMenu operMenu = new OperSystMenu();
+
+    public GropMenuAthr(String GROP_ID, String OPERSYST_MENU_ID) {
+        this.GROP_ID = GROP_ID;
+        this.OPERSYST_MENU_ID = OPERSYST_MENU_ID;
+    }
+
+    public void updateInfo(GropMenuAthrDto.GropMenuAthrUpdateReq req) {
+        this.ATHR_YN = req.getATHR_YN();
+    }
+}

+ 20 - 0
src/main/java/com/its/op/model/entity/GropMenuAthrKey.java

@@ -0,0 +1,20 @@
+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 GropMenuAthrKey implements Serializable {
+
+    //@Column(nullable = false, length = 30)
+    private String GROP_ID;             //	N	VARCHAR2(30)	N			그룹ID
+    //@Column(nullable = false, length = 30)
+    private String OPERSYST_MENU_ID;    //	N	VARCHAR2(30)	N			운영시스템메뉴ID
+
+}

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

@@ -73,4 +73,5 @@ public class Ifsc {
         this.STRT_NM = req.getSTRT_NM();
         this.END_NM = req.getEND_NM();
     }
+
 }

+ 41 - 0
src/main/java/com/its/op/model/entity/OperSystMenu.java

@@ -0,0 +1,41 @@
+package com.its.op.model.entity;
+
+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_OPERSYST_MENU")
+public class OperSystMenu {
+
+    @Id
+    @Column(nullable = false, unique = true, length = 30)
+    private String  OPERSYST_MENU_ID;   //	N	VARCHAR2(30)	N			운영시스템메뉴ID
+
+    @Column(nullable = false, length = 100)
+    private String  MENU_NAME;          //	N	VARCHAR2(100)	Y			메뉴명
+    @Column(nullable = false, length = 2)
+    private Integer MENU_LEVL;          //	N	NUMBER(2)	    Y			메뉴레벨
+    @Column(length = 30)
+    private String  OPER_SYST_ID;       //	N	VARCHAR2(30)	Y			운영시스템ID
+
+    @Column(columnDefinition = "CHAR", length = 1)
+    @ColumnDefault(value = "N")
+    private String  DEL_YN;             //	N	CHAR(1)	        Y	'N'		삭제 여부
+
+}

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

@@ -50,10 +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();
     }
+
 }

+ 39 - 0
src/main/java/com/its/op/model/entity/UserGropInfr.java

@@ -0,0 +1,39 @@
+package com.its.op.model.entity;
+
+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_USERGROP_INFR")
+public class UserGropInfr {
+
+    @Id
+    @Column(nullable = false, unique = true, length = 20)
+    private String GROP_ID;         //	N	VARCHAR2(30)	N			그룹ID
+
+    @Column(nullable = false, length = 20)
+    private String GROP_NM;         //	N	VARCHAR2(20)	Y			그룹명
+    @Column(length = 100)
+    private String EXPL;            //	N	VARCHAR2(100)	Y			설명
+
+    @Column(columnDefinition = "CHAR", length = 1)
+    @ColumnDefault(value = "N")
+    private String DEL_YN;          //	N	CHAR(1)	        Y	'N'		삭제 여부
+
+}

+ 16 - 0
src/main/java/com/its/op/repository/GropMenuAthrRepository.java

@@ -0,0 +1,16 @@
+package com.its.op.repository;
+
+import com.its.op.model.entity.GropMenuAthr;
+import com.its.op.model.entity.GropMenuAthrKey;
+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 GropMenuAthrRepository extends JpaRepository<GropMenuAthr, GropMenuAthrKey> {
+
+    @Query(value = "select distinct p from GropMenuAthr p inner join fetch p.operMenu inner join fetch p.userGrop")
+    List<GropMenuAthr> findAll();
+}

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

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

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

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

+ 119 - 0
src/main/java/com/its/op/service/database/TbGropMenuAthrService.java

@@ -0,0 +1,119 @@
+package com.its.op.service.database;
+
+import com.its.op.model.dto.GropMenuAthrDto;
+import com.its.op.model.entity.GropMenuAthr;
+import com.its.op.model.entity.GropMenuAthrKey;
+import com.its.op.model.entity.OperSystMenu;
+import com.its.op.model.entity.UserGropInfr;
+import com.its.op.repository.GropMenuAthrRepository;
+import com.its.op.repository.OperSystMenuRepository;
+import com.its.op.repository.UserGropInfrRepository;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Optional;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbGropMenuAthrService {
+
+    private final GropMenuAthrRepository menuAuthRepo;
+    private final UserGropInfrRepository userGropRepo;
+    private final OperSystMenuRepository systMenuRepo;
+
+    public List<GropMenuAthrDto.GropMenuAthrInfo> findAll() {
+        List<GropMenuAthrDto.GropMenuAthrInfo> result = new ArrayList<>();
+        try {
+            List<UserGropInfr> userGrops = this.userGropRepo.findAll();
+            List<OperSystMenu> systMenus = this.systMenuRepo.findAll();
+            List<GropMenuAthr> menuAuths = this.menuAuthRepo.findAll();
+            HashMap<String, GropMenuAthr> authMap = new HashMap<>();
+            for (GropMenuAthr menuAthr : menuAuths) {
+                authMap.put(menuAthr.getGROP_ID() + "*" + menuAthr.getOPERSYST_MENU_ID(), menuAthr);
+            }
+
+            for (UserGropInfr userGrop : userGrops) {
+                if (userGrop.getDEL_YN().equals("N")) {
+                    for (OperSystMenu systMenu : systMenus) {
+                        if (systMenu.getDEL_YN().equals("N")) {
+                            GropMenuAthrDto.GropMenuAthrInfo menuAthr = new GropMenuAthrDto.GropMenuAthrInfo(userGrop, systMenu);
+                            GropMenuAthr auth = authMap.get(userGrop.getGROP_ID() + "*" + systMenu.getOPERSYST_MENU_ID());
+                            if (auth != null) {
+                                menuAthr.updateMenuAuth(auth);
+                            }
+                            result.add(menuAthr);
+                        }
+                    }
+                }
+            }
+        }
+        catch (Exception e) {
+            log.error("{}.findAll: Exception: {}", getClass().getSimpleName(), e.getMessage());
+        }
+        return result;
+    }
+
+    public List<GropMenuAthrDto.GropMenuAthrInfo> findById(String id) {
+        List<GropMenuAthrDto.GropMenuAthrInfo> result = new ArrayList<>();
+        try {
+            Optional<UserGropInfr> userGrops = this.userGropRepo.findById(id);
+            List<OperSystMenu> systMenus = this.systMenuRepo.findAll();
+            List<GropMenuAthr> menuAuths = this.menuAuthRepo.findAll();
+            HashMap<String, GropMenuAthr> authMap = new HashMap<>();
+            for (GropMenuAthr menuAthr : menuAuths) {
+                authMap.put(menuAthr.getGROP_ID() + "*" + menuAthr.getOPERSYST_MENU_ID(), menuAthr);
+            }
+
+            if (userGrops.isPresent()) {
+                UserGropInfr userGrop = userGrops.get();
+                if (userGrop.getDEL_YN().equals("N")) {
+                    for (OperSystMenu systMenu : systMenus) {
+                        if (systMenu.getDEL_YN().equals("N")) {
+                            GropMenuAthrDto.GropMenuAthrInfo menuAthr = new GropMenuAthrDto.GropMenuAthrInfo(userGrop, systMenu);
+                            GropMenuAthr auth = authMap.get(userGrop.getGROP_ID() + "*" + systMenu.getOPERSYST_MENU_ID());
+                            if (auth != null) {
+                                menuAthr.updateMenuAuth(auth);
+                            }
+                            result.add(menuAthr);
+                        }
+                    }
+                }
+            }
+        }
+        catch (Exception e) {
+            log.error("{}.findById: Exception: {}", getClass().getSimpleName(), e.getMessage());
+        }
+        return result;
+    }
+
+    public List<GropMenuAthr> mergeInfo(List<GropMenuAthrDto.GropMenuAthrUpdateReq> reqList) {
+        List<GropMenuAthr> result = new ArrayList<>();
+
+        try {
+            for (GropMenuAthrDto.GropMenuAthrUpdateReq req: reqList) {
+                GropMenuAthrKey key = new GropMenuAthrKey(req.getGROP_ID(), req.getOPERSYST_MENU_ID());
+                Optional<GropMenuAthr> data = this.menuAuthRepo.findById(key);
+                GropMenuAthr obj;
+                if (data.isPresent()) {
+                    obj = data.get();
+                }
+                else {
+                    obj = new GropMenuAthr(req.getGROP_ID(), req.getOPERSYST_MENU_ID());
+                }
+                obj.updateInfo(req);
+                this.menuAuthRepo.save(obj);
+                result.add(obj);
+            }
+        }
+        catch (Exception e) {
+            log.error("{}.mergeInfo: Object: {}, Exception: {}", getClass().getSimpleName(), reqList, e.getMessage());
+        }
+        return result;
+    }
+
+}