From a4e554b7e6c5b98e728f96be80a12b0b04eebd48 Mon Sep 17 00:00:00 2001 From: cuijian <cuijian@xalxzn.com> Date: 星期三, 22 十一月 2023 19:10:28 +0800 Subject: [PATCH] 设备完好率、设备开动率报表逻辑开发 --- lxzn-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java | 7 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IRepairOrderService.java | 2 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/RepairOrderController.java | 13 + lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/RepairOrderServiceImpl.java | 373 ++++++++++++++++++++++++++++++++++++++++++++++++++--- lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentAvailabilityVo.java | 2 5 files changed, 373 insertions(+), 24 deletions(-) diff --git a/lxzn-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java b/lxzn-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java index 2979abf..c5c36a4 100644 --- a/lxzn-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java +++ b/lxzn-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java @@ -137,7 +137,12 @@ filterChainDefinitionMap.put("/jmreport/**", "anon"); filterChainDefinitionMap.put("/**/*.js.map", "anon"); filterChainDefinitionMap.put("/**/*.css.map", "anon"); - + //璁惧瀹屽ソ鐜囨姤琛ㄦ帓闄� + filterChainDefinitionMap.put("/eam/repairOrder/equipmentAvailability", "anon"); + //鐢熶骇鏁呴殰闂撮殧鏃堕棿鎶ヨ〃鎺掗櫎 + filterChainDefinitionMap.put("/eam/faultIntervalTime/getMTBF", "anon"); + //璁惧鍙紑鍔ㄧ巼鎶ヨ〃鎺掗櫎 + filterChainDefinitionMap.put("/eam/repairOrder/getStartRate", "anon"); //澶у睆妯℃澘渚嬪瓙 filterChainDefinitionMap.put("/test/bigScreen/**", "anon"); filterChainDefinitionMap.put("/bigscreen/template1/**", "anon"); diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/RepairOrderController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/RepairOrderController.java index a867a9c..fed8a69 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/RepairOrderController.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/RepairOrderController.java @@ -1716,4 +1716,17 @@ jsonObject.put("data",list); return jsonObject; } + + /** + * 璁惧鍙紑鍔ㄧ巼 + * + * @return + */ + @GetMapping("/getStartRate") + public JSONObject getStartRate(@RequestParam Map<String, String> query) throws ParseException { + List<EquipmentAvailabilityVo> list = repairOrderService.getStartRate(query); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("data",list); + return jsonObject; + } } diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IRepairOrderService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IRepairOrderService.java index c418a21..744c7eb 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IRepairOrderService.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IRepairOrderService.java @@ -50,4 +50,6 @@ IPage<Map<String, Object>> getMaterialSpareList(Integer pageNo, Integer pageSize, Map<String, Object> params); public List<EquipmentAvailabilityVo> equipmentAvailability(Map<String, String> query) throws ParseException; + + public List<EquipmentAvailabilityVo> getStartRate(Map<String, String> query) throws ParseException; } 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; diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentAvailabilityVo.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentAvailabilityVo.java index 32c04ea..7647593 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentAvailabilityVo.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentAvailabilityVo.java @@ -27,7 +27,7 @@ /**鏈堜唤*/ private String month; /**A绫昏澶囧彴鏁�*/ - private Integer countA; + private int countA; /**鏁呴殰鏃堕棿*/ private BigDecimal faultDuration; -- Gitblit v1.9.3