zouyu
2 天以前 2ea3b36a810adcb639f4d3c72c860f722f601927
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
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;
    }
}