From eadaad85fc5fed59c34a0145c2f99a1022581458 Mon Sep 17 00:00:00 2001 From: cuijian <cuijian@xalxzn.com> Date: 星期二, 21 十一月 2023 20:57:25 +0800 Subject: [PATCH] 生产时间间隔报表逻辑、设备完好率报表逻辑 --- lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/FaultIntervalTimeServiceImpl.java | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 174 insertions(+), 0 deletions(-) diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/FaultIntervalTimeServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/FaultIntervalTimeServiceImpl.java index 6a9b8ed..c6324fb 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/FaultIntervalTimeServiceImpl.java +++ b/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; + } } -- Gitblit v1.9.3