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/entity/FaultIntervalTime.java | 17 + lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/FaultIntervalTimeServiceImpl.java | 174 +++++++++++++++++++++ lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/FaultIntervalTimeController.java | 26 +++ lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IFaultIntervalTimeService.java | 6 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IRepairOrderService.java | 3 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/RepairOrderController.java | 16 ++ lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/RepairOrderServiceImpl.java | 185 +++++++++++++++++++++++ lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentAvailabilityVo.java | 38 ++++ 8 files changed, 460 insertions(+), 5 deletions(-) diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/FaultIntervalTimeController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/FaultIntervalTimeController.java index 58abbaf..6e711c3 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/FaultIntervalTimeController.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/FaultIntervalTimeController.java @@ -1,5 +1,6 @@ package org.jeecg.modules.eam.controller; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -12,15 +13,20 @@ import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.modules.eam.entity.FaultIntervalTime; import org.jeecg.modules.eam.service.IFaultIntervalTimeService; +import org.jeecg.modules.eam.vo.EquipmentAvailabilityVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.text.ParseException; import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; - /** +/** * @Description: mom_eam_fault_interval_time * @Author: jeecg-boot * @Date: 2023-08-30 @@ -158,4 +164,22 @@ return super.importExcel(request, response, FaultIntervalTime.class); } + + /** + * 鐢熶骇璁惧骞冲潎鏁呴殰闂撮殧鏃堕棿MTBF + * (璇存槑:璁惧骞冲潎鎶�闅滈棿闅旀湡 (MTBF): 鎸囧湪瑙勫畾鏈熷唴锛岃澶囨棤鏁呴殰宸ヤ綔鏃堕棿鐨勫钩鍧囧�笺�傝澶囩殑骞冲潎鏁呴殰鍚岄殧鏈熸寚鏍囪秺澶уソ锛岃〃鏄庤澶囨棤鏁呴殰杩愯鏃堕棿闀裤�� + * 璁惧骞冲潎鏁呴殰闂撮殧鏈燂紙MTBP锛�=锛堟棩鍘嗘椂闂�-鎬绘晠闅滃仠鏈烘椂闂达級/鎬绘晠闅滄鏁帮級 + * + * @return + */ + @GetMapping("/getMTBF") + public JSONObject getMTBF(@RequestParam Map<String, String> query) throws ParseException { + Map<String,Object> result= new HashMap<>(); + IPage<FaultIntervalTime> pageData = new Page<FaultIntervalTime>(); + List<FaultIntervalTime> list = faultIntervalTimeService.getMTBF(query); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("data",list); + return jsonObject; + } + } 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 9af40e8..a867a9c 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 @@ -1,5 +1,6 @@ package org.jeecg.modules.eam.controller; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -19,6 +20,7 @@ import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.eam.entity.*; import org.jeecg.modules.eam.service.*; +import org.jeecg.modules.eam.vo.EquipmentAvailabilityVo; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; @@ -36,6 +38,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; +import java.text.ParseException; import java.util.*; import java.util.stream.Collectors; @@ -1700,4 +1703,17 @@ repairOrderService.updateById(repairOrder); return Result.OK("鎿嶄綔鎴愬姛"); } + + /** + * 璁惧瀹屽ソ鐜� + * + * @return + */ + @GetMapping("/equipmentAvailability") + public JSONObject equipmentAvailability(@RequestParam Map<String, String> query) throws ParseException { + List<EquipmentAvailabilityVo> list = repairOrderService.equipmentAvailability(query); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("data",list); + return jsonObject; + } } diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/FaultIntervalTime.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/FaultIntervalTime.java index f219d33..30cf1c6 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/FaultIntervalTime.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/FaultIntervalTime.java @@ -4,10 +4,8 @@ import java.io.UnsupportedEncodingException; import java.util.Date; import java.math.BigDecimal; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableLogic; + +import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.format.annotation.DateTimeFormat; @@ -96,4 +94,15 @@ @DateTimeFormat(pattern="yyyy-MM-dd") @ApiModelProperty(value = "updateTime") private Date updateTime; + + @TableField(exist = false) + private String equipmentNum; + @TableField(exist = false) + private String equipmentName; + @TableField(exist = false) + private String equipmentModel; + @TableField(exist = false) + private String userDepart; + + } diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IFaultIntervalTimeService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IFaultIntervalTimeService.java index bdb595b..e201a8b 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IFaultIntervalTimeService.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IFaultIntervalTimeService.java @@ -2,6 +2,11 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.eam.entity.FaultIntervalTime; +import org.jeecg.modules.eam.vo.EquipmentAvailabilityVo; + +import java.text.ParseException; +import java.util.List; +import java.util.Map; /** * @Description: mom_eam_fault_interval_time @@ -11,4 +16,5 @@ */ public interface IFaultIntervalTimeService extends IService<FaultIntervalTime> { + public List<FaultIntervalTime> getMTBF(Map<String, String> query) throws ParseException; } 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 77d0c6b..c418a21 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 @@ -5,8 +5,10 @@ import org.apache.ibatis.annotations.Param; import org.jeecg.modules.eam.entity.RepairOrder; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.eam.vo.EquipmentAvailabilityVo; import java.io.Serializable; +import java.text.ParseException; import java.util.Collection; import java.util.List; import java.util.Map; @@ -47,4 +49,5 @@ IPage<Map<String, Object>> getMaterialSpareList(Integer pageNo, Integer pageSize, Map<String, Object> params); + public List<EquipmentAvailabilityVo> equipmentAvailability(Map<String, String> query) throws ParseException; } 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; + } } 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 07dd294..aebfa46 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 @@ -1,14 +1,21 @@ package org.jeecg.modules.eam.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; 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.modules.eam.entity.Equipment; +import org.jeecg.modules.eam.entity.EquipmentReportRepair; import org.jeecg.modules.eam.entity.RepairOrder; import org.jeecg.modules.eam.entity.RepairOrderDetail; import org.jeecg.modules.eam.mapper.*; +import org.jeecg.modules.eam.service.IEamEquipmentService; +import org.jeecg.modules.eam.service.IEquipmentReportRepairService; import org.jeecg.modules.eam.service.IRepairOrderDetailService; import org.jeecg.modules.eam.service.IRepairOrderService; +import org.jeecg.modules.eam.vo.EquipmentAvailabilityVo; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.mapper.SysUserMapper; import org.springframework.beans.factory.annotation.Autowired; @@ -16,6 +23,9 @@ import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; +import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.*; /** @@ -45,6 +55,10 @@ private EquipmentDocumentMapper equipmentDocumentMapper; @Autowired private SysUserMapper sysUserMapper; + @Autowired + private IEamEquipmentService equipmentService; + @Autowired + private IEquipmentReportRepairService equipmentReportRepairService; @@ -115,5 +129,176 @@ return super.baseMapper.getMaterialSpareList(pageData,num,status); } + @Override + public List<EquipmentAvailabilityVo> equipmentAvailability(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 = ""; + if(StringUtils.isBlank(yearStr)){ + return equipmentAvailabilityVoList; + }else { + 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"; + 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.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"); + 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) throws ParseException { + //鏌ヨA绫昏澶囧彴鏁帮紝鎴鍒�1鏈堝簳 + 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(); + EquipmentAvailabilityVo equipmentAvailabilityVo = new EquipmentAvailabilityVo(); + BigDecimal equipmentFaultTime = new BigDecimal("0"); + int count = 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)){ + //涓�銆佹煡璇㈡晠闅滄椂闂� + 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++; + } + } + } + equipmentAvailabilityVo.setMonth(month); + equipmentAvailabilityVo.setCountA(countA); + equipmentAvailabilityVo.setFaultNumber(String.valueOf(count)); + equipmentAvailabilityVo.setFaultDuration(equipmentFaultTime); + }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 new file mode 100644 index 0000000..32c04ea --- /dev/null +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentAvailabilityVo.java @@ -0,0 +1,38 @@ +package org.jeecg.modules.eam.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecg.common.aspect.annotation.Dict; +import org.jeecg.common.constant.CommonConstant; +import org.jeecg.common.system.base.entity.JeecgEntity; +import org.jeecg.modules.eam.entity.EquipmentUnsealDetail; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecgframework.poi.excel.annotation.ExcelCollection; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @Description: 璁惧瀹屽ソ鐜� + * @Author: cj + * @Date: 2023-11-16 + * @Version: V1.0 + */ +@Data +public class EquipmentAvailabilityVo { + + + /**鏈堜唤*/ + private String month; + /**A绫昏澶囧彴鏁�*/ + private Integer countA; + /**鏁呴殰鏃堕棿*/ + private BigDecimal faultDuration; + + /**鏁呴殰鎬诲彴娆�*/ + private String faultNumber; + /**A绫昏澶囧畬濂界巼*/ + private String availability; +} -- Gitblit v1.9.3