package org.jeecg.modules.eam.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.common.util.UUIDGenerator; import org.jeecg.modules.eam.entity.*; import org.jeecg.modules.eam.mapper.PredictiveWorkPlanSparePartMapper; import org.jeecg.modules.eam.model.MdcEquipmentRunningSectionVo; import org.jeecg.modules.eam.service.IPredictiveWorkOrderService; import org.jeecg.modules.eam.service.IPredictiveWorkPlanService; import org.jeecg.modules.eam.service.IPredictiveWorkPlanSparePartService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; @Service public class PredictiveWorkPlanSparePartServiceImpl extends ServiceImpl implements IPredictiveWorkPlanSparePartService { @Autowired private IPredictiveWorkPlanService predictiveWorkPlanService; @Autowired private IPredictiveWorkOrderService predictiveWorkOrderService; @Override public IPage> pagePredictiveWorkPlanSparePart(Integer pageNo, Integer pageSize, Map params) { IPage pageData = new Page(pageNo, pageSize); return super.getBaseMapper().pagePredictiveWorkPlanSparePart(pageData, params); } // 1.查询配置的 备件触发条件 // 2.获取备件的的实际寿命 设备开机时间 - 换件时间 (设备开机时间信息截止到昨日) // 3.判断实际寿命是否大于控制寿命,并生成维护工单 @Override public void createSparePartWorkPlan() { List predictiveWorkPlanList = predictiveWorkPlanService.listWorkPlan("bjkz"); for (PredictiveWorkPlan predictiveWorkPlan : predictiveWorkPlanList) { List predictiveWorkPlanSparePartList = listPredictiveWorkPlanSparePart(predictiveWorkPlan.getId()); for (PredictiveWorkPlanSparePart predictiveWorkPlanSparePart : predictiveWorkPlanSparePartList) { Date replacementTime = findReplacementTime(predictiveWorkPlanSparePart.getEquipmentId(), predictiveWorkPlanSparePart.getSparePartId()); predictiveWorkPlanSparePart.setReplacementTime(replacementTime); long actualLife = findActualLife(predictiveWorkPlanSparePart.getMdcEquipmentId(), replacementTime); predictiveWorkPlanSparePart.setActualLife(actualLife); if (actualLife > predictiveWorkPlanSparePart.getLifeWarning()) { //1.判断是否生成维护工单, 2.生成维护工单 this.createOrder(predictiveWorkPlan.getId(), predictiveWorkPlan.getEquipmentId(), predictiveWorkPlanSparePart.getId()); } } } } @Override public void removeByWorkPlanId(String predictiveWorkPlanId) { LambdaUpdateChainWrapper lambdaUpdate = this.lambdaUpdate(); lambdaUpdate.eq(PredictiveWorkPlanSparePart::getWorkPlanId, predictiveWorkPlanId); lambdaUpdate.remove(); } @Override public void revise(String oldWorkPlanId, String workPlanId) { LambdaQueryChainWrapper lambdaQuery = this.lambdaQuery(); lambdaQuery.eq(PredictiveWorkPlanSparePart::getWorkPlanId,oldWorkPlanId).eq(PredictiveWorkPlanSparePart::getDelFlag,0); List insertList = lambdaQuery.list(); for(PredictiveWorkPlanSparePart predictiveWorkPlanSparePart:insertList){ predictiveWorkPlanSparePart.setWorkPlanId(workPlanId); predictiveWorkPlanSparePart.setId(UUIDGenerator.generate()); } this.saveBatch(insertList); } //没有对应的维护工单就生成工单 private void createOrder(String workPlanId, String equipmentId, String itemId) { LambdaQueryChainWrapper lambdaQuery = predictiveWorkOrderService.lambdaQuery(); lambdaQuery.eq(PredictiveWorkOrder::getEquipmentId, equipmentId).eq(PredictiveWorkOrder::getItemId, itemId).eq(PredictiveWorkOrder::getWorkPlanId, workPlanId); //已创建 0 已下发 1 未开始 2 执行中 3 lambdaQuery.in(PredictiveWorkOrder::getStatus, Arrays.asList(new String[]{"0", "1", "2", "3"})); lambdaQuery.eq(PredictiveWorkOrder::getDelFlag, 0); List list = lambdaQuery.list(); if (list == null || list.size() == 0) { PredictiveWorkOrder predictiveWorkOrder = new PredictiveWorkOrder(); predictiveWorkOrder.setItemId(itemId); predictiveWorkOrder.setEquipmentId(equipmentId); predictiveWorkOrder.setWorkPlanId(workPlanId); predictiveWorkOrderService.add(predictiveWorkOrder); } } //查询配置的 备件触发条件 public List listPredictiveWorkPlanSparePart(String predictiveWorkPlanId) { return super.getBaseMapper().listPredictiveWorkPlanSparePart(predictiveWorkPlanId); } //最后换件时间 public Date findReplacementTime(String equipmentId, String sparePartId) { List maintenanceOrderActualMaterialList = super.getBaseMapper().listMaintenanceOrderActualMaterial(equipmentId, sparePartId); if (maintenanceOrderActualMaterialList.size() > 0) { return maintenanceOrderActualMaterialList.get(0).getCreateTime(); } return new Date(); } //实际寿命 //1.倒序设备状态 //2.累加设备非关机的时间 当设备状态的开始时间小于换件时间 或者 换件时间介于设备状态的开始时间和结束时间之间的数据后,停止累加 //3.换算单位为小时 public long findActualLife(String mdcEquipmentId, Date replacementTime) { long actualLife = 0l; long replacementTimeLong = replacementTime.getTime(); List mdcEquipmentRunningSectionVoList = super.getBaseMapper().listMdcEquipmentRunningSectionVo(mdcEquipmentId); for (MdcEquipmentRunningSectionVo temp : mdcEquipmentRunningSectionVoList) { if (replacementTimeLong < temp.getStartLong()) { actualLife = actualLife + temp.getDuration(); } else if (replacementTimeLong >= temp.getStartLong() && replacementTimeLong <= temp.getEndLong()) { actualLife = actualLife + (temp.getEndLong() - replacementTimeLong); } else { continue; } } return actualLife / 60 / 60; } }