| | |
| | | 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.apache.shiro.SecurityUtils; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.system.vo.LoginUser; |
| | | 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.entity.SysUser; |
| | | import org.jeecg.modules.system.service.ISysDepartService; |
| | | import org.jeecg.modules.system.service.ISysUserService; |
| | | 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 |
| | |
| | | @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; |
| | | @Autowired |
| | | private ISysUserService sysUserService; |
| | | |
| | | @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(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; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getEquipmentMTBF(Map<String, Object> params) { |
| | | return this.baseMapper.getEquipmentMTBF(params); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getMTBFTotalAvailableTime(Map<String, Object> params) { |
| | | return this.baseMapper.getMTBFTotalAvailableTime(params); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getEquipmentList(Map<String, Object> params) { |
| | | // LoginUser user= (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
| | | // SysUser sysUser = sysUserService.getById(user.getId()); |
| | | // String areaId = sysUser.getAreaId(); |
| | | // List<String> workCenterIds = null; |
| | | // if(StringUtils.isNotBlank(areaId)){ |
| | | // String[] split = areaId.split(","); |
| | | // workCenterIds = Arrays.asList(split); |
| | | // params.put("workCenterIds",workCenterIds); |
| | | // } |
| | | return this.baseMapper.getEquipmentList(params); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getCenterEquipmentMTBF(Map<String, Object> params) { |
| | | return this.baseMapper.getCenterEquipmentMTBF(params); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getCenterMTBFTotalAvailableTime(Map<String, Object> params) { |
| | | return this.baseMapper.getCenterMTBFTotalAvailableTime(params); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getWorkCenterList(Map<String, Object> params) { |
| | | return this.baseMapper.getWorkCenterList(params); |
| | | } |
| | | } |