package org.jeecg.modules.screen.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.jeecg.common.constant.CommonConstant; import org.jeecg.modules.mdc.dto.MdcEfficiencyDto; import org.jeecg.modules.mdcJc.entity.MdcProductDayschedule; import org.jeecg.modules.mdcJc.service.IMdcProductDayScheduleService; import org.jeecg.modules.screen.dto.*; import org.jeecg.modules.screen.mapper.MdcLargeScreenMapper; import org.jeecg.modules.screen.service.MdcLargeScreenService; import org.jeecg.modules.system.entity.MdcProduction; import org.jeecg.modules.system.service.IMdcProductionService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; import java.util.ArrayList; import java.util.List; /** * @author Lius * @date 2024/8/20 11:36 */ @Service public class MdcLargeScreenServiceImpl implements MdcLargeScreenService { @Resource private IMdcProductDayScheduleService mdcProductDayScheduleService; @Resource private MdcLargeScreenMapper mdcLargeScreenMapper; private final String yesterday = LocalDate.now().plusDays(-1).toString().replaceAll("-", ""); private final String today = LocalDate.now().toString(); @Resource private IMdcProductionService mdcProductionService; /** * 昨日概况(产品合格率 设备利用率 计划完成率) * * @return */ @Override public YesterdayOverviewDto yesterdayOverview() { YesterdayOverviewDto yesterdayOverviewDto = new YesterdayOverviewDto(); MdcProductDayschedule mdcProductDayschedule = mdcProductDayScheduleService.findYesterdayData(); if (mdcProductDayschedule != null) { // 产品合格率 yesterdayOverviewDto.setPassRate(new BigDecimal(mdcProductDayschedule.getQualifiedCount()).divide(new BigDecimal(mdcProductDayschedule.getCompletionCount()), 0, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); // 计划完成率 yesterdayOverviewDto.setPlanCompleteRate(new BigDecimal(mdcProductDayschedule.getCompletionCount()).divide(new BigDecimal(mdcProductDayschedule.getPlanCount()), 0, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); } // 设备利用率 // String date = LocalDate.now().plusDays(-1).toString().replaceAll("-", ""); BigDecimal equipmentCount = mdcLargeScreenMapper.findEquipmentCount(yesterday); BigDecimal processCount = mdcLargeScreenMapper.findYesterdayProcessCount(yesterday); BigDecimal utilizationRate = BigDecimal.ZERO; if (equipmentCount != null && processCount != null) { utilizationRate = processCount.divide(new BigDecimal("86400").multiply(equipmentCount), 0, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP); } yesterdayOverviewDto.setUtilizationRate(utilizationRate); return yesterdayOverviewDto; } /** * 今日生产进度 * * @return */ @Override public List todayProductionSchedule() { return mdcLargeScreenMapper.todayProductionSchedule(today); } /** * 今日产品合格率 * * @return */ @Override public List todayProductionPassRate() { List list = mdcLargeScreenMapper.todayProductionPassRate(today); List result = new ArrayList<>(); if (list != null && !list.isEmpty()) { for (MdcProductDayschedule mdcProductDayschedule : list) { TodayProductionPassRateDto todayProductionPassRateDto = new TodayProductionPassRateDto(); todayProductionPassRateDto.setProductionName(mdcProductDayschedule.getProductName()); if (mdcProductDayschedule.getCompletionCount() != 0) { todayProductionPassRateDto.setPassRate(new BigDecimal(mdcProductDayschedule.getQualifiedCount()).divide(new BigDecimal(mdcProductDayschedule.getCompletionCount()), 0, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); } result.add(todayProductionPassRateDto); } } return result; } /** * 今日班组完成量 * * @return */ @Override public List todayClazzCompletionCount() { return mdcLargeScreenMapper.todayClazzCompletionCount(today); } /** * 今日设备运行效率 * * @return */ @Override public List todayEquipmentRate() { List result = new ArrayList<>(); List mdcEfficiencyDtoList = mdcLargeScreenMapper.efficiencyList(yesterday); if (mdcEfficiencyDtoList != null && !mdcEfficiencyDtoList.isEmpty()) { for (MdcEfficiencyDto mdcEfficiencyDto : mdcEfficiencyDtoList) { EquipmentRateDto equipmentRateDto = new EquipmentRateDto(); equipmentRateDto.setEquipmentId(mdcEfficiencyDto.getEquipmentId()); equipmentRateDto.setEquipmentName(mdcEfficiencyDto.getEquipmentName()); equipmentRateDto.setOpenRate(mdcEfficiencyDto.getOpenRate().multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); equipmentRateDto.setUtilizationRate(mdcEfficiencyDto.getUtilizationRate().multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); if (!(equipmentRateDto.getOpenRate().compareTo(BigDecimal.ZERO) == 0) && !(equipmentRateDto.getUtilizationRate().compareTo(BigDecimal.ZERO) == 0)) { result.add(equipmentRateDto); } } } return result; } /** * 月利用率 * * @return */ @Override public List monthEquipmentUtilizationRate() { List result = new ArrayList<>(); String startDate = LocalDate.now().plusDays(-32).toString().replaceAll("-", ""); List mdcEfficiencyDtoList = mdcLargeScreenMapper.efficiency(startDate, yesterday); if (mdcEfficiencyDtoList != null && !mdcEfficiencyDtoList.isEmpty()) { for (MdcEfficiencyDto mdcEfficiencyDto : mdcEfficiencyDtoList) { MonthEquipmentUtilizationRateDto meu = new MonthEquipmentUtilizationRateDto(); meu.setDate(new StringBuilder(mdcEfficiencyDto.getTheDate().substring(4, 8)).insert(2, "-").toString()); BigDecimal equipmentCount = mdcLargeScreenMapper.findEquipmentCount(yesterday); meu.setUtilizationRate(mdcEfficiencyDto.getProcessLong().divide(equipmentCount.multiply(new BigDecimal("86400")), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); if (!(meu.getUtilizationRate().compareTo(BigDecimal.ZERO) == 0)) { result.add(meu); } } } return result; } @Override public List productionList() { return mdcProductionService.list(new LambdaQueryWrapper().eq(MdcProduction::getOrgType, "3").eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString()).orderByAsc(MdcProduction::getProductionOrder)); } }