yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultServiceImpl.java
@@ -1,13 +1,16 @@
package cn.iocoder.yudao.module.mes.service.wm.stocktaking.task;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.result.MesWmStockTakingTaskResultSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskLineDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskResultDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task.MesWmStockTakingTaskResultMapper;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseDefaultService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -36,6 +39,8 @@
    private MesWmStockTakingTaskLineService stockTakingTaskLineService;
    @Resource
    private MesWmStockTakingTaskService stockTakingTaskService;
    @Resource
    private MesWmWarehouseDefaultService warehouseDefaultService;
    @Override
    public PageResult<MesWmStockTakingTaskResultDO> getStockTakingTaskResultPage(
@@ -57,19 +62,43 @@
        // 2. 确定 lineId 和账面数量
        Long lineId = createReqVO.getLineId();
        MesWmStockTakingTaskLineDO existingLine = null;
        if (lineId != null) {
            // 2.1 如果传递了 lineId,从 line 中获取 quantity,并补齐仓库/库区/库位/批次
            existingLine = stockTakingTaskLineService.validateStockTakingTaskLineExists(lineId);
            if (createReqVO.getWarehouseId() == null) {
                createReqVO.setWarehouseId(existingLine.getWarehouseId());
            }
            if (createReqVO.getLocationId() == null) {
                createReqVO.setLocationId(existingLine.getLocationId());
            }
            if (createReqVO.getAreaId() == null) {
                createReqVO.setAreaId(existingLine.getAreaId());
            }
            if (createReqVO.getBatchId() == null) {
                createReqVO.setBatchId(existingLine.getBatchId());
            }
            if (StrUtil.isEmpty(createReqVO.getBatchCode())) {
                createReqVO.setBatchCode(existingLine.getBatchCode());
            }
        }
        // 2.2 未指定库区/库位时,落到仓库默认库区/库位(客户未启用库区/库位管理)
        if (createReqVO.getWarehouseId() != null
                && (createReqVO.getLocationId() == null || createReqVO.getAreaId() == null)) {
            MesWmWarehouseAreaDO defaultArea =
                    warehouseDefaultService.getOrCreateDefaultArea(createReqVO.getWarehouseId());
            createReqVO.setLocationId(defaultArea.getLocationId());
            createReqVO.setAreaId(defaultArea.getId());
        }
        if (lineId == null) {
            // 2.1 基于 taskId + itemId + areaId 查询已存在的 line
            // 2.3 基于 taskId + itemId + areaId 查询已存在的 line
            existingLine = stockTakingTaskLineService.getStockTakingTaskLine(
                    createReqVO.getTaskId(), createReqVO.getItemId(), createReqVO.getAreaId());
            if (existingLine != null) {
                lineId = existingLine.getId();
            } else {
                // 2.2 创建新的 line(注意:当盘点结果没有对应的盘点清单行时,会自动创建一个新的盘点任务行)
                // 2.4 创建新的 line(注意:当盘点结果没有对应的盘点清单行时,会自动创建一个新的盘点任务行)
                lineId = stockTakingTaskLineService.createStockTakingTaskLine(createReqVO);
            }
        } else {
            // 2.3 如果传递了 lineId,从 line 中获取 quantity
            existingLine = stockTakingTaskLineService.validateStockTakingTaskLineExists(lineId);
        }
        if (existingLine != null
                && existingLine.getTakingQuantity() != null