Browse Source

修复绩效bug

lihui007 3 years ago
parent
commit
0cd046dcac

+ 21 - 0
operation_manager/src/main/java/com/huaxu/evaluation/controller/EvaluationResultController.java

@@ -1,5 +1,6 @@
 package com.huaxu.evaluation.controller;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.huaxu.evaluation.dto.EvaluationResultDto;
 import com.huaxu.evaluation.enums.EvaluationResultStatus;
@@ -8,12 +9,16 @@ import com.huaxu.evaluation.vo.EvaluationResultVo;
 import com.huaxu.model.AjaxMessage;
 import com.huaxu.model.Pagination;
 import com.huaxu.model.ResultStatus;
+import com.huaxu.utils.EvaluationUtil;
+import com.huaxu.utils.ExcelUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * @ClassName EvaluationResultController
@@ -27,6 +32,9 @@ import javax.validation.Valid;
 @Api(tags = "考评结果")
 public class EvaluationResultController {
 
+    @Value("${UMIS.sys_excel_path}")
+    private String baseDir;
+
     @Autowired
     private EvaluationResultService evaluationResultService;
 
@@ -41,5 +49,18 @@ public class EvaluationResultController {
         return new AjaxMessage<>(ResultStatus.OK, new Pagination<>(page));
     }
 
+    @ApiOperation(value = "考评结果导出")
+    @RequestMapping(value = "/export/excel", method = RequestMethod.POST)
+    @ResponseBody
+    public AjaxMessage<String> exportExcel(@RequestBody @Valid EvaluationResultDto dto) {
+        List<EvaluationResultVo> dataList = evaluationResultService.listEvaluationResult(dto);
+        if (CollectionUtil.isEmpty(dataList)) {
+            return new AjaxMessage<>(EvaluationResultStatus.DATA_NOT_FOUND.getStatus(), EvaluationResultStatus.DATA_NOT_FOUND.getMessage(),null);
+        }
+        List<List<String>> reportTitle = EvaluationUtil.getExcelTitle();
+        String filePath = ExcelUtil.writeSimpleExcelWithHeader(baseDir, "工单绩效报表", reportTitle, EvaluationUtil.getExcelData(dataList));
+        return new AjaxMessage<>(ResultStatus.OK, filePath);
+    }
+
 }
 

+ 9 - 0
operation_manager/src/main/java/com/huaxu/evaluation/dao/EvaluationResultMapper.java

@@ -98,5 +98,14 @@ public interface EvaluationResultMapper {
      **/
     List<EvaluationPerformanceAvgVo> countPerformanceAvg(@Param("dto")EvaluationReportQueryDto dto);
 
+    /***
+     * 查询考评结果
+     * @author lihui
+     * @date 14:48 2021/5/19
+     * @param dto :
+     * @return java.util.List<com.huaxu.evaluation.vo.EvaluationResultVo>
+     **/
+    List<EvaluationResultVo> listEvaluationResult(@Param("dto") EvaluationResultQueryDto dto);
+
 
 }

+ 12 - 2
operation_manager/src/main/java/com/huaxu/evaluation/service/EvaluationResultService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.huaxu.evaluation.dto.EvaluationReportQueryDto;
 import com.huaxu.evaluation.dto.EvaluationResultDto;
 import com.huaxu.evaluation.dto.EvaluationReportDto;
+import com.huaxu.evaluation.dto.EvaluationResultQueryDto;
 import com.huaxu.evaluation.vo.*;
 import org.apache.ibatis.annotations.Param;
 
@@ -52,7 +53,7 @@ public interface EvaluationResultService {
      * 统计绩效合格数
      * @Author lihui
      * @Date 18:29 2021/5/17
-     * @param dto :
+     * @param dto : 查询参数
      * @param qualifiedValue :
      * @return java.util.List<com.huaxu.evaluation.vo.EvaluationQualifiedNumberVo>
      **/
@@ -62,8 +63,17 @@ public interface EvaluationResultService {
      * 统计绩效人均值
      * @Author lihui
      * @Date 18:29 2021/5/17
-     * @param dto :
+     * @param dto :查询参数
      * @return java.util.List<com.huaxu.evaluation.vo.EvaluationPerformanceAvgVo>
      **/
     List<EvaluationPerformanceAvgVo> countPerformanceAvg(EvaluationReportDto dto);
+
+    /***
+     * 查询考评结果
+     * @author lihui
+     * @date 14:49 2021/5/19
+     * @param dto : 查询参数
+     * @return java.util.List<com.huaxu.evaluation.vo.EvaluationResultVo>
+     **/
+    List<EvaluationResultVo> listEvaluationResult(@Param("dto") EvaluationResultDto dto);
 }

+ 77 - 33
operation_manager/src/main/java/com/huaxu/evaluation/service/impl/EvaluationResultServiceImpl.java

@@ -54,42 +54,12 @@ public class EvaluationResultServiceImpl implements EvaluationResultService {
 
     @Override
     public IPage<EvaluationResultVo> findPage(EvaluationResultDto dto) {
-        EvaluationResultQueryDto queryDto = new EvaluationResultQueryDto();
-        BeanUtils.copyProperties(dto, queryDto);
-        // 获取用户权限
-        LoginUser currentUser = UserUtil.getCurrentUser();
-        if (StringUtils.isEmpty(currentUser.getTenantId())){
+        EvaluationResultQueryDto queryDto = getEvaluationReportQueryDto(dto);
+        if (queryDto == null) {
             return null;
         }
-        queryDto.setTenantId(currentUser.getTenantId());
-        queryDto.setProgramItems(currentUser.getProgramItemList());
-        queryDto.setUserType("3");
-        queryDto.setPermissonType(currentUser.getPermissonType());
-        // 季度需要格式化月份
-        if (queryDto.getCycle() == EvaluationCycleEnums.QUARTER.getType()){
-            queryDto.setMonth(format(queryDto.getCycle(), queryDto.getMonth()));
-        }
         Page<EvaluationResultVo> page =  evaluationResultMapper.findPage(new Page<>(dto.getPageNum(), dto.getPageSize()), queryDto);
-        List<EvaluationResultVo> list = page.getRecords();
-        if (CollectionUtil.isEmpty(list)) {
-            return page;
-        }
-        Map<String,String> stateMap = userCenterClient.selectListByPCodes("SC_EVALUATION_STATE");
-        Map<String,String> gradMap  = userCenterClient.selectListByPCodes("SC_EVALUATION_GRADE");
-        // 避免相同的id去缓存取
-        Map<String, String> companyOrgNameMap = new HashMap<>();
-        Map<String, String> deptOrgNameMap    = new HashMap<>();
-        for (EvaluationResultVo vo : list) {
-            if (StringUtils.isNotEmpty(vo.getCompanyOrgId())){
-                vo.setCompanyOrgName(getOrgName(companyOrgNameMap, vo.getCompanyOrgId()));
-            }
-            if (StringUtils.isNotEmpty(vo.getDeptOrgId())) {
-                vo.setDeptOrgName(getOrgName(deptOrgNameMap, vo.getDeptOrgId()));
-            }
-            vo.setState(stateMap.get(vo.getState()));
-            vo.setEvaluationGrade(gradMap.get(vo.getEvaluationGrade()));
-            vo.setCycle(EvaluationUtil.formatCycle(dto.getCycle(), vo.getYear(), vo.getMonth()));
-        }
+        formatEvaluationResultVo(page.getRecords(), dto.getCycle());
         return page;
     }
 
@@ -164,7 +134,51 @@ public class EvaluationResultServiceImpl implements EvaluationResultService {
         return evaluationResultMapper.countPerformanceAvg(queryDto);
     }
 
+    @Override
+    public List<EvaluationResultVo> listEvaluationResult(EvaluationResultDto dto) {
+        EvaluationResultQueryDto queryDto = getEvaluationReportQueryDto(dto);
+        if (queryDto == null) {
+            return null;
+        }
+        List<EvaluationResultVo> resultVos = evaluationResultMapper.listEvaluationResult(queryDto);
+        formatEvaluationResultVo(resultVos, dto.getCycle());
+        return resultVos;
+    }
+
 
+    /***
+     * 考评结果参数
+     * @author lihui
+     * @date 14:55 2021/5/19
+     * @param dto : 请求参数
+     * @return com.huaxu.evaluation.dto.EvaluationResultQueryDto
+     **/
+    private EvaluationResultQueryDto getEvaluationReportQueryDto(EvaluationResultDto dto){
+        EvaluationResultQueryDto queryDto = new EvaluationResultQueryDto();
+        BeanUtils.copyProperties(dto, queryDto);
+        // 获取用户权限
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        if (StringUtils.isEmpty(currentUser.getTenantId())){
+            return null;
+        }
+        queryDto.setTenantId(currentUser.getTenantId());
+        queryDto.setProgramItems(currentUser.getProgramItemList());
+        queryDto.setUserType("3");
+        queryDto.setPermissonType(currentUser.getPermissonType());
+        // 季度需要格式化月份
+        if (queryDto.getCycle() == EvaluationCycleEnums.QUARTER.getType()){
+            queryDto.setMonth(format(queryDto.getCycle(), queryDto.getMonth()));
+        }
+        return queryDto;
+    }
+
+    /***
+     * 报表参数
+     * @author lihui
+     * @date 14:54 2021/5/19
+     * @param dto : 请求参数
+     * @return com.huaxu.evaluation.dto.EvaluationReportQueryDto
+     **/
     private EvaluationReportQueryDto getReportQuery(EvaluationReportDto dto){
         EvaluationReportQueryDto queryDto = new EvaluationReportQueryDto();
         BeanUtils.copyProperties(dto, queryDto);
@@ -184,6 +198,36 @@ public class EvaluationResultServiceImpl implements EvaluationResultService {
         return queryDto;
     }
 
+    /***
+     * t格式化数据
+     * @author lihui
+     * @date 14:45 2021/5/19
+     * @param list : 数据层
+     * @param cycle :  季度、月度、年度
+     * @return void
+     **/
+    private void formatEvaluationResultVo(List<EvaluationResultVo> list, int cycle){
+        if (CollectionUtil.isEmpty(list)) {
+            return;
+        }
+        Map<String,String> stateMap = userCenterClient.selectListByPCodes("SC_EVALUATION_STATE");
+        Map<String,String> gradMap  = userCenterClient.selectListByPCodes("SC_EVALUATION_GRADE");
+        // 避免相同的id去缓存取
+        Map<String, String> companyOrgNameMap = new HashMap<>();
+        Map<String, String> deptOrgNameMap    = new HashMap<>();
+        for (EvaluationResultVo vo : list) {
+            if (StringUtils.isNotEmpty(vo.getCompanyOrgId())){
+                vo.setCompanyOrgName(getOrgName(companyOrgNameMap, vo.getCompanyOrgId()));
+            }
+            if (StringUtils.isNotEmpty(vo.getDeptOrgId())) {
+                vo.setDeptOrgName(getOrgName(deptOrgNameMap, vo.getDeptOrgId()));
+            }
+            vo.setState(stateMap.get(vo.getState()));
+            vo.setEvaluationGrade(gradMap.get(vo.getEvaluationGrade()));
+            vo.setCycle(EvaluationUtil.formatCycle(cycle, vo.getYear(), vo.getMonth()));
+        }
+    }
+
     /**
     * @Author lihui
     * @Description 避免相同的id去缓存取

+ 31 - 0
operation_manager/src/main/java/com/huaxu/utils/EvaluationUtil.java

@@ -2,6 +2,7 @@ package com.huaxu.utils;
 
 import com.huaxu.evaluation.enums.EvaluationCycleEnums;
 import com.huaxu.evaluation.vo.EvaluationItemVo;
+import com.huaxu.evaluation.vo.EvaluationResultVo;
 import com.huaxu.util.DatesUtil;
 import org.apache.commons.lang3.StringUtils;
 
@@ -9,6 +10,7 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.temporal.TemporalAdjusters;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
@@ -252,6 +254,35 @@ public class EvaluationUtil {
         return localDate;
     }
 
+    public static List<List<String>> getExcelTitle(){
+        String string[] = {"No.","用户名","所属公司","所属部门","绩效等级","绩效得分","考评周期"};
+        List<List<String>> list = new ArrayList<>();
+        for (String str : string) {
+            List<String> title = new ArrayList<>();
+            title.add(str);
+            list.add(title);
+        }
+        return list;
+    }
+
+    public static List<List<String>> getExcelData(List<EvaluationResultVo> evaluationResultVos) {
+        List<List<String>> result = new ArrayList<>();
+        int total = 1;
+        for (EvaluationResultVo evaluationResultVo : evaluationResultVos){
+            List<String> list = new ArrayList<>();
+            list.add(total + "");
+            list.add(evaluationResultVo.getEvaluationBe());
+            list.add(evaluationResultVo.getCompanyOrgName());
+            list.add(evaluationResultVo.getDeptOrgName());
+            list.add(evaluationResultVo.getEvaluationGrade());
+            list.add(evaluationResultVo.getValue().toString());
+            list.add(evaluationResultVo.getCycle());
+            result.add(list);
+            total++;
+        }
+        return result;
+    }
+
 
     public static void main(String[] args) {
         LocalDate localDate = EvaluationUtil.getLocalDateByCycle("2020-12-01 00:00:00","2021-01-30 00:00:00",1);

+ 146 - 0
operation_manager/src/main/java/com/huaxu/utils/ExcelUtil.java

@@ -0,0 +1,146 @@
+package com.huaxu.utils;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.Head;
+import com.alibaba.excel.util.CollectionUtils;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
+import com.alibaba.excel.write.metadata.style.WriteCellStyle;
+import com.alibaba.excel.write.metadata.style.WriteFont;
+import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
+import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
+import com.huaxu.common.ToolUtil;
+import org.apache.commons.lang.time.DateFormatUtils;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.apache.poi.ss.usermodel.Row;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName ExcelUtil
+ * @Description: Excel导出通用工具类
+ * @Author :lihui
+ * @Date 2021/5/17
+ * @Version V1.0
+ **/
+public class ExcelUtil {
+
+    /**
+     * 仅仅输出明细数据到excel文件, 增加自定义的头部
+     */
+    public static String writeSimpleExcelWithHeader(String path, String excelName, List<List<String>> head, List list) {
+        String filePath = "";
+        String fileName = DateFormatUtils.format(new Date(), "yyyy/MM/dd") + File.separator;
+        fileName = fileName + excelName + System.currentTimeMillis() + ".xlsx";
+        try {
+            getAbsoluteFile(path, fileName);
+            // 这里 需要指定写用哪个class去写,指定模板名称及数据
+            EasyExcel.write(path + fileName).head(head).registerWriteHandler(new CustomizeColumnWidth())
+                    .registerWriteHandler(getStyleStrategy()).sheet("sheet").doWrite(list);
+            filePath = getPathFileName(path, fileName);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return filePath;
+    }
+
+
+    private static final String getPathFileName(String uploadDir, String fileName) throws IOException {
+        String pathFileName = uploadDir  + "/" + fileName;
+        return ToolUtil.path(pathFileName);
+    }
+    private static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException {
+        File desc = new File(uploadDir + File.separator + fileName);
+        if (!desc.getParentFile().exists()) {
+            desc.getParentFile().mkdirs();
+        }
+        return desc;
+    }
+
+    private static HorizontalCellStyleStrategy getStyleStrategy() {
+        // 头的策略
+        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
+        // 设置对齐
+        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
+        // 背景色, 设置为白色,也是默认颜色
+        headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
+        // 字体
+        WriteFont headWriteFont = new WriteFont();
+        headWriteFont.setFontHeightInPoints((short) 11);
+        headWriteCellStyle.setWriteFont(headWriteFont);
+        return new HorizontalCellStyleStrategy(headWriteCellStyle, new WriteCellStyle());
+    }
+
+    /**
+     * 自定义头部的 列的宽度设置 策略. .
+     */
+     static class CustomizeColumnWidth extends AbstractColumnWidthStyleStrategy {
+
+        private Map<Integer, Map<Integer, Integer>> CACHE = new HashMap(8);
+
+        @Override
+        protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean isHead) {
+            boolean needSetWidth = isHead || !CollectionUtils.isEmpty(list);
+            if (needSetWidth) {
+                Map<Integer, Integer> maxColumnWidthMap = CACHE.get(writeSheetHolder.getSheetNo());
+                if (maxColumnWidthMap == null) {
+                    maxColumnWidthMap = new HashMap(16);
+                    CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);
+                }
+
+                Integer columnWidth = this.dataLength(list, cell, isHead);
+                if (columnWidth >= 0) {
+                    if (columnWidth > 255) {
+                        columnWidth = 255;
+                    }
+
+                    Integer maxColumnWidth = (Integer)((Map)maxColumnWidthMap).get(cell.getColumnIndex());
+                    if (maxColumnWidth == null || columnWidth > maxColumnWidth) {
+                        ((Map)maxColumnWidthMap).put(cell.getColumnIndex(), columnWidth);
+                        writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth * 256);
+                    }
+
+                }
+            }
+        }
+        private Integer dataLength(List<CellData> cellDataList, Cell cell, Boolean isHead) {
+            if (isHead) {
+                return cell.getStringCellValue().getBytes().length;
+            } else {
+                CellData cellData = (CellData)cellDataList.get(0);
+                CellDataTypeEnum type = cellData.getType();
+                if (type == null) {
+                    return -1;
+                } else {
+                    switch(type) {
+                        case STRING:
+                            return cellData.getStringValue().getBytes().length;
+                        case BOOLEAN:
+                            return cellData.getBooleanValue().toString().getBytes().length;
+                        case NUMBER:
+                            return cellData.getNumberValue().toString().getBytes().length;
+                        default:
+                            return -1;
+                    }
+                }
+            }
+        }
+
+        @Override
+        public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {
+            // 设置行高测试
+            short height = 600;
+            row.setHeight(height);
+        }
+    }
+
+}

+ 38 - 0
operation_manager/src/main/resources/mapper/evaluation/EvaluationResultMapper.xml

@@ -212,4 +212,42 @@
         </where>
         group by a.`YEAR`,a.`MONTH`
     </select>
+
+    <select id="listEvaluationResult" resultType="com.huaxu.evaluation.vo.EvaluationResultVo">
+        select
+        <include refid="evaluation_result_list"></include>
+        from sc_evaluation_result a
+        <where>
+            a.status = 1 and a.tenant_id = #{dto.tenantId}
+            <if test="dto.userType != null and dto.userType != -999 and dto.userType != -9999 and  dto.programItems != null and dto.programItems.size() > 0">
+                <include refid="permissonSql"></include>
+            </if>
+            <if test="dto.userName != null">
+                and a.EVALUATION_BE like CONCAT('%',#{dto.userName,jdbcType=VARCHAR},'%')
+            </if>
+            <if test="dto.companyOrgId != null">
+                and a.COMPANY_ORG_ID = #{dto.companyOrgId}
+            </if>
+            <if test="dto.deptOrgId != null">
+                and a.DEPT_ORG_ID = #{dto.deptOrgId}
+            </if>
+            <if test="dto.sort == 1 and dto.state != null">
+                and a.`STATE` = #{dto.state}
+            </if>
+            <if test="dto.sort == 2">
+                and a.`STATE` = 1
+            </if>
+            and a.`cycle` = #{dto.cycle}
+            and a.`YEAR`  = #{dto.year}
+            <if test="dto.cycle != 2">
+                and a.`month` = #{dto.month}
+            </if>
+        </where>
+        <if test="dto.sort == 1">
+            order by a.date_start desc,a.`state`
+        </if>
+        <if test="dto.sort == 2">
+            order by a.date_start desc,a.`VALUE` desc
+        </if>
+    </select>
 </mapper>