Jelajahi Sumber

定尺修改、炉号更换

qiangxuan 1 hari lalu
induk
melakukan
1226870c0d

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

@@ -2109,8 +2109,11 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 				if (rollClubTwoList.size() > 0){
 					//公共方法  处理钢坯实绩、炉次实绩、炉次传递单
 					commonBilletChangeHandle(rollClubTwoList, changeHeatVo, shift, shiftGroup, 2);
+					// rollClubThreeList 过滤调BelongTable 是null 或者 空串的
+					List<BilletBasicInfo> filterBilletBasicInfoList = rollClubTwoList.stream().filter(item -> !oConvertUtils.isEmpty(item.getBelongTable())) // 筛选 belong_table 等于 null 的记录
+							.collect(Collectors.toList());
 					//统一处理	棒二明细和棒二主表
-					commonBilletRollClubTwoHandle(rollClubTwoList, changeHeatVo, shift, shiftGroup);
+					commonBilletRollClubTwoHandle(filterBilletBasicInfoList, changeHeatVo, shift, shiftGroup);
 				}
 				List<BilletBasicInfo> rollClubThreeList = originalBilletBasicInfoLists.stream()
 						.filter(item -> "roll_club_three".equals(item.getBelongTable())) // 筛选 belong_table 等于 "roll_club_three" 的记录
@@ -2118,8 +2121,11 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 				if (rollClubThreeList.size() > 0){
 					//公共方法  处理钢坯实绩、炉次实绩、炉次传递单
 					commonBilletChangeHandle(rollClubThreeList, changeHeatVo, shift, shiftGroup, 3);
+					// rollClubThreeList 过滤调BelongTable 是null 或者 空串的
+					List<BilletBasicInfo> filterBilletBasicInfoList = rollClubThreeList.stream().filter(item -> !oConvertUtils.isEmpty(item.getBelongTable())) // 筛选 belong_table 等于 null 的记录
+							.collect(Collectors.toList());
 					//统一处理	棒三明细和棒三主表
-					commonBilletRollClubThreeHandle(rollClubThreeList, changeHeatVo, shift, shiftGroup);
+					commonBilletRollClubThreeHandle(filterBilletBasicInfoList, changeHeatVo, shift, shiftGroup);
 				}
 				List<BilletBasicInfo> rollOutShippList = originalBilletBasicInfoLists.stream()
 						.filter(item -> "roll_out_shipp".equals(item.getBelongTable())) // 筛选 belong_table 等于 "roll_out_shipp" 的记录
@@ -2127,8 +2133,10 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 				if (rollOutShippList.size() > 0){
 					//公共方法  处理钢坯实绩、炉次实绩、炉次传递单
 					commonBilletChangeHandle(rollOutShippList, changeHeatVo, shift, shiftGroup, 4);
+					List<BilletBasicInfo> filterBilletBasicInfoList = rollOutShippList.stream().filter(item -> !oConvertUtils.isEmpty(item.getBelongTable())) // 筛选 belong_table 等于 null 的记录
+							.collect(Collectors.toList());
 					//统一处理	上若明细和上若主表
-					commonBilletRollOutShippHandle(rollOutShippList, changeHeatVo, shift, shiftGroup);
+					commonBilletRollOutShippHandle(filterBilletBasicInfoList, changeHeatVo, shift, shiftGroup);
 				}
 				List<BilletBasicInfo> rollDeputyCrossList = originalBilletBasicInfoLists.stream()
 						.filter(item -> "roll_deputy_cross".equals(item.getBelongTable())) // 筛选 belong_table 等于 "roll_deputy_cross" 的记录
@@ -2136,8 +2144,10 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 				if (rollDeputyCrossList.size() > 0){
 					//公共方法  处理钢坯实绩、炉次实绩、炉次传递单
 					commonBilletChangeHandle(rollDeputyCrossList, changeHeatVo, shift, shiftGroup, 5);
+					List<BilletBasicInfo> filterBilletBasicInfoList = rollDeputyCrossList.stream().filter(item -> !oConvertUtils.isEmpty(item.getBelongTable())) // 筛选 belong_table 等于 null 的记录
+							.collect(Collectors.toList());
 					//统一处理	付跨明细和付跨主表
-					commonBilletRollDeputyCrossHandle(rollDeputyCrossList, changeHeatVo, shift, shiftGroup);
+					commonBilletRollDeputyCrossHandle(filterBilletBasicInfoList, changeHeatVo, shift, shiftGroup);
 				}
 				List<BilletBasicInfo> stackingList = originalBilletBasicInfoLists.stream()
 						.filter(item -> "stacking_and_loading_vehicles".equals(item.getBelongTable())) // 筛选 belong_table 等于 "stacking_and_loading_vehicles" 的记录
@@ -2145,8 +2155,15 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 				if (stackingList.size() > 0){
 					//公共方法  处理钢坯实绩、炉次实绩、炉次传递单
 					commonBilletChangeHandle(stackingList, changeHeatVo, shift, shiftGroup, 6);
+					List<BilletBasicInfo> filterBilletBasicInfoList = stackingList.stream().filter(item -> !oConvertUtils.isEmpty(item.getBelongTable())) // 筛选 belong_table 等于 null 的记录
+							.collect(Collectors.toList());
 					//统一处理  堆垛公共容器明细、堆垛公共容器堆垛主表
-					commonBilletStackingHandle(stackingList, changeHeatVo, shift, shiftGroup);
+					commonBilletStackingHandle(filterBilletBasicInfoList, changeHeatVo, shift, shiftGroup);
+				}
+
+				List<BilletBasicInfo> filterIsNullBilletBasicInfoList = originalBilletBasicInfoLists.stream().filter(item -> oConvertUtils.isEmpty(item.getBelongTable())).collect(Collectors.toList());
+				if (oConvertUtils.listIsNotEmpty(filterIsNullBilletBasicInfoList)){
+					commonBilletChangeHandle(filterIsNullBilletBasicInfoList, changeHeatVo, shift, shiftGroup, 0);
 				}
 			}
 		}
@@ -2541,6 +2558,7 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 		//炉次传递单 设置新值并更新
 		originalBilletHotsend.setAmountTotal(newAmount1);
 		originalBilletHotsend.setBlankOutput(newOutput1);
+		originalBilletHotsend.setDecideWeight(newOutput1);
 		baseMapper.updateById(originalBilletHotsend);
 
 		// 变更的炉次传递单,增加数量和重量
@@ -2563,6 +2581,7 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 		}
 		changeBilletHotsend.setAmountTotal(changeBilletHotsend.getAmountTotal() + changeHeatVo.getNumber());
 		changeBilletHotsend.setBlankOutput(changeBilletHotsend.getBlankOutput() + changeTotalWeight);
+		changeBilletHotsend.setDecideWeight(changeBilletHotsend.getDecideWeight() + changeTotalWeight);
 		baseMapper.updateById(changeBilletHotsend);
 	}
 
@@ -2709,52 +2728,123 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 						.orderByDesc(RollClubOneDetails::getCreateTime)
 		);
 	}
-	// 提取查询棒二明细表的公共方法
+	// 提取查询棒二明细表的公共方法 - 调整为支持stackAddr和逗号分隔的billetNo
 	private List<RollClubTwoDetails> getRollClubTwoDetailsList(String heatNo, String ccmNo, String shift, String shiftGroup, List<String> billetNos) {
-		return rollClubTwoDetailsService.list(
-				new LambdaQueryWrapper<RollClubTwoDetails>()
-						.eq(RollClubTwoDetails::getHeatNo, heatNo)
-						.eq(RollClubTwoDetails::getCcmNo, ccmNo)
-						.eq(RollClubTwoDetails::getShift, shift)
-						.eq(RollClubTwoDetails::getShiftGroup, shiftGroup)
-						.in(RollClubTwoDetails::getBilletNo, billetNos)
-						.orderByDesc(RollClubTwoDetails::getCreateTime)
-		);
+		if (billetNos.isEmpty()) {
+			return Collections.emptyList();
+		}
+		LambdaQueryWrapper<RollClubTwoDetails> queryWrapper = new LambdaQueryWrapper<>();
+		queryWrapper.eq(RollClubTwoDetails::getHeatNo, heatNo)
+				.eq(RollClubTwoDetails::getCcmNo, ccmNo)
+				.eq(RollClubTwoDetails::getShift, shift)
+				.eq(RollClubTwoDetails::getShiftGroup, shiftGroup)
+				.orderByDesc(RollClubTwoDetails::getCreateTime);
+		// 处理两种情况的查询条件
+		queryWrapper.and(wrapper -> {
+			// stackAddr为NULL时,直接查询单个坯号
+			wrapper.eq(RollClubTwoDetails::getStackAddr, null)
+					.in(RollClubTwoDetails::getBilletNo, billetNos);
+			// stackAddr不为NULL时,使用FIND_IN_SET查询逗号分隔的坯号
+			wrapper.or()
+					.isNotNull(RollClubTwoDetails::getStackAddr);
+			// 为非NULL情况添加FIND_IN_SET条件
+			if (!billetNos.isEmpty()) {
+				String inCondition = billetNos.stream()
+						.map(no -> "FIND_IN_SET('" + no + "', billet_no) > 0")
+						.collect(Collectors.joining(" OR "));
+				wrapper.apply(inCondition);
+			}
+		});
+
+		return rollClubTwoDetailsService.list(queryWrapper);
 	}
 	// 提取查询棒三明细表的公共方法
 	private List<RollClubThreeDetails> getRollClubThreeDetailsList(String heatNo, String ccmNo, String shift, String shiftGroup, List<String> billetNos) {
-		return rollClubThreeDetailsService.list(
-				new LambdaQueryWrapper<RollClubThreeDetails>()
-						.eq(RollClubThreeDetails::getHeatNo, heatNo)
-						.eq(RollClubThreeDetails::getCcmNo, ccmNo)
-						.eq(RollClubThreeDetails::getShift, shift)
-						.eq(RollClubThreeDetails::getShiftGroup, shiftGroup)
-						.in(RollClubThreeDetails::getBilletNo, billetNos)
-						.orderByDesc(RollClubThreeDetails::getCreateTime)
-		);
+		if (billetNos.isEmpty()) {
+			return Collections.emptyList();
+		}
+		LambdaQueryWrapper<RollClubThreeDetails> queryWrapper = new LambdaQueryWrapper<>();
+		queryWrapper.eq(RollClubThreeDetails::getHeatNo, heatNo)
+				.eq(RollClubThreeDetails::getCcmNo, ccmNo)
+				.eq(RollClubThreeDetails::getShift, shift)
+				.eq(RollClubThreeDetails::getShiftGroup, shiftGroup)
+				.orderByDesc(RollClubThreeDetails::getCreateTime);
+		// 处理两种情况的查询条件
+		queryWrapper.and(wrapper -> {
+			// stackAddr为NULL时,直接查询单个坯号
+			wrapper.eq(RollClubThreeDetails::getStackAddr, null)
+					.in(RollClubThreeDetails::getBilletNo, billetNos);
+			// stackAddr不为NULL时,使用FIND_IN_SET查询逗号分隔的坯号
+			wrapper.or()
+					.isNotNull(RollClubThreeDetails::getStackAddr);
+			// 为非NULL情况添加FIND_IN_SET条件
+			if (!billetNos.isEmpty()) {
+				String inCondition = billetNos.stream()
+						.map(no -> "FIND_IN_SET('" + no + "', billet_no) > 0")
+						.collect(Collectors.joining(" OR "));
+				wrapper.apply(inCondition);
+			}
+		});
+		return rollClubThreeDetailsService.list(queryWrapper);
 	}
-	// 提取查询上若明细表的公共方法
+
+	// 提取查询上若明细表的公共方法 - 调整为支持stackAddr和逗号分隔的billetNo
 	private List<RollOutShippDetails> getRollOutShippDetailsList(String heatNo, String ccmNo, String shift, String shiftGroup, List<String> billetNos) {
-		return rollOutShippDetailsService.list(
-				new LambdaQueryWrapper<RollOutShippDetails>()
-						.eq(RollOutShippDetails::getHeatNo, heatNo)
-						.eq(RollOutShippDetails::getCcmNo, ccmNo)
-						.eq(RollOutShippDetails::getShift, shift)
-						.eq(RollOutShippDetails::getShiftGroup, shiftGroup)
-						.in(RollOutShippDetails::getBilletNo, billetNos)
-						.orderByDesc(RollOutShippDetails::getCreateTime)
-		);
+		if (billetNos.isEmpty()) {
+			return Collections.emptyList();
+		}
+		LambdaQueryWrapper<RollOutShippDetails> queryWrapper = new LambdaQueryWrapper<>();
+		queryWrapper.eq(RollOutShippDetails::getHeatNo, heatNo)
+				.eq(RollOutShippDetails::getCcmNo, ccmNo)
+				.eq(RollOutShippDetails::getShift, shift)
+				.eq(RollOutShippDetails::getShiftGroup, shiftGroup)
+				.orderByDesc(RollOutShippDetails::getCreateTime);
+		// 处理两种情况的查询条件
+		queryWrapper.and(wrapper -> {
+			// stackAddr为NULL时,直接查询单个坯号
+			wrapper.eq(RollOutShippDetails::getStackAddr, null)
+					.in(RollOutShippDetails::getBilletNo, billetNos);
+			// stackAddr不为NULL时,使用FIND_IN_SET查询逗号分隔的坯号
+			wrapper.or()
+					.isNotNull(RollOutShippDetails::getStackAddr);
+			// 为非NULL情况添加FIND_IN_SET条件
+			if (!billetNos.isEmpty()) {
+				String inCondition = billetNos.stream()
+						.map(no -> "FIND_IN_SET('" + no + "', billet_no) > 0")
+						.collect(Collectors.joining(" OR "));
+				wrapper.apply(inCondition);
+			}
+		});
+		return rollOutShippDetailsService.list(queryWrapper);
 	}
-	// 提取查询付跨明细表的公共方法
+
+	// 提取查询付跨明细表的公共方法 - 调整为支持stackAddr和逗号分隔的billetNo
 	private List<RollDeputyCrossDetails> getRollDeputyCrossDetailsList(String heatNo, String ccmNo, String shift, String shiftGroup, List<String> billetNos) {
-		return rollDeputyCrossDetailsService.list(
-				new LambdaQueryWrapper<RollDeputyCrossDetails>()
-						.eq(RollDeputyCrossDetails::getHeatNo, heatNo)
-						.eq(RollDeputyCrossDetails::getCcmNo, ccmNo)
-						.eq(RollDeputyCrossDetails::getShift, shift)
-						.eq(RollDeputyCrossDetails::getShiftGroup, shiftGroup)
-						.in(RollDeputyCrossDetails::getBilletNo, billetNos)
-						.orderByDesc(RollDeputyCrossDetails::getCreateTime)
-		);
+		if (billetNos.isEmpty()) {
+			return Collections.emptyList();
+		}
+		LambdaQueryWrapper<RollDeputyCrossDetails> queryWrapper = new LambdaQueryWrapper<>();
+		queryWrapper.eq(RollDeputyCrossDetails::getHeatNo, heatNo)
+				.eq(RollDeputyCrossDetails::getCcmNo, ccmNo)
+				.eq(RollDeputyCrossDetails::getShift, shift)
+				.eq(RollDeputyCrossDetails::getShiftGroup, shiftGroup)
+				.orderByDesc(RollDeputyCrossDetails::getCreateTime);
+		// 处理两种情况的查询条件
+		queryWrapper.and(wrapper -> {
+			// stackAddr为NULL时,直接查询单个坯号
+			wrapper.eq(RollDeputyCrossDetails::getStackAddr, null)
+					.in(RollDeputyCrossDetails::getBilletNo, billetNos);
+			// stackAddr不为NULL时,使用FIND_IN_SET查询逗号分隔的坯号
+			wrapper.or()
+					.isNotNull(RollDeputyCrossDetails::getStackAddr);
+			// 为非NULL情况添加FIND_IN_SET条件
+			if (!billetNos.isEmpty()) {
+				String inCondition = billetNos.stream()
+						.map(no -> "FIND_IN_SET('" + no + "', billet_no) > 0")
+						.collect(Collectors.joining(" OR "));
+				wrapper.apply(inCondition);
+			}
+		});
+		return rollDeputyCrossDetailsService.list(queryWrapper);
 	}
 }

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

@@ -36,8 +36,10 @@ import org.jeecg.modules.billet.billetHotsendChangeShift.service.IBilletHotsendC
 import org.jeecg.modules.billet.billetHotsendConfig.entity.BilletHotsendTypeConfig;
 import org.jeecg.modules.billet.billetHotsendConfig.service.IBilletHotsendTypeConfigService;
 import org.jeecg.modules.billet.operateLog.service.IOperateLogService;
+import org.jeecg.modules.billet.rollClubOne.entity.RollClubOne;
 import org.jeecg.modules.billet.rollClubOne.entity.RollClubOneDetails;
 import org.jeecg.modules.billet.rollClubOne.service.IRollClubOneDetailsService;
+import org.jeecg.modules.billet.rollClubOne.service.IRollClubOneService;
 import org.jeecg.modules.billet.rollClubThree.entity.RollClubThree;
 import org.jeecg.modules.billet.rollClubThree.entity.RollClubThreeDetails;
 import org.jeecg.modules.billet.rollClubThree.service.IRollClubThreeDetailsService;
@@ -50,8 +52,10 @@ 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;
+import org.jeecg.modules.billet.rollHeight.service.IRollHeightService;
 import org.jeecg.modules.billet.rollOutShipp.entity.RollOutShipp;
 import org.jeecg.modules.billet.rollOutShipp.entity.RollOutShippDetails;
 import org.jeecg.modules.billet.rollOutShipp.service.IRollOutShippDetailsService;
@@ -140,6 +144,9 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 	@Autowired
 	private IBilletBasicInfoService billetBasicInfoService;
 
+	@Autowired
+	private IRollClubOneService rollClubOneService;
+
 	@Autowired
 	private IRollClubTwoService rollClubTwoService;
 
@@ -149,6 +156,9 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 	@Autowired
 	private IRollOutShippService rollOutShippService;
 
+	@Autowired
+	private IRollHeightService rollHeightService;
+
 	@Autowired
 	private IBilletHotsendTypeConfigService billetHotsendTypeConfigService;
 
@@ -2403,12 +2413,23 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 		if (oConvertUtils.isEmpty(basicInfoLengthUpdate.getCcmNo()) || oConvertUtils.isEmpty(basicInfoLengthUpdate.getHeatNo()) || oConvertUtils.isEmpty(basicInfoLengthUpdate.getStrandNo()) || oConvertUtils.isEmpty(basicInfoLengthUpdate.getLength())){
 			return Result.error("参数错误");
 		}
+		String classShiftGroup = String.format("class:shift:group:%s", basicInfoLengthUpdate.getCcmNo()); // 班组
+		String classShift = String.format("class:shift:%s", basicInfoLengthUpdate.getCcmNo()); // 班别
+		String shift = !oConvertUtils.getString(redisTemplate.opsForValue().get(classShift)).isEmpty() ? oConvertUtils.getString(redisTemplate.opsForValue().get(classShift)) : "";
+		String shiftGroup = !oConvertUtils.getString(redisTemplate.opsForValue().get(classShiftGroup)).isEmpty() ? oConvertUtils.getString(redisTemplate.opsForValue().get(classShiftGroup)) : "";
+		log.info("{}{}", "浇筑炉次-定尺更新缓存中的班组班别:", shiftGroup + " " + shift);
+		if (oConvertUtils.isEmpty(shift) || oConvertUtils.isEmpty(shiftGroup)){
+			log.info("{}{}", "浇筑炉次-定尺更新,班组班别为空!", basicInfoLengthUpdate.getCcmNo());
+			return Result.error("浇筑炉次-定尺更新,班组班别为空,操作失败!");
+		}
 		// 根据ccmNo、heatNo、strandNo查询钢坯实绩集合
 		LambdaQueryWrapper<BilletBasicInfo> queryWrapper = new LambdaQueryWrapper<>();
 		queryWrapper.eq(BilletBasicInfo::getCcmNo, basicInfoLengthUpdate.getCcmNo())
 					.eq(BilletBasicInfo::getHeatNo, basicInfoLengthUpdate.getHeatNo())
-				.eq(BilletBasicInfo::getStrandNo, basicInfoLengthUpdate.getStrandNo())
-				.eq(BilletBasicInfo::getLength, basicInfoLengthUpdate.getOriginalLength());
+					.eq(BilletBasicInfo::getShift, shift)
+					.eq(BilletBasicInfo::getShiftGroup, shiftGroup)
+					.eq(BilletBasicInfo::getStrandNo, basicInfoLengthUpdate.getStrandNo())
+					.eq(BilletBasicInfo::getLength, basicInfoLengthUpdate.getOriginalLength());
 		List<BilletBasicInfo> billetBasicInfoList = billetBasicInfoService.list(queryWrapper);
 		if (oConvertUtils.listIsEmpty(billetBasicInfoList)){
 			return Result.error("未找到对应数据");
@@ -2428,25 +2449,167 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 		}
 		billetBasicInfoService.saveOrUpdateBatch(billetBasicInfoList);
 
+		// 根据铸机号、炉号、班组、班别查询所有钢坯基础信息
+		LambdaQueryWrapper<BilletBasicInfo> queryWrapper2 = new LambdaQueryWrapper<>();
+		queryWrapper2.eq(BilletBasicInfo::getCcmNo, basicInfoLengthUpdate.getCcmNo())
+				.eq(BilletBasicInfo::getHeatNo, basicInfoLengthUpdate.getHeatNo())
+				.eq(BilletBasicInfo::getShift, shift)
+				.eq(BilletBasicInfo::getShiftGroup, shiftGroup);
+		List<BilletBasicInfo> billetBasicInfoAllList = billetBasicInfoService.list(queryWrapper2);
+		if (oConvertUtils.listIsEmpty(billetBasicInfoAllList)){
+			throw new RuntimeException("未找到该炉号对应的钢坯数据,操作失败!");
+		}
+
+		double totalWeight = billetBasicInfoAllList.stream().mapToDouble(BilletBasicInfo::getBilletWeight).sum();
+
+		// 炉次实绩
+		HeatsActuals heatsActuals = getHeatsActuals(basicInfoLengthUpdate.getHeatNo(), basicInfoLengthUpdate.getCcmNo(), shift, shiftGroup);
+		if (heatsActuals == null) {
+			throw new RuntimeException("炉次实绩为空,操作失败!");
+		}
+		heatsActuals.setBlankOutput(totalWeight);
+		heatsActualsService.updateById(heatsActuals);
+
+		// 炉次传递单
+		BilletHotsend billetHotsend = getBilletHotsend(basicInfoLengthUpdate.getHeatNo(), basicInfoLengthUpdate.getCcmNo(), shift, shiftGroup);
+		if (billetHotsend == null) {
+			throw new RuntimeException("炉次传递单为空,操作失败!");
+		}
+		billetHotsend.setBlankOutput(totalWeight);
+		billetHotsend.setDecideWeight(totalWeight);
+		billetHotsendBaseService.updateById(billetHotsend);
+
 		// 过滤出billetBasicInfoList中belongTable等于roll_club_one的钢坯实绩
 		List<BilletBasicInfo> billetBasicInfoListRollClubOne = billetBasicInfoList.stream()
 				.filter(info -> info.getBelongTable() != null && info.getBelongTable().equals("roll_club_one"))
 				.collect(Collectors.toList());
 		if (oConvertUtils.listIsNotEmpty(billetBasicInfoListRollClubOne)) {
-			billetBasicInfoListRollClubOne.forEach(x -> {
-				LambdaQueryWrapper<RollClubOneDetails> queryWrapperRollClubOneDetails = new LambdaQueryWrapper<>();
-				queryWrapperRollClubOneDetails.eq(RollClubOneDetails::getCcmNo, basicInfoLengthUpdate.getCcmNo());
-				queryWrapperRollClubOneDetails.eq(RollClubOneDetails::getBilletNo, x.getBilletNo());
-				RollClubOneDetails rollClubOneDetails = rollClubOneDetailsService.getOne(queryWrapperRollClubOneDetails);
-				if (oConvertUtils.isNotEmpty(rollClubOneDetails)){
-					rollClubOneDetails.setSize(String.valueOf(x.getLength()));
-					rollClubOneDetails.setBlankOutput(x.getBilletWeight());
-					rollClubOneDetailsService.updateById(rollClubOneDetails);
-				}
-			});
+			commonRollClubOneDetailsHandle(billetBasicInfoList, basicInfoLengthUpdate, shift, shiftGroup);
+		}
+		/*
+		// 处理棒二(RollClubTwo)
+		List<BilletBasicInfo> billetBasicInfoListRollClubTwo = billetBasicInfoList.stream()
+				.filter(info -> info.getBelongTable() != null && info.getBelongTable().equals("roll_club_two"))
+				.collect(Collectors.toList());
+		if (oConvertUtils.listIsNotEmpty(billetBasicInfoListRollClubTwo)) {
+			commonRollClubTwoDetailsHandle(billetBasicInfoList, basicInfoLengthUpdate, shift, shiftGroup);
+		}
+
+		// 处理棒三(RollClubThree)
+		List<BilletBasicInfo> billetBasicInfoListRollClubThree = billetBasicInfoList.stream()
+				.filter(info -> info.getBelongTable() != null && info.getBelongTable().equals("roll_club_three"))
+				.collect(Collectors.toList());
+		if (oConvertUtils.listIsNotEmpty(billetBasicInfoListRollClubThree)) {
+			commonRollClubThreeDetailsHandle(billetBasicInfoList, basicInfoLengthUpdate, shift, shiftGroup);
 		}
+
+		// 处理上若(RollOutShipp)
+		List<BilletBasicInfo> billetBasicInfoListRollOutShipp = billetBasicInfoList.stream()
+				.filter(info -> info.getBelongTable() != null && info.getBelongTable().equals("roll_out_shipp"))
+				.collect(Collectors.toList());
+		if (oConvertUtils.listIsNotEmpty(billetBasicInfoListRollOutShipp)) {
+
+		}
+
+		// 处理高线(RollHeight)
+		List<BilletBasicInfo> billetBasicInfoListRollHeight = billetBasicInfoList.stream()
+				.filter(info -> info.getBelongTable() != null && info.getBelongTable().equals("roll_height"))
+				.collect(Collectors.toList());
+		if (oConvertUtils.listIsNotEmpty(billetBasicInfoListRollHeight)) {
+
+		}
+
+		// 处理付跨(RollDeputyCross)
+		List<BilletBasicInfo> billetBasicInfoListRollDeputyCross = billetBasicInfoList.stream()
+				.filter(info -> info.getBelongTable() != null && info.getBelongTable().equals("roll_deputy_cross"))
+				.collect(Collectors.toList());
+		if (oConvertUtils.listIsNotEmpty(billetBasicInfoListRollDeputyCross)) {
+
+		}
+
+		// 处理临时表(BilletAutoTmp)
+		List<BilletBasicInfo> billetBasicInfoListTemp = billetBasicInfoList.stream()
+				.filter(info -> info.getBelongTable() != null && info.getBelongTable().equals("billet_auto_tmp"))
+				.collect(Collectors.toList());
+		if (oConvertUtils.listIsNotEmpty(billetBasicInfoListRollDeputyCross)) {
+
+		}
+
+		// 处理付跨(stacking_and_loading_vehicles)
+		List<BilletBasicInfo> billetBasicInfoListStacking = billetBasicInfoList.stream()
+				.filter(info -> info.getBelongTable() != null && info.getBelongTable().equals("stacking_and_loading_vehicles"))
+				.collect(Collectors.toList());
+		if (oConvertUtils.listIsNotEmpty(billetBasicInfoListRollDeputyCross)) {
+
+		}
+		*/
 		return Result.OK("定尺修改成功!");
 	}
+
+	private void commonRollClubThreeDetailsHandle(List<BilletBasicInfo> billetBasicInfoList, BasicInfoLengthUpdate basicInfoLengthUpdate, String shift, String shiftGroup) {
+	}
+
+	private void commonRollClubTwoDetailsHandle(List<BilletBasicInfo> billetBasicInfoList, BasicInfoLengthUpdate basicInfoLengthUpdate, String shift, String shiftGroup) {
+
+	}
+
+	/**
+	 * 棒一处理
+	 * @param billetBasicInfoListRollClubOne
+	 * @param shift
+	 * @param shiftGroup
+	 */
+	private void commonRollClubOneDetailsHandle(List<BilletBasicInfo> billetBasicInfoListRollClubOne, BasicInfoLengthUpdate basicInfoLengthUpdate, String shift, String shiftGroup) {
+		// 提取所有需要更新的坯号
+		List<String> billetNos = billetBasicInfoListRollClubOne.stream()
+				.map(BilletBasicInfo::getBilletNo)
+				.collect(Collectors.toList());
+
+		// 批量查询对应的棒一明细表记录
+		LambdaQueryWrapper<RollClubOneDetails> queryWrapper1 = new LambdaQueryWrapper<>();
+		queryWrapper1.eq(RollClubOneDetails::getCcmNo, basicInfoLengthUpdate.getCcmNo())
+				.in(RollClubOneDetails::getBilletNo, billetNos);
+		List<RollClubOneDetails> rollClubOneDetailsList = rollClubOneDetailsService.list(queryWrapper1);
+
+		// 建立坯号到棒一明细的映射关系,便于快速查找
+		Map<String, RollClubOneDetails> billetNoToDetailsMap = rollClubOneDetailsList.stream()
+				.collect(Collectors.toMap(RollClubOneDetails::getBilletNo, details -> details));
+
+		// 批量更新数据
+		List<RollClubOneDetails> updatedDetailsList = new ArrayList<>();
+		for (BilletBasicInfo info : billetBasicInfoListRollClubOne) {
+			RollClubOneDetails details = billetNoToDetailsMap.get(info.getBilletNo());
+			if (details != null) {
+				details.setSize(String.valueOf(info.getLength()));
+				details.setBlankOutput(info.getBilletWeight());
+				updatedDetailsList.add(details);
+			}
+		}
+		// 批量更新到数据库
+		if (!updatedDetailsList.isEmpty()) {
+			rollClubOneDetailsService.updateBatchById(updatedDetailsList);
+		}
+
+		// 批量整炉棒一明细表记录
+		LambdaQueryWrapper<RollClubOneDetails> queryWrapper3 = new LambdaQueryWrapper<>();
+		queryWrapper3.eq(RollClubOneDetails::getCcmNo, basicInfoLengthUpdate.getCcmNo())
+				.eq(RollClubOneDetails::getHeatNo, basicInfoLengthUpdate.getHeatNo())
+				.eq(RollClubOneDetails::getShift, shift)
+				.eq(RollClubOneDetails::getShiftGroup, shiftGroup);
+		List<RollClubOneDetails> rollClubOneDetailsLists = rollClubOneDetailsService.list(queryWrapper3);
+		if (oConvertUtils.listIsEmpty(rollClubOneDetailsLists)){
+			throw new RuntimeException("棒一明细为空,操作失败!");
+		}
+		double rollClubOneTotalWeight = rollClubOneDetailsLists.stream().mapToDouble(RollClubOneDetails::getBlankOutput).sum();
+
+		RollClubOne rollClubOne = getRollClubOne(basicInfoLengthUpdate.getHeatNo(), basicInfoLengthUpdate.getCcmNo(), shift, shiftGroup);
+		if (rollClubOne == null){
+			throw new RuntimeException("棒一主表为空,操作失败!");
+		}
+		rollClubOne.setBlankOutput(rollClubOneTotalWeight);
+		rollClubOneService.updateById(rollClubOne);
+	}
+
 	/**
 	 * 筛选指定流号的数据
 	 * @param billetList 钢坯信息列表
@@ -2665,5 +2828,101 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 		return false;
 	}
 
-
+	// 提取查询炉次实绩的公共方法
+	private HeatsActuals getHeatsActuals(String heatNo, String ccmNo, String shift, String shiftGroup) {
+		return heatsActualsService.getOne(
+				new LambdaQueryWrapper<HeatsActuals>()
+						.eq(HeatsActuals::getHeatsCode, heatNo)
+						.eq(HeatsActuals::getCasterCode, ccmNo)
+						.eq(HeatsActuals::getShift, shift)
+						.eq(HeatsActuals::getShiftGroup, shiftGroup)
+						.orderByDesc(HeatsActuals::getCreateTime)
+						.last("LIMIT 1")
+		);
+	}
+
+	// 提取查询炉次传递单的公共方法
+	private BilletHotsend getBilletHotsend(String heatNo, String ccmNo, String shift, String shiftGroup) {
+		return billetHotsendBaseService.getOne(
+				new LambdaQueryWrapper<BilletHotsend>()
+						.eq(BilletHotsend::getHeatNo, heatNo)
+						.eq(BilletHotsend::getCcmNo, ccmNo)
+						.eq(BilletHotsend::getShift, shift)
+						.eq(BilletHotsend::getShiftGroup, shiftGroup)
+						.orderByDesc(BilletHotsend::getCreateTime)
+						.last("LIMIT 1")
+		);
+	}
+
+	private RollClubOne getRollClubOne(String heatNo, String ccmNo, String shift, String shiftGroup) {
+		return rollClubOneService.getOne(
+				new LambdaQueryWrapper<RollClubOne>()
+						.eq(RollClubOne::getHeatNo, heatNo)
+						.eq(RollClubOne::getCcmNo, ccmNo)
+						.eq(RollClubOne::getShift, shift)
+						.eq(RollClubOne::getShiftGroup, shiftGroup)
+						.orderByDesc(RollClubOne::getCreateTime)
+						.last("LIMIT 1")
+		);
+	}
+	// 提取查询棒二主表的公共方法
+	private RollClubTwo getRollClubTwo(String heatNo, String ccmNo, String shift, String shiftGroup) {
+		return rollClubTwoService.getOne(
+				new LambdaQueryWrapper<RollClubTwo>()
+						.eq(RollClubTwo::getHeatNo, heatNo)
+						.eq(RollClubTwo::getCcmNo, ccmNo)
+						.eq(RollClubTwo::getShift, shift)
+						.eq(RollClubTwo::getShiftGroup, shiftGroup)
+						.orderByDesc(RollClubTwo::getCreateTime)
+						.last("LIMIT 1")
+		);
+	}
+	// 提取查询棒三主表的公共方法
+	private RollClubThree getRollClubThree(String heatNo, String ccmNo, String shift, String shiftGroup) {
+		return rollClubThreeService.getOne(
+				new LambdaQueryWrapper<RollClubThree>()
+						.eq(RollClubThree::getHeatNo, heatNo)
+						.eq(RollClubThree::getCcmNo, ccmNo)
+						.eq(RollClubThree::getShift, shift)
+						.eq(RollClubThree::getShiftGroup, shiftGroup)
+						.orderByDesc(RollClubThree::getCreateTime)
+						.last("LIMIT 1")
+		);
+	}
+	// 提取查询上若主表的公共方法
+	private RollOutShipp getRollOutShipp(String heatNo, String ccmNo, String shift, String shiftGroup) {
+		return rollOutShippService.getOne(
+				new LambdaQueryWrapper<RollOutShipp>()
+						.eq(RollOutShipp::getHeatNo, heatNo)
+						.eq(RollOutShipp::getCcmNo, ccmNo)
+						.eq(RollOutShipp::getShift, shift)
+						.eq(RollOutShipp::getShiftGroup, shiftGroup)
+						.orderByDesc(RollOutShipp::getCreateTime)
+						.last("LIMIT 1")
+		);
+	}
+	// 提取查询付跨主表的公共方法
+	private RollDeputyCross getRollDeputyCross(String heatNo, String ccmNo, String shift, String shiftGroup) {
+		return rollDeputyCrossService.getOne(
+				new LambdaQueryWrapper<RollDeputyCross>()
+						.eq(RollDeputyCross::getHeatNo, heatNo)
+						.eq(RollDeputyCross::getCcmNo, ccmNo)
+						.eq(RollDeputyCross::getShift, shift)
+						.eq(RollDeputyCross::getShiftGroup, shiftGroup)
+						.orderByDesc(RollDeputyCross::getCreateTime)
+						.last("LIMIT 1")
+		);
+	}
+
+	private RollHeight getRollHeight(String heatNo, String ccmNo, String shift, String shiftGroup) {
+		return rollHeightService.getOne(
+				new LambdaQueryWrapper<RollHeight>()
+						.eq(RollHeight::getHeatNo, heatNo)
+						.eq(RollHeight::getCcmNo, ccmNo)
+						.eq(RollHeight::getShift, shift)
+						.eq(RollHeight::getShiftGroup, shiftGroup)
+						.orderByDesc(RollHeight::getCreateTime)
+						.last("LIMIT 1")
+		);
+	}
 }