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;
}
}
网友评论