cuijian
2023-11-22 a4e554b7e6c5b98e728f96be80a12b0b04eebd48
设备完好率、设备开动率报表逻辑开发
已修改5个文件
387 ■■■■■ 文件已修改
lxzn-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/RepairOrderController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IRepairOrderService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/RepairOrderServiceImpl.java 363 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentAvailabilityVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
@@ -137,7 +137,12 @@
        filterChainDefinitionMap.put("/jmreport/**", "anon");
        filterChainDefinitionMap.put("/**/*.js.map", "anon");
        filterChainDefinitionMap.put("/**/*.css.map", "anon");
        //设备完好率报表排除
        filterChainDefinitionMap.put("/eam/repairOrder/equipmentAvailability", "anon");
        //生产故障间隔时间报表排除
        filterChainDefinitionMap.put("/eam/faultIntervalTime/getMTBF", "anon");
        //设备可开动率报表排除
            filterChainDefinitionMap.put("/eam/repairOrder/getStartRate", "anon");
        //大屏模板例子
        filterChainDefinitionMap.put("/test/bigScreen/**", "anon");
        filterChainDefinitionMap.put("/bigscreen/template1/**", "anon");
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/RepairOrderController.java
@@ -1716,4 +1716,17 @@
         jsonObject.put("data",list);
         return jsonObject;
     }
     /**
      * 设备可开动率
      *
      * @return
      */
     @GetMapping("/getStartRate")
     public JSONObject getStartRate(@RequestParam Map<String, String> query) throws ParseException {
         List<EquipmentAvailabilityVo> list = repairOrderService.getStartRate(query);
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("data",list);
         return jsonObject;
     }
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IRepairOrderService.java
@@ -50,4 +50,6 @@
    IPage<Map<String, Object>> getMaterialSpareList(Integer pageNo, Integer pageSize, Map<String, Object> params);
    public List<EquipmentAvailabilityVo> equipmentAvailability(Map<String, String> query)  throws ParseException;
    public List<EquipmentAvailabilityVo> getStartRate(Map<String, String> query)  throws ParseException;
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/RepairOrderServiceImpl.java
@@ -6,6 +6,7 @@
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.common.util.DateUtils;
import org.jeecg.modules.eam.entity.Equipment;
import org.jeecg.modules.eam.entity.EquipmentReportRepair;
import org.jeecg.modules.eam.entity.RepairOrder;
@@ -26,6 +27,7 @@
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.YearMonth;
import java.util.*;
/**
@@ -157,13 +159,16 @@
        String endTime11 = "";
        String startTime12 = "";
        String endTime12 = "";
        YearMonth yearMonth = null;
        if(StringUtils.isBlank(yearStr)){
            return equipmentAvailabilityVoList;
        }else {
            //根据年份获取本年度2月份有多少天
            yearMonth = YearMonth.of(Integer.parseInt(yearStr),2);
            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";
            endTime2 = yearStr+"-02-"+String.valueOf(yearMonth.lengthOfMonth())+" 23:59:59";
            startTime3 = yearStr+"-03-01 00:00:00";
            endTime3 = yearStr+"-03-31 23:59:59";
            startTime4 = yearStr+"-04-01 00:00:00";
@@ -210,18 +215,18 @@
        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");
        EquipmentAvailabilityVo equipmentAvailabilityVo1 = this.getFaultTime(startDate1,endDate1,"1",31);
        EquipmentAvailabilityVo equipmentAvailabilityVo2 = this.getFaultTime(startDate2,endDate2,"2",yearMonth.lengthOfMonth());
        EquipmentAvailabilityVo equipmentAvailabilityVo3 = this.getFaultTime(startDate3,endDate3,"3",31);
        EquipmentAvailabilityVo equipmentAvailabilityVo4 = this.getFaultTime(startDate4,endDate4,"4",30);
        EquipmentAvailabilityVo equipmentAvailabilityVo5 = this.getFaultTime(startDate5,endDate5,"5",31);
        EquipmentAvailabilityVo equipmentAvailabilityVo6 = this.getFaultTime(startDate6,endDate6,"6",30);
        EquipmentAvailabilityVo equipmentAvailabilityVo7 = this.getFaultTime(startDate7,endDate7,"7",31);
        EquipmentAvailabilityVo equipmentAvailabilityVo8 = this.getFaultTime(startDate8,endDate8,"8",31);
        EquipmentAvailabilityVo equipmentAvailabilityVo9 = this.getFaultTime(startDate9,endDate9,"9",30);
        EquipmentAvailabilityVo equipmentAvailabilityVo10 = this.getFaultTime(startDate10,endDate10,"10",31);
        EquipmentAvailabilityVo equipmentAvailabilityVo11 = this.getFaultTime(startDate11,endDate11,"11",30);
        EquipmentAvailabilityVo equipmentAvailabilityVo12 = this.getFaultTime(startDate12,endDate12,"12",31);
        equipmentAvailabilityVoList.add(equipmentAvailabilityVo1);
        equipmentAvailabilityVoList.add(equipmentAvailabilityVo2);
        equipmentAvailabilityVoList.add(equipmentAvailabilityVo3);
@@ -237,19 +242,141 @@
        return equipmentAvailabilityVoList;
    }
    public EquipmentAvailabilityVo getFaultTime(Date startDate,Date endDate,String month) throws ParseException {
        //查询A类设备台数,截止到1月底
    @Override
    public List<EquipmentAvailabilityVo> getStartRate(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 = "";
        YearMonth yearMonth = null;
        if(StringUtils.isBlank(yearStr)){
            return equipmentAvailabilityVoList;
        }else {
            //根据年份获取本年度2月份有多少天
            yearMonth = YearMonth.of(Integer.parseInt(yearStr),2);
            startTime1 = yearStr+"-01-01 00:00:00";
            endTime1 = yearStr+"-01-31 23:59:59";
            startTime2 = yearStr+"-02-01 00:00:00";
            endTime2 = yearStr+"-02-"+String.valueOf(yearMonth.lengthOfMonth())+" 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.getRepairTime(startDate1,endDate1,"1",31);
        EquipmentAvailabilityVo equipmentAvailabilityVo2 = this.getRepairTime(startDate2,endDate2,"2",yearMonth.lengthOfMonth());
        EquipmentAvailabilityVo equipmentAvailabilityVo3 = this.getRepairTime(startDate3,endDate3,"3",31);
        EquipmentAvailabilityVo equipmentAvailabilityVo4 = this.getRepairTime(startDate4,endDate4,"4",30);
        EquipmentAvailabilityVo equipmentAvailabilityVo5 = this.getRepairTime(startDate5,endDate5,"5",31);
        EquipmentAvailabilityVo equipmentAvailabilityVo6 = this.getRepairTime(startDate6,endDate6,"6",30);
        EquipmentAvailabilityVo equipmentAvailabilityVo7 = this.getRepairTime(startDate7,endDate7,"7",31);
        EquipmentAvailabilityVo equipmentAvailabilityVo8 = this.getRepairTime(startDate8,endDate8,"8",31);
        EquipmentAvailabilityVo equipmentAvailabilityVo9 = this.getRepairTime(startDate9,endDate9,"9",30);
        EquipmentAvailabilityVo equipmentAvailabilityVo10 = this.getRepairTime(startDate10,endDate10,"10",31);
        EquipmentAvailabilityVo equipmentAvailabilityVo11 = this.getRepairTime(startDate11,endDate11,"11",30);
        EquipmentAvailabilityVo equipmentAvailabilityVo12 = this.getRepairTime(startDate12,endDate12,"12",31);
        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,int days) throws ParseException {
        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();
        //A类设备台数
        int countA = equipmentList.size();
        EquipmentAvailabilityVo equipmentAvailabilityVo = new EquipmentAvailabilityVo();
        BigDecimal equipmentFaultTime = new BigDecimal("0");
        //故障台次
        int count = 0;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        if(countA == 0){
            equipmentAvailabilityVo.setMonth(month);
            equipmentAvailabilityVo.setCountA(countA);
            equipmentAvailabilityVo.setFaultNumber("0");
            equipmentAvailabilityVo.setFaultDuration(new BigDecimal("0"));
            equipmentAvailabilityVo.setAvailability("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)){
                //当前设备的故障时间集合,用于判断多次故障是否发生在同一天
                List<String> faultTimeList = new ArrayList<>();
                //一、查询故障时间
                for(EquipmentReportRepair equipmentReportRepair : equipmentReportRepairList){
                    //1、如果报修时间不为空,并且在查询时间段内
@@ -257,14 +384,36 @@
                        //2、验收时间在查询时间段内
                        if(equipmentReportRepair.getAcceptTime() != null && equipmentReportRepair.getAcceptTime().compareTo(endDate) < 0){
                            equipmentFaultTime = equipmentFaultTime.add(new BigDecimal(equipmentReportRepair.getFaultHour()));
                            int flag = 0;
                            if(CollectionUtils.isNotEmpty(faultTimeList)){
                                for(String faultTime : faultTimeList){
                                    if(faultTime.equals(sdf.format(equipmentReportRepair.getFaultTime()))){
                                        flag = 1;
                                    }
                                }
                            }
                            if(flag == 0){
                            count++;
                                faultTimeList.add(sdf.format(equipmentReportRepair.getFaultTime()));
                            }
                            //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);
                            int flag = 0;
                            if(CollectionUtils.isNotEmpty(faultTimeList)){
                                for(String faultTime : faultTimeList){
                                    if(faultTime.equals(sdf.format(equipmentReportRepair.getFaultTime()))){
                                        flag = 1;
                                    }
                                }
                            }
                            if(flag == 0){
                            count++;
                                faultTimeList.add(sdf.format(equipmentReportRepair.getFaultTime()));
                            }
                        }
                        //4、报修时间在查询开始时间之前
                    }else if(equipmentReportRepair.getFaultTime().compareTo(startDate) < 0 ){
@@ -274,27 +423,207 @@
                            BigDecimal faultTime1 = new BigDecimal(diff2)
                                    .divide(new BigDecimal(60 * 60 * 1000), 2, BigDecimal.ROUND_HALF_EVEN);
                            equipmentFaultTime = equipmentFaultTime.add(faultTime1);
                            int flag = 0;
                            if(CollectionUtils.isNotEmpty(faultTimeList)){
                                for(String faultTime : faultTimeList){
                                    if(faultTime.equals(sdf.format(equipmentReportRepair.getFaultTime()))){
                                        flag = 1;
                                    }
                                }
                            }
                            if(flag == 0){
                            count++;
                                faultTimeList.add(sdf.format(equipmentReportRepair.getFaultTime()));
                            }
                            //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);
                            int flag = 0;
                            if(CollectionUtils.isNotEmpty(faultTimeList)){
                                for(String faultTime : faultTimeList){
                                    if(faultTime.equals(sdf.format(equipmentReportRepair.getFaultTime()))){
                                        flag = 1;
                                    }
                                }
                            }
                            if(flag == 0){
                            count++;
                                faultTimeList.add(sdf.format(equipmentReportRepair.getFaultTime()));
                        }
                    }
                }
                }
                BigDecimal availability = new BigDecimal(countA).multiply(new BigDecimal(days)).subtract(new BigDecimal(count)).multiply(new BigDecimal(100)).divide(new BigDecimal(countA).multiply(new BigDecimal(days)),2,BigDecimal.ROUND_HALF_EVEN);
                equipmentAvailabilityVo.setMonth(month);
                equipmentAvailabilityVo.setCountA(countA);
                equipmentAvailabilityVo.setFaultNumber(String.valueOf(count));
                equipmentAvailabilityVo.setFaultDuration(equipmentFaultTime);
                equipmentAvailabilityVo.setAvailability(availability +"%");
            }else {
                equipmentAvailabilityVo.setMonth(month);
                equipmentAvailabilityVo.setCountA(countA);
                equipmentAvailabilityVo.setFaultNumber("0");
                equipmentAvailabilityVo.setFaultDuration(new BigDecimal("0"));
                equipmentAvailabilityVo.setAvailability("100");
                equipmentAvailabilityVo.setAvailability("100%");
            }
        }
        return equipmentAvailabilityVo;
    }
    public EquipmentAvailabilityVo getRepairTime(Date startDate,Date endDate,String month,int days) throws ParseException {
        List<Equipment> equipmentList = equipmentService.lambdaQuery().eq(Equipment::getSpecificEquipment,"0").eq(Equipment::getDelFlag, CommonConstant.DEL_FLAG_0).lt(Equipment::getAcceptanceCheckDate,endDate).list();
        //关键设备台数
        int countA = equipmentList.size();
        EquipmentAvailabilityVo equipmentAvailabilityVo = new EquipmentAvailabilityVo();
        BigDecimal equipmentFaultTime = new BigDecimal("0");
        BigDecimal equipmentRepairTime = new BigDecimal("0");
        //维修台次
        int count = 0;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        if(countA == 0){
            equipmentAvailabilityVo.setMonth(month);
            equipmentAvailabilityVo.setCountA(countA);
            equipmentAvailabilityVo.setFaultNumber("0");
            equipmentAvailabilityVo.setFaultDuration(new BigDecimal("0"));
            equipmentAvailabilityVo.setAvailability("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)){
                //当前设备的开工时间集合,用于判断是否在同一天维修了同一个设备
                List<String> startTimeList = new ArrayList<>();
                //一、查询故障时间
                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()));
                            //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);
                        }
                        //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);
                            //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);
                        }
                    }
                    //二、查询修复时间
                    //查询报修单是否已领取并开工
                    List<RepairOrder> repairOrderList = this.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());
                                int flag = 0;
                                if(CollectionUtils.isNotEmpty(startTimeList)){
                                    for(String faultTime : startTimeList){
                                        if(faultTime.equals(sdf.format(repairOrderList.get(0).getActualStartTime()))){
                                            flag = 1;
                                        }
                                    }
                                }
                                if(flag == 0){
                                    count++;
                                    startTimeList.add(sdf.format(repairOrderList.get(0).getActualStartTime()));
                                }
                                //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);
                                int flag = 0;
                                if(CollectionUtils.isNotEmpty(startTimeList)){
                                    for(String faultTime : startTimeList){
                                        if(faultTime.equals(sdf.format(repairOrderList.get(0).getActualStartTime()))){
                                            flag = 1;
                                        }
                                    }
                                }
                                if(flag == 0){
                                    count++;
                                    startTimeList.add(sdf.format(repairOrderList.get(0).getActualStartTime()));
                                }
                            }
                            //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);
                                int flag = 0;
                                if(CollectionUtils.isNotEmpty(startTimeList)){
                                    for(String faultTime : startTimeList){
                                        if(faultTime.equals(sdf.format(repairOrderList.get(0).getActualStartTime()))){
                                            flag = 1;
                                        }
                                    }
                                }
                                if(flag == 0){
                                    count++;
                                    startTimeList.add(sdf.format(repairOrderList.get(0).getActualStartTime()));
                                }
                                //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);
                                int flag = 0;
                                if(CollectionUtils.isNotEmpty(startTimeList)){
                                    for(String faultTime : startTimeList){
                                        if(faultTime.equals(sdf.format(repairOrderList.get(0).getActualStartTime()))){
                                            flag = 1;
                                        }
                                    }
                                }
                                if(flag == 0){
                                    count++;
                                    startTimeList.add(sdf.format(repairOrderList.get(0).getActualStartTime()));
                                }
                            }
                        }
                    }
                }
                BigDecimal availability = new BigDecimal(countA).multiply(new BigDecimal(days)).subtract(new BigDecimal(count)).multiply(new BigDecimal(100)).divide(new BigDecimal(countA).multiply(new BigDecimal(days)),2,BigDecimal.ROUND_HALF_EVEN);
                equipmentAvailabilityVo.setMonth(month);
                equipmentAvailabilityVo.setCountA(countA);
                equipmentAvailabilityVo.setFaultNumber(String.valueOf(count));
                equipmentAvailabilityVo.setFaultDuration(equipmentFaultTime);
                equipmentAvailabilityVo.setAvailability(availability +"%");
            }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
@@ -27,7 +27,7 @@
    /**月份*/
    private String month;
    /**A类设备台数*/
    private Integer countA;
    private int countA;
    /**故障时间*/
    private BigDecimal faultDuration;