From 9aff69d38fa75981560ce21807be4b30122ef8f4 Mon Sep 17 00:00:00 2001
From: Jinquan_Ou <Jinquan@gdut.com>
Date: 星期四, 13 四月 2023 23:32:06 +0800
Subject: [PATCH] 授权接口

---
 zhang-content/src/main/java/com/ruoyi/service/impl/ZInfoUserServiceImpl.java      |  129 +++++++++++++++++++++++++++++++++++++++++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhang/ZInfoUserController.java |   11 +++
 zhang-content/src/main/java/com/ruoyi/domain/dto/EmpowerDto.java                  |   34 +++++++++++
 zhang-content/src/main/java/com/ruoyi/service/ZInfoUserService.java               |    4 +
 4 files changed, 178 insertions(+), 0 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhang/ZInfoUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhang/ZInfoUserController.java
index 32a7be2..bcc2de2 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhang/ZInfoUserController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhang/ZInfoUserController.java
@@ -12,6 +12,7 @@
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.domain.ZInfoUser;
 import com.ruoyi.domain.ZfRelation;
+import com.ruoyi.domain.dto.EmpowerDto;
 import com.ruoyi.service.ZInfoUserService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
@@ -171,5 +172,15 @@
     }
 
 
+    /**
+     * 鎺堟潈
+     */
+    @PostMapping("/empower")
+    public AjaxResult empower(@RequestBody EmpowerDto empowerDto){
+
+        return zInfoUserService.empower(empowerDto);
+    }
+
+
 }
 
diff --git a/zhang-content/src/main/java/com/ruoyi/domain/dto/EmpowerDto.java b/zhang-content/src/main/java/com/ruoyi/domain/dto/EmpowerDto.java
new file mode 100644
index 0000000..8a524db
--- /dev/null
+++ b/zhang-content/src/main/java/com/ruoyi/domain/dto/EmpowerDto.java
@@ -0,0 +1,34 @@
+package com.ruoyi.domain.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Author Jinquan_Ou
+ * @Description
+ * @Date 2023-04-13 13:26
+ * @Version 1.0.0
+ **/
+@Data
+public class EmpowerDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鎺堟潈鐨勭敤鎴穒d
+     */
+    private String userId;
+
+    /**
+     * 鎺堟潈鐨勫搴彿
+     */
+    private String familyId;
+
+    /**
+     * 鎺堟潈鐨勮彍鍗昳d
+     */
+    private List<String> authorityList;
+
+
+}
diff --git a/zhang-content/src/main/java/com/ruoyi/service/ZInfoUserService.java b/zhang-content/src/main/java/com/ruoyi/service/ZInfoUserService.java
index 594e02e..ea7a36f 100644
--- a/zhang-content/src/main/java/com/ruoyi/service/ZInfoUserService.java
+++ b/zhang-content/src/main/java/com/ruoyi/service/ZInfoUserService.java
@@ -3,6 +3,7 @@
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.domain.ZInfoUser;
 import com.ruoyi.domain.ZfRelation;
+import com.ruoyi.domain.dto.EmpowerDto;
 
 import java.util.List;
 
@@ -27,4 +28,7 @@
     AjaxResult updateRelation(ZfRelation zfRelation);
 
     AjaxResult deleteRelation(Long[] ids);
+
+    AjaxResult empower(EmpowerDto empowerDto);
+
 }
diff --git a/zhang-content/src/main/java/com/ruoyi/service/impl/ZInfoUserServiceImpl.java b/zhang-content/src/main/java/com/ruoyi/service/impl/ZInfoUserServiceImpl.java
index 9fa02f2..93b18ec 100644
--- a/zhang-content/src/main/java/com/ruoyi/service/impl/ZInfoUserServiceImpl.java
+++ b/zhang-content/src/main/java/com/ruoyi/service/impl/ZInfoUserServiceImpl.java
@@ -3,6 +3,8 @@
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -13,6 +15,7 @@
 import com.ruoyi.domain.ZInfoUser;
 import com.ruoyi.domain.ZfEvent;
 import com.ruoyi.domain.ZfRelation;
+import com.ruoyi.domain.dto.EmpowerDto;
 import com.ruoyi.domain.dto.UserRelationDto;
 import com.ruoyi.mapper.ZInfoUserMapper;
 import com.ruoyi.service.ZInfoUserService;
@@ -162,5 +165,131 @@
         }
     }
 
+    /**
+     * 缁欑敤鎴锋巿鏉冪殑鏂规硶
+     * @param empowerDto
+     * @return
+     */
+    @Override
+    @Transactional
+    public AjaxResult empower(EmpowerDto empowerDto) {
+
+        //寰楀埌dto涓殑淇℃伅
+        String otherUserId = empowerDto.getUserId();
+        String destinationFamilyId = empowerDto.getFamilyId();
+        List<String> authorityList = empowerDto.getAuthorityList();
+
+        String familyId = getMyFamilyId();
+        checkAuthorization(familyId, destinationFamilyId,true);
+
+        //鎺堟潈  //3{2007 1988 1004}
+        String finalStr = getFinalStr(destinationFamilyId, authorityList);
+
+        //鏇存柊琚巿鏉冪敤鎴风殑鏉冮檺
+        LambdaQueryWrapper<ZInfoUser> lqw2 = new LambdaQueryWrapper<>();
+        lqw2.eq(ZInfoUser::getUserId,otherUserId);
+        ZInfoUser otherUser = getOne(lqw2);
+        String secondFamilyId = otherUser.getSecondFamilyId();
+
+        String replaceFamilyId=null;
+
+        boolean save=true;
+
+        if (StringUtils.isNotEmpty(secondFamilyId)){
+            //濡傛灉鍘熸潵灏卞凡缁忔湁琚祴浜堟潈闄愪簡锛岄偅涔堥渶瑕佸垽鏂槸涓嶆槸璺熻繖涓搴彿鏈夊叧鐨勬潈闄�
+
+            //杩欎釜secondFamilyId鏄綋鍓嶇敤鎴风殑瀹屾暣鏉冮檺瀛楁
+            if(secondFamilyId.contains(",")){
+                String[] split = secondFamilyId.split(",");
+                for (int i = 0; i < split.length; i++) {
+                    String fid = split[i].substring(0, split[i].indexOf("{"));//浠庢潈闄愬潡涓嬁鍒拌鎺堟潈鐨勫搴彿
+                    if(fid.equals(finalStr.substring(0,finalStr.indexOf("{")))){
+                        //濡傛灉鍖归厤鍒颁簡瀵瑰簲鐨勫搴彿锛岄偅涔堝氨鏇挎崲鎺夊搴旂殑鏉冮檺鍧楀氨鍙互浜嗭紝涓嶉渶瑕佽拷鍔�
+                        save=false;
+                        split[i]=finalStr;
+                        break;
+                    }
+                }
+                List<String> finalList = Arrays.asList(split);
+                StringBuilder stringBuilder = new StringBuilder();
+                for (String s : finalList) {
+                    stringBuilder.append(s).append(",");
+                }
+                stringBuilder.deleteCharAt(stringBuilder.length()-1);
+
+                replaceFamilyId = stringBuilder.toString();
+
+            }else {
+                String fid = secondFamilyId.substring(0, secondFamilyId.indexOf("{"));//浠庢潈闄愬潡涓嬁鍒拌鎺堟潈鐨勫搴彿
+                if(fid.equals(finalStr.substring(0,finalStr.indexOf("{")))){
+                    //濡傛灉鍖归厤鍒颁簡瀵瑰簲鐨勫搴彿锛岄偅涔堝氨鏇挎崲鎺夊搴旂殑鏉冮檺鍧楀氨鍙互浜嗭紝涓嶉渶瑕佽拷鍔�
+                    save=false;
+                    replaceFamilyId=finalStr;
+                }
+            }
+
+            if(save){
+                //闇�瑕佽拷鍔�,娌℃湁鍖归厤鍒板搴旂殑瀹跺涵鍙�
+                replaceFamilyId=secondFamilyId+","+finalStr;
+            }else {
+                //涓嶉渶瑕佽拷鍔�
+            }
+
+        }else {
+            //鍘熸潵灏辨病鏈夋潈闄愪簡
+            replaceFamilyId=finalStr;
+        }
+
+        LambdaUpdateWrapper<ZInfoUser> uw = new LambdaUpdateWrapper<>();
+        uw.eq(ZInfoUser::getUserId,otherUserId).set(ZInfoUser::getSecondFamilyId,replaceFamilyId);
+        if (update(null,uw)) {
+            return AjaxResult.success();
+        }else {
+            return AjaxResult.error();
+        }
+
+    }
+
+    private void checkAuthorization(String familyId, String destinationFamilyId,boolean flag) {
+        String text=null;
+        if(flag){
+            text="鎺堟潈";
+        }else {
+            text="鍙栨秷鎺堟潈";
+        }
+
+        //瀵规湰浜虹殑瀹跺涵鍙疯繘琛屽鐞�
+        if(familyId.contains(",")){
+            String[] familyIds = familyId.split(",");
+            List<String> idList = Arrays.asList(familyIds);
+            if (!idList.contains(destinationFamilyId)) {
+                throw new RuntimeException("涓嶈兘"+text+"涓嶅睘浜庤嚜宸卞搴殑鏁版嵁");
+            }
+        }else {
+            if (!familyId.equals(destinationFamilyId)){
+                throw new RuntimeException("涓嶈兘"+text+"涓嶅睘浜庤嚜宸卞搴殑鏁版嵁");
+            }
+        }
+    }
+
+    private String getMyFamilyId() {
+        //寰楀埌鑷繁鐨勫搴璱d淇℃伅
+        SysUser user = SecurityUtils.getLoginUser().getUser();
+        Long myUserId = user.getUserId();
+        LambdaQueryWrapper<ZInfoUser> lqw = new LambdaQueryWrapper<>();
+        lqw.eq(ZInfoUser::getUserId,myUserId);
+        ZInfoUser zInfoUser = getOne(lqw);
+        String familyId = zInfoUser.getFamilyId();
+        return familyId;
+    }
+
+
+
+    private String getFinalStr(String destinationFamilyId, List<String> authorityList) {
+        String authorityListStr = authorityList.stream().collect(Collectors.joining(" ", "{", "}"));
+        String finalStr= destinationFamilyId +authorityListStr;  //3{2007 1988 1004}
+        return finalStr;
+    }
+
 
 }

--
Gitblit v1.9.1