package com.ruoyi.service.impl;
|
|
|
|
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;
|
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.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;
|
import com.ruoyi.service.ZfRelationService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
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.stream.Collectors;
|
|
/**
|
* <p>
|
* 服务实现类
|
* </p>
|
*
|
* @author ojq
|
* @since 2023-03-14
|
*/
|
@Service
|
@Slf4j
|
public class ZInfoUserServiceImpl extends ServiceImpl<ZInfoUserMapper, ZInfoUser> implements ZInfoUserService {
|
|
@Autowired
|
private ZfRelationService zfRelationService;
|
|
@Override
|
public AjaxResult selectInfoList(ZInfoUser zInfoUser, Integer pageNum, Integer pageSize) {
|
|
LambdaQueryWrapper<ZInfoUser> lqw = buildCondition(zInfoUser);
|
|
Page<ZInfoUser> zInfoUserPage = new Page<>(pageNum,pageSize);
|
Page<ZInfoUser> pageResult = page(zInfoUserPage, lqw);
|
|
HashMap<String, Object> data = MapUtils.getResult(pageResult);
|
return AjaxResult.success(data);
|
|
}
|
|
private LambdaQueryWrapper<ZInfoUser> buildCondition(ZInfoUser zInfoUser) {
|
|
LambdaQueryWrapper<ZInfoUser> lqw = new LambdaQueryWrapper<>();
|
lqw.eq(zInfoUser.getUserId()!=null,ZInfoUser::getUserId,zInfoUser.getUserId());
|
lqw.like(StringUtils.isNotEmpty(zInfoUser.getAlwaysAddress()),ZInfoUser::getAlwaysAddress,zInfoUser.getAlwaysAddress());
|
lqw.like(StringUtils.isNotEmpty(zInfoUser.getAlwaysPolice()),ZInfoUser::getAlwaysPolice,zInfoUser.getAlwaysPolice());
|
lqw.like(StringUtils.isNotEmpty(zInfoUser.getIdNum()),ZInfoUser::getIdNum,zInfoUser.getIdNum());
|
lqw.like(StringUtils.isNotEmpty(zInfoUser.getLocationAddress()),ZInfoUser::getLocationAddress,zInfoUser.getLocationAddress());
|
lqw.like(StringUtils.isNotEmpty(zInfoUser.getLocationPolice()),ZInfoUser::getLocationPolice,zInfoUser.getLocationPolice());
|
lqw.like(StringUtils.isNotEmpty(zInfoUser.getNation()),ZInfoUser::getNation,zInfoUser.getNation());
|
lqw.like(StringUtils.isNotEmpty(zInfoUser.getNationality()),ZInfoUser::getNationality,zInfoUser.getNationality());
|
lqw.like(StringUtils.isNotEmpty(zInfoUser.getNickName()),ZInfoUser::getNickName,zInfoUser.getNickName());
|
lqw.like(StringUtils.isNotEmpty(zInfoUser.getOldName()),ZInfoUser::getOldName,zInfoUser.getOldName());
|
lqw.like(StringUtils.isNotEmpty(zInfoUser.getPhoneNumber()),ZInfoUser::getPhoneNumber,zInfoUser.getPhoneNumber());
|
lqw.like(StringUtils.isNotEmpty(zInfoUser.getPoliticalOutlook()),ZInfoUser::getPoliticalOutlook,zInfoUser.getPoliticalOutlook());
|
lqw.like(StringUtils.isNotEmpty(zInfoUser.getPosition()),ZInfoUser::getPosition,zInfoUser.getPosition());
|
lqw.like(StringUtils.isNotEmpty(zInfoUser.getUnit()),ZInfoUser::getUnit,zInfoUser.getUnit());
|
lqw.like(zInfoUser.getSex()!=null,ZInfoUser::getSex,zInfoUser.getSex());
|
lqw.like(zInfoUser.getMaritalStatus()!=null,ZInfoUser::getMaritalStatus,zInfoUser.getMaritalStatus());
|
lqw.like(zInfoUser.getBirth()!=null,ZInfoUser::getBirth,zInfoUser.getBirth());
|
return lqw;
|
|
}
|
|
@Override
|
public List<ZInfoUser> selectByCondition(ZInfoUser zInfoUser) {
|
LambdaQueryWrapper<ZInfoUser> lambdaQueryWrapper = buildCondition(zInfoUser);
|
List<ZInfoUser> list = list(lambdaQueryWrapper);
|
log.info("返回的数据为:{}",list);
|
return list;
|
|
}
|
|
@Override
|
public AjaxResult searchMyRelation(Long userId) {
|
|
LambdaQueryWrapper<ZfRelation> lqw = new LambdaQueryWrapper<>();
|
lqw.eq(ZfRelation::getMyId,userId);
|
List<ZfRelation> relationList = zfRelationService.list(lqw);
|
|
ArrayList<UserRelationDto> otherUserList = new ArrayList<>();
|
|
relationList.stream().map(
|
(relation)->{
|
Long otherId = relation.getOtherId();
|
ZInfoUser otherUser = getById(otherId);
|
UserRelationDto userRelationDto = new UserRelationDto();
|
BeanUtils.copyProperties(otherUser,userRelationDto);
|
userRelationDto.setRelation(relation.getRelation());
|
userRelationDto.setId(relation.getId());
|
otherUserList.add(userRelationDto);
|
return relation;
|
}
|
).collect(Collectors.toList());
|
|
return AjaxResult.success(otherUserList);
|
}
|
|
/**
|
* 检查传入对方的id是否存在
|
* @param zfRelation
|
*/
|
private void checkRelation(ZfRelation zfRelation){
|
|
LambdaQueryWrapper<ZInfoUser> lqw = new LambdaQueryWrapper<>();
|
lqw.eq(ZInfoUser::getUserId, zfRelation.getOtherId());
|
|
ZInfoUser zInfoUser2 = getOne(lqw);
|
if (zInfoUser2==null){
|
throw new RuntimeException("对方的id不存在");
|
}
|
}
|
|
@Override
|
@Transactional
|
public AjaxResult addRelation(ZfRelation zfRelation) {
|
checkRelation(zfRelation);
|
|
//获取自己的id并传入
|
SysUser user = SecurityUtils.getLoginUser().getUser();
|
Long userId = user.getUserId();
|
zfRelation.setMyId(userId);
|
|
zfRelationService.save(zfRelation);
|
return AjaxResult.success();
|
}
|
|
@Override
|
@Transactional
|
public AjaxResult updateRelation(ZfRelation zfRelation) {
|
checkRelation(zfRelation);
|
zfRelationService.updateById(zfRelation);
|
return AjaxResult.success();
|
}
|
|
@Override
|
public AjaxResult deleteRelation(Long[] ids) {
|
boolean flag = zfRelationService.removeByIds(Arrays.asList(ids));
|
if (flag){
|
return AjaxResult.success();
|
}else {
|
return AjaxResult.error();
|
}
|
}
|
|
/**
|
* 给用户授权的方法
|
* @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() {
|
//得到自己的家庭id信息
|
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;
|
}
|
|
|
/**
|
* 获取家根网
|
* @return
|
*/
|
@Override
|
public AjaxResult listWithTree() {
|
|
List<ZInfoUser> allPeopleList = list();
|
List<ZInfoUser> result = null;
|
try {
|
result = allPeopleList.stream().filter(people -> people.getUserId()!=1&&(people.getFatherId() == 0||people.getMomId()==0))
|
.map(people -> {
|
people.setChildList(fillChildren(people, allPeopleList));
|
return people;
|
}).collect(Collectors.toList());
|
} catch (NullPointerException e) {
|
throw new RuntimeException("您在加入成员的时候没有指定该成员的父亲或者母亲");
|
}
|
return AjaxResult.success(result);
|
|
}
|
|
/**
|
* 为了家根网、新增或者修改父子关系
|
* @param fatherId
|
* @param motherId
|
* @return
|
*/
|
@Override
|
public AjaxResult addParent(Long fatherId, Long motherId) {
|
SysUser user = SecurityUtils.getLoginUser().getUser();
|
Long userId = user.getUserId();
|
LambdaQueryWrapper<ZInfoUser> zInfoUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
zInfoUserLambdaQueryWrapper.eq(ZInfoUser::getUserId,userId);
|
ZInfoUser zInfoUser = getOne(zInfoUserLambdaQueryWrapper);
|
|
zInfoUser.setFatherId(fatherId);
|
zInfoUser.setMomId(motherId);
|
|
updateById(zInfoUser);
|
return AjaxResult.success();
|
}
|
|
@Override
|
public AjaxResult listAllExceptAdmin() {
|
List<ZInfoUser> collect = list().stream().filter(zInfoUser -> zInfoUser.getUserId() != 1).collect(Collectors.toList());
|
return AjaxResult.success(collect);
|
|
}
|
|
/**
|
* 递归算法
|
* @param people
|
* @param allPeopleList
|
* @return
|
*/
|
private List<ZInfoUser> fillChildren(ZInfoUser people, List<ZInfoUser> allPeopleList) {
|
return allPeopleList.stream().filter(
|
one -> one.getFatherId() == people.getUserId() || one.getMomId() == people.getUserId()
|
).map(
|
one -> {
|
one.setChildList(fillChildren(one, allPeopleList));
|
return one;
|
}
|
).collect(Collectors.toList());
|
|
}
|
|
|
}
|