gaoluyang
9 天以前 8e4eee5ad4d74e1a4e6ab4de3a9c28000700dce0
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultServiceImpl.java
@@ -1,19 +1,23 @@
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;
import org.springframework.validation.annotation.Validated;
import java.math.BigDecimal;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_STOCK_TAKING_TASK_LINE_ALREADY_TAKEN;
@@ -22,7 +26,7 @@
/**
 * MES 盘点结果 Service 实现类
 *
 * @author 芋道源码
 * @author 超级管理员
 */
@Service
@Validated
@@ -35,6 +39,8 @@
    private MesWmStockTakingTaskLineService stockTakingTaskLineService;
    @Resource
    private MesWmStockTakingTaskService stockTakingTaskService;
    @Resource
    private MesWmWarehouseDefaultService warehouseDefaultService;
    @Override
    public PageResult<MesWmStockTakingTaskResultDO> getStockTakingTaskResultPage(
@@ -56,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
@@ -126,6 +156,11 @@
        stockTakingTaskResultMapper.deleteByTaskId(taskId);
    }
    @Override
    public List<MesWmStockTakingTaskResultDO> getStockTakingTaskResultListByTaskId(Long taskId) {
        return stockTakingTaskResultMapper.selectListByTaskId(taskId);
    }
    /**
     * 校验盘点结果是否存在
     *