package org.jeecg.modules.mdc.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import net.sf.saxon.expr.Component;
|
import org.apache.commons.lang3.StringUtils;
|
import org.jeecg.modules.mdc.dto.MdcEfficiencyDto;
|
import org.jeecg.modules.mdc.dto.MdcEfficiencyListDto;
|
import org.jeecg.modules.mdc.dto.MdcEfficiencyResultDto;
|
import org.jeecg.modules.mdc.entity.MdcEquipment;
|
import org.jeecg.modules.mdc.entity.MdcUtilizationRate;
|
import org.jeecg.modules.mdc.mapper.MdcEfficiencyReportMapper;
|
import org.jeecg.modules.mdc.service.IMdcEquipmentService;
|
import org.jeecg.modules.mdc.service.IMdcUtilizationRateService;
|
import org.jeecg.modules.mdc.service.MdcEfficiencyReportService;
|
import org.jeecg.modules.mdc.util.DateUtils;
|
import org.jeecg.modules.mdc.vo.MdcEfficiencyReportQueryVo;
|
import org.jeecg.modules.mdc.vo.MdcEfficiencyVo;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author: LiuS
|
* @create: 2023-06-16 09:52
|
*/
|
@Service
|
public class MdcEfficiencyReportServiceImpl implements MdcEfficiencyReportService {
|
|
@Resource
|
private IMdcEquipmentService mdcEquipmentService;
|
|
@Resource
|
private MdcEfficiencyReportMapper mdcEfficiencyReportMapper;
|
|
@Resource
|
private IMdcUtilizationRateService mdcUtilizationRateService;
|
|
/**
|
* 利用率报表
|
*
|
* @param userId
|
* @param vo
|
* @return
|
*/
|
@Override
|
public MdcEfficiencyVo efficiencyList(String userId, MdcEfficiencyReportQueryVo vo) {
|
MdcEfficiencyVo result = new MdcEfficiencyVo();
|
List<MdcEfficiencyListDto> listDtos = new ArrayList<>();
|
List<String> equipmentIds = new ArrayList<>();
|
if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) {
|
if ("2".equals(vo.getTypeTree())) {
|
// 部门层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId());
|
} else {
|
// 产线层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId());
|
}
|
} else if (StringUtils.isNotEmpty(vo.getEquipmentId())) {
|
// 单台设备信息
|
vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId()));
|
} else {
|
// 查询用户拥有的所有设备信息
|
if ("2".equals(vo.getTypeTree())) {
|
// 部门层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
|
} else {
|
// 产线层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
|
}
|
}
|
vo.setEquipmentIdList(equipmentIds);
|
|
// 查询利用率数据
|
List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo);
|
// 利用率等级
|
List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
|
|
//封装结果
|
List<MdcEfficiencyDto> equipmentList = efficiencyList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MdcEfficiencyDto::getEquipmentId))), ArrayList::new));
|
|
List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime()));
|
|
for (MdcEfficiencyDto mdcEfficiencyDto : equipmentList) {
|
MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
|
mdcEfficiencyListDto.setEquipmentId(mdcEfficiencyDto.getEquipmentId());
|
mdcEfficiencyListDto.setEquipmentName(mdcEfficiencyDto.getEquipmentName());
|
mdcEfficiencyListDto.setEquipmentType(mdcEfficiencyDto.getEquipmentType());
|
List<MdcEfficiencyResultDto> list = new ArrayList<>();
|
for (String date : dates) {
|
list.add(this.efficiencyRate(efficiencyList, date, mdcEfficiencyDto, mdcUtilizationRateList));
|
}
|
mdcEfficiencyListDto.setList(list);
|
listDtos.add(mdcEfficiencyListDto);
|
}
|
|
result.setLists(listDtos);
|
result.setDates(dates);
|
|
return result;
|
}
|
|
private MdcEfficiencyResultDto efficiencyRate(List<MdcEfficiencyDto> efficiencyList, String date, MdcEfficiencyDto mdcEfficiencyDto, List<MdcUtilizationRate> mdcUtilizationRateList) {
|
MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto();
|
for (MdcEfficiencyDto efficiencyDto : efficiencyList) {
|
if (date.equals(efficiencyDto.getTheDate()) && efficiencyDto.getEquipmentId().equals(mdcEfficiencyDto.getEquipmentId())) {
|
mdcEfficiencyResultDto.setTheDate(efficiencyDto.getTheDate());
|
mdcEfficiencyResultDto.setProcessLong(efficiencyDto.getProcessLong());
|
mdcEfficiencyResultDto.setUtilizationRate(efficiencyDto.getUtilizationRate());
|
mdcEfficiencyResultDto.setStartRate(efficiencyDto.getStartRate());
|
mdcEfficiencyResultDto.setStartRate(efficiencyDto.getStartRate());
|
mdcEfficiencyResultDto.setOpenRate(efficiencyDto.getOpenRate());
|
mdcEfficiencyResultDto.setOpenLong(efficiencyDto.getOpenLong());
|
mdcEfficiencyResultDto.setWaitLong(efficiencyDto.getWaitLong());
|
mdcEfficiencyResultDto.setCloseLong(efficiencyDto.getCloseLong());
|
for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
|
if (efficiencyDto.getUtilizationRate().longValue() * 100 > mdcUtilizationRate.getMinimumRange() && efficiencyDto.getUtilizationRate().longValue() * 100 <= mdcUtilizationRate.getMaximumRange()) {
|
mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
|
}
|
}
|
|
}
|
}
|
return mdcEfficiencyResultDto;
|
}
|
|
}
|