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)){ return AjaxResult.success(); }else { return AjaxResult.error(); } //先查找本人的数据 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(); }