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.common.util.DateUtils; 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; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.YearMonth; import java.util.*; /** * @Description: 维修工单 * @Author: jeecg-boot * @Date: 2023-04-25 * @Version: V1.0 */ @Service public class RepairOrderServiceImpl extends ServiceImpl implements IRepairOrderService { @Autowired private RepairOrderMapper repairOrderMapper; @Autowired private RepairOrderDetailMapper repairOrderDetailMapper; @Autowired private RepairOrderRiskPreventionMapper repairOrderRiskPreventionMapper; @Autowired private RepairOrderFaultAnalysisMapper repairOrderFaultAnalysisMapper; @Autowired private RepairOrderPlanMaterialMapper repairOrderPlanMaterialMapper; @Autowired private RepairOrderActualMaterialMapper repairOrderActualMaterialMapper; @Autowired private RepairOrderActualWorkHoursMapper repairOrderActualWorkHoursMapper; @Autowired private EquipmentDocumentMapper equipmentDocumentMapper; @Autowired private SysUserMapper sysUserMapper; @Autowired private IEamEquipmentService equipmentService; @Autowired private IEquipmentReportRepairService equipmentReportRepairService; @Override @Transactional(rollbackFor = Exception.class) public void delMain(String id) { repairOrderDetailMapper.deleteByMainId(id); repairOrderRiskPreventionMapper.deleteByMainId(id); repairOrderFaultAnalysisMapper.deleteByMainId(id); repairOrderPlanMaterialMapper.deleteByMainId(id); repairOrderActualMaterialMapper.deleteByMainId(id); repairOrderActualWorkHoursMapper.deleteByMainId(id); equipmentDocumentMapper.deleteByMainId(id); repairOrderMapper.deleteById(id); } @Override @Transactional(rollbackFor = Exception.class) public void delBatchMain(Collection idList) { for(Serializable id:idList) { repairOrderDetailMapper.deleteByMainId(id.toString()); repairOrderRiskPreventionMapper.deleteByMainId(id.toString()); repairOrderFaultAnalysisMapper.deleteByMainId(id.toString()); repairOrderPlanMaterialMapper.deleteByMainId(id.toString()); repairOrderActualMaterialMapper.deleteByMainId(id.toString()); repairOrderActualWorkHoursMapper.deleteByMainId(id.toString()); equipmentDocumentMapper.deleteByMainId(id.toString()); repairOrderMapper.deleteById(id); } } @Override public Page getRepairOrderList(Page page, RepairOrder repairOrder) { if(StringUtils.isNotBlank(repairOrder.getUserId())){ SysUser sysUser = sysUserMapper.selectById(repairOrder.getUserId()); repairOrder.setTeamId(sysUser.getTeamId()); }else{ repairOrder.setTeamId(""); } List equipNums = new ArrayList<>(); if(StringUtils.isNotBlank(repairOrder.getNums())){ equipNums = Arrays.asList(repairOrder.getNums().trim().split(",")); } return page.setRecords(baseMapper.getRepairOrderList(page,repairOrder.getId(),repairOrder.getNum(),repairOrder.getEquipmentNum(),repairOrder.getEquipmentName(),repairOrder.getStatus(),repairOrder.getRepairOrderType(),repairOrder.getEquipmentCategoryId(),repairOrder.getFactoryModelId(),repairOrder.getSpecificEquipment(),repairOrder.getTeamId(),equipNums,repairOrder.getRepairOrderUda1())); } @Override public IPage> getUserTeam(Integer pageNo, Integer pageSize, Map params) { IPage pageData = new Page(pageNo, pageSize); String realname = null; if (params.get("realname")!=null){ realname = String.valueOf(params.get("realname")); } return super.baseMapper.getUserTeam(pageData,realname); } @Override public IPage> getMaterialSpareList(Integer pageNo, Integer pageSize, Map params) { IPage pageData = new Page(pageNo, pageSize); String num = null; String status = null; if (params.get("num")!=null){ num = String.valueOf(params.get("num")); } if (params.get("status")!=null){ status = String.valueOf(params.get("status")); } return super.baseMapper.getMaterialSpareList(pageData,num,status); } @Override public List equipmentAvailability(Map query) throws ParseException { List 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.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); 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; } @Override public List getStartRate(Map query) throws ParseException { List 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 equipmentList = equipmentService.lambdaQuery().eq(Equipment::getEquipmentImportanceId,"A").eq(Equipment::getDelFlag, CommonConstant.DEL_FLAG_0).lt(Equipment::getAcceptanceCheckDate,endDate).list(); //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 equipmentReportRepairList = equipmentReportRepairService.lambdaQuery().eq(EquipmentReportRepair::getEquipmentId,equipment.getId()) .eq(EquipmentReportRepair::getDelFlag,CommonConstant.DEL_FLAG_0).list(); if(CollectionUtils.isNotEmpty(equipmentReportRepairList)){ //当前设备的故障时间集合,用于判断多次故障是否发生在同一天 List faultTimeList = 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())); 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 ){ //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); 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%"); } } return equipmentAvailabilityVo; } public EquipmentAvailabilityVo getRepairTime(Date startDate,Date endDate,String month,int days) throws ParseException { List 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 equipmentReportRepairList = equipmentReportRepairService.lambdaQuery().eq(EquipmentReportRepair::getEquipmentId,equipment.getId()) .eq(EquipmentReportRepair::getDelFlag,CommonConstant.DEL_FLAG_0).list(); if(CollectionUtils.isNotEmpty(equipmentReportRepairList)){ //当前设备的开工时间集合,用于判断是否在同一天维修了同一个设备 List 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 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; } }