From aa989ba0e4f3839dd7bbb47f422f8e7d6785af7e Mon Sep 17 00:00:00 2001
From: whywhyo <1511349576@qq.com>
Date: 星期五, 19 五月 2023 21:01:15 +0800
Subject: [PATCH] 完成家谱

---
 zhang-content/src/main/java/com/ruoyi/service/impl/ZInfoUserServiceImpl.java |  148 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 143 insertions(+), 5 deletions(-)

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 21fcf92..5db6910 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
@@ -16,6 +16,8 @@
 import com.ruoyi.domain.ZfEvent;
 import com.ruoyi.domain.ZfRelation;
 import com.ruoyi.domain.dto.EmpowerDto;
+import com.ruoyi.domain.dto.Genealogy;
+import com.ruoyi.domain.dto.GenealogyExportDto;
 import com.ruoyi.domain.dto.UserRelationDto;
 import com.ruoyi.mapper.ZInfoUserMapper;
 import com.ruoyi.service.ZInfoUserService;
@@ -26,10 +28,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -303,8 +302,10 @@
         try {
             result = allPeopleList.stream().filter(people -> people.getUserId()!=1&&(people.getFatherId() == 0||people.getMomId()==0))
                     .map(people -> {
-                        if(depth>1)
+                        if(depth>1){
+                            people.setIdentity(1);
                             people.setChildList(fillChildren(people, allPeopleList, depth-1));
+                        }
                         return people;
                     }).collect(Collectors.toList());
         } catch (NullPointerException e) {
@@ -312,6 +313,140 @@
         }
         return AjaxResult.success(result);
 
+    }
+
+    /**
+     * 鏉′欢鑾峰彇瀹跺涵鎴愬憳
+     * @return
+     */
+    public AjaxResult listWithTreeByCondition(Integer depth,Genealogy genealogy) {
+
+        ZInfoUser zInfoUser = new ZInfoUser();
+        BeanUtils.copyProperties(genealogy,zInfoUser);
+        LambdaQueryWrapper<ZInfoUser> lqw = new LambdaQueryWrapper<>();
+        lqw.eq(zInfoUser.getIdentity()!=null,ZInfoUser::getIdentity,zInfoUser.getIdentity());
+        lqw.eq(zInfoUser.getSex()!=null,ZInfoUser::getSex,zInfoUser.getSex());
+        lqw.like(StringUtils.isNotEmpty(zInfoUser.getNickName()),ZInfoUser::getNickName,zInfoUser.getNickName());
+        lqw.eq(zInfoUser.getBirth()!=null,ZInfoUser::getBirth,zInfoUser.getBirth());
+
+        List<ZInfoUser> allPeopleList = list(lqw);
+        List<ZInfoUser> result = null;
+        try {
+            result = allPeopleList.stream().filter(people -> people.getUserId()!=1&&(people.getFatherId() == 0||people.getMomId()==0))
+                    .map(people -> {
+                        if(depth>1){
+                            people.setIdentity(1);
+                            people.setChildList(fillChildren(people, allPeopleList, depth-1));
+                        }
+                        return people;
+                    }).collect(Collectors.toList());
+        } catch (NullPointerException e) {
+            throw new RuntimeException("鎮ㄥ湪鍔犲叆鎴愬憳鐨勬椂鍊欐病鏈夋寚瀹氳鎴愬憳鐨勭埗浜叉垨鑰呮瘝浜�");
+        }
+        return AjaxResult.success(result);
+
+    }
+
+    private List<ZInfoUser> userList = new ArrayList<>();
+
+    /**
+     * 瀹惰氨淇℃伅
+     * @param genealogy
+     * @return
+     */
+    @Override
+    public AjaxResult listGenealogy(Genealogy genealogy,Integer pageNum,Integer pageSize) {
+        List<ZInfoUser> treeList= (List<ZInfoUser>) listWithTreeByCondition(100,genealogy).get("data");
+        recursionFindUser(treeList);
+
+        List<Genealogy> allData = userList.stream().map(
+                zInfoUser -> {
+                    Genealogy newGenealogy = new Genealogy();
+                    BeanUtils.copyProperties(zInfoUser, newGenealogy);
+
+                    if(zInfoUser.getSpouseId()!=null){
+                        ZInfoUser spouse = getById(zInfoUser.getSpouseId());
+                        newGenealogy.setSpouseName(spouse.getNickName());
+                    }
+                    return newGenealogy;
+                }
+        ).collect(Collectors.toList());
+
+        List<Genealogy> collect = allData.stream().distinct().sorted(Comparator.comparing(Genealogy::getIdentity)).collect(Collectors.toList());
+        List<Genealogy> resultData= new ArrayList<>();
+
+        for (int i = (pageNum-1)*pageSize; i <pageNum*pageSize+pageSize; i++) {
+            if(i>=collect.size()){
+                break;
+            }
+            resultData.add(collect.get(i));
+        }
+
+        HashMap<String, Object> resultMap = new HashMap<>();
+        resultMap.put("data",resultData);
+        resultMap.put("total",collect.size());
+        resultMap.put("pageNum",pageNum);
+        resultMap.put("pageSize",pageSize);
+
+        return AjaxResult.success(resultMap);
+    }
+
+    @Override
+    public List<Genealogy> selectByIds(Long[] ids) {
+        List<ZInfoUser> zInfoUsers = listByIds(Arrays.asList(ids));
+        ArrayList<Genealogy> result = new ArrayList<>();
+        for (ZInfoUser zInfoUser : zInfoUsers) {
+            Genealogy genealogy = new Genealogy();
+            BeanUtils.copyProperties(zInfoUser,genealogy);
+            if(zInfoUser.getSpouseId()!=null){
+                ZInfoUser spouse = getById(zInfoUser.getSpouseId());
+                genealogy.setSpouseName(spouse.getNickName());
+            }
+            result.add(genealogy);
+        }
+
+        System.out.println("瀵煎嚭鐨勬暟鎹负:"+result);
+        return result;
+
+    }
+
+    @Override
+    public List<Genealogy> selectDatas(List<GenealogyExportDto> params) {
+        ArrayList<Long> ids = new ArrayList<>();
+        for (GenealogyExportDto param : params) {
+            ids.add(param.getId());
+        }
+
+        List<ZInfoUser> zInfoUsers = listByIds(ids);
+        ArrayList<Genealogy> result = new ArrayList<>();
+        for (int i = 0; i < zInfoUsers.size(); i++) {
+            Genealogy genealogy = new Genealogy();
+            BeanUtils.copyProperties(zInfoUsers.get(i),genealogy);
+            genealogy.setIdentity(params.get(i).getIdentity());
+            if(zInfoUsers.get(i).getSpouseId()!=null){
+                ZInfoUser spouse = getById(zInfoUsers.get(i).getSpouseId());
+                genealogy.setSpouseName(spouse.getNickName());
+            }
+            result.add(genealogy);
+
+        }
+        System.out.println("瀵煎嚭鐨勬暟鎹负:"+result);
+        return result;
+
+
+    }
+
+
+    private void recursionFindUser(List<ZInfoUser> treeList){
+        if (treeList==null||treeList.isEmpty()){
+            return;
+        }
+        for (ZInfoUser zInfoUser : treeList) {
+            userList.add(zInfoUser);
+            if (!zInfoUser.getChildList().isEmpty()){
+                recursionFindUser(zInfoUser.getChildList());
+            }
+        }
     }
 
     /**
@@ -360,6 +495,8 @@
         return AjaxResult.success(zInfoUsers);
     }
 
+
+
     /**
      * 閫掑綊绠楁硶
      * @param people
@@ -380,6 +517,7 @@
                     if(depth==1)
                         return one;
                     else {
+                        one.setIdentity(people.getIdentity()+1);
                         List<ZInfoUser> zinfo = fillChildren(one, allPeopleList, depth - 1);
                         one.setChildList(zinfo);
                         System.out.println(one);

--
Gitblit v1.9.1