package com.ruoyi.inspect.service.impl;
|
|
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.support.ExcelTypeEnum;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.common.enums.StaffSkillLevelType;
|
import com.ruoyi.common.utils.excel.EasyExcelUtils;
|
import com.ruoyi.common.utils.excel.FullCustomAutoWidthHandler;
|
import com.ruoyi.common.utils.excel.HeaderContentRowHeightHandler;
|
import com.ruoyi.inspect.dto.StaffCompetencyLevelEvaluateRecordDTO;
|
import com.ruoyi.inspect.mapper.StaffCompetencyInspectItemConfigMapper;
|
import com.ruoyi.inspect.mapper.StaffCompetencyLevelEvaluateRecordMapper;
|
import com.ruoyi.inspect.pojo.StaffCompetencyInspectItemConfig;
|
import com.ruoyi.inspect.pojo.StaffCompetencyLevelEvaluateRecord;
|
import com.ruoyi.inspect.service.StaffCompetencyLevelEvaluateRecordService;
|
import com.ruoyi.inspect.vo.StaffConfigHeaderVO;
|
import com.ruoyi.inspect.vo.TestUserVO;
|
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.poi.ss.usermodel.IndexedColors;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.net.URLEncoder;
|
import java.nio.charset.StandardCharsets;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author 27233
|
* @description 针对表【staff_competency_level_evaluate_record(人员能力等级评定表)】的数据库操作Service实现
|
* @createDate 2026-03-26 17:16:56
|
*/
|
@Service
|
public class StaffCompetencyLevelEvaluateRecordServiceImpl extends ServiceImpl<StaffCompetencyLevelEvaluateRecordMapper, StaffCompetencyLevelEvaluateRecord>
|
implements StaffCompetencyLevelEvaluateRecordService{
|
|
@Autowired
|
private StaffCompetencyInspectItemConfigMapper configMapper;
|
|
private final static Long roleId = 4L;
|
|
/**
|
* 查询检测人员列表
|
* @param record
|
* @return
|
*/
|
private List<TestUserVO> getTestUserList(StaffCompetencyLevelEvaluateRecordDTO record){
|
record.setRoleId(roleId);
|
return baseMapper.selectTestUserList(record);
|
}
|
|
@Override
|
public List<Map<String, Object>> getPageList(StaffCompetencyLevelEvaluateRecordDTO record) {
|
List<Map<String, Object>> hashMaps = new ArrayList<>();
|
//查询检验项点配置列表,转换为键值对
|
StaffCompetencyInspectItemConfig itemConfig = new StaffCompetencyInspectItemConfig();
|
itemConfig.setIsEnable(Boolean.TRUE);
|
List<StaffCompetencyInspectItemConfig> configs = configMapper.selectConfigList(itemConfig);
|
Map<String,Object> configMaps = transformConfigList(configs);
|
//查询检测人员列表
|
List<TestUserVO> testUserList = getTestUserList(record);
|
List<Integer> userIds = testUserList.stream().map(TestUserVO::getUserId).collect(Collectors.toList());
|
//查询人员能力考评列表
|
List<StaffCompetencyLevelEvaluateRecord> recordVos = baseMapper.selectList(Wrappers.<StaffCompetencyLevelEvaluateRecord>lambdaQuery().in(!userIds.isEmpty(),StaffCompetencyLevelEvaluateRecord::getUserId,userIds));
|
if(testUserList.isEmpty())return Collections.emptyList();
|
testUserList.forEach(u->{
|
HashMap<String, Object> map = new HashMap<>();
|
map.put("userName",u.getUserName());
|
map.put("userId",u.getUserId());
|
map.put("account",u.getAccount());
|
map.put("postName",u.getPostName());
|
List<StaffCompetencyLevelEvaluateRecord> userRecords = recordVos.stream().filter(f -> Objects.equals(f.getUserId(), u.getUserId())).collect(Collectors.toList());
|
map.putAll(configMaps);
|
if(!userRecords.isEmpty()){
|
userRecords.forEach(ur->{
|
map.put(ur.getItemConfigId().toString(),ur);
|
});
|
}
|
hashMaps.add(map);
|
});
|
return hashMaps;
|
}
|
|
@Override
|
public void exportRecords(HttpServletResponse response, StaffCompetencyLevelEvaluateRecordDTO recordDTO) {
|
response.reset();
|
try {
|
//1.组装数据
|
List<List<String>> dataList = new ArrayList<>();
|
List<TestUserVO> testUserList = getTestUserList(recordDTO);
|
List<Integer> userIds = testUserList.stream().map(TestUserVO::getUserId).collect(Collectors.toList());
|
//查询人员能力考评列表
|
List<StaffCompetencyLevelEvaluateRecord> recordVos = baseMapper.selectList(Wrappers.<StaffCompetencyLevelEvaluateRecord>lambdaQuery().in(!userIds.isEmpty(),StaffCompetencyLevelEvaluateRecord::getUserId,userIds));
|
//查询启用的检验项点配置列表
|
List<StaffConfigHeaderVO> headerVOS = configMapper.selectConfigHeader();
|
for (int i = 0; i < testUserList.size(); i++) {
|
TestUserVO u = testUserList.get(i);
|
List<String> rowData = new ArrayList<>();
|
rowData.add(String.valueOf(i+1));
|
rowData.add(u.getUserName());
|
rowData.add(u.getPostName());
|
//过滤当前人员的能力考评记录
|
List<StaffCompetencyLevelEvaluateRecord> currentUserRecords = recordVos.stream().filter(f -> ObjectUtils.equals(f.getUserId(), u.getUserId())).collect(Collectors.toList());
|
headerVOS.forEach(head->{
|
StaffCompetencyLevelEvaluateRecord record = currentUserRecords.stream().filter(f -> ObjectUtils.equals(f.getItemConfigId(), head.getChildrenId())).findFirst().orElse(null);
|
if(ObjectUtils.isEmpty(record)){
|
rowData.add("");
|
}else{
|
rowData.add(StaffSkillLevelType.getIconByValue(record.getLevel()));
|
}
|
});
|
dataList.add(rowData);
|
}
|
//2.导出
|
String fileName = "中天耐丝质量部检验员能力矩阵图"+ ExcelTypeEnum.XLSX;
|
fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
|
response.setContentType("application/vnd.ms-excel");
|
response.setHeader("Cache-Control", "no-cache");
|
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
|
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
|
// 配置特殊列规则:第0列最大20字符,第2列最大25字符
|
Map<Integer, Integer> columnRules = new HashMap<>();
|
columnRules.put(0, 15);
|
columnRules.put(1, 24);
|
EasyExcel.write(response.getOutputStream())
|
.head(getExportTableHeader(headerVOS))
|
.registerWriteHandler(new FullCustomAutoWidthHandler(columnRules, 15, 4))
|
.registerWriteHandler(new HeaderContentRowHeightHandler(35,20,4))
|
.registerWriteHandler(EasyExcelUtils.getStyleStrategy(IndexedColors.GREY_25_PERCENT))
|
.sheet("Sheet 1")
|
.doWrite(dataList);
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
}
|
|
private List<List<String>> getExportTableHeader(List<StaffConfigHeaderVO> configHeaderVOList){
|
List<List<String>> headerList = new ArrayList<>();
|
|
List<String> row1 = new ArrayList<>();
|
row1.add("中天耐丝质量部检验员能力矩阵图");
|
row1.add("不了解:○;基本了解:●;熟练掌握:☆;精通:★");
|
row1.add("序号");
|
row1.add("序号");
|
List<String> row2 = new ArrayList<>();
|
row2.add("中天耐丝质量部检验员能力矩阵图");
|
row2.add("不了解:○;基本了解:●;熟练掌握:☆;精通:★");
|
row2.add("姓名");
|
row2.add("姓名");
|
List<String> row3 = new ArrayList<>();
|
row3.add("中天耐丝质量部检验员能力矩阵图");
|
row3.add("不了解:○;基本了解:●;熟练掌握:☆;精通:★");
|
row3.add("岗位");
|
row3.add("岗位");
|
headerList.add(row1);
|
headerList.add(row2);
|
headerList.add(row3);
|
configHeaderVOList.forEach(f->{
|
List<String> configRow = new ArrayList<>();
|
configRow.add("中天耐丝质量部检验员能力矩阵图");
|
configRow.add("不了解:○;基本了解:●;熟练掌握:☆;精通:★");
|
configRow.add(f.getItemName());
|
configRow.add(f.getChildrenItemName());
|
headerList.add(configRow);
|
});
|
return headerList;
|
}
|
|
/**
|
* 将配置列表转换从键值对
|
* @param configs 配置列表
|
* @return
|
*/
|
private Map<String, Object> transformConfigList(List<StaffCompetencyInspectItemConfig> configs) {
|
Map<String, Object> hashMap = new HashMap<>();
|
if(!configs.isEmpty()){
|
configs.stream().filter(f->f.getParentId()>0).forEach(f->hashMap.put(f.getId().toString(),new StaffCompetencyLevelEvaluateRecord()));
|
}
|
return hashMap;
|
}
|
}
|