From a4e554b7e6c5b98e728f96be80a12b0b04eebd48 Mon Sep 17 00:00:00 2001
From: cuijian <cuijian@xalxzn.com>
Date: 星期三, 22 十一月 2023 19:10:28 +0800
Subject: [PATCH] 设备完好率、设备开动率报表逻辑开发

---
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/RepairOrderServiceImpl.java |  373 ++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 351 insertions(+), 22 deletions(-)

diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/RepairOrderServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/RepairOrderServiceImpl.java
index aebfa46..45d9d2c 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/RepairOrderServiceImpl.java
+++ b/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 = "";
-		if(StringUtils.isBlank(yearStr)){
+        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()));
-							count++;
+							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);
-							count++;
+							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);
-							count++;
+							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);
-							count++;
+							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;

--
Gitblit v1.9.3