cuijian
2023-11-21 eadaad85fc5fed59c34a0145c2f99a1022581458
生产时间间隔报表逻辑、设备完好率报表逻辑
已添加1个文件
已修改7个文件
465 ■■■■■ 文件已修改
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/FaultIntervalTimeController.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/RepairOrderController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/FaultIntervalTime.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IFaultIntervalTimeService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IRepairOrderService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/FaultIntervalTimeServiceImpl.java 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/RepairOrderServiceImpl.java 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentAvailabilityVo.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/FaultIntervalTimeController.java
@@ -1,5 +1,6 @@
package org.jeecg.modules.eam.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -12,15 +13,20 @@
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.eam.entity.FaultIntervalTime;
import org.jeecg.modules.eam.service.IFaultIntervalTimeService;
import org.jeecg.modules.eam.vo.EquipmentAvailabilityVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.ParseException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 /**
/**
 * @Description: mom_eam_fault_interval_time
 * @Author: jeecg-boot
 * @Date:   2023-08-30
@@ -158,4 +164,22 @@
        return super.importExcel(request, response, FaultIntervalTime.class);
    }
    /**
     * ç”Ÿäº§è®¾å¤‡å¹³å‡æ•…障间隔时间MTBF
     * (说明:设备平均技障间隔期 (MTBF): æŒ‡åœ¨è§„定期内,设备无故障工作时间的平均值。设备的平均故障同隔期指标越大好,表明设备无故障运行时间长。
     * è®¾å¤‡å¹³å‡æ•…障间隔期(MTBP)=(日历时间-总故障停机时间)/总故障次数)
     *
     * @return
     */
    @GetMapping("/getMTBF")
    public JSONObject getMTBF(@RequestParam Map<String, String> query) throws ParseException {
        Map<String,Object> result= new HashMap<>();
        IPage<FaultIntervalTime> pageData = new Page<FaultIntervalTime>();
        List<FaultIntervalTime> list = faultIntervalTimeService.getMTBF(query);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("data",list);
        return jsonObject;
    }
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/RepairOrderController.java
@@ -1,5 +1,6 @@
package org.jeecg.modules.eam.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -19,6 +20,7 @@
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.eam.entity.*;
import org.jeecg.modules.eam.service.*;
import org.jeecg.modules.eam.vo.EquipmentAvailabilityVo;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
@@ -36,6 +38,7 @@
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.*;
import java.util.stream.Collectors;
@@ -1700,4 +1703,17 @@
         repairOrderService.updateById(repairOrder);
         return Result.OK("操作成功");
     }
     /**
      * è®¾å¤‡å®Œå¥½çއ
      *
      * @return
      */
     @GetMapping("/equipmentAvailability")
     public JSONObject equipmentAvailability(@RequestParam Map<String, String> query) throws ParseException {
         List<EquipmentAvailabilityVo> list = repairOrderService.equipmentAvailability(query);
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("data",list);
         return jsonObject;
     }
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/FaultIntervalTime.java
@@ -4,10 +4,8 @@
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
@@ -96,4 +94,15 @@
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "updateTime")
    private Date updateTime;
    @TableField(exist = false)
    private String equipmentNum;
    @TableField(exist = false)
    private String equipmentName;
    @TableField(exist = false)
    private String equipmentModel;
    @TableField(exist = false)
    private String userDepart;
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IFaultIntervalTimeService.java
@@ -2,6 +2,11 @@
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.eam.entity.FaultIntervalTime;
import org.jeecg.modules.eam.vo.EquipmentAvailabilityVo;
import java.text.ParseException;
import java.util.List;
import java.util.Map;
/**
 * @Description: mom_eam_fault_interval_time
@@ -11,4 +16,5 @@
 */
public interface IFaultIntervalTimeService extends IService<FaultIntervalTime> {
    public List<FaultIntervalTime> getMTBF(Map<String, String> query) throws ParseException;
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IRepairOrderService.java
@@ -5,8 +5,10 @@
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.eam.entity.RepairOrder;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.eam.vo.EquipmentAvailabilityVo;
import java.io.Serializable;
import java.text.ParseException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -47,4 +49,5 @@
    IPage<Map<String, Object>> getMaterialSpareList(Integer pageNo, Integer pageSize, Map<String, Object> params);
    public List<EquipmentAvailabilityVo> equipmentAvailability(Map<String, String> query)  throws ParseException;
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/FaultIntervalTimeServiceImpl.java
@@ -1,10 +1,34 @@
package org.jeecg.modules.eam.service.impl;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.util.DateUtils;
import org.jeecg.modules.eam.entity.Equipment;
import org.jeecg.modules.eam.entity.EquipmentReportRepair;
import org.jeecg.modules.eam.entity.FaultIntervalTime;
import org.jeecg.modules.eam.entity.RepairOrder;
import org.jeecg.modules.eam.mapper.FaultIntervalTimeMapper;
import org.jeecg.modules.eam.service.IEamEquipmentService;
import org.jeecg.modules.eam.service.IEquipmentReportRepairService;
import org.jeecg.modules.eam.service.IFaultIntervalTimeService;
import org.jeecg.modules.eam.service.IRepairOrderService;
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.service.ISysDepartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
/**
 * @Description: mom_eam_fault_interval_time
@@ -15,4 +39,154 @@
@Service
public class FaultIntervalTimeServiceImpl extends ServiceImpl<FaultIntervalTimeMapper, FaultIntervalTime> implements IFaultIntervalTimeService {
    @Autowired
    private IEamEquipmentService equipmentService;
    @Autowired
    private IEquipmentReportRepairService equipmentReportRepairService;
    @Autowired
    private IRepairOrderService repairOrderService;
    @Autowired
    private ISysDepartService departService;
    @Override
    public List<FaultIntervalTime> getMTBF(Map<String, String> query) throws ParseException {
        List<FaultIntervalTime> faultIntervalTimeList = new ArrayList<>();
        String startTime = query.get("startTime");
        String endTime = query.get("endTime");
        if(StringUtils.isBlank(startTime) || StringUtils.isBlank(endTime)){
            return faultIntervalTimeList;
        }else {
            startTime = startTime+" 00:00:00";
            endTime = endTime+" 23:59:59";
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date startDate = sdf.parse(startTime);
        Date endDate = sdf.parse(endTime);
        long diff = endDate.getTime() - startDate.getTime(); // è®¡ç®—两个日期之间的毫秒数
        BigDecimal totalHours = new BigDecimal(diff)
                .divide(new BigDecimal(60 * 60 * 1000), 2, BigDecimal.ROUND_HALF_EVEN);
        //时间段总可利用时间
        String totalAvailableTime = String.valueOf(totalHours);
        //查询所有设备
        List<Equipment> equipmentList = equipmentService.lambdaQuery().eq(Equipment::getDelFlag, CommonConstant.DEL_FLAG_0).list();
        for(Equipment equipment : equipmentList){
            FaultIntervalTime faultIntervalTime = new FaultIntervalTime();
            faultIntervalTime.setEquipmentId(equipment.getId());
            faultIntervalTime.setEquipmentNum(equipment.getNum());
            faultIntervalTime.setEquipmentName(equipment.getName());
            faultIntervalTime.setEquipmentModel(equipment.getModel());
            SysDepart depart = departService.lambdaQuery().eq(SysDepart::getId,equipment.getUseId()).eq(SysDepart::getDelFlag,CommonConstant.DEL_FLAG_0).one();
            if(depart != null){
                faultIntervalTime.setUserDepart(depart.getDepartName());
            }
            //查询设备是否有报修单
            List<EquipmentReportRepair> equipmentReportRepairList = equipmentReportRepairService.lambdaQuery().eq(EquipmentReportRepair::getEquipmentId,equipment.getId())
                    .eq(EquipmentReportRepair::getDelFlag,CommonConstant.DEL_FLAG_0).list();
            if(CollectionUtils.isNotEmpty(equipmentReportRepairList)){
                BigDecimal equipmentFaultTime = new BigDecimal("0");
                BigDecimal equipmentRepairTime = new BigDecimal("0");
                int count = 0;
                //一、查询故障时间
                for(EquipmentReportRepair equipmentReportRepair : equipmentReportRepairList){
                    //1、如果报修时间不为空,并且在查询时间段内
                    if(equipmentReportRepair.getFaultTime() != null && equipmentReportRepair.getFaultTime().compareTo(endDate) < 0 &&  equipmentReportRepair.getFaultTime().compareTo(startDate) > 0){
                        //2、验收时间在查询时间段内
                        if(equipmentReportRepair.getAcceptTime() != null && equipmentReportRepair.getAcceptTime().compareTo(endDate) < 0){
                            equipmentFaultTime = equipmentFaultTime.add(new BigDecimal(equipmentReportRepair.getFaultHour()));
                            count++;
                            //3、验收时间大于查询结束时间
                        }else {
                            long diff2 = endDate.getTime() - equipmentReportRepair.getFaultTime().getTime();
                            BigDecimal faultTime1 = new BigDecimal(diff2)
                                    .divide(new BigDecimal(60 * 60 * 1000), 2, BigDecimal.ROUND_HALF_EVEN);
                            equipmentFaultTime = equipmentFaultTime.add(faultTime1);
                            count++;
                        }
                        //4、报修时间在查询开始时间之前
                    }else if(equipmentReportRepair.getFaultTime().compareTo(startDate) < 0 ){
                        //5、验收时间在查询时间段内
                        if(equipmentReportRepair.getAcceptTime() != null && equipmentReportRepair.getAcceptTime().compareTo(endDate) < 0){
                            long diff2 = equipmentReportRepair.getAcceptTime().getTime() - startDate.getTime();
                            BigDecimal faultTime1 = new BigDecimal(diff2)
                                    .divide(new BigDecimal(60 * 60 * 1000), 2, BigDecimal.ROUND_HALF_EVEN);
                            equipmentFaultTime = equipmentFaultTime.add(faultTime1);
                            count++;
                            //6、验收时间为空或验收时间在查询结束时间之后
                        }else {
                            long diff2 = endDate.getTime() - startDate.getTime();
                            BigDecimal faultTime1 = new BigDecimal(diff2)
                                    .divide(new BigDecimal(60 * 60 * 1000), 2, BigDecimal.ROUND_HALF_EVEN);
                            equipmentFaultTime = equipmentFaultTime.add(faultTime1);
                            count++;
                        }
                    }
                    //二、查询修复时间
                    //查询报修单是否已领取并开工
                    List<RepairOrder> repairOrderList = repairOrderService.lambdaQuery().eq(RepairOrder::getReportRepairId,equipmentReportRepair.getId())
                            .eq(RepairOrder::getDelFlag,CommonConstant.DEL_FLAG_0).list();
                    if(CollectionUtils.isNotEmpty(repairOrderList)){
                        //1、开工时间在查询时间段内
                        if(repairOrderList.get(0).getActualStartTime() != null && repairOrderList.get(0).getActualStartTime().compareTo(endDate) < 0 &&  repairOrderList.get(0).getActualStartTime().compareTo(startDate) > 0 ){
                            //2、完工时间在查询时间段内
                            if(repairOrderList.get(0).getActualEndTime() != null && repairOrderList.get(0).getActualEndTime().compareTo(endDate) < 0){
                                equipmentRepairTime = equipmentRepairTime.add(repairOrderList.get(0).getActualHour());
                                //3、完工时间大于查询结束时间
                            }else {
                                long diff1 = endDate.getTime() - repairOrderList.get(0).getActualStartTime().getTime();
                                BigDecimal repairTime1 = new BigDecimal(diff1)
                                        .divide(new BigDecimal(60 * 60 * 1000), 2, BigDecimal.ROUND_HALF_EVEN);
                                equipmentRepairTime = equipmentRepairTime.add(repairTime1);
                            }
                            //4、开工时间在查询开始时间之前
                        }else if(repairOrderList.get(0).getActualStartTime() != null && repairOrderList.get(0).getActualStartTime().compareTo(startDate) < 0 ){
                            //5、完工时间在查询时间段内
                            if(repairOrderList.get(0).getActualEndTime() != null && repairOrderList.get(0).getActualEndTime().compareTo(endDate) < 0){
                                long diff1 = repairOrderList.get(0).getActualEndTime().getTime() - startDate.getTime();
                                BigDecimal repairTime1 = new BigDecimal(diff1)
                                        .divide(new BigDecimal(60 * 60 * 1000), 2, BigDecimal.ROUND_HALF_EVEN);
                                equipmentRepairTime = equipmentRepairTime.add(repairTime1);
                                //6、完工时间为空或完工时间在查询结束时间之后
                            }else{
                                long diff1 = endDate.getTime() - startDate.getTime();
                                BigDecimal repairTime1 = new BigDecimal(diff1)
                                        .divide(new BigDecimal(60 * 60 * 1000), 2, BigDecimal.ROUND_HALF_EVEN);
                                equipmentRepairTime = equipmentRepairTime.add(repairTime1);
                            }
                        }
                    }
                }
                //设备故障时间
                String faultTime = String.valueOf(equipmentFaultTime);
                //设备维修时长
                String repairTime = String.valueOf(equipmentRepairTime);
                //设备无故障时间
                String noFaultTime = String.valueOf(totalHours.subtract(equipmentFaultTime));
                //设备平均故障间隔时间
                String averageFaultIntervalTime = String.valueOf(totalHours.subtract(equipmentFaultTime).divide(new BigDecimal(equipmentReportRepairList.size()), 2, BigDecimal.ROUND_HALF_EVEN));
                //设备平均修复时间
                String averageRepairTime = String.valueOf(equipmentRepairTime.divide(new BigDecimal(equipmentReportRepairList.size()), 2, BigDecimal.ROUND_HALF_EVEN));
                faultIntervalTime.setTotalAvailableTime(totalAvailableTime);
                faultIntervalTime.setFaultTime(faultTime);
                faultIntervalTime.setRepairTime(repairTime);
                //设备故障次数
                faultIntervalTime.setFaultNumber(String.valueOf(count));
                faultIntervalTime.setAverageFaultIntervalTime(averageFaultIntervalTime);
                faultIntervalTime.setAverageRepairTime(averageRepairTime);
                faultIntervalTime.setNoFaultTime(noFaultTime);
                faultIntervalTimeList.add(faultIntervalTime);
            }else {
                faultIntervalTime.setTotalAvailableTime(totalAvailableTime);
                faultIntervalTime.setFaultTime("0");
                faultIntervalTime.setRepairTime("0");
                faultIntervalTime.setFaultNumber("0");
                faultIntervalTime.setAverageRepairTime("0");
                faultIntervalTime.setAverageFaultIntervalTime(totalAvailableTime);
                faultIntervalTime.setNoFaultTime(totalAvailableTime);
                faultIntervalTimeList.add(faultIntervalTime);
            }
        }
        return faultIntervalTimeList;
    }
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/RepairOrderServiceImpl.java
@@ -1,14 +1,21 @@
package org.jeecg.modules.eam.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.modules.eam.entity.Equipment;
import org.jeecg.modules.eam.entity.EquipmentReportRepair;
import org.jeecg.modules.eam.entity.RepairOrder;
import org.jeecg.modules.eam.entity.RepairOrderDetail;
import org.jeecg.modules.eam.mapper.*;
import org.jeecg.modules.eam.service.IEamEquipmentService;
import org.jeecg.modules.eam.service.IEquipmentReportRepairService;
import org.jeecg.modules.eam.service.IRepairOrderDetailService;
import org.jeecg.modules.eam.service.IRepairOrderService;
import org.jeecg.modules.eam.vo.EquipmentAvailabilityVo;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.mapper.SysUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +23,9 @@
import org.springframework.transaction.annotation.Transactional;
import java.io.Serializable;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
@@ -45,6 +55,10 @@
    private EquipmentDocumentMapper equipmentDocumentMapper;
    @Autowired
    private SysUserMapper sysUserMapper;
    @Autowired
    private IEamEquipmentService equipmentService;
    @Autowired
    private IEquipmentReportRepairService equipmentReportRepairService;
@@ -115,5 +129,176 @@
        return super.baseMapper.getMaterialSpareList(pageData,num,status);
    }
    @Override
    public List<EquipmentAvailabilityVo> equipmentAvailability(Map<String, String> query) throws ParseException {
        List<EquipmentAvailabilityVo> equipmentAvailabilityVoList = new ArrayList<>();
        String yearStr = query.get("year");
        String startTime1 = "";
        String endTime1 = "";
        String startTime2 = "";
        String endTime2 = "";
        String startTime3 = "";
        String endTime3 = "";
        String startTime4 = "";
        String endTime4 = "";
        String startTime5 = "";
        String endTime5 = "";
        String startTime6 = "";
        String endTime6 = "";
        String startTime7 = "";
        String endTime7 = "";
        String startTime8 = "";
        String endTime8 = "";
        String startTime9 = "";
        String endTime9 = "";
        String startTime10 = "";
        String endTime10 = "";
        String startTime11 = "";
        String endTime11 = "";
        String startTime12 = "";
        String endTime12 = "";
        if(StringUtils.isBlank(yearStr)){
            return equipmentAvailabilityVoList;
        }else {
            startTime1 = yearStr+"-01-01 00:00:00";
            endTime1 = yearStr+"-01-31 23:59:59";
            startTime2 = yearStr+"-02-01 00:00:00";
            endTime2 = yearStr+"-02-31 23:59:59";
            startTime3 = yearStr+"-03-01 00:00:00";
            endTime3 = yearStr+"-03-31 23:59:59";
            startTime4 = yearStr+"-04-01 00:00:00";
            endTime4 = yearStr+"-04-30 23:59:59";
            startTime5 = yearStr+"-05-01 00:00:00";
            endTime5 = yearStr+"-05-31 23:59:59";
            startTime6 = yearStr+"-06-01 00:00:00";
            endTime6 = yearStr+"-06-30 23:59:59";
            startTime7 = yearStr+"-07-01 00:00:00";
            endTime7 = yearStr+"-07-31 23:59:59";
            startTime8 = yearStr+"-08-01 00:00:00";
            endTime8 = yearStr+"-08-31 23:59:59";
            startTime9 = yearStr+"-09-01 00:00:00";
            endTime9 = yearStr+"-09-30 23:59:59";
            startTime10 = yearStr+"-10-01 00:00:00";
            endTime10 = yearStr+"-10-31 23:59:59";
            startTime11 = yearStr+"-11-01 00:00:00";
            endTime11 = yearStr+"-11-30 23:59:59";
            startTime12 = yearStr+"-12-01 00:00:00";
            endTime12 = yearStr+"-12-31 23:59:59";
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date startDate1 = sdf.parse(startTime1);
        Date endDate1 = sdf.parse(endTime1);
        Date startDate2 = sdf.parse(startTime2);
        Date endDate2 = sdf.parse(endTime2);
        Date startDate3 = sdf.parse(startTime3);
        Date endDate3 = sdf.parse(endTime3);
        Date startDate4 = sdf.parse(startTime4);
        Date endDate4 = sdf.parse(endTime4);
        Date startDate5 = sdf.parse(startTime5);
        Date endDate5 = sdf.parse(endTime5);
        Date startDate6 = sdf.parse(startTime6);
        Date endDate6 = sdf.parse(endTime6);
        Date startDate7 = sdf.parse(startTime7);
        Date endDate7 = sdf.parse(endTime7);
        Date startDate8 = sdf.parse(startTime8);
        Date endDate8 = sdf.parse(endTime8);
        Date startDate9 = sdf.parse(startTime9);
        Date endDate9 = sdf.parse(endTime9);
        Date startDate10 = sdf.parse(startTime10);
        Date endDate10 = sdf.parse(endTime10);
        Date startDate11 = sdf.parse(startTime11);
        Date endDate11 = sdf.parse(endTime11);
        Date startDate12 = sdf.parse(startTime12);
        Date endDate12 = sdf.parse(endTime12);
        EquipmentAvailabilityVo equipmentAvailabilityVo1 = this.getFaultTime(startDate1,endDate1,"1");
        EquipmentAvailabilityVo equipmentAvailabilityVo2 = this.getFaultTime(startDate2,endDate2,"2");
        EquipmentAvailabilityVo equipmentAvailabilityVo3 = this.getFaultTime(startDate3,endDate3,"3");
        EquipmentAvailabilityVo equipmentAvailabilityVo4 = this.getFaultTime(startDate4,endDate4,"4");
        EquipmentAvailabilityVo equipmentAvailabilityVo5 = this.getFaultTime(startDate5,endDate5,"5");
        EquipmentAvailabilityVo equipmentAvailabilityVo6 = this.getFaultTime(startDate6,endDate6,"6");
        EquipmentAvailabilityVo equipmentAvailabilityVo7 = this.getFaultTime(startDate7,endDate7,"7");
        EquipmentAvailabilityVo equipmentAvailabilityVo8 = this.getFaultTime(startDate8,endDate8,"8");
        EquipmentAvailabilityVo equipmentAvailabilityVo9 = this.getFaultTime(startDate9,endDate9,"9");
        EquipmentAvailabilityVo equipmentAvailabilityVo10 = this.getFaultTime(startDate10,endDate10,"10");
        EquipmentAvailabilityVo equipmentAvailabilityVo11 = this.getFaultTime(startDate11,endDate11,"11");
        EquipmentAvailabilityVo equipmentAvailabilityVo12 = this.getFaultTime(startDate12,endDate12,"12");
        equipmentAvailabilityVoList.add(equipmentAvailabilityVo1);
        equipmentAvailabilityVoList.add(equipmentAvailabilityVo2);
        equipmentAvailabilityVoList.add(equipmentAvailabilityVo3);
        equipmentAvailabilityVoList.add(equipmentAvailabilityVo4);
        equipmentAvailabilityVoList.add(equipmentAvailabilityVo5);
        equipmentAvailabilityVoList.add(equipmentAvailabilityVo6);
        equipmentAvailabilityVoList.add(equipmentAvailabilityVo7);
        equipmentAvailabilityVoList.add(equipmentAvailabilityVo8);
        equipmentAvailabilityVoList.add(equipmentAvailabilityVo9);
        equipmentAvailabilityVoList.add(equipmentAvailabilityVo10);
        equipmentAvailabilityVoList.add(equipmentAvailabilityVo11);
        equipmentAvailabilityVoList.add(equipmentAvailabilityVo12);
        return equipmentAvailabilityVoList;
    }
    public EquipmentAvailabilityVo getFaultTime(Date startDate,Date endDate,String month) throws ParseException {
        //查询A类设备台数,截止到1月底
        List<Equipment> equipmentList = equipmentService.lambdaQuery().eq(Equipment::getEquipmentImportanceId,"A").eq(Equipment::getDelFlag, CommonConstant.DEL_FLAG_0).lt(Equipment::getAcceptanceCheckDate,endDate).list();
        Integer countA = equipmentList.size();
        EquipmentAvailabilityVo equipmentAvailabilityVo = new EquipmentAvailabilityVo();
        BigDecimal equipmentFaultTime = new BigDecimal("0");
        int count = 0;
        //查询一月份故障时间
        for(Equipment equipment : equipmentList){
            //查询设备是否有报修单
            List<EquipmentReportRepair> equipmentReportRepairList = equipmentReportRepairService.lambdaQuery().eq(EquipmentReportRepair::getEquipmentId,equipment.getId())
                    .eq(EquipmentReportRepair::getDelFlag,CommonConstant.DEL_FLAG_0).list();
            if(CollectionUtils.isNotEmpty(equipmentReportRepairList)){
                //一、查询故障时间
                for(EquipmentReportRepair equipmentReportRepair : equipmentReportRepairList){
                    //1、如果报修时间不为空,并且在查询时间段内
                    if(equipmentReportRepair.getFaultTime() != null && equipmentReportRepair.getFaultTime().compareTo(endDate) < 0 &&  equipmentReportRepair.getFaultTime().compareTo(startDate) > 0){
                        //2、验收时间在查询时间段内
                        if(equipmentReportRepair.getAcceptTime() != null && equipmentReportRepair.getAcceptTime().compareTo(endDate) < 0){
                            equipmentFaultTime = equipmentFaultTime.add(new BigDecimal(equipmentReportRepair.getFaultHour()));
                            count++;
                            //3、验收时间大于查询结束时间
                        }else {
                            long diff2 = endDate.getTime() - equipmentReportRepair.getFaultTime().getTime();
                            BigDecimal faultTime1 = new BigDecimal(diff2)
                                    .divide(new BigDecimal(60 * 60 * 1000), 2, BigDecimal.ROUND_HALF_EVEN);
                            equipmentFaultTime = equipmentFaultTime.add(faultTime1);
                            count++;
                        }
                        //4、报修时间在查询开始时间之前
                    }else if(equipmentReportRepair.getFaultTime().compareTo(startDate) < 0 ){
                        //5、验收时间在查询时间段内
                        if(equipmentReportRepair.getAcceptTime() != null && equipmentReportRepair.getAcceptTime().compareTo(endDate) < 0){
                            long diff2 = equipmentReportRepair.getAcceptTime().getTime() - startDate.getTime();
                            BigDecimal faultTime1 = new BigDecimal(diff2)
                                    .divide(new BigDecimal(60 * 60 * 1000), 2, BigDecimal.ROUND_HALF_EVEN);
                            equipmentFaultTime = equipmentFaultTime.add(faultTime1);
                            count++;
                            //6、验收时间为空或验收时间在查询结束时间之后
                        }else {
                            long diff2 = endDate.getTime() - startDate.getTime();
                            BigDecimal faultTime1 = new BigDecimal(diff2)
                                    .divide(new BigDecimal(60 * 60 * 1000), 2, BigDecimal.ROUND_HALF_EVEN);
                            equipmentFaultTime = equipmentFaultTime.add(faultTime1);
                            count++;
                        }
                    }
                }
                equipmentAvailabilityVo.setMonth(month);
                equipmentAvailabilityVo.setCountA(countA);
                equipmentAvailabilityVo.setFaultNumber(String.valueOf(count));
                equipmentAvailabilityVo.setFaultDuration(equipmentFaultTime);
            }else {
                equipmentAvailabilityVo.setMonth(month);
                equipmentAvailabilityVo.setCountA(countA);
                equipmentAvailabilityVo.setFaultNumber("0");
                equipmentAvailabilityVo.setFaultDuration(new BigDecimal("0"));
                equipmentAvailabilityVo.setAvailability("100");
            }
        }
        return equipmentAvailabilityVo;
    }
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentAvailabilityVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
package org.jeecg.modules.eam.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.base.entity.JeecgEntity;
import org.jeecg.modules.eam.entity.EquipmentUnsealDetail;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelCollection;
import java.math.BigDecimal;
import java.util.List;
/**
 * @Description: è®¾å¤‡å®Œå¥½çއ
 * @Author: cj
 * @Date:   2023-11-16
 * @Version: V1.0
 */
@Data
public class EquipmentAvailabilityVo {
    /**月份*/
    private String month;
    /**A类设备台数*/
    private Integer countA;
    /**故障时间*/
    private BigDecimal faultDuration;
    /**故障总台次*/
    private String faultNumber;
    /**A类设备完好率*/
    private String availability;
}