package org.jeecg.modules.mdc.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
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.math.BigDecimal;
|
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);
|
}
|
}
|
if (vo.getEquipmentIdList().isEmpty()) {
|
vo.setEquipmentIdList(equipmentIds);
|
}
|
|
// 查询利用率数据
|
List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo);
|
// 利用率等级
|
List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
|
|
//封装结果
|
List<MdcEquipment> equipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<MdcEquipment>().in(MdcEquipment::getEquipmentId, vo.getEquipmentIdList()));
|
|
List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime()));
|
|
for (MdcEquipment mdcEquipment : equipmentList) {
|
MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
|
mdcEfficiencyListDto.setEquipmentId(mdcEquipment.getEquipmentId());
|
mdcEfficiencyListDto.setEquipmentName(mdcEquipment.getEquipmentName());
|
mdcEfficiencyListDto.setEquipmentType(mdcEquipment.getEquipmentType());
|
List<MdcEfficiencyResultDto> list = new ArrayList<>();
|
for (String date : dates) {
|
list.add(this.efficiencyRate(efficiencyList, date, mdcEquipment, mdcUtilizationRateList));
|
}
|
mdcEfficiencyListDto.setDataList(list);
|
listDtos.add(mdcEfficiencyListDto);
|
}
|
|
result.setMdcEfficiencyList(listDtos);
|
result.setDates(dates);
|
|
return result;
|
}
|
|
@Override
|
public MdcEfficiencyVo shiftEfficiencyList(String userId, MdcEfficiencyReportQueryVo vo) {
|
return null;
|
}
|
|
private MdcEfficiencyResultDto efficiencyRate(List<MdcEfficiencyDto> efficiencyList, String date, MdcEquipment mdcEquipment, List<MdcUtilizationRate> mdcUtilizationRateList) {
|
MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto();
|
if (efficiencyList != null && !efficiencyList.isEmpty()) {
|
for (MdcEfficiencyDto efficiencyDto : efficiencyList) {
|
if (date.equals(efficiencyDto.getTheDate()) && efficiencyDto.getEquipmentId().equals(mdcEquipment.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());
|
}
|
}
|
|
}
|
}
|
} else {
|
mdcEfficiencyResultDto.setTheDate(date);
|
mdcEfficiencyResultDto.setProcessLong(new BigDecimal("0"));
|
mdcEfficiencyResultDto.setUtilizationRate(new BigDecimal("0"));
|
mdcEfficiencyResultDto.setStartRate(new BigDecimal("0"));
|
mdcEfficiencyResultDto.setStartRate(new BigDecimal("0"));
|
mdcEfficiencyResultDto.setOpenRate(new BigDecimal("0"));
|
mdcEfficiencyResultDto.setOpenLong(new BigDecimal("0"));
|
mdcEfficiencyResultDto.setWaitLong(new BigDecimal("0"));
|
mdcEfficiencyResultDto.setCloseLong(new BigDecimal("0"));
|
for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
|
if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
|
mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
|
}
|
}
|
}
|
|
return mdcEfficiencyResultDto;
|
}
|
|
}
|