Browse Source

当班装运明细查询

qiangxuan 3 months ago
parent
commit
74955c082d

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

@@ -493,17 +493,17 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 		return Result.OK(onDutyLiftingBillInfo);
 	}
 
-	@ApiOperation(value="当班轧钢信息-班次实绩", notes="当班轧钢信息-班次实绩")
-	@GetMapping(value = "/queryOnDutySteelRollingInfo")
-	public Result<JSONObject> queryOnDutySteelRollingInfoHandle(@RequestParam(name="ccmNo") String ccmNo) {
-		JSONObject result = storageBillService.queryOnDutySteelRollingInfoHandle(ccmNo);
+	@ApiOperation(value="当班正在装运信息-班次实绩", notes="当班正在装运信息-班次实绩")
+	@GetMapping(value = "/queryOnDutyStorageBillInfo")
+	public Result<OnDutyStorageBill> queryOnDutyStorageBillInfoHandle(@RequestParam(name="ccmNo") String ccmNo) {
+		OnDutyStorageBill result = storageBillService.queryOnDutyStorageBillInfoHandle(ccmNo);
 		return Result.OK(result);
 	}
 
-	@ApiOperation(value="当班装运信息-班次实绩", notes="当班装运信息-班次实绩")
-	@GetMapping(value = "/queryOnDutyStorageBillInfo")
-	public Result<JSONObject> queryOnDutyStorageBillInfoHandle(@RequestParam(name="ccmNo") String ccmNo) {
-		JSONObject result = storageBillService.queryOnDutyStorageBillInfoHandle(ccmNo);
+	@ApiOperation(value="当班所有装运信息-班次实绩", notes="当班所有装运信息-班次实绩")
+	@GetMapping(value = "/queryOnDutyAllStorageBillInfo")
+	public Result<OnDutyStorageBillStatistics> queryOnDutyAllStorageBillInfoHandle(@RequestParam(name="ccmNo") String ccmNo) {
+		OnDutyStorageBillStatistics result = storageBillService.queryOnDutyAllStorageBillInfoHandle(ccmNo);
 		return Result.OK(result);
 	}
 }

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

@@ -0,0 +1,12 @@
+package org.jeecg.modules.billet.storageBill.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class OnDutyStorageBill {
+
+    private List<OnDutyStorageBillInfo> onDutyStorageBillInfos;
+
+}

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

@@ -0,0 +1,104 @@
+package org.jeecg.modules.billet.storageBill.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@Data
+public class OnDutyStorageBillInfo {
+    /**主键*/
+    @TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键")
+    private String id;
+    /**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+    /**创建日期*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+
+    /**序号*/
+    @ApiModelProperty(value = "车次总序号")
+    private Integer carAllNum;
+    /**铸机*/
+    @ApiModelProperty(value = "铸机")
+    private String ccmNo;
+    /**炉号*/
+    @ApiModelProperty(value = "炉号")
+    private String heatNo;
+    /**班组*/
+    @ApiModelProperty(value = "班组")
+    private String shiftGroup;
+    /**班别*/
+    @ApiModelProperty(value = "班别")
+    private String shift;
+    /**钢种*/
+    @ApiModelProperty(value = "钢种")
+    private String steel;
+    /**规格*/
+    @ApiModelProperty(value = "规格")
+    private String spec;
+    /**定尺*/
+    @ApiModelProperty(value = "定尺")
+    private String size;
+
+    @ApiModelProperty(value = "车牌号")
+    private String licensePlate;
+
+    /**总支数*/
+    @ApiModelProperty(value = "总支数")
+    private Integer amountTotal;
+
+    /**类型*/
+    @ApiModelProperty(value = "类型")
+    private String btype;
+
+    /**到站时间*/
+    @ApiModelProperty(value = "到站时间")
+    private Date arrivalTime;
+
+    /**发车时间*/
+    @ApiModelProperty(value = "发车时间")
+    private Date outTime;
+
+    /**车号*/
+    @ApiModelProperty(value = "本车车次")
+    private Integer carNum;
+
+    /**备注*/
+    @ApiModelProperty(value = "目的地")
+    private String destination;
+
+    @ApiModelProperty(value = "钢坯配置类型ID")
+    private String typeConfigId;
+
+    /**备注*/
+    @ApiModelProperty(value = "备注")
+    private String remarks;
+
+    /**备注*/
+    @Excel(name = "综合唯一编码", width = 15)
+    @ApiModelProperty(value = "综合唯一编码")
+    private String uniqueCode;
+
+    /**车位号(1/2/3/4)*/
+    @ApiModelProperty(value = "车位号")
+    private Integer positionNum;
+
+    /**
+     * 组坯号
+     */
+    @ApiModelProperty(value = "组坯号")
+    private String assemblyNumber;
+
+    @ApiModelProperty(value = "出坯量")
+    private Double blankOutput;
+}

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

@@ -0,0 +1,33 @@
+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 OnDutyStorageBillStatistics {
+
+
+    /**出坯量*/
+    @ApiModelProperty(value = "总车次")
+    private Integer allCarNum;
+
+    @ApiModelProperty(value = "总支数")
+    private Integer counts;
+
+    /**出坯量*/
+    @ApiModelProperty(value = "热送总重量")
+    private BigDecimal blankOutputs;
+
+    @ApiModelProperty(value = "明细")
+    private List<DestinationStatisticsDetails> statisticsDetailsList;
+
+    @ApiModelProperty(value = "班组")
+    private String shiftGroup;
+
+    @ApiModelProperty(value = "班别")
+    private String shift;
+}

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

@@ -42,5 +42,7 @@ public interface IStorageBillService extends IService<StorageBill> {
 
     JSONObject queryOnDutySteelRollingInfoHandle(String ccmNo);
 
-    JSONObject queryOnDutyStorageBillInfoHandle(String ccmNo);
+    OnDutyStorageBill queryOnDutyStorageBillInfoHandle(String ccmNo);
+
+    OnDutyStorageBillStatistics queryOnDutyAllStorageBillInfoHandle(String ccmNo);
 }

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

@@ -1202,15 +1202,228 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
     }
 
     @Override
-    public JSONObject queryOnDutyStorageBillInfoHandle(String ccmNo) {
-        JSONObject result = new JSONObject();
+    public OnDutyStorageBill queryOnDutyStorageBillInfoHandle(String ccmNo) {
+        OnDutyStorageBill onDutyStorageBill = new OnDutyStorageBill();
 
+        // 从 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 onDutyStorageBill;
+        }
+        // 根据铸机号、班组、班别、licensePlate不等于”辊道“或者”堆垛辊道“,amountTotal不等于0 ,查询当班装运单信息
+        LambdaQueryWrapper<StorageBill> queryWrapper2 = new LambdaQueryWrapper<>();
+        queryWrapper2.eq(StorageBill::getCcmNo, ccmNo)
+                .eq(StorageBill::getShift, shift)
+                .eq(StorageBill::getShiftGroup, shiftGroup)
+                .notIn(StorageBill::getLicensePlate, "辊道", "堆垛辊道")
+                .gt(StorageBill::getAmountTotal, 0)
+                .isNull(StorageBill::getOutTime)
+                .between(StorageBill::getCreateTime,billetHotsendChangeShift.getCreateTime(), new Date());
+        List<StorageBill> storageBillList = baseMapper.selectList(queryWrapper2);
+        if (oConvertUtils.listIsEmpty(storageBillList)){
+            log.info("{}{}", "查询当班装运单信息为空!", ccmNo);
+            return onDutyStorageBill;
+        }
+        List<OnDutyStorageBillInfo> onDutyStorageBillInfos = new ArrayList<>();
+        for (StorageBill storageBill : storageBillList) {
+            OnDutyStorageBillInfo onDutyStorageBillInfo = new OnDutyStorageBillInfo();
+            BeanUtils.copyProperties(storageBill, onDutyStorageBillInfo);
+            if ("棒二".equals(storageBill.getDestination())){
+                // 根据装运单ID查询棒二明细表,并计算出坯量
+                LambdaQueryWrapper<RollClubTwoDetails> queryWrapper3 = new LambdaQueryWrapper<>();
+                queryWrapper3.eq(RollClubTwoDetails::getCcmNo, ccmNo).eq(RollClubTwoDetails::getStorageBillId, storageBill.getId());
+                List<RollClubTwoDetails> rollClubTwoDetailsList = rollClubTwoDetailsService.list(queryWrapper3);
+                if (oConvertUtils.listIsNotEmpty(rollClubTwoDetailsList)) {
+                    // 统计 blankOutput 总和并保留 4 位小数
+                    double totalBlankOutput = rollClubTwoDetailsList.stream()
+                            .mapToDouble(RollClubTwoDetails::getBlankOutput)
+                            .sum();
 
+                    BigDecimal bd = new BigDecimal(totalBlankOutput);
+                    bd = bd.setScale(4, BigDecimal.ROUND_HALF_UP);
+                    double blankOutputSum = bd.doubleValue();
+                    onDutyStorageBillInfo.setBlankOutput(blankOutputSum);
+                }
+            }
+            if ("棒三".equals(storageBill.getDestination())){
+                // 根据装运单ID查询棒二明细表,并计算出坯量
+                LambdaQueryWrapper<RollClubThreeDetails> queryWrapper3 = new LambdaQueryWrapper<>();
+                queryWrapper3.eq(RollClubThreeDetails::getCcmNo, ccmNo).eq(RollClubThreeDetails::getStorageBillId, storageBill.getId());
+                List<RollClubThreeDetails> rollClubThreeDetailsList = rollClubThreeDetailsService.list(queryWrapper3);
+                if (oConvertUtils.listIsNotEmpty(rollClubThreeDetailsList)) {
+                    // 统计 blankOutput 总和并保留 4 位小数
+                    double totalBlankOutput = rollClubThreeDetailsList.stream()
+                            .mapToDouble(RollClubThreeDetails::getBlankOutput)
+                            .sum();
 
+                    BigDecimal bd = new BigDecimal(totalBlankOutput);
+                    bd = bd.setScale(4, BigDecimal.ROUND_HALF_UP);
+                    double blankOutputSum = bd.doubleValue();
+                    onDutyStorageBillInfo.setBlankOutput(blankOutputSum);
+                }
+            }
+            if ("上若".equals(storageBill.getDestination())){
+                // 根据装运单ID查询棒二明细表,并计算出坯量
+                LambdaQueryWrapper<RollOutShippDetails> queryWrapper3 = new LambdaQueryWrapper<>();
+                queryWrapper3.eq(RollOutShippDetails::getCcmNo, ccmNo).eq(RollOutShippDetails::getStorageBillId, storageBill.getId());
+                List<RollOutShippDetails> rollOutShippDetailsList = rollOutShippDetailsService.list(queryWrapper3);
+                if (oConvertUtils.listIsNotEmpty(rollOutShippDetailsList)) {
+                    // 统计 blankOutput 总和并保留 4 位小数
+                    double totalBlankOutput = rollOutShippDetailsList.stream()
+                            .mapToDouble(RollOutShippDetails::getBlankOutput)
+                            .sum();
 
-        return result;
+                    BigDecimal bd = new BigDecimal(totalBlankOutput);
+                    bd = bd.setScale(4, BigDecimal.ROUND_HALF_UP);
+                    double blankOutputSum = bd.doubleValue();
+                    onDutyStorageBillInfo.setBlankOutput(blankOutputSum);
+                }
+            }
+            onDutyStorageBillInfos.add(onDutyStorageBillInfo);
+        }
+        onDutyStorageBill.setOnDutyStorageBillInfos(onDutyStorageBillInfos);
+        return onDutyStorageBill;
     }
 
+    @Override
+    public OnDutyStorageBillStatistics queryOnDutyAllStorageBillInfoHandle(String ccmNo) {
+        OnDutyStorageBillStatistics onDutyStorageBillStatistics = new OnDutyStorageBillStatistics();
+
+        // 从 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 onDutyStorageBillStatistics;
+        }
+        // 根据铸机号、班组、班别、licensePlate不等于”辊道“或者”堆垛辊道“,amountTotal不等于0 ,查询当班装运单信息
+        LambdaQueryWrapper<StorageBill> queryWrapper2 = new LambdaQueryWrapper<>();
+        queryWrapper2.eq(StorageBill::getCcmNo, ccmNo)
+                .eq(StorageBill::getShift, shift)
+                .eq(StorageBill::getShiftGroup, shiftGroup)
+                .notIn(StorageBill::getLicensePlate, "辊道", "堆垛辊道")
+                .gt(StorageBill::getAmountTotal, 0)
+                .between(StorageBill::getCreateTime,billetHotsendChangeShift.getCreateTime(), new Date());
+        List<StorageBill> storageBillList = baseMapper.selectList(queryWrapper2);
+        if (oConvertUtils.listIsEmpty(storageBillList)){
+            log.info("{}{}", "查询当班装运单信息为空!", ccmNo);
+            return onDutyStorageBillStatistics;
+        }
+        List<DestinationStatisticsDetails> statisticsDetailsList1 = new ArrayList<>();
+        List<DestinationStatisticsDetails> statisticsDetailsList2 = new ArrayList<>();
+        List<DestinationStatisticsDetails> statisticsDetailsList3 = new ArrayList<>();
+        for (StorageBill storageBill : storageBillList) {
+
+            if ("棒二".equals(storageBill.getDestination())){
+                LambdaQueryWrapper<RollClubTwoDetails> queryWrapper3 = new LambdaQueryWrapper<>();
+                queryWrapper3.eq(RollClubTwoDetails::getCcmNo, ccmNo).eq(RollClubTwoDetails::getStorageBillId, storageBill.getId());
+                List<RollClubTwoDetails> rollClubTwoDetailsList = rollClubTwoDetailsService.list(queryWrapper3);
+                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();
+                                Integer nums = group.size();
+                                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();
+                    onDutyStorageBillStatistics.setCounts(totalNums);
+
+                    double totalBlankOutputs = rollClubTwoDetailsList.stream().mapToDouble(RollClubTwoDetails::getBlankOutput).sum();
+                    BigDecimal bd = BigDecimal.valueOf(totalBlankOutputs).setScale(4, BigDecimal.ROUND_HALF_UP);
+                    onDutyStorageBillStatistics.setBlankOutputs(bd);
+                }
+            }
+
+            if ("棒三".equals(storageBill.getDestination())){
+                LambdaQueryWrapper<RollClubThreeDetails> queryWrapper3 = new LambdaQueryWrapper<>();
+                queryWrapper3.eq(RollClubThreeDetails::getCcmNo, ccmNo).eq(RollClubThreeDetails::getStorageBillId, storageBill.getId());
+                List<RollClubThreeDetails> rollClubThreeDetailsList = rollClubThreeDetailsService.list(queryWrapper3);
+                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();
+                                Integer nums = group.size();
+                                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();
+                    onDutyStorageBillStatistics.setCounts(totalNums);
+
+                    double totalBlankOutputs = rollClubThreeDetailsList.stream().mapToDouble(RollClubThreeDetails::getBlankOutput).sum();
+                    BigDecimal bd = BigDecimal.valueOf(totalBlankOutputs).setScale(4, BigDecimal.ROUND_HALF_UP);
+                    onDutyStorageBillStatistics.setBlankOutputs(bd);
+                }
+            }
+
+            if ("上若".equals(storageBill.getDestination())){
+                LambdaQueryWrapper<RollOutShippDetails> queryWrapper3 = new LambdaQueryWrapper<>();
+                queryWrapper3.eq(RollOutShippDetails::getCcmNo, ccmNo).eq(RollOutShippDetails::getStorageBillId, storageBill.getId());
+                List<RollOutShippDetails> rollOutShippDetailsList = rollOutShippDetailsService.list(queryWrapper3);
+                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();
+                                Integer nums = group.size();
+                                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();
+                    onDutyStorageBillStatistics.setCounts(totalNums);
+
+                    double totalBlankOutputs = rollOutShippDetailsList.stream().mapToDouble(RollOutShippDetails::getBlankOutput).sum();
+                    BigDecimal bd = BigDecimal.valueOf(totalBlankOutputs).setScale(4, BigDecimal.ROUND_HALF_UP);
+                    onDutyStorageBillStatistics.setBlankOutputs(bd);
+                }
+            }
+
+
+        }
+
+        return onDutyStorageBillStatistics;
+    }
 
 
     /**