whywhyo
2023-05-19 aa989ba0e4f3839dd7bbb47f422f8e7d6785af7e
完成家谱
10个文件已修改
2个文件已添加
342 ■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhang/ZInfoUserController.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhang-content/src/main/java/com/ruoyi/domain/ZInfoUser.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhang-content/src/main/java/com/ruoyi/domain/ZfMaster.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhang-content/src/main/java/com/ruoyi/domain/ZfPet.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhang-content/src/main/java/com/ruoyi/domain/dto/Genealogy.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhang-content/src/main/java/com/ruoyi/domain/dto/GenealogyExportDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhang-content/src/main/java/com/ruoyi/service/ZInfoUserService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhang-content/src/main/java/com/ruoyi/service/impl/ZAutobiographyServiceImpl.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhang-content/src/main/java/com/ruoyi/service/impl/ZInfoUserServiceImpl.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhang-content/src/main/java/com/ruoyi/service/impl/ZfEconomyServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhang-content/src/main/java/com/ruoyi/service/impl/ZfMasterServiceImpl.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhang-content/src/main/java/com/ruoyi/service/impl/ZfPetServiceImpl.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhang/ZInfoUserController.java
@@ -13,6 +13,8 @@
import com.ruoyi.domain.ZInfoUser;
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.service.ZInfoUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@@ -216,5 +218,25 @@
        return zInfoUserService.listMySelfAndSpouse(id);
    }
    /**
     * 家谱
     */
    @GetMapping("/list/genealogy")
    public AjaxResult listGenealogy(Genealogy genealogy){
        Integer pageNum = Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1);
        Integer pageSize = Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10);
        return zInfoUserService.listGenealogy(genealogy,pageNum,pageSize);
    }
    /**
     * 导出家谱
     */
    @PostMapping("/export/genealogy")
    public void exportGenealogy(@RequestBody List<GenealogyExportDto> params, HttpServletResponse response){
        List<Genealogy> list= zInfoUserService.selectDatas(params);
        ExcelUtil<Genealogy> util = new ExcelUtil<>(Genealogy.class);
        util.exportExcel(response,list,"家谱记录数据");
    }
}
zhang-content/src/main/java/com/ruoyi/domain/ZInfoUser.java
@@ -182,6 +182,12 @@
    private String secondFamilyId;
    /**
     * 代数
     */
    @TableField(exist = false)
    private Integer identity;
    /**
     * 子列表
     */
    @TableField(exist = false)
zhang-content/src/main/java/com/ruoyi/domain/ZfMaster.java
@@ -28,7 +28,7 @@
    /**
     * 宠物id
     */
    private Long petId;
    private String petId;
    /**
     * 养犬人姓名
@@ -48,11 +48,6 @@
    @Excel(name = "证件号码")
    private String certificateNo;
    /**
     * 固定电话
     */
    @Excel(name = "固定电话")
    private String fixedNo;
    /**
     * 移动电话
@@ -60,29 +55,12 @@
    @Excel(name = "移动电话")
    private String phoneNo;
    /**
     * 拥有宠物数量
     */
    @Excel(name = "拥有宠物数量")
    private Integer many;
    /**
     * 住所详细地址
     */
    @Excel(name = "住所详细地址")
    private String address;
    /**
     * 住所性质
     */
    @Excel(name = "住所性质")
    private String property;
    /**
     * 电子邮件
     */
    @Excel(name = "邮箱")
    private String email;
}
zhang-content/src/main/java/com/ruoyi/domain/ZfPet.java
@@ -28,7 +28,7 @@
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    private String id;
    /**
     * 宠物号码
zhang-content/src/main/java/com/ruoyi/domain/dto/Genealogy.java
New file
@@ -0,0 +1,49 @@
package com.ruoyi.domain.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * @Author Jinquan_Ou
 * @Description 家谱
 * @Date 2023-05-19 17:55
 * @Version 1.0.0
 **/
@Data
public class Genealogy implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long userId;
    @Excel(name = "第几代")
    private Integer identity;
    @Excel(name="姓名")
    private String nickName;
    @Excel(name="性别",readConverterExp = "0=女,1=男")
    private Integer sex;
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "出生时间", dateFormat = "yyyy-MM-dd")
    private Date birth;
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "全生命周期", dateFormat = "yyyy-MM-dd")
    private Date deadDay;
    @Excel(name="电话号码")
    private String phoneNumber;
    @Excel(name="所在单位/学校")
    private String unit;
    @Excel(name = "配偶")
    private String spouseName;
}
zhang-content/src/main/java/com/ruoyi/domain/dto/GenealogyExportDto.java
New file
@@ -0,0 +1,15 @@
package com.ruoyi.domain.dto;
import lombok.Data;
/**
 * @Author Jinquan_Ou
 * @Description
 * @Date 2023-05-19 20:20
 * @Version 1.0.0
 **/
@Data
public class GenealogyExportDto {
    private Long id;
    private Integer identity;
}
zhang-content/src/main/java/com/ruoyi/service/ZInfoUserService.java
@@ -4,6 +4,8 @@
import com.ruoyi.domain.ZInfoUser;
import com.ruoyi.domain.ZfRelation;
import com.ruoyi.domain.dto.EmpowerDto;
import com.ruoyi.domain.dto.Genealogy;
import com.ruoyi.domain.dto.GenealogyExportDto;
import java.util.List;
@@ -38,4 +40,10 @@
    AjaxResult listAllExceptAdmin();
    AjaxResult listMySelfAndSpouse(Long id);
    AjaxResult listGenealogy(Genealogy genealogy,Integer pageNum,Integer pageSize);
    List<Genealogy> selectByIds(Long[] ids);
    List<Genealogy> selectDatas(List<GenealogyExportDto> params);
}
zhang-content/src/main/java/com/ruoyi/service/impl/ZAutobiographyServiceImpl.java
@@ -8,7 +8,9 @@
import com.ruoyi.service.ZAutobiographyService;
import org.springframework.stereotype.Service;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
 * <p>
@@ -25,7 +27,8 @@
    public List<ZAutobiography> selectAutobiographyList(Long userId) {
        LambdaQueryWrapper<ZAutobiography> lqw = new LambdaQueryWrapper<>();
        lqw.eq(ZAutobiography::getUserId,userId);
        return list(lqw);
        List<ZAutobiography> result = list(lqw);
        return result.stream().sorted(Comparator.comparingInt(z -> Integer.parseInt(z.getAgeBegin()))).collect(Collectors.toList());
    }
    @Override
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);
zhang-content/src/main/java/com/ruoyi/service/impl/ZfEconomyServiceImpl.java
@@ -277,8 +277,6 @@
    }
    @Override
    @Transactional
    public AjaxResult importExcel(MultipartFile file) {
@@ -299,4 +297,5 @@
    }
}
zhang-content/src/main/java/com/ruoyi/service/impl/ZfMasterServiceImpl.java
@@ -64,12 +64,12 @@
        lqw.eq(zfMaster.getPetId()!=null,ZfMaster::getPetId,zfMaster.getPetId());
        lqw.eq(StringUtils.isNotEmpty(zfMaster.getName()),ZfMaster::getName,zfMaster.getName());
        lqw.eq(StringUtils.isNotEmpty(zfMaster.getCertificateType()),ZfMaster::getCertificateType,zfMaster.getCertificateType());
        lqw.eq(StringUtils.isNotEmpty(zfMaster.getFixedNo()),ZfMaster::getFixedNo,zfMaster.getFixedNo());
        lqw.eq(StringUtils.isNotEmpty(zfMaster.getPhoneNo()),ZfMaster::getPhoneNo,zfMaster.getPhoneNo());
        lqw.eq(zfMaster.getMany()!=null,ZfMaster::getMany,zfMaster.getMany());
        lqw.eq(StringUtils.isNotEmpty(zfMaster.getAddress()),ZfMaster::getAddress,zfMaster.getAddress());
        lqw.eq(StringUtils.isNotEmpty(zfMaster.getProperty()),ZfMaster::getProperty,zfMaster.getProperty());
        lqw.eq(StringUtils.isNotEmpty(zfMaster.getEmail()),ZfMaster::getEmail,zfMaster.getEmail());
        return lqw;
    }
@@ -79,12 +79,11 @@
        lqw.like(zfMaster.getPetId()!=null,ZfMaster::getPetId,zfMaster.getPetId());
        lqw.like(StringUtils.isNotEmpty(zfMaster.getName()),ZfMaster::getName,zfMaster.getName());
        lqw.like(StringUtils.isNotEmpty(zfMaster.getCertificateType()),ZfMaster::getCertificateType,zfMaster.getCertificateType());
        lqw.like(StringUtils.isNotEmpty(zfMaster.getFixedNo()),ZfMaster::getFixedNo,zfMaster.getFixedNo());
        lqw.like(StringUtils.isNotEmpty(zfMaster.getPhoneNo()),ZfMaster::getPhoneNo,zfMaster.getPhoneNo());
        lqw.eq(zfMaster.getMany()!=null,ZfMaster::getMany,zfMaster.getMany());
        lqw.like(StringUtils.isNotEmpty(zfMaster.getAddress()),ZfMaster::getAddress,zfMaster.getAddress());
        lqw.like(StringUtils.isNotEmpty(zfMaster.getProperty()),ZfMaster::getProperty,zfMaster.getProperty());
        lqw.like(StringUtils.isNotEmpty(zfMaster.getEmail()),ZfMaster::getEmail,zfMaster.getEmail());
        return lqw;
    }
}
zhang-content/src/main/java/com/ruoyi/service/impl/ZfPetServiceImpl.java
@@ -5,15 +5,24 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.MapUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.domain.ZInfoUser;
import com.ruoyi.domain.ZfMaster;
import com.ruoyi.domain.ZfPet;
import com.ruoyi.domain.ZfProperty;
import com.ruoyi.mapper.ZfPetMapper;
import com.ruoyi.service.ZInfoUserService;
import com.ruoyi.service.ZfMasterService;
import com.ruoyi.service.ZfPetService;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.List;
@@ -30,6 +39,14 @@
@Slf4j
public class ZfPetServiceImpl extends ServiceImpl<ZfPetMapper, ZfPet> implements ZfPetService {
    @Autowired
    ZInfoUserService zInfoUserService;
    @Autowired
    ZfMasterService zfMasterService;
    @Autowired
    ZfPetService zfPetService;
    @Override
    public AjaxResult selectPetList(ZfPet zfPet, Integer pageNum, Integer pageSize) {
        LambdaQueryWrapper<ZfPet> lqw = buildCondition(zfPet);
@@ -50,7 +67,14 @@
    }
    @Override
    @Transactional
    public AjaxResult mySave(ZfPet zfPet) {
        SysUser user = SecurityUtils.getLoginUser().getUser();
        Long userId = user.getUserId();
        String pid = IdUtils.fastSimpleUUID();
        zfPet.setId(pid);
        //判断是否有重复数据
        LambdaQueryWrapper<ZfPet> lqw = uniqueCondition(zfPet);
        List<ZfPet> list = list(lqw);
@@ -58,11 +82,24 @@
            throw new RuntimeException("请勿新增重复数据");
        }
        if(save(zfPet)){
        //先查找本人的数据
        LambdaQueryWrapper<ZInfoUser> zInfoLqw = new LambdaQueryWrapper<>();
        zInfoLqw.eq(ZInfoUser::getUserId,userId);
        ZInfoUser master = zInfoUserService.getOne(zInfoLqw);
        ZfMaster zfMaster = new ZfMaster();
        zfMaster.setPetId(zfPet.getId());
        zfMaster.setName(master.getNickName());
        zfMaster.setCertificateType("身份证");
        zfMaster.setCertificateNo(master.getIdNo());
        zfMaster.setPhoneNo(master.getPhoneNumber());
        zfMaster.setAddress(master.getAlwaysAddress());
        zfMasterService.save(zfMaster);
        zfPetService.save(zfPet);
            return AjaxResult.success();
        }else {
            return AjaxResult.error();
        }
    }