diff --git a/op-modules/op-mes/src/main/java/com/op/mes/domain/H5.java b/op-modules/op-mes/src/main/java/com/op/mes/domain/H5.java index 3c900f71a..0ac9de68a 100644 --- a/op-modules/op-mes/src/main/java/com/op/mes/domain/H5.java +++ b/op-modules/op-mes/src/main/java/com/op/mes/domain/H5.java @@ -7,13 +7,13 @@ public class H5 { private String category; private String specifications; private int StandardStaffing; - private int actualEmployment; - private String productionDuration; + private Double actualEmployment; + private Double productionDuration; private int planProduction; private int production; private String hourlyProduction; - private String standardEfficiency; - private String actualEfficiency; + private double standardEfficiency; + private double actualEfficiency; private String efficiencyAcRate; private String feedbackTime; private String parentOrder; @@ -91,19 +91,19 @@ public class H5 { StandardStaffing = standardStaffing; } - public int getActualEmployment() { + public Double getActualEmployment() { return actualEmployment; } - public void setActualEmployment(int actualEmployment) { + public void setActualEmployment(Double actualEmployment) { this.actualEmployment = actualEmployment; } - public String getProductionDuration() { + public Double getProductionDuration() { return productionDuration; } - public void setProductionDuration(String productionDuration) { + public void setProductionDuration(Double productionDuration) { this.productionDuration = productionDuration; } @@ -123,19 +123,19 @@ public class H5 { this.hourlyProduction = hourlyProduction; } - public String getStandardEfficiency() { + public double getStandardEfficiency() { return standardEfficiency; } - public void setStandardEfficiency(String standardEfficiency) { + public void setStandardEfficiency(double standardEfficiency) { this.standardEfficiency = standardEfficiency; } - public String getActualEfficiency() { + public double getActualEfficiency() { return actualEfficiency; } - public void setActualEfficiency(String actualEfficiency) { + public void setActualEfficiency(double actualEfficiency) { this.actualEfficiency = actualEfficiency; } diff --git a/op-modules/op-mes/src/main/java/com/op/mes/service/impl/H5ApiServiceImpl.java b/op-modules/op-mes/src/main/java/com/op/mes/service/impl/H5ApiServiceImpl.java index ee937e5a1..2b7fd664c 100644 --- a/op-modules/op-mes/src/main/java/com/op/mes/service/impl/H5ApiServiceImpl.java +++ b/op-modules/op-mes/src/main/java/com/op/mes/service/impl/H5ApiServiceImpl.java @@ -24,8 +24,109 @@ public class H5ApiServiceImpl implements H5ApiService { //查询当天的生产情况 H5 h5=new H5(); h5.setFeedbackTime(workTime); - //母单报工信息 + //报工信息 List
h5List=h5ApiMapper.selectMesLineProdceList(h5); - return h5List; + //报工信息处理 + //母单报工数据 + List
filteredList = h5List.stream() + .filter(h5s -> "0".equals(h5s.getParentOrder())) + .collect(Collectors.toList()); + //子单报工数据 + List
filteredLists = h5List.stream() + .filter(h5s -> !"0".equals(h5s.getParentOrder())) + .collect(Collectors.toList()); + // 按照 workOrderCode 分组,并计算各个字段的统计值 + List
resultList = filteredList.stream() + .collect(Collectors.groupingBy( + H5::getWorkOrderCode, // 按 workOrderCode 分组 + Collectors.collectingAndThen( + Collectors.toList(), + list -> { + double averageStandardStaffing = list.stream() + .collect(Collectors.averagingDouble(H5::getStandardStaffing)); + double averageActualEmployment = list.stream() + .collect(Collectors.averagingDouble(H5::getActualEmployment)); + double totalProductionDuration = list.stream() + .collect(Collectors.summingDouble(H5::getProductionDuration)); + double totalPlanProduction = list.stream() + .collect(Collectors.summingDouble(H5::getPlanProduction)); + double totalProduction = list.stream() + .collect(Collectors.summingDouble(H5::getProduction)); + + H5 resultH5 = new H5(); + resultH5.setWorkOrderCode(list.get(0).getWorkOrderCode()); // 设置 workOrderCode + resultH5.setLineName(list.get(0).getLineName()); + resultH5.setProductName(list.get(0).getProductName()); + resultH5.setCategory(list.get(0).getCategory()); + resultH5.setSpecifications(list.get(0).getSpecifications()); + resultH5.setStandardEfficiency(list.get(0).getStandardEfficiency()); + resultH5.setActualEmployment(averageActualEmployment); + resultH5.setStandardStaffing((int) Math.round(averageStandardStaffing)); // 计算的平均值 + resultH5.setProductionDuration(totalProductionDuration); // 总和 + resultH5.setPlanProduction((int) Math.round(totalPlanProduction)); // 总和 + resultH5.setProduction((int) Math.round(totalProduction)); // 总和 + return resultH5; + } + ) + )) + .values() + .stream() + .collect(Collectors.toList()); + + List
resultLists = filteredLists.stream() + .collect(Collectors.groupingBy( + H5::getWorkOrderCode, // 按 workOrderCode 分组 + Collectors.collectingAndThen( + Collectors.toList(), + list -> { + double averageActualEmployment = list.stream() + .collect(Collectors.averagingDouble(H5::getActualEmployment)); + H5 resultH5 = new H5(); + resultH5.setWorkOrderCode(list.get(0).getWorkOrderCode()); // 设置 workOrderCode + resultH5.setActualEmployment(averageActualEmployment); + resultH5.setParentOrder(list.get(0).getParentOrder()); + return resultH5; + } + ) + )) + .values() + .stream() + .collect(Collectors.toList()); + + // 将 resultLists 转换为 Map,以便快速查找 + Map parentOrderToH5Map = resultLists.stream() + .collect(Collectors.toMap( + H5::getParentOrder, + h5s -> h5s + )); + + // 更新 resultList 中的 actualEmployment + // 更新 resultList 中的 actualEmployment + resultList.forEach(h51 -> { + H5 matchingH52 = parentOrderToH5Map.get(h51.getWorkOrderCode()); + if (matchingH52 != null) { + h51.setActualEmployment(matchingH52.getActualEmployment()); + } + }); + // 更新 actualEfficiency 为百分比形式,保留一位小数 + resultList.forEach(h5a -> { + double production = h5a.getProduction(); + double productionDuration = h5a.getProductionDuration(); + double actualEmployment = h5a.getActualEmployment(); + double standardEfficiency=h5a.getStandardEfficiency(); + // 避免除以零的情况 + if (productionDuration != 0 && actualEmployment != 0) { + double actualEfficiency = production / productionDuration / actualEmployment; + actualEfficiency = Math.round(actualEfficiency * 10.0) / 10.0; + h5a.setActualEfficiency(actualEfficiency); + String efficiencyAcRate = String.format("%.1f%%", (actualEfficiency/standardEfficiency)*100); // 格式化为百分比形式 + h5a.setEfficiencyAcRate(efficiencyAcRate); // 设置百分比形式 + } else { + h5a.setEfficiencyAcRate("0.0%"); // 或者设为其他默认值 + } + }); + + return resultList; } + } diff --git a/op-modules/op-mes/src/main/java/com/op/mes/service/impl/MesReportWorksServiceImpl.java b/op-modules/op-mes/src/main/java/com/op/mes/service/impl/MesReportWorksServiceImpl.java index 3f73bc183..a2a860a71 100644 --- a/op-modules/op-mes/src/main/java/com/op/mes/service/impl/MesReportWorksServiceImpl.java +++ b/op-modules/op-mes/src/main/java/com/op/mes/service/impl/MesReportWorksServiceImpl.java @@ -25,9 +25,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.text.SimpleDateFormat; +import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; @@ -100,7 +99,6 @@ public class MesReportWorksServiceImpl implements IMesReportWorksService { SysNoticeGroup noticeQo = new SysNoticeGroup(); //取模板 noticeQo.setNoticeId(23L); - List notices = mesReportWorkMapper.getNoticesGroup(noticeQo); if(!CollectionUtils.isEmpty(notices)) { List wecharts = new ArrayList<>(); @@ -108,12 +106,20 @@ public class MesReportWorksServiceImpl implements IMesReportWorksService { WechartDTO wechart0 = new WechartDTO(); wechart0.setUserId(noticedto.getWxId()); String contentInfo = noticedto.getNoticeContent(); - contentInfo = contentInfo.replace("${ymd}", DateUtils.getDate()) + // 定义格式化日期的格式 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + + // 获取当前日期 + Calendar calendar = Calendar.getInstance(); + // 将日期设置为前一天 + calendar.add(Calendar.DATE, -1); + Date yesterday = calendar.getTime(); + + // 格式化前一天的日期 + String currentDate = dateFormat.format(yesterday); + contentInfo = contentInfo.replace("${ymd}", currentDate) .replace("${factory}", prowork.getFactoryCode()) .replace("${carName}", prowork.getWorkorderName()); - - Matcher m = p2.matcher(contentInfo); - contentInfo = m.replaceAll(""); wechart0.setText(contentInfo); wecharts.add(wechart0); } diff --git a/op-modules/op-mes/src/main/resources/mapper/mes/H5ApiMapper.xml b/op-modules/op-mes/src/main/resources/mapper/mes/H5ApiMapper.xml index 1008e9e8e..95d89ccc7 100644 --- a/op-modules/op-mes/src/main/resources/mapper/mes/H5ApiMapper.xml +++ b/op-modules/op-mes/src/main/resources/mapper/mes/H5ApiMapper.xml @@ -20,86 +20,30 @@