|
|
|
@ -24,8 +24,109 @@ public class H5ApiServiceImpl implements H5ApiService {
|
|
|
|
|
//查询当天的生产情况
|
|
|
|
|
H5 h5=new H5();
|
|
|
|
|
h5.setFeedbackTime(workTime);
|
|
|
|
|
//母单报工信息
|
|
|
|
|
//报工信息
|
|
|
|
|
List<H5> h5List=h5ApiMapper.selectMesLineProdceList(h5);
|
|
|
|
|
return h5List;
|
|
|
|
|
//报工信息处理
|
|
|
|
|
//母单报工数据
|
|
|
|
|
List<H5> filteredList = h5List.stream()
|
|
|
|
|
.filter(h5s -> "0".equals(h5s.getParentOrder()))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
//子单报工数据
|
|
|
|
|
List<H5> filteredLists = h5List.stream()
|
|
|
|
|
.filter(h5s -> !"0".equals(h5s.getParentOrder()))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
// 按照 workOrderCode 分组,并计算各个字段的统计值
|
|
|
|
|
List<H5> 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<H5> 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<String, H5> 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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|