Przeglądaj źródła

积木报表和热送单统计接口开发

qiangxuan 5 miesięcy temu
rodzic
commit
c9b0b3a33d

+ 28 - 0
zgztBus/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java

@@ -788,4 +788,32 @@ public class DateUtils extends PropertyEditorSupport {
         return endCalendar.getTime();
     }
 
+    /**
+     * 根据指定时间获取当天的开始时间,即00:00:00
+     *
+     * @return 当天的开始时间
+     */
+    public static Date getStartOfDayByDate(Date time) {
+        Calendar startCalendar = Calendar.getInstance();
+        startCalendar.setTime(time);
+        startCalendar.set(Calendar.HOUR_OF_DAY, 0);
+        startCalendar.set(Calendar.MINUTE, 0);
+        startCalendar.set(Calendar.SECOND, 0);
+        return startCalendar.getTime();
+    }
+
+    /**
+     * 根据指定时间获取当天的结束时间,即23:59:59
+     *
+     * @return 当天的结束时间
+     */
+    public static Date getEndOfDayByDate(Date time) {
+        Calendar endCalendar = Calendar.getInstance();
+        endCalendar.setTime(time);
+        endCalendar.set(Calendar.HOUR_OF_DAY, 23);
+        endCalendar.set(Calendar.MINUTE, 59);
+        endCalendar.set(Calendar.SECOND, 59);
+        return endCalendar.getTime();
+    }
+
 }

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

@@ -1012,7 +1012,7 @@ public class StackingAndLoadingVehiclesServiceImpl extends ServiceImpl<StackingA
      */
     private StorageBill createStorageBill(LoadingParams loadingParams, List<RollClubCommon> rollClubCommonList, List<String> sizeList) {
         StorageBill storageBillInfo = new StorageBill();
-        storageBillInfo.setBtype("0");
+        storageBillInfo.setBtype("1");
         storageBillInfo.setTypeConfigId(loadingParams.getDestinationId());
         storageBillInfo.setDestination("高线");
         storageBillInfo.setShiftGroup(loadingParams.getBilletHotsend().getShiftGroup());

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

@@ -22,6 +22,7 @@ import org.jeecg.modules.billet.rollClubOne.service.IRollClubOneDetailsService;
 import org.jeecg.modules.billet.rollHeight.entity.RollHeightDetails;
 import org.jeecg.modules.billet.rollHeight.service.IRollHeightDetailsService;
 import org.jeecg.modules.billet.storageBill.entity.BilletHotsendDetails;
+import org.jeecg.modules.billet.storageBill.entity.OnDutyStatistics;
 import org.jeecg.modules.billet.storageBill.entity.StorageBill;
 import org.jeecg.modules.billet.storageBill.service.IStorageBillService;
 import org.jeecg.modules.billet.storageCarLog.entity.StorageCarLog;
@@ -186,6 +187,22 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 		return Result.OK(pageList);
 	}
 
+	@ApiOperation(value="钢坯热送单-班统计查询", notes="钢坯热送单-班统计查询")
+	@GetMapping(value = "/onduty/statistics")
+	public Result<OnDutyStatistics> queryOndutyStatistics(@RequestParam(name="ccmNo") String ccmNo) {
+		// 获取当前班组班次信息
+		OnDutyStatistics onDutyStatistics = storageBillService.queryOndutyStatistics(ccmNo);
+		return Result.OK(onDutyStatistics);
+	}
+
+	@ApiOperation(value="积木报表钢坯热送单-班统计查询导出", notes="积木报表钢坯热送单-班统计查询导出")
+	@GetMapping(value = "/ondutyStatistics/export")
+	public JSONObject ondutyStatisticsExport(@RequestParam(name="ccmNo") String ccmNo, @RequestParam(name="ondutyDate") String ondutyDate) {
+		// 获取当前班组班次信息
+		JSONObject result = storageBillService.ondutyStatisticsExport(ccmNo, ondutyDate);
+		return result;
+	}
+
 
 	 /**
 	  *   添加

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

@@ -0,0 +1,23 @@
+package org.jeecg.modules.billet.storageBill.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.modules.billet.rollHeight.entity.DestinationStatisticsDetails;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class OnDutyStatistics {
+
+    @ApiModelProperty(value = "总支数")
+    private Integer counts;
+
+    /**出坯量*/
+    @ApiModelProperty(value = "热送总重量")
+    private BigDecimal blankOutputs;
+
+    @ApiModelProperty(value = "明细")
+    private List<DestinationStatisticsDetails> statisticsDetailsList;
+
+}

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

@@ -0,0 +1,34 @@
+package org.jeecg.modules.billet.storageBill.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.modules.billet.rollHeight.entity.DestinationStatisticsDetails;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class OnDutyStatisticsReport {
+
+    @ApiModelProperty(value = "日期")
+    private String date;
+
+    @ApiModelProperty(value = "班组")
+    private String shiftGroup;
+
+    @ApiModelProperty(value = "班别")
+    private String shift;
+
+    @ApiModelProperty(value = "总支数")
+    private Integer counts;
+
+    /**出坯量*/
+    @ApiModelProperty(value = "热送总重量")
+    private BigDecimal blankOutputs;
+
+    @ApiModelProperty(value = "明细")
+    private List<DestinationStatisticsDetails> statisticsDetailsList;
+
+}

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

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.billet.billetHotsend.entity.BilletHotsendDetailsVo;
 import org.jeecg.modules.billet.storageBill.entity.BilletHotsendDetails;
+import org.jeecg.modules.billet.storageBill.entity.OnDutyStatistics;
 import org.jeecg.modules.billet.storageBill.entity.StorageBill;
 
 import java.util.List;
@@ -32,4 +33,8 @@ public interface IStorageBillService extends IService<StorageBill> {
     List<StorageBill> queryStorageBillByPositionNum();
 
     JSONObject addParkingSpaceDepart(StorageBill storageBill);
+
+    OnDutyStatistics queryOndutyStatistics(String ccmNo);
+
+    JSONObject ondutyStatisticsExport(String ccmNo, String ondutyDate);
 }

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

@@ -1,6 +1,7 @@
 package org.jeecg.modules.billet.storageBill.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -33,16 +34,14 @@ import org.jeecg.modules.billet.rollClubTwo.entity.RollClubTwo;
 import org.jeecg.modules.billet.rollClubTwo.entity.RollClubTwoDetails;
 import org.jeecg.modules.billet.rollClubTwo.service.IRollClubTwoDetailsService;
 import org.jeecg.modules.billet.rollClubTwo.service.IRollClubTwoService;
+import org.jeecg.modules.billet.rollHeight.entity.DestinationStatisticsDetails;
 import org.jeecg.modules.billet.rollHeight.entity.RollHeightDetails;
 import org.jeecg.modules.billet.rollHeight.service.IRollHeightDetailsService;
 import org.jeecg.modules.billet.rollOutShipp.entity.RollOutShipp;
 import org.jeecg.modules.billet.rollOutShipp.entity.RollOutShippDetails;
 import org.jeecg.modules.billet.rollOutShipp.service.IRollOutShippDetailsService;
 import org.jeecg.modules.billet.rollOutShipp.service.IRollOutShippService;
-import org.jeecg.modules.billet.storageBill.entity.BilletHotsendDetails;
-import org.jeecg.modules.billet.storageBill.entity.ShiftEnum;
-import org.jeecg.modules.billet.storageBill.entity.ShiftGroupEnum;
-import org.jeecg.modules.billet.storageBill.entity.StorageBill;
+import org.jeecg.modules.billet.storageBill.entity.*;
 import org.jeecg.modules.billet.storageBill.mapper.StorageBillMapper;
 import org.jeecg.modules.billet.storageBill.service.IStorageBillService;
 import org.jeecg.modules.billet.storageCarLog.entity.StorageCarLog;
@@ -55,9 +54,14 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @Description: 钢坯装运单
@@ -563,6 +567,283 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         }
     }
 
+    @Override
+    public OnDutyStatistics queryOndutyStatistics(String ccmNo) {
+        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;
+        }
+        // 根据铸机号、班组班别查询对应的热送单信息
+        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<>();
+        LambdaQueryWrapper<RollClubOneDetails> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(RollClubOneDetails::getCcmNo, ccmNo);
+        queryWrapper.eq(RollClubOneDetails::getShiftGroup, shiftGroup);
+        queryWrapper.eq(RollClubOneDetails::getShift, shift);
+        // 添加大于 billetHotsendChangeShiftList 的 createTime 条件
+        if (billetHotsendChangeShiftList != null && billetHotsendChangeShiftList.getCreateTime() != null) {
+            queryWrapper.gt(RollClubOneDetails::getCreateTime, billetHotsendChangeShiftList.getCreateTime());
+        }
+        List<RollClubOneDetails> rollClubOneDetailsList = rollClubOneDetailsService.list(queryWrapper);
+        if (oConvertUtils.listIsNotEmpty(rollClubOneDetailsList)){
+            statisticsDetailsList1 = rollClubOneDetailsList.stream()
+                    .collect(Collectors.groupingBy(RollClubOneDetails::getSize, Collectors.toList()))
+                    .entrySet().stream()
+                    .map(entry -> {
+                        String size = entry.getKey();
+                        List<RollClubOneDetails> group = entry.getValue();
+                        Integer nums = group.size();
+                        Double totalBlankOutput = group.stream().mapToDouble(RollClubOneDetails::getBlankOutput).sum();
+                        BigDecimal bd = BigDecimal.valueOf(totalBlankOutput).setScale(4, BigDecimal.ROUND_HALF_UP);
+                        double finalBlankOutput = bd.doubleValue();
+                        String ccmNos = group.isEmpty() ? null : group.get(0).getCcmNo();
+                        return new DestinationStatisticsDetails(size, nums, finalBlankOutput, ccmNos);
+                    }).collect(Collectors.toList());
+            int totalNums = statisticsDetailsList1.stream()
+                    .mapToInt(DestinationStatisticsDetails::getNums)
+                    .sum();
+            onDutyStatistics.setCounts(totalNums);
+
+            double totalBlankOutputs = rollClubOneDetailsList.stream().mapToDouble(RollClubOneDetails::getBlankOutput).sum();
+            BigDecimal bd = BigDecimal.valueOf(totalBlankOutputs).setScale(4, BigDecimal.ROUND_HALF_UP);
+            onDutyStatistics.setBlankOutputs(bd);
+        }
+
+        LambdaQueryWrapper<RollHeightDetails> queryWrapper1 = new LambdaQueryWrapper<>();
+        queryWrapper1.eq(RollHeightDetails::getCcmNo, ccmNo);
+        queryWrapper1.eq(RollHeightDetails::getShiftGroup, shiftGroup);
+        queryWrapper1.eq(RollHeightDetails::getShift, shift);
+        queryWrapper1.eq(RollHeightDetails::getLicensePlate, "辊道");
+        // 添加大于 billetHotsendChangeShiftList 的 createTime 条件
+        if (billetHotsendChangeShiftList != null && billetHotsendChangeShiftList.getCreateTime() != null) {
+            queryWrapper1.gt(RollHeightDetails::getCreateTime, billetHotsendChangeShiftList.getCreateTime());
+        }
+        List<RollHeightDetails> rollHeightDetailsList = rollHeightDetailsService.list(queryWrapper1);
+        if (oConvertUtils.listIsNotEmpty(rollHeightDetailsList)){
+            statisticsDetailsList2 = rollHeightDetailsList.stream()
+                    .collect(Collectors.groupingBy(RollHeightDetails::getSize, Collectors.toList()))
+                    .entrySet().stream()
+                    .map(entry -> {
+                        String size = entry.getKey();
+                        List<RollHeightDetails> group = entry.getValue();
+                        Integer nums = group.size();
+                        Double totalBlankOutput = group.stream().mapToDouble(RollHeightDetails::getBlankOutput).sum();
+                        BigDecimal bd = BigDecimal.valueOf(totalBlankOutput).setScale(4, BigDecimal.ROUND_HALF_UP);
+                        double finalBlankOutput = bd.doubleValue();
+                        String ccmNos = group.isEmpty() ? null : group.get(0).getCcmNo();
+                        return new DestinationStatisticsDetails(size, nums, finalBlankOutput, ccmNos);
+                    }).collect(Collectors.toList());
+            int totalNums = statisticsDetailsList2.stream()
+                    .mapToInt(DestinationStatisticsDetails::getNums)
+                    .sum();
+            onDutyStatistics.setCounts(totalNums);
+            double totalBlankOutputs = rollHeightDetailsList.stream().mapToDouble(RollHeightDetails::getBlankOutput).sum();
+            BigDecimal bd = BigDecimal.valueOf(totalBlankOutputs).setScale(4, BigDecimal.ROUND_HALF_UP);
+            onDutyStatistics.setBlankOutputs(bd);
+        }
+
+        // 合并两个列表并根据 size 分组统计
+        List<DestinationStatisticsDetails> mergedList = Stream.concat(statisticsDetailsList1.stream(), statisticsDetailsList2.stream())
+                .collect(Collectors.groupingBy(DestinationStatisticsDetails::getSize))
+                .entrySet().stream()
+                .map(entry -> {
+                    String size = entry.getKey();
+                    List<DestinationStatisticsDetails> group = entry.getValue();
+                    int totalNums = group.stream().mapToInt(DestinationStatisticsDetails::getNums).sum();
+                    double totalBlankOutput = group.stream().mapToDouble(DestinationStatisticsDetails::getBlankOutput).sum();
+                    BigDecimal bd = BigDecimal.valueOf(totalBlankOutput).setScale(4, BigDecimal.ROUND_HALF_UP);
+                    double finalBlankOutput = bd.doubleValue();
+                    String ccmNoForGroup = group.isEmpty() ? null : group.get(0).getCcmNo();
+                    return new DestinationStatisticsDetails(size, totalNums, finalBlankOutput, ccmNoForGroup);
+                }).collect(Collectors.toList());
+        log.info("{}{}", "合并后的列表:", JSON.toJSON(mergedList));
+        onDutyStatistics.setStatisticsDetailsList(mergedList);
+        return onDutyStatistics;
+    }
+
+    @Override
+    public JSONObject ondutyStatisticsExport(String ccmNo, String ondutyDate) {
+        JSONObject result = new JSONObject();
+
+        OnDutyStatisticsReport onDutyStatisticsReport = new OnDutyStatisticsReport();
+        if (oConvertUtils.isEmpty(ondutyDate)){
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+            ondutyDate = sdf.format(new Date());
+        }
+        // 将字符串解析为 LocalDate,这里将日期设置为当月的第一天
+        LocalDate startOfMonth = LocalDate.parse(ondutyDate + "-01");
+        // 获取当月的最后一天
+        LocalDate endOfMonth = startOfMonth.withDayOfMonth(startOfMonth.lengthOfMonth());
+
+        // 格式化日期为指定格式
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        String startFormatted = startOfMonth.atStartOfDay().format(formatter);
+        String endFormatted = endOfMonth.atTime(23, 59, 59).format(formatter);
+        Date startDate = DateUtils.parseDatetime(startFormatted);
+        Date endDate = DateUtils.parseDatetime(endFormatted);
+
+        // 根据铸机号、班组班别查询对应的热送单信息
+        List<BilletHotsendChangeShift> billetHotsendChangeShiftList = billetHotsendChangeShiftService.list(new LambdaQueryWrapper<BilletHotsendChangeShift>()
+                .eq(BilletHotsendChangeShift::getCcmNo, ccmNo)
+                .between(BilletHotsendChangeShift::getCreateTime, startDate, endDate)
+                .orderByAsc(BilletHotsendChangeShift::getCreateTime));
+        if (oConvertUtils.listIsEmpty(billetHotsendChangeShiftList)){
+            return result;
+        }
+        JSONArray jsonArray = new JSONArray();
+        billetHotsendChangeShiftList.forEach(x ->{
+            if ("5".equals(ccmNo)){
+                List<DestinationStatisticsDetails> statisticsDetailsList1;
+                // 查询热送信息(棒一明细、高线明细)统计热送总支数、热送总重量<出坯量>
+                LambdaQueryWrapper<RollClubOneDetails> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.eq(RollClubOneDetails::getCcmNo, ccmNo);
+                queryWrapper.eq(RollClubOneDetails::getShiftGroup, x.getShiftGroup());
+                queryWrapper.eq(RollClubOneDetails::getShift, x.getShift());
+                // 添加大于 billetHotsendChangeShiftList 的 createTime 条件
+                if (x.getCreateTime() != null) {
+                    // 根据交班时间获取交班当天的开始时间和结束时间
+                    Date handoverTime = x.getCreateTime();
+                    Date startTime = DateUtils.getStartOfDayByDate(handoverTime);
+                    Date endTime = DateUtils.getEndOfDayByDate(handoverTime);
+                    queryWrapper.between(RollClubOneDetails::getCreateTime, startTime, endTime);
+                }
+                List<RollClubOneDetails> rollClubOneDetailsList = rollClubOneDetailsService.list(queryWrapper);
+                if (oConvertUtils.listIsNotEmpty(rollClubOneDetailsList)){
+                    statisticsDetailsList1 = rollClubOneDetailsList.stream()
+                            .collect(Collectors.groupingBy(RollClubOneDetails::getSize, Collectors.toList()))
+                            .entrySet().stream()
+                            .map(entry -> {
+                                String size = entry.getKey();
+                                List<RollClubOneDetails> group = entry.getValue();
+                                Integer nums = group.size();
+                                Double totalBlankOutput = group.stream().mapToDouble(RollClubOneDetails::getBlankOutput).sum();
+                                BigDecimal bd = BigDecimal.valueOf(totalBlankOutput).setScale(4, BigDecimal.ROUND_HALF_UP);
+                                double finalBlankOutput = bd.doubleValue();
+                                String ccmNos = group.isEmpty() ? null : group.get(0).getCcmNo();
+                                return new DestinationStatisticsDetails(size, nums, finalBlankOutput, ccmNos);
+                            }).collect(Collectors.toList());
+                    int totalNums = statisticsDetailsList1.stream()
+                            .mapToInt(DestinationStatisticsDetails::getNums)
+                            .sum();
+                    onDutyStatisticsReport.setCounts(totalNums);
+                    double totalBlankOutputs = rollClubOneDetailsList.stream().mapToDouble(RollClubOneDetails::getBlankOutput).sum();
+                    BigDecimal bd = BigDecimal.valueOf(totalBlankOutputs).setScale(4, BigDecimal.ROUND_HALF_UP);
+                    onDutyStatisticsReport.setBlankOutputs(bd);
+                    onDutyStatisticsReport.setStatisticsDetailsList(statisticsDetailsList1);
+                    String cTiime = DateUtils.date2Str(x.getCreateTime(), DateUtils.date_sdf.get());
+                    onDutyStatisticsReport.setDate(cTiime);
+                    onDutyStatisticsReport.setShiftGroup(x.getShiftGroup());
+                    onDutyStatisticsReport.setShift(x.getShift());
+                    statisticsDetailsList1.forEach(y -> {
+                        JSONObject jsonObject = new JSONObject();
+                        jsonObject.put("size", y.getSize());
+                        jsonObject.put("nums", y.getNums());
+                        jsonObject.put("blankOutput", y.getBlankOutput());
+                        jsonObject.put("blankOutputs", onDutyStatisticsReport.getBlankOutputs());
+                        jsonObject.put("date", onDutyStatisticsReport.getDate());
+                        jsonObject.put("shiftGroup", ShiftGroupEnum.fromCode(onDutyStatisticsReport.getShiftGroup()).name());
+                        jsonObject.put("shift", ShiftEnum.fromCode(onDutyStatisticsReport.getShift()).name());
+                        jsonObject.put("counts", onDutyStatisticsReport.getCounts());
+                        jsonObject.put("ccmNo", y.getCcmNo() + "#机");
+                        jsonArray.add(jsonObject);
+                    });
+                }
+            }
+            if ("6".equals(ccmNo)){
+                List<DestinationStatisticsDetails> statisticsDetailsList2;
+
+                LambdaQueryWrapper<RollHeightDetails> queryWrapper1 = new LambdaQueryWrapper<>();
+                queryWrapper1.eq(RollHeightDetails::getCcmNo, ccmNo);
+                queryWrapper1.eq(RollHeightDetails::getShiftGroup, x.getShiftGroup());
+                queryWrapper1.eq(RollHeightDetails::getShift, x.getShift());
+                queryWrapper1.eq(RollHeightDetails::getLicensePlate, "辊道");
+                // 添加大于 billetHotsendChangeShiftList 的 createTime 条件
+                if (x.getCreateTime() != null) {
+                    // 根据交班时间获取交班当天的开始时间和结束时间
+                    Date handoverTime = x.getCreateTime();
+                    Date startTime = DateUtils.getStartOfDayByDate(handoverTime);
+                    Date endTime = DateUtils.getEndOfDayByDate(handoverTime);
+                    queryWrapper1.between(RollHeightDetails::getCreateTime, startTime, endTime);
+                }
+                List<RollHeightDetails> rollHeightDetailsList = rollHeightDetailsService.list(queryWrapper1);
+                if (oConvertUtils.listIsNotEmpty(rollHeightDetailsList)){
+                    statisticsDetailsList2 = rollHeightDetailsList.stream()
+                            .collect(Collectors.groupingBy(RollHeightDetails::getSize, Collectors.toList()))
+                            .entrySet().stream()
+                            .map(entry -> {
+                                String size = entry.getKey();
+                                List<RollHeightDetails> group = entry.getValue();
+                                Integer nums = group.size();
+                                Double totalBlankOutput = group.stream().mapToDouble(RollHeightDetails::getBlankOutput).sum();
+                                BigDecimal bd = BigDecimal.valueOf(totalBlankOutput).setScale(4, BigDecimal.ROUND_HALF_UP);
+                                double finalBlankOutput = bd.doubleValue();
+                                String ccmNos = group.isEmpty() ? null : group.get(0).getCcmNo();
+                                return new DestinationStatisticsDetails(size, nums, finalBlankOutput, ccmNos);
+                            }).collect(Collectors.toList());
+                    int totalNums = statisticsDetailsList2.stream()
+                            .mapToInt(DestinationStatisticsDetails::getNums)
+                            .sum();
+                    onDutyStatisticsReport.setCounts(totalNums);
+                    double totalBlankOutputs = rollHeightDetailsList.stream().mapToDouble(RollHeightDetails::getBlankOutput).sum();
+                    BigDecimal bd = BigDecimal.valueOf(totalBlankOutputs).setScale(4, BigDecimal.ROUND_HALF_UP);
+                    onDutyStatisticsReport.setBlankOutputs(bd);
+                    onDutyStatisticsReport.setStatisticsDetailsList(statisticsDetailsList2);
+                    String cTiime = DateUtils.date2Str(x.getCreateTime(), DateUtils.date_sdf.get());
+                    onDutyStatisticsReport.setDate(cTiime);
+                    onDutyStatisticsReport.setShiftGroup(x.getShiftGroup());
+                    onDutyStatisticsReport.setShift(x.getShift());
+
+                    statisticsDetailsList2.forEach(y -> {
+                        JSONObject jsonObject = new JSONObject();
+                        jsonObject.put("size", y.getSize());
+                        jsonObject.put("nums", y.getNums());
+                        jsonObject.put("blankOutput", y.getBlankOutput());
+                        jsonObject.put("blankOutputs", onDutyStatisticsReport.getBlankOutputs());
+                        jsonObject.put("date", onDutyStatisticsReport.getDate());
+                        jsonObject.put("shiftGroup", ShiftGroupEnum.fromCode(onDutyStatisticsReport.getShiftGroup()).name());
+                        jsonObject.put("shift", ShiftEnum.fromCode(onDutyStatisticsReport.getShift()).name());
+                        jsonObject.put("counts", onDutyStatisticsReport.getCounts());
+                        jsonObject.put("ccmNo", y.getCcmNo() + "#机");
+                        jsonArray.add(jsonObject);
+                    });
+                }
+            }
+        });
+
+
+        // 合并两个列表并根据 size 分组统计
+/*        List<DestinationStatisticsDetails> mergedList = Stream.concat(statisticsDetailsList1.stream(), statisticsDetailsList2.stream())
+                .collect(Collectors.groupingBy(DestinationStatisticsDetails::getSize))
+                .entrySet().stream()
+                .map(entry -> {
+                    String size = entry.getKey();
+                    List<DestinationStatisticsDetails> group = entry.getValue();
+                    int totalNums = group.stream().mapToInt(DestinationStatisticsDetails::getNums).sum();
+                    double totalBlankOutput = group.stream().mapToDouble(DestinationStatisticsDetails::getBlankOutput).sum();
+                    BigDecimal bd = BigDecimal.valueOf(totalBlankOutput).setScale(4, BigDecimal.ROUND_HALF_UP);
+                    double finalBlankOutput = bd.doubleValue();
+                    String ccmNoForGroup = group.isEmpty() ? null : group.get(0).getCcmNo();
+                    return new DestinationStatisticsDetails(size, totalNums, finalBlankOutput, ccmNoForGroup);
+                }).collect(Collectors.toList());
+        log.info("{}{}", "合并后的列表:", JSON.toJSON(mergedList));
+        onDutyStatisticsReport.setStatisticsDetailsList(mergedList);*/
+
+        result.put("data", jsonArray);
+
+        return result;
+    }
+
     /**
      * 钢坯热送信息查询、更新
      * 棒一、棒二、棒三、上若、高线 基础表和明细 新增、更新