package com.qianwen.smartman.modules.mdc.utils; import cn.hutool.core.util.NumberUtil; import java.util.List; import java.util.stream.Collectors; import com.qianwen.smartman.common.constant.MdcConstant; import com.qianwen.core.tool.utils.Func; import com.qianwen.smartman.modules.mdc.entity.SuperAggregateState; import com.qianwen.smartman.modules.mdc.enums.OpenTypeEnums; import com.qianwen.smartman.modules.mdc.enums.ProductivityTypeEnum; import com.qianwen.smartman.modules.mdc.enums.RpsTypeEnum; /** * 效率计算 */ public class EifficiencyUtils { public static Double openShiftTypeCalculationResults(List superAggregateStates, ProductivityTypeEnum productivityType) { Double v; switch (productivityType) { case RUNNING: v = calculationRunning(FilterOffUtils.filterOffDay(superAggregateStates, OpenTypeEnums.RUNNING)); break; case ALARM: v = calculationAlarm(FilterOffUtils.filterOffDay(superAggregateStates, OpenTypeEnums.ALARM)); break; default: v = calculationOee(FilterOffUtils.filterOffDay(superAggregateStates, OpenTypeEnums.OEE)); break; } return v; } public static Double calculationResults(List superAggregateStates, ProductivityTypeEnum productivityType) { Double v; switch (productivityType) { case RUNNING: v = calculationRunning(superAggregateStates); break; case ALARM: v = calculationAlarm(superAggregateStates); break; default: v = calculationOee(superAggregateStates); break; } return v; } /** * 计算运行率? * @param originalData * @return */ public static Double calculationRunning(List originalData) { List originalData2 = FilterOffUtils.filterOffDay(originalData, OpenTypeEnums.RUNNING); double result = 0.0d; if (Func.isNotEmpty(originalData2)) { long sum = originalData2.stream().mapToLong((v0) -> { return v0.getDurationCollect(); }).sum(); double running = originalData2.stream().filter(e -> { return e.getRps().equals(Integer.valueOf(RpsTypeEnum.T1.getType())); }).mapToDouble((v0) -> { return v0.getDurationCollect(); }).sum(); result = !new Long("0").equals(Long.valueOf(sum)) ? Double.parseDouble(NumberUtil.decimalFormat(MdcConstant.RATE_FORMAT, running / sum)) : 0.0d; } return Double.valueOf(result); } /** * 计算报警率 * @param originalData * @return */ public static Double calculationAlarm(List originalData) { List originalData2 = FilterOffUtils.filterOffDay(originalData, OpenTypeEnums.ALARM); double result = 0.0d; if (Func.isNotEmpty(originalData2)) { //总时间 double sum = originalData2.stream().mapToDouble((v0) -> { return v0.getDurationCollect(); }).sum(); double running = originalData2.stream().filter(e -> e.getRps().equals(4)).collect(Collectors.toList()).stream().mapToDouble(SuperAggregateState::getDurationCollect).sum(); /* double running = ((List) originalData2.stream().filter(e -> { return e.getRps().equals(4); }).collect(Collectors.toList())).stream().mapToDouble((v0) -> { return v0.getDurationCollect(); }).sum();*/ result = sum != 0.0d ? Double.parseDouble(NumberUtil.decimalFormat(MdcConstant.RATE_FORMAT, running / sum)) : 0.0d; } return Double.valueOf(result); } /** * 计算OEE稼动率 * @param originalData * @return */ public static Double calculationOee(List originalData) { List originalData2 = FilterOffUtils.filterOffDay(originalData, OpenTypeEnums.OEE); double result = 0.0d; if (Func.isNotEmpty(originalData2)) { long sum = originalData2.stream().mapToLong((v0) -> { return v0.getDurationCollect(); }).sum(); double running = originalData2.stream().filter(e -> { return MdcConstant.IN_PLAN.equals(e.getIsPlan()); }).mapToDouble((v0) -> { return v0.getDurationCollect(); }).sum(); result = !new Long("0").equals(Long.valueOf(sum)) ? Double.parseDouble(NumberUtil.decimalFormat(MdcConstant.RATE_FORMAT, running / sum)) : 0.0d; } return Double.valueOf(result); } }