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