浏览代码

Merge remote-tracking branch 'origin/20210223' into 20210223

wangbo 4 年之前
父节点
当前提交
ef3db3433a
共有 21 个文件被更改,包括 531 次插入158 次删除
  1. 21 21
      operation_manager/src/main/java/com/huaxu/evaluation/dao/EvaluationResultDetailsMapper.java
  2. 58 56
      operation_manager/src/main/java/com/huaxu/evaluation/dao/EvaluationResultMapper.java
  3. 14 8
      operation_manager/src/main/java/com/huaxu/evaluation/dao/EvaluationResultTaskMapper.java
  4. 16 1
      operation_manager/src/main/java/com/huaxu/evaluation/enums/EvaluationCycleEnums.java
  5. 15 0
      operation_manager/src/main/java/com/huaxu/evaluation/enums/EvaluationResultStatus.java
  6. 21 11
      operation_manager/src/main/java/com/huaxu/evaluation/job/EvaluationResultJob.java
  7. 5 4
      operation_manager/src/main/java/com/huaxu/evaluation/service/EvaluationResultDetailsService.java
  8. 34 33
      operation_manager/src/main/java/com/huaxu/evaluation/service/EvaluationResultService.java
  9. 7 10
      operation_manager/src/main/java/com/huaxu/evaluation/service/EvaluationResultTaskDetailsService.java
  10. 1 0
      operation_manager/src/main/java/com/huaxu/evaluation/service/impl/EvaluationCycleServiceImpl.java
  11. 1 0
      operation_manager/src/main/resources/mapper/evaluation/EvaluationCycleMapper.xml
  12. 2 2
      sms_water/src/main/java/com/huaxu/common/EasyExcelUtil.java
  13. 0 1
      sms_water/src/main/java/com/huaxu/controller/AlarmDetailsController.java
  14. 29 10
      sms_water/src/main/java/com/huaxu/controller/DayMonthYearReportController.java
  15. 1 1
      sms_water/src/main/java/com/huaxu/dao/DayReportMapper.java
  16. 1 0
      sms_water/src/main/java/com/huaxu/dto/ReportDto.java
  17. 3 0
      sms_water/src/main/java/com/huaxu/dto/ReportQueryDto.java
  18. 46 0
      sms_water/src/main/java/com/huaxu/enums/SceneEnum.java
  19. 1 0
      sms_water/src/main/java/com/huaxu/service/DayReportService.java
  20. 143 0
      sms_water/src/main/java/com/huaxu/util/ExcelUtil.java
  21. 112 0
      sms_water/src/main/java/com/huaxu/util/ReportExcelUtil.java

+ 21 - 21
operation_manager/src/main/java/com/huaxu/evaluation/dao/EvaluationResultDetailsMapper.java

@@ -20,30 +20,30 @@ import java.util.List;
 public interface EvaluationResultDetailsMapper extends BaseMapper<EvaluationResultDetailsEntity> {
 
 
-    /**
-    * @Author lihui
-    * @Description 插入考评结果详情
-    * @Date  2021/5/10
-    * @Param [entity]
-    * @return java.lang.Integer
-    **/
+    /***
+     * 插入考评结果详情
+     * @Author lihui
+     * @Date 18:27 2021/5/17
+     * @param entity : 保存数据参数
+     * @return java.lang.Integer
+     **/
     Integer insertEvaluationResultDetails(EvaluationResultDetailsEntity entity);
 
-    /**
-    * @Author lihui
-    * @Description 查询考评结果详情ids
-    * @Date 17:09 2021/5/8
-    * @Param [evaluationResultId]
-    * @return java.util.List<java.lang.Integer>
-    **/
+    /***
+     * 查询考评结果详情ids
+     * @Author lihui
+     * @Date 18:27 2021/5/17
+     * @param evaluationResultId : 结果id
+     * @return java.util.List<java.lang.Integer>
+     **/
     List<Integer> findResultDetailsIds(Integer evaluationResultId);
 
-    /**
-    * @Author lihui
-    * @Description 修改分数
-    * @Date 17:13 2021/5/8
-    * @Param [dto]
-    * @return void
-    **/
+    /***
+     * 修改分数
+     * @Author lihui
+     * @Date 18:28 2021/5/17
+     * @param dto :  修改参数
+     * @return int
+     **/
     int updateEvaluateScore(EvaluationDetailsDto dto);
 }

+ 58 - 56
operation_manager/src/main/java/com/huaxu/evaluation/dao/EvaluationResultMapper.java

@@ -23,77 +23,79 @@ import java.util.List;
 @Mapper
 public interface EvaluationResultMapper {
 
-    /**
-    * @Author lihui
-    * @Description 插入考评结果
-    * @Date  2021/5/10
-    * @Param [evaluationResultEntity]
-    * @return void
-    **/
+    /***
+     * 插入考评结果
+     * @Author lihui
+     * @Date 18:14 2021/5/8
+     * @param item :  考评结果
+     * @return java.lang.Integer
+     **/
     Integer insertEvaluationResult(@Param("item")EvaluationResultEntity item);
 
-    /**
-    * @Author lihui
-    * @Description 分页查询考评结果
-    * @Date 10:18 2021/5/8
-    * @Param [page :页码, dto :查询条件]
-    * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.huaxu.evaluation.vo.EvaluationResultVo>
-    **/
+    /***
+     * 分页查询考评结果
+     * @Author lihui
+     * @Date 18:14 2021/5/8
+     * @param page : 页码
+     * @param dto :  参数
+     * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.huaxu.evaluation.vo.EvaluationResultVo>
+     **/
     Page<EvaluationResultVo> findPage(@Param("page")IPage<EvaluationResultQueryDto> page, @Param("dto") EvaluationResultQueryDto dto);
 
-    /**
-    * @Author lihui
-    * @Description 查询考评状态
-    * @Date 17:16 2021/5/8
-    * @Param [evaluationResultId]
-    * @return java.lang.Integer
-    **/
+    /***
+     * 查询考评状态
+     * @Author lihui
+     * @Date 18:15 2021/5/8
+     * @param evaluationResultId :  结果ID
+     * @return java.lang.Integer
+     **/
     Integer findEvaluationState(Integer evaluationResultId);
 
-    /**
-    * @Author lihui
-    * @Description 修改考评得分
-    * @Date 17:56 2021/5/8
-    * @Param [evaluationResultId, Score]
-    * @return java.lang.Integer
-    **/
+    /***
+     * 修改考评得分
+     * @Author lihui
+     * @Date 18:15 2021/5/8
+     * @param updateDto : 修改参数
+     * @return java.lang.Integer
+     **/
     Integer updateEvaluationScore(EvaluationResultUpdateDto updateDto);
 
-    /**
-    * @Author lihui
-    * @Description 查询人员绩效排名
-    * @Date 9:26 2021/5/13
-    * @Param [dto]
-    * @return java.util.List<com.huaxu.evaluation.vo.EvaluationReportRankingVo>
-    **/
+    /***
+     * 查询人员绩效排名
+     * @Author lihui
+     * @Date 18:15 2021/5/8
+     * @param dto : 修改参数
+     * @return java.util.List<com.huaxu.evaluation.vo.EvaluationReportRankingVo>
+     **/
     List<EvaluationReportRankingVo> findRanking(@Param("dto") EvaluationReportQueryDto dto);
 
-    /**
-    * @Author lihui
-    * @Description 查询等级分布占比
-    * @Date 10:12 2021/5/13
-    * @Param [dto]
-    * @return java.util.List<com.huaxu.evaluation.vo.EvaluationGradeDistributionVo>
-    **/
+    /***
+     * 查询等级分布占比
+     * @Author lihui
+     * @Date 18:16 2021/5/13
+     * @param dto :参数
+     * @return java.util.List<com.huaxu.evaluation.vo.EvaluationGradePercentageVo>
+     **/
     List<EvaluationGradePercentageVo> findGradePercentage(@Param("dto") EvaluationReportQueryDto dto);
 
-    /**
-    * @Author lihui
-    * @Description 统计绩效合格数
-    * @Date 10:57 2021/5/13
-    * @Param [dto, qualifiedValue]
-    * @return java.util.List<com.huaxu.evaluation.vo.EvaluationPerformanceQualifiedVo>
-    **/
+    /***
+     * 统计绩效合格数
+     * @Author lihui
+     * @Date 18:17 2021/5/17
+     * @param dto : 查询参数
+     * @param qualifiedValue : 合格分数
+     * @return java.util.List<com.huaxu.evaluation.vo.EvaluationQualifiedNumberVo>
+     **/
     List<EvaluationQualifiedNumberVo> countQualifiedNumber(@Param("dto")EvaluationReportQueryDto dto, @Param("qualifiedValue")BigDecimal qualifiedValue);
 
 
-    /**
-    * @Author lihui
-    * @Description 统计绩效人均值
-    * @Date 11:08 2021/5/13
-    * @Param [dto]
-    * @return java.util.List<EvaluationPerformanceAvgVo>
-    **/
+    /***
+     * 统计绩效人均值
+     * @Author lihui
+     * @Date 18:17 2021/5/17
+     * @param dto : 请求参数
+     * @return java.util.List<com.huaxu.evaluation.vo.EvaluationPerformanceAvgVo>
+     **/
     List<EvaluationPerformanceAvgVo> countPerformanceAvg(@Param("dto")EvaluationReportQueryDto dto);
 
 

+ 14 - 8
operation_manager/src/main/java/com/huaxu/evaluation/dao/EvaluationResultTaskMapper.java

@@ -14,16 +14,22 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface EvaluationResultTaskMapper {
 
-
+    /***
+     * 保存考评结果d
+     * @Author lihui
+     * @Date 18:10 2021/5/17
+     * @param entity : 考评详情
+     * @return java.lang.Integer
+     **/
     Integer insertEvaluationResultTask(EvaluationResultTaskEntity entity);
 
-    /**
-    * @Author lihui
-    * @Description 查询考评结果
-    * @Date 16:12 2021/5/10
-    * @Param [evaluationResultId]
-    * @return com.huaxu.evaluation.vo.EvaluationResultTaskDetailsVo
-    **/
+    /***
+     * 查询考评结果
+     * @author lihui
+     * @date 16:12 2021/5/10
+     * @param evaluationResultId:结果iD
+     * @return com.huaxu.evaluation.vo.EvaluationResultTaskDetailsVo
+     **/
     EvaluationResultTaskDetailsVo findResultTaskDetail(Integer evaluationResultId);
 
 }

+ 16 - 1
operation_manager/src/main/java/com/huaxu/evaluation/enums/EvaluationCycleEnums.java

@@ -2,13 +2,28 @@ package com.huaxu.evaluation.enums;
 
 import lombok.Getter;
 
+/**
+ * @Description: cycle 枚举类
+ * @Author lihui
+ * @Date 2021/5/7
+ * @Version V1.0
+ **/
 @Getter
 public enum EvaluationCycleEnums {
 
-    MONTH(0,"月"),
+    /**
+     * 月度
+     */
+    MONTH(0,"月度"),
 
+    /**
+     * 季度
+     */
     QUARTER(1,"季度"),
 
+    /**
+     * 年度
+     */
     YEAR(2,"年度")
 
     ,

+ 15 - 0
operation_manager/src/main/java/com/huaxu/evaluation/enums/EvaluationResultStatus.java

@@ -3,13 +3,28 @@ package com.huaxu.evaluation.enums;
 import com.huaxu.model.ResultStatus;
 import lombok.Getter;
 
+/**
+ * @Description: Result 枚举类
+ * @Author lihui
+ * @Date 2021/5/7
+ * @Version V1.0
+ **/
 @Getter
 public enum EvaluationResultStatus {
 
+    /**
+     * 未找到相关的数据
+     */
     DATA_NOT_FOUND(920000,"未找到相关的数据"),
 
+    /**
+     * 请求参数错误
+     */
     PARAM_ERROR(920001,"请求参数错误"),
 
+    /**
+     * 已考核,不能修改
+     */
     IS_ASSESSED(920002,"已考核,不能修改")
 
     ,

+ 21 - 11
operation_manager/src/main/java/com/huaxu/evaluation/job/EvaluationResultJob.java

@@ -65,14 +65,25 @@ public class EvaluationResultJob {
 
     private static boolean lock = false;
 
-    // 保存考评项目设置
+    /**
+     * 保存考评项目设置
+     */
     static Map<String, List<EvaluationItemVo>> itemMap = new HashMap<>();
 
+    /**
+     * 保存用户ID
+     */
     static Map<String,  List<Integer>> userIdsMap = new HashMap<>();
 
 
 
-    // @Scheduled(cron = "0/5 * * * * ?")
+    /***
+     *  @Scheduled(cron = "0/5 * * * * ?")
+     *  异步启动定时任务
+     * @Author lihui
+     * @Date 18:26 2021/5/17
+     * @return void
+     **/
     @Async
     public void run(){
         if (lock){
@@ -80,14 +91,12 @@ public class EvaluationResultJob {
         }
         lock = true;
         log.info("============绩效考评数据生成begin=====================");
-        // 首先查询哪些公司设置了绩效考评
-        List<EvaluationCycleEntity> evaluationCycleEntities =  evaluationCycleMapper.findList(new EvaluationCycleEntity());
+        EvaluationCycleEntity queryEntity = new EvaluationCycleEntity();
+        queryEntity.setEvaluationDay(Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
+        // 首先查询当天哪些公司设置了绩效考评
+        List<EvaluationCycleEntity> evaluationCycleEntities =  evaluationCycleMapper.findList(queryEntity);
         try {
             for (EvaluationCycleEntity evaluationCycleEntity : evaluationCycleEntities) {
-                // 查询公司设置的考评日期是否是今天
-                if (!EvaluationUtil.isToday(evaluationCycleEntity.getEvaluationDay())) {
-                    continue;
-                }
                 // 如果是年度,需要检查当前日期是否是在1月份
                 if (evaluationCycleEntity.getType() == EvaluationCycleEnums.YEAR.getType() &&
                         !EvaluationUtil.sameMonth(1)) {
@@ -166,7 +175,7 @@ public class EvaluationResultJob {
     * @Param [userEntity, itemEntityList, startTime, endTime, cycle]
     * @return void
     **/
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public void saveEvaluationResultInfo(UserEntity userEntity, List<EvaluationItemVo> itemEntityList, String startTime, String endTime, Integer cycle){
         Calendar calendar = EvaluationUtil.getCalendar(endTime);
         // 计算用户完成任务情况
@@ -306,11 +315,12 @@ public class EvaluationResultJob {
     * @Author lihui
     * @Description 获取对应的分数
     * @Date 11:25 2021/5/14
-    * @Param [type, list, evaluationValue]
+    * @Param [type 0任务完成数 1任务按时完成率 2自定义, list, evaluationValue]
     * @return java.math.BigDecimal
     **/
     private BigDecimal getScore (Integer type, List<EvaluationItemValueVo> list, BigDecimal evaluationValue){
-        if (type != 1 && type != 2) {
+        int ziDingYi = 2;
+        if (type != 1 && type != ziDingYi) {
             return null;
         }
         Integer itemType     = null;

+ 5 - 4
operation_manager/src/main/java/com/huaxu/evaluation/service/EvaluationResultDetailsService.java

@@ -18,11 +18,12 @@ import java.util.List;
  **/
 public interface EvaluationResultDetailsService {
 
-    /**
+    /***
+     * 修改分数
      * @Author lihui
-     * @Description 修改分数
-     * @Date 17:13 2021/5/8
-     * @Param [dto]
+     * @Date 18:30 2021/5/17
+     * @param dto : 请求参数
+     * @throws ServiceException  自定义业务异常
      * @return void
      **/
     void updateEvaluateScore(EvaluationResultDetailsDto dto) throws ServiceException;

+ 34 - 33
operation_manager/src/main/java/com/huaxu/evaluation/service/EvaluationResultService.java

@@ -20,49 +20,50 @@ import java.util.List;
  **/
 public interface EvaluationResultService {
 
-    /**
-    * @Author lihui
-    * @Description 分页查询
-    * @Date 10:24 2021/5/8
-    * @Param [dto]
-    * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.huaxu.evaluation.vo.EvaluationResultVo>
-    **/
+    /***
+     * 分页查询
+     * @Author lihui
+     * @Date 18:29 2021/5/17
+     * @param dto : 请求参数
+     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.huaxu.evaluation.vo.EvaluationResultVo>
+     **/
     IPage<EvaluationResultVo> findPage(EvaluationResultDto dto);
 
 
-    /**
-    * @Author lihui
-    * @Description 查询人员绩效排名
-    * @Date 9:24 2021/5/13
-    * @Param [dto]
-    * @return com.baomidou.mybatisplus.core.metadata.IPage<com.huaxu.evaluation.vo.EvaluationReportRankingVo>
-    **/
+    /***
+     * 查询人员绩效排名
+     * @Author lihui
+     * @Date 18:29 2021/5/17
+     * @param dto : 请求参数
+     * @return java.util.List<com.huaxu.evaluation.vo.EvaluationReportRankingVo>
+     **/
     List<EvaluationReportRankingVo> findRanking(EvaluationReportDto dto);
 
-    /**
-    * @Author lihui
-    * @Description 查询等级占比率
-    * @Date 10:16 2021/5/13
-    * @Param [dto]
-    * @return java.util.List<com.huaxu.evaluation.vo.EvaluationGradePercentageVo>
-    **/
+    /***
+     * 查询等级占比率
+     * @Author lihui
+     * @Date 18:29 2021/5/17
+     * @param dto : 请求参数
+     * @return java.util.List<com.huaxu.evaluation.vo.EvaluationGradePercentageVo>
+     **/
     List<EvaluationGradePercentageVo> findGradePercentage(EvaluationReportDto dto);
 
-    /**
+    /***
+     * 统计绩效合格数
      * @Author lihui
-     * @Description 统计绩效合格数
-     * @Date 10:16 2021/5/13
-     * @Param [dto]
-     * @return java.util.List<com.huaxu.evaluation.vo.EvaluationGradePercentageVo>
+     * @Date 18:29 2021/5/17
+     * @param dto :
+     * @param qualifiedValue :
+     * @return java.util.List<com.huaxu.evaluation.vo.EvaluationQualifiedNumberVo>
      **/
     List<EvaluationQualifiedNumberVo> countQualifiedNumber(EvaluationReportDto dto, BigDecimal qualifiedValue);
 
-    /**
-    * @Author lihui
-    * @Description 统计绩效人均值
-    * @Date 11:19 2021/5/13
-    * @Param [dto]
-    * @return java.util.List<com.huaxu.evaluation.vo.EvaluationPerformanceAvgVo>
-    **/
+    /***
+     * 统计绩效人均值
+     * @Author lihui
+     * @Date 18:29 2021/5/17
+     * @param dto :
+     * @return java.util.List<com.huaxu.evaluation.vo.EvaluationPerformanceAvgVo>
+     **/
     List<EvaluationPerformanceAvgVo> countPerformanceAvg(EvaluationReportDto dto);
 }

+ 7 - 10
operation_manager/src/main/java/com/huaxu/evaluation/service/EvaluationResultTaskDetailsService.java

@@ -1,10 +1,7 @@
 package com.huaxu.evaluation.service;
 
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.huaxu.evaluation.dto.EvaluationResultDto;
 import com.huaxu.evaluation.vo.EvaluationResultTaskDetailsVo;
-import com.huaxu.evaluation.vo.EvaluationResultVo;
 
 /**
  * @ClassName EvaluationResultTaskDetailsService
@@ -15,12 +12,12 @@ import com.huaxu.evaluation.vo.EvaluationResultVo;
  **/
 public interface EvaluationResultTaskDetailsService {
 
-    /**
-    * @Author lihui
-    * @Description 查看任务结果详情
-    * @Date 16:36 2021/5/8
-    * @Param [evaluationResultId]
-    * @return com.huaxu.evaluation.vo.EvaluationResultTaskDetailsVo
-    **/
+    /***
+     * 查看任务结果详情
+     * @Author lihui
+     * @Date 18:28 2021/5/17
+     * @param evaluationResultId :结果id
+     * @return com.huaxu.evaluation.vo.EvaluationResultTaskDetailsVo
+     **/
     EvaluationResultTaskDetailsVo findResultTaskDetail(Integer evaluationResultId);
 }

+ 1 - 0
operation_manager/src/main/java/com/huaxu/evaluation/service/impl/EvaluationCycleServiceImpl.java

@@ -80,6 +80,7 @@ public class EvaluationCycleServiceImpl extends ServiceImpl<EvaluationCycleMappe
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
+    @Override
     public boolean delEvaluationCycleByIds(Long[] ids) {
         return this.removeByIds(Arrays.asList(ids));
     }

+ 1 - 0
operation_manager/src/main/resources/mapper/evaluation/EvaluationCycleMapper.xml

@@ -57,6 +57,7 @@
             <if test="type != null ">and a.type = #{type}</if>
             <if test="tenantId != null ">and a.TENANT_ID = #{tenantId}</if>
             <if test="id != null ">and a.id &lt;&gt; #{id}</if>
+            <if test="evaluationDay != null ">and a.EVALUATION_DAY = #{evaluationDay}</if>
         </where>
     </select>
 

+ 2 - 2
sms_water/src/main/java/com/huaxu/common/EasyExcelUtil.java

@@ -52,7 +52,7 @@ public  class EasyExcelUtil {
      * @Return:
      * @Author: WYY
      * @Date: 2020/10/28
-    **/
+     **/
     public static String excelWrite(String path,Class t, String excelName,List data) {
         String filePath = "";
         String fileName = DateFormatUtils.format(new Date(), "yyyy/MM/dd") + File.separator;
@@ -118,4 +118,4 @@ public  class EasyExcelUtil {
         // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
         return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
     }
-}
+}

+ 0 - 1
sms_water/src/main/java/com/huaxu/controller/AlarmDetailsController.java

@@ -25,7 +25,6 @@ import org.springframework.web.bind.annotation.*;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 

+ 29 - 10
sms_water/src/main/java/com/huaxu/controller/DayMonthYearReportController.java

@@ -1,32 +1,29 @@
 package com.huaxu.controller;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaxu.common.EasyExcelUtil;
 import com.huaxu.dto.*;
-import com.huaxu.entity.MonitorDataValueEntity;
-import com.huaxu.entity.MonitorInfoEntity;
-import com.huaxu.entity.ReportDimensionSettingEntity;
-import com.huaxu.entity.SceneEntity;
+import com.huaxu.enums.SceneEnum;
 import com.huaxu.model.AjaxMessage;
 import com.huaxu.model.Pagination;
 import com.huaxu.model.ResultStatus;
 import com.huaxu.service.ReportDimensionSettingService;
 import com.huaxu.service.ReportService;
-import com.huaxu.util.UserUtil;
-import com.sun.org.apache.bcel.internal.generic.NEWARRAY;
+import com.huaxu.util.ExcelUtil;
+import com.huaxu.util.ReportExcelUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import org.springframework.beans.BeanUtils;
 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.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.function.Function;
-import java.util.stream.Collectors;
 
 /**
  * 标签信息页面控制器
@@ -38,6 +35,9 @@ import java.util.stream.Collectors;
 @Api(tags = "日月年统计报表信息")
 public class DayMonthYearReportController {
 
+    @Value("${SMS.sys_excel_path}")
+    private String baseDir;
+
     @Autowired
     private ReportService reportService;
 
@@ -186,4 +186,23 @@ public class DayMonthYearReportController {
         reportDimensionSettingService.batchUpdateStatisticalDimension(dataList);
         return new AjaxMessage<>(ResultStatus.OK);
     }
+
+    @RequestMapping(value = "/export/excel", method = RequestMethod.POST)
+    @ApiOperation(value = "报表导出")
+    public AjaxMessage<String> exportExcel(@RequestBody ReportQueryDto queryDto) {
+        IPage<ReportDto> iPage = new Page<>(1, 1000000);
+        if (queryDto.getType() == null ){
+            iPage = reportService.getReportBySceneIdsNew(iPage, queryDto);
+        } else  {
+            iPage = reportService.getPipeDevicePressReportByDeviceIds(iPage, queryDto);
+        }
+        List<ReportDto> list = iPage.getRecords();
+        if (CollectionUtil.isEmpty(list)){
+            return new AjaxMessage<>(ResultStatus.OK);
+        }
+        List<List<String>> reportTitle = ReportExcelUtil.toExcelTitleList(list.get(0).getReportTitle(), queryDto.getSceneType());
+        String filePath = ExcelUtil.writeSimpleExcelWithHeader(baseDir, SceneEnum.getMsg(queryDto.getSceneType()) +"报表", reportTitle, ReportExcelUtil.toReportExcelDto(list));
+        return new AjaxMessage<>(ResultStatus.OK, filePath);
+    }
+
 }

+ 1 - 1
sms_water/src/main/java/com/huaxu/dao/DayReportMapper.java

@@ -56,5 +56,5 @@ public interface DayReportMapper extends BaseMapper<DayReportEntity> {
     Page<DeviceWaterReportAttributeDto> findDeviceWaterPage(IPage<DeviceWaterReportAttributeDto> page, @Param("dayReport") DayReportEntity dayReportEntity, @Param("userId") Integer userId);
 
     List<DayReportEntity> findDeviceLastDayValue(@Param("dayReport") DayReportEntity dayReportEntity);
-    /**删除相关方法  使用mybatis-plus集成的 **/
+
 }

+ 1 - 0
sms_water/src/main/java/com/huaxu/dto/ReportDto.java

@@ -1,5 +1,6 @@
 package com.huaxu.dto;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;

+ 3 - 0
sms_water/src/main/java/com/huaxu/dto/ReportQueryDto.java

@@ -27,6 +27,9 @@ public class ReportQueryDto implements Serializable {
     @ApiModelProperty(value = "管网用到的字段:类型(1压力 2流量,3水质)")
     private Integer type;
 
+    @ApiModelProperty(value = "场景类型:1:水源,2:水厂,3:泵站,4:管网")
+    private Integer sceneType;
+
     @ApiModelProperty("年")
     private Integer year;
 

+ 46 - 0
sms_water/src/main/java/com/huaxu/enums/SceneEnum.java

@@ -0,0 +1,46 @@
+package com.huaxu.enums;
+
+/**
+* @Author lihui
+* @Description 场景类型
+* @Date 16:59 2021/5/17
+* @Param
+* @return
+**/
+public enum SceneEnum {
+
+    SOURCE_WATER(1, "水源"),
+
+    WATER_WORKS(2, "水厂"),
+
+    PUMPING_STATION(3, "泵站"),
+
+    PIPE_NETWORK(4, "管网")
+
+    ;
+
+    private int type;
+
+    private String msg;
+
+    SceneEnum(int type, String msg){
+        this.type = type;
+        this.msg = msg;
+    }
+
+    public static SceneEnum getSceneEnum(int type){
+        SceneEnum[] sceneEnums = SceneEnum.values();
+        for (SceneEnum sceneEnum: sceneEnums) {
+            if (sceneEnum.type == type) {
+                return sceneEnum;
+            }
+        }
+        return null;
+    }
+
+    public static String getMsg(int type){
+        SceneEnum sceneEnum =  getSceneEnum(type);
+        return sceneEnum == null ? "" : sceneEnum.msg;
+    }
+
+}

+ 1 - 0
sms_water/src/main/java/com/huaxu/service/DayReportService.java

@@ -261,6 +261,7 @@ public class DayReportService extends AbstractReportService<DayReportMapper, Day
         return reportPage;
     }
 
+
     @Override
     List<ReportDto> findReport(ReportDto reportDto) {
         return dayReportMapper.findReport(reportDto);

+ 143 - 0
sms_water/src/main/java/com/huaxu/util/ExcelUtil.java

@@ -0,0 +1,143 @@
+package com.huaxu.util;
+
+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.*;
+
+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);
+        }
+    }
+
+}

+ 112 - 0
sms_water/src/main/java/com/huaxu/util/ReportExcelUtil.java

@@ -0,0 +1,112 @@
+package com.huaxu.util;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.huaxu.dto.ReportDto;
+import com.huaxu.dto.ReportTitleDto;
+
+import java.util.*;
+
+/**
+ * @ClassName ReportExcelUtil
+ * @Description: 报表导出excel
+ * @Author lihui
+ * @Date 2021/5/17
+ * @Version V1.0
+ **/
+public class ReportExcelUtil {
+
+    static Map<Integer,String[]> TITLE_MAP = new HashMap<>();
+
+    static {
+        TITLE_MAP.put(1, new String[]{"NO.","名称","时间","取水量(万m³)","耗电量(万KWH)"});
+        TITLE_MAP.put(2, new String[]{"NO.","名称","时间","进水量(万m³)","制水量(万m³)","耗电量(万KWH)","耗药量(KG)"});
+        TITLE_MAP.put(3, new String[]{"NO.","名称","时间","供水量(m³)","耗电量(KWH)"});
+        TITLE_MAP.put(4, new String[]{"NO.","名称","时间"});
+    }
+
+    /**
+    * @Author lihui
+    * @Description 按顺序转换导出的数据
+    * @Date 17:10 2021/5/17
+    * @Param [list]
+    * @return java.util.List<java.util.List<java.lang.String>>
+    **/
+    public static List<List<String>> toReportExcelDto(List<ReportDto> list){
+        int number = 1;
+        List<List<String>> result = new ArrayList<>();
+        for (ReportDto reportDto : list) {
+            List<String>  dataList = new ArrayList<>();
+            dataList.add((number++) +"");
+            dataList.add(reportDto.getParentSceneName());
+            dataList.add(reportDto.getCollectDate());
+            dataList.add(reportDto.getIntakeWaterUsage().toString());
+            dataList.add(reportDto.getYieldWaterUsage().toString());
+            dataList.add(reportDto.getPowerUsage().toString());
+            dataList.add(reportDto.getDrugUsage().toString());
+            List<Map<String,Object>> childList = reportDto.getDataMapValues();
+            for (Map<String,Object> childMap: childList) {
+                int ok = 0;
+                for (Map.Entry<String,Object> entry : childMap.entrySet()) {
+                    if (ok == 0){
+                        ok++;
+                        continue;
+                    }
+                    dataList.add(entry.getValue().toString());
+                }
+            }
+            result.add(dataList);
+        }
+        return result;
+    }
+
+
+    /**
+    * @Author lihui
+    * @Description 按顺序组装导出的标题
+    * @Date 17:11 2021/5/17
+    * @Param [titleDtos, titleType]
+    * @return java.util.List<java.util.List<java.lang.String>>
+    **/
+    public static List<List<String>> toExcelTitleList(List<ReportTitleDto> titleDtos, int titleType){
+        List<List<String>> titleList = toTitleList(titleDtos);
+        String[] shuZu  = TITLE_MAP.get(titleType);
+        if (shuZu == null) {
+            return titleList;
+        }
+        boolean isEmpty = CollectionUtil.isEmpty(titleList);
+        List<List<String>> result = new ArrayList<>();
+        for (String string : shuZu) {
+            List<String> listString = new ArrayList<>();
+            listString.add(string);
+            if (!isEmpty){
+                listString.add(string);
+                listString.add(string);
+            }
+            result.add(listString);
+        }
+        result.addAll(titleList);
+        return result;
+    }
+
+
+    private static List<List<String>> toTitleList(List<ReportTitleDto> list){
+        if (CollectionUtil.isEmpty(list)) {
+            return null;
+        }
+        String name = null;
+        List<List<String>> result = new ArrayList<>();
+        for (ReportTitleDto reportTitleDto : list) {
+            for (ReportTitleDto.DeviceChildren deviceChildren:reportTitleDto.getDeviceChildren()) {
+                for (ReportTitleDto.StatisticalDimension dimensionList:deviceChildren.getDimensionList()) {
+                    List<String> child = new ArrayList<>();
+                    name = reportTitleDto.getClassify().indexOf("isNull") != -1 ? deviceChildren.getName() :reportTitleDto.getClassify();
+                    child.add(name);
+                    child.add(deviceChildren.getName());
+                    child.add(dimensionList.getDimensionName());
+                    result.add(child);
+                }
+            }
+        }
+        return  result;
+    }
+}