Browse Source

新增钢坯热装单棒二、棒三、上若班统计查询以及修改热装查询逻辑

lingpeng.li 3 months ago
parent
commit
19f179c061

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

@@ -9,12 +9,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.actualControl.heatsActuals.entity.HeatsActuals;
+import org.jeecg.modules.actualControl.heatsActuals.service.IHeatsActualsService;
 import org.jeecg.modules.billet.billetHotsend.entity.BilletHotsendDetailsVo;
 import org.jeecg.modules.billet.billetHotsendChangeShift.service.IBilletHotsendChangeShiftService;
 import org.jeecg.modules.billet.operateLog.service.IOperateLogService;
@@ -86,6 +89,9 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 	@Autowired
 	private IBilletHotsendChangeShiftService billetHotsendChangeShiftService;
 
+	@Autowired
+	private IHeatsActualsService heatsActualsService;
+
 	/**
 	 * 分页列表查询
 	 *
@@ -507,124 +513,279 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
         return Result.OK(onDutyStatistics);
     }
 
+	@ApiOperation(value = "钢坯热装实绩-分页列表查询", notes = "钢坯热装实绩-分页列表查询")
+	@GetMapping(value = "/listHotChargingSJ")
+	public Result<IPage<StorageBill>> queryHotChargingPageSJList(StorageBill storageBill,
+																 @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+																 @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+																 HttpServletRequest req) {
+		// 直接构造 HeatsActuals 查询条件
+		QueryWrapper<HeatsActuals> heatsQueryWrapper = new QueryWrapper<>();
+		heatsQueryWrapper.orderByDesc("create_time");
+
+		if (storageBill.getCcmNo() != null) {
+			heatsQueryWrapper.eq("caster_code", storageBill.getCcmNo());
+		}
+		if (storageBill.getShift() != null) {
+			heatsQueryWrapper.eq("shift", storageBill.getShift());
+		}
+		if (storageBill.getHeatNo() != null) {
+			heatsQueryWrapper.eq("heats_code", storageBill.getHeatNo());
+		}
+		if (storageBill.getShiftGroup() != null) {
+			heatsQueryWrapper.eq("shiftGroup", storageBill.getShiftGroup());
+		}
+
+		List<HeatsActuals> actualsList = heatsActualsService.list(heatsQueryWrapper);
+		// 分页查询 HeatsActuals
+		Page<HeatsActuals> heatsPage = new Page<>(pageNo, pageSize);
+		IPage<HeatsActuals> heatsPageList = heatsActualsService.page(heatsPage, heatsQueryWrapper);
+
+		QueryWrapper<StorageBill> storageBillQueryWrapper = new QueryWrapper<>();
+		Page<StorageBill> billPage = new Page<>(pageNo, pageSize);
+		IPage<StorageBill> billPageList = storageBillService.page(billPage, storageBillQueryWrapper);
+
+		List<StorageBill> list = new ArrayList<>();
+
+		for (HeatsActuals heatsActuals : heatsPageList.getRecords()) {
+			StorageBill bill = new StorageBill();
+
+			//使用set去保存不重复的内容
+			Set<String> steels = new LinkedHashSet<>();
+			Set<String> specs = new LinkedHashSet<>();
+			Set<String> sizes = new LinkedHashSet<>();
+			Set<String> licensePlates = new LinkedHashSet<>();
+			Set<String> assemblyNumbers = new LinkedHashSet<>();
+			Set<String> destinations = new LinkedHashSet<>();
 
-    @ApiOperation(value = "钢坯热装实绩-分页列表查询", notes = "钢坯热装实绩-分页列表查询")
-    @GetMapping(value = "/listHotChargingSJ")
-    public Result<IPage<StorageBill>> queryHotChargingPageSJList(StorageBill storageBill,
-                                                                 @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
-                                                                 @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
-                                                                 HttpServletRequest req) {
-        QueryWrapper<StorageBill> queryWrapper = QueryGenerator.initQueryWrapper(storageBill, req.getParameterMap());
-        queryWrapper.isNotNull("heat_no");
-        // 添加分组条件
-        queryWrapper.groupBy("heat_no");
-        // 如果需要统计每组的 amount_total 总和,可以添加聚合函数
-        queryWrapper.select("GROUP_CONCAT( DISTINCT id ) AS id", "GROUP_CONCAT( DISTINCT ccm_no ) AS ccmNo",
-                "GROUP_CONCAT( DISTINCT shift_group ) AS shiftGroup", "GROUP_CONCAT( DISTINCT shift ) AS shift",
-                "heat_no", "GROUP_CONCAT( DISTINCT steel ) AS steel", "GROUP_CONCAT( DISTINCT spec ) AS spec",
-                "GROUP_CONCAT( DISTINCT size ) AS size", "GROUP_CONCAT( DISTINCT license_plate ) AS licensePlate",
-                "GROUP_CONCAT( DISTINCT btype ) AS btype", "GROUP_CONCAT( DISTINCT destination ) AS destination",
-                "GROUP_CONCAT( DISTINCT type_config_id ) AS typeConfigId", "GROUP_CONCAT( DISTINCT unique_code ) AS uniqueCode",
-                "SUM(amount_total) as amountTotal", "GROUP_CONCAT( DISTINCT assembly_number ) AS assemblyNumber", "MAX(create_time) as createTime");
-        Page<StorageBill> page = new Page<>(pageNo, pageSize);
-        IPage<StorageBill> pageList = storageBillService.page(page, queryWrapper);
-
-        for (StorageBill bill : pageList.getRecords()) {
-            List<String> storageBillIds = Arrays.stream(bill.getId().split(",")).collect(Collectors.toList());
 			// 统计总数
 			int totalNumsAll = 0;
-            String totalBlankOutputStr = "";
-            // 根据装运单ID查询对应的明细,统计总的出坯量
-            if (bill.getDestination().contains("棒二") && oConvertUtils.listIsNotEmpty(storageBillIds)) {
-                LambdaQueryWrapper<RollClubTwoDetails> queryWrapper1 = new LambdaQueryWrapper<>();
-                queryWrapper1.eq(RollClubTwoDetails::getHeatNo, bill.getHeatNo());
-                queryWrapper1.in(RollClubTwoDetails::getStorageBillId, storageBillIds);
-                List<RollClubTwoDetails> rollClubTwoDetailsList = rollClubTwoDetailsService.list(queryWrapper1);
-                // 使用 Stream API 统计 blankOutput 字段的总和
-                OptionalDouble totalBlankOutputOptional = rollClubTwoDetailsList != null ?
-                        OptionalDouble.of(rollClubTwoDetailsList.stream()
-                                .mapToDouble(details -> details.getBlankOutput() != null ? details.getBlankOutput() : 0)
-                                .sum()) : OptionalDouble.empty();
-                // 将总和转换为字符串,保留两位小时,四舍五入原则
-                if (totalBlankOutputOptional.isPresent()) {
-                    // 使用 BigDecimal 进行精确计算和格式化
-                    BigDecimal total = BigDecimal.valueOf(totalBlankOutputOptional.getAsDouble());
-                    // 保留两位小数
-                    total = total.setScale(3, BigDecimal.ROUND_HALF_UP);
-                    totalBlankOutputStr = total.toString();
-                } else {
-                    totalBlankOutputStr = "0";
-                }
-
-				int totalNums = rollClubTwoDetailsList.stream()
-						.mapToInt(detail -> (detail.getStackAddr() != null && !detail.getStackAddr().isEmpty()) ? 4 : 1)
-						.sum();
-
-				totalNumsAll += totalNums;
-
-
-            }
-			if (bill.getDestination().contains("棒三") && oConvertUtils.listIsNotEmpty(storageBillIds)) {
-                LambdaQueryWrapper<RollClubThreeDetails> queryWrapper2 = new LambdaQueryWrapper<>();
-                queryWrapper2.eq(RollClubThreeDetails::getHeatNo, bill.getHeatNo());
-                queryWrapper2.in(RollClubThreeDetails::getStorageBillId, storageBillIds);
-                List<RollClubThreeDetails> rollClubThreeDetailsList = rollClubThreeDetailsService.list(queryWrapper2);
-                // 使用 Stream API 统计 blankOutput 字段的总和
-                OptionalDouble totalBlankOutputOptional = rollClubThreeDetailsList != null ?
-                        OptionalDouble.of(rollClubThreeDetailsList.stream()
-                                .mapToDouble(details -> details.getBlankOutput() != null ? details.getBlankOutput() : 0)
-                                .sum()) : OptionalDouble.empty();
-                // 将总和转换为字符串,保留两位小时,四舍五入原则
-                if (totalBlankOutputOptional.isPresent()) {
-                    // 使用 BigDecimal 进行精确计算和格式化
-                    BigDecimal total = BigDecimal.valueOf(totalBlankOutputOptional.getAsDouble());
-                    // 保留两位小数
-                    total = total.setScale(3, BigDecimal.ROUND_HALF_UP);
-                    totalBlankOutputStr = total.toString();
-                } else {
-                    totalBlankOutputStr = "0";
-                }
-
-				int totalNums = rollClubThreeDetailsList.stream()
-						.mapToInt(detail -> (detail.getStackAddr() != null && !detail.getStackAddr().isEmpty()) ? 4 : 1)
-						.sum();
-
-				totalNumsAll += totalNums;
-
-            }
-			if (bill.getDestination().contains("上若") && oConvertUtils.listIsNotEmpty(storageBillIds)) {
-                LambdaQueryWrapper<RollOutShippDetails> queryWrapper2 = new LambdaQueryWrapper<>();
-                queryWrapper2.eq(RollOutShippDetails::getHeatNo, bill.getHeatNo());
-                queryWrapper2.in(RollOutShippDetails::getStorageBillId, storageBillIds);
-                List<RollOutShippDetails> rollOutShippDetailsList = rollOutShippDetailsService.list(queryWrapper2);
-                // 使用 Stream API 统计 blankOutput 字段的总和
-                OptionalDouble totalBlankOutputOptional = rollOutShippDetailsList != null ?
-                        OptionalDouble.of(rollOutShippDetailsList.stream()
-                                .mapToDouble(details -> details.getBlankOutput() != null ? details.getBlankOutput() : 0)
-                                .sum()) : OptionalDouble.empty();
-                // 将总和转换为字符串,保留两位小时,四舍五入原则
-                if (totalBlankOutputOptional.isPresent()) {
-                    // 使用 BigDecimal 进行精确计算和格式化
-                    BigDecimal total = BigDecimal.valueOf(totalBlankOutputOptional.getAsDouble());
-                    // 保留两位小数
-                    total = total.setScale(3, BigDecimal.ROUND_HALF_UP);
-                    totalBlankOutputStr = total.toString();
-                } else {
-                    totalBlankOutputStr = "0";
-                }
-
-				int totalNums = rollOutShippDetailsList.stream()
-						.mapToInt(detail -> (detail.getStackAddr() != null && !detail.getStackAddr().isEmpty()) ? 4 : 1)
-						.sum();
-
-				totalNumsAll += totalNums;
-
-            }
-            bill.setRemarks(totalBlankOutputStr);
+			String totalBlankOutputStr = "";
+			// 根据装运单ID查询对应的明细,统计总的出坯量
+
+			LambdaQueryWrapper<RollClubTwoDetails> queryWrapper1 = new LambdaQueryWrapper<>();
+			if (StringUtils.isNotEmpty(heatsActuals.getHeatsCode())) {
+				queryWrapper1.eq(RollClubTwoDetails::getHeatNo, heatsActuals.getHeatsCode());
+			}
+
+			List<RollClubTwoDetails> rollClubTwoDetailsList = rollClubTwoDetailsService.list(queryWrapper1);
+			// 使用 Stream API 统计 blankOutput 字段的总和
+			OptionalDouble totalBlankOutputOptional1 = rollClubTwoDetailsList != null ?
+					OptionalDouble.of(rollClubTwoDetailsList.stream()
+							.mapToDouble(details -> details.getBlankOutput() != null ? details.getBlankOutput() : 0)
+							.sum()) : OptionalDouble.empty();
+			// 将总和转换为字符串,保留两位小时,四舍五入原则
+			if (totalBlankOutputOptional1.isPresent()) {
+				// 使用 BigDecimal 进行精确计算和格式化
+				BigDecimal total = BigDecimal.valueOf(totalBlankOutputOptional1.getAsDouble());
+				// 保留两位小数
+				total = total.setScale(3, BigDecimal.ROUND_HALF_UP);
+				totalBlankOutputStr = total.toString();
+			} else {
+				totalBlankOutputStr = "0";
+			}
+
+			int totalNums1 = rollClubTwoDetailsList.stream()
+					.mapToInt(detail -> (detail.getStackAddr() != null && !detail.getStackAddr().isEmpty()) ? 4 : 1)
+					.sum();
+
+			totalNumsAll += totalNums1;
+
+			steels.addAll(
+					rollClubTwoDetailsList.stream()
+							.map(RollClubTwoDetails::getSteel)
+							.filter(StringUtils::isNotEmpty)
+							.collect(Collectors.toSet())
+			);
+			specs.addAll(
+					rollClubTwoDetailsList.stream()
+							.map(RollClubTwoDetails::getSpec)
+							.filter(StringUtils::isNotEmpty)
+							.collect(Collectors.toSet())
+			);
+			sizes.addAll(
+					rollClubTwoDetailsList.stream()
+							.map(RollClubTwoDetails::getSize)
+							.filter(StringUtils::isNotEmpty)
+							.collect(Collectors.toSet())
+			);
+			licensePlates.addAll(
+					rollClubTwoDetailsList.stream()
+							.map(RollClubTwoDetails::getLicensePlate)
+							.filter(StringUtils::isNotEmpty)
+							.collect(Collectors.toSet())
+			);
+			assemblyNumbers.addAll(
+					rollClubTwoDetailsList.stream()
+							.map(RollClubTwoDetails::getAssemblyNumber)
+							.filter(StringUtils::isNotEmpty)
+							.collect(Collectors.toSet())
+			);
+
+			//如果查询出来的数据不为空,需要设置目的地为棒二
+			if(!rollClubTwoDetailsList.isEmpty()){
+				destinations.add("棒二");
+			}
+
+			LambdaQueryWrapper<RollClubThreeDetails> queryWrapper2 = new LambdaQueryWrapper<>();
+			if (StringUtils.isNotEmpty(heatsActuals.getHeatsCode())) {
+				queryWrapper2.eq(RollClubThreeDetails::getHeatNo, heatsActuals.getHeatsCode());
+			}
+
+			List<RollClubThreeDetails> rollClubThreeDetailsList = rollClubThreeDetailsService.list(queryWrapper2);
+			// 使用 Stream API 统计 blankOutput 字段的总和
+			OptionalDouble totalBlankOutputOptional2 = rollClubThreeDetailsList != null ?
+					OptionalDouble.of(rollClubThreeDetailsList.stream()
+							.mapToDouble(details -> details.getBlankOutput() != null ? details.getBlankOutput() : 0)
+							.sum()) : OptionalDouble.empty();
+			// 将总和转换为字符串,保留两位小时,四舍五入原则
+			if (totalBlankOutputOptional2.isPresent()) {
+				// 使用 BigDecimal 进行精确计算和格式化
+				BigDecimal total = BigDecimal.valueOf(totalBlankOutputOptional2.getAsDouble());
+				// 保留两位小数
+				total = total.setScale(3, BigDecimal.ROUND_HALF_UP);
+				totalBlankOutputStr = total.toString();
+			} else {
+				totalBlankOutputStr = "0";
+			}
+
+			int totalNums2 = rollClubThreeDetailsList.stream()
+					.mapToInt(detail -> (detail.getStackAddr() != null && !detail.getStackAddr().isEmpty()) ? 4 : 1)
+					.sum();
+
+			totalNumsAll += totalNums2;
+
+			steels.addAll(
+					rollClubThreeDetailsList.stream()
+							.map(RollClubThreeDetails::getSteel)
+							.filter(StringUtils::isNotEmpty)
+							.collect(Collectors.toSet())
+			);
+			specs.addAll(
+					rollClubThreeDetailsList.stream()
+							.map(RollClubThreeDetails::getSpec)
+							.filter(StringUtils::isNotEmpty)
+							.collect(Collectors.toSet())
+			);
+			sizes.addAll(
+					rollClubThreeDetailsList.stream()
+							.map(RollClubThreeDetails::getSize)
+							.filter(StringUtils::isNotEmpty)
+							.collect(Collectors.toSet())
+			);
+			licensePlates.addAll(
+					rollClubThreeDetailsList.stream()
+							.map(RollClubThreeDetails::getLicensePlate)
+							.filter(StringUtils::isNotEmpty)
+							.collect(Collectors.toSet())
+			);
+			assemblyNumbers.addAll(
+					rollClubThreeDetailsList.stream()
+							.map(RollClubThreeDetails::getAssemblyNumber)
+							.filter(StringUtils::isNotEmpty)
+							.collect(Collectors.toSet())
+			);
+
+			//如果查询出来的数据不为空,需要设置目的地为棒三
+			if(!rollClubThreeDetailsList.isEmpty()){
+				destinations.add("棒三");
+			}
+
+			LambdaQueryWrapper<RollOutShippDetails> queryWrapper3 = new LambdaQueryWrapper<>();
+			if (StringUtils.isNotEmpty(heatsActuals.getHeatsCode())) {
+				queryWrapper3.eq(RollOutShippDetails::getHeatNo, heatsActuals.getHeatsCode());
+			}
+
+			List<RollOutShippDetails> rollOutShippDetailsList = rollOutShippDetailsService.list(queryWrapper3);
+			// 使用 Stream API 统计 blankOutput 字段的总和
+			OptionalDouble totalBlankOutputOptional = rollOutShippDetailsList != null ?
+					OptionalDouble.of(rollOutShippDetailsList.stream()
+							.mapToDouble(details -> details.getBlankOutput() != null ? details.getBlankOutput() : 0)
+							.sum()) : OptionalDouble.empty();
+			// 将总和转换为字符串,保留两位小时,四舍五入原则
+			if (totalBlankOutputOptional.isPresent()) {
+				// 使用 BigDecimal 进行精确计算和格式化
+				BigDecimal total = BigDecimal.valueOf(totalBlankOutputOptional.getAsDouble());
+				// 保留两位小数
+				total = total.setScale(3, BigDecimal.ROUND_HALF_UP);
+				totalBlankOutputStr = total.toString();
+			} else {
+				totalBlankOutputStr = "0";
+			}
+
+			int totalNums3 = rollOutShippDetailsList.stream()
+					.mapToInt(detail -> (detail.getStackAddr() != null && !detail.getStackAddr().isEmpty()) ? 4 : 1)
+					.sum();
+
+			totalNumsAll += totalNums3;
+
+			//如果查询出来的数据不为空,需要设置目的地为上若
+			if(!rollOutShippDetailsList.isEmpty()){
+				destinations.add("上若");
+			}
+
+			steels.addAll(
+					rollOutShippDetailsList.stream()
+							.map(RollOutShippDetails::getSteel)
+							.filter(StringUtils::isNotEmpty)
+							.collect(Collectors.toSet())
+			);
+			specs.addAll(
+					rollOutShippDetailsList.stream()
+							.map(RollOutShippDetails::getSpec)
+							.filter(StringUtils::isNotEmpty)
+							.collect(Collectors.toSet())
+			);
+			sizes.addAll(
+					rollOutShippDetailsList.stream()
+							.map(RollOutShippDetails::getSize)
+							.filter(StringUtils::isNotEmpty)
+							.collect(Collectors.toSet())
+			);
+			licensePlates.addAll(
+					rollOutShippDetailsList.stream()
+							.map(RollOutShippDetails::getLicensePlate)
+							.filter(StringUtils::isNotEmpty)
+							.collect(Collectors.toSet())
+			);
+			assemblyNumbers.addAll(
+					rollOutShippDetailsList.stream()
+							.map(RollOutShippDetails::getAssemblyNumber)
+							.filter(StringUtils::isNotEmpty)
+							.collect(Collectors.toSet())
+			);
+            //将分组去重的内容使用逗号去分割
+			String steelStr = String.join(",", steels);
+			String specStr = String.join(",", specs);
+			String sizeStr = String.join(",", sizes);
+			String licensePlateStr = String.join(",", licensePlates);
+			String assemblyNumberStr = String.join(",", assemblyNumbers);
+			String destinationStr = String.join(",", destinations);
+
+			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());
+			bill.setRemarks(totalBlankOutputStr);
 			bill.setAmountTotal(totalNumsAll);
-        }
-        return Result.OK(pageList);
-    }
+			bill.setSteel(steelStr);
+			bill.setSpec(specStr);
+			bill.setSize(sizeStr);
+			bill.setLicensePlate(licensePlateStr);
+			bill.setAssemblyNumber(assemblyNumberStr);
+			bill.setDestination(destinationStr);
+			list.add(bill);
+		}
+		//设置最后返回的分页内容
+		billPageList.setRecords(list);
+		billPageList.setTotal(actualsList.size());
+		return Result.OK(billPageList);
+	}
 
 	@ApiOperation(value="当班信息汇总-班次实绩", notes="当班信息汇总-班次实绩")
 	@GetMapping(value = "/queryOnDutyInfo")
@@ -673,4 +834,28 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 		List<OnDutySizeVo> onDutySizeVos = storageBillService.queryOnDutySize(ccmNo, changeShiftId);
 		return Result.OK(onDutySizeVos);
 	}
+
+	@ApiOperation(value = "钢坯热装单棒二-班统计查询", notes = "钢坯热装单棒二-班统计查询")
+	@GetMapping(value = "/hotChargingTwo/statistics")
+	public Result<OnDutyStatistics> queryHotChargingTwoStatistics(@RequestParam(name = "ccmNo") String ccmNo) {
+		// 获取当前班组班次信息
+		OnDutyStatistics onDutyStatistics = storageBillService.queryHotChargingTwoStatistics(ccmNo);
+		return Result.OK(onDutyStatistics);
+	}
+
+	@ApiOperation(value = "钢坯热装单棒三-班统计查询", notes = "钢坯热装单棒三-班统计查询")
+	@GetMapping(value = "/hotChargingThree/statistics")
+	public Result<OnDutyStatistics> queryHotChargingThreeStatistics(@RequestParam(name = "ccmNo") String ccmNo) {
+		// 获取当前班组班次信息
+		OnDutyStatistics onDutyStatistics = storageBillService.queryHotChargingThreeStatistics(ccmNo);
+		return Result.OK(onDutyStatistics);
+	}
+
+	@ApiOperation(value = "钢坯热装单上若-班统计查询", notes = "钢坯热装单上若-班统计查询")
+	@GetMapping(value = "/hotChargingOut/statistics")
+	public Result<OnDutyStatistics> queryHotChargingOutStatistics(@RequestParam(name = "ccmNo") String ccmNo) {
+		// 获取当前班组班次信息
+		OnDutyStatistics onDutyStatistics = storageBillService.queryHotChargingOutStatistics(ccmNo);
+		return Result.OK(onDutyStatistics);
+	}
 }

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

@@ -39,6 +39,12 @@ public interface IStorageBillService extends IService<StorageBill> {
 
     OnDutyStatistics queryHotChargingStatistics(String ccmNo);
 
+    OnDutyStatistics queryHotChargingTwoStatistics(String ccmNo);
+
+    OnDutyStatistics queryHotChargingThreeStatistics(String ccmNo);
+
+    OnDutyStatistics queryHotChargingOutStatistics(String ccmNo);
+
     JSONObject ondutyStatisticsExport(String ccmNo, String ondutyDate);
 
     OnDutyInfo queryOnDutyInfoHandle(String ccmNo, String changeShiftId);

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

@@ -245,53 +245,14 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
     public BilletHotsendDetails findBilletHotChargingDetails(StorageBill storageBill) {
         BilletHotsendDetails result = new BilletHotsendDetails();
 
-        List<String> idList = Arrays.stream(storageBill.getId().split(","))
-                .collect(Collectors.toList());
-        if (oConvertUtils.listIsEmpty(idList)){
-            log.info("{}{}", "装运单ID为空,装运明细查询失败", JSON.toJSON(storageBill));
-            return result;
-        }
-
-        List<String> typeConfigIds = Arrays.stream(storageBill.getTypeConfigId().split(","))
-                .collect(Collectors.toList());
-        if (oConvertUtils.listIsEmpty(typeConfigIds)){
-            log.info("{}{}", "钢坯配置类型ID为空,装运明细查询失败", JSON.toJSON(storageBill));
-            return result;
-        }
-
-        //根据部门orgCode查询部门,需要将职位id进行传递
-        List<BilletHotsendTypeConfig> billetHotsendTypeConfigs = billetHotsendTypeConfigService.listByIds(typeConfigIds);
-        if (CollectionUtils.isEmpty(billetHotsendTypeConfigs)){
-            log.info("{}{}", "钢坯类型配置信息查询为空,装运明细查询失败", JSON.toJSON(storageBill));
-            return result;
-        }
-        for (BilletHotsendTypeConfig billetHotsendTypeConfig : billetHotsendTypeConfigs) {
-            if ("billet_auto_tmp".equals(billetHotsendTypeConfig.getBelongTable())){
-                List<BilletAutoTmp> billetAutoTmpList = billetAutoTmpService.list(new LambdaQueryWrapper<BilletAutoTmp>().in(BilletAutoTmp::getStorageBillId, idList));
-                if (oConvertUtils.listIsNotEmpty(billetAutoTmpList)){
-                    List<RollClubTwoDetails> rollClubTwoDetailsList = new ArrayList<>();
-                    billetAutoTmpList.forEach(x ->{
-                        RollClubTwoDetails rollClubTwoDetails = new RollClubTwoDetails();
-                        BeanUtils.copyProperties(x, rollClubTwoDetails);
-                        rollClubTwoDetailsList.add(rollClubTwoDetails);
-                    });
-                    result.setRollClubTwoDetailsList(rollClubTwoDetailsList);
-                    return result;
-                }
-                return result;
-            }
-        }
-
-        List<RollClubOneDetails> rollClubOneDetailsList = rollClubOneDetailsService.list(new LambdaQueryWrapper<RollClubOneDetails>().in(RollClubOneDetails::getStorageBillId, idList));
-        result.setRollClubOneDetailsList(rollClubOneDetailsList);
-        List<RollClubTwoDetails> rollClubTwoDetailsList = rollClubTwoDetailsService.list(new LambdaQueryWrapper<RollClubTwoDetails>().in(RollClubTwoDetails::getStorageBillId, idList));
+        result.setRollClubOneDetailsList(Collections.emptyList());
+        List<RollClubTwoDetails> rollClubTwoDetailsList = rollClubTwoDetailsService.list(new LambdaQueryWrapper<RollClubTwoDetails>().eq(RollClubTwoDetails::getHeatNo, storageBill.getHeatNo()));
         result.setRollClubTwoDetailsList(rollClubTwoDetailsList);
-        List<RollClubThreeDetails> rollClubThreeDetailsList = rollClubThreeDetailsService.list(new LambdaQueryWrapper<RollClubThreeDetails>().in(RollClubThreeDetails::getStorageBillId, idList));
+        List<RollClubThreeDetails> rollClubThreeDetailsList = rollClubThreeDetailsService.list(new LambdaQueryWrapper<RollClubThreeDetails>().eq(RollClubThreeDetails::getHeatNo, storageBill.getHeatNo()));
         result.setRollClubThreeDetailsList(rollClubThreeDetailsList);
-        List<RollOutShippDetails> rollOutShippDetailsList = rollOutShippDetailsService.list(new LambdaQueryWrapper<RollOutShippDetails>().in(RollOutShippDetails::getStorageBillId, idList));
+        List<RollOutShippDetails> rollOutShippDetailsList = rollOutShippDetailsService.list(new LambdaQueryWrapper<RollOutShippDetails>().eq(RollOutShippDetails::getHeatNo, storageBill.getHeatNo()));
         result.setRollOutShippDetailsList(rollOutShippDetailsList);
-        List<RollHeightDetails> rollHeightDetails = rollHeightDetailsService.list(new LambdaQueryWrapper<RollHeightDetails>().in(RollHeightDetails::getStorageBillId, idList));
-        result.setRollHeightDetails(rollHeightDetails);
+        result.setRollHeightDetails(Collections.emptyList());
 
         return result;
     }
@@ -2408,4 +2369,260 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         }
     }
 
+    @Override
+    public OnDutyStatistics queryHotChargingTwoStatistics(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<>();
+
+        // 统计总数
+        int totalNumsAll = 0;
+        BigDecimal totalBlankOutputsAll = BigDecimal.ZERO;
+        LambdaQueryWrapper<RollClubTwoDetails> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(RollClubTwoDetails::getCcmNo, ccmNo);
+        queryWrapper.eq(RollClubTwoDetails::getShiftGroup, shiftGroup);
+        queryWrapper.eq(RollClubTwoDetails::getShift, shift);
+        // 添加大于 billetHotsendChangeShiftList 的 createTime 条件
+        if (billetHotsendChangeShiftList != null && billetHotsendChangeShiftList.getCreateTime() != null) {
+            queryWrapper.gt(RollClubTwoDetails::getCreateTime, billetHotsendChangeShiftList.getCreateTime());
+        }
+        List<RollClubTwoDetails> rollClubTwoDetailsList = rollClubTwoDetailsService.list(queryWrapper);
+        if (oConvertUtils.listIsNotEmpty(rollClubTwoDetailsList)){
+            statisticsDetailsList1 = rollClubTwoDetailsList.stream()
+                    .collect(Collectors.groupingBy(RollClubTwoDetails::getSize, Collectors.toList()))
+                    .entrySet().stream()
+                    .map(entry -> {
+                        String size = entry.getKey();
+                        List<RollClubTwoDetails> group = entry.getValue();
+                        // 统计总支数,如果 stackAddr 不为空,则乘以 4
+                        int nums = group.stream()
+                                .mapToInt(detail -> (detail.getStackAddr() != null && !detail.getStackAddr().isEmpty()) ? 4 : 1)
+                                .sum();
+                        Double totalBlankOutput = group.stream().mapToDouble(RollClubTwoDetails::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();
+
+            double totalBlankOutputs = rollClubTwoDetailsList.stream().mapToDouble(RollClubTwoDetails::getBlankOutput).sum();
+            BigDecimal bd = BigDecimal.valueOf(totalBlankOutputs).setScale(4, BigDecimal.ROUND_HALF_UP);
+            totalNumsAll += totalNums;
+            totalBlankOutputsAll = totalBlankOutputsAll.add(bd);
+        }
+
+        // 合并列表并根据 size 分组统计
+        List<DestinationStatisticsDetails> mergedList = Stream.of(statisticsDetailsList1)
+                .flatMap(Collection::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.setCounts(totalNumsAll);
+        onDutyStatistics.setBlankOutputs(totalBlankOutputsAll);
+        onDutyStatistics.setStatisticsDetailsList(mergedList);
+        onDutyStatistics.setShiftGroup(ShiftGroupEnum.fromCode(shiftGroup).name());
+        onDutyStatistics.setShift(ShiftEnum.fromCode(shift).name());
+        return onDutyStatistics;
+    }
+
+    @Override
+    public OnDutyStatistics queryHotChargingThreeStatistics(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> statisticsDetailsList2 = new ArrayList<>();
+
+        // 统计总数
+        int totalNumsAll = 0;
+        BigDecimal totalBlankOutputsAll = BigDecimal.ZERO;
+
+        LambdaQueryWrapper<RollClubThreeDetails> queryWrapper1 = new LambdaQueryWrapper<>();
+        queryWrapper1.eq(RollClubThreeDetails::getCcmNo, ccmNo);
+        queryWrapper1.eq(RollClubThreeDetails::getShiftGroup, shiftGroup);
+        queryWrapper1.eq(RollClubThreeDetails::getShift, shift);
+        // 添加大于 billetHotsendChangeShiftList 的 createTime 条件
+        if (billetHotsendChangeShiftList != null && billetHotsendChangeShiftList.getCreateTime() != null) {
+            queryWrapper1.gt(RollClubThreeDetails::getCreateTime, billetHotsendChangeShiftList.getCreateTime());
+        }
+        List<RollClubThreeDetails> rollClubThreeDetailsList = rollClubThreeDetailsService.list(queryWrapper1);
+        if (oConvertUtils.listIsNotEmpty(rollClubThreeDetailsList)){
+            statisticsDetailsList2 = rollClubThreeDetailsList.stream()
+                    .collect(Collectors.groupingBy(RollClubThreeDetails::getSize, Collectors.toList()))
+                    .entrySet().stream()
+                    .map(entry -> {
+                        String size = entry.getKey();
+                        List<RollClubThreeDetails> group = entry.getValue();
+                        // 统计总支数,如果 stackAddr 不为空,则乘以 4
+                        int nums = group.stream()
+                                .mapToInt(detail -> (detail.getStackAddr() != null && !detail.getStackAddr().isEmpty()) ? 4 : 1)
+                                .sum();
+                        Double totalBlankOutput = group.stream().mapToDouble(RollClubThreeDetails::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();
+
+            double totalBlankOutputs = rollClubThreeDetailsList.stream().mapToDouble(RollClubThreeDetails::getBlankOutput).sum();
+            BigDecimal bd = BigDecimal.valueOf(totalBlankOutputs).setScale(4, BigDecimal.ROUND_HALF_UP);
+
+            totalNumsAll += totalNums;
+            totalBlankOutputsAll = totalBlankOutputsAll.add(bd);
+        }
+
+
+        // 合并列表并根据 size 分组统计
+        List<DestinationStatisticsDetails> mergedList = Stream.of(statisticsDetailsList2)
+                .flatMap(Collection::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.setCounts(totalNumsAll);
+        onDutyStatistics.setBlankOutputs(totalBlankOutputsAll);
+        onDutyStatistics.setStatisticsDetailsList(mergedList);
+        onDutyStatistics.setShiftGroup(ShiftGroupEnum.fromCode(shiftGroup).name());
+        onDutyStatistics.setShift(ShiftEnum.fromCode(shift).name());
+        return onDutyStatistics;
+    }
+
+    @Override
+    public OnDutyStatistics queryHotChargingOutStatistics(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> statisticsDetailsList3 = new ArrayList<>();
+        // 统计总数
+        int totalNumsAll = 0;
+        BigDecimal totalBlankOutputsAll = BigDecimal.ZERO;
+
+        LambdaQueryWrapper<RollOutShippDetails> queryWrapper2 = new LambdaQueryWrapper<>();
+        queryWrapper2.eq(RollOutShippDetails::getCcmNo, ccmNo);
+        queryWrapper2.eq(RollOutShippDetails::getShiftGroup, shiftGroup);
+        queryWrapper2.eq(RollOutShippDetails::getShift, shift);
+        // 添加大于 billetHotsendChangeShiftList 的 createTime 条件
+        if (billetHotsendChangeShiftList != null && billetHotsendChangeShiftList.getCreateTime() != null) {
+            queryWrapper2.gt(RollOutShippDetails::getCreateTime, billetHotsendChangeShiftList.getCreateTime());
+        }
+        List<RollOutShippDetails> rollOutShippDetailsList = rollOutShippDetailsService.list(queryWrapper2);
+        if (oConvertUtils.listIsNotEmpty(rollOutShippDetailsList)){
+            statisticsDetailsList3 = rollOutShippDetailsList.stream()
+                    .collect(Collectors.groupingBy(RollOutShippDetails::getSize, Collectors.toList()))
+                    .entrySet().stream()
+                    .map(entry -> {
+                        String size = entry.getKey();
+                        List<RollOutShippDetails> group = entry.getValue();
+                        // 统计总支数,如果 stackAddr 不为空,则乘以 4
+                        int nums = group.stream()
+                                .mapToInt(detail -> (detail.getStackAddr() != null && !detail.getStackAddr().isEmpty()) ? 4 : 1)
+                                .sum();
+                        Double totalBlankOutput = group.stream().mapToDouble(RollOutShippDetails::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 = statisticsDetailsList3.stream()
+                    .mapToInt(DestinationStatisticsDetails::getNums)
+                    .sum();
+
+            double totalBlankOutputs = rollOutShippDetailsList.stream().mapToDouble(RollOutShippDetails::getBlankOutput).sum();
+            BigDecimal bd = BigDecimal.valueOf(totalBlankOutputs).setScale(4, BigDecimal.ROUND_HALF_UP);
+
+            totalNumsAll += totalNums;
+            totalBlankOutputsAll = totalBlankOutputsAll.add(bd);
+        }
+
+        // 合并三个列表并根据 size 分组统计
+        List<DestinationStatisticsDetails> mergedList = Stream.of(statisticsDetailsList3)
+                .flatMap(Collection::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.setCounts(totalNumsAll);
+        onDutyStatistics.setBlankOutputs(totalBlankOutputsAll);
+        onDutyStatistics.setStatisticsDetailsList(mergedList);
+        onDutyStatistics.setShiftGroup(ShiftGroupEnum.fromCode(shiftGroup).name());
+        onDutyStatistics.setShift(ShiftEnum.fromCode(shift).name());
+        return onDutyStatistics;
+    }
+
 }