From 4aa65d34684348a8182c7a5dd204e807f4e6a88f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=9C=E5=BB=BA=E8=B6=85?= <3182967682@qq.com> Date: Tue, 1 Dec 2020 18:16:05 +0800 Subject: [PATCH] fix --- .../lz/modules/app/dao/DepartmentsDao.java | 6 ++ .../modules/app/dao/StaffOccupationDao.java | 3 + .../app/service/DepartmentsService.java | 2 + .../app/service/StaffOccupationService.java | 3 + .../service/impl/DepartmentsServiceImpl.java | 69 ++++++++++++++- .../impl/StaffOccupationServiceImpl.java | 6 ++ .../controller/ExportController.java | 45 +++++----- .../performance/dto/SimpleDepartmentDto.java | 22 +++++ .../modules/performance/dto/StaffTypeDto.java | 16 ++++ .../performance/res/LevelDetailExportRes.java | 38 ++++++++ .../service/ChartResultService.java | 3 + .../service/impl/ChartResultServiceImpl.java | 87 +++++++++++++------ .../sys/dao/app/ResultRecordMapper.java | 4 + .../mapper/app/ResultRecordMapper.xml | 23 +++++ .../mapper/generator/DepartmentsDao.xml | 18 ++++ .../mapper/generator/StaffOccupationDao.xml | 10 +++ 16 files changed, 300 insertions(+), 55 deletions(-) create mode 100644 src/main/java/com/lz/modules/performance/dto/SimpleDepartmentDto.java create mode 100644 src/main/java/com/lz/modules/performance/dto/StaffTypeDto.java create mode 100644 src/main/java/com/lz/modules/performance/res/LevelDetailExportRes.java diff --git a/src/main/java/com/lz/modules/app/dao/DepartmentsDao.java b/src/main/java/com/lz/modules/app/dao/DepartmentsDao.java index b93b93a4..a1b41cee 100644 --- a/src/main/java/com/lz/modules/app/dao/DepartmentsDao.java +++ b/src/main/java/com/lz/modules/app/dao/DepartmentsDao.java @@ -6,6 +6,7 @@ import com.lz.modules.app.dto.DepartmentsDto; import com.lz.modules.app.dto.StaffDepartmentDto; import com.lz.modules.app.entity.DepartmentsEntity; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.lz.modules.performance.dto.SimpleDepartmentDto; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -59,4 +60,9 @@ public interface DepartmentsDao extends BaseMapper { DepartmentsEntity selectParentDepartmentByDepartmentId(String departmentId); int delDepartments(@Param("list") List departmentsEntities); + + List selectSimpleDepartmentByDepartmentIds(@Param("depIds") List depIds); + + SimpleDepartmentDto selectSimpleDepartmentByDepartmentId(@Param("departmentId") String departmentId); + } diff --git a/src/main/java/com/lz/modules/app/dao/StaffOccupationDao.java b/src/main/java/com/lz/modules/app/dao/StaffOccupationDao.java index c13d106a..9989ea24 100644 --- a/src/main/java/com/lz/modules/app/dao/StaffOccupationDao.java +++ b/src/main/java/com/lz/modules/app/dao/StaffOccupationDao.java @@ -4,6 +4,7 @@ import com.lz.modules.app.dto.StaffOccupationInfoDto; import com.lz.modules.app.entity.StaffOccupationEntity; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.lz.modules.job.model.responseBo.DepartmentStaffBo; +import com.lz.modules.performance.dto.StaffTypeDto; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -35,4 +36,6 @@ public interface StaffOccupationDao extends BaseMapper { List removeDimissionStaffByStaffIds(@Param("staffIds") List staffIds); List selectAll(); + + List selectStaffTypesByStaffIds(@Param("staffIds")List staffIds); } diff --git a/src/main/java/com/lz/modules/app/service/DepartmentsService.java b/src/main/java/com/lz/modules/app/service/DepartmentsService.java index 41c6bf54..7e24eb72 100644 --- a/src/main/java/com/lz/modules/app/service/DepartmentsService.java +++ b/src/main/java/com/lz/modules/app/service/DepartmentsService.java @@ -61,5 +61,7 @@ public interface DepartmentsService extends IService { List selectAll(); int delDepartments(List departmentsEntities); + + Map> selectDepartmentTreeByDepIds(List depIds); } diff --git a/src/main/java/com/lz/modules/app/service/StaffOccupationService.java b/src/main/java/com/lz/modules/app/service/StaffOccupationService.java index 1ee2f43e..893e07f1 100644 --- a/src/main/java/com/lz/modules/app/service/StaffOccupationService.java +++ b/src/main/java/com/lz/modules/app/service/StaffOccupationService.java @@ -5,6 +5,7 @@ import com.lz.common.utils.PageUtils; import com.lz.modules.app.dto.StaffOccupationInfoDto; import com.lz.modules.app.entity.StaffOccupationEntity; import com.lz.modules.job.model.responseBo.DepartmentStaffBo; +import com.lz.modules.performance.dto.StaffTypeDto; import java.util.List; import java.util.Map; @@ -35,5 +36,7 @@ public interface StaffOccupationService extends IService List removeDimissionStaffByStaffIds(List staffIds); List selectAll(); + + List selectStaffTypesByStaffIds(List staffIds); } diff --git a/src/main/java/com/lz/modules/app/service/impl/DepartmentsServiceImpl.java b/src/main/java/com/lz/modules/app/service/impl/DepartmentsServiceImpl.java index e19201d8..18511d51 100644 --- a/src/main/java/com/lz/modules/app/service/impl/DepartmentsServiceImpl.java +++ b/src/main/java/com/lz/modules/app/service/impl/DepartmentsServiceImpl.java @@ -1,27 +1,28 @@ package com.lz.modules.app.service.impl; +import cn.hutool.core.collection.CollUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.lz.common.utils.PageUtils; import com.lz.common.utils.Query; import com.lz.common.utils.StringUtil; import com.lz.modules.app.dao.DepartmentsDao; import com.lz.modules.app.dao.DepartmentsStaffRelateDao; -import com.lz.modules.app.dao.StaffDao; import com.lz.modules.app.dto.DepartmentInfos; import com.lz.modules.app.dto.DepartmentsDto; import com.lz.modules.app.dto.StaffDepartmentDto; import com.lz.modules.app.dto.StaffDto; import com.lz.modules.app.entity.DepartmentsEntity; import com.lz.modules.app.entity.DepartmentsStaffRelateEntity; -import com.lz.modules.app.entity.StaffEntity; import com.lz.modules.app.service.DepartmentsService; import com.lz.modules.app.service.StaffService; import com.lz.modules.job.model.responseBo.DepartmentInfosBo; +import com.lz.modules.performance.dto.SimpleDepartmentDto; import org.apache.commons.collections.CollectionUtils; -import org.apache.ibatis.annotations.Param; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -305,5 +306,65 @@ public class DepartmentsServiceImpl extends ServiceImpl departmentsEntities){ return departmentsDao.delDepartments(departmentsEntities); } - + + @Override + public Map> selectDepartmentTreeByDepIds(List depIds) { + Map> data = Maps.newHashMap(); + if(CollectionUtils.isEmpty(depIds)){ + return data; + } + + List simpleDepartmentDtos = departmentsDao.selectSimpleDepartmentByDepartmentIds(depIds); + List depNames = Lists.newArrayList(); + //将数据分类 + Map dtos = Maps.newHashMap(); + for (SimpleDepartmentDto simpleDepartmentDto:simpleDepartmentDtos){ + dtos.put(Long.valueOf(simpleDepartmentDto.getDepartmentId()),simpleDepartmentDto); + } + + for (SimpleDepartmentDto simpleDepartmentDto:simpleDepartmentDtos) { + List names = recursiveToBuild(depNames, simpleDepartmentDto, dtos,simpleDepartmentDto.getLevel()); + data.put(Long.valueOf(simpleDepartmentDto.getDepartmentId()),names); + } + return data; + + } + + + /** + * + * @param data 响应数据 + * @param departmentDto 当前部门信息 + * @param dtos 缓存,存在就不查数据库 + * @return + */ + private List recursiveToBuild(List data, SimpleDepartmentDto departmentDto,Map dtos, int level){ + if(departmentDto == null){ + logger.info("部门信息为空,截至当前数据data: " + JSON.toJSONString(data)); + return data; + } + data.add(departmentDto.getDepartmentName()); + if(level == 0){ + logger.info("部门级别为0,departmentId: " + departmentDto.getDepartmentId()); + return data; + } + if(level == data.size()){ + logger.info("数据填充结束,departmentId: " + departmentDto.getDepartmentId() + " ,level: " + level); + return data; + } + SimpleDepartmentDto existSimpleDepartment = dtos.get(departmentDto.getDepartmentParentId()); + + if(existSimpleDepartment!=null){ + return recursiveToBuild(data,existSimpleDepartment,dtos,level); + } + else { + SimpleDepartmentDto simpleDepartmentDto = departmentsDao.selectSimpleDepartmentByDepartmentId(departmentDto.getDepartmentParentId()); + if(simpleDepartmentDto!=null){ + dtos.put(Long.valueOf(departmentDto.getDepartmentParentId()),simpleDepartmentDto); + } + return recursiveToBuild(data,simpleDepartmentDto,dtos,level); + } + + + } } diff --git a/src/main/java/com/lz/modules/app/service/impl/StaffOccupationServiceImpl.java b/src/main/java/com/lz/modules/app/service/impl/StaffOccupationServiceImpl.java index 38a998e7..0138f16b 100644 --- a/src/main/java/com/lz/modules/app/service/impl/StaffOccupationServiceImpl.java +++ b/src/main/java/com/lz/modules/app/service/impl/StaffOccupationServiceImpl.java @@ -10,6 +10,7 @@ import com.lz.modules.app.dao.StaffOccupationDao; import com.lz.modules.app.entity.StaffOccupationEntity; import com.lz.modules.app.service.StaffOccupationService; import com.lz.modules.job.model.responseBo.DepartmentStaffBo; +import com.lz.modules.performance.dto.StaffTypeDto; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -77,4 +78,9 @@ public class StaffOccupationServiceImpl extends ServiceImpl selectAll(){ return staffOccupationDao.selectAll(); } + + @Override + public List selectStaffTypesByStaffIds(List staffIds) { + return staffOccupationDao.selectStaffTypesByStaffIds(staffIds); + } } diff --git a/src/main/java/com/lz/modules/performance/controller/ExportController.java b/src/main/java/com/lz/modules/performance/controller/ExportController.java index 23262d09..a29bee57 100644 --- a/src/main/java/com/lz/modules/performance/controller/ExportController.java +++ b/src/main/java/com/lz/modules/performance/controller/ExportController.java @@ -1,14 +1,19 @@ package com.lz.modules.performance.controller; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; +import com.google.common.collect.Lists; import com.lz.common.utils.PageUtils; import com.lz.common.utils.R; import com.lz.common.utils.StringUtil; import com.lz.modules.performance.req.ChartResultReq; +import com.lz.modules.performance.res.LevelDetailExportRes; import com.lz.modules.performance.service.ChartResultService; import com.lz.modules.sys.entity.app.ResultRecord; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import io.swagger.models.auth.In; import lombok.AllArgsConstructor; @@ -35,40 +40,34 @@ import java.util.List; @RestController @RequestMapping("/performance") @Slf4j +@Api(value="导出excel接口", tags={"导出表格"}) public class ExportController { @Autowired private ChartResultService chartResultService; - @GetMapping("/export/levelDetail") - public R levelDetail(@RequestBody @ApiParam(name = "body",value = "body请求体",required = true) ChartResultReq req,HttpServletResponse response){ - PageUtils pageUtils; + @PostMapping("/export/levelDetail") + @ApiOperation("导出等级详情") + public void levelDetail(@RequestBody @ApiParam(name = "body",value = "body请求体",required = true) ChartResultReq req,HttpServletResponse response){ + List levelDetailExportRes = Lists.newArrayList(); try { //Long userId = getUserId(); Long userId = 313L; req.setLoginUserId(userId); - pageUtils = chartResultService.selectChartDetailList(req); + levelDetailExportRes = chartResultService.selectLevelDetailList(req); } catch (Exception e) { log.error("获取报表等级详情数据异常" ,e); - return R.error(e.getMessage()); } - List list = pageUtils.getList(); - ExcelWriter writer = ExcelUtil.getWriter(); - ResultRecord resultRecord = new ResultRecord(); + List rowHead = CollUtil.newArrayList("序号", "工号", "员工姓名", "当月状态", "一级部门", "二级部门", "三级部门", "职位", "员工月度绩效考核评分","员工月度绩效考核结果等级"); + List data = Lists.newArrayList(); - writer.addHeaderAlias("name", "姓名"); - writer.addHeaderAlias("age", "年龄"); + ExcelWriter writer = ExcelUtil.getWriter(); + buildData(LevelDetailExportRes.class,null,writer); writer.merge(1, "员工信息表"); - writer.write(list, true); + writer.write(data, true); + response.setContentType("application/vnd.ms-excel;charset=utf-8"); - String name = null; - try { - //name = new String("XXX国际贸易公司".getBytes("UTF-8")); - name = new String("XXX国际贸易公司".getBytes("UTF-8"),"utf-8"); - System.out.println("-----" + name); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } + String name = "test测试"; response.setHeader("Content-Disposition", "attachment;filename=" + name + ".xls"); ServletOutputStream out = null; try { @@ -80,13 +79,14 @@ public class ExportController { writer.close(); } IoUtil.close(out); - return R.ok().put("data",pageUtils); - } + + + //对应实体属性名与表列名 private void buildData(Class data,List tags,ExcelWriter writer){ if(data == null || CollectionUtils.isEmpty(tags)){ log.info("导出excel-实体属性或数据为空!"); @@ -97,11 +97,10 @@ public class ExportController { log.info("导出excel-实体属性与数据大小不一致!"); return; } - System.out.println(fields.length); for(int i=0; i countAssessNumByFlowProcess(AssessDetailReq req); + List selectLevelDetailList(ChartResultReq req); + } diff --git a/src/main/java/com/lz/modules/performance/service/impl/ChartResultServiceImpl.java b/src/main/java/com/lz/modules/performance/service/impl/ChartResultServiceImpl.java index e3731c09..17ee857b 100644 --- a/src/main/java/com/lz/modules/performance/service/impl/ChartResultServiceImpl.java +++ b/src/main/java/com/lz/modules/performance/service/impl/ChartResultServiceImpl.java @@ -14,6 +14,7 @@ import com.lz.modules.app.entity.DepartmentsStaffRelateEntity; import com.lz.modules.app.entity.StaffEntity; import com.lz.modules.app.service.DepartmentsService; import com.lz.modules.app.service.DepartmentsStaffRelateService; +import com.lz.modules.app.service.StaffOccupationService; import com.lz.modules.app.service.StaffService; import com.lz.modules.flow.dao.EvaluationGroupMapper; import com.lz.modules.flow.dao.FlowChartMapper; @@ -23,6 +24,7 @@ import com.lz.modules.flow.entity.FlowStart; import com.lz.modules.flow.service.EvaluationGroupService; import com.lz.modules.flow.service.FlowChartService; import com.lz.modules.flow.service.FlowStartService; +import com.lz.modules.performance.dto.StaffTypeDto; import com.lz.modules.performance.enums.ResultFlowProcessEnum; import com.lz.modules.performance.req.AssessDetailReq; import com.lz.modules.performance.req.ChartResultReq; @@ -30,6 +32,7 @@ import com.lz.modules.performance.req.ChartStartsReq; import com.lz.modules.performance.res.ChartStartsRes; import com.lz.modules.performance.res.ChartStatistical; import com.lz.modules.performance.res.ChartStatisticalRes; +import com.lz.modules.performance.res.LevelDetailExportRes; import com.lz.modules.performance.service.AssessService; import com.lz.modules.performance.service.ChartResultService; import com.lz.modules.sys.dao.app.ResultRecordMapper; @@ -75,6 +78,8 @@ public class ChartResultServiceImpl implements ChartResultService { private AssessService assessService; @Autowired private EvaluationGroupMapper evaluationGroupMapper; + @Autowired + private StaffOccupationService staffOccupationService; private static final Long processId = 1L; @@ -183,34 +188,7 @@ public class ChartResultServiceImpl implements ChartResultService { @Override public PageUtils selectChartDetailList(ChartResultReq req) { - String departmentIds = req.getDepartmentIds(); - Set allDepart = Sets.newHashSet(); - if(StringUtil.isNotBlank(departmentIds)){ - String[] split = departmentIds.split(","); - for(String s:split){ - List deparmentIds = staffService.selectAllDeparmentIdsByDepartmentParentId(s); - allDepart.addAll(deparmentIds); - } - } - List allDeparmentIds = new ArrayList<>(allDepart); - //自己管理的和所有的部门交集 - log.info("selectChartDetailList 查询部门:" + JSON.toJSONString(allDeparmentIds)); - List mandepartmentIds = assessService.roleDepartments(req.getLoginUserId()); - if(mandepartmentIds!=null ){ - if(mandepartmentIds.size()==0){ - return new PageUtils(); - } - log.info("selectChartDetailList 管理部门:" + JSON.toJSONString(mandepartmentIds)); - mandepartmentIds.retainAll(allDeparmentIds); - if(mandepartmentIds.size()==0){ - return new PageUtils(); - } - } - else { - //如果掌管所有部门,查询请求部门 - mandepartmentIds = allDeparmentIds; - } - log.info("selectChartDetailList 交集部门:" + JSON.toJSONString(mandepartmentIds)); + List mandepartmentIds = getMandepartmentIds(req.getDepartmentIds(), req.getLoginUserId()); List finalMandepartmentIds = mandepartmentIds; PageUtils pageUtils = PageUtils.startPage(req.getCurrPage(), req.getPageSize()).doSelect( page -> resultRecordMapper.selectChartDetailList(page, finalMandepartmentIds,req.getStartId(),req.getScoreLevel()) @@ -261,6 +239,27 @@ public class ChartResultServiceImpl implements ChartResultService { return data; } + + @Override + public List selectLevelDetailList(ChartResultReq req) { + List mandepartmentIds = getMandepartmentIds(req.getDepartmentIds(), req.getLoginUserId()); + List levelDetailExportRes = resultRecordMapper.selectLevelDetailList(mandepartmentIds, req.getStartId(), req.getScoreLevel()); + + if(CollectionUtils.isEmpty(levelDetailExportRes)){ + return Collections.EMPTY_LIST; + } + List staffIds = levelDetailExportRes.stream().map(LevelDetailExportRes::getStaffId).collect(Collectors.toList()); + List depIds = levelDetailExportRes.stream().map(levelDetailExportRes1 -> levelDetailExportRes1.getDepartmentId().toString()).collect(Collectors.toList()); + + List staffTypeDtos = staffOccupationService.selectStaffTypesByStaffIds(staffIds); + Map> map = departmentsService.selectDepartmentTreeByDepIds(depIds); + + //TODO 整合数据 + + return levelDetailExportRes; + + } + //构建流程默认人数 private List buildProcess(List process,Long startId,List mandepartmentIds,AssessDetailReq req){ List data = Lists.newArrayList(); @@ -314,4 +313,36 @@ public class ChartResultServiceImpl implements ChartResultService { }); return depStaffs; } + + private List getMandepartmentIds(String departmentIds,Long loginUserId){ + Set allDepart = Sets.newHashSet(); + if(StringUtil.isNotBlank(departmentIds)){ + String[] split = departmentIds.split(","); + for(String s:split){ + List deparmentIds = staffService.selectAllDeparmentIdsByDepartmentParentId(s); + allDepart.addAll(deparmentIds); + } + } + List allDeparmentIds = new ArrayList<>(allDepart); + //自己管理的和所有的部门交集 + log.info("selectChartDetailList 查询部门:" + JSON.toJSONString(allDeparmentIds)); + List mandepartmentIds = assessService.roleDepartments(loginUserId); + if(mandepartmentIds!=null ){ + if(mandepartmentIds.size()==0){ + return Collections.EMPTY_LIST; + } + log.info("selectChartDetailList 管理部门:" + JSON.toJSONString(mandepartmentIds)); + mandepartmentIds.retainAll(allDeparmentIds); + if(mandepartmentIds.size()==0){ + return Collections.EMPTY_LIST; + } + } + else { + //如果掌管所有部门,查询请求部门 + mandepartmentIds = allDeparmentIds; + } + log.info("selectChartDetailList 交集部门:" + JSON.toJSONString(mandepartmentIds)); + return mandepartmentIds; + + } } diff --git a/src/main/java/com/lz/modules/sys/dao/app/ResultRecordMapper.java b/src/main/java/com/lz/modules/sys/dao/app/ResultRecordMapper.java index 6607f392..5e0dc8e8 100644 --- a/src/main/java/com/lz/modules/sys/dao/app/ResultRecordMapper.java +++ b/src/main/java/com/lz/modules/sys/dao/app/ResultRecordMapper.java @@ -21,6 +21,7 @@ import com.lz.modules.performance.req.AssessDetailReq; import com.lz.modules.performance.req.OwnResultReq; import com.lz.modules.performance.res.AssessManagerDetailRes; import com.lz.modules.performance.res.ChartStatistical; +import com.lz.modules.performance.res.LevelDetailExportRes; import com.lz.modules.sys.entity.app.ResultRecord; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -108,4 +109,7 @@ public interface ResultRecordMapper extends BaseMapper { List selectResultRecordsByStartId(Long startId); + List selectLevelDetailList(@Param("departmentIds") List departmentIds, @Param("startId")Long startId, @Param("scoreLevel")String scoreLevel); + + } \ No newline at end of file diff --git a/src/main/resources/mapper/app/ResultRecordMapper.xml b/src/main/resources/mapper/app/ResultRecordMapper.xml index 30a0d8cf..a5508889 100644 --- a/src/main/resources/mapper/app/ResultRecordMapper.xml +++ b/src/main/resources/mapper/app/ResultRecordMapper.xml @@ -619,6 +619,29 @@ and start_id = #{startId} + diff --git a/src/main/resources/mapper/generator/DepartmentsDao.xml b/src/main/resources/mapper/generator/DepartmentsDao.xml index ba3c028f..7928da60 100644 --- a/src/main/resources/mapper/generator/DepartmentsDao.xml +++ b/src/main/resources/mapper/generator/DepartmentsDao.xml @@ -188,4 +188,22 @@ + + + + + + diff --git a/src/main/resources/mapper/generator/StaffOccupationDao.xml b/src/main/resources/mapper/generator/StaffOccupationDao.xml index 9821cd63..d9015dff 100644 --- a/src/main/resources/mapper/generator/StaffOccupationDao.xml +++ b/src/main/resources/mapper/generator/StaffOccupationDao.xml @@ -72,4 +72,14 @@ select * from lz_staff_occupation where is_delete=0 + +