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 listDtos = new ArrayList<>(); List 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 efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo); // 利用率等级 List mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl"); //封装结果 List equipmentList = efficiencyList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MdcEfficiencyDto::getEquipmentId))), ArrayList::new)); List 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 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 efficiencyList, String date, MdcEfficiencyDto mdcEfficiencyDto, List 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; } }