瀏覽代碼

新增当班定尺明细统计接口

lingpeng.li 3 月之前
父節點
當前提交
8035908c12

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

@@ -24,6 +24,7 @@ import org.jeecg.modules.billet.rollHeight.entity.RollHeightDetails;
 import org.jeecg.modules.billet.rollHeight.service.IRollHeightDetailsService;
 import org.jeecg.modules.billet.storageBill.entity.*;
 import org.jeecg.modules.billet.storageBill.service.IStorageBillService;
+import org.jeecg.modules.billet.storageBill.vo.OnDutySizeVo;
 import org.jeecg.modules.billet.storageCarLog.entity.StorageCarLog;
 import org.jeecg.modules.billet.storageCarLog.service.IStorageCarLogService;
 import org.springframework.beans.BeanUtils;
@@ -622,4 +623,11 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 		OnDutyDetailStatistics result = storageBillService.queryOnDutyDeatailHandle(ccmNo);
 		return Result.OK(result);
 	}
+
+	@ApiOperation(value="当班定尺分组总支数出坯量统计", notes="当班定尺分组总支数出坯量统计")
+	@GetMapping(value = "/queryOnDutySize")
+	public Result<List<OnDutySizeVo>> queryOnDutySize(@RequestParam(name="ccmNo") String ccmNo) {
+		List<OnDutySizeVo> onDutySizeVos = storageBillService.queryOnDutySize(ccmNo);
+		return Result.OK(onDutySizeVos);
+	}
 }

+ 3 - 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.*;
+import org.jeecg.modules.billet.storageBill.vo.OnDutySizeVo;
 
 import java.util.List;
 import java.util.Map;
@@ -51,4 +52,6 @@ public interface IStorageBillService extends IService<StorageBill> {
     OnDutyStorageBillStatistics queryOnDutyAllStorageBillInfoHandle(String ccmNo);
 
     OnDutyDetailStatistics queryOnDutyDeatailHandle(String ccmNo);
+
+    List<OnDutySizeVo> queryOnDutySize(String ccmNo);
 }

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

@@ -47,6 +47,8 @@ import org.jeecg.modules.billet.rollOutShipp.service.IRollOutShippService;
 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.storageBill.vo.OnDutySizeVo;
+import org.jeecg.modules.billet.storageBill.vo.SizeSummary;
 import org.jeecg.modules.billet.storageCarLog.entity.StorageCarLog;
 import org.jeecg.modules.billet.storageCarLog.service.IStorageCarLogService;
 import org.springframework.beans.BeanUtils;
@@ -1840,6 +1842,230 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         return onDutyDetailStatistics;
     }
 
+    @Override
+    public List<OnDutySizeVo> queryOnDutySize(String ccmNo) {
+        List<OnDutySizeVo> list = new ArrayList<>();
+        List<SizeSummary> summaryList = new ArrayList<>();
+        // 从 Redis 获取班次信息
+        String shiftGroup = getShiftInfo(ccmNo, "class:shift:group:%s");
+        String shift = getShiftInfo(ccmNo, "class:shift:%s");
+        // 根据铸机号、缓存中的当前班次,倒序最新一条,获取交班记录中的创建时间
+        LambdaQueryWrapper<BilletHotsendChangeShift> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(BilletHotsendChangeShift::getCcmNo, ccmNo)
+                .eq(BilletHotsendChangeShift::getShift, shift)
+                .eq(BilletHotsendChangeShift::getShiftGroup, shiftGroup)
+                .orderByDesc(BilletHotsendChangeShift::getCreateTime)
+                .last("limit 1");
+        BilletHotsendChangeShift billetHotsendChangeShift = billetHotsendChangeShiftService.getOne(queryWrapper);
+        if (billetHotsendChangeShift == null){
+            log.info("{}{}", "查询当班定尺明细,明细记录为空!", ccmNo + "失败时间:" + new Date());
+            return list;
+        }
+
+        // 根据铸机号、班组、班别、交班的创建时间,查询棒一符合条件的信息
+        LambdaQueryWrapper<RollClubOneDetails> queryWrapper1 = new LambdaQueryWrapper<>();
+        queryWrapper1.eq(RollClubOneDetails::getCcmNo, ccmNo)
+                .eq(RollClubOneDetails::getShift, shift)
+                .eq(RollClubOneDetails::getShiftGroup, shiftGroup)
+                .between(RollClubOneDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
+        List<RollClubOneDetails> list1 = rollClubOneDetailsService.list(queryWrapper1);
+
+        // 根据 size 分组,并统计总支数和总 BlankOutput
+        List<SizeSummary> result1 = list1.stream()
+                .collect(Collectors.groupingBy(RollClubOneDetails::getSize))
+                .entrySet().stream()
+                .map(entry -> {
+                    String size = entry.getKey();
+                    List<RollClubOneDetails> group = entry.getValue();
+
+                    // 统计总支数
+                    int totalNums = group.size();
+
+                    // 累加 BlankOutput (转换为 BigDecimal)
+                    BigDecimal totalBlankOutput = group.stream()
+                            .map(RollClubOneDetails::getBlankOutput)
+                            .filter(Objects::nonNull) // 过滤 null 值
+                            .map(BigDecimal::valueOf) // Double 转 BigDecimal
+                            .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+                    // 返回处理后的分组结果
+                    return new SizeSummary(size, totalNums, totalBlankOutput);
+                }).collect(Collectors.toList());
+
+        summaryList.addAll(result1);
+
+
+        // 根据铸机号、班组、班别、交班的创建时间,查询棒二符合条件的信息
+        LambdaQueryWrapper<RollClubTwoDetails> queryWrapper2 = new LambdaQueryWrapper<>();
+        queryWrapper2.eq(RollClubTwoDetails::getCcmNo, ccmNo)
+                .eq(RollClubTwoDetails::getShift, shift)
+                .eq(RollClubTwoDetails::getShiftGroup, shiftGroup)
+                .between(RollClubTwoDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
+        List<RollClubTwoDetails> list2 = rollClubTwoDetailsService.list(queryWrapper2);
+
+        // 根据 size 分组,并统计总支数和总 BlankOutput
+        List<SizeSummary> result2 = list2.stream()
+                .collect(Collectors.groupingBy(RollClubTwoDetails::getSize))
+                .entrySet().stream()
+                .map(entry -> {
+                    String size = entry.getKey();
+                    List<RollClubTwoDetails> group = entry.getValue();
+
+                    // 统计总支数,如果 stackAddr 不为空,则乘以 4
+                    int totalNums = group.stream()
+                            .mapToInt(detail -> (detail.getStackAddr() != null && !detail.getStackAddr().isEmpty()) ? 4 : 1)
+                            .sum();
+
+                    // 累加 BlankOutput (转换为 BigDecimal)
+                    BigDecimal totalBlankOutput = group.stream()
+                            .map(RollClubTwoDetails::getBlankOutput)
+                            .filter(Objects::nonNull) // 过滤 null 值
+                            .map(BigDecimal::valueOf) // Double 转 BigDecimal
+                            .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+                    // 返回处理后的分组结果
+                    return new SizeSummary(size, totalNums, totalBlankOutput);
+                }).collect(Collectors.toList());
+
+        summaryList.addAll(result2);
+
+
+        // 根据铸机号、班组、班别、交班的创建时间,查询棒三符合条件的信息
+        LambdaQueryWrapper<RollClubThreeDetails> queryWrapper3 = new LambdaQueryWrapper<>();
+        queryWrapper3.eq(RollClubThreeDetails::getCcmNo, ccmNo)
+                .eq(RollClubThreeDetails::getShift, shift)
+                .eq(RollClubThreeDetails::getShiftGroup, shiftGroup)
+                .between(RollClubThreeDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
+        List<RollClubThreeDetails> list3 = rollClubThreeDetailsService.list(queryWrapper3);
+
+        // 根据 size 分组,并统计总支数和总 BlankOutput
+        List<SizeSummary> result3 = list3.stream()
+                .collect(Collectors.groupingBy(RollClubThreeDetails::getSize))
+                .entrySet().stream()
+                .map(entry -> {
+                    String size = entry.getKey();
+                    List<RollClubThreeDetails> group = entry.getValue();
+
+                    // 统计总支数,如果 stackAddr 不为空,则乘以 4
+                    int totalNums = group.stream()
+                            .mapToInt(detail -> (detail.getStackAddr() != null && !detail.getStackAddr().isEmpty()) ? 4 : 1)
+                            .sum();
+
+                    // 累加 BlankOutput (转换为 BigDecimal)
+                    BigDecimal totalBlankOutput = group.stream()
+                            .map(RollClubThreeDetails::getBlankOutput)
+                            .filter(Objects::nonNull) // 过滤 null 值
+                            .map(BigDecimal::valueOf) // Double 转 BigDecimal
+                            .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+                    // 返回处理后的分组结果
+                    return new SizeSummary(size, totalNums, totalBlankOutput);
+                }).collect(Collectors.toList());
+
+        summaryList.addAll(result3);
+
+
+        // 根据铸机号、班组、班别、交班的创建时间,查询高线符合条件的信息
+        LambdaQueryWrapper<RollHeightDetails> queryWrapper4 = new LambdaQueryWrapper<>();
+        queryWrapper4.eq(RollHeightDetails::getCcmNo, ccmNo)
+                .eq(RollHeightDetails::getShift, shift)
+                .eq(RollHeightDetails::getShiftGroup, shiftGroup)
+                .between(RollHeightDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
+        List<RollHeightDetails> list4 = rollHeightDetailsService.list(queryWrapper4);
+
+        // 根据 size 分组,并统计总支数和总 BlankOutput
+        List<SizeSummary> result4 = list4.stream()
+                .collect(Collectors.groupingBy(RollHeightDetails::getSize))
+                .entrySet().stream()
+                .map(entry -> {
+                    String size = entry.getKey();
+                    List<RollHeightDetails> group = entry.getValue();
+
+                    // 统计总支数,如果 stackAddr 不为空,则乘以 4
+                    int totalNums = group.stream()
+                            .mapToInt(detail -> (detail.getStackAddr() != null && !detail.getStackAddr().isEmpty()) ? 4 : 1)
+                            .sum();
+
+                    // 累加 BlankOutput (转换为 BigDecimal)
+                    BigDecimal totalBlankOutput = group.stream()
+                            .map(RollHeightDetails::getBlankOutput)
+                            .filter(Objects::nonNull) // 过滤 null 值
+                            .map(BigDecimal::valueOf) // Double 转 BigDecimal
+                            .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+                    // 返回处理后的分组结果
+                    return new SizeSummary(size, totalNums, totalBlankOutput);
+                }).collect(Collectors.toList());
+
+        summaryList.addAll(result4);
+
+
+        // 根据铸机号、班组、班别、交班的创建时间,查询上若符合条件的信息
+        LambdaQueryWrapper<RollOutShippDetails> queryWrapper5 = new LambdaQueryWrapper<>();
+        queryWrapper5.eq(RollOutShippDetails::getCcmNo, ccmNo)
+                .eq(RollOutShippDetails::getShift, shift)
+                .eq(RollOutShippDetails::getShiftGroup, shiftGroup)
+                .between(RollOutShippDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
+        List<RollOutShippDetails> list5 = rollOutShippDetailsService.list(queryWrapper5);
+
+        // 根据 size 分组,并统计总支数和总 BlankOutput
+        List<SizeSummary> result5 = list5.stream()
+                .collect(Collectors.groupingBy(RollOutShippDetails::getSize))
+                .entrySet().stream()
+                .map(entry -> {
+                    String size = entry.getKey();
+                    List<RollOutShippDetails> group = entry.getValue();
+
+                    // 统计总支数,如果 stackAddr 不为空,则乘以 4
+                    int totalNums = group.stream()
+                            .mapToInt(detail -> (detail.getStackAddr() != null && !detail.getStackAddr().isEmpty()) ? 4 : 1)
+                            .sum();
+
+                    // 累加 BlankOutput (转换为 BigDecimal)
+                    BigDecimal totalBlankOutput = group.stream()
+                            .map(RollOutShippDetails::getBlankOutput)
+                            .filter(Objects::nonNull) // 过滤 null 值
+                            .map(BigDecimal::valueOf) // Double 转 BigDecimal
+                            .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+                    // 返回处理后的分组结果
+                    return new SizeSummary(size, totalNums, totalBlankOutput);
+                }).collect(Collectors.toList());
+
+        summaryList.addAll(result5);
+
+
+        // 对 summaryList 进行二次分组,聚合数据
+        List<OnDutySizeVo> onDutySizeVoList = summaryList.stream()
+                .collect(Collectors.groupingBy(SizeSummary::getSize))
+                .entrySet().stream()
+                .map(entry -> {
+                    String size = entry.getKey();
+                    List<SizeSummary> group = entry.getValue();
+
+                    // 累加 amountTotal(总支数)
+                    int totalAmount = group.stream()
+                            .mapToInt(SizeSummary::getAmountTotal)
+                            .sum();
+
+                    // 累加 totalBlankOutput(出坯量)
+                    BigDecimal totalBlankOutput = group.stream()
+                            .map(SizeSummary::getTotalBlankOutput)
+                            .filter(Objects::nonNull) // 过滤 null 值
+                            .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+                    // 组装 OnDutySizeVo 结果对象
+                    OnDutySizeVo onDutySizeVo = new OnDutySizeVo();
+                    onDutySizeVo.setSize(size);
+                    onDutySizeVo.setAmountTotal(totalAmount);
+                    onDutySizeVo.setTotalBlankOutput(totalBlankOutput);
+
+                    return onDutySizeVo;
+                }).collect(Collectors.toList());
+
+        return onDutySizeVoList;
+    }
+
 
     /**
      * 生成综合唯一编码

+ 25 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/storageBill/vo/OnDutySizeVo.java

@@ -0,0 +1,25 @@
+package org.jeecg.modules.billet.storageBill.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class OnDutySizeVo {
+
+    /**
+     * 定尺
+     */
+    private String size;
+
+    /**
+     * 总支数
+     */
+    private Integer amountTotal;
+
+    /**
+     * 出坯量
+     */
+    private BigDecimal totalBlankOutput;
+
+}

+ 24 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/storageBill/vo/SizeSummary.java

@@ -0,0 +1,24 @@
+package org.jeecg.modules.billet.storageBill.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class SizeSummary {
+
+    private String size;
+    private Integer amountTotal;
+    private BigDecimal totalBlankOutput;
+
+    public SizeSummary(String size, Integer amountTotal, BigDecimal totalBlankOutput) {
+        this.size = size;
+        this.amountTotal = amountTotal;
+        this.totalBlankOutput = totalBlankOutput;
+    }
+
+    @Override
+    public String toString() {
+        return "Size: " + size + ", TotalNums: " + amountTotal + ", TotalBlankOutput: " + totalBlankOutput;
+    }
+}