|
@@ -47,6 +47,8 @@ import org.jeecg.modules.billet.rollOutShipp.service.IRollOutShippService;
|
|
|
import org.jeecg.modules.billet.storageBill.entity.*;
|
|
|
import org.jeecg.modules.billet.storageBill.mapper.StorageBillMapper;
|
|
|
import org.jeecg.modules.billet.storageBill.service.IStorageBillService;
|
|
|
+import org.jeecg.modules.billet.storageBill.vo.OnDutySizeVo;
|
|
|
+import org.jeecg.modules.billet.storageBill.vo.SizeSummary;
|
|
|
import org.jeecg.modules.billet.storageCarLog.entity.StorageCarLog;
|
|
|
import org.jeecg.modules.billet.storageCarLog.service.IStorageCarLogService;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
@@ -1840,6 +1842,230 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
|
|
|
return onDutyDetailStatistics;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public List<OnDutySizeVo> queryOnDutySize(String ccmNo) {
|
|
|
+ List<OnDutySizeVo> list = new ArrayList<>();
|
|
|
+ List<SizeSummary> summaryList = new ArrayList<>();
|
|
|
+ // 从 Redis 获取班次信息
|
|
|
+ String shiftGroup = getShiftInfo(ccmNo, "class:shift:group:%s");
|
|
|
+ String shift = getShiftInfo(ccmNo, "class:shift:%s");
|
|
|
+ // 根据铸机号、缓存中的当前班次,倒序最新一条,获取交班记录中的创建时间
|
|
|
+ LambdaQueryWrapper<BilletHotsendChangeShift> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(BilletHotsendChangeShift::getCcmNo, ccmNo)
|
|
|
+ .eq(BilletHotsendChangeShift::getShift, shift)
|
|
|
+ .eq(BilletHotsendChangeShift::getShiftGroup, shiftGroup)
|
|
|
+ .orderByDesc(BilletHotsendChangeShift::getCreateTime)
|
|
|
+ .last("limit 1");
|
|
|
+ BilletHotsendChangeShift billetHotsendChangeShift = billetHotsendChangeShiftService.getOne(queryWrapper);
|
|
|
+ if (billetHotsendChangeShift == null){
|
|
|
+ log.info("{}{}", "查询当班定尺明细,明细记录为空!", ccmNo + "失败时间:" + new Date());
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 根据铸机号、班组、班别、交班的创建时间,查询棒一符合条件的信息
|
|
|
+ LambdaQueryWrapper<RollClubOneDetails> queryWrapper1 = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper1.eq(RollClubOneDetails::getCcmNo, ccmNo)
|
|
|
+ .eq(RollClubOneDetails::getShift, shift)
|
|
|
+ .eq(RollClubOneDetails::getShiftGroup, shiftGroup)
|
|
|
+ .between(RollClubOneDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
|
|
|
+ List<RollClubOneDetails> list1 = rollClubOneDetailsService.list(queryWrapper1);
|
|
|
+
|
|
|
+ // 根据 size 分组,并统计总支数和总 BlankOutput
|
|
|
+ List<SizeSummary> result1 = list1.stream()
|
|
|
+ .collect(Collectors.groupingBy(RollClubOneDetails::getSize))
|
|
|
+ .entrySet().stream()
|
|
|
+ .map(entry -> {
|
|
|
+ String size = entry.getKey();
|
|
|
+ List<RollClubOneDetails> group = entry.getValue();
|
|
|
+
|
|
|
+ // 统计总支数
|
|
|
+ int totalNums = group.size();
|
|
|
+
|
|
|
+ // 累加 BlankOutput (转换为 BigDecimal)
|
|
|
+ BigDecimal totalBlankOutput = group.stream()
|
|
|
+ .map(RollClubOneDetails::getBlankOutput)
|
|
|
+ .filter(Objects::nonNull) // 过滤 null 值
|
|
|
+ .map(BigDecimal::valueOf) // Double 转 BigDecimal
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ // 返回处理后的分组结果
|
|
|
+ return new SizeSummary(size, totalNums, totalBlankOutput);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ summaryList.addAll(result1);
|
|
|
+
|
|
|
+
|
|
|
+ // 根据铸机号、班组、班别、交班的创建时间,查询棒二符合条件的信息
|
|
|
+ LambdaQueryWrapper<RollClubTwoDetails> queryWrapper2 = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper2.eq(RollClubTwoDetails::getCcmNo, ccmNo)
|
|
|
+ .eq(RollClubTwoDetails::getShift, shift)
|
|
|
+ .eq(RollClubTwoDetails::getShiftGroup, shiftGroup)
|
|
|
+ .between(RollClubTwoDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
|
|
|
+ List<RollClubTwoDetails> list2 = rollClubTwoDetailsService.list(queryWrapper2);
|
|
|
+
|
|
|
+ // 根据 size 分组,并统计总支数和总 BlankOutput
|
|
|
+ List<SizeSummary> result2 = list2.stream()
|
|
|
+ .collect(Collectors.groupingBy(RollClubTwoDetails::getSize))
|
|
|
+ .entrySet().stream()
|
|
|
+ .map(entry -> {
|
|
|
+ String size = entry.getKey();
|
|
|
+ List<RollClubTwoDetails> group = entry.getValue();
|
|
|
+
|
|
|
+ // 统计总支数,如果 stackAddr 不为空,则乘以 4
|
|
|
+ int totalNums = group.stream()
|
|
|
+ .mapToInt(detail -> (detail.getStackAddr() != null && !detail.getStackAddr().isEmpty()) ? 4 : 1)
|
|
|
+ .sum();
|
|
|
+
|
|
|
+ // 累加 BlankOutput (转换为 BigDecimal)
|
|
|
+ BigDecimal totalBlankOutput = group.stream()
|
|
|
+ .map(RollClubTwoDetails::getBlankOutput)
|
|
|
+ .filter(Objects::nonNull) // 过滤 null 值
|
|
|
+ .map(BigDecimal::valueOf) // Double 转 BigDecimal
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ // 返回处理后的分组结果
|
|
|
+ return new SizeSummary(size, totalNums, totalBlankOutput);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ summaryList.addAll(result2);
|
|
|
+
|
|
|
+
|
|
|
+ // 根据铸机号、班组、班别、交班的创建时间,查询棒三符合条件的信息
|
|
|
+ LambdaQueryWrapper<RollClubThreeDetails> queryWrapper3 = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper3.eq(RollClubThreeDetails::getCcmNo, ccmNo)
|
|
|
+ .eq(RollClubThreeDetails::getShift, shift)
|
|
|
+ .eq(RollClubThreeDetails::getShiftGroup, shiftGroup)
|
|
|
+ .between(RollClubThreeDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
|
|
|
+ List<RollClubThreeDetails> list3 = rollClubThreeDetailsService.list(queryWrapper3);
|
|
|
+
|
|
|
+ // 根据 size 分组,并统计总支数和总 BlankOutput
|
|
|
+ List<SizeSummary> result3 = list3.stream()
|
|
|
+ .collect(Collectors.groupingBy(RollClubThreeDetails::getSize))
|
|
|
+ .entrySet().stream()
|
|
|
+ .map(entry -> {
|
|
|
+ String size = entry.getKey();
|
|
|
+ List<RollClubThreeDetails> group = entry.getValue();
|
|
|
+
|
|
|
+ // 统计总支数,如果 stackAddr 不为空,则乘以 4
|
|
|
+ int totalNums = group.stream()
|
|
|
+ .mapToInt(detail -> (detail.getStackAddr() != null && !detail.getStackAddr().isEmpty()) ? 4 : 1)
|
|
|
+ .sum();
|
|
|
+
|
|
|
+ // 累加 BlankOutput (转换为 BigDecimal)
|
|
|
+ BigDecimal totalBlankOutput = group.stream()
|
|
|
+ .map(RollClubThreeDetails::getBlankOutput)
|
|
|
+ .filter(Objects::nonNull) // 过滤 null 值
|
|
|
+ .map(BigDecimal::valueOf) // Double 转 BigDecimal
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ // 返回处理后的分组结果
|
|
|
+ return new SizeSummary(size, totalNums, totalBlankOutput);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ summaryList.addAll(result3);
|
|
|
+
|
|
|
+
|
|
|
+ // 根据铸机号、班组、班别、交班的创建时间,查询高线符合条件的信息
|
|
|
+ LambdaQueryWrapper<RollHeightDetails> queryWrapper4 = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper4.eq(RollHeightDetails::getCcmNo, ccmNo)
|
|
|
+ .eq(RollHeightDetails::getShift, shift)
|
|
|
+ .eq(RollHeightDetails::getShiftGroup, shiftGroup)
|
|
|
+ .between(RollHeightDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
|
|
|
+ List<RollHeightDetails> list4 = rollHeightDetailsService.list(queryWrapper4);
|
|
|
+
|
|
|
+ // 根据 size 分组,并统计总支数和总 BlankOutput
|
|
|
+ List<SizeSummary> result4 = list4.stream()
|
|
|
+ .collect(Collectors.groupingBy(RollHeightDetails::getSize))
|
|
|
+ .entrySet().stream()
|
|
|
+ .map(entry -> {
|
|
|
+ String size = entry.getKey();
|
|
|
+ List<RollHeightDetails> group = entry.getValue();
|
|
|
+
|
|
|
+ // 统计总支数,如果 stackAddr 不为空,则乘以 4
|
|
|
+ int totalNums = group.stream()
|
|
|
+ .mapToInt(detail -> (detail.getStackAddr() != null && !detail.getStackAddr().isEmpty()) ? 4 : 1)
|
|
|
+ .sum();
|
|
|
+
|
|
|
+ // 累加 BlankOutput (转换为 BigDecimal)
|
|
|
+ BigDecimal totalBlankOutput = group.stream()
|
|
|
+ .map(RollHeightDetails::getBlankOutput)
|
|
|
+ .filter(Objects::nonNull) // 过滤 null 值
|
|
|
+ .map(BigDecimal::valueOf) // Double 转 BigDecimal
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ // 返回处理后的分组结果
|
|
|
+ return new SizeSummary(size, totalNums, totalBlankOutput);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ summaryList.addAll(result4);
|
|
|
+
|
|
|
+
|
|
|
+ // 根据铸机号、班组、班别、交班的创建时间,查询上若符合条件的信息
|
|
|
+ LambdaQueryWrapper<RollOutShippDetails> queryWrapper5 = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper5.eq(RollOutShippDetails::getCcmNo, ccmNo)
|
|
|
+ .eq(RollOutShippDetails::getShift, shift)
|
|
|
+ .eq(RollOutShippDetails::getShiftGroup, shiftGroup)
|
|
|
+ .between(RollOutShippDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
|
|
|
+ List<RollOutShippDetails> list5 = rollOutShippDetailsService.list(queryWrapper5);
|
|
|
+
|
|
|
+ // 根据 size 分组,并统计总支数和总 BlankOutput
|
|
|
+ List<SizeSummary> result5 = list5.stream()
|
|
|
+ .collect(Collectors.groupingBy(RollOutShippDetails::getSize))
|
|
|
+ .entrySet().stream()
|
|
|
+ .map(entry -> {
|
|
|
+ String size = entry.getKey();
|
|
|
+ List<RollOutShippDetails> group = entry.getValue();
|
|
|
+
|
|
|
+ // 统计总支数,如果 stackAddr 不为空,则乘以 4
|
|
|
+ int totalNums = group.stream()
|
|
|
+ .mapToInt(detail -> (detail.getStackAddr() != null && !detail.getStackAddr().isEmpty()) ? 4 : 1)
|
|
|
+ .sum();
|
|
|
+
|
|
|
+ // 累加 BlankOutput (转换为 BigDecimal)
|
|
|
+ BigDecimal totalBlankOutput = group.stream()
|
|
|
+ .map(RollOutShippDetails::getBlankOutput)
|
|
|
+ .filter(Objects::nonNull) // 过滤 null 值
|
|
|
+ .map(BigDecimal::valueOf) // Double 转 BigDecimal
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ // 返回处理后的分组结果
|
|
|
+ return new SizeSummary(size, totalNums, totalBlankOutput);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ summaryList.addAll(result5);
|
|
|
+
|
|
|
+
|
|
|
+ // 对 summaryList 进行二次分组,聚合数据
|
|
|
+ List<OnDutySizeVo> onDutySizeVoList = summaryList.stream()
|
|
|
+ .collect(Collectors.groupingBy(SizeSummary::getSize))
|
|
|
+ .entrySet().stream()
|
|
|
+ .map(entry -> {
|
|
|
+ String size = entry.getKey();
|
|
|
+ List<SizeSummary> group = entry.getValue();
|
|
|
+
|
|
|
+ // 累加 amountTotal(总支数)
|
|
|
+ int totalAmount = group.stream()
|
|
|
+ .mapToInt(SizeSummary::getAmountTotal)
|
|
|
+ .sum();
|
|
|
+
|
|
|
+ // 累加 totalBlankOutput(出坯量)
|
|
|
+ BigDecimal totalBlankOutput = group.stream()
|
|
|
+ .map(SizeSummary::getTotalBlankOutput)
|
|
|
+ .filter(Objects::nonNull) // 过滤 null 值
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ // 组装 OnDutySizeVo 结果对象
|
|
|
+ OnDutySizeVo onDutySizeVo = new OnDutySizeVo();
|
|
|
+ onDutySizeVo.setSize(size);
|
|
|
+ onDutySizeVo.setAmountTotal(totalAmount);
|
|
|
+ onDutySizeVo.setTotalBlankOutput(totalBlankOutput);
|
|
|
+
|
|
|
+ return onDutySizeVo;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ return onDutySizeVoList;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 生成综合唯一编码
|