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.common.util.DateUtils;
|
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;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.io.Serializable;
|
import java.math.BigDecimal;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.time.YearMonth;
|
import java.util.*;
|
|
/**
|
* @Description: 维修工单
|
* @Author: jeecg-boot
|
* @Date: 2023-04-25
|
* @Version: V1.0
|
*/
|
@Service
|
public class RepairOrderServiceImpl extends ServiceImpl<RepairOrderMapper, RepairOrder> implements IRepairOrderService {
|
|
@Autowired
|
private RepairOrderMapper repairOrderMapper;
|
@Autowired
|
private RepairOrderDetailMapper repairOrderDetailMapper;
|
@Autowired
|
private RepairOrderRiskPreventionMapper repairOrderRiskPreventionMapper;
|
@Autowired
|
private RepairOrderFaultAnalysisMapper repairOrderFaultAnalysisMapper;
|
@Autowired
|
private RepairOrderPlanMaterialMapper repairOrderPlanMaterialMapper;
|
@Autowired
|
private RepairOrderActualMaterialMapper repairOrderActualMaterialMapper;
|
@Autowired
|
private RepairOrderActualWorkHoursMapper repairOrderActualWorkHoursMapper;
|
@Autowired
|
private EquipmentDocumentMapper equipmentDocumentMapper;
|
@Autowired
|
private SysUserMapper sysUserMapper;
|
@Autowired
|
private IEamEquipmentService equipmentService;
|
@Autowired
|
private IEquipmentReportRepairService equipmentReportRepairService;
|
|
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void delMain(String id) {
|
repairOrderDetailMapper.deleteByMainId(id);
|
repairOrderRiskPreventionMapper.deleteByMainId(id);
|
repairOrderFaultAnalysisMapper.deleteByMainId(id);
|
repairOrderPlanMaterialMapper.deleteByMainId(id);
|
repairOrderActualMaterialMapper.deleteByMainId(id);
|
repairOrderActualWorkHoursMapper.deleteByMainId(id);
|
equipmentDocumentMapper.deleteByMainId(id);
|
repairOrderMapper.deleteById(id);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void delBatchMain(Collection<? extends Serializable> idList) {
|
for(Serializable id:idList) {
|
repairOrderDetailMapper.deleteByMainId(id.toString());
|
repairOrderRiskPreventionMapper.deleteByMainId(id.toString());
|
repairOrderFaultAnalysisMapper.deleteByMainId(id.toString());
|
repairOrderPlanMaterialMapper.deleteByMainId(id.toString());
|
repairOrderActualMaterialMapper.deleteByMainId(id.toString());
|
repairOrderActualWorkHoursMapper.deleteByMainId(id.toString());
|
equipmentDocumentMapper.deleteByMainId(id.toString());
|
repairOrderMapper.deleteById(id);
|
}
|
}
|
|
@Override
|
public Page<RepairOrder> getRepairOrderList(Page<RepairOrder> page, RepairOrder repairOrder) {
|
if(StringUtils.isNotBlank(repairOrder.getUserId())){
|
SysUser sysUser = sysUserMapper.selectById(repairOrder.getUserId());
|
repairOrder.setTeamId(sysUser.getTeamId());
|
}else{
|
repairOrder.setTeamId("");
|
}
|
List<String> equipNums = new ArrayList<>();
|
if(StringUtils.isNotBlank(repairOrder.getNums())){
|
equipNums = Arrays.asList(repairOrder.getNums().trim().split(","));
|
}
|
return page.setRecords(baseMapper.getRepairOrderList(page,repairOrder.getId(),repairOrder.getNum(),repairOrder.getEquipmentNum(),repairOrder.getEquipmentName(),repairOrder.getStatus(),repairOrder.getRepairOrderType(),repairOrder.getEquipmentCategoryId(),repairOrder.getFactoryModelId(),repairOrder.getSpecificEquipment(),repairOrder.getTeamId(),equipNums,repairOrder.getRepairOrderUda1()));
|
}
|
|
@Override
|
public IPage<Map<String, Object>> getUserTeam(Integer pageNo, Integer pageSize, Map<String, Object> params) {
|
IPage<Map> pageData = new Page<Map>(pageNo, pageSize);
|
String realname = null;
|
if (params.get("realname")!=null){
|
realname = String.valueOf(params.get("realname"));
|
}
|
return super.baseMapper.getUserTeam(pageData,realname);
|
}
|
|
@Override
|
public IPage<Map<String, Object>> getMaterialSpareList(Integer pageNo, Integer pageSize, Map<String, Object> params) {
|
IPage<Map> pageData = new Page<Map>(pageNo, pageSize);
|
String num = null;
|
String status = null;
|
if (params.get("num")!=null){
|
num = String.valueOf(params.get("num"));
|
}
|
if (params.get("status")!=null){
|
status = String.valueOf(params.get("status"));
|
}
|
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 = "";
|
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.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);
|
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;
|
}
|
|
@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();
|
//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、如果报修时间不为空,并且在查询时间段内
|
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()));
|
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);
|
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 ){
|
//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);
|
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);
|
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%");
|
}
|
}
|
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;
|
}
|
|
|
}
|