xiongchao 3 years ago
parent
commit
2365a57ff3

+ 52 - 4
platform-common/src/main/java/com/platform/common/util/DateUtils.java

@@ -9,8 +9,7 @@ import java.time.format.DateTimeFormatter;
 import java.time.temporal.Temporal;
 import java.time.temporal.TemporalAdjusters;
 import java.time.temporal.TemporalUnit;
-import java.util.Calendar;
-import java.util.Date;
+import java.util.*;
 
 
 /**
@@ -100,6 +99,28 @@ public class DateUtils {
         return lastDay ;
     }
 
+    /**
+     * 获取当前月第一天:00:00:00
+     *
+     * @return
+     */
+    public static LocalDateTime getFirstDayOfThisYear(int year) {
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime firstday  =  now.withYear(year).with(TemporalAdjusters.firstDayOfYear()).withHour(0).withMinute(0).withSecond(0);
+        return firstday;
+    }
+
+    /**
+     * 获取当前月最后一天:23:59:59
+     *
+     * @return
+     */
+    public static LocalDateTime getLastDayOfThisYear(int year) {
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime lastDay  =  now.withYear(year).with(TemporalAdjusters.lastDayOfYear()).withHour(23).withMinute(59).withSecond(59);
+        return lastDay ;
+    }
+
     /**
      * 获取当前月第一天:00:00:00
      *
@@ -121,6 +142,7 @@ public class DateUtils {
         LocalDateTime lastDay  =  now.withMonth(month).with(TemporalAdjusters.lastDayOfMonth()).withHour(23).withMinute(59).withSecond(59);
         return lastDay ;
     }
+
     /**
      * 是否是闰年
      *
@@ -312,8 +334,10 @@ public class DateUtils {
     }
 
     public static void main(String[] args) {
-        LocalDateTime now = getFirstDayOfMonth(6);
-        System.out.println(now);
+        List<Map<String, LocalDateTime>>  monthStartAndEndList = getMonthStartAndEndByYear(2021,10);
+        for(Map<String, LocalDateTime> map: monthStartAndEndList){
+            System.out.println(map.get("searchStartTimeMonth").toString() + " : " +  map.get("searchEndTimeMonth").toString());
+        }
     }
     /**
      * date 转 LocalDate
@@ -324,5 +348,29 @@ public class DateUtils {
     public static LocalDate dateToLocalDate(Date date) {
         return dateToZoneId(date).atZone(ZONE_ID).toLocalDate();
     }
+
+    /**
+     * 制定年份,月份之前的每个月的开始时间和结束时间
+     *
+     * @param year
+     * @param month
+     * @return
+     */
+    public static List<Map<String, LocalDateTime>> getMonthStartAndEndByYear(int year, int month) {
+        List<Map<String, LocalDateTime>> monthStartAndEndList = new ArrayList<Map<String,LocalDateTime>>();
+        LocalDateTime now = LocalDateTime.now();
+        // 每年的 一月一号,零时零分零秒
+        LocalDateTime startDay =  now.withYear(year).with(TemporalAdjusters.firstDayOfYear()).withHour(0).withMinute(0).withSecond(0);
+        for(int i = 1;i<month;i++){
+            Map<String, LocalDateTime> dateTimeMap = new HashMap<String, LocalDateTime>();
+            LocalDateTime searchStartTimeMonth = getFirstDayOfMonth(i);
+            LocalDateTime searchEndTimeMonth = getLastDayOfMonth(i);
+            dateTimeMap.put("searchStartTimeMonth", searchStartTimeMonth);
+            dateTimeMap.put("searchEndTimeMonth",searchEndTimeMonth);
+            monthStartAndEndList.add(dateTimeMap);
+        }
+        return  monthStartAndEndList;
+    }
+
 }
 

+ 10 - 2
platform-dao/src/main/java/com/platform/dao/dto/repair/RepairApplicationFormDTO.java

@@ -140,11 +140,19 @@ public class RepairApplicationFormDTO extends BaseDTO implements Serializable {
     /**
      * 维修耗时
      */
-    private String repairMinutes;
+    private Double repairMinutes;
     /**
      * 接收耗时:分钟
      */
-    private String receiveMinutes;
+    private Double receiveMinutes;
+    /**
+     * 设备停机修复时间:分钟=维修结束时间-报修时间
+     */
+    private Double dealMinutes;
+    /**
+     * 设备停机修复时间:报修类型:1:计划性维修,2非计划性维修,3其他
+     */
+    private Integer category;
     /**
      * 维修耗时:0否,1是
      */

+ 5 - 0
platform-dao/src/main/java/com/platform/dao/entity/check/CheckJob.java

@@ -70,18 +70,22 @@ public class CheckJob implements Serializable {
     /**
      * 设备名称
      */
+    @Transient
     private String sbName;
     /**
      * 设备新号
      */
+    @Transient
     private String sbNo;
     /**
      * 保养标准等级
      */
+    @Transient
     private Integer standardLevel;
     /**
      * 设备等级
      */
+    @Transient
     private Integer sbLevel;
     /**
      * 部件名称
@@ -90,6 +94,7 @@ public class CheckJob implements Serializable {
     /**
      * 部件名称
      */
+    @Transient
     private String partName;
     /**
      * 标准id

+ 12 - 4
platform-dao/src/main/java/com/platform/dao/entity/repair/RepairApplicationForm.java

@@ -123,13 +123,21 @@ public class RepairApplicationForm implements Serializable {
      */
     private String repairDispatchRemark;
     /**
-     * 维修耗时:分钟
+     * 维修耗时:分钟=维修结束时间-维修接收时间
      */
-    private String repairMinutes;
+    private Double repairMinutes;
     /**
-     * 接收耗时:分钟
+     * 接收耗时:分钟=维修接收时间-报修时间
      */
-    private String receiveMinutes;
+    private Double receiveMinutes;
+    /**
+     * 设备停机修复时间:分钟=维修结束时间-报修时间
+     */
+    private Double dealMinutes;
+    /**
+     * 设备停机修复时间:报修类型:1:计划性维修,2非计划性维修,3其他
+     */
+    private Integer category;
     /**
      * 维修耗时:0否,1是
      */

+ 28 - 0
platform-dao/src/main/java/com/platform/dao/enums/RepairApplicationFormCategoryEnum.java

@@ -0,0 +1,28 @@
+package com.platform.dao.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @Description 维修类别枚举
+ * @Author liuyu
+ * @Date 2020/05/05
+ * @Version Copyright (c) 2020,安徽阡陌网络科技有限公司 All rights reserved.
+ */
+@Getter
+@AllArgsConstructor
+public enum RepairApplicationFormCategoryEnum {
+    /**
+     * 计划性
+     */
+    PLAN(1),
+    /**
+     * 非计划性
+     */
+    PLAN_NOT(2),
+    /**
+     * 其他
+     */
+    OTHER(3);
+    private final Integer value;
+}

+ 10 - 2
platform-dao/src/main/java/com/platform/dao/vo/repair/RepairApplicationFormVO.java

@@ -125,11 +125,19 @@ public class RepairApplicationFormVO extends BaseVO implements Serializable {
     /**
      * 维修耗时
      */
-    private String repairMinutes;
+    private Double repairMinutes;
     /**
      * 接收耗时:分钟
      */
-    private String receiveMinutes;
+    private Double receiveMinutes;
+    /**
+     * 设备停机修复时间:分钟=维修结束时间-报修时间
+     */
+    private Double dealMinutes;
+    /**
+     * 设备停机修复时间:报修类型:1:计划性维修,2非计划性维修,3其他
+     */
+    private Integer category;
     /**
      * 维修耗时:0否,1是
      */

+ 13 - 13
platform-dao/src/main/java/com/platform/dao/vo/report/CheckJobReportVO.java

@@ -2,6 +2,7 @@ package com.platform.dao.vo.report;
 
 import com.platform.common.bean.DataScope;
 import com.platform.dao.entity.operate.Article;
+import com.platform.office.annotation.Excel;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
@@ -18,31 +19,30 @@ import java.util.List;
 @Accessors(chain = true)
 public class CheckJobReportVO implements Serializable {
     private static final long serialVersionUID = 1L;
-
+    /**
+     * 月份
+     */
+    @Excel(name = "月份", orderNum = "1")
+    private String month;
     /**
      * 每月总数
      */
-    @Id
+    @Excel(name = "总数", orderNum = "2")
     private Integer totalNum;
     /**
-     * 每月完成
+     * 完成数
      */
+    @Excel(name = "完成数", orderNum = "3")
     private Integer totalFinishNum;
     /**
-     * 每月未完成
+     * 未完成数
      */
+    @Excel(name = "未完成数", orderNum = "4")
     private Integer totalWaitNum;
     /**
-     * 完成率
+     * 完成率
      */
+    @Excel(name = "完成率", orderNum = "5")
     private String finishRate;
-    /**
-     * 每日任务
-     */
-    private List<Integer> dayNum;
-    /**
-     * 每日完成任务
-     */
-    private List<Integer> finishNum;
 
 }

+ 29 - 0
platform-dao/src/main/java/com/platform/dao/vo/report/RepairReport24VO.java

@@ -0,0 +1,29 @@
+package com.platform.dao.vo.report;
+
+import com.platform.office.annotation.Excel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.persistence.Id;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author cyz
+ */
+@Data
+@Accessors(chain = true)
+public class RepairReport24VO implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 月份
+     */
+    @Excel(name = "月份", orderNum = "1")
+    private String month;
+
+    /**
+     * 次数
+     */
+    @Excel(name = "次数", orderNum = "2")
+    private Integer num;
+}

+ 6 - 0
platform-dao/src/main/resources/mapper/repair/RepairApplicationFormMapper.xml

@@ -33,6 +33,12 @@
             <if test="sbId != null and sbId != ''">
                 and application.sb_id = #{sbId}
             </if>
+            <if test="category != null and category != ''">
+                and application.category = #{category}
+            </if>
+            <if test="category != null and category != ''">
+                and application.category = #{category}
+            </if>
             <if test="zbh != null and zbh != ''">
                 and sb.zbh = #{zbh}
             </if>

+ 23 - 10
platform-rest/src/main/java/com/platform/rest/controller/report/CheckJobReportController.java

@@ -6,10 +6,12 @@ import com.platform.common.util.R;
 import com.platform.common.validation.group.AddGroup;
 import com.platform.common.validation.group.UpdateGroup;
 import com.platform.dao.dto.check.CheckJobDTO;
+import com.platform.dao.dto.repair.RepairApplicationFormDTO;
 import com.platform.dao.util.ExcelUtil;
 import com.platform.dao.vo.export.check.ExportCheckJobVO;
 import com.platform.dao.vo.query.check.CheckJobVO;
 import com.platform.dao.vo.report.CheckJobReportVO;
+import com.platform.dao.vo.report.RepairReport24VO;
 import com.platform.rest.log.annotation.SysLog;
 import com.platform.service.check.CheckJobService;
 import lombok.AllArgsConstructor;
@@ -34,17 +36,28 @@ public class CheckJobReportController {
   private final  CheckJobService checkJobService;
 
   /**
-   * 查询本月统计报表
-   *    总任务数
-   *    总完成数
-   *    逾期数目:没有在当日完成的
-   *    总完成率
-   *    历史数据图:每日的任务数,每日完成数
-   * @param id 主键
+   * 保养任务每月统计报表导出
+   * @param dto 查询条件
+   * @param year 查询年份
    * @return R
    */
-  @GetMapping("/{month}")
-  public R<CheckJobReportVO> getBgetMonthReportyId(@RequestBody CheckJobDTO checkJobDTO, @PathVariable("month") Integer month){
-      return new R<>(checkJobService.getMonthReport(checkJobDTO, month));
+  @SysLog("保养任务每月统计报表")
+  @GetMapping("")
+  public R getMonthReportByYear(CheckJobDTO dto, @RequestParam(defaultValue = "2021") Integer year){
+      return new R(checkJobService.getMonthReport(dto, year));
   }
+
+    /**
+     * 保养任务每月统计报表导出
+     * @param dto 查询条件
+     * @param year 查询年份
+     * @return R
+     */
+    @GetMapping("/export")
+    @SysLog("保养任务每月统计报表导出")
+    @PreAuthorize("@pms.hasPermission('repair-application-forms-export')")
+    public void export(HttpServletResponse response, CheckJobDTO dto, @RequestParam(defaultValue = "2021") Integer year) {
+        List<CheckJobReportVO> list = checkJobService.getMonthReport(dto, year);
+        ExcelUtil.exportResponseDict(response, CheckJobReportVO.class, list, year + "年-保养任务统计报表");
+    }
 }

+ 66 - 0
platform-rest/src/main/java/com/platform/rest/controller/report/RepairReportController.java

@@ -0,0 +1,66 @@
+package com.platform.rest.controller.report;
+
+import com.platform.common.util.BeanConverterUtil;
+import com.platform.common.util.R;
+import com.platform.dao.dto.check.CheckJobDTO;
+import com.platform.dao.dto.repair.RepairApplicationFormDTO;
+import com.platform.dao.entity.repair.RepairApplicationForm;
+import com.platform.dao.util.ExcelUtil;
+import com.platform.dao.vo.export.repair.ExportRepairApplicationFormVO;
+import com.platform.dao.vo.report.CheckJobReportVO;
+import com.platform.dao.vo.report.RepairReport24VO;
+import com.platform.rest.log.annotation.SysLog;
+import com.platform.service.check.CheckJobService;
+import com.platform.service.repair.RepairApplicationFormService;
+import lombok.AllArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * @Description 维修报表
+ * @Author liuyu
+ * @Date 2020-05-29 10:39:40
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/report/repair")
+public class RepairReportController {
+
+  private final RepairApplicationFormService repairApplicationFormService;
+
+  /**
+   * >24小时停机次数按月统计
+   * 统计规则:
+   *    1:非计划性维修
+   *    2:报修和维修结束的时间大于24小时,即设备停机修复时间
+   * @param dto 查询条件
+   * @param year 查询年份
+   * @return R
+   */
+  @GetMapping("")
+  @SysLog(">24小时停机次数按月统计")
+  public R getMonthReportBig24(RepairApplicationFormDTO dto, @RequestParam(defaultValue = "2021") Integer year){
+      return new R(repairApplicationFormService.getMonthReportBig24(dto, year));
+  }
+
+    /**
+     * >24小时停机次数按月统计
+     * 统计规则:
+     *    1:非计划性维修
+     *    2:报修和维修结束的时间大于24小时,即设备停机修复时间
+     * @param dto 查询条件
+     * @param year 查询年份
+     * @return R
+     */
+    @GetMapping("/export")
+    @SysLog("24小时停机次数按月统计导出")
+    @PreAuthorize("@pms.hasPermission('repair-application-forms-export')")
+    public void export(HttpServletResponse response, RepairApplicationFormDTO dto, @RequestParam(defaultValue = "2021") Integer year) {
+        List<RepairReport24VO> list = repairApplicationFormService.getMonthReportBig24(dto, year);
+        ExcelUtil.exportResponseDict(response, RepairReport24VO.class, list, year + "年-24小时停机次数按月统计表");
+    }
+}

+ 1 - 1
platform-service/src/main/java/com/platform/service/check/CheckJobService.java

@@ -119,5 +119,5 @@ public interface CheckJobService extends IBaseService<CheckJob, CheckJobDTO> {
 
     int countTask(String sbId, String userId, Integer type, Integer searchType);
     int countSbUserTask(String sbId, String userId, Integer type);
-    CheckJobReportVO getMonthReport(CheckJobDTO checkJobDTO, Integer month);
+    List<CheckJobReportVO> getMonthReport(CheckJobDTO checkJobDTO, Integer month);
 }

+ 50 - 21
platform-service/src/main/java/com/platform/service/check/impl/CheckJobServiceImpl.java

@@ -22,7 +22,9 @@ import com.platform.dao.mapper.check.*;
 import com.platform.dao.mapper.upms.SysFileMapper;
 import com.platform.dao.vo.SysUserVO;
 import com.platform.dao.vo.query.check.*;
+import com.platform.dao.vo.repair.RepairApplicationFormVO;
 import com.platform.dao.vo.report.CheckJobReportVO;
+import com.platform.dao.vo.report.RepairReport24VO;
 import com.platform.dao.vo.sb.SbInfoVO;
 import com.platform.dao.vo.tuicalendar.TuiCalendar;
 import com.platform.dao.vo.tuicalendar.TuiCalendarUtil;
@@ -47,6 +49,7 @@ import java.time.temporal.TemporalAdjusters;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description 点检记录 service 实现类
@@ -1164,32 +1167,58 @@ public class CheckJobServiceImpl extends BaseServiceImpl<CheckJobMapper, CheckJo
     }
 
     @Override
-    public CheckJobReportVO getMonthReport(CheckJobDTO checkJobDTO, Integer month) {
-
+    public List<CheckJobReportVO> getMonthReport(CheckJobDTO checkJobDTO, Integer searchYear) {
+        LocalDate localDate = LocalDate.now();
+        int year = localDate.getYear();
+
+        // 如2021-10-15号码,则month=10,需要计算到11月份,需要加1
+        int month = localDate.getMonthValue() + 1;
+        List<Map<String, LocalDateTime>> monthStartAndEndList = DateUtils.getMonthStartAndEndByYear(year, month);
+        LocalDateTime searchStartTime = null;
+        LocalDateTime searchEndTime = null;
+        // 当前年份只统计到当前月,历史年份统计全年
+        if(year == searchYear){
+            searchStartTime = DateUtils.getFirstDayOfThisYear(year);
+            searchEndTime = DateUtils.getLastDayOfMonth(month);
+        }else{
+            searchStartTime = DateUtils.getFirstDayOfThisYear(searchYear);
+            searchEndTime = DateUtils.getLastDayOfThisYear(searchYear);
+        }
 
         // 总数
         Weekend<CheckJob> weekend = new Weekend<>(CheckJob.class);
         WeekendCriteria<CheckJob, Object> weekendCriteria = weekend.weekendCriteria();
-        LocalDateTime firstDateTime = DateUtils.getFirstDayOfMonth(month);
-        LocalDateTime lastDateTime = DateUtils.getLastDayOfMonth(month);
-        weekendCriteria.andBetween(CheckJob::getStartTime, firstDateTime, lastDateTime);
-        List<CheckJob> checkJobList = mapper.selectByExample(weekend);
-
-        int totalNum = checkJobList.size();
-        int totalFinishNum = 0;
-        int totalWaitNum = 0;
-        double finishRate = 0;
-
-        for(CheckJob checkJob:checkJobList){
-            if(checkJob.getStatus().equals(CheckJobStatusEnum.FINISHED.getValue())){
-                totalFinishNum ++;
+        weekendCriteria.andBetween(CheckJob::getStartTime, searchStartTime, searchEndTime);
+        List<CheckJob> list = mapper.selectByExample(weekend);
+
+        List<CheckJobReportVO> result = new ArrayList<CheckJobReportVO>();
+        for(Map<String, LocalDateTime> map: monthStartAndEndList){
+            CheckJobReportVO vo = new CheckJobReportVO();
+            vo.setMonth(searchStartTime.getYear() + "-" + map.get("searchStartTimeMonth").getMonthValue() + "月");
+            int totalNum = 0;
+            int totalFinishNum = 0;
+            int totalWaitNum = 0;
+            double finishRate = 0;
+            for(CheckJob checkJob: list){
+                if(checkJob.getStartTime().isAfter(map.get("searchStartTimeMonth").toLocalDate()) && checkJob.getStartTime().isBefore(map.get("searchEndTimeMonth").toLocalDate())){
+                    totalNum ++;
+                    if(checkJob.getStatus().equals(CheckJobStatusEnum.FINISHED.getValue())){
+                        totalFinishNum ++;
+                    }
+                }
             }
-        }
-        totalWaitNum = totalNum - totalFinishNum;
-        if(totalNum != 0){
-            finishRate = totalFinishNum/totalNum;
-        }
 
-        return null;
+            if(totalNum != 0){
+                totalWaitNum = totalNum - totalFinishNum;
+                finishRate = BigDecimalUtil.decimal(BigDecimalUtil.div(totalFinishNum*100, totalNum),2);
+                System.out.println(finishRate);
+            }
+            vo.setTotalNum(totalNum);
+            vo.setTotalFinishNum(totalFinishNum);
+            vo.setTotalWaitNum(totalWaitNum);
+            vo.setFinishRate(finishRate+"%");
+            result.add(vo);
+        }
+        return result;
     }
 }

+ 4 - 0
platform-service/src/main/java/com/platform/service/repair/RepairApplicationFormService.java

@@ -1,6 +1,7 @@
 package com.platform.service.repair;
 
 import com.platform.dao.bean.MyVOPage;
+import com.platform.dao.dto.check.CheckJobDTO;
 import com.platform.dao.dto.repair.RepairApplicationFormDTO;
 import com.platform.dao.dto.repair.RepairCheckDTO;
 import com.platform.dao.dto.repair.RepairFormDTO;
@@ -8,6 +9,7 @@ import com.platform.dao.entity.repair.RepairApplicationForm;
 import com.platform.dao.entity.repair.RepairForm;
 import com.platform.dao.vo.repair.RepairApplicationFormVO;
 import com.platform.dao.vo.repair.RepairFormVO;
+import com.platform.dao.vo.report.RepairReport24VO;
 import com.platform.service.base.IBaseService;
 
 import java.util.List;
@@ -102,4 +104,6 @@ public interface RepairApplicationFormService extends IBaseService<RepairApplica
     void unFinishNoticeForTimer();
 
     void examine(String id);
+
+    List<RepairReport24VO> getMonthReportBig24(RepairApplicationFormDTO repairApplicationFormDTO, Integer year);
 }

+ 67 - 5
platform-service/src/main/java/com/platform/service/repair/impl/RepairApplicationFormServiceImpl.java

@@ -40,6 +40,7 @@ import com.platform.dao.vo.query.upms.SysDeptVO;
 import com.platform.dao.vo.repair.RepairApplicationFormVO;
 import com.platform.dao.vo.repair.RepairCheckVO;
 import com.platform.dao.vo.repair.RepairFormVO;
+import com.platform.dao.vo.report.RepairReport24VO;
 import com.platform.dao.vo.sb.SbInfoVO;
 import com.platform.office.annotation.Excel;
 import com.platform.service.base.impl.BaseServiceImpl;
@@ -66,6 +67,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringWriter;
 import java.lang.reflect.Array;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
@@ -491,13 +493,15 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
         if(applicationForm.getRepairStartTime() == null){
             applicationForm.setRepairStartTime(LocalDateTime.now());
         }
-        applicationForm.setReceiveMinutes(DateUtils.getDurationMinutesStr(applicationForm.getApplyTime(), applicationForm.getRepairStartTime()));
+        applicationForm.setReceiveMinutes(Double.valueOf(DateUtils.getDurationMinutesStr(applicationForm.getApplyTime(), applicationForm.getRepairStartTime())));
 
         // 根据配置判断维修是否超时
         String minuteStr = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_WARN_MINUTE.name());
-        if(applicationForm.getReceiveMinutes().compareTo(minuteStr)>0){
+        if(StringUtils.isBlank(minuteStr)){
+            applicationForm.setReceiveOvertime(false);
+        } else if(applicationForm.getReceiveMinutes() > Double.valueOf(minuteStr)){
             applicationForm.setReceiveOvertime(true);
-        }else{
+        } else{
             applicationForm.setReceiveOvertime(false);
         }
         applicationForm.setUpdateTime(LocalDateTime.now());
@@ -575,14 +579,14 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
             applicationForm.setRepairEndTime(dto.getRepairEndTime());
         }
 
-        applicationForm.setRepairMinutes(DateUtils.getDurationMinutesStr(applicationForm.getRepairStartTime(), applicationForm.getRepairEndTime()));
+        applicationForm.setRepairMinutes(Double.valueOf(DateUtils.getDurationMinutes(applicationForm.getRepairStartTime(), applicationForm.getRepairEndTime())));
         // 根据配置判断维修是否超时
         String hourFirstStr = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_OVERTIME_MINUTE_FIRST.name());
         int hourFirst = 180;// 默认3小时,180分钟
         if(StringUtils.isNotBlank(hourFirstStr)){
             hourFirst = Integer.valueOf(hourFirstStr) * 60;
         }
-        if(applicationForm.getRepairMinutes().compareTo(String.valueOf(hourFirst))>0){
+        if(applicationForm.getRepairMinutes()> hourFirst){
             applicationForm.setRepairOvertime(true);
         }else{
             applicationForm.setRepairOvertime(false);
@@ -676,6 +680,64 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
                 applicationForm.getId(), ListUtils.newArrayList(userVO.getUserId()), ListUtils.newArrayList(userVO.getEmail())));
     }
 
+    /**
+     * 1: 如果年份是当前年份,则统计到当前月份
+     * 2:如果不是当前年份,则统计全年的
+     *
+     * @param repairApplicationFormDTO
+     * @param searchYear
+     * @return
+     */
+    @Override
+    public List<RepairReport24VO> getMonthReportBig24(RepairApplicationFormDTO repairApplicationFormDTO, Integer searchYear) {
+        LocalDate localDate = LocalDate.now();
+        int year = localDate.getYear();
+
+        // 如2021-10-15号码,则month=10,需要计算到11月份,需要加1
+        int month = localDate.getMonthValue() + 1;
+        List<Map<String, LocalDateTime>> monthStartAndEndList = DateUtils.getMonthStartAndEndByYear(year, month);
+        LocalDateTime searchStartTime = null;
+        LocalDateTime searchEndTime = null;
+        // 当前年份只统计到当前月,历史年份统计全年
+        if(year == searchYear){
+            searchStartTime = DateUtils.getFirstDayOfThisYear(year);
+            searchEndTime = DateUtils.getLastDayOfMonth(month);
+        }else{
+            searchStartTime = DateUtils.getFirstDayOfThisYear(searchYear);
+            searchEndTime = DateUtils.getLastDayOfThisYear(searchYear);
+        }
+        // 选择非计划性的订单
+        repairApplicationFormDTO.setCategory(RepairApplicationFormCategoryEnum.PLAN_NOT.getValue());
+        repairApplicationFormDTO.setSearchStartTime(searchStartTime);
+        repairApplicationFormDTO.setSearchEndTime(searchEndTime);
+        List<RepairApplicationFormVO> list = mapper.selectPageList(repairApplicationFormDTO);
+
+        List<RepairReport24VO> result = new ArrayList<RepairReport24VO>();
+        for(Map<String, LocalDateTime> map: monthStartAndEndList){
+            RepairReport24VO vo = new RepairReport24VO();
+            vo.setMonth(searchStartTime.getYear() + "-" + map.get("searchStartTimeMonth").getMonthValue() + "月");
+            int i = 0;
+            for(RepairApplicationFormVO repairApplicationForm: list){
+                if(repairApplicationForm.getDealMinutes() == null){
+                    continue;
+                }
+                double minites = repairApplicationForm.getDealMinutes();
+                if(minites/60.0<24.0){
+                    continue;
+                }
+                if(repairApplicationForm.getApplyTime().isAfter(map.get("searchStartTimeMonth")) && repairApplicationForm.getApplyTime().isBefore(map.get("searchEndTimeMonth"))){
+                    i++;
+                }
+            }
+            vo.setNum(i);
+            result.add(vo);
+        }
+        for(RepairReport24VO r: result){
+            System.out.println(r.toString());
+        }
+        return result;
+    }
+
     /**
      * 领导验收,进行数据项目的验收
      * 判断领导是否是牛工身份,如果是这关闭单子,