3 Commits 204e690803 ... 19ca88b5b9

Author SHA1 Message Date
  qiangxuan 19ca88b5b9 update01 3 days ago
  qiangxuan 96b1c2b2dc 命名修改 4 days ago
  qiangxuan ffbb8a3611 副跨功能开发 4 days ago
22 changed files with 977 additions and 864 deletions
  1. 4 0
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/billetHotsend/entity/BilletHotsend.java
  2. 73 0
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/billetHotsend/service/impl/BilletHotsendBaseServiceImpl.java
  3. 7 217
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/billetHotsendChangeShift/controller/BilletHotsendChangeShiftController.java
  4. 3 0
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/billetHotsendChangeShift/entity/BilletHotsendChangeShift.java
  5. 3 10
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/billetHotsendChangeShift/entity/BilletShiftPerformance.java
  6. 163 0
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/controller/RollDeputyCrossController.java
  7. 163 0
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/controller/RollDeputyCrossDetailsController.java
  8. 140 0
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/entity/RollDeputyCross.java
  9. 134 0
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/entity/RollDeputyCrossDetails.java
  10. 14 0
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/mapper/RollDeputyCrossDetailsMapper.java
  11. 14 0
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/mapper/RollDeputyCrossMapper.java
  12. 5 0
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/mapper/xml/RollDeputyCrossDetailsMapper.xml
  13. 5 0
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/mapper/xml/RollDeputyCrossMapper.xml
  14. 14 0
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/service/IRollDeputyCrossDetailsService.java
  15. 14 0
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/service/IRollDeputyCrossService.java
  16. 19 0
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/service/impl/RollDeputyCrossDetailsServiceImpl.java
  17. 19 0
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/service/impl/RollDeputyCrossServiceImpl.java
  18. 93 0
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/stackingAndLoadingVehicles/service/impl/StackingAndLoadingVehiclesServiceImpl.java
  19. 10 1
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/storageBill/controller/StorageBillController.java
  20. 3 0
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/storageBill/entity/BilletHotsendDetails.java
  21. 0 4
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/storageBill/service/IStorageBillService.java
  22. 77 632
      zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/storageBill/service/impl/StorageBillServiceImpl.java

+ 4 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/billetHotsend/entity/BilletHotsend.java

@@ -123,6 +123,10 @@ public class BilletHotsend implements Serializable {
     @ApiModelProperty(value = "'上若总支数'")
     private Integer rolloutshippNum;
 
+    @Excel(name = "付跨总支数", width = 15)
+    @ApiModelProperty(value = "'付跨总支数'")
+    private Integer rollDeputyCrossNum;
+
     @Excel(name = "堆垛支数", width = 15)
     @ApiModelProperty(value = "堆垛支数")
     private Integer stackNum;

+ 73 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/billetHotsend/service/impl/BilletHotsendBaseServiceImpl.java

@@ -47,6 +47,10 @@ import org.jeecg.modules.billet.rollClubTwo.entity.RollClubTwo;
 import org.jeecg.modules.billet.rollClubTwo.entity.RollClubTwoDetails;
 import org.jeecg.modules.billet.rollClubTwo.service.IRollClubTwoDetailsService;
 import org.jeecg.modules.billet.rollClubTwo.service.IRollClubTwoService;
+import org.jeecg.modules.billet.rollDeputyCross.entity.RollDeputyCross;
+import org.jeecg.modules.billet.rollDeputyCross.entity.RollDeputyCrossDetails;
+import org.jeecg.modules.billet.rollDeputyCross.service.IRollDeputyCrossDetailsService;
+import org.jeecg.modules.billet.rollDeputyCross.service.IRollDeputyCrossService;
 import org.jeecg.modules.billet.rollHeight.entity.RollHeight;
 import org.jeecg.modules.billet.rollHeight.entity.RollHeightDetails;
 import org.jeecg.modules.billet.rollHeight.service.IRollHeightDetailsService;
@@ -144,6 +148,10 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 	private IBilletRulerConfigService billetRulerConfigService;
 	@Autowired
 	private BilletAssemblyNumberMapper billetAssemblyNumberMapper;
+	@Autowired
+	private IRollDeputyCrossService rollDeputyCrossService;
+	@Autowired
+	private IRollDeputyCrossDetailsService rollDeputyCrossDetailsService;
 
 
 	@Override
@@ -194,6 +202,8 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 				x.setBelongTable("roll_height");
 			} else if ("roll_out_shipp".equals(billetHotsendDetailsVo.getBelongTable())) {
 				x.setBelongTable("roll_out_shipp");
+			}else if ("roll_deputy_cross".equals(billetHotsendDetailsVo.getBelongTable())) {
+				x.setBelongTable("roll_deputy_cross");
 			}
 			x.setBhtcId(billetHotsendDetailsVo.getBilletHotsendTypeConfigId());
 			x.setUpdateTime(new Date());
@@ -316,6 +326,8 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 				x.setBelongTable("roll_height");
 			} else if ("roll_out_shipp".equals(billetHotsendDetailsVo.getBelongTable())) {
 				x.setBelongTable("roll_out_shipp");
+			}else if ("roll_deputy_cross".equals(billetHotsendDetailsVo.getBelongTable())) {
+				x.setBelongTable("roll_deputy_cross");
 			}
 			x.setBhtcId(billetHotsendDetailsVo.getBilletHotsendTypeConfigId());
 			x.setUpdateTime(new Date());
@@ -1023,6 +1035,12 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 			}else {
 				billetHotsend.setRolloutshippNum(check.getRolloutshippNum() + rollClubCommonList.size());
 			}
+		}else if ("roll_deputy_cross".equals(billetHotsendDetailsVo.getBelongTable()) && "0".equals(billetHotsendTypeConfig.getBelongType().toString())){
+			if (oConvertUtils.isEmpty(check.getRollDeputyCrossNum())){
+				billetHotsend.setRollDeputyCrossNum(rollClubCommonList.size());
+			}else {
+				billetHotsend.setRollDeputyCrossNum(check.getRollDeputyCrossNum() + rollClubCommonList.size());
+			}
 		}
 		billetHotsend.setUpdateTime(new Date());
 		LambdaUpdateWrapper<BilletHotsend> updateWrapper = new LambdaUpdateWrapper<>();
@@ -1318,6 +1336,61 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 			// 更新交班表中的热装总支数
 			updateShiftInfoByType(billetHotsend.getCcmNo(), billetHotsend.getShift(), billetHotsend.getShiftGroup(), rollOutShippDetailsList.size(), "roll_out_shipp", "hotCharge");
 		}
+
+		/**
+		 * 保存上若信息
+		 */
+		if ("roll_deputy_cross".equals(billetHotsendDetailsVo.getBelongTable())){
+			billetHotsend.setShift(storageBill.getShift());
+			billetHotsend.setShiftGroup(storageBill.getShiftGroup());
+			RollDeputyCross rollDeputyCross = new RollDeputyCross();
+			BeanUtils.copyProperties(billetHotsend, rollDeputyCross);
+			rollDeputyCross.setSize(String.valueOf(rollClubCommonList.stream().findFirst().orElse(null).getLength())); //定尺
+			rollDeputyCross.setSteel(String.valueOf(rollClubCommonList.stream().findFirst().orElse(null).getGrade())); //钢种
+			rollDeputyCross.setSpec(String.valueOf(rollClubCommonList.stream().findFirst().orElse(null).getSpec())); //规格
+			rollDeputyCross.setBlankOutput(rollClubCommonList.stream().mapToDouble(RollClubCommon::getBilletWeight).sum());//出坯量总和
+			rollDeputyCross.setStorageBillId(storageBill.getId());
+			LambdaQueryWrapper<RollDeputyCross> queryWrapper1 = new LambdaQueryWrapper<>();
+			queryWrapper1.eq(RollDeputyCross::getCcmNo, billetHotsend.getCcmNo())
+					.eq(RollDeputyCross::getHeatNo, billetHotsend.getHeatNo())
+					.eq(RollDeputyCross::getShift, billetHotsend.getShift())
+					.eq(RollDeputyCross::getShiftGroup, billetHotsend.getShiftGroup())
+					.eq(RollDeputyCross::getStorageBillId, storageBill.getId());
+			RollDeputyCross rollDeputyCross1 = rollDeputyCrossService.getOne(queryWrapper1);
+			if (oConvertUtils.isEmpty(rollDeputyCross1)){
+				rollDeputyCross.setCreateDate(new Date());
+				rollDeputyCross.setAmountTotal(rollClubCommonList.size());// 总支数
+				rollDeputyCrossService.save(rollDeputyCross);
+			}else {
+				rollDeputyCross1.setId(rollDeputyCross1.getId());
+				rollDeputyCross1.setAmountTotal(rollDeputyCross1.getAmountTotal() + rollClubCommonList.size());// 总支数
+				rollDeputyCross1.setBlankOutput(rollDeputyCross1.getBlankOutput() + rollDeputyCross.getBlankOutput());//出坯量
+				rollDeputyCross1.setUpdateTime(new Date());
+				rollDeputyCrossService.updateById(rollDeputyCross1);
+			}
+			// 保存付跨明细信息
+			List<RollDeputyCrossDetails> rollDeputyCrossDetailsList = new ArrayList<>();
+			rollClubCommonList.forEach(x ->{
+				RollDeputyCrossDetails rollDeputyCrossDetails = new RollDeputyCrossDetails();
+				BeanUtils.copyProperties(x, rollDeputyCrossDetails);
+				rollDeputyCrossDetails.setId(String.valueOf(IdWorker.getId()));
+				rollDeputyCrossDetails.setShift(billetHotsend.getShift());
+				rollDeputyCrossDetails.setShiftGroup(billetHotsend.getShiftGroup());
+				rollDeputyCrossDetails.setStorageBillId(storageBill.getId());
+				rollDeputyCrossDetails.setLicensePlate(storageBill.getLicensePlate());
+				rollDeputyCrossDetails.setSize(String.valueOf(x.getLength()));
+				rollDeputyCrossDetails.setSteel(x.getGrade());
+				rollDeputyCrossDetails.setUpdateTime(new Date(System.currentTimeMillis() + timeOffset.get()));
+				rollDeputyCrossDetails.setCreateTime(new Date(System.currentTimeMillis() + timeOffset.get()));
+				rollDeputyCrossDetails.setBlankOutput(x.getBilletWeight());//出坯量
+				rollDeputyCrossDetailsList.add(rollDeputyCrossDetails);
+				timeOffset.addAndGet(1000); // 这里假设每次增加1秒(1000毫秒)的时间偏移量
+			});
+			rollDeputyCrossDetailsService.saveBatch(rollDeputyCrossDetailsList);
+			// 更新交班表中的热装总支数
+			updateShiftInfoByType(billetHotsend.getCcmNo(), billetHotsend.getShift(), billetHotsend.getShiftGroup(), rollDeputyCrossDetailsList.size(), "roll_deputy_cross", "hotCharge");
+		}
+
 		return result;
 	}
 

+ 7 - 217
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/billetHotsendChangeShift/controller/BilletHotsendChangeShiftController.java

@@ -33,6 +33,9 @@ import org.jeecg.modules.billet.rollClubThree.entity.RollClubThreeDetails;
 import org.jeecg.modules.billet.rollClubThree.service.IRollClubThreeDetailsService;
 import org.jeecg.modules.billet.rollClubTwo.entity.RollClubTwoDetails;
 import org.jeecg.modules.billet.rollClubTwo.service.IRollClubTwoDetailsService;
+import org.jeecg.modules.billet.rollDeputyCross.entity.RollDeputyCrossDetails;
+import org.jeecg.modules.billet.rollDeputyCross.service.IRollDeputyCrossDetailsService;
+import org.jeecg.modules.billet.rollDeputyCross.service.IRollDeputyCrossService;
 import org.jeecg.modules.billet.rollHeight.entity.DestinationStatisticsDetails;
 import org.jeecg.modules.billet.rollHeight.entity.RollHeightDetails;
 import org.jeecg.modules.billet.rollHeight.service.IRollHeightDetailsService;
@@ -109,6 +112,9 @@ public class BilletHotsendChangeShiftController extends JeecgController<BilletHo
 	@Autowired
 	private IRollHeightDetailsService rollHeightDetailsService;
 
+	@Autowired
+	private IRollDeputyCrossDetailsService rollDeputyCrossDetailsService;
+
 	/**
 	 * 分页列表查询
 	 *
@@ -894,7 +900,6 @@ public class BilletHotsendChangeShiftController extends JeecgController<BilletHo
 		List<DestinationStatisticsDetails> statisticsDetailsList1 = new ArrayList<>();
 		List<DestinationStatisticsDetails> statisticsDetailsList2 = new ArrayList<>();
 		List<DestinationStatisticsDetails> statisticsDetailsList3 = new ArrayList<>();
-
 		// 根据铸机号、班组、班别、交班的创建时间,交班时间,查询所有目的地是棒二的钢坯基础信息
 		LambdaQueryWrapper<BilletBasicInfo> queryWrapper1 = new LambdaQueryWrapper<>();
 		queryWrapper1.eq(BilletBasicInfo::getCcmNo, billetHotsendChangeShift.getCcmNo())
@@ -918,7 +923,6 @@ public class BilletHotsendChangeShiftController extends JeecgController<BilletHo
 		List<BilletBasicInfo> rollOutShippList = billetBasicInfoList.stream()
 				.filter(info -> "roll_out_shipp".equals(info.getBelongTable()))
 				.collect(Collectors.toList());
-
 		if (oConvertUtils.listIsNotEmpty(rollClubTwoList)){
 			List<DestinationStatisticsDetails> currentList1 = rollClubTwoList.stream()
 					.collect(Collectors.groupingBy(BilletBasicInfo::getLength))
@@ -977,7 +981,6 @@ public class BilletHotsendChangeShiftController extends JeecgController<BilletHo
 					}).collect(Collectors.toList());
 			statisticsDetailsList3.addAll(currentList3);
 		}
-
 		// 合并三个列表并根据 size 分组统计
 		List<DestinationStatisticsDetails> mergedList = Stream.concat(
 						Stream.concat(statisticsDetailsList1.stream(), statisticsDetailsList2.stream()),
@@ -1084,214 +1087,6 @@ public class BilletHotsendChangeShiftController extends JeecgController<BilletHo
 		billetHotsendChangeShift.setRollClubShipDetails(JSON.toJSONString(statisticsDetailsGroup3List));
 		billetHotsendChangeShiftService.updateById(billetHotsendChangeShift);
 	}
-	/**
-	 * 5.6号机
-	 * 统计班次吊运明细、轧钢棒二、轧钢棒三、轧钢上若维护到交班信息 公共方法
-	 * @param billetHotsendChangeShift
-	 */
-	private void commonShift1(BilletHotsendChangeShift billetHotsendChangeShift) {
-
-		// 班次装运统计  车次总数、总重、总支数  查询当班装运单信息
-		LambdaQueryWrapper<StorageBill> queryWrapper3 = new LambdaQueryWrapper<>();
-		queryWrapper3.eq(StorageBill::getCcmNo, billetHotsendChangeShift.getCcmNo())
-				.eq(StorageBill::getShift, billetHotsendChangeShift.getShift())
-				.eq(StorageBill::getShiftGroup, billetHotsendChangeShift.getShiftGroup())
-				.isNotNull(StorageBill::getDestination)
-				.ne(StorageBill::getTypeConfigId, "1024")
-				.between(StorageBill::getCreateTime, billetHotsendChangeShift.getCreateTime(), billetHotsendChangeShift.getChangeShiftTime());
-		List<StorageBill> storageBillList = storageBillService.list(queryWrapper3);
-		if (oConvertUtils.listIsEmpty(storageBillList)){
-			log.info("{}{}", "查询班次实绩吊运明细、轧钢棒二、轧钢棒三、轧钢上若,装运信息为空!", billetHotsendChangeShift.getCcmNo());
-			return;
-		}
-		List<DestinationStatisticsDetails> statisticsDetailsList1 = new ArrayList<>();
-		List<DestinationStatisticsDetails> statisticsDetailsList2 = new ArrayList<>();
-		List<DestinationStatisticsDetails> statisticsDetailsList3 = new ArrayList<>();
-
-		for (StorageBill storageBill : storageBillList) {
-			if ("棒二".equals(storageBill.getDestination())) {
-				LambdaQueryWrapper<RollClubTwoDetails> queryWrapper4 = new LambdaQueryWrapper<>();
-				queryWrapper4.eq(RollClubTwoDetails::getCcmNo, billetHotsendChangeShift.getCcmNo())
-						.eq(RollClubTwoDetails::getStorageBillId, storageBill.getId());
-				List<RollClubTwoDetails> rollClubTwoDetailsList = rollClubTwoDetailsService.list(queryWrapper4);
-				if (oConvertUtils.listIsNotEmpty(rollClubTwoDetailsList)) {
-					List<DestinationStatisticsDetails> currentList1 = rollClubTwoDetailsList.stream()
-							.collect(Collectors.groupingBy(RollClubTwoDetails::getSize))
-							.entrySet().stream()
-							.map(entry -> {
-								String size = entry.getKey();
-								List<RollClubTwoDetails> group = entry.getValue();
-								// 统计 blankOutput 总和
-								Double totalBlankOutput = group.stream()
-										.mapToDouble(RollClubTwoDetails::getBlankOutput)
-										.sum();
-								BigDecimal bd = BigDecimal.valueOf(totalBlankOutput).setScale(4, BigDecimal.ROUND_HALF_UP);
-								totalBlankOutput = bd.doubleValue();
-								// 统计数量
-								Integer totalNums = group.stream()
-										.mapToInt(detail -> detail.getStackAddr() != null ? 4 : 1).sum();
-								// 取第一个元素的 ccmNo 作为该分组的 ccmNo
-								String ccmNos = group.isEmpty() ? null : group.get(0).getCcmNo();
-								return new DestinationStatisticsDetails(size, totalNums, totalBlankOutput, ccmNos);
-							}).collect(Collectors.toList());
-					statisticsDetailsList1.addAll(currentList1);
-				}
-			}
-
-			if ("棒三".equals(storageBill.getDestination())) {
-				LambdaQueryWrapper<RollClubThreeDetails> queryWrapper5 = new LambdaQueryWrapper<>();
-				queryWrapper5.eq(RollClubThreeDetails::getCcmNo, billetHotsendChangeShift.getCcmNo())
-						.eq(RollClubThreeDetails::getStorageBillId, storageBill.getId());
-				List<RollClubThreeDetails> rollClubThreeDetailsList = rollClubThreeDetailsService.list(queryWrapper5);
-				if (oConvertUtils.listIsNotEmpty(rollClubThreeDetailsList)) {
-					List<DestinationStatisticsDetails> currentList2 = rollClubThreeDetailsList.stream()
-							.collect(Collectors.groupingBy(RollClubThreeDetails::getSize))
-							.entrySet().stream()
-							.map(entry -> {
-								String size = entry.getKey();
-								List<RollClubThreeDetails> group = entry.getValue();
-								// 统计 blankOutput 总和
-								Double totalBlankOutput = group.stream()
-										.mapToDouble(RollClubThreeDetails::getBlankOutput)
-										.sum();
-								BigDecimal bd = BigDecimal.valueOf(totalBlankOutput).setScale(4, BigDecimal.ROUND_HALF_UP);
-								totalBlankOutput = bd.doubleValue();
-								// 统计数量
-								Integer totalNums = group.stream()
-										.mapToInt(detail -> detail.getStackAddr() != null ? 4 : 1).sum();
-								// 取第一个元素的 ccmNo 作为该分组的 ccmNo
-								String ccmNos = group.isEmpty() ? null : group.get(0).getCcmNo();
-								return new DestinationStatisticsDetails(size, totalNums, totalBlankOutput, ccmNos);
-							}).collect(Collectors.toList());
-					statisticsDetailsList2.addAll(currentList2);
-				}
-			}
-
-			if ("上若".equals(storageBill.getDestination())) {
-				LambdaQueryWrapper<RollOutShippDetails> queryWrapper6 = new LambdaQueryWrapper<>();
-				queryWrapper6.eq(RollOutShippDetails::getCcmNo, billetHotsendChangeShift.getCcmNo())
-						.eq(RollOutShippDetails::getStorageBillId, storageBill.getId());
-				List<RollOutShippDetails> rollOutShippDetailsList = rollOutShippDetailsService.list(queryWrapper6);
-				if (oConvertUtils.listIsNotEmpty(rollOutShippDetailsList)) {
-					List<DestinationStatisticsDetails> currentList3 = rollOutShippDetailsList.stream()
-							.collect(Collectors.groupingBy(RollOutShippDetails::getSize))
-							.entrySet().stream()
-							.map(entry -> {
-								String size = entry.getKey();
-								List<RollOutShippDetails> group = entry.getValue();
-								// 统计 blankOutput 总和
-								Double totalBlankOutput = group.stream()
-										.mapToDouble(RollOutShippDetails::getBlankOutput)
-										.sum();
-								BigDecimal bd = BigDecimal.valueOf(totalBlankOutput).setScale(4, BigDecimal.ROUND_HALF_UP);
-								totalBlankOutput = bd.doubleValue();
-								// 统计数量
-								Integer totalNums = group.stream()
-										.mapToInt(detail -> detail.getStackAddr() != null ? 4 : 1).sum();
-								// 取第一个元素的 ccmNo 作为该分组的 ccmNo
-								String ccmNos = group.isEmpty() ? null : group.get(0).getCcmNo();
-								return new DestinationStatisticsDetails(size, totalNums, totalBlankOutput, ccmNos);
-							}).collect(Collectors.toList());
-					statisticsDetailsList3.addAll(currentList3);
-				}
-			}
-		}
-
-		// 合并三个列表并根据 size 分组统计
-		List<DestinationStatisticsDetails> mergedList = Stream.concat(
-						Stream.concat(statisticsDetailsList1.stream(), statisticsDetailsList2.stream()),
-						statisticsDetailsList3.stream()
-				).collect(Collectors.groupingBy(DestinationStatisticsDetails::getSize))
-				.entrySet().stream()
-				.map(entry -> {
-					String size = entry.getKey();
-					List<DestinationStatisticsDetails> group = entry.getValue();
-					int totalNums = group.stream().mapToInt(DestinationStatisticsDetails::getNums).sum();
-					double totalBlankOutput = group.stream().mapToDouble(DestinationStatisticsDetails::getBlankOutput).sum();
-					BigDecimal bd = BigDecimal.valueOf(totalBlankOutput).setScale(4, BigDecimal.ROUND_HALF_UP);
-					double finalBlankOutput = bd.doubleValue();
-					String ccmNoForGroup = group.isEmpty() ? null : group.get(0).getCcmNo();
-					return new DestinationStatisticsDetails(size, totalNums, finalBlankOutput, ccmNoForGroup);
-				}).collect(Collectors.toList());
-		// 遍历mergedList获取nums总和
-		int finalAmountTotal = mergedList.stream().mapToInt(DestinationStatisticsDetails::getNums).sum();
-		// 遍历mergedList获取blankOutput总和
-		double finalBlankOutputs = mergedList.stream().mapToDouble(DestinationStatisticsDetails::getBlankOutput).sum();
-		BigDecimal bd = BigDecimal.valueOf(finalBlankOutputs).setScale(4, BigDecimal.ROUND_HALF_UP);
-		// 过滤 storageBillList 中总支数为0的记录,计算出总条数
-		int allCarNum = (int) storageBillList.stream()
-				.filter(storageBill -> storageBill.getAmountTotal() != 0)
-				.count();
-		// 装运总车次
-		billetHotsendChangeShift.setAllCarNum(allCarNum);
-
-		// 装运总支数
-		billetHotsendChangeShift.setCounts(finalAmountTotal);
-
-		// 装运总重量
-		billetHotsendChangeShift.setBlankOutputs(bd.doubleValue());
-
-		// 轧钢棒二明细
-		// 按照 size 分组,计算 nums 和 blankOutput 的总和,取每组第一条记录的 ccmNo
-		Map<String, DestinationStatisticsDetails> result1 = statisticsDetailsList1.stream()
-				.collect(Collectors.groupingBy(
-						DestinationStatisticsDetails::getSize,
-						Collectors.collectingAndThen(
-								Collectors.reducing((first, second) -> {
-									DestinationStatisticsDetails combined = new DestinationStatisticsDetails();
-									combined.setSize(first.getSize());
-									combined.setNums(first.getNums() + second.getNums());
-									combined.setBlankOutput(roundToFourDecimals(first.getBlankOutput() + second.getBlankOutput()));
-									combined.setCcmNo(first.getCcmNo());
-									return combined;
-								}),
-								Optional::get
-						)
-				));
-		List<DestinationStatisticsDetails> statisticsDetailsGroup1List = new ArrayList<>(result1.values());
-		billetHotsendChangeShift.setRollClubTwoDetails(JSON.toJSONString(statisticsDetailsGroup1List));
-
-		// 轧钢棒三明细
-		// 按照 size 分组,计算 nums 和 blankOutput 的总和,取每组第一条记录的 ccmNo
-		Map<String, DestinationStatisticsDetails> result2 = statisticsDetailsList2.stream()
-				.collect(Collectors.groupingBy(
-						DestinationStatisticsDetails::getSize,
-						Collectors.collectingAndThen(
-								Collectors.reducing((first, second) -> {
-									DestinationStatisticsDetails combined = new DestinationStatisticsDetails();
-									combined.setSize(first.getSize());
-									combined.setNums(first.getNums() + second.getNums());
-									combined.setBlankOutput(roundToFourDecimals(first.getBlankOutput() + second.getBlankOutput()));
-									combined.setCcmNo(first.getCcmNo());
-									return combined;
-								}),
-								Optional::get
-						)
-				));
-		List<DestinationStatisticsDetails> statisticsDetailsGroup2List = new ArrayList<>(result2.values());
-		billetHotsendChangeShift.setRollClubThreeDetails(JSON.toJSONString(statisticsDetailsGroup2List));
-
-		// 轧钢上若明细
-		// 按照 size 分组,计算 nums 和 blankOutput 的总和,取每组第一条记录的 ccmNo
-		Map<String, DestinationStatisticsDetails> result3 = statisticsDetailsList3.stream()
-				.collect(Collectors.groupingBy(
-						DestinationStatisticsDetails::getSize,
-						Collectors.collectingAndThen(
-								Collectors.reducing((first, second) -> {
-									DestinationStatisticsDetails combined = new DestinationStatisticsDetails();
-									combined.setSize(first.getSize());
-									combined.setNums(first.getNums() + second.getNums());
-									combined.setBlankOutput(roundToFourDecimals(first.getBlankOutput() + second.getBlankOutput()));
-									combined.setCcmNo(first.getCcmNo());
-									return combined;
-								}),
-								Optional::get
-						)
-				));
-		List<DestinationStatisticsDetails> statisticsDetailsGroup3List = new ArrayList<>(result3.values());
-		billetHotsendChangeShift.setRollClubShipDetails(JSON.toJSONString(statisticsDetailsGroup3List));
-		billetHotsendChangeShiftService.updateById(billetHotsendChangeShift);
-	}
 
 	private static double roundToFourDecimals(double value) {
 		BigDecimal bd = new BigDecimal(Double.toString(value));
@@ -1699,7 +1494,7 @@ public class BilletHotsendChangeShiftController extends JeecgController<BilletHo
 				// 合并三个列表并根据 size 分组统计
 				List<DestinationStatisticsDetails> mergedList = Stream.concat(
 								Stream.concat(statisticsDetailsList1.stream(), statisticsDetailsList2.stream()),
-								statisticsDetailsList3.stream()
+								statisticsDetailsList3.stream() // 直接使用第三个列表的流,移除第四个列表
 						).collect(Collectors.groupingBy(DestinationStatisticsDetails::getSize))
 						.entrySet().stream()
 						.map(entry -> {
@@ -1766,11 +1561,6 @@ public class BilletHotsendChangeShiftController extends JeecgController<BilletHo
 
 				billetShiftPerformance.setRollClubOneDetailsList(rollClubOneDetailsStatisticsList);
 			}
-
-
-
-
-
 			billetShiftPerformanceList.add(billetShiftPerformance);
 		}
 		// 创建新的分页对象,并设置相关属性

+ 3 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/billetHotsendChangeShift/entity/BilletHotsendChangeShift.java

@@ -173,6 +173,9 @@ public class BilletHotsendChangeShift implements Serializable {
     @ApiModelProperty(value = "轧钢上若明细")
     private String rollClubShipDetails;
 
+    @ApiModelProperty(value = "轧钢付跨明细")
+    private String rollDeputyCrossDetails;
+
     // 班组定尺明细
     @ApiModelProperty(value = "班组定尺明细")
     private String sizeDetailsList;

+ 3 - 10
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/billetHotsendChangeShift/entity/BilletShiftPerformance.java

@@ -55,7 +55,6 @@ public class BilletShiftPerformance {
     @ApiModelProperty(value = "当班总重")
     private Double shiftProduct;
 
-
     /**当班总数*/
     @Excel(name = "当班总数", width = 15)
     @ApiModelProperty(value = "当班总数")
@@ -70,8 +69,6 @@ public class BilletShiftPerformance {
     @ApiModelProperty(value = "当前废品支数")
     private Integer shiftWasteAmount;
 
-
-
     /**当前热送支数*/
     @Excel(name = "当前热送支数", width = 15)
     @ApiModelProperty(value = "当前热送支数")
@@ -97,7 +94,6 @@ public class BilletShiftPerformance {
     @ApiModelProperty(value = "当前起垛支数")
     private Integer shiftStackAmount;
 
-
     /**当前起垛支数*/
     @Excel(name = "当前起垛重量", width = 15)
     @ApiModelProperty(value = "当前起垛重量")
@@ -109,9 +105,6 @@ public class BilletShiftPerformance {
     @ApiModelProperty(value = "班次吊运信息")
     private List<OnDutyLiftingBillDetails>  onDutyLiftingBillDetailsList;
 
-
-
-
     @ApiModelProperty(value = "装运总车次")
     private Integer allCarNum;
 
@@ -121,9 +114,6 @@ public class BilletShiftPerformance {
     @ApiModelProperty(value = "装运总重量")
     private BigDecimal blankOutputs;
 
-
-
-
     @ApiModelProperty(value = "轧钢棒一明细")
     private List<DestinationStatisticsDetails> rollClubOneDetailsList;
 
@@ -138,4 +128,7 @@ public class BilletShiftPerformance {
 
     @ApiModelProperty(value = "轧钢高线明细")
     private List<DestinationStatisticsDetails> rollHeightDetailsList;
+//
+//    @ApiModelProperty(value = "轧钢付跨明细")
+//    private List<DestinationStatisticsDetails> rollDeputyCrossDetailsList;
 }

+ 163 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/controller/RollDeputyCrossController.java

@@ -0,0 +1,163 @@
+package org.jeecg.modules.billet.rollDeputyCross.controller;
+
+import java.util.Arrays;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.billet.rollDeputyCross.entity.RollDeputyCross;
+import org.jeecg.modules.billet.rollDeputyCross.service.IRollDeputyCrossService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+ /**
+ * @Description: 轧钢付跨
+ * @Author: jeecg-boot
+ * @Date:   2025-06-04
+ * @Version: V1.0
+ */
+@Api(tags="轧钢付跨")
+@RestController
+@RequestMapping("/billetHotsendBase/rollDeputyCross")
+@Slf4j
+public class RollDeputyCrossController extends JeecgController<RollDeputyCross, IRollDeputyCrossService> {
+	@Autowired
+	private IRollDeputyCrossService rollDeputyCrossService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param rollDeputyCross
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "轧钢付跨-分页列表查询")
+	@ApiOperation(value="轧钢付跨-分页列表查询", notes="轧钢付跨-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<RollDeputyCross>> queryPageList(RollDeputyCross rollDeputyCross,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<RollDeputyCross> queryWrapper = QueryGenerator.initQueryWrapper(rollDeputyCross, req.getParameterMap());
+		Page<RollDeputyCross> page = new Page<RollDeputyCross>(pageNo, pageSize);
+		IPage<RollDeputyCross> pageList = rollDeputyCrossService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param rollDeputyCross
+	 * @return
+	 */
+	@AutoLog(value = "轧钢付跨-添加")
+	@ApiOperation(value="轧钢付跨-添加", notes="轧钢付跨-添加")
+	@RequiresPermissions("rollDeputyCross:roll_deputy_cross:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody RollDeputyCross rollDeputyCross) {
+		rollDeputyCrossService.save(rollDeputyCross);
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param rollDeputyCross
+	 * @return
+	 */
+	@AutoLog(value = "轧钢付跨-编辑")
+	@ApiOperation(value="轧钢付跨-编辑", notes="轧钢付跨-编辑")
+	@RequiresPermissions("rollDeputyCross:roll_deputy_cross:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody RollDeputyCross rollDeputyCross) {
+		rollDeputyCrossService.updateById(rollDeputyCross);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "轧钢付跨-通过id删除")
+	@ApiOperation(value="轧钢付跨-通过id删除", notes="轧钢付跨-通过id删除")
+	@RequiresPermissions("rollDeputyCross:roll_deputy_cross:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		rollDeputyCrossService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "轧钢付跨-批量删除")
+	@ApiOperation(value="轧钢付跨-批量删除", notes="轧钢付跨-批量删除")
+	@RequiresPermissions("rollDeputyCross:roll_deputy_cross:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.rollDeputyCrossService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "轧钢付跨-通过id查询")
+	@ApiOperation(value="轧钢付跨-通过id查询", notes="轧钢付跨-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<RollDeputyCross> queryById(@RequestParam(name="id",required=true) String id) {
+		RollDeputyCross rollDeputyCross = rollDeputyCrossService.getById(id);
+		if(rollDeputyCross==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(rollDeputyCross);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param rollDeputyCross
+    */
+    @RequiresPermissions("rollDeputyCross:roll_deputy_cross:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, RollDeputyCross rollDeputyCross) {
+        return super.exportXls(request, rollDeputyCross, RollDeputyCross.class, "轧钢付跨");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequiresPermissions("rollDeputyCross:roll_deputy_cross:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, RollDeputyCross.class);
+    }
+
+}

+ 163 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/controller/RollDeputyCrossDetailsController.java

@@ -0,0 +1,163 @@
+package org.jeecg.modules.billet.rollDeputyCross.controller;
+
+import java.util.Arrays;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.billet.rollDeputyCross.entity.RollDeputyCrossDetails;
+import org.jeecg.modules.billet.rollDeputyCross.service.IRollDeputyCrossDetailsService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+ /**
+ * @Description: 付跨明细
+ * @Author: jeecg-boot
+ * @Date:   2025-06-04
+ * @Version: V1.0
+ */
+@Api(tags="付跨明细")
+@RestController
+@RequestMapping("/billetHotsendBase/rollDeputyCrossDetails")
+@Slf4j
+public class RollDeputyCrossDetailsController extends JeecgController<RollDeputyCrossDetails, IRollDeputyCrossDetailsService> {
+	@Autowired
+	private IRollDeputyCrossDetailsService rollDeputyCrossDetailsService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param rollDeputyCrossDetails
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "付跨明细-分页列表查询")
+	@ApiOperation(value="付跨明细-分页列表查询", notes="付跨明细-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<RollDeputyCrossDetails>> queryPageList(RollDeputyCrossDetails rollDeputyCrossDetails,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<RollDeputyCrossDetails> queryWrapper = QueryGenerator.initQueryWrapper(rollDeputyCrossDetails, req.getParameterMap());
+		Page<RollDeputyCrossDetails> page = new Page<RollDeputyCrossDetails>(pageNo, pageSize);
+		IPage<RollDeputyCrossDetails> pageList = rollDeputyCrossDetailsService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param rollDeputyCrossDetails
+	 * @return
+	 */
+	@AutoLog(value = "付跨明细-添加")
+	@ApiOperation(value="付跨明细-添加", notes="付跨明细-添加")
+	@RequiresPermissions("rollDeputyCross:roll_deputy_cross_details:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody RollDeputyCrossDetails rollDeputyCrossDetails) {
+		rollDeputyCrossDetailsService.save(rollDeputyCrossDetails);
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param rollDeputyCrossDetails
+	 * @return
+	 */
+	@AutoLog(value = "付跨明细-编辑")
+	@ApiOperation(value="付跨明细-编辑", notes="付跨明细-编辑")
+	@RequiresPermissions("rollDeputyCross:roll_deputy_cross_details:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody RollDeputyCrossDetails rollDeputyCrossDetails) {
+		rollDeputyCrossDetailsService.updateById(rollDeputyCrossDetails);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "付跨明细-通过id删除")
+	@ApiOperation(value="付跨明细-通过id删除", notes="付跨明细-通过id删除")
+	@RequiresPermissions("rollDeputyCross:roll_deputy_cross_details:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		rollDeputyCrossDetailsService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "付跨明细-批量删除")
+	@ApiOperation(value="付跨明细-批量删除", notes="付跨明细-批量删除")
+	@RequiresPermissions("rollDeputyCross:roll_deputy_cross_details:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.rollDeputyCrossDetailsService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "付跨明细-通过id查询")
+	@ApiOperation(value="付跨明细-通过id查询", notes="付跨明细-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<RollDeputyCrossDetails> queryById(@RequestParam(name="id",required=true) String id) {
+		RollDeputyCrossDetails rollDeputyCrossDetails = rollDeputyCrossDetailsService.getById(id);
+		if(rollDeputyCrossDetails==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(rollDeputyCrossDetails);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param rollDeputyCrossDetails
+    */
+    @RequiresPermissions("rollDeputyCross:roll_deputy_cross_details:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, RollDeputyCrossDetails rollDeputyCrossDetails) {
+        return super.exportXls(request, rollDeputyCrossDetails, RollDeputyCrossDetails.class, "付跨明细");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequiresPermissions("rollDeputyCross:roll_deputy_cross_details:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, RollDeputyCrossDetails.class);
+    }
+
+}

+ 140 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/entity/RollDeputyCross.java

@@ -0,0 +1,140 @@
+package org.jeecg.modules.billet.rollDeputyCross.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 轧钢付跨
+ * @Author: jeecg-boot
+ * @Date:   2025-06-04
+ * @Version: V1.0
+ */
+@Data
+@TableName("roll_deputy_cross")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="roll_deputy_cross对象", description="轧钢付跨")
+public class RollDeputyCross implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+	/**所属部门*/
+    @ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+	/**日期*/
+	@Excel(name = "日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "日期")
+    private Date createDate;
+	/**铸机号*/
+	@Excel(name = "铸机号", width = 15)
+    @ApiModelProperty(value = "铸机号")
+    private String ccmNo;
+	/**炉号*/
+	@Excel(name = "炉号", width = 15)
+    @ApiModelProperty(value = "炉号")
+    private String heatNo;
+	/**班组*/
+	@Excel(name = "班组", width = 15)
+    @ApiModelProperty(value = "班组")
+    private String shiftGroup;
+	/**班别*/
+	@Excel(name = "班别", width = 15)
+    @ApiModelProperty(value = "班别")
+    private String shift;
+	/**定尺*/
+	@Excel(name = "定尺", width = 15)
+    @ApiModelProperty(value = "定尺")
+    private String size;
+	/**钢种*/
+	@Excel(name = "钢种", width = 15)
+    @ApiModelProperty(value = "钢种")
+    private String steel;
+	/**规格*/
+	@Excel(name = "规格", width = 15)
+    @ApiModelProperty(value = "规格")
+    private String spec;
+	/**定重*/
+	@Excel(name = "定重", width = 15)
+    @ApiModelProperty(value = "定重")
+    private Double decideWeight;
+	/**总支数*/
+	@Excel(name = "总支数", width = 15)
+    @ApiModelProperty(value = "总支数")
+    private Integer amountTotal;
+	/**出坯量*/
+	@Excel(name = "出坯量", width = 15)
+    @ApiModelProperty(value = "出坯量")
+    private Double blankOutput;
+	/**装运单ID*/
+	@Excel(name = "装运单ID", width = 15)
+    @ApiModelProperty(value = "装运单ID")
+    private String storageBillId;
+	/**C*/
+	@Excel(name = "C", width = 15)
+    @ApiModelProperty(value = "C")
+    private Double cc;
+	/**Mn*/
+	@Excel(name = "Mn", width = 15)
+    @ApiModelProperty(value = "Mn")
+    private Double mn;
+	/**Si*/
+	@Excel(name = "Si", width = 15)
+    @ApiModelProperty(value = "Si")
+    private Double si;
+	/**S*/
+	@Excel(name = "S", width = 15)
+    @ApiModelProperty(value = "S")
+    private Double ss;
+	/**P*/
+	@Excel(name = "P", width = 15)
+    @ApiModelProperty(value = "P")
+    private Double pp;
+	/**V*/
+	@Excel(name = "V", width = 15)
+    @ApiModelProperty(value = "V")
+    private Double vv;
+	/**Nb*/
+	@Excel(name = "Nb", width = 15)
+    @ApiModelProperty(value = "Nb")
+    private Double nb;
+	/**是否已编辑*/
+	@Excel(name = "是否已编辑", width = 15)
+    @ApiModelProperty(value = "是否已编辑")
+    private Integer isUpd;
+}

+ 134 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/entity/RollDeputyCrossDetails.java

@@ -0,0 +1,134 @@
+package org.jeecg.modules.billet.rollDeputyCross.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 付跨明细
+ * @Author: jeecg-boot
+ * @Date:   2025-06-04
+ * @Version: V1.0
+ */
+@Data
+@TableName("roll_deputy_cross_details")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="roll_deputy_cross_details对象", description="付跨明细")
+public class RollDeputyCrossDetails implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+	/**所属部门*/
+    @ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+	/**炉号*/
+	@Excel(name = "炉号", width = 15)
+    @ApiModelProperty(value = "炉号")
+    private String heatNo;
+	/**坯号*/
+	@Excel(name = "坯号", width = 15)
+    @ApiModelProperty(value = "坯号")
+    private String billetNo;
+	/**装运单ID*/
+	@Excel(name = "装运单ID", width = 15)
+    @ApiModelProperty(value = "装运单ID")
+    private String storageBillId;
+	/**起始根数*/
+	@Excel(name = "起始根数", width = 15)
+    @ApiModelProperty(value = "起始根数")
+    private Integer startNum;
+	/**结束根数*/
+	@Excel(name = "结束根数", width = 15)
+    @ApiModelProperty(value = "结束根数")
+    private Integer endNum;
+	/**堆垛层号(1-20)*/
+	@Excel(name = "堆垛层号(1-20)", width = 15)
+    @ApiModelProperty(value = "堆垛层号(1-20)")
+    private String stackStorey;
+	/**堆垛编号(1-9)*/
+	@Excel(name = "堆垛编号(1-9)", width = 15)
+    @ApiModelProperty(value = "堆垛编号(1-9)")
+    private String stackNum;
+	/**垛位*/
+	@Excel(name = "垛位", width = 15)
+    @ApiModelProperty(value = "垛位")
+    private String stackAddr;
+	/**堆垛起始跟*/
+	@Excel(name = "堆垛起始跟", width = 15)
+    @ApiModelProperty(value = "堆垛起始跟")
+    private Integer startNumStack;
+	/**堆垛结束跟*/
+	@Excel(name = "堆垛结束跟", width = 15)
+    @ApiModelProperty(value = "堆垛结束跟")
+    private Integer endNumStack;
+	/**班别*/
+	@Excel(name = "班别", width = 15)
+    @ApiModelProperty(value = "班别")
+    private String shift;
+	/**班组*/
+	@Excel(name = "班组", width = 15)
+    @ApiModelProperty(value = "班组")
+    private String shiftGroup;
+	/**钢种*/
+	@Excel(name = "钢种", width = 15)
+    @ApiModelProperty(value = "钢种")
+    private String steel;
+	/**规格*/
+	@Excel(name = "规格", width = 15)
+    @ApiModelProperty(value = "规格")
+    private String spec;
+	/**定尺*/
+	@Excel(name = "定尺", width = 15)
+    @ApiModelProperty(value = "定尺")
+    private String size;
+	/**车牌号*/
+	@Excel(name = "车牌号", width = 15)
+    @ApiModelProperty(value = "车牌号")
+    private String licensePlate;
+	/**铸机号*/
+	@Excel(name = "铸机号", width = 15)
+    @ApiModelProperty(value = "铸机号")
+    private String ccmNo;
+	/**出坯量*/
+	@Excel(name = "出坯量", width = 15)
+    @ApiModelProperty(value = "出坯量")
+    private Double blankOutput;
+	/**组坯号*/
+	@Excel(name = "组坯号", width = 15)
+    @ApiModelProperty(value = "组坯号")
+    private String assemblyNumber;
+}

+ 14 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/mapper/RollDeputyCrossDetailsMapper.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.billet.rollDeputyCross.mapper;
+
+import org.jeecg.modules.billet.rollDeputyCross.entity.RollDeputyCrossDetails;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 付跨明细
+ * @Author: jeecg-boot
+ * @Date:   2025-06-04
+ * @Version: V1.0
+ */
+public interface RollDeputyCrossDetailsMapper extends BaseMapper<RollDeputyCrossDetails> {
+
+}

+ 14 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/mapper/RollDeputyCrossMapper.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.billet.rollDeputyCross.mapper;
+
+import org.jeecg.modules.billet.rollDeputyCross.entity.RollDeputyCross;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 轧钢付跨
+ * @Author: jeecg-boot
+ * @Date:   2025-06-04
+ * @Version: V1.0
+ */
+public interface RollDeputyCrossMapper extends BaseMapper<RollDeputyCross> {
+
+}

+ 5 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/mapper/xml/RollDeputyCrossDetailsMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.billet.rollDeputyCross.mapper.RollDeputyCrossDetailsMapper">
+
+</mapper>

+ 5 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/mapper/xml/RollDeputyCrossMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.billet.rollDeputyCross.mapper.RollDeputyCrossMapper">
+
+</mapper>

+ 14 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/service/IRollDeputyCrossDetailsService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.billet.rollDeputyCross.service;
+
+import org.jeecg.modules.billet.rollDeputyCross.entity.RollDeputyCrossDetails;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 付跨明细
+ * @Author: jeecg-boot
+ * @Date:   2025-06-04
+ * @Version: V1.0
+ */
+public interface IRollDeputyCrossDetailsService extends IService<RollDeputyCrossDetails> {
+
+}

+ 14 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/service/IRollDeputyCrossService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.billet.rollDeputyCross.service;
+
+import org.jeecg.modules.billet.rollDeputyCross.entity.RollDeputyCross;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 轧钢付跨
+ * @Author: jeecg-boot
+ * @Date:   2025-06-04
+ * @Version: V1.0
+ */
+public interface IRollDeputyCrossService extends IService<RollDeputyCross> {
+
+}

+ 19 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/service/impl/RollDeputyCrossDetailsServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.billet.rollDeputyCross.service.impl;
+
+import org.jeecg.modules.billet.rollDeputyCross.entity.RollDeputyCrossDetails;
+import org.jeecg.modules.billet.rollDeputyCross.mapper.RollDeputyCrossDetailsMapper;
+import org.jeecg.modules.billet.rollDeputyCross.service.IRollDeputyCrossDetailsService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 付跨明细
+ * @Author: jeecg-boot
+ * @Date:   2025-06-04
+ * @Version: V1.0
+ */
+@Service
+public class RollDeputyCrossDetailsServiceImpl extends ServiceImpl<RollDeputyCrossDetailsMapper, RollDeputyCrossDetails> implements IRollDeputyCrossDetailsService {
+
+}

+ 19 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollDeputyCross/service/impl/RollDeputyCrossServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.billet.rollDeputyCross.service.impl;
+
+import org.jeecg.modules.billet.rollDeputyCross.entity.RollDeputyCross;
+import org.jeecg.modules.billet.rollDeputyCross.mapper.RollDeputyCrossMapper;
+import org.jeecg.modules.billet.rollDeputyCross.service.IRollDeputyCrossService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 轧钢付跨
+ * @Author: jeecg-boot
+ * @Date:   2025-06-04
+ * @Version: V1.0
+ */
+@Service
+public class RollDeputyCrossServiceImpl extends ServiceImpl<RollDeputyCrossMapper, RollDeputyCross> implements IRollDeputyCrossService {
+
+}

+ 93 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/stackingAndLoadingVehicles/service/impl/StackingAndLoadingVehiclesServiceImpl.java

@@ -29,6 +29,10 @@ import org.jeecg.modules.billet.rollClubTwo.entity.RollClubTwo;
 import org.jeecg.modules.billet.rollClubTwo.entity.RollClubTwoDetails;
 import org.jeecg.modules.billet.rollClubTwo.service.IRollClubTwoDetailsService;
 import org.jeecg.modules.billet.rollClubTwo.service.IRollClubTwoService;
+import org.jeecg.modules.billet.rollDeputyCross.entity.RollDeputyCross;
+import org.jeecg.modules.billet.rollDeputyCross.entity.RollDeputyCrossDetails;
+import org.jeecg.modules.billet.rollDeputyCross.service.IRollDeputyCrossDetailsService;
+import org.jeecg.modules.billet.rollDeputyCross.service.IRollDeputyCrossService;
 import org.jeecg.modules.billet.rollHeight.entity.RollHeight;
 import org.jeecg.modules.billet.rollHeight.entity.RollHeightDetails;
 import org.jeecg.modules.billet.rollHeight.service.IRollHeightDetailsService;
@@ -112,6 +116,10 @@ public class StackingAndLoadingVehiclesServiceImpl extends ServiceImpl<StackingA
     private IRollHeightService rollHeightService;
     @Autowired
     private IRollHeightDetailsService rollHeightDetailsService;
+    @Autowired
+    private IRollDeputyCrossService rollDeputyCrossService;
+    @Autowired
+    private IRollDeputyCrossDetailsService rollDeputyCrossDetailsService;
 
     @Override
     public List<StackingAndLoadingVehicles> getListByTypeConfigId(String typeConfigId) {
@@ -192,7 +200,10 @@ public class StackingAndLoadingVehiclesServiceImpl extends ServiceImpl<StackingA
                 billetHotsend.setRollclubthreeNum(oConvertUtils.isNotEmpty(idExistBh.getRollclubthreeNum()) ? idExistBh.getRollclubthreeNum() + groupRollClubCommonList.size() : groupRollClubCommonList.size());
             } else if ("roll_out_shipp".equals(loadingParams.getDestinationTable())) {
                 billetHotsend.setRolloutshippNum(oConvertUtils.isNotEmpty(idExistBh.getRolloutshippNum()) ? idExistBh.getRolloutshippNum() + groupRollClubCommonList.size() : groupRollClubCommonList.size());
+            }else if ("roll_deputy_cross".equals(loadingParams.getDestinationTable())) {
+                billetHotsend.setRollDeputyCrossNum(oConvertUtils.isNotEmpty(idExistBh.getRollDeputyCrossNum()) ? idExistBh.getRollDeputyCrossNum() + groupRollClubCommonList.size() : groupRollClubCommonList.size());
             }
+
             billetHotsend.setUpdateTime(new Date());
             billetHotsendBaseService.updateById(billetHotsend);
         }
@@ -303,6 +314,7 @@ public class StackingAndLoadingVehiclesServiceImpl extends ServiceImpl<StackingA
         List<RollClubThreeDetails> addRollClubThreeDetailsList = new ArrayList<>();
         List<RollOutShippDetails> addRollOutShippDetailsList = new ArrayList<>();
         List<RollHeightDetails> rollHeightDetailsList = new ArrayList<>();
+        List<RollDeputyCrossDetails> addRollDeputyCrossDetailsList = new ArrayList<>();
 
         stackingAndLoadingVehiclesList.forEach(x -> {
             StackingDownLog stackingDownLog = new StackingDownLog();
@@ -570,6 +582,63 @@ public class StackingAndLoadingVehiclesServiceImpl extends ServiceImpl<StackingA
                         .collect(Collectors.joining(","));
                 rollHeightDetails.setAssemblyNumber(distinctAssemblyNumber);
                 rollHeightDetailsList.add(rollHeightDetails);
+            }else if ("roll_deputy_cross".equals(loadingParams.getDestinationTable())) {
+                billetBasicInfoList.forEach(y -> {
+                    LambdaQueryWrapper<RollDeputyCross> queryWrapper1 = new LambdaQueryWrapper<>();
+                    queryWrapper1.eq(RollDeputyCross::getCcmNo, y.getCcmNo().toString())
+                            .eq(RollDeputyCross::getHeatNo, y.getHeatNo())
+                            .eq(RollDeputyCross::getShift, finalCacheShint)
+                            .eq(RollDeputyCross::getShiftGroup, finalCacheShintGroup)
+                            .eq(RollDeputyCross::getStorageBillId, storageBill.getId());
+                    RollDeputyCross rollDeputyCross1 = rollDeputyCrossService.getOne(queryWrapper1);
+                    RollDeputyCross rollDeputyCross = new RollDeputyCross();
+                    if (oConvertUtils.isEmpty(rollDeputyCross1)) {
+                        // 堆垛保存发车时 目的地为为付跨 保存付跨信息
+                        rollDeputyCross.setId(String.valueOf(IdWorker.getId()));
+                        rollDeputyCross.setCcmNo(y.getCcmNo().toString());
+                        rollDeputyCross.setHeatNo(y.getHeatNo());
+                        rollDeputyCross.setSize(y.getLength().toString());
+                        rollDeputyCross.setAmountTotal(1);
+                        rollDeputyCross.setSteel(y.getGrade());
+                        rollDeputyCross.setSpec(y.getSpec());
+                        rollDeputyCross.setShiftGroup(finalCacheShintGroup);
+                        rollDeputyCross.setShift(finalCacheShint);
+                        rollDeputyCross.setBlankOutput(oConvertUtils.isEmpty(y.getBilletWeight()) ? 0L : y.getBilletWeight());
+                        rollDeputyCross.setStorageBillId(storageBill.getId());
+                        rollDeputyCross.setCreateDate(new Date());
+                        rollDeputyCross.setCreateTime(new Date());
+                        rollDeputyCrossService.save(rollDeputyCross);
+                    } else {
+                        // 堆垛保存发车时 目的地为为付跨 更新付跨信息
+                        rollDeputyCross1.setAmountTotal(rollDeputyCross1.getAmountTotal() + 1);// 总支数
+                        rollDeputyCross1.setBlankOutput(rollDeputyCross1.getBlankOutput() + y.getBilletWeight());
+                        rollDeputyCross1.setUpdateTime(new Date());
+                        rollDeputyCrossService.updateById(rollDeputyCross1);
+                    }
+                });
+
+                RollDeputyCrossDetails rollDeputyCrossDetails = new RollDeputyCrossDetails();
+                BeanUtils.copyProperties(x, rollDeputyCrossDetails);
+                rollDeputyCrossDetails.setHeatNo(String.join(",", heatNos));
+                rollDeputyCrossDetails.setBilletNo(x.getBilletNos());
+                rollDeputyCrossDetails.setShiftGroup(finalCacheShintGroup);
+                rollDeputyCrossDetails.setShift(finalCacheShint);
+                rollDeputyCrossDetails.setStorageBillId(storageBill.getId());
+                rollDeputyCrossDetails.setStackStorey(x.getLayer());
+                rollDeputyCrossDetails.setStackNum(x.getAddress());
+                rollDeputyCrossDetails.setLicensePlate(storageBill.getLicensePlate());
+                rollDeputyCrossDetails.setId(String.valueOf(IdWorker.getId()));
+                rollDeputyCrossDetails.setCreateTime(new Date());
+                rollDeputyCrossDetails.setUpdateTime(new Date());
+                rollDeputyCrossDetails.setBlankOutput(billetWeightTotal);//出坯量
+
+                String distinctAssemblyNumber = billetBasicInfoList.stream()
+                        .map(BilletBasicInfo::getAssemblyNumber)
+                        .filter(assemblyNumber -> oConvertUtils.isNotEmpty(assemblyNumber))
+                        .distinct()
+                        .collect(Collectors.joining(","));
+                rollDeputyCrossDetails.setAssemblyNumber(distinctAssemblyNumber);
+                addRollDeputyCrossDetailsList.add(rollDeputyCrossDetails);
             }
         });
         stackingDownLogService.saveBatch(stackingDownLogList);
@@ -582,6 +651,8 @@ public class StackingAndLoadingVehiclesServiceImpl extends ServiceImpl<StackingA
             rollOutShippDetailsService.saveBatch(addRollOutShippDetailsList);
         } else if ("roll_height".equals(loadingParams.getDestinationTable())) {
             rollHeightDetailsService.saveBatch(rollHeightDetailsList);
+        }else if ("roll_deputy_cross".equals(loadingParams.getDestinationTable())) {
+            rollDeputyCrossDetailsService.saveBatch(addRollDeputyCrossDetailsList);
         }
     }
 
@@ -657,6 +728,8 @@ public class StackingAndLoadingVehiclesServiceImpl extends ServiceImpl<StackingA
                 billetHotsend.setRolloutshippNum(oConvertUtils.isNotEmpty(idExistBh.getRolloutshippNum()) ? idExistBh.getRolloutshippNum() + groupRollClubCommonList.size() : groupRollClubCommonList.size());
             } else if ("roll_height".equals(loadingParams.getDestinationTable())) {
                 billetHotsend.setRollheightNum(oConvertUtils.isNotEmpty(idExistBh.getRollheightNum()) ? idExistBh.getRollheightNum() + groupRollClubCommonList.size() : groupRollClubCommonList.size());
+            } else if ("roll_deputy_cross".equals(loadingParams.getDestinationTable())) {
+                billetHotsend.setRollDeputyCrossNum(oConvertUtils.isNotEmpty(idExistBh.getRollDeputyCrossNum()) ? idExistBh.getRollDeputyCrossNum() + groupRollClubCommonList.size() : groupRollClubCommonList.size());
             }
             billetHotsend.setUpdateTime(new Date());
             billetHotsendBaseService.updateById(billetHotsend);
@@ -699,6 +772,16 @@ public class StackingAndLoadingVehiclesServiceImpl extends ServiceImpl<StackingA
             heatNoList = rollOutShippDetailsList.stream().map(RollOutShippDetails::getHeatNo).distinct()
                     .collect(Collectors.toList());
         }
+
+        if ("roll_deputy_cross".equals(loadingParams.getDestinationTable())) {
+            LambdaQueryWrapper<RollDeputyCrossDetails> queryWrapperRCD = new LambdaQueryWrapper();
+            queryWrapperRCD.eq(RollDeputyCrossDetails::getCcmNo, storageBill.getCcmNo()).eq(RollDeputyCrossDetails::getStorageBillId, storageBill.getId());
+            List<RollDeputyCrossDetails> rollDeputyCrossDetailsList = rollDeputyCrossDetailsService.list(queryWrapperRCD);
+            sizeList = rollDeputyCrossDetailsList.stream().map(RollDeputyCrossDetails::getSize).distinct()
+                    .collect(Collectors.toList());
+            heatNoList = rollDeputyCrossDetailsList.stream().map(RollDeputyCrossDetails::getHeatNo).distinct()
+                    .collect(Collectors.toList());
+        }
         if ("roll_height".equals(loadingParams.getDestinationTable())) {
             result.put("success", "堆垛去高线发车操作成功!");
             return result;
@@ -804,6 +887,16 @@ public class StackingAndLoadingVehiclesServiceImpl extends ServiceImpl<StackingA
                 BigDecimal bd = BigDecimal.valueOf(totalBlankOutputs).setScale(4, BigDecimal.ROUND_HALF_UP);
                 storageCarLog.setFixedWeight(bd.doubleValue());// 定重
             }
+        }else if ("付跨".equals(storageBillInfo.getDestination())) {
+            // 根据装运单ID,查询付跨明细表
+            LambdaQueryWrapper<RollDeputyCrossDetails> queryWrapperRCD = new LambdaQueryWrapper();
+            queryWrapperRCD.eq(RollDeputyCrossDetails::getStorageBillId, storageBillInfo.getId());
+            List<RollDeputyCrossDetails> rollDeputyCrossDetailsList = rollDeputyCrossDetailsService.list(queryWrapperRCD);
+            if (oConvertUtils.listIsNotEmpty(rollDeputyCrossDetailsList)){
+                double totalBlankOutputs = rollDeputyCrossDetailsList.stream().mapToDouble(RollDeputyCrossDetails::getBlankOutput).sum();
+                BigDecimal bd = BigDecimal.valueOf(totalBlankOutputs).setScale(4, BigDecimal.ROUND_HALF_UP);
+                storageCarLog.setFixedWeight(bd.doubleValue());// 定重
+            }
         }
         storageCarLogService.save(storageCarLog);
         result.put("success", "堆垛发车操作成功");

+ 10 - 1
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/storageBill/controller/StorageBillController.java

@@ -46,6 +46,10 @@ import org.jeecg.modules.billet.rollClubTwo.entity.RollClubTwo;
 import org.jeecg.modules.billet.rollClubTwo.entity.RollClubTwoDetails;
 import org.jeecg.modules.billet.rollClubTwo.service.IRollClubTwoDetailsService;
 import org.jeecg.modules.billet.rollClubTwo.service.IRollClubTwoService;
+import org.jeecg.modules.billet.rollDeputyCross.entity.RollDeputyCross;
+import org.jeecg.modules.billet.rollDeputyCross.entity.RollDeputyCrossDetails;
+import org.jeecg.modules.billet.rollDeputyCross.service.IRollDeputyCrossDetailsService;
+import org.jeecg.modules.billet.rollDeputyCross.service.IRollDeputyCrossService;
 import org.jeecg.modules.billet.rollHeight.entity.RollHeightDetails;
 import org.jeecg.modules.billet.rollHeight.service.IRollHeightDetailsService;
 import org.jeecg.modules.billet.rollOutShipp.entity.RollOutShipp;
@@ -154,6 +158,12 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 
 	@Autowired
 	private ICarUnitService carUnitService;
+
+	@Autowired
+	private IRollDeputyCrossService rollDeputyCrossService;
+
+	@Autowired
+	private IRollDeputyCrossDetailsService rollDeputyCrossDetailsService;
 	/**
 	 * 分页列表查询
 	 *
@@ -680,7 +690,6 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 					TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
 					return Result.error("钢坯配置信息为空,移除失败!");
 				}
-
 				List<StackingAndLoadingVehicles> stackingAndLoadingVehiclesList = new ArrayList<>();
 				StackingAndLoadingVehicles stackingAndLoadingVehiclesInfo = new StackingAndLoadingVehicles();
 				stackingAndLoadingVehiclesInfo.setCcmNo(storageBillVo.getCcmNo());

+ 3 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/storageBill/entity/BilletHotsendDetails.java

@@ -4,6 +4,7 @@ import lombok.Data;
 import org.jeecg.modules.billet.rollClubOne.entity.RollClubOneDetails;
 import org.jeecg.modules.billet.rollClubThree.entity.RollClubThreeDetails;
 import org.jeecg.modules.billet.rollClubTwo.entity.RollClubTwoDetails;
+import org.jeecg.modules.billet.rollDeputyCross.entity.RollDeputyCrossDetails;
 import org.jeecg.modules.billet.rollHeight.entity.RollHeightDetails;
 import org.jeecg.modules.billet.rollOutShipp.entity.RollOutShippDetails;
 
@@ -26,4 +27,6 @@ public class BilletHotsendDetails {
 //
 //    private List<StackingDownLogDetails> stackingDownLogDetailsList;
 
+//    private List<RollDeputyCrossDetails> rollDeputyCrossDetailsList;
+
 }

+ 0 - 4
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/storageBill/service/IStorageBillService.java

@@ -90,10 +90,6 @@ public interface IStorageBillService extends IService<StorageBill> {
 
     StorageCenterHeatNoVO storageCenterHeatNoInfo(StorageCenterQueryDTO queryDTO);
 
-    Page<StorageCenterInvoicingVO> storageCenterInvoicingInfo(StorageCenterQueryDTO queryDTO);
-
-    List<StorageCenterInvoicingVO> storageCenterInvoicingInfoList(StorageCenterQueryDTO queryDTO);
-
     StorageCenterHeatNoDetailVO storageCenterByHeatNo(String heatNo);
 
     StorageCenterHeatNoInvoicingVO storageCenterInvoicingByHeatNo(String heatNo);

+ 77 - 632
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/storageBill/service/impl/StorageBillServiceImpl.java

@@ -47,6 +47,10 @@ import org.jeecg.modules.billet.rollClubTwo.entity.RollClubTwoDetails;
 import org.jeecg.modules.billet.rollClubTwo.mapper.RollClubTwoDetailsMapper;
 import org.jeecg.modules.billet.rollClubTwo.service.IRollClubTwoDetailsService;
 import org.jeecg.modules.billet.rollClubTwo.service.IRollClubTwoService;
+import org.jeecg.modules.billet.rollDeputyCross.entity.RollDeputyCross;
+import org.jeecg.modules.billet.rollDeputyCross.entity.RollDeputyCrossDetails;
+import org.jeecg.modules.billet.rollDeputyCross.service.IRollDeputyCrossDetailsService;
+import org.jeecg.modules.billet.rollDeputyCross.service.IRollDeputyCrossService;
 import org.jeecg.modules.billet.rollHeight.entity.DestinationStatisticsDetails;
 import org.jeecg.modules.billet.rollHeight.entity.RollHeightDetails;
 import org.jeecg.modules.billet.rollHeight.mapper.RollHeightDetailsMapper;
@@ -177,6 +181,12 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
     @Autowired
     private BilletAutoTmpMapper billetAutoTmpMapper;
 
+    @Autowired
+    private IRollDeputyCrossService rollDeputyCrossService;
+
+    @Autowired
+    private IRollDeputyCrossDetailsService rollDeputyCrossDetailsService;
+
 
     @Override
     public void departHandle(BilletHotsendDetailsVo billetHotsendDetailsVo) {
@@ -269,29 +279,10 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         processRollHeightDetails(rollHeightDetails);
         result.setRollHeightDetails(rollHeightDetails);
 
-        //        List<StackingDownLogDetails> stackingDownLogDetailsList = new ArrayList<>();
-//        List<StackingDownLog> stackingDownLogList = stackingDownLogService.list(new LambdaQueryWrapper<StackingDownLog>().eq(StackingDownLog::getStorageBillId, storageBill.getId()));
-//        if (oConvertUtils.listIsEmpty(stackingDownLogList)){
-//            result.setStackingDownLogList(stackingDownLogList);
-//            result.setStackingDownLogDetailsList(stackingDownLogDetailsList);
-//            return result;
-//        }
-//        StackingDownLog stackingDownLog = stackingDownLogList.stream().findFirst().orElse(null);
-//        List<String> stringList = Arrays.stream(stackingDownLog.getBilletNo().split(","))
-//                .collect(Collectors.toList());
-//        LambdaQueryWrapper<BilletBasicInfo> queryWrapper = new LambdaQueryWrapper<>();
-//        queryWrapper.eq(BilletBasicInfo::getBilletNo, stringList.get(0));
-//        BilletBasicInfo billetBasicInfo = billetBasicInfoService.list(queryWrapper).stream().findFirst().orElse(null);
-//        stackingDownLogList.forEach(x ->{
-//            StackingDownLogDetails stackingDownLogDetails = new StackingDownLogDetails();
-//            BeanUtils.copyProperties(x, stackingDownLogDetails);
-//            stackingDownLogDetails.setGrade(billetBasicInfo.getGrade());
-//            stackingDownLogDetails.setSpec(billetBasicInfo.getSpec());
-//            stackingDownLogDetails.setLength(billetBasicInfo.getLength());
-//            stackingDownLogDetailsList.add(stackingDownLogDetails);
-//        });
-//        result.setStackingDownLogList(stackingDownLogList);
-//        result.setStackingDownLogDetailsList(stackingDownLogDetailsList);
+//        List<RollDeputyCrossDetails> rollDeputyCrossDetailsList = rollDeputyCrossDetailsService.list(new LambdaQueryWrapper<RollDeputyCrossDetails>().in(RollDeputyCrossDetails::getStorageBillId, idList));
+//        processRollDeputyCrossDetails(rollDeputyCrossDetailsList);
+//        result.setRollDeputyCrossDetailsList(rollDeputyCrossDetailsList);
+//
         return result;
     }
 
@@ -372,39 +363,6 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
 //                storageBill.setPositionNum(1);
 //            }
             storageBill.setArrivalTime(new Date());// 到达时间
-//            LambdaQueryWrapper<StorageBill> queryWrapper1 = new LambdaQueryWrapper<>();
-//            queryWrapper1.eq(StorageBill::getCcmNo, storageBill.getCcmNo())
-//                    .eq(StorageBill::getLicensePlate, storageBill.getLicensePlate())
-//                    .eq(StorageBill::getShiftGroup, shiftGroup)
-//                    .eq(StorageBill::getShift, shift).between(StorageBill::getCreateTime, DateUtils.getStartOfDay(), DateUtils.getEndOfDay());
-//            long carNum = baseMapper.selectCount(queryWrapper1);
-//            storageBill.setCarNum(Math.toIntExact(carNum) + 1);
-
-//            LambdaQueryWrapper<StorageBill> queryWrapper2 = new LambdaQueryWrapper<>();
-//            queryWrapper2.eq(StorageBill::getCcmNo, storageBill.getCcmNo())
-//                    .eq(StorageBill::getShiftGroup, shiftGroup)
-//                    .eq(StorageBill::getShift, shift).between(StorageBill::getCreateTime, DateUtils.getStartOfDay(), DateUtils.getEndOfDay());
-//            long carAllNum = baseMapper.selectCount(queryWrapper2);
-//            storageBill.setCarAllNum(Math.toIntExact(carAllNum) + 1);
-
-            // 通过铸机号、班组、班别去查询交班记录并初始化 车次
-//            LambdaQueryWrapper<BilletHotsendChangeShift> queryWrapper3 = new LambdaQueryWrapper<>();
-//            queryWrapper3.eq(BilletHotsendChangeShift::getCcmNo, storageBill.getCcmNo())
-//                    .eq(BilletHotsendChangeShift::getShiftGroup, shiftGroup)
-//                    .eq(BilletHotsendChangeShift::getShift, shift).between(BilletHotsendChangeShift::getCreateTime, DateUtils.getStartOfDay(), DateUtils.getEndOfDay());
-//            BilletHotsendChangeShift billetHotsendChangeShift = billetHotsendChangeShiftService.getOne(queryWrapper3);
-//            if (oConvertUtils.isNotEmpty(billetHotsendChangeShift)){
-//                // 通过铸机号、班组、班别查询 当班装运单总数
-//                LambdaQueryWrapper<StorageBill> queryWrapper4 = new LambdaQueryWrapper<>();
-//                queryWrapper4.eq(StorageBill::getCcmNo, storageBill.getCcmNo())
-//                        .eq(StorageBill::getShiftGroup, shiftGroup)
-//                        .eq(StorageBill::getShift, shift)
-//                        .between(StorageBill::getCreateTime, DateUtils.getStartOfDay(), DateUtils.getEndOfDay());
-//                long amountTotal = baseMapper.selectCount(queryWrapper4);
-//                billetHotsendChangeShift.setOutCarNum(Math.toIntExact(amountTotal));
-//                billetHotsendChangeShift.setUpdateTime(new Date());
-//                billetHotsendChangeShiftService.updateById(billetHotsendChangeShift);
-//            }
             // 更新交班记录 通过铸机号、班组、班别去查询交班记录并初始化 出车号
             updateBilletHotsendChangeShift(storageBill.getCcmNo(), shiftGroup, shift);
 
@@ -1008,9 +966,8 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         }
 
 
-        // 合并三个列表并根据 size 分组统计
-        List<DestinationStatisticsDetails> mergedList = Stream.of(statisticsDetailsList1, statisticsDetailsList2, statisticsDetailsList3)
-                .flatMap(Collection::stream) // 将所有列表合并成一个流
+        // 合并两个列表并根据 size 分组统计
+        List<DestinationStatisticsDetails> mergedList = Stream.concat(statisticsDetailsList1.stream(), statisticsDetailsList2.stream())
                 .collect(Collectors.groupingBy(DestinationStatisticsDetails::getSize))
                 .entrySet().stream()
                 .map(entry -> {
@@ -1181,25 +1138,6 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
                 }
             }
         });
-
-
-        // 合并两个列表并根据 size 分组统计
-/*        List<DestinationStatisticsDetails> mergedList = Stream.concat(statisticsDetailsList1.stream(), statisticsDetailsList2.stream())
-                .collect(Collectors.groupingBy(DestinationStatisticsDetails::getSize))
-                .entrySet().stream()
-                .map(entry -> {
-                    String size = entry.getKey();
-                    List<DestinationStatisticsDetails> group = entry.getValue();
-                    int totalNums = group.stream().mapToInt(DestinationStatisticsDetails::getNums).sum();
-                    double totalBlankOutput = group.stream().mapToDouble(DestinationStatisticsDetails::getBlankOutput).sum();
-                    BigDecimal bd = BigDecimal.valueOf(totalBlankOutput).setScale(4, BigDecimal.ROUND_HALF_UP);
-                    double finalBlankOutput = bd.doubleValue();
-                    String ccmNoForGroup = group.isEmpty() ? null : group.get(0).getCcmNo();
-                    return new DestinationStatisticsDetails(size, totalNums, finalBlankOutput, ccmNoForGroup);
-                }).collect(Collectors.toList());
-        log.info("{}{}", "合并后的列表:", JSON.toJSON(mergedList));
-        onDutyStatisticsReport.setStatisticsDetailsList(mergedList);*/
-
         result.put("data", jsonArray);
 
         return result;
@@ -1246,6 +1184,12 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
             }else {
                 billetHotsend.setRolloutshippNum(check.getRolloutshippNum() + rollClubCommonList.size());
             }
+        }else if ("roll_deputy_cross".equals(billetHotsendDetailsVo.getBelongTable()) && "0".equals(billetHotsendTypeConfig.getBelongType().toString())){
+            if (oConvertUtils.isEmpty(check.getRollDeputyCrossNum())){
+                billetHotsend.setRollDeputyCrossNum(rollClubCommonList.size());
+            }else {
+                billetHotsend.setRollDeputyCrossNum(check.getRollDeputyCrossNum() + rollClubCommonList.size());
+            }
         }
         billetHotsend.setUpdateTime(new Date());
         LambdaUpdateWrapper<BilletHotsend> updateWrapper = new LambdaUpdateWrapper<>();
@@ -1400,6 +1344,56 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
             });
             rollOutShippDetailsService.saveBatch(rollOutShippDetailsList);
         }
+
+        /**
+         * 保存付跨信息
+         */
+        if ("roll_deputy_cross".equals(billetHotsendDetailsVo.getBelongTable())){
+            RollDeputyCross rollDeputyCross = new RollDeputyCross();
+            BeanUtils.copyProperties(billetHotsend, rollDeputyCross);
+
+            rollDeputyCross.setSize(String.valueOf(rollClubCommonList.stream().findFirst().orElse(null).getLength())); //定尺
+            rollDeputyCross.setSteel(String.valueOf(rollClubCommonList.stream().findFirst().orElse(null).getGrade())); //钢种
+            rollDeputyCross.setSpec(String.valueOf(rollClubCommonList.stream().findFirst().orElse(null).getSpec())); //规格
+            rollDeputyCross.setBlankOutput(rollClubCommonList.stream().mapToDouble(RollClubCommon::getBilletWeight).sum());//出坯量总和
+            rollDeputyCross.setStorageBillId(storageBill.getId());
+            LambdaQueryWrapper<RollDeputyCross> queryWrapper1 = new LambdaQueryWrapper<>();
+            queryWrapper1.eq(RollDeputyCross::getCcmNo, billetHotsend.getCcmNo())
+                    .eq(RollDeputyCross::getHeatNo, billetHotsend.getHeatNo())
+                    .eq(RollDeputyCross::getShift, billetHotsend.getShift())
+                    .eq(RollDeputyCross::getShiftGroup, billetHotsend.getShiftGroup())
+                    .eq(RollDeputyCross::getStorageBillId, storageBill.getId());
+            RollDeputyCross rollDeputyCross1 = rollDeputyCrossService.getOne(queryWrapper1);
+            if (oConvertUtils.isEmpty(rollDeputyCross1)){
+                rollDeputyCross.setCreateDate(new Date());
+                rollDeputyCross.setAmountTotal(rollClubCommonList.size());// 总支数
+                rollDeputyCrossService.save(rollDeputyCross);
+            }else {
+                rollDeputyCross.setId(rollDeputyCross1.getId());
+                rollDeputyCross.setAmountTotal(rollDeputyCross1.getAmountTotal() + rollClubCommonList.size());// 总支数
+                rollDeputyCross.setBlankOutput(rollDeputyCross1.getBlankOutput() + rollDeputyCross.getBlankOutput());//出坯量
+                rollDeputyCross.setUpdateTime(new Date());
+                rollDeputyCrossService.updateById(rollDeputyCross);
+            }
+            // 保存付跨明细信息
+            List<RollDeputyCrossDetails> rollDeputyCrossDetailsList = new ArrayList<>();
+            rollClubCommonList.forEach(x ->{
+                RollDeputyCrossDetails rollDeputyCrossDetails = new RollDeputyCrossDetails();
+                BeanUtils.copyProperties(x, rollDeputyCrossDetails);
+                rollDeputyCrossDetails.setId(String.valueOf(IdWorker.getId()));
+                rollDeputyCrossDetails.setShift(x.getShift());
+                rollDeputyCrossDetails.setShiftGroup(x.getShiftGroup());
+                rollDeputyCrossDetails.setStorageBillId(storageBill.getId());
+                rollDeputyCrossDetails.setLicensePlate(storageBill.getLicensePlate());
+                rollDeputyCrossDetails.setSize(String.valueOf(x.getLength()));
+                rollDeputyCrossDetails.setSteel(x.getGrade());
+                rollDeputyCrossDetails.setCreateTime(new Date(System.currentTimeMillis() + timeOffset.get()));
+                rollDeputyCrossDetails.setBlankOutput(x.getBilletWeight());//出坯量
+                rollDeputyCrossDetailsList.add(rollDeputyCrossDetails);
+                timeOffset.addAndGet(1000); // 这里假设每次增加1秒(1000毫秒)的时间偏移量
+            });
+            rollDeputyCrossDetailsService.saveBatch(rollDeputyCrossDetailsList);
+        }
         return result;
     }
 
@@ -1865,7 +1859,7 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
 
         // 合并三个列表并根据 size 分组统计
         List<DestinationStatisticsDetails> mergedList = Stream.concat(
-                        Stream.concat(statisticsDetailsList1.stream(), statisticsDetailsList2.stream()),
+                Stream.concat(statisticsDetailsList1.stream(), statisticsDetailsList2.stream()),
                         statisticsDetailsList3.stream()
                 ).collect(Collectors.groupingBy(DestinationStatisticsDetails::getSize))
                 .entrySet().stream()
@@ -2452,7 +2446,6 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
 
         summaryList.addAll(result5);
 
-
         // 对 summaryList 进行二次分组,聚合数据
         List<OnDutySizeVo> onDutySizeVoList = summaryList.stream()
                 .collect(Collectors.groupingBy(SizeSummary::getSize))
@@ -2865,6 +2858,8 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
                         x.setBelongTable("roll_club_three");
                     }else if ("roll_out_shipp".equals(billetHotsendTypeConfig.getBelongTable())){
                         x.setBelongTable("roll_out_shipp");
+                    }else if ("roll_deputy_cross".equals(billetHotsendTypeConfig.getBelongTable())){
+                        x.setBelongTable("roll_deputy_cross");
                     }
                     x.setBhtcId(billetHotsendTypeConfig.getId());
                     x.setUpdateTime(new Date());
@@ -2933,6 +2928,8 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
                         billetHotsend.setRollclubthreeNum(oConvertUtils.isNotEmpty(idExistBh.getRollclubthreeNum()) ? idExistBh.getRollclubthreeNum() + groupRollClubCommonList.size() * 4  : groupRollClubCommonList.size() * 4 );
                     }else if ("roll_out_shipp".equals(billetHotsendTypeConfig.getBelongTable())){
                         billetHotsend.setRolloutshippNum(oConvertUtils.isNotEmpty(idExistBh.getRolloutshippNum()) ? idExistBh.getRolloutshippNum() + groupRollClubCommonList.size() * 4  : groupRollClubCommonList.size() * 4 );
+                    }else if ("roll_deputy_cross".equals(billetHotsendTypeConfig.getBelongTable())){
+                        billetHotsend.setRollDeputyCrossNum(oConvertUtils.isNotEmpty(idExistBh.getRollDeputyCrossNum()) ? idExistBh.getRollDeputyCrossNum() + groupRollClubCommonList.size() * 4  : groupRollClubCommonList.size() * 4 );
                     }
                     billetHotsendBaseMapper.updateById(billetHotsend);
                 }
@@ -3989,458 +3986,6 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         return storageCenterHeatNoVO;
     }
 
-    @Override
-    public Page<StorageCenterInvoicingVO> storageCenterInvoicingInfo(StorageCenterQueryDTO queryDTO) {
-        int pageNo = Optional.ofNullable(queryDTO.getPageNo()).orElse(1);
-        int pageSize = Optional.ofNullable(queryDTO.getPageSize()).orElse(10);
-
-        // 分页查询 HeatsActuals
-        Page<HeatsActuals> heatsPage = new Page<>(pageNo, pageSize);
-        LambdaQueryWrapper<HeatsActuals> billQueryWrapper = new LambdaQueryWrapper<>();
-        if (StringUtils.isNotBlank(queryDTO.getCcmNo())) {
-            billQueryWrapper.eq(HeatsActuals::getCasterCode, queryDTO.getCcmNo());
-        }
-        if (StringUtils.isNotBlank(queryDTO.getHeatsCode())) {
-            billQueryWrapper.eq(HeatsActuals::getHeatsCode, queryDTO.getHeatsCode());
-        }
-        if (StringUtils.isNotBlank(queryDTO.getShift())) {
-            billQueryWrapper.eq(HeatsActuals::getShift, queryDTO.getShift());
-        }
-        if (StringUtils.isNotBlank(queryDTO.getShiftGroup())) {
-            billQueryWrapper.eq(HeatsActuals::getShiftGroup, queryDTO.getShiftGroup());
-        }
-        Date beginDate = queryDTO.getStorageTimeBegin();
-        Date endDate = queryDTO.getStorageTimeEnd();
-        if (beginDate != null) {
-            billQueryWrapper.ge(HeatsActuals::getUpdateTime, beginDate);
-        }
-        if (endDate != null) {
-            billQueryWrapper.le(HeatsActuals::getUpdateTime, endDate);
-        }
-        billQueryWrapper.orderByDesc(HeatsActuals::getUpdateTime);
-
-        Page<HeatsActuals> pageResult = heatsActualsService.page(heatsPage, billQueryWrapper);
-        List<HeatsActuals> heatsActuals = pageResult.getRecords();
-        if (heatsActuals.isEmpty()) {
-            return new Page<>(pageNo, pageSize, 0);
-        }
-
-        // 提取 heatNo 集合
-        List<String> heatNoList = heatsActuals.stream()
-                .map(HeatsActuals::getHeatsCode)
-                .filter(Objects::nonNull)
-                .collect(Collectors.toList());
-
-        // 查询 BilletBasicInfo 数据
-        LambdaQueryWrapper<BilletBasicInfo> basicInfoQueryWrapper = new LambdaQueryWrapper<>();
-        basicInfoQueryWrapper.in(BilletBasicInfo::getHeatNo, heatNoList);
-        List<BilletBasicInfo> billetList = billetBasicInfoService.list(basicInfoQueryWrapper);
-
-        // heatNo 分组统计
-        Map<String, List<BilletBasicInfo>> groupedByHeatNo = billetList.stream()
-                .filter(b -> b.getHeatNo() != null)
-                .collect(Collectors.groupingBy(BilletBasicInfo::getHeatNo));
-
-        List<StorageCenterInvoicingVO> resultList = heatsActuals.stream()
-                .map(heat -> {
-                    String heatNo = heat.getHeatsCode();
-                    String shift = heat.getShift();
-                    String shiftGroup = heat.getShiftGroup();
-                    Date createTime = heat.getCreateTime();
-                    Date updateTime = heat.getUpdateTime();
-                    List<BilletBasicInfo> billets = groupedByHeatNo.getOrDefault(heatNo, Collections.emptyList());
-
-                    Integer ccmNo = Optional.ofNullable(heat.getCasterCode()).map(Integer::valueOf).orElse(0);
-
-                    StorageCenterInvoicingVO.HeatNoDetail heatNoDetail = new StorageCenterInvoicingVO.HeatNoDetail();
-
-                    StorageCenterHeatNoInvoicingVO storageCenterHeatNoInvoicingVO = iCarUnitService.storageCenterInvoicingByHeatNo(heatNo,queryDTO);
-
-                    BigDecimal sumWeight = BigDecimal.ZERO;
-                    int sumAmount = 0;
-
-                    Date storageTimeBegin = queryDTO.getStorageTimeBegin();
-                    Date storageTimeEnd = queryDTO.getStorageTimeEnd();
-
-                    if (storageCenterHeatNoInvoicingVO != null) {
-                        if (storageCenterHeatNoInvoicingVO.getRollClubOneDetails() != null) {
-                            sumWeight = sumWeight.add(Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollClubOneDetails().getTotalWeight()).orElse(BigDecimal.ZERO));
-                            sumAmount += Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollClubOneDetails().getTotalAmount()).orElse(0);
-                        }
-                        if (storageCenterHeatNoInvoicingVO.getRollClubTwoDetails() != null) {
-                            sumWeight = sumWeight.add(Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollClubTwoDetails().getTotalWeight()).orElse(BigDecimal.ZERO));
-                            sumAmount += Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollClubTwoDetails().getTotalAmount()).orElse(0);
-                        }
-                        if (storageCenterHeatNoInvoicingVO.getRollClubThreeDetails() != null) {
-                            sumWeight = sumWeight.add(Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollClubThreeDetails().getTotalWeight()).orElse(BigDecimal.ZERO));
-                            sumAmount += Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollClubThreeDetails().getTotalAmount()).orElse(0);
-                        }
-                        if (storageCenterHeatNoInvoicingVO.getRollHeightDetails() != null) {
-                            sumWeight = sumWeight.add(Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollHeightDetails().getTotalWeight()).orElse(BigDecimal.ZERO));
-                            sumAmount += Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollHeightDetails().getTotalAmount()).orElse(0);
-                        }
-                        if (storageCenterHeatNoInvoicingVO.getRollOutShippDetails() != null) {
-                            sumWeight = sumWeight.add(Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollOutShippDetails().getTotalWeight()).orElse(BigDecimal.ZERO));
-                            sumAmount += Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollOutShippDetails().getTotalAmount()).orElse(0);
-                        }
-
-                        Predicate<StorageCenterHeatNoInvoicingVO.RollChargeDetail> timeFilter = detail -> {
-                            Date createTime1 = detail.getCreateTime();
-                            if (createTime1 == null) {
-                                return false; // 没有 createTime 的记录直接过滤掉
-                            }
-
-                            if (storageTimeBegin != null && storageTimeEnd != null) {
-                                return !createTime1.before(storageTimeBegin) && !createTime1.after(storageTimeEnd);
-                            } else if (storageTimeBegin != null) {
-                                return !createTime1.before(storageTimeBegin);
-                            } else if (storageTimeEnd != null) {
-                                return !createTime1.after(storageTimeEnd);
-                            } else {
-                                return true; // 时间条件都为空,则不过滤
-                            }
-                        };
-
-//                        Predicate<StorageCenterHeatNoInvoicingVO.RollSendDetail> timeFilterOther = detail -> {
-//                            Date updateTime1 = detail.getUpdateTime();
-//                            if (updateTime1 == null) {
-//                                return false; // 没有 updateTime 的记录直接过滤掉
-//                            }
-//
-//                            if (storageTimeBegin != null && storageTimeEnd != null) {
-//                                return !updateTime1.before(storageTimeBegin) && !updateTime1.after(storageTimeEnd);
-//                            } else if (storageTimeBegin != null) {
-//                                return !updateTime1.before(storageTimeBegin);
-//                            } else if (storageTimeEnd != null) {
-//                                return !updateTime1.after(storageTimeEnd);
-//                            } else {
-//                                return true; // 时间条件都为空,则不过滤
-//                            }
-//                        };
-
-                        // 过滤棒一
-                        if (storageCenterHeatNoInvoicingVO.getRollClubOneDetails() != null) {
-                            List<StorageCenterHeatNoInvoicingVO.RollSendDetail> filtered = storageCenterHeatNoInvoicingVO
-                                    .getRollClubOneDetails()
-                                    .getRollSendDetails()
-                                    .stream()
-                                    .collect(Collectors.toList());
-                            storageCenterHeatNoInvoicingVO.getRollClubOneDetails().setRollSendDetails(filtered);
-                        }
-
-
-                        // 过滤高线
-                        if (storageCenterHeatNoInvoicingVO.getRollHeightDetails() != null) {
-                            List<StorageCenterHeatNoInvoicingVO.RollSendDetail> filtered = storageCenterHeatNoInvoicingVO
-                                    .getRollHeightDetails()
-                                    .getRollSendDetails()
-                                    .stream()
-                                    .collect(Collectors.toList());
-                            storageCenterHeatNoInvoicingVO.getRollHeightDetails().setRollSendDetails(filtered);
-                        }
-
-                        // 过滤棒二
-                        if (storageCenterHeatNoInvoicingVO.getRollClubTwoDetails() != null) {
-                            List<StorageCenterHeatNoInvoicingVO.RollChargeDetail> filtered = storageCenterHeatNoInvoicingVO
-                                    .getRollClubTwoDetails()
-                                    .getRollChargeDetails()
-                                    .stream()
-                                    .filter(timeFilter)
-                                    .collect(Collectors.toList());
-                            storageCenterHeatNoInvoicingVO.getRollClubTwoDetails().setRollChargeDetails(filtered);
-                        }
-
-                        // 过滤棒三
-                        if (storageCenterHeatNoInvoicingVO.getRollClubThreeDetails() != null) {
-                            List<StorageCenterHeatNoInvoicingVO.RollChargeDetail> filtered = storageCenterHeatNoInvoicingVO
-                                    .getRollClubThreeDetails()
-                                    .getRollChargeDetails()
-                                    .stream()
-                                    .filter(timeFilter)
-                                    .collect(Collectors.toList());
-                            storageCenterHeatNoInvoicingVO.getRollClubThreeDetails().setRollChargeDetails(filtered);
-                        }
-
-                        // 过滤上若
-                        if (storageCenterHeatNoInvoicingVO.getRollOutShippDetails() != null) {
-                            List<StorageCenterHeatNoInvoicingVO.RollChargeDetail> filtered = storageCenterHeatNoInvoicingVO
-                                    .getRollOutShippDetails()
-                                    .getRollChargeDetails()
-                                    .stream()
-                                    .filter(timeFilter)
-                                    .collect(Collectors.toList());
-                            storageCenterHeatNoInvoicingVO.getRollOutShippDetails().setRollChargeDetails(filtered);
-                        }
-                    }
-
-                    // 设置热号基础信息
-                    heatNoDetail.setHeatNo(heatNo);
-                    heatNoDetail.setCcmNo(ccmNo);
-                    heatNoDetail.setHeatNoWeight(sumWeight);
-                    heatNoDetail.setHeatNoAmount(sumAmount);
-                    //根据修改时间过滤展示
-                    heatNoDetail.setCreateTime(updateTime);
-                    heatNoDetail.setShift(shift);
-                    heatNoDetail.setShiftGroup(shiftGroup);
-
-                    StorageCenterInvoicingVO vo = new StorageCenterInvoicingVO();
-                    vo.setHeatNoDetails(Collections.singletonList(heatNoDetail));
-                    vo.setStorageCenterHeatNoInvoicing(storageCenterHeatNoInvoicingVO);
-                    return vo;
-                })
-                .collect(Collectors.toList());
-
-        Page<StorageCenterInvoicingVO> resultPage = new Page<>(pageNo, pageSize, pageResult.getTotal());
-        resultPage.setRecords(resultList);
-
-        return resultPage;
-    }
-
-
-    @Override
-    public List<StorageCenterInvoicingVO> storageCenterInvoicingInfoList(StorageCenterQueryDTO queryDTO) {
-
-        BilletHotsendChangeShift billetHotsendChangeShift;
-
-        LambdaQueryWrapper<HeatsActuals> billQueryWrapper = new LambdaQueryWrapper<>();
-        if (StringUtils.isNotBlank(queryDTO.getCcmNo())) {
-            billQueryWrapper.eq(HeatsActuals::getCasterCode, queryDTO.getCcmNo());
-        }
-        if (StringUtils.isNotBlank(queryDTO.getHeatsCode())) {
-            billQueryWrapper.eq(HeatsActuals::getHeatsCode, queryDTO.getHeatsCode());
-        }
-        if (StringUtils.isNotBlank(queryDTO.getShift())) {
-            billQueryWrapper.eq(HeatsActuals::getShift, queryDTO.getShift());
-        }
-        if (StringUtils.isNotBlank(queryDTO.getShiftGroup())) {
-            billQueryWrapper.eq(HeatsActuals::getShiftGroup, queryDTO.getShiftGroup());
-        }
-
-        if(StringUtils.isNotBlank(queryDTO.getCcmNo()) && StringUtils.isNotBlank(queryDTO.getChangeShiftId())) {
-
-            LambdaQueryWrapper<BilletHotsendChangeShift> queryWrapper = new LambdaQueryWrapper<>();
-            if ("0".equals(queryDTO.getChangeShiftId())) {
-                queryWrapper.eq(BilletHotsendChangeShift::getCcmNo, queryDTO.getCcmNo())
-                        .orderByDesc(BilletHotsendChangeShift::getCreateTime)
-                        .last("limit 1");
-            } else {
-                queryWrapper.eq(BilletHotsendChangeShift::getId, queryDTO.getChangeShiftId())
-                        .eq(BilletHotsendChangeShift::getCcmNo, queryDTO.getCcmNo());
-            }
-            billetHotsendChangeShift = billetHotsendChangeShiftService.getOne(queryWrapper);
-
-            if (oConvertUtils.isNotEmpty(billetHotsendChangeShift)){
-                String changeShiftGroup = billetHotsendChangeShift.getShiftGroup();
-                String changeShiftShift = billetHotsendChangeShift.getShift();
-                Date createTime = billetHotsendChangeShift.getCreateTime();
-                Date changeShiftTime = billetHotsendChangeShift.getChangeShiftTime();
-                billQueryWrapper.eq(HeatsActuals::getShift, changeShiftShift);
-                billQueryWrapper.eq(HeatsActuals::getShiftGroup, changeShiftGroup);
-                // 添加时间范围限制
-                if (createTime != null && changeShiftTime != null) {
-                    billQueryWrapper.between(HeatsActuals::getUpdateTime, createTime, changeShiftTime);
-                }
-            }
-
-        }
-        Date beginDate = queryDTO.getStorageTimeBegin();
-        Date endDate = queryDTO.getStorageTimeEnd();
-        if (beginDate != null) {
-            Date adjustedBeginDate = DateUtils.addDays(beginDate, -3);
-            billQueryWrapper.ge(HeatsActuals::getUpdateTime, adjustedBeginDate);
-        }
-        if (endDate != null) {
-            billQueryWrapper.le(HeatsActuals::getUpdateTime, endDate);
-        }
-        billQueryWrapper.orderByDesc(HeatsActuals::getCreateTime);
-
-
-        List<HeatsActuals> heatsActualsList = heatsActualsService.list(billQueryWrapper);
-
-        if (heatsActualsList.isEmpty()) {
-            return Collections.emptyList();
-        }
-
-        // 提取 heatNo 集合
-        List<String> heatNoList = heatsActualsList.stream()
-                .map(HeatsActuals::getHeatsCode)
-                .filter(Objects::nonNull)
-                .collect(Collectors.toList());
-
-        // 查询 BilletBasicInfo 数据
-        LambdaQueryWrapper<BilletBasicInfo> basicInfoQueryWrapper = new LambdaQueryWrapper<>();
-        basicInfoQueryWrapper.in(BilletBasicInfo::getHeatNo, heatNoList);
-        List<BilletBasicInfo> billetList = billetBasicInfoService.list(basicInfoQueryWrapper);
-
-        // heatNo 分组统计
-        Map<String, List<BilletBasicInfo>> groupedByHeatNo = billetList.stream()
-                .filter(b -> b.getHeatNo() != null)
-                .collect(Collectors.groupingBy(BilletBasicInfo::getHeatNo));
-
-        List<StorageCenterInvoicingVO> resultList = heatsActualsList.stream()
-                .map(heat -> {
-                    String heatNo = heat.getHeatsCode();
-                    String shift = heat.getShift();
-                    String shiftGroup = heat.getShiftGroup();
-                    Date createTime = heat.getCreateTime();
-                    Date updateTime = heat.getUpdateTime();
-                    List<BilletBasicInfo> billets = groupedByHeatNo.getOrDefault(heatNo, Collections.emptyList());
-
-                    Integer ccmNo = Optional.ofNullable(heat.getCasterCode()).map(Integer::valueOf).orElse(0);
-
-                    StorageCenterInvoicingVO.HeatNoDetail heatNoDetail = new StorageCenterInvoicingVO.HeatNoDetail();
-
-                    StorageCenterQueryDTO storageCenterQueryDTO = new StorageCenterQueryDTO();
-                    storageCenterQueryDTO.setHeatsCode(heatNo);
-                    if (queryDTO.getStorageTimeBegin() != null) {
-                        storageCenterQueryDTO.setStorageTimeBegin(queryDTO.getStorageTimeBegin());
-                    }
-                    if (queryDTO.getStorageTimeEnd() != null) {
-                        storageCenterQueryDTO.setStorageTimeEnd(queryDTO.getStorageTimeEnd());
-                    }
-
-                    StorageCenterHeatNoInvoicingVO storageCenterHeatNoInvoicingVO = iCarUnitService.storageCenterInvoicingByQueryDTO(storageCenterQueryDTO);
-
-                    BigDecimal sumWeight = BigDecimal.ZERO;
-                    int sumAmount = 0;
-
-                    Date storageTimeBegin = queryDTO.getStorageTimeBegin();
-                    Date storageTimeEnd = queryDTO.getStorageTimeEnd();
-
-                    if (storageCenterHeatNoInvoicingVO != null) {
-                        if (storageCenterHeatNoInvoicingVO.getRollClubOneDetails() != null) {
-                            sumWeight = sumWeight.add(Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollClubOneDetails().getTotalWeight()).orElse(BigDecimal.ZERO));
-                            sumAmount += Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollClubOneDetails().getTotalAmount()).orElse(0);
-                        }
-                        if (storageCenterHeatNoInvoicingVO.getRollClubTwoDetails() != null) {
-                            sumWeight = sumWeight.add(Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollClubTwoDetails().getTotalWeight()).orElse(BigDecimal.ZERO));
-                            sumAmount += Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollClubTwoDetails().getTotalAmount()).orElse(0);
-                        }
-                        if (storageCenterHeatNoInvoicingVO.getRollClubThreeDetails() != null) {
-                            sumWeight = sumWeight.add(Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollClubThreeDetails().getTotalWeight()).orElse(BigDecimal.ZERO));
-                            sumAmount += Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollClubThreeDetails().getTotalAmount()).orElse(0);
-                        }
-                        if (storageCenterHeatNoInvoicingVO.getRollHeightDetails() != null) {
-                            sumWeight = sumWeight.add(Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollHeightDetails().getTotalWeight()).orElse(BigDecimal.ZERO));
-                            sumAmount += Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollHeightDetails().getTotalAmount()).orElse(0);
-                        }
-                        if (storageCenterHeatNoInvoicingVO.getRollOutShippDetails() != null) {
-                            sumWeight = sumWeight.add(Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollOutShippDetails().getTotalWeight()).orElse(BigDecimal.ZERO));
-                            sumAmount += Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollOutShippDetails().getTotalAmount()).orElse(0);
-                        }
-
-                        Predicate<StorageCenterHeatNoInvoicingVO.RollChargeDetail> timeFilter = detail -> {
-                            Date createTime1 = detail.getCreateTime();
-                            if (createTime1 == null) {
-                                return false; // 没有 createTime 的记录直接过滤掉
-                            }
-
-                            if (storageTimeBegin != null && storageTimeEnd != null) {
-                                return !createTime1.before(storageTimeBegin) && !createTime1.after(storageTimeEnd);
-                            } else if (storageTimeBegin != null) {
-                                return !createTime1.before(storageTimeBegin);
-                            } else if (storageTimeEnd != null) {
-                                return !createTime1.after(storageTimeEnd);
-                            } else {
-                                return true; // 时间条件都为空,则不过滤
-                            }
-                        };
-
-                        Predicate<StorageCenterHeatNoInvoicingVO.RollSendDetail> timeFilterOther = detail -> {
-                            Date updateTime1 = detail.getUpdateTime();
-                            if (updateTime1 == null) {
-                                return false; // 没有 updateTime 的记录直接过滤掉
-                            }
-
-                            if (storageTimeBegin != null && storageTimeEnd != null) {
-                                return !updateTime1.before(storageTimeBegin) && !updateTime1.after(storageTimeEnd);
-                            } else if (storageTimeBegin != null) {
-                                return !updateTime1.before(storageTimeBegin);
-                            } else if (storageTimeEnd != null) {
-                                return !updateTime1.after(storageTimeEnd);
-                            } else {
-                                return true; // 时间条件都为空,则不过滤
-                            }
-                        };
-
-                        // 过滤棒一
-                        if (storageCenterHeatNoInvoicingVO.getRollClubOneDetails() != null) {
-                            List<StorageCenterHeatNoInvoicingVO.RollSendDetail> filtered = storageCenterHeatNoInvoicingVO
-                                    .getRollClubOneDetails()
-                                    .getRollSendDetails()
-                                    .stream()
-                                    .filter(timeFilterOther)
-                                    .collect(Collectors.toList());
-                            storageCenterHeatNoInvoicingVO.getRollClubOneDetails().setRollSendDetails(filtered);
-                        }
-
-
-                        // 过滤高线
-                        if (storageCenterHeatNoInvoicingVO.getRollHeightDetails() != null) {
-                            List<StorageCenterHeatNoInvoicingVO.RollSendDetail> filtered = storageCenterHeatNoInvoicingVO
-                                    .getRollHeightDetails()
-                                    .getRollSendDetails()
-                                    .stream()
-                                    .filter(timeFilterOther)
-                                    .collect(Collectors.toList());
-                            storageCenterHeatNoInvoicingVO.getRollHeightDetails().setRollSendDetails(filtered);
-                        }
-
-                        // 过滤棒二
-                        if (storageCenterHeatNoInvoicingVO.getRollClubTwoDetails() != null) {
-                            List<StorageCenterHeatNoInvoicingVO.RollChargeDetail> filtered = storageCenterHeatNoInvoicingVO
-                                    .getRollClubTwoDetails()
-                                    .getRollChargeDetails()
-                                    .stream()
-                                    .filter(timeFilter)
-                                    .collect(Collectors.toList());
-                            storageCenterHeatNoInvoicingVO.getRollClubTwoDetails().setRollChargeDetails(filtered);
-                        }
-
-                        // 过滤棒三
-                        if (storageCenterHeatNoInvoicingVO.getRollClubThreeDetails() != null) {
-                            List<StorageCenterHeatNoInvoicingVO.RollChargeDetail> filtered = storageCenterHeatNoInvoicingVO
-                                    .getRollClubThreeDetails()
-                                    .getRollChargeDetails()
-                                    .stream()
-                                    .filter(timeFilter)
-                                    .collect(Collectors.toList());
-                            storageCenterHeatNoInvoicingVO.getRollClubThreeDetails().setRollChargeDetails(filtered);
-                        }
-
-                        // 过滤上若
-                        if (storageCenterHeatNoInvoicingVO.getRollOutShippDetails() != null) {
-                            List<StorageCenterHeatNoInvoicingVO.RollChargeDetail> filtered = storageCenterHeatNoInvoicingVO
-                                    .getRollOutShippDetails()
-                                    .getRollChargeDetails()
-                                    .stream()
-                                    .filter(timeFilter)
-                                    .collect(Collectors.toList());
-                            storageCenterHeatNoInvoicingVO.getRollOutShippDetails().setRollChargeDetails(filtered);
-                        }
-                    }
-
-                    // 设置热号基础信息
-                    heatNoDetail.setHeatNo(heatNo);
-                    heatNoDetail.setCcmNo(ccmNo);
-                    heatNoDetail.setHeatNoWeight(sumWeight);
-                    heatNoDetail.setHeatNoAmount(sumAmount);
-                    heatNoDetail.setCreateTime(createTime);
-                    heatNoDetail.setUpdateTime(updateTime);
-                    heatNoDetail.setShift(shift);
-                    heatNoDetail.setShiftGroup(shiftGroup);
-                    heatNoDetail.setCreateTime(createTime);
-
-                    StorageCenterInvoicingVO vo = new StorageCenterInvoicingVO();
-                    vo.setHeatNoDetails(Collections.singletonList(heatNoDetail));
-                    vo.setStorageCenterHeatNoInvoicing(storageCenterHeatNoInvoicingVO);
-                    return vo;
-                })
-                .collect(Collectors.toList());
-
-        return resultList;
-    }
-
 
     @Override
     public StorageCenterHeatNoDetailVO storageCenterByHeatNo(String heatNo) {
@@ -5220,10 +4765,6 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         StorageCenterHeatNoInvoicingVO.RollThreeHeatNo rollThreeHeatNo = new StorageCenterHeatNoInvoicingVO.RollThreeHeatNo();
         StorageCenterHeatNoInvoicingVO.RollHeightHeatNo rollHeightHeatNo = new StorageCenterHeatNoInvoicingVO.RollHeightHeatNo();
         StorageCenterHeatNoInvoicingVO.RollOutHeatNo rollOutHeatNo = new StorageCenterHeatNoInvoicingVO.RollOutHeatNo();
-//        StorageCenterHeatNoInvoicingVO.StackHeatNo stackHeatNo = new StorageCenterHeatNoDetailVO.StackHeatNo();
-//        StorageCenterHeatNoInvoicingVO.UnknownHeatNo unknownHeatNo = new StorageCenterHeatNoDetailVO.UnknownHeatNo();
-
-
         // 查询 BilletBasicInfo 数据
         LambdaQueryWrapper<BilletBasicInfo> basicInfoQueryWrapper = new LambdaQueryWrapper<>();
         basicInfoQueryWrapper.eq(BilletBasicInfo::getHeatNo, heatNo);
@@ -5232,15 +4773,11 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         if (oConvertUtils.listIsEmpty(list)) {
             return storageCenterHeatNoInvoicingVO;
         }
-
-
         // 按照 belongTable 分组
         Map<String, List<BilletBasicInfo>> groupedByBelongTable = list.stream()
                 .collect(Collectors.groupingBy(
                         b -> Optional.ofNullable(b.getBelongTable()).orElse("unknown") // 处理 null 值
                 ));
-
-
         if (groupedByBelongTable.containsKey("roll_club_one")) {
 
             List<BilletBasicInfo> billetBasicInfos = groupedByBelongTable.get("roll_club_one");
@@ -5307,7 +4844,6 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
                     rollSendDetailList.add(rollSendDetail);
                 });
             }
-
             // 最终赋值给 rollOneHeatNo
             rollOneHeatNo.setSizeDetails(sizeDetailsList);
             rollOneHeatNo.setRollSendDetails(rollSendDetailList);
@@ -5385,68 +4921,6 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
             rollHeightHeatNo.setRollSendDetails(rollSendDetailList);
             storageCenterHeatNoInvoicingVO.setRollHeightDetails(rollHeightHeatNo);
         }
-
-
-//        if (groupedByBelongTable.containsKey("unknown")) {
-//
-//            List<BilletBasicInfo> billetBasicInfos = groupedByBelongTable.get("unknown");
-//
-//            // 计算总重量 & 总条数
-//            BigDecimal totalBlankOutput = billetBasicInfos.stream()
-//                    .map(BilletBasicInfo::getBilletWeight)
-//                    .filter(Objects::nonNull)
-//                    .map(BigDecimal::valueOf)
-//                    .reduce(BigDecimal.ZERO, BigDecimal::add);
-//
-//            unknownHeatNo.setTotalAmount(billetBasicInfos.size());
-//            unknownHeatNo.setTotalWeight(totalBlankOutput);
-//
-//            // 按照 getLength 分组
-//            Map<Integer, List<BilletBasicInfo>> groupedByLength = billetBasicInfos.stream()
-//                    .filter(b -> b.getLength() != null) // 先过滤掉 null,防止 NPE
-//                    .collect(Collectors.groupingBy(BilletBasicInfo::getLength));
-//
-//            // 一次遍历,构造 sizeDetailsList 和 rollSendDetailList
-//            List<StorageCenterHeatNoDetailVO.SizeDetail> sizeDetailsList = new ArrayList<>();
-//            List<StorageCenterHeatNoDetailVO.RollSendDetail> rollSendDetailList = new ArrayList<>();
-//
-//            groupedByLength.forEach((length, billets) -> {
-//                // 计算 weight 总和
-//                BigDecimal totalWeight = billets.stream()
-//                        .map(BilletBasicInfo::getBilletWeight)
-//                        .filter(Objects::nonNull)
-//                        .map(BigDecimal::valueOf)
-//                        .reduce(BigDecimal.ZERO, BigDecimal::add);
-//
-//                int count = billets.size(); // 计算数据条数
-//                // 取第一个 spec 值
-//                String spec = Optional.ofNullable(billets.get(0).getSpec()).orElse("Unknown");
-//
-//                // 创建 SizeDetail
-//                StorageCenterHeatNoDetailVO.SizeDetail sizeDetail = new StorageCenterHeatNoDetailVO.SizeDetail();
-//                sizeDetail.setSize(length);
-//                sizeDetail.setSizeWeight(totalWeight);
-//                sizeDetail.setSizeAmount(count);
-//                sizeDetailsList.add(sizeDetail);
-//
-//                // 创建 RollSendDetail
-//                StorageCenterHeatNoDetailVO.RollSendDetail rollSendDetail = new StorageCenterHeatNoDetailVO.RollSendDetail();
-//                rollSendDetail.setSize(length);
-//                rollSendDetail.setWeight(totalWeight);
-//                rollSendDetail.setAmount(count);
-//                rollSendDetail.setSpec(spec);
-//                rollSendDetailList.add(rollSendDetail);
-//            });
-//
-//            // 赋值给 unknownHeatNo
-//            unknownHeatNo.setSizeDetails(sizeDetailsList);
-//            unknownHeatNo.setRollSendDetails(rollSendDetailList);
-//
-//            storageCenterHeatNoDetailVO.setUnknownDetails(unknownHeatNo);
-//
-//        }
-
-
         if (groupedByBelongTable.containsKey("roll_club_two")) {
 
             List<BilletBasicInfo> billetBasicInfos = groupedByBelongTable.get("roll_club_two");
@@ -6724,34 +6198,6 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         return rollClubCommonList.stream().collect(Collectors.groupingBy(rollClubCommon -> rollClubCommon.getHeatNo() + "," + rollClubCommon.getShiftGroup() + "," + rollClubCommon.getShift()));
     }
 
-    /**
-     * 根据铸机号、班次、班别查询当天交班记录,并根据提供的日志列表更新相应的热送总支数
-     *
-     * @param ccmNo 铸机号
-     * @param cacheShint 班次信息
-     * @param cacheShintGroup 班别信息
-     * @param sum 热送总支数
-     */
-    public void updateShiftInfoByType(String ccmNo, String cacheShint, String cacheShintGroup, Integer sum, String type, String updateType) {
-        LambdaQueryWrapper<BilletHotsendChangeShift> queryWrapperCS = new LambdaQueryWrapper<>();
-        queryWrapperCS.eq(BilletHotsendChangeShift::getCcmNo, ccmNo)
-                .eq(BilletHotsendChangeShift::getShift, cacheShint)
-                .eq(BilletHotsendChangeShift::getShiftGroup, cacheShintGroup)
-                .between(BilletHotsendChangeShift::getCreateTime, DateUtils.getStartOfDay(), DateUtils.getEndOfDay());
-        BilletHotsendChangeShift billetHotsendChangeShift = billetHotsendChangeShiftService.getOne(queryWrapperCS);
-        if (oConvertUtils.isNotEmpty(billetHotsendChangeShift)) {
-            String operationName = type.equals("hotSend")? "热送" : "热装";
-            log.info("{}{}", ">>>>>B端车位发车统计当前班次" + operationName + "总支数:", sum + "班组:" + cacheShintGroup + "班次:" + cacheShint);
-            billetHotsendChangeShift.setUpdateTime(new Date());
-            if ("hotSend".equals(updateType)){
-                billetHotsendChangeShift.setHotsendAmount(billetHotsendChangeShift.getHotsendAmount() + sum);
-            }else{
-                billetHotsendChangeShift.setHotfeignAmount(billetHotsendChangeShift.getHotfeignAmount() + sum);
-            }
-            billetHotsendChangeShiftService.updateById(billetHotsendChangeShift);
-        }
-    }
-
     @Override
     public OnDutyStatistics queryHotChargingTwoStatistics(String ccmNo,String changeShiftId) {
         OnDutyStatistics onDutyStatistics = new OnDutyStatistics();
@@ -8114,7 +7560,6 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
     }
 
 
-
     public void processRollHeightDetails(List<RollHeightDetails> rollHeightDetailsList) {
         if (CollectionUtils.isEmpty(rollHeightDetailsList)) {
             return;