Explorar o código

高线工作台导出过滤没有确认的数据,储运中心导出最终结果集增加冷坯分单信息,高线统计增加冷坯分单信息的数量跟支数

lingpeng.li hai 5 días
pai
achega
6234784ffe

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

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -232,6 +233,13 @@ public class BilletHotsendChangeShiftController extends JeecgController<BilletHo
 			String changeShiftId = billetHotsendChangeShiftInfo.getId();
 			String requestUrl = String.format(URL, ccmNo, changeShiftId);
 
+			LambdaUpdateWrapper<BilletHotsendChangeShift> updateWrapper = new LambdaUpdateWrapper<>();
+			updateWrapper.eq(BilletHotsendChangeShift::getId, billetHotsendChangeShiftInfo.getId())
+					.set(BilletHotsendChangeShift::getCardContent, billetHotsendChangeShiftInfo.getContent())
+					.set(BilletHotsendChangeShift::getCardSizeInfo, billetHotsendChangeShiftInfo.getSizeInfo());
+
+			billetHotsendChangeShiftService.update(updateWrapper);
+
 			try {
 				Result<?> result = restTemplate.getForObject(requestUrl, Result.class);
 				if (result != null && result.isSuccess()) {

+ 34 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/billetOriginalProductRecord/controller/BilletOriginalProductRecordController.java

@@ -2782,6 +2782,40 @@ public class BilletOriginalProductRecordController extends JeecgController<Bille
 			if ("6".equals(record.getCcmNo()) && StringUtils.isNotBlank(record.getStackLength())) {
 				handleSteppingColdBedData(statisticsMap, record.getStackLength());
 			}
+
+			// 处理冷送确认信息
+			String coldBilletInfo = record.getColdBilletInfo();
+			if (StringUtils.isNotBlank(coldBilletInfo)) {
+				try {
+					JSONArray coldArray = JSON.parseArray(coldBilletInfo);
+					for (int i = 0; i < coldArray.size(); i++) {
+						JSONObject coldObj = coldArray.getJSONObject(i);
+						JSONObject invoicing = coldObj.getJSONObject("storageCenterHeatNoInvoicing");
+						if (invoicing != null) {
+							JSONObject rollHeightDetails = invoicing.getJSONObject("rollHeightDetails");
+							if (rollHeightDetails != null) {
+								JSONArray sizeDetails = rollHeightDetails.getJSONArray("sizeDetails");
+								if (sizeDetails != null) {
+									for (int j = 0; j < sizeDetails.size(); j++) {
+										JSONObject sizeObj = sizeDetails.getJSONObject(j);
+										Integer sizeAmount = sizeObj.getInteger("sizeAmount");
+										Double sizeWeight = sizeObj.getDouble("sizeWeight");
+										String sizeKey = String.valueOf(sizeObj.get("size"));
+										double sizeValue = sizeObj.getDoubleValue("size");
+
+										if (sizeAmount != null && sizeAmount > 0) {
+											updateStatistics(statisticsMap, sizeKey, sizeAmount, sizeValue,
+													sizeWeight != null ? sizeWeight : 0d);
+										}
+									}
+								}
+							}
+						}
+					}
+				} catch (Exception e) {
+					log.error("解析 coldBilletInfo 失败,数据:{}", coldBilletInfo, e);
+				}
+			}
 		}
 
 		// 计算总数量和总重量

+ 8 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollHeight/controller/RollHeightController.java

@@ -29,6 +29,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @Description: 轧钢高线
@@ -193,6 +194,13 @@ public class RollHeightController {
 
         List<RollHeightVO> rollHeightVOS = rollHeightService.rollHeightList(queryDTO);
 
+        // 过滤掉未确认(confirmTime == null)的记录
+        rollHeightVOS = rollHeightVOS.stream()
+                .filter(vo -> vo.getStorageCenterHeatNoInvoicing() != null &&
+                        vo.getStorageCenterHeatNoInvoicing().getRollHeightDetails() != null &&
+                        vo.getStorageCenterHeatNoInvoicing().getRollHeightDetails().getConfirmTime() != null)
+                .collect(Collectors.toList());
+
         // 数据处理
         List<StorageCenterExportRow> exportList = rollHeightService.buildExportData(rollHeightVOS);
 

+ 3 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollHeight/service/IRollHeightService.java

@@ -1,6 +1,7 @@
 package org.jeecg.modules.billet.rollHeight.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.billet.billetOriginalProductRecord.entity.BilletOriginalProductRecord;
 import org.jeecg.modules.billet.rollHeight.dto.RollHeightQueryDTO;
 import org.jeecg.modules.billet.rollHeight.entity.DestinationStatistics;
 import org.jeecg.modules.billet.rollHeight.entity.RollHeight;
@@ -24,4 +25,6 @@ public interface IRollHeightService extends IService<RollHeight> {
     List<RollHeightVO> rollHeightList(RollHeightQueryDTO queryDTO);
 
     List<StorageCenterExportRow> buildExportData(List<RollHeightVO> records);
+
+    List<RollHeightVO> handleColdBillet(List<BilletOriginalProductRecord> list);
 }

+ 131 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollHeight/service/impl/RollHeightServiceImpl.java

@@ -881,6 +881,137 @@ public class RollHeightServiceImpl extends ServiceImpl<RollHeightMapper, RollHei
         return rows;
     }
 
+    @Override
+    public List<RollHeightVO> handleColdBillet(List<BilletOriginalProductRecord> list) {
+        List<RollHeightVO> resultList = new ArrayList<>();
+        if (list == null || list.isEmpty()) {
+            return resultList;
+        }
+
+        for (BilletOriginalProductRecord record : list) {
+            String jsonColdBilletInfo = record.getColdBilletInfo();
+            if (jsonColdBilletInfo == null || jsonColdBilletInfo.trim().isEmpty()) {
+                continue;
+            }
+
+            try {
+                JSONArray coldBilletArray = JSON.parseArray(jsonColdBilletInfo);
+                for (int i = 0; i < coldBilletArray.size(); i++) {
+                    JSONObject coldBilletObj = coldBilletArray.getJSONObject(i);
+                    RollHeightVO vo = new RollHeightVO();
+
+                    // 1. 解析 heatNoDetails 数组
+                    JSONArray heatNoDetailsJson = coldBilletObj.getJSONArray("heatNoDetails");
+                    if (heatNoDetailsJson != null && !heatNoDetailsJson.isEmpty()) {
+                        List<RollHeightVO.HeatNoDetail> heatNoDetails = new ArrayList<>();
+                        for (int j = 0; j < heatNoDetailsJson.size(); j++) {
+                            JSONObject heatNoJson = heatNoDetailsJson.getJSONObject(j);
+                            RollHeightVO.HeatNoDetail heatNoDetail = new RollHeightVO.HeatNoDetail();
+
+                            heatNoDetail.setCcmNo(heatNoJson.getInteger("ccmNo"));
+                            heatNoDetail.setHeatNo(heatNoJson.getString("heatNo"));
+                            heatNoDetail.setHeatNoAmount(heatNoJson.getInteger("heatNoAmount"));
+                            heatNoDetail.setHeatNoWeight(heatNoJson.getBigDecimal("heatNoWeight"));
+                            heatNoDetail.setShift(heatNoJson.getString("shift"));
+                            heatNoDetail.setShiftGroup(heatNoJson.getString("shiftGroup"));
+
+                            // 处理 createTime(可能是时间戳或字符串)
+                            Object createTimeObj = heatNoJson.get("createTime");
+                            if (createTimeObj != null) {
+                                if (createTimeObj instanceof Number) {
+                                    heatNoDetail.setCreateTime(new Date(((Number) createTimeObj).longValue()));
+                                } else if (createTimeObj instanceof String) {
+                                    heatNoDetail.setCreateTime(DateUtils.str2Date(createTimeObj.toString(), DateUtils.datetimeFormat.get()));
+                                }
+                            }
+
+                            // 设置 updateTime(如果JSON中有该字段)
+                            Object updateTimeObj = heatNoJson.get("updateTime");
+                            if (updateTimeObj != null) {
+                                if (updateTimeObj instanceof Number) {
+                                    heatNoDetail.setUpdateTime(new Date(((Number) updateTimeObj).longValue()));
+                                } else if (updateTimeObj instanceof String) {
+                                    heatNoDetail.setUpdateTime(DateUtils.str2Date(updateTimeObj.toString(), DateUtils.datetimeFormat.get()));
+                                }
+                            }
+                            heatNoDetails.add(heatNoDetail);
+                        }
+                        vo.setHeatNoDetails(heatNoDetails);
+                    }
+
+                    // 2. 解析 storageCenterHeatNoInvoicing 对象
+                    JSONObject invoicingObj = coldBilletObj.getJSONObject("storageCenterHeatNoInvoicing");
+                    if (invoicingObj != null) {
+                        RollHeightHeatVO heatVO = new RollHeightHeatVO();
+                        RollHeightHeatVO.RollHeightHeatNo details = new RollHeightHeatVO.RollHeightHeatNo();
+
+                        JSONObject rollHeightJson = invoicingObj.getJSONObject("rollHeightDetails");
+                        if (rollHeightJson != null) {
+                            details.setId(rollHeightJson.getString("id"));
+                            details.setBrandNum(rollHeightJson.getString("brandNum"));
+                            details.setTotalAmount(rollHeightJson.getInteger("totalAmount"));
+                            details.setTotalWeight(rollHeightJson.getBigDecimal("totalWeight"));
+                            details.setHotOrColdStaus(rollHeightJson.getInteger("hotOrColdStaus"));
+
+                            // 处理 confirmTime
+                            String confirmTimeStr = rollHeightJson.getString("coldConfirmTime");
+                            if (confirmTimeStr != null) {
+                                details.setConfirmTime(DateUtils.str2Date(confirmTimeStr, DateUtils.datetimeFormat.get()));
+                            }
+
+                            // 解析 sizeDetails
+                            JSONArray sizeDetailsArray = rollHeightJson.getJSONArray("sizeDetails");
+                            if (sizeDetailsArray != null && !sizeDetailsArray.isEmpty()) {
+                                List<RollHeightHeatVO.SizeDetail> sizeDetails = new ArrayList<>();
+                                for (int j = 0; j < sizeDetailsArray.size(); j++) {
+                                    JSONObject sizeJson = sizeDetailsArray.getJSONObject(j);
+                                    RollHeightHeatVO.SizeDetail sizeDetail = new RollHeightHeatVO.SizeDetail();
+                                    sizeDetail.setSize(sizeJson.getInteger("size"));
+                                    sizeDetail.setSizeAmount(sizeJson.getInteger("sizeAmount"));
+                                    sizeDetail.setSizeWeight(sizeJson.getBigDecimal("sizeWeight"));
+                                    sizeDetail.setStartAmount(sizeJson.getInteger("startAmount"));
+                                    sizeDetail.setEndAmount(sizeJson.getInteger("endAmount"));
+                                    sizeDetails.add(sizeDetail);
+                                }
+                                details.setSizeDetails(sizeDetails);
+                            }
+
+                            // 解析 rollSendDetails
+                            JSONArray rollSendArray = rollHeightJson.getJSONArray("rollSendDetails");
+                            if (rollSendArray != null && !rollSendArray.isEmpty()) {
+                                List<RollHeightHeatVO.RollSendDetail> sendDetails = new ArrayList<>();
+                                for (int j = 0; j < rollSendArray.size(); j++) {
+                                    JSONObject sendJson = rollSendArray.getJSONObject(j);
+                                    RollHeightHeatVO.RollSendDetail sendDetail = new RollHeightHeatVO.RollSendDetail();
+                                    sendDetail.setSize(sendJson.getInteger("size"));
+                                    sendDetail.setSpec(sendJson.getString("spec"));
+                                    sendDetail.setAmount(sendJson.getInteger("amount"));
+                                    sendDetail.setWeight(sendJson.getBigDecimal("weight"));
+
+                                    // 处理 createTime
+                                    Object createTimeObj = sendJson.get("createTime");
+                                    if (createTimeObj instanceof Number) {
+                                        sendDetail.setCreateTime(new Date(((Number) createTimeObj).longValue()));
+                                    } else if (createTimeObj instanceof String) {
+                                        sendDetail.setCreateTime(DateUtils.str2Date(createTimeObj.toString(), DateUtils.datetimeFormat.get()));
+                                    }
+                                    sendDetails.add(sendDetail);
+                                }
+                                details.setRollSendDetails(sendDetails);
+                            }
+                        }
+                        heatVO.setRollHeightDetails(details);
+                        vo.setStorageCenterHeatNoInvoicing(heatVO);
+                    }
+                    resultList.add(vo);
+                }
+            } catch (Exception e) {
+                log.error("解析 JSON 失败: {}", jsonColdBilletInfo, e);
+            }
+        }
+        return resultList;
+    }
+
 
     private static StorageCenterExportRow otherConvert(RollHeightHeatVO.RollSendDetail detail, Integer ccmNo, String endPoint) {
         StorageCenterExportRow row = new StorageCenterExportRow();

+ 88 - 86
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/storageBill/controller/StorageBillPrintController.java

@@ -29,12 +29,18 @@ import org.jeecg.modules.billet.billetHotsendChangeShift.entity.BilletHotsendCha
 import org.jeecg.modules.billet.billetHotsendChangeShift.service.IBilletHotsendChangeShiftService;
 import org.jeecg.modules.billet.billetOriginalProductRecord.entity.BilletOriginalProductRecord;
 import org.jeecg.modules.billet.billetOriginalProductRecord.service.IBilletOriginalProductRecordService;
+import org.jeecg.modules.billet.rollClubOne.dto.RollClubOneQueryDTO;
+import org.jeecg.modules.billet.rollClubOne.service.IRollClubOneService;
+import org.jeecg.modules.billet.rollClubOne.vo.RollClubOneVO;
 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.rollHeight.dto.RollHeightQueryDTO;
+import org.jeecg.modules.billet.rollHeight.service.IRollHeightService;
+import org.jeecg.modules.billet.rollHeight.vo.RollHeightVO;
 import org.jeecg.modules.billet.rollOldAreas.entity.RollOldAreasDetails;
 import org.jeecg.modules.billet.rollOldAreas.service.IRollOldAreasDetailsService;
 import org.jeecg.modules.billet.rollOutShipp.entity.RollOutShippDetails;
@@ -62,6 +68,8 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -102,10 +110,14 @@ public class StorageBillPrintController extends JeecgController<StorageBillPrint
     private IBilletHotsendChangeShiftService billetHotsendChangeShiftService;
 
     @Autowired
-    private IBilletOriginalProductRecordService billetOriginalProductRecordService;
+    private IRollClubOneService rollClubOneService;
+
+    @Autowired
+    private IRollHeightService rollHeightService;
 
     @Autowired
-    BilletRulerConfigMapper billetRulerConfigMapper;
+    private IBilletOriginalProductRecordService billetOriginalProductRecordService;
+
     @Autowired
     private ISysDictService sysDictService;
     @Autowired
@@ -503,106 +515,96 @@ public class StorageBillPrintController extends JeecgController<StorageBillPrint
                 exportRows.add(exportRow);
             });
 
-            QueryWrapper<BilletOriginalProductRecord> recordQueryWrapper = new QueryWrapper<>();
+            //导出棒一或者高线数据
+            if("5".equals(storageBillPrint.getCcmNo())){
+                RollClubOneQueryDTO rollClubOneQueryDTO = new RollClubOneQueryDTO();
+                rollClubOneQueryDTO.setCcmNo(storageBillPrint.getCcmNo());
+                rollClubOneQueryDTO.setStartTime(startTime);
+                rollClubOneQueryDTO.setEndTime(endTime);
+                if(!oConvertUtils.isNotEmpty(storageBillPrint.getHeatNo())){
+                    rollClubOneQueryDTO.setHeatNo(storageBillPrint.getHeatNo());
+                }
 
-            // 手动设置必要条件,避免 QueryGenerator 自动生成不必要的条件
-            if (oConvertUtils.isNotEmpty(storageBillPrint.getCcmNo())) {
-                recordQueryWrapper.eq("ccm_no", storageBillPrint.getCcmNo());
-            }
+                List<RollClubOneVO> rollClubOneVOS = rollClubOneService.rollClubOneList(rollClubOneQueryDTO);
 
-            // 修改时间范围查询条件为 >= startTime 且 <= endTime
-            recordQueryWrapper.ge("create_time", startTime)  // 大于等于开始时间
-                    .le("create_time", endTime);   // 小于等于结束时间
+                // 数据处理
+                List<StorageCenterExportRow> exportOneList = rollClubOneService.buildExportData(rollClubOneVOS);
+                exportRows.addAll(exportOneList);
 
-            // Step.2 获取导出数据
-            // 打印完整的查询条件
-            List<BilletOriginalProductRecord> list = billetOriginalProductRecordService.list(recordQueryWrapper);
+            }else if("6".equals(storageBillPrint.getCcmNo())){
+                RollHeightQueryDTO rollHeightQueryDTO = new RollHeightQueryDTO();
+                rollHeightQueryDTO.setCcmNo(storageBillPrint.getCcmNo());
+                rollHeightQueryDTO.setStartTime(startTime);
+                rollHeightQueryDTO.setEndTime(endTime);
+                if(!oConvertUtils.isNotEmpty(storageBillPrint.getHeatNo())){
+                    rollHeightQueryDTO.setHeatNo(storageBillPrint.getHeatNo());
+                }
 
-            ObjectMapper objectMapper = new ObjectMapper();
+                List<RollHeightVO> rollHeightVOS = rollHeightService.rollHeightList(rollHeightQueryDTO);
 
-            List<RollClubOneExportVO> oneList = new ArrayList<>();
-            for (BilletOriginalProductRecord record : list) {
+                // 过滤掉未确认(confirmTime == null)的记录
+                rollHeightVOS = rollHeightVOS.stream()
+                        .filter(vo -> vo.getStorageCenterHeatNoInvoicing() != null &&
+                                vo.getStorageCenterHeatNoInvoicing().getRollHeightDetails() != null &&
+                                vo.getStorageCenterHeatNoInvoicing().getRollHeightDetails().getConfirmTime() != null)
+                        .collect(Collectors.toList());
 
-                Map<String, Integer> lengthCountMap = new HashMap<>();
+                // 数据处理
+                List<StorageCenterExportRow> exportHeightList = rollHeightService.buildExportData(rollHeightVOS);
 
-                // 3. 解析 JSON 明细
-                String detailJson = record.getRollClubOneDetails();
-                if (StringUtils.isNotBlank(detailJson)) {
-                    try {
-                        JsonNode rootNode = objectMapper.readTree(detailJson);
-
-                        String heatNo = record.getHeatNo();
-                        String ccmNo = record.getCcmNo();
-                        Date createTime = record.getCreateTime();
-
-                        // 品号从 grade 映射
-                        String brandNum = Optional.ofNullable(record.getGrade())
-                                .map(bn -> sysDictService.queryDictTextByKey("billet_spec", bn))
-                                .orElseGet(() -> sysDictService.queryDictTextByKey("billet_spec", "5"));
-
-                        // 各定尺计数
-                        JsonNode lengthGroupNode = rootNode.get("lengthGroupCount");
-                        if (lengthGroupNode != null && lengthGroupNode.isObject()) {
-                            lengthGroupNode.fields().forEachRemaining(e ->
-                                    lengthCountMap.merge(e.getKey(), e.getValue().asInt(), Integer::sum)
-                            );
-                        }
+                exportRows.addAll(exportHeightList);
 
-                        // 【新增】跳过没有定尺数据的记录
-                        if (lengthCountMap.isEmpty()) {
-                            log.info("heatNo={} 的 lengthGroupCount 为空,跳过处理", heatNo);
-                            continue;
-                        }
 
-                        // 4. 根据每种定尺构建 sizeDetail & rollSendDetail
-                        for (Map.Entry<String, Integer> entry : lengthCountMap.entrySet()) {
-                            String length = entry.getKey();
-                            int count = entry.getValue();
+                LambdaQueryWrapper<BilletOriginalProductRecord> heightQueryWrapper = new LambdaQueryWrapper<>();
+                heightQueryWrapper.eq(BilletOriginalProductRecord::getCcmNo, storageBillPrint.getCcmNo());
 
-                            RollClubOneExportVO rollClubOneExportVO = new RollClubOneExportVO();
+                // 炉号查询
+                if (oConvertUtils.isNotEmpty(storageBillPrint.getHeatNo())) {
+                    heightQueryWrapper.eq(BilletOriginalProductRecord::getHeatNo, storageBillPrint.getHeatNo());
+                }
 
-                            rollClubOneExportVO.setHeatNo(heatNo);
-                            rollClubOneExportVO.setSize(length);
-                            rollClubOneExportVO.setCount(count);
-                            rollClubOneExportVO.setCcmNo(ccmNo);
-                            rollClubOneExportVO.setBrandNum(brandNum);
-                            rollClubOneExportVO.setCreateTime(createTime);
+                // 添加 ColdBilletInfo 不为 null 的条件
+                heightQueryWrapper.isNotNull(BilletOriginalProductRecord::getColdBilletInfo);
 
-                            oneList.add(rollClubOneExportVO);
-                        }
+                List<BilletOriginalProductRecord> list = billetOriginalProductRecordService.list(heightQueryWrapper);
 
-                    } catch (Exception e) {
-                        log.info("JSON 解析失败,数据:{}", detailJson, e);
-                    }
-                }
-            }
+                List<RollHeightVO> rollHeightColdList = rollHeightService.handleColdBillet(list);
 
-            oneList.forEach(x -> {
-                StorageCenterExportRow exportRow = new StorageCenterExportRow();
-                exportRow.setAmount(x.getCount());
-                exportRow.setCcmNo(Integer.valueOf(x.getCcmNo()));
-                exportRow.setEndPoint("棒一");
-                exportRow.setFactoryDate(DateUtils.date2Str(x.getCreateTime(), DateUtils.datetimeFormat.get()));
-                exportRow.setHeatNo(x.getHeatNo());
-                exportRow.setLicensePlate("辊道");
-                BigDecimal result = safeToBigDecimal(x.getSize()).divide(BigDecimal.valueOf(1000));
-                if (result != null) {
-                    exportRow.setSize("170*170*" + result.toPlainString());
-                }
-                BigDecimal singleWeight = new BigDecimal(x.getSize())
-                        .divide(new BigDecimal("1000"), 3, RoundingMode.HALF_UP)
-                        .multiply(meterWeightFactor)
-                        .setScale(3, RoundingMode.HALF_UP);
+                // 过滤掉未确认(confirmTime == null)的记录
+                rollHeightColdList = rollHeightColdList.stream()
+                        .filter(vo -> vo.getStorageCenterHeatNoInvoicing() != null &&
+                                vo.getStorageCenterHeatNoInvoicing().getRollHeightDetails() != null &&
+                                vo.getStorageCenterHeatNoInvoicing().getRollHeightDetails().getConfirmTime() != null)
+                        .collect(Collectors.toList());
 
-                BigDecimal weight = singleWeight.multiply(BigDecimal.valueOf(x.getCount()));
-                exportRow.setWeightPerPiece(singleWeight);
-                exportRow.setTotalWeight(weight);
-                exportRow.setBrand(x.getBrandNum());
+                // 数据处理
+                List<StorageCenterExportRow> exportHeightColdList = rollHeightService.buildExportData(rollHeightColdList);
 
-                exportRows.add(exportRow);
-            });
+                exportRows.addAll(exportHeightColdList);
+            }
 
-            exportRows.sort(Comparator.comparing(StorageCenterExportRow::getFactoryDate));
+
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+            List<StorageCenterExportRow> filteredRows = exportRows.stream()
+                    .filter(row -> {
+                        try {
+                            Date factoryDate = sdf.parse(row.getFactoryDate());
+                            return !factoryDate.before(startTime) && !factoryDate.after(endTime);
+                        } catch (ParseException e) {
+                            return false;
+                        }
+                    })
+                    .sorted((r1, r2) -> {
+                        try {
+                            Date d1 = sdf.parse(r1.getFactoryDate());
+                            Date d2 = sdf.parse(r2.getFactoryDate());
+                            return d1.compareTo(d2);
+                        } catch (ParseException e) {
+                            return 0;
+                        }
+                    })
+                    .collect(Collectors.toList());
 
             // 设置响应
             response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
@@ -613,7 +615,7 @@ public class StorageBillPrintController extends JeecgController<StorageBillPrint
             // 导出
             EasyExcel.write(response.getOutputStream(), StorageCenterExportRow.class)
                     .sheet("装运打印信息")
-                    .doWrite(exportRows);
+                    .doWrite(filteredRows);
         } catch (Exception e) {
             log.error("导出Excel失败:", e);
         }