1.List转为List

2020-09-03  本文已影响0人  盗生一
package com.gxhj.safecampus.visit.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gxhj.commontools.utils.BeanUtils;
import com.gxhj.commontools.utils.CollectionUtils;
import com.gxhj.commontools.utils.ConvertUtils;
import com.gxhj.core.base.service.impl.CommonServiceImpl;
import com.gxhj.core.exception.BusinessException;
import com.gxhj.core.model.PageInfo;
import com.gxhj.safecampus.person.entity.EmployeeInfo;
import com.gxhj.safecampus.person.service.IEmployeeService;
import com.gxhj.safecampus.visit.constant.AccessingInviteStatusType;
import com.gxhj.safecampus.visit.entity.AccessingInviteInfo;
import com.gxhj.safecampus.visit.mapper.AccessingInviteMapper;
import com.gxhj.safecampus.visit.service.IAccessingInviteService;
import com.gxhj.safecampus.visit.service.IAccessingRecordService;
import com.gxhj.safecampus.visit.vo.AccessingInviteInfoVo;
import com.gxhj.usermanage.entity.GroupInfo;
import com.gxhj.usermanage.service.IGroupService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author ZS
 * @since 2020-08-20
 */
@Service
public class AccessingInviteServiceImpl extends CommonServiceImpl<AccessingInviteMapper, AccessingInviteInfoVo, AccessingInviteInfo> implements IAccessingInviteService {

    @Autowired
    private IAccessingRecordService iAccessingRecordService;

    @Autowired
    private IEmployeeService employeeService;

    @Autowired
    private IGroupService groupService;

    @Override
    public String entityName() {
        return "访问邀请";
    }

    @Override
    public AccessingInviteInfo getInfoById(Serializable id) {
            AccessingInviteInfo info = super.getById(id);
            if (info==null) {
                throw new BusinessException(String.format("%s编号对应信息不存在", this.entityName()));
            }else {
                EmployeeInfo employeeInfo = employeeService.getById(info.getFirstTrialPersonal());
                GroupInfo groupInfo = groupService.getById(info.getUnitID());
                // 邀请人姓名
                info.setFinalMind(employeeInfo.getDepartment());
                // 邀请人部门
                info.setFirstTrialMind(employeeInfo.getDepartment());
                // 邀请人单位
                info.setVisitMatter(groupInfo.getName());
                return info;
            }
    }

    @Override
    public IPage<AccessingInviteInfo> page(AccessingInviteInfoVo queryCondition, PageInfo pageInfo) {
        // 10(1,0) 待初审  46(4,6)终审通过
        // 构建分页信息
        Page<AccessingInviteInfo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
        //查询条件:单位ID 访问对象名 审核状态 起止时间
        // 通过对象名获取 对象id
        List<String> lstEmployeeIds = null;
        if (StringUtils.isNotBlank(queryCondition.getIntervieweesName())) {
            lstEmployeeIds = this.employeeService.lambdaQuery().select(EmployeeInfo::getEmployeeId)
                    .like(EmployeeInfo::getName, queryCondition.getIntervieweesName())
                    .list()
                    .stream().map(EmployeeInfo::getEmployeeId).collect(Collectors.toList());
        }
        LambdaQueryChainWrapper<AccessingInviteInfo> le = super.lambdaQuery()
                .eq(queryCondition.getUnitID()!=null, AccessingInviteInfo::getUnitID, queryCondition.getUnitID())
                .ge(queryCondition.getStartDate() != null, AccessingInviteInfo::getAccessingTime, queryCondition.getStartDate())
                .le(queryCondition.getEndDate() != null, AccessingInviteInfo::getBeOffTime, queryCondition.getEndDate())
                .in(CollectionUtils.isNotEmpty(lstEmployeeIds), AccessingInviteInfo::getFirstTrialPersonal, lstEmployeeIds);
        Integer status = queryCondition.getStatus();
        if (status != null) {
            // 待初审
            if (status == AccessingInviteStatusType.WAIT_FIRST_TRIAL) {
                le = le.and(wrapper -> wrapper.in(AccessingInviteInfo::getStatus, AccessingInviteStatusType.firstTrialStatus()));
            }
            // 审核通过
            else if (status == AccessingInviteStatusType.FINAL_TRIAL_SUCCESS) {
                le = le.and(wrapper -> wrapper.in(AccessingInviteInfo::getStatus, AccessingInviteStatusType.finalTrialSuccess()));
            } else {
                le = le.and(wrapper -> wrapper.in(AccessingInviteInfo::getStatus, status));
            }
        }
        Page<AccessingInviteInfo> pageList = le.orderByDesc(AccessingInviteInfo::getCreateTime).page(page);
        // 查询结果处理
        if (CollectionUtils.isNotEmpty(pageList.getRecords())) {
            // 处理附件预览地址
            processListEntityFileUrl(pageList.getRecords());
            // 处理结果数据
            pageList.setRecords(this.afterQuery(pageList.getRecords()));
        }
        return pageList;
    }

    @Override
    public List<AccessingInviteInfo> afterQuery(List<AccessingInviteInfo> list) {
        // 获取邀请id集合
        List<Integer> lstInviteId = list.stream().map(AccessingInviteInfo::getAccessingInviteID).collect(Collectors.toList());
        // 通过邀请id集 合获取对应邀请的 签到人数
        Map<Integer, Integer> inviteIDComingNumberMap = this.iAccessingRecordService.selectComingNumber(lstInviteId);
        // 通过groupIds获取单位集合
        List<String> lstGroupId = list.stream().map(v -> ConvertUtils.parseStr(v.getUnitID())).collect(Collectors.toList());

        Map<String, GroupInfo> groupInfoMap = this.groupService.lambdaQuery().in(CollectionUtils.isNotEmpty(lstGroupId), GroupInfo::getGroupId, lstGroupId)
                .list()
                .stream().collect(Collectors.toMap(GroupInfo::getGroupId, Function.identity()));

        // 查初审人和邀请人姓名    // 通过对象id集合  邀请对象名
        List<String> lstEmployeeId = list.stream().map(e-> ConvertUtils.parseStr(e.getFirstTrialPersonal())).collect(Collectors.toList());
        Map<String, EmployeeInfo> employeeInfoMap = this.employeeService.getEmployeeInfoMap(lstEmployeeId);
        // 查终审人姓名
        List<String> finalTrailEmployee = list.stream().map(e -> ConvertUtils.parseStr(e.getFinalPersonal())).collect(Collectors.toList());
        Map<String, EmployeeInfo> finalEmployeeInfoMap = this.employeeService.getEmployeeInfoMap(finalTrailEmployee);

        // 遍历列表构造Vo对象
        AccessingInviteInfoVo infoVo;

        List<AccessingInviteInfo> lstVoInfo = new ArrayList<>(list.size());

        GroupInfo defaultGrp = new GroupInfo();
        EmployeeInfo defaultEmp = new EmployeeInfo();
        GroupInfo findGrp;
        EmployeeInfo findEmp;
        for (AccessingInviteInfo accessingInviteInfo : list) {
            infoVo = new AccessingInviteInfoVo();
            // 复制对象信息
            BeanUtils.copy(accessingInviteInfo, infoVo);
            // 设置签到人数
            infoVo.setComingNumber(inviteIDComingNumberMap.getOrDefault(accessingInviteInfo.getAccessingInviteID(), 0));

            findEmp = employeeInfoMap.getOrDefault(accessingInviteInfo.getFirstTrialPersonal(), defaultEmp);
            // 设置邀请名
            infoVo.setIntervieweesName(findEmp.getName());
            // 设置初审人
            infoVo.setFirstTrialName(findEmp.getName());
            // 设置总审人
            infoVo.setFinalTrialName(finalEmployeeInfoMap.getOrDefault(accessingInviteInfo.getFinalPersonal(),findEmp).getName());
            // 设置部门
            infoVo.setDepartment(findEmp.getDepartment());

            findGrp = groupInfoMap.getOrDefault(accessingInviteInfo.getUnitID(), defaultGrp);
            // 设置单位
            infoVo.setUnitName(findGrp.getName());
            // 设置地址
            infoVo.setUnitAddress(findGrp.getAddress());
            lstVoInfo.add(infoVo);
        }
        return lstVoInfo;
    }
}

上一篇下一篇

猜你喜欢

热点阅读