Jelajahi Sumber

增加棒二工作台数据展示以及完善装运明细的组坯号

lingpeng.li 4 bulan lalu
induk
melakukan
80fb4850f2

+ 125 - 114
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollClubTwo/controller/RollClubTwoDetailsController.java

@@ -13,6 +13,7 @@ import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.modules.billet.rollClubTwo.entity.RollClubTwoDetails;
 import org.jeecg.modules.billet.rollClubTwo.service.IRollClubTwoDetailsService;
+import org.jeecg.modules.billet.storageBill.vo.RollOnDutyDataVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
@@ -24,122 +25,122 @@ import java.util.Arrays;
 /**
  * @Description: 棒二明细信息
  * @Author: jeecg-boot
- * @Date:   2024-11-20
+ * @Date: 2024-11-20
  * @Version: V1.0
  */
-@Api(tags="棒二明细信息")
+@Api(tags = "棒二明细信息")
 @RestController
 @RequestMapping("/rollClubTwoDetails")
 @Slf4j
 public class RollClubTwoDetailsController extends JeecgController<RollClubTwoDetails, IRollClubTwoDetailsService> {
-	@Autowired
-	private IRollClubTwoDetailsService rollClubTwoDetailsService;
-	
-	/**
-	 * 分页列表查询
-	 *
-	 * @param rollClubTwoDetails
-	 * @param pageNo
-	 * @param pageSize
-	 * @param req
-	 * @return
-	 */
-	//@AutoLog(value = "棒二明细信息-分页列表查询")
-	@ApiOperation(value="棒二明细信息-分页列表查询", notes="棒二明细信息-分页列表查询")
-	@GetMapping(value = "/list")
-	public Result<IPage<RollClubTwoDetails>> queryPageList(RollClubTwoDetails rollClubTwoDetails,
-								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
-								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
-								   HttpServletRequest req) {
-		QueryWrapper<RollClubTwoDetails> queryWrapper = QueryGenerator.initQueryWrapper(rollClubTwoDetails, req.getParameterMap());
-		Page<RollClubTwoDetails> page = new Page<RollClubTwoDetails>(pageNo, pageSize);
-		IPage<RollClubTwoDetails> pageList = rollClubTwoDetailsService.page(page, queryWrapper);
-		return Result.OK(pageList);
-	}
-	
-	/**
-	 *   添加
-	 *
-	 * @param rollClubTwoDetails
-	 * @return
-	 */
-	@AutoLog(value = "棒二明细信息-添加")
-	@ApiOperation(value="棒二明细信息-添加", notes="棒二明细信息-添加")
-	@RequiresPermissions("rollClubTwoDetails:roll_club_two_details:add")
-	@PostMapping(value = "/add")
-	public Result<String> add(@RequestBody RollClubTwoDetails rollClubTwoDetails) {
-		rollClubTwoDetailsService.save(rollClubTwoDetails);
-		return Result.OK("添加成功!");
-	}
-	
-	/**
-	 *  编辑
-	 *
-	 * @param rollClubTwoDetails
-	 * @return
-	 */
-	@AutoLog(value = "棒二明细信息-编辑")
-	@ApiOperation(value="棒二明细信息-编辑", notes="棒二明细信息-编辑")
-	@RequiresPermissions("rollClubTwoDetails:roll_club_two_details:edit")
-	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
-	public Result<String> edit(@RequestBody RollClubTwoDetails rollClubTwoDetails) {
-		rollClubTwoDetailsService.updateById(rollClubTwoDetails);
-		return Result.OK("编辑成功!");
-	}
-	
-	/**
-	 *   通过id删除
-	 *
-	 * @param id
-	 * @return
-	 */
-	@AutoLog(value = "棒二明细信息-通过id删除")
-	@ApiOperation(value="棒二明细信息-通过id删除", notes="棒二明细信息-通过id删除")
-	@RequiresPermissions("rollClubTwoDetails:roll_club_two_details:delete")
-	@DeleteMapping(value = "/delete")
-	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
-		rollClubTwoDetailsService.removeById(id);
-		return Result.OK("删除成功!");
-	}
-	
-	/**
-	 *  批量删除
-	 *
-	 * @param ids
-	 * @return
-	 */
-	@AutoLog(value = "棒二明细信息-批量删除")
-	@ApiOperation(value="棒二明细信息-批量删除", notes="棒二明细信息-批量删除")
-	@RequiresPermissions("rollClubTwoDetails:roll_club_two_details:deleteBatch")
-	@DeleteMapping(value = "/deleteBatch")
-	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
-		this.rollClubTwoDetailsService.removeByIds(Arrays.asList(ids.split(",")));
-		return Result.OK("批量删除成功!");
-	}
-	
-	/**
-	 * 通过id查询
-	 *
-	 * @param id
-	 * @return
-	 */
-	//@AutoLog(value = "棒二明细信息-通过id查询")
-	@ApiOperation(value="棒二明细信息-通过id查询", notes="棒二明细信息-通过id查询")
-	@GetMapping(value = "/queryById")
-	public Result<RollClubTwoDetails> queryById(@RequestParam(name="id",required=true) String id) {
-		RollClubTwoDetails rollClubTwoDetails = rollClubTwoDetailsService.getById(id);
-		if(rollClubTwoDetails==null) {
-			return Result.error("未找到对应数据");
-		}
-		return Result.OK(rollClubTwoDetails);
-	}
+    @Autowired
+    private IRollClubTwoDetailsService rollClubTwoDetailsService;
 
     /**
-    * 导出excel
-    *
-    * @param request
-    * @param rollClubTwoDetails
-    */
+     * 分页列表查询
+     *
+     * @param rollClubTwoDetails
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    //@AutoLog(value = "棒二明细信息-分页列表查询")
+    @ApiOperation(value = "棒二明细信息-分页列表查询", notes = "棒二明细信息-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<RollClubTwoDetails>> queryPageList(RollClubTwoDetails rollClubTwoDetails,
+                                                           @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                           @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                           HttpServletRequest req) {
+        QueryWrapper<RollClubTwoDetails> queryWrapper = QueryGenerator.initQueryWrapper(rollClubTwoDetails, req.getParameterMap());
+        Page<RollClubTwoDetails> page = new Page<RollClubTwoDetails>(pageNo, pageSize);
+        IPage<RollClubTwoDetails> pageList = rollClubTwoDetailsService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 添加
+     *
+     * @param rollClubTwoDetails
+     * @return
+     */
+    @AutoLog(value = "棒二明细信息-添加")
+    @ApiOperation(value = "棒二明细信息-添加", notes = "棒二明细信息-添加")
+    @RequiresPermissions("rollClubTwoDetails:roll_club_two_details:add")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody RollClubTwoDetails rollClubTwoDetails) {
+        rollClubTwoDetailsService.save(rollClubTwoDetails);
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     *
+     * @param rollClubTwoDetails
+     * @return
+     */
+    @AutoLog(value = "棒二明细信息-编辑")
+    @ApiOperation(value = "棒二明细信息-编辑", notes = "棒二明细信息-编辑")
+    @RequiresPermissions("rollClubTwoDetails:roll_club_two_details:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody RollClubTwoDetails rollClubTwoDetails) {
+        rollClubTwoDetailsService.updateById(rollClubTwoDetails);
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "棒二明细信息-通过id删除")
+    @ApiOperation(value = "棒二明细信息-通过id删除", notes = "棒二明细信息-通过id删除")
+    @RequiresPermissions("rollClubTwoDetails:roll_club_two_details:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        rollClubTwoDetailsService.removeById(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "棒二明细信息-批量删除")
+    @ApiOperation(value = "棒二明细信息-批量删除", notes = "棒二明细信息-批量删除")
+    @RequiresPermissions("rollClubTwoDetails:roll_club_two_details:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.rollClubTwoDetailsService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "棒二明细信息-通过id查询")
+    @ApiOperation(value = "棒二明细信息-通过id查询", notes = "棒二明细信息-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<RollClubTwoDetails> queryById(@RequestParam(name = "id", required = true) String id) {
+        RollClubTwoDetails rollClubTwoDetails = rollClubTwoDetailsService.getById(id);
+        if (rollClubTwoDetails == null) {
+            return Result.error("未找到对应数据");
+        }
+        return Result.OK(rollClubTwoDetails);
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param rollClubTwoDetails
+     */
     @RequiresPermissions("rollClubTwoDetails:roll_club_two_details:exportXls")
     @RequestMapping(value = "/exportXls")
     public ModelAndView exportXls(HttpServletRequest request, RollClubTwoDetails rollClubTwoDetails) {
@@ -147,16 +148,26 @@ public class RollClubTwoDetailsController extends JeecgController<RollClubTwoDet
     }
 
     /**
-      * 通过excel导入数据
-    *
-    * @param request
-    * @param response
-    * @return
-    */
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
     @RequiresPermissions("rollClubTwoDetails:roll_club_two_details:importExcel")
     @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
     public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
         return super.importExcel(request, response, RollClubTwoDetails.class);
     }
 
+
+    @ApiOperation(value = "轧钢棒二工作台信息", notes = "轧钢棒二工作台信息")
+    @GetMapping(value = "/rollClubTwoWorkbenches")
+    public Result<RollOnDutyDataVo> rollClubTwoWorkbenches(@RequestParam(name = "ccmNo") String ccmNo) {
+
+        RollOnDutyDataVo rollOnDutyVo = rollClubTwoDetailsService.queryOnDutyRecord(ccmNo);
+        return Result.OK(rollOnDutyVo);
+    }
+
+
 }

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

@@ -2,6 +2,7 @@ package org.jeecg.modules.billet.rollClubTwo.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.billet.rollClubTwo.entity.RollClubTwoDetails;
+import org.jeecg.modules.billet.storageBill.vo.RollOnDutyDataVo;
 
 /**
  * @Description: 棒二明细信息
@@ -11,4 +12,6 @@ import org.jeecg.modules.billet.rollClubTwo.entity.RollClubTwoDetails;
  */
 public interface IRollClubTwoDetailsService extends IService<RollClubTwoDetails> {
 
+    RollOnDutyDataVo queryOnDutyRecord(String ccmNo);
+
 }

+ 154 - 1
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollClubTwo/service/impl/RollClubTwoDetailsServiceImpl.java

@@ -1,19 +1,172 @@
 package org.jeecg.modules.billet.rollClubTwo.service.impl;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.billet.billetHotsendChangeShift.entity.BilletHotsendChangeShift;
+import org.jeecg.modules.billet.billetHotsendChangeShift.service.IBilletHotsendChangeShiftService;
 import org.jeecg.modules.billet.rollClubTwo.entity.RollClubTwoDetails;
 import org.jeecg.modules.billet.rollClubTwo.mapper.RollClubTwoDetailsMapper;
 import org.jeecg.modules.billet.rollClubTwo.service.IRollClubTwoDetailsService;
+import org.jeecg.modules.billet.storageBill.entity.StorageBill;
+import org.jeecg.modules.billet.storageBill.mapper.StorageBillMapper;
+import org.jeecg.modules.billet.storageBill.service.IStorageBillService;
+import org.jeecg.modules.billet.storageBill.vo.*;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
 /**
  * @Description: 棒二明细信息
  * @Author: jeecg-boot
- * @Date:   2024-11-20
+ * @Date: 2024-11-20
  * @Version: V1.0
  */
+@Slf4j
 @Service
 public class RollClubTwoDetailsServiceImpl extends ServiceImpl<RollClubTwoDetailsMapper, RollClubTwoDetails> implements IRollClubTwoDetailsService {
 
+
+    @Autowired
+    private IBilletHotsendChangeShiftService billetHotsendChangeShiftService;
+
+    @Autowired
+    public RedisTemplate redisTemplate;
+
+    @Autowired
+    private StorageBillMapper storageBillMapper;
+
+    @Override
+    public RollOnDutyDataVo queryOnDutyRecord(String ccmNo) {
+        RollOnDutyDataVo rollOnDutyVo = new RollOnDutyDataVo();
+
+        // 1. 从 Redis 获取班次信息
+        String shiftGroup = getShiftInfo(ccmNo, "class:shift:group:%s");
+        String shift = getShiftInfo(ccmNo, "class:shift:%s");
+
+        // 2. 获取交班记录
+        LambdaQueryWrapper<BilletHotsendChangeShift> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(BilletHotsendChangeShift::getCcmNo, ccmNo)
+                .eq(BilletHotsendChangeShift::getShift, shift)
+                .eq(BilletHotsendChangeShift::getShiftGroup, shiftGroup)
+                .isNull(BilletHotsendChangeShift::getChangeShiftTime)
+                .orderByDesc(BilletHotsendChangeShift::getCreateTime)
+                .last("limit 1");
+
+        BilletHotsendChangeShift billetHotsendChangeShift = billetHotsendChangeShiftService.getOne(queryWrapper);
+        if (billetHotsendChangeShift == null) {
+            log.info("{}{}", "查询当班装运单信息失败,交班记录为空!", ccmNo + "失败时间:" + new Date());
+            return rollOnDutyVo;
+        }
+
+        // 3. 查询当班装运单信息
+        LambdaQueryWrapper<StorageBill> billQueryWrapper = new LambdaQueryWrapper<>();
+        billQueryWrapper.eq(StorageBill::getCcmNo, ccmNo)
+                .gt(StorageBill::getAmountTotal, 0)
+                .between(StorageBill::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
+
+        List<StorageBill> storageBillList = storageBillMapper.selectList(billQueryWrapper);
+        if (oConvertUtils.listIsEmpty(storageBillList)) {
+            log.info("{}{}", "查询当班装运单信息为空!", ccmNo);
+            return rollOnDutyVo;
+        }
+
+        // 4. 查询棒二明细数据
+        List<String> billIds = storageBillList.stream().map(StorageBill::getId).collect(Collectors.toList());
+        List<RollClubTwoDetails> rollClubTwoDetailsList = Collections.emptyList();
+
+        if (!billIds.isEmpty()) {
+            LambdaQueryWrapper<RollClubTwoDetails> rollClubQuery = new LambdaQueryWrapper<>();
+            rollClubQuery.eq(RollClubTwoDetails::getCcmNo, ccmNo)
+                    .in(RollClubTwoDetails::getStorageBillId, billIds);
+            rollClubTwoDetailsList = baseMapper.selectList(rollClubQuery);
+        }
+
+        // 5. 组装 RecordVoList 和 DetailVoList
+        List<RollOnDutyRecordVo> recordVoList = storageBillList.stream()
+                .map(storageBill -> {
+                    RollOnDutyRecordVo vo = new RollOnDutyRecordVo();
+                    BeanUtils.copyProperties(storageBill, vo);
+                    vo.setStorageBillId(storageBill.getId());
+                    return vo;
+                }).collect(Collectors.toList());
+
+        List<RollOnDutyDetailVo> detailVoList = rollClubTwoDetailsList.stream()
+                .map(details -> {
+                    RollOnDutyDetailVo detailVo = new RollOnDutyDetailVo();
+                    BeanUtils.copyProperties(details, detailVo);
+                    return detailVo;
+                }).collect(Collectors.toList());
+
+        // 6. 查询 Info 数据
+        LambdaQueryWrapper<RollClubTwoDetails> infoQueryWrapper = new LambdaQueryWrapper<>();
+        infoQueryWrapper.eq(RollClubTwoDetails::getCcmNo, ccmNo)
+                .eq(RollClubTwoDetails::getShift, shift)
+                .eq(RollClubTwoDetails::getShiftGroup, shiftGroup)
+                .between(RollClubTwoDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
+
+        List<RollOnDutyInfoVo> infoVoList = baseMapper.selectList(infoQueryWrapper).stream()
+                .map(details -> {
+                    RollOnDutyInfoVo infoVo = new RollOnDutyInfoVo();
+                    BeanUtils.copyProperties(details, infoVo);
+                    return infoVo;
+                }).collect(Collectors.toList());
+
+        // 7. 计算历史数据统计
+        LambdaQueryWrapper<RollClubTwoDetails> historyQueryWrapper = new LambdaQueryWrapper<>();
+        historyQueryWrapper.eq(RollClubTwoDetails::getCcmNo, ccmNo);
+
+        List<RollClubTwoDetails> rollClubTwoHistoryDetailsList = baseMapper.selectList(historyQueryWrapper);
+        List<RollHistoryDetailVo> historyDetailList = rollClubTwoHistoryDetailsList.stream()
+                .collect(Collectors.groupingBy(RollClubTwoDetails::getSize))
+                .entrySet().stream()
+                .map(entry -> {
+                    String size = entry.getKey();
+                    List<RollClubTwoDetails> detailsList = entry.getValue();
+
+                    int totalCount = detailsList.stream()
+                            .mapToInt(detail -> (detail.getStackAddr() == null || detail.getStackAddr().isEmpty()) ? 1 : 4)
+                            .sum();
+
+                    BigDecimal totalBlankOutput = detailsList.stream()
+                            .map(detail -> BigDecimal.valueOf(detail.getBlankOutput()))
+                            .reduce(BigDecimal.ZERO, BigDecimal::add)
+                            .setScale(4, BigDecimal.ROUND_HALF_UP);
+
+                    RollHistoryDetailVo rollHistoryDetailVo = new RollHistoryDetailVo();
+                    rollHistoryDetailVo.setSize(size);
+                    rollHistoryDetailVo.setAmountTotal(totalCount);
+                    rollHistoryDetailVo.setBlankOutput(totalBlankOutput);
+                    return rollHistoryDetailVo;
+                }).collect(Collectors.toList());
+
+        // 8. 组装最终对象
+        rollOnDutyVo.setRollOnDutyRecordList(recordVoList);
+        rollOnDutyVo.setRollOnDutyDetailList(detailVoList);
+        rollOnDutyVo.setRollOnDutyInfoList(infoVoList);
+        rollOnDutyVo.setRollHistoryDetailList(historyDetailList);
+
+        return rollOnDutyVo;
+    }
+
+
+
+    /**
+     * 从Redis中获取班组班别
+     *
+     * @param ccmNo
+     * @param keyFormat
+     * @return
+     */
+    private String getShiftInfo(String ccmNo, String keyFormat) {
+        String key = String.format(keyFormat, ccmNo);
+        return oConvertUtils.getString(redisTemplate.opsForValue().get(key));
+    }
 }

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

@@ -186,7 +186,7 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         LambdaQueryWrapper<BilletAutoTmp> tmpQueryWrapper = new LambdaQueryWrapper<>();
         List<BilletAutoTmp> billetAutoTmpArrayList = billetAutoTmpService.list(tmpQueryWrapper);
 
-        // 5. **一次性查询所有 `BilletBasicInfo`,避免循环查询**
+        // 一次性查询所有 `BilletBasicInfo`,避免循环查询
         Set<String> allBilletNos = billetAutoTmpArrayList.stream()
                 .map(BilletAutoTmp::getBilletNo)
                 .filter(Objects::nonNull)
@@ -207,7 +207,7 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
                     ));
         }
 
-        // 3. 按 StorageBillId 分组 `BilletAutoTmp`
+        // 按 StorageBillId 分组 `BilletAutoTmp`
         Map<String, List<BilletAutoTmp>> billetTmpMap = billetAutoTmpArrayList.stream()
                 .collect(Collectors.groupingBy(BilletAutoTmp::getStorageBillId));
 
@@ -234,22 +234,15 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
                     rollClubTwoDetailsList.add(rollClubTwoDetails);
                 });
 
-                // 6. **遍历 StorageBill 追加 assemblyNumber**
+                // 遍历 RollClubTwoDetails 并设置 assemblyNumber
                 for (RollClubTwoDetails rollClubTwoDetails : rollClubTwoDetailsList) {
-                    List<BilletAutoTmp> relatedBillets = billetTmpMap.get(rollClubTwoDetails.getStorageBillId());
-
-                    if (CollectionUtils.isNotEmpty(relatedBillets)) {
-                        // 获取所有 `assemblyNumber` 并去重拼接
-                        String assemblyNumbers = relatedBillets.stream()
-                                .map(BilletAutoTmp::getBilletNo)
-                                .map(billetToAssemblyMap::get)
-                                .filter(Objects::nonNull)
-                                .distinct()
-                                .collect(Collectors.joining(","));
-
-                        if (StringUtils.isNotBlank(assemblyNumbers)) {
-                            rollClubTwoDetails.setAssemblyNumber(StringUtils.isNotBlank(rollClubTwoDetails.getAssemblyNumber()) ?
-                                    rollClubTwoDetails.getAssemblyNumber() + "," + assemblyNumbers : assemblyNumbers);
+                    String billetNo = rollClubTwoDetails.getBilletNo();
+                    if (StringUtils.isNotBlank(billetNo)) {
+                        String assemblyNumber = billetToAssemblyMap.get(billetNo);
+                        if (StringUtils.isNotBlank(assemblyNumber)) {
+                            rollClubTwoDetails.setAssemblyNumber(StringUtils.isNotBlank(rollClubTwoDetails.getAssemblyNumber())
+                                    ? rollClubTwoDetails.getAssemblyNumber() + "," + assemblyNumber
+                                    : assemblyNumber);
                         }
                     }
                 }
@@ -3340,6 +3333,13 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         billQueryWrapper.between(StorageBill::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
 
         List<StorageBill> storageBillList = baseMapper.selectList(billQueryWrapper);
+
+        // 提取 id 集合
+        List<String> idList = storageBillList.stream()
+                .map(StorageBill::getId)
+                .filter(Objects::nonNull) // 过滤掉 null 值,避免 NPE
+                .collect(Collectors.toList());
+
         if (oConvertUtils.listIsEmpty(storageBillList)){
             log.info("{}{}", "查询当班装运单信息为空!", ccmNo);
             return onDutyStorageBillStatistics;
@@ -3349,6 +3349,8 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         List<DestinationStatisticsDetails> statisticsDetailsList2 = new ArrayList<>();
         List<DestinationStatisticsDetails> statisticsDetailsList3 = new ArrayList<>();
 
+
+
         for (StorageBill storageBill : storageBillList) {
             if ("棒二".equals(storageBill.getDestination())) {
                 LambdaQueryWrapper<RollClubTwoDetails> queryWrapper3 = new LambdaQueryWrapper<>();
@@ -3502,11 +3504,7 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         LambdaQueryWrapper<RollClubOneDetails> queryWrapper1 = new LambdaQueryWrapper<>();
         // 添加通用的查询条件
         queryWrapper1.eq(RollClubOneDetails::getCcmNo, ccmNo)
-                .eq(RollClubOneDetails::getShift, shift)
-                .eq(RollClubOneDetails::getShiftGroup, shiftGroup);
-
-
-        queryWrapper1.between(RollClubOneDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
+                .in(RollClubOneDetails::getStorageBillId, idList);
 
         List<RollClubOneDetails> rollClubOneDetailsList = rollClubOneDetailsService.list(queryWrapper1);
         if (oConvertUtils.listIsNotEmpty(rollClubOneDetailsList)){
@@ -3524,11 +3522,7 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         // 根据铸机号、班组、班别、时间范围。查询棒二明细表
         LambdaQueryWrapper<RollClubTwoDetails> queryWrapper2 = new LambdaQueryWrapper<>();
         queryWrapper2.eq(RollClubTwoDetails::getCcmNo, ccmNo)
-                .eq(RollClubTwoDetails::getShift, shift)
-                .eq(RollClubTwoDetails::getShiftGroup, shiftGroup);
-
-        queryWrapper2.between(RollClubTwoDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
-
+                .in(RollClubTwoDetails::getStorageBillId, idList);
 
         List<RollClubTwoDetails> rollClubTwoDetailsList = rollClubTwoDetailsService.list(queryWrapper2);
         if (oConvertUtils.listIsNotEmpty(rollClubTwoDetailsList)){
@@ -3549,9 +3543,7 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         // 根据铸机号、班组、班别、时间范围。查询棒三明细表
         LambdaQueryWrapper<RollClubThreeDetails> queryWrapper3 = new LambdaQueryWrapper<>();
         queryWrapper3.eq(RollClubThreeDetails::getCcmNo, ccmNo)
-                .eq(RollClubThreeDetails::getShift, shift)
-                .eq(RollClubThreeDetails::getShiftGroup, shiftGroup);
-        queryWrapper3.between(RollClubThreeDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
+                .in(RollClubThreeDetails::getStorageBillId, idList);
 
         List<RollClubThreeDetails> rollClubThreeDetailsList = rollClubThreeDetailsService.list(queryWrapper3);
         if (oConvertUtils.listIsNotEmpty(rollClubThreeDetailsList)){
@@ -3572,10 +3564,7 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         // 根据铸机号、班组、班别、时间范围。查询高线明细表
         LambdaQueryWrapper<RollHeightDetails> queryWrapper4 = new LambdaQueryWrapper<>();
         queryWrapper4.eq(RollHeightDetails::getCcmNo, ccmNo)
-                .eq(RollHeightDetails::getShift, shift)
-                .eq(RollHeightDetails::getShiftGroup, shiftGroup);
-
-        queryWrapper4.between(RollHeightDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
+                .in(RollHeightDetails::getStorageBillId, idList);
 
         List<RollHeightDetails> rollHeightDetailsList = rollHeightDetailsService.list(queryWrapper4);
         if (oConvertUtils.listIsNotEmpty(rollClubTwoDetailsList)){
@@ -3599,10 +3588,7 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         // 根据铸机号、班组、班别、时间范围。查询上若明细表
         LambdaQueryWrapper<RollOutShippDetails> queryWrapper5 = new LambdaQueryWrapper<>();
         queryWrapper5.eq(RollOutShippDetails::getCcmNo, ccmNo)
-                .eq(RollOutShippDetails::getShift, shift)
-                .eq(RollOutShippDetails::getShiftGroup, shiftGroup);
-
-        queryWrapper5.between(RollOutShippDetails::getCreateTime, billetHotsendChangeShift.getCreateTime(), new Date());
+                .in(RollOutShippDetails::getStorageBillId, idList);
 
         List<RollOutShippDetails> rollOutShippDetailsList = rollOutShippDetailsService.list(queryWrapper5);
         if (oConvertUtils.listIsNotEmpty(rollOutShippDetailsList)){
@@ -3888,11 +3874,11 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
                         .count()
         );
 
-        onDutyColdChargeVo.setRollClubTwoNum(rollClubTwoList.size());
+        onDutyColdChargeVo.setRollClubTwoNum(rollClubTwoList.size()* 4);
         onDutyColdChargeVo.setRollClubTwoTrainNum(storageBillCount1);
-        onDutyColdChargeVo.setRollClubThreeNum(rollClubThreeList.size());
+        onDutyColdChargeVo.setRollClubThreeNum(rollClubThreeList.size()* 4);
         onDutyColdChargeVo.setRollClubThreeTrainNum(storageBillCount2);
-        onDutyColdChargeVo.setRollOutShippNum(rollOutShippList.size());
+        onDutyColdChargeVo.setRollOutShippNum(rollOutShippList.size()* 4);
         onDutyColdChargeVo.setRollOutShippTrainNum(storageBillCount3);
 
         return onDutyColdChargeVo;

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

@@ -0,0 +1,20 @@
+package org.jeecg.modules.billet.storageBill.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class RollHistoryDetailVo {
+
+    @ApiModelProperty(value = "总支数")
+    private Integer amountTotal;
+
+    @ApiModelProperty(value = "定尺")
+    private String size;
+
+    @ApiModelProperty(value = "出坯量")
+    private BigDecimal blankOutput;
+
+}

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

@@ -0,0 +1,17 @@
+package org.jeecg.modules.billet.storageBill.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class RollOnDutyDataVo {
+
+    private List<RollOnDutyInfoVo> rollOnDutyInfoList;
+
+    private List<RollOnDutyRecordVo> rollOnDutyRecordList;
+
+    private List<RollOnDutyDetailVo> rollOnDutyDetailList;
+
+    private List<RollHistoryDetailVo> rollHistoryDetailList;
+}

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

@@ -0,0 +1,30 @@
+package org.jeecg.modules.billet.storageBill.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class RollOnDutyDetailVo {
+
+
+    @ApiModelProperty(value = "装运单id")
+    private String storageBillId;
+
+    @ApiModelProperty(value = "定尺")
+    private String size;
+
+    @ApiModelProperty(value = "出坯量")
+    private Double blankOutput;
+
+    @ApiModelProperty(value = "垛位")
+    private String stackAddr;
+
+    @ApiModelProperty(value = "坯号")
+    private String billetNo;
+
+    @ApiModelProperty(value = "班组")
+    private String shiftGroup;
+
+    @ApiModelProperty(value = "班别")
+    private String shift;
+}

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

@@ -0,0 +1,29 @@
+package org.jeecg.modules.billet.storageBill.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class RollOnDutyInfoVo {
+
+    @ApiModelProperty(value = "装运单id")
+    private String storageBillId;
+
+    @ApiModelProperty(value = "定尺")
+    private String size;
+
+    @ApiModelProperty(value = "出坯量")
+    private Double blankOutput;
+
+    @ApiModelProperty(value = "垛位")
+    private String stackAddr;
+
+    @ApiModelProperty(value = "坯号")
+    private String billetNo;
+
+    @ApiModelProperty(value = "班组")
+    private String shiftGroup;
+
+    @ApiModelProperty(value = "班别")
+    private String shift;
+}

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

@@ -0,0 +1,28 @@
+package org.jeecg.modules.billet.storageBill.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class RollOnDutyRecordVo {
+
+    @ApiModelProperty(value = "车牌号")
+    private String licensePlate;
+
+    @ApiModelProperty(value = "装运单id")
+    private String storageBillId;
+
+    @ApiModelProperty(value = "总支数")
+    private Integer amountTotal;
+
+    @ApiModelProperty(value = "定尺")
+    private String size;
+
+    @ApiModelProperty(value = "班组")
+    private String shiftGroup;
+
+    @ApiModelProperty(value = "班别")
+    private String shift;
+
+
+}