Browse Source

钢坯热装实绩-分页列表查询增加根据历史交班id过滤

lingpeng.li 3 months ago
parent
commit
ff4d6c8293

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

@@ -21,6 +21,7 @@ import org.jeecg.modules.actualControl.heatsActuals.service.IHeatsActualsService
 import org.jeecg.modules.billet.billetHotsend.entity.BilletHotsend;
 import org.jeecg.modules.billet.billetHotsend.entity.BilletHotsendDetailsVo;
 import org.jeecg.modules.billet.billetHotsend.service.IBilletHotsendBaseService;
+import org.jeecg.modules.billet.billetHotsendChangeShift.entity.BilletHotsendChangeShift;
 import org.jeecg.modules.billet.billetHotsendChangeShift.service.IBilletHotsendChangeShiftService;
 import org.jeecg.modules.billet.operateLog.service.IOperateLogService;
 import org.jeecg.modules.billet.rollClubOne.entity.RollClubOneDetails;
@@ -33,6 +34,7 @@ import org.jeecg.modules.billet.rollHeight.entity.RollHeightDetails;
 import org.jeecg.modules.billet.rollHeight.service.IRollHeightDetailsService;
 import org.jeecg.modules.billet.rollOutShipp.entity.RollOutShippDetails;
 import org.jeecg.modules.billet.rollOutShipp.service.IRollOutShippDetailsService;
+import org.jeecg.modules.billet.storageBill.dto.HotChargingQueryDTO;
 import org.jeecg.modules.billet.storageBill.entity.*;
 import org.jeecg.modules.billet.storageBill.service.IStorageBillService;
 import org.jeecg.modules.billet.storageBill.vo.OnDutySizeVo;
@@ -48,7 +50,9 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @Description: 钢坯装运单
@@ -510,37 +514,47 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 		return Result.OK((String) jsonObject.get("success"));
 	}
 
-    @ApiOperation(value = "钢坯热装单-班统计查询", notes = "钢坯热装单-班统计查询")
-    @GetMapping(value = "/hotCharging/statistics")
-    public Result<OnDutyStatistics> queryHotChargingStatistics(@RequestParam(name = "ccmNo") String ccmNo) {
-        // 获取当前班组班次信息
-        OnDutyStatistics onDutyStatistics = storageBillService.queryHotChargingStatistics(ccmNo);
-        return Result.OK(onDutyStatistics);
-    }
+	@ApiOperation(value = "钢坯热装单-班统计查询", notes = "钢坯热装单-班统计查询")
+	@GetMapping(value = "/hotCharging/statistics")
+	public Result<OnDutyStatistics> queryHotChargingStatistics(@RequestParam(name = "ccmNo") String ccmNo,
+															   @RequestParam(name="changeShiftId", required = false) String changeShiftId) {
+		// 获取当前班组班次信息
+		OnDutyStatistics onDutyStatistics = storageBillService.queryHotChargingStatistics(ccmNo,changeShiftId);
+		return Result.OK(onDutyStatistics);
+	}
 
 	@ApiOperation(value = "钢坯热装实绩-分页列表查询", notes = "钢坯热装实绩-分页列表查询")
 	@GetMapping(value = "/listHotChargingSJ")
-	public Result<IPage<StorageBill>> queryHotChargingPageSJList(StorageBill storageBill,
+	public Result<IPage<StorageBill>> queryHotChargingPageSJList(HotChargingQueryDTO queryDTO,
 																 @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
 																 @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
 																 HttpServletRequest req) {
+
+		BilletHotsendChangeShift billetHotsendChangeShift = null;
 		// 直接构造 HeatsActuals 查询条件
 		QueryWrapper<HeatsActuals> heatsQueryWrapper = new QueryWrapper<>();
 		heatsQueryWrapper.orderByDesc("create_time");
 
-		if (storageBill.getCcmNo() != null) {
-			heatsQueryWrapper.eq("caster_code", storageBill.getCcmNo());
+		if (queryDTO.getCcmNo() != null) {
+			heatsQueryWrapper.eq("caster_code", queryDTO.getCcmNo());
 		}
-		if (storageBill.getShift() != null) {
-			heatsQueryWrapper.eq("shift", storageBill.getShift());
+		if (queryDTO.getShift() != null) {
+			heatsQueryWrapper.eq("shift", queryDTO.getShift());
 		}
-		if (storageBill.getHeatNo() != null) {
-			heatsQueryWrapper.eq("heats_code", storageBill.getHeatNo());
+		if (queryDTO.getHeatNo() != null) {
+			String heatNo = queryDTO.getHeatNo().replace("*", ""); // 去掉 "*"
+			heatsQueryWrapper.like("heats_code", heatNo);
 		}
-		if (storageBill.getShiftGroup() != null) {
-			heatsQueryWrapper.eq("shiftGroup", storageBill.getShiftGroup());
+		if (queryDTO.getShiftGroup() != null) {
+			heatsQueryWrapper.eq("shift_group", queryDTO.getShiftGroup());
 		}
 
+		if(oConvertUtils.isNotEmpty(queryDTO.getChangeShiftId())) {
+			// 根据铸机号、交班记录ID,获取交班记录中的班别、班次、创建时间
+			LambdaQueryWrapper<BilletHotsendChangeShift> queryWrapper = new LambdaQueryWrapper<>();
+			queryWrapper.eq(BilletHotsendChangeShift::getId, queryDTO.getChangeShiftId()).eq(BilletHotsendChangeShift::getCcmNo, queryDTO.getCcmNo());
+			billetHotsendChangeShift = billetHotsendChangeShiftService.getOne(queryWrapper);
+		}
 		QueryWrapper<BilletHotsend> billetHotsendQueryWrapper = new QueryWrapper<>();
 		billetHotsendQueryWrapper
 				.gt("rollclubtwo_num", 0)
@@ -549,6 +563,27 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 				.or()
 				.gt("rolloutshipp_num", 0);
 
+		if (billetHotsendChangeShift != null && billetHotsendChangeShift.getCreateTime() != null) {
+			if (oConvertUtils.isNotEmpty(queryDTO.getChangeShiftId())) {
+				// 当 changeShiftId 不为空时,时间范围从 createTime 到 updateTime
+				billetHotsendQueryWrapper.between("create_time", billetHotsendChangeShift.getCreateTime(), billetHotsendChangeShift.getChangeShiftTime());
+			}
+		}
+
+		if (queryDTO.getCcmNo() != null) {
+			billetHotsendQueryWrapper.eq("ccm_no", queryDTO.getCcmNo());
+		}
+		if (queryDTO.getShift() != null) {
+			billetHotsendQueryWrapper.eq("shift", queryDTO.getShift());
+		}
+		if (queryDTO.getHeatNo() != null) {
+			String heatNo = queryDTO.getHeatNo().replace("*", ""); // 去掉 "*"
+			billetHotsendQueryWrapper.like("heat_no", heatNo);
+		}
+		if (queryDTO.getShiftGroup() != null) {
+			billetHotsendQueryWrapper.eq("shift_group", queryDTO.getShiftGroup());
+		}
+
 		List<BilletHotsend> billetHotsendList = billetHotsendBaseService.list(billetHotsendQueryWrapper);
 
 		List<String> hostNoList = billetHotsendList.stream()
@@ -557,29 +592,86 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 				.distinct()  // 去重,提升查询效率
 				.collect(Collectors.toList());
 
-		if (!hostNoList.isEmpty()) {
-			heatsQueryWrapper.in("heats_code", hostNoList);
-		}
 
-		List<HeatsActuals> actualsList = heatsActualsService.list(heatsQueryWrapper);
+
+//		List<HeatsActuals> actualsList = heatsActualsService.list(heatsQueryWrapper);
 
 		QueryWrapper<RollClubTwoDetails> rollClubTwoDetailsQueryWrapper = new QueryWrapper<>();
 		if (!hostNoList.isEmpty()) {
 			rollClubTwoDetailsQueryWrapper.in("heat_no", hostNoList)
 					.groupBy("heat_no");
 		}
+		if (billetHotsendChangeShift != null && billetHotsendChangeShift.getCreateTime() != null) {
+			if (oConvertUtils.isNotEmpty(queryDTO.getChangeShiftId())) {
+				// 当 changeShiftId 不为空时,时间范围从 createTime 到 updateTime
+				rollClubTwoDetailsQueryWrapper.between("create_time", billetHotsendChangeShift.getCreateTime(), billetHotsendChangeShift.getChangeShiftTime());
+			}
+		}
+
+		if (queryDTO.getCcmNo() != null) {
+			rollClubTwoDetailsQueryWrapper.eq("ccm_no", queryDTO.getCcmNo());
+		}
+		if (queryDTO.getShift() != null) {
+			rollClubTwoDetailsQueryWrapper.eq("shift", queryDTO.getShift());
+		}
+		if (queryDTO.getHeatNo() != null) {
+			String heatNo = queryDTO.getHeatNo().replace("*", ""); // 去掉 "*"
+			rollClubTwoDetailsQueryWrapper.like("heat_no", heatNo);
+		}
+		if (queryDTO.getShiftGroup() != null) {
+			rollClubTwoDetailsQueryWrapper.eq("shift_group", queryDTO.getShiftGroup());
+		}
+
 		List<RollClubTwoDetails> list1 = rollClubTwoDetailsService.list(rollClubTwoDetailsQueryWrapper);
 		QueryWrapper<RollClubThreeDetails> rollClubThreeDetailsQueryWrapper = new QueryWrapper<>();
 		if (!hostNoList.isEmpty()) {
 			rollClubThreeDetailsQueryWrapper.in("heat_no", hostNoList)
 					.groupBy("heat_no");
 		}
+		if (billetHotsendChangeShift != null && billetHotsendChangeShift.getCreateTime() != null) {
+			if (oConvertUtils.isNotEmpty(queryDTO.getChangeShiftId())) {
+				// 当 changeShiftId 不为空时,时间范围从 createTime 到 updateTime
+				rollClubThreeDetailsQueryWrapper.between("create_time", billetHotsendChangeShift.getCreateTime(), billetHotsendChangeShift.getChangeShiftTime());
+			}
+		}
+		if (queryDTO.getCcmNo() != null) {
+			rollClubThreeDetailsQueryWrapper.eq("ccm_no", queryDTO.getCcmNo());
+		}
+		if (queryDTO.getShift() != null) {
+			rollClubThreeDetailsQueryWrapper.eq("shift", queryDTO.getShift());
+		}
+		if (queryDTO.getHeatNo() != null) {
+			String heatNo = queryDTO.getHeatNo().replace("*", ""); // 去掉 "*"
+			rollClubThreeDetailsQueryWrapper.like("heat_no", heatNo);
+		}
+		if (queryDTO.getShiftGroup() != null) {
+			rollClubThreeDetailsQueryWrapper.eq("shift_group", queryDTO.getShiftGroup());
+		}
 		List<RollClubThreeDetails> list2 = rollClubThreeDetailsService.list(rollClubThreeDetailsQueryWrapper);
 		QueryWrapper<RollOutShippDetails> rollOutShippDetailsQueryWrapper = new QueryWrapper<>();
 		if (!hostNoList.isEmpty()) {
 			rollOutShippDetailsQueryWrapper.in("heat_no", hostNoList)
 					.groupBy("heat_no");
 		}
+		if (billetHotsendChangeShift != null && billetHotsendChangeShift.getCreateTime() != null) {
+			if (oConvertUtils.isNotEmpty(queryDTO.getChangeShiftId())) {
+				// 当 changeShiftId 不为空时,时间范围从 createTime 到 updateTime
+				rollOutShippDetailsQueryWrapper.between("create_time", billetHotsendChangeShift.getCreateTime(), billetHotsendChangeShift.getChangeShiftTime());
+			}
+		}
+		if (queryDTO.getCcmNo() != null) {
+			rollOutShippDetailsQueryWrapper.eq("ccm_no", queryDTO.getCcmNo());
+		}
+		if (queryDTO.getShift() != null) {
+			rollOutShippDetailsQueryWrapper.eq("shift", queryDTO.getShift());
+		}
+		if (queryDTO.getHeatNo() != null) {
+			String heatNo = queryDTO.getHeatNo().replace("*", "");
+			rollOutShippDetailsQueryWrapper.like("heat_no", heatNo);
+		}
+		if (queryDTO.getShiftGroup() != null) {
+			rollOutShippDetailsQueryWrapper.eq("shift_group", queryDTO.getShiftGroup());
+		}
 		List<RollOutShippDetails> list3 = rollOutShippDetailsService.list(rollOutShippDetailsQueryWrapper);
 
 		// 使用 Set 存储唯一的 heat_no
@@ -603,9 +695,9 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 		// 计算最终去重后的 heat_no 总数
 		int totalSize = uniqueHeatNos.size();
 
-		System.out.println("去重后的 totalSize: " + totalSize);
-
-
+		if (!uniqueHeatNos.isEmpty()) {
+			heatsQueryWrapper.in("heats_code", uniqueHeatNos);
+		}
 
 		// 分页查询 HeatsActuals
 		Page<HeatsActuals> heatsPage = new Page<>(pageNo, pageSize);
@@ -638,6 +730,13 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 				queryWrapper1.eq(RollClubTwoDetails::getHeatNo, heatsActuals.getHeatsCode());
 			}
 
+			if (billetHotsendChangeShift != null && billetHotsendChangeShift.getCreateTime() != null) {
+				if (oConvertUtils.isNotEmpty(queryDTO.getChangeShiftId())) {
+					// 当 changeShiftId 不为空时,时间范围从 createTime 到 updateTime
+					queryWrapper1.between(RollClubTwoDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), billetHotsendChangeShift.getChangeShiftTime());
+				}
+			}
+
 			List<RollClubTwoDetails> rollClubTwoDetailsList = rollClubTwoDetailsService.list(queryWrapper1);
 			// 使用 Stream API 统计 blankOutput 字段的总和
 			OptionalDouble totalBlankOutputOptional1 = rollClubTwoDetailsList != null ?
@@ -702,6 +801,13 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 				queryWrapper2.eq(RollClubThreeDetails::getHeatNo, heatsActuals.getHeatsCode());
 			}
 
+			if (billetHotsendChangeShift != null && billetHotsendChangeShift.getCreateTime() != null) {
+				if (oConvertUtils.isNotEmpty(queryDTO.getChangeShiftId())) {
+					// 当 changeShiftId 不为空时,时间范围从 createTime 到 updateTime
+					queryWrapper2.between(RollClubThreeDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), billetHotsendChangeShift.getChangeShiftTime());
+				}
+			}
+
 			List<RollClubThreeDetails> rollClubThreeDetailsList = rollClubThreeDetailsService.list(queryWrapper2);
 			// 使用 Stream API 统计 blankOutput 字段的总和
 			OptionalDouble totalBlankOutputOptional2 = rollClubThreeDetailsList != null ?
@@ -766,6 +872,13 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 				queryWrapper3.eq(RollOutShippDetails::getHeatNo, heatsActuals.getHeatsCode());
 			}
 
+			if (billetHotsendChangeShift != null && billetHotsendChangeShift.getCreateTime() != null) {
+				if (oConvertUtils.isNotEmpty(queryDTO.getChangeShiftId())) {
+					// 当 changeShiftId 不为空时,时间范围从 createTime 到 updateTime
+					queryWrapper3.between(RollOutShippDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), billetHotsendChangeShift.getChangeShiftTime());
+				}
+			}
+
 			List<RollOutShippDetails> rollOutShippDetailsList = rollOutShippDetailsService.list(queryWrapper3);
 			// 使用 Stream API 统计 blankOutput 字段的总和
 			OptionalDouble totalBlankOutputOptional = rollOutShippDetailsList != null ?
@@ -824,7 +937,7 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 							.filter(StringUtils::isNotEmpty)
 							.collect(Collectors.toSet())
 			);
-            //将分组去重的内容使用逗号去分割
+			//将分组去重的内容使用逗号去分割
 			String steelStr = String.join(",", steels);
 			String specStr = String.join(",", specs);
 			String sizeStr = String.join(",", sizes);
@@ -832,12 +945,35 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 			String assemblyNumberStr = String.join(",", assemblyNumbers);
 			String destinationStr = String.join(",", destinations);
 
+			// 获取所有 createTime 字段的最小值
+			Optional<Date> earliestCreateTime = Stream.of(
+							rollClubTwoDetailsList.stream().map(RollClubTwoDetails::getCreateTime),
+							rollClubThreeDetailsList.stream().map(RollClubThreeDetails::getCreateTime),
+							rollOutShippDetailsList.stream().map(RollOutShippDetails::getCreateTime)
+					).flatMap(Function.identity())  // 合并所有流
+					.filter(Objects::nonNull)      // 过滤掉 null
+					.min(Date::compareTo);         // 找出最早的时间
+
+			// 设置最早的 createTime
+			bill.setCreateTime(earliestCreateTime.orElse(null)); // 如果为空,保持 null
+
+			// 获取所有 createTime 字段的最小值
+			Optional<Date> earliestUpdateTime = Stream.of(
+							rollClubTwoDetailsList.stream().map(RollClubTwoDetails::getUpdateTime),
+							rollClubThreeDetailsList.stream().map(RollClubThreeDetails::getUpdateTime),
+							rollOutShippDetailsList.stream().map(RollOutShippDetails::getUpdateTime)
+					).flatMap(Function.identity())  // 合并所有流
+					.filter(Objects::nonNull)      // 过滤掉 null
+					.min(Date::compareTo);         // 找出最早的时间
+
+			// 设置最早的 createTime
+			bill.setUpdateTime(earliestUpdateTime.orElse(null)); // 如果为空,保持 null
+
+
 			bill.setId(heatsActuals.getId());
 			bill.setHeatNo(heatsActuals.getHeatsCode());
 			bill.setCreateBy(heatsActuals.getCreateBy());
-			bill.setCreateTime(heatsActuals.getCreateTime());
 			bill.setUpdateBy(heatsActuals.getUpdateBy());
-			bill.setUpdateTime(heatsActuals.getUpdateTime());
 			bill.setCcmNo(heatsActuals.getCasterCode());
 			bill.setShift(heatsActuals.getShift());
 			bill.setShiftGroup(heatsActuals.getShiftGroup());
@@ -853,6 +989,7 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 				list.add(bill);
 			}
 		}
+		list.sort(Comparator.comparing(StorageBill::getCreateTime, Comparator.nullsLast(Comparator.reverseOrder())));
 		//设置最后返回的分页内容
 		billPageList.setRecords(list);
 		billPageList.setTotal(totalSize);
@@ -909,25 +1046,28 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 
 	@ApiOperation(value = "钢坯热装单棒二-班统计查询", notes = "钢坯热装单棒二-班统计查询")
 	@GetMapping(value = "/hotChargingTwo/statistics")
-	public Result<OnDutyStatistics> queryHotChargingTwoStatistics(@RequestParam(name = "ccmNo") String ccmNo) {
+	public Result<OnDutyStatistics> queryHotChargingTwoStatistics(@RequestParam(name = "ccmNo") String ccmNo,
+																  @RequestParam(name="changeShiftId", required = false) String changeShiftId) {
 		// 获取当前班组班次信息
-		OnDutyStatistics onDutyStatistics = storageBillService.queryHotChargingTwoStatistics(ccmNo);
+		OnDutyStatistics onDutyStatistics = storageBillService.queryHotChargingTwoStatistics(ccmNo,changeShiftId);
 		return Result.OK(onDutyStatistics);
 	}
 
 	@ApiOperation(value = "钢坯热装单棒三-班统计查询", notes = "钢坯热装单棒三-班统计查询")
 	@GetMapping(value = "/hotChargingThree/statistics")
-	public Result<OnDutyStatistics> queryHotChargingThreeStatistics(@RequestParam(name = "ccmNo") String ccmNo) {
+	public Result<OnDutyStatistics> queryHotChargingThreeStatistics(@RequestParam(name = "ccmNo") String ccmNo,
+																	@RequestParam(name="changeShiftId", required = false) String changeShiftId) {
 		// 获取当前班组班次信息
-		OnDutyStatistics onDutyStatistics = storageBillService.queryHotChargingThreeStatistics(ccmNo);
+		OnDutyStatistics onDutyStatistics = storageBillService.queryHotChargingThreeStatistics(ccmNo,changeShiftId);
 		return Result.OK(onDutyStatistics);
 	}
 
 	@ApiOperation(value = "钢坯热装单上若-班统计查询", notes = "钢坯热装单上若-班统计查询")
 	@GetMapping(value = "/hotChargingOut/statistics")
-	public Result<OnDutyStatistics> queryHotChargingOutStatistics(@RequestParam(name = "ccmNo") String ccmNo) {
+	public Result<OnDutyStatistics> queryHotChargingOutStatistics(@RequestParam(name = "ccmNo") String ccmNo,
+																  @RequestParam(name="changeShiftId", required = false) String changeShiftId) {
 		// 获取当前班组班次信息
-		OnDutyStatistics onDutyStatistics = storageBillService.queryHotChargingOutStatistics(ccmNo);
+		OnDutyStatistics onDutyStatistics = storageBillService.queryHotChargingOutStatistics(ccmNo,changeShiftId);
 		return Result.OK(onDutyStatistics);
 	}
 

+ 32 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/storageBill/dto/HotChargingQueryDTO.java

@@ -0,0 +1,32 @@
+package org.jeecg.modules.billet.storageBill.dto;
+
+import lombok.Data;
+
+@Data
+public class HotChargingQueryDTO {
+
+    /**
+     * 铸机
+     */
+    private String ccmNo;
+
+    /**
+     * 炉号
+     */
+    private String heatNo;
+
+    /**
+     * 班组
+     */
+    private String shiftGroup;
+
+    /**
+     * 班别
+     */
+    private String shift;
+
+    /**
+     * 历史交班id
+     */
+    private String changeShiftId;
+}

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

@@ -37,13 +37,13 @@ public interface IStorageBillService extends IService<StorageBill> {
 
     OnDutyStatistics queryOndutyStatistics(String ccmNo);
 
-    OnDutyStatistics queryHotChargingStatistics(String ccmNo);
+    OnDutyStatistics queryHotChargingStatistics(String ccmNo,String changeShiftId);
 
-    OnDutyStatistics queryHotChargingTwoStatistics(String ccmNo);
+    OnDutyStatistics queryHotChargingTwoStatistics(String ccmNo,String changeShiftId);
 
-    OnDutyStatistics queryHotChargingThreeStatistics(String ccmNo);
+    OnDutyStatistics queryHotChargingThreeStatistics(String ccmNo,String changeShiftId);
 
-    OnDutyStatistics queryHotChargingOutStatistics(String ccmNo);
+    OnDutyStatistics queryHotChargingOutStatistics(String ccmNo,String changeShiftId);
 
     JSONObject ondutyStatisticsExport(String ccmNo, String ondutyDate);
 

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

@@ -698,22 +698,39 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
     }
 
     @Override
-    public OnDutyStatistics queryHotChargingStatistics(String ccmNo) {
+    public OnDutyStatistics queryHotChargingStatistics(String ccmNo,String changeShiftId) {
         OnDutyStatistics onDutyStatistics = new OnDutyStatistics();
 
-        // 获取当前班组班次信息
-        String keyShiftGroup = String.format("class:shift:group:%s", ccmNo);
-        String keyShift = String.format("class:shift:%s", ccmNo);
-        String shiftGroup = oConvertUtils.getString(redisTemplate.opsForValue().get(keyShiftGroup));
-        String shift = oConvertUtils.getString(redisTemplate.opsForValue().get(keyShift));
-        if (oConvertUtils.isEmpty(shiftGroup) || oConvertUtils.isEmpty(shift)){
-            log.info("{}{}", "B端热装单统计当班热装查询失败!", "未查询到当班信息!");
-            return onDutyStatistics;
+        String shiftGroup = "";
+        String shift = "";
+        BilletHotsendChangeShift billetHotsendChangeShift;
+
+        if(oConvertUtils.isEmpty(changeShiftId)) {
+            // 获取当前班组班次信息
+            String keyShiftGroup = String.format("class:shift:group:%s", ccmNo);
+            String keyShift = String.format("class:shift:%s", ccmNo);
+            shiftGroup = oConvertUtils.getString(redisTemplate.opsForValue().get(keyShiftGroup));
+            shift = oConvertUtils.getString(redisTemplate.opsForValue().get(keyShift));
+            if (oConvertUtils.isEmpty(shiftGroup) || oConvertUtils.isEmpty(shift)) {
+                log.info("{}{}", "B端热装单统计当班热装查询失败!", "未查询到当班信息!");
+                return onDutyStatistics;
+            }
+            // 根据铸机号、班组班别查询对应的热送单信息
+            billetHotsendChangeShift = billetHotsendChangeShiftService.getOne(new LambdaQueryWrapper<BilletHotsendChangeShift>()
+                    .eq(BilletHotsendChangeShift::getCcmNo, ccmNo).eq(BilletHotsendChangeShift::getShiftGroup, shiftGroup).eq(BilletHotsendChangeShift::getShift, shift)
+                    .orderByDesc(BilletHotsendChangeShift::getCreateTime).last("limit 1"));
+        }else {
+            // 根据铸机号、交班记录ID,获取交班记录中的班别、班次、创建时间
+            LambdaQueryWrapper<BilletHotsendChangeShift> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(BilletHotsendChangeShift::getId, changeShiftId).eq(BilletHotsendChangeShift::getCcmNo, ccmNo);
+            billetHotsendChangeShift = billetHotsendChangeShiftService.getOne(queryWrapper);
+            if (billetHotsendChangeShift == null){
+                log.info("{}{}", "查询历史当班装运单信息失败,交班记录为空!", ccmNo + "失败时间:" + new Date());
+                return onDutyStatistics;
+            }
+            shiftGroup = billetHotsendChangeShift.getShiftGroup();
+            shift = billetHotsendChangeShift.getShift();
         }
-        // 根据铸机号、班组班别查询对应的热送单信息
-        BilletHotsendChangeShift billetHotsendChangeShiftList = billetHotsendChangeShiftService.getOne(new LambdaQueryWrapper<BilletHotsendChangeShift>()
-                .eq(BilletHotsendChangeShift::getCcmNo, ccmNo).eq(BilletHotsendChangeShift::getShiftGroup, shiftGroup).eq(BilletHotsendChangeShift::getShift, shift)
-                .orderByDesc(BilletHotsendChangeShift::getCreateTime).last("limit 1"));
         // 查询热装信息(棒二明细、棒三明细、上若明细)统计热装总支数、热装总重量<出坯量>
         List<DestinationStatisticsDetails> statisticsDetailsList1 = new ArrayList<>();
         List<DestinationStatisticsDetails> statisticsDetailsList2 = new ArrayList<>();
@@ -726,9 +743,17 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         queryWrapper.eq(RollClubTwoDetails::getShiftGroup, shiftGroup);
         queryWrapper.eq(RollClubTwoDetails::getShift, shift);
         // 添加大于 billetHotsendChangeShiftList 的 createTime 条件
-        if (billetHotsendChangeShiftList != null && billetHotsendChangeShiftList.getCreateTime() != null) {
-            queryWrapper.gt(RollClubTwoDetails::getCreateTime, billetHotsendChangeShiftList.getCreateTime());
+        if (billetHotsendChangeShift != null && billetHotsendChangeShift.getCreateTime() != null) {
+            if (oConvertUtils.isEmpty(changeShiftId)) {
+                // 当 changeShiftId 为空时,时间范围从 createTime 到当前时间
+                queryWrapper.between(RollClubTwoDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
+            } else {
+                // 当 changeShiftId 不为空时,时间范围从 createTime 到 updateTime
+                queryWrapper.between(RollClubTwoDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), billetHotsendChangeShift.getChangeShiftTime());
+            }
         }
+
+
         List<RollClubTwoDetails> rollClubTwoDetailsList = rollClubTwoDetailsService.list(queryWrapper);
         if (oConvertUtils.listIsNotEmpty(rollClubTwoDetailsList)){
             statisticsDetailsList1 = rollClubTwoDetailsList.stream()
@@ -762,9 +787,16 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         queryWrapper1.eq(RollClubThreeDetails::getShiftGroup, shiftGroup);
         queryWrapper1.eq(RollClubThreeDetails::getShift, shift);
         // 添加大于 billetHotsendChangeShiftList 的 createTime 条件
-        if (billetHotsendChangeShiftList != null && billetHotsendChangeShiftList.getCreateTime() != null) {
-            queryWrapper1.gt(RollClubThreeDetails::getCreateTime, billetHotsendChangeShiftList.getCreateTime());
+        if (billetHotsendChangeShift != null && billetHotsendChangeShift.getCreateTime() != null) {
+            if (oConvertUtils.isEmpty(changeShiftId)) {
+                // 当 changeShiftId 为空时,时间范围从 createTime 到当前时间
+                queryWrapper1.between(RollClubThreeDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
+            } else {
+                // 当 changeShiftId 不为空时,时间范围从 createTime 到 updateTime
+                queryWrapper1.between(RollClubThreeDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), billetHotsendChangeShift.getChangeShiftTime());
+            }
         }
+
         List<RollClubThreeDetails> rollClubThreeDetailsList = rollClubThreeDetailsService.list(queryWrapper1);
         if (oConvertUtils.listIsNotEmpty(rollClubThreeDetailsList)){
             statisticsDetailsList2 = rollClubThreeDetailsList.stream()
@@ -799,8 +831,14 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         queryWrapper2.eq(RollOutShippDetails::getShiftGroup, shiftGroup);
         queryWrapper2.eq(RollOutShippDetails::getShift, shift);
         // 添加大于 billetHotsendChangeShiftList 的 createTime 条件
-        if (billetHotsendChangeShiftList != null && billetHotsendChangeShiftList.getCreateTime() != null) {
-            queryWrapper2.gt(RollOutShippDetails::getCreateTime, billetHotsendChangeShiftList.getCreateTime());
+        if (billetHotsendChangeShift != null && billetHotsendChangeShift.getCreateTime() != null) {
+            if (oConvertUtils.isEmpty(changeShiftId)) {
+                // 当 changeShiftId 为空时,时间范围从 createTime 到当前时间
+                queryWrapper2.between(RollOutShippDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
+            } else {
+                // 当 changeShiftId 不为空时,时间范围从 createTime 到 updateTime
+                queryWrapper2.between(RollOutShippDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), billetHotsendChangeShift.getChangeShiftTime());
+            }
         }
         List<RollOutShippDetails> rollOutShippDetailsList = rollOutShippDetailsService.list(queryWrapper2);
         if (oConvertUtils.listIsNotEmpty(rollOutShippDetailsList)){
@@ -1577,7 +1615,6 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         queryWrapper2.eq(StorageBill::getCcmNo, ccmNo)
                 .eq(StorageBill::getShift, shift)
                 .eq(StorageBill::getShiftGroup, shiftGroup)
-                .notIn(StorageBill::getLicensePlate, Arrays.asList("辊道", "堆垛辊道"))
                 .gt(StorageBill::getAmountTotal, 0);
         // 检查 billetHotsendChangeShift 是否为空
         if (oConvertUtils.isEmpty(changeShiftId)) {
@@ -1601,7 +1638,7 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         for (StorageBill storageBill : storageBillList) {
             if ("棒二".equals(storageBill.getDestination())) {
                 LambdaQueryWrapper<RollClubTwoDetails> queryWrapper3 = new LambdaQueryWrapper<>();
-                queryWrapper3.eq(RollClubTwoDetails::getCcmNo, ccmNo).eq(RollClubTwoDetails::getStorageBillId, storageBill.getId());
+                queryWrapper3.eq(RollClubTwoDetails::getCcmNo, ccmNo).eq(RollClubTwoDetails::getStorageBillId, storageBill.getId()).eq(RollClubTwoDetails::getShift,shift).eq(RollClubTwoDetails::getShiftGroup,shiftGroup);
                 List<RollClubTwoDetails> rollClubTwoDetailsList = rollClubTwoDetailsService.list(queryWrapper3);
                 if (oConvertUtils.listIsNotEmpty(rollClubTwoDetailsList)) {
                     List<DestinationStatisticsDetails> currentList1 = rollClubTwoDetailsList.stream()
@@ -1627,7 +1664,7 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
 
             if ("棒三".equals(storageBill.getDestination())) {
                 LambdaQueryWrapper<RollClubThreeDetails> queryWrapper3 = new LambdaQueryWrapper<>();
-                queryWrapper3.eq(RollClubThreeDetails::getCcmNo, ccmNo).eq(RollClubThreeDetails::getStorageBillId, storageBill.getId());
+                queryWrapper3.eq(RollClubThreeDetails::getCcmNo, ccmNo).eq(RollClubThreeDetails::getStorageBillId, storageBill.getId()).eq(RollClubThreeDetails::getShift,shift).eq(RollClubThreeDetails::getShiftGroup,shiftGroup);
                 List<RollClubThreeDetails> rollClubThreeDetailsList = rollClubThreeDetailsService.list(queryWrapper3);
                 if (oConvertUtils.listIsNotEmpty(rollClubThreeDetailsList)) {
                     List<DestinationStatisticsDetails> currentList2 = rollClubThreeDetailsList.stream()
@@ -1653,7 +1690,7 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
 
             if ("上若".equals(storageBill.getDestination())) {
                 LambdaQueryWrapper<RollOutShippDetails> queryWrapper3 = new LambdaQueryWrapper<>();
-                queryWrapper3.eq(RollOutShippDetails::getCcmNo, ccmNo).eq(RollOutShippDetails::getStorageBillId, storageBill.getId());
+                queryWrapper3.eq(RollOutShippDetails::getCcmNo, ccmNo).eq(RollOutShippDetails::getStorageBillId, storageBill.getId()).eq(RollOutShippDetails::getShift,shift).eq(RollOutShippDetails::getShiftGroup,shiftGroup);
                 List<RollOutShippDetails> rollOutShippDetailsList = rollOutShippDetailsService.list(queryWrapper3);
                 if (oConvertUtils.listIsNotEmpty(rollOutShippDetailsList)) {
                     List<DestinationStatisticsDetails> currentList3 = rollOutShippDetailsList.stream()
@@ -2595,22 +2632,38 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
     }
 
     @Override
-    public OnDutyStatistics queryHotChargingTwoStatistics(String ccmNo) {
+    public OnDutyStatistics queryHotChargingTwoStatistics(String ccmNo,String changeShiftId) {
         OnDutyStatistics onDutyStatistics = new OnDutyStatistics();
 
-        // 获取当前班组班次信息
-        String keyShiftGroup = String.format("class:shift:group:%s", ccmNo);
-        String keyShift = String.format("class:shift:%s", ccmNo);
-        String shiftGroup = oConvertUtils.getString(redisTemplate.opsForValue().get(keyShiftGroup));
-        String shift = oConvertUtils.getString(redisTemplate.opsForValue().get(keyShift));
-        if (oConvertUtils.isEmpty(shiftGroup) || oConvertUtils.isEmpty(shift)){
-            log.info("{}{}", "B端热装单统计当班热装查询失败!", "未查询到当班信息!");
-            return onDutyStatistics;
+        String shiftGroup = "";
+        String shift = "";
+        BilletHotsendChangeShift billetHotsendChangeShift;
+        if(oConvertUtils.isEmpty(changeShiftId)) {
+            // 获取当前班组班次信息
+            String keyShiftGroup = String.format("class:shift:group:%s", ccmNo);
+            String keyShift = String.format("class:shift:%s", ccmNo);
+            shiftGroup = oConvertUtils.getString(redisTemplate.opsForValue().get(keyShiftGroup));
+            shift = oConvertUtils.getString(redisTemplate.opsForValue().get(keyShift));
+            if (oConvertUtils.isEmpty(shiftGroup) || oConvertUtils.isEmpty(shift)) {
+                log.info("{}{}", "B端热装单统计当班热装查询失败!", "未查询到当班信息!");
+                return onDutyStatistics;
+            }
+            // 根据铸机号、班组班别查询对应的热装单信息
+            billetHotsendChangeShift = billetHotsendChangeShiftService.getOne(new LambdaQueryWrapper<BilletHotsendChangeShift>()
+                    .eq(BilletHotsendChangeShift::getCcmNo, ccmNo).eq(BilletHotsendChangeShift::getShiftGroup, shiftGroup).eq(BilletHotsendChangeShift::getShift, shift)
+                    .orderByDesc(BilletHotsendChangeShift::getCreateTime).last("limit 1"));
+        }else {
+            // 根据铸机号、交班记录ID,获取交班记录中的班别、班次、创建时间
+            LambdaQueryWrapper<BilletHotsendChangeShift> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(BilletHotsendChangeShift::getId, changeShiftId).eq(BilletHotsendChangeShift::getCcmNo, ccmNo);
+            billetHotsendChangeShift = billetHotsendChangeShiftService.getOne(queryWrapper);
+            if (billetHotsendChangeShift == null){
+                log.info("{}{}", "查询历史当班装运单信息失败,交班记录为空!", ccmNo + "失败时间:" + new Date());
+                return onDutyStatistics;
+            }
+            shiftGroup = billetHotsendChangeShift.getShiftGroup();
+            shift = billetHotsendChangeShift.getShift();
         }
-        // 根据铸机号、班组班别查询对应的热装单信息
-        BilletHotsendChangeShift billetHotsendChangeShiftList = billetHotsendChangeShiftService.getOne(new LambdaQueryWrapper<BilletHotsendChangeShift>()
-                .eq(BilletHotsendChangeShift::getCcmNo, ccmNo).eq(BilletHotsendChangeShift::getShiftGroup, shiftGroup).eq(BilletHotsendChangeShift::getShift, shift)
-                .orderByDesc(BilletHotsendChangeShift::getCreateTime).last("limit 1"));
         // 查询热装信息(棒二明细)统计热装总支数、热装总重量<出坯量>
         List<DestinationStatisticsDetails> statisticsDetailsList1 = new ArrayList<>();
 
@@ -2622,8 +2675,14 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         queryWrapper.eq(RollClubTwoDetails::getShiftGroup, shiftGroup);
         queryWrapper.eq(RollClubTwoDetails::getShift, shift);
         // 添加大于 billetHotsendChangeShiftList 的 createTime 条件
-        if (billetHotsendChangeShiftList != null && billetHotsendChangeShiftList.getCreateTime() != null) {
-            queryWrapper.gt(RollClubTwoDetails::getCreateTime, billetHotsendChangeShiftList.getCreateTime());
+        if (billetHotsendChangeShift != null && billetHotsendChangeShift.getCreateTime() != null) {
+            if (oConvertUtils.isEmpty(changeShiftId)) {
+                // 当 changeShiftId 为空时,时间范围从 createTime 到当前时间
+                queryWrapper.between(RollClubTwoDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
+            } else {
+                // 当 changeShiftId 不为空时,时间范围从 createTime 到 updateTime
+                queryWrapper.between(RollClubTwoDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), billetHotsendChangeShift.getChangeShiftTime());
+            }
         }
         List<RollClubTwoDetails> rollClubTwoDetailsList = rollClubTwoDetailsService.list(queryWrapper);
         if (oConvertUtils.listIsNotEmpty(rollClubTwoDetailsList)){
@@ -2679,22 +2738,40 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
     }
 
     @Override
-    public OnDutyStatistics queryHotChargingThreeStatistics(String ccmNo) {
+    public OnDutyStatistics queryHotChargingThreeStatistics(String ccmNo,String changeShiftId) {
         OnDutyStatistics onDutyStatistics = new OnDutyStatistics();
 
-        // 获取当前班组班次信息
-        String keyShiftGroup = String.format("class:shift:group:%s", ccmNo);
-        String keyShift = String.format("class:shift:%s", ccmNo);
-        String shiftGroup = oConvertUtils.getString(redisTemplate.opsForValue().get(keyShiftGroup));
-        String shift = oConvertUtils.getString(redisTemplate.opsForValue().get(keyShift));
-        if (oConvertUtils.isEmpty(shiftGroup) || oConvertUtils.isEmpty(shift)){
-            log.info("{}{}", "B端热装单统计当班热装查询失败!", "未查询到当班信息!");
-            return onDutyStatistics;
+
+        String shiftGroup = "";
+        String shift = "";
+        BilletHotsendChangeShift billetHotsendChangeShift;
+
+        if(oConvertUtils.isEmpty(changeShiftId)) {
+            // 获取当前班组班次信息
+            String keyShiftGroup = String.format("class:shift:group:%s", ccmNo);
+            String keyShift = String.format("class:shift:%s", ccmNo);
+            shiftGroup = oConvertUtils.getString(redisTemplate.opsForValue().get(keyShiftGroup));
+            shift = oConvertUtils.getString(redisTemplate.opsForValue().get(keyShift));
+            if (oConvertUtils.isEmpty(shiftGroup) || oConvertUtils.isEmpty(shift)) {
+                log.info("{}{}", "B端热装单统计当班热装查询失败!", "未查询到当班信息!");
+                return onDutyStatistics;
+            }
+            // 根据铸机号、班组班别查询对应的热装单信息
+            billetHotsendChangeShift = billetHotsendChangeShiftService.getOne(new LambdaQueryWrapper<BilletHotsendChangeShift>()
+                    .eq(BilletHotsendChangeShift::getCcmNo, ccmNo).eq(BilletHotsendChangeShift::getShiftGroup, shiftGroup).eq(BilletHotsendChangeShift::getShift, shift)
+                    .orderByDesc(BilletHotsendChangeShift::getCreateTime).last("limit 1"));
+        }else {
+            // 根据铸机号、交班记录ID,获取交班记录中的班别、班次、创建时间
+            LambdaQueryWrapper<BilletHotsendChangeShift> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(BilletHotsendChangeShift::getId, changeShiftId).eq(BilletHotsendChangeShift::getCcmNo, ccmNo);
+            billetHotsendChangeShift = billetHotsendChangeShiftService.getOne(queryWrapper);
+            if (billetHotsendChangeShift == null){
+                log.info("{}{}", "查询历史当班装运单信息失败,交班记录为空!", ccmNo + "失败时间:" + new Date());
+                return onDutyStatistics;
+            }
+            shiftGroup = billetHotsendChangeShift.getShiftGroup();
+            shift = billetHotsendChangeShift.getShift();
         }
-        // 根据铸机号、班组班别查询对应的热装单信息
-        BilletHotsendChangeShift billetHotsendChangeShiftList = billetHotsendChangeShiftService.getOne(new LambdaQueryWrapper<BilletHotsendChangeShift>()
-                .eq(BilletHotsendChangeShift::getCcmNo, ccmNo).eq(BilletHotsendChangeShift::getShiftGroup, shiftGroup).eq(BilletHotsendChangeShift::getShift, shift)
-                .orderByDesc(BilletHotsendChangeShift::getCreateTime).last("limit 1"));
         // 查询热装信息(棒三明细)统计热装总支数、热装总重量<出坯量>
         List<DestinationStatisticsDetails> statisticsDetailsList2 = new ArrayList<>();
 
@@ -2707,8 +2784,14 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         queryWrapper1.eq(RollClubThreeDetails::getShiftGroup, shiftGroup);
         queryWrapper1.eq(RollClubThreeDetails::getShift, shift);
         // 添加大于 billetHotsendChangeShiftList 的 createTime 条件
-        if (billetHotsendChangeShiftList != null && billetHotsendChangeShiftList.getCreateTime() != null) {
-            queryWrapper1.gt(RollClubThreeDetails::getCreateTime, billetHotsendChangeShiftList.getCreateTime());
+        if (billetHotsendChangeShift != null && billetHotsendChangeShift.getCreateTime() != null) {
+            if (oConvertUtils.isEmpty(changeShiftId)) {
+                // 当 changeShiftId 为空时,时间范围从 createTime 到当前时间
+                queryWrapper1.between(RollClubThreeDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
+            } else {
+                // 当 changeShiftId 不为空时,时间范围从 createTime 到 updateTime
+                queryWrapper1.between(RollClubThreeDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), billetHotsendChangeShift.getChangeShiftTime());
+            }
         }
         List<RollClubThreeDetails> rollClubThreeDetailsList = rollClubThreeDetailsService.list(queryWrapper1);
         if (oConvertUtils.listIsNotEmpty(rollClubThreeDetailsList)){
@@ -2765,23 +2848,41 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         return onDutyStatistics;
     }
 
+
+
     @Override
-    public OnDutyStatistics queryHotChargingOutStatistics(String ccmNo) {
+    public OnDutyStatistics queryHotChargingOutStatistics(String ccmNo,String changeShiftId) {
         OnDutyStatistics onDutyStatistics = new OnDutyStatistics();
 
-        // 获取当前班组班次信息
-        String keyShiftGroup = String.format("class:shift:group:%s", ccmNo);
-        String keyShift = String.format("class:shift:%s", ccmNo);
-        String shiftGroup = oConvertUtils.getString(redisTemplate.opsForValue().get(keyShiftGroup));
-        String shift = oConvertUtils.getString(redisTemplate.opsForValue().get(keyShift));
-        if (oConvertUtils.isEmpty(shiftGroup) || oConvertUtils.isEmpty(shift)){
-            log.info("{}{}", "B端热装单统计当班热装查询失败!", "未查询到当班信息!");
-            return onDutyStatistics;
+        String shiftGroup = "";
+        String shift = "";
+        BilletHotsendChangeShift billetHotsendChangeShift;
+        if(oConvertUtils.isEmpty(changeShiftId)) {
+            // 获取当前班组班次信息
+            String keyShiftGroup = String.format("class:shift:group:%s", ccmNo);
+            String keyShift = String.format("class:shift:%s", ccmNo);
+            shiftGroup = oConvertUtils.getString(redisTemplate.opsForValue().get(keyShiftGroup));
+            shift = oConvertUtils.getString(redisTemplate.opsForValue().get(keyShift));
+            if (oConvertUtils.isEmpty(shiftGroup) || oConvertUtils.isEmpty(shift)) {
+                log.info("{}{}", "B端热装单统计当班热装查询失败!", "未查询到当班信息!");
+                return onDutyStatistics;
+            }
+            // 根据铸机号、班组班别查询对应的热装单信息
+            billetHotsendChangeShift = billetHotsendChangeShiftService.getOne(new LambdaQueryWrapper<BilletHotsendChangeShift>()
+                    .eq(BilletHotsendChangeShift::getCcmNo, ccmNo).eq(BilletHotsendChangeShift::getShiftGroup, shiftGroup).eq(BilletHotsendChangeShift::getShift, shift)
+                    .orderByDesc(BilletHotsendChangeShift::getCreateTime).last("limit 1"));
+        }else {
+            // 根据铸机号、交班记录ID,获取交班记录中的班别、班次、创建时间
+            LambdaQueryWrapper<BilletHotsendChangeShift> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(BilletHotsendChangeShift::getId, changeShiftId).eq(BilletHotsendChangeShift::getCcmNo, ccmNo);
+            billetHotsendChangeShift = billetHotsendChangeShiftService.getOne(queryWrapper);
+            if (billetHotsendChangeShift == null){
+                log.info("{}{}", "查询历史当班装运单信息失败,交班记录为空!", ccmNo + "失败时间:" + new Date());
+                return onDutyStatistics;
+            }
+            shiftGroup = billetHotsendChangeShift.getShiftGroup();
+            shift = billetHotsendChangeShift.getShift();
         }
-        // 根据铸机号、班组班别查询对应的热装单信息
-        BilletHotsendChangeShift billetHotsendChangeShiftList = billetHotsendChangeShiftService.getOne(new LambdaQueryWrapper<BilletHotsendChangeShift>()
-                .eq(BilletHotsendChangeShift::getCcmNo, ccmNo).eq(BilletHotsendChangeShift::getShiftGroup, shiftGroup).eq(BilletHotsendChangeShift::getShift, shift)
-                .orderByDesc(BilletHotsendChangeShift::getCreateTime).last("limit 1"));
         // 查询热装信息(上若明细)统计热装总支数、热装总重量<出坯量>
         List<DestinationStatisticsDetails> statisticsDetailsList3 = new ArrayList<>();
         // 统计总数
@@ -2793,8 +2894,14 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         queryWrapper2.eq(RollOutShippDetails::getShiftGroup, shiftGroup);
         queryWrapper2.eq(RollOutShippDetails::getShift, shift);
         // 添加大于 billetHotsendChangeShiftList 的 createTime 条件
-        if (billetHotsendChangeShiftList != null && billetHotsendChangeShiftList.getCreateTime() != null) {
-            queryWrapper2.gt(RollOutShippDetails::getCreateTime, billetHotsendChangeShiftList.getCreateTime());
+        if (billetHotsendChangeShift != null && billetHotsendChangeShift.getCreateTime() != null) {
+            if (oConvertUtils.isEmpty(changeShiftId)) {
+                // 当 changeShiftId 为空时,时间范围从 createTime 到当前时间
+                queryWrapper2.between(RollOutShippDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
+            } else {
+                // 当 changeShiftId 不为空时,时间范围从 createTime 到 updateTime
+                queryWrapper2.between(RollOutShippDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), billetHotsendChangeShift.getChangeShiftTime());
+            }
         }
         List<RollOutShippDetails> rollOutShippDetailsList = rollOutShippDetailsService.list(queryWrapper2);
         if (oConvertUtils.listIsNotEmpty(rollOutShippDetailsList)){