gaoluyang
10 小时以前 cea8396d93b31fe6037a0558febcabb2169363a8
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueServiceImpl.java
@@ -90,13 +90,16 @@
        // 1. 校验关联数据
        validateProductIssueSaveData(createReqVO);
        // 2. 从 task 自动带入 workOrderId 和 workstationId
        MesProTaskDO task = taskService.validateTaskExists(createReqVO.getTaskId());
        if (createReqVO.getWorkOrderId() == null) {
            createReqVO.setWorkOrderId(task.getWorkOrderId());
        }
        if (createReqVO.getWorkstationId() == null) {
            createReqVO.setWorkstationId(task.getWorkstationId());
        // 2. 从 task 自动带入 workOrderId 和 workstationId;
        //    生产任务改为可选:手填单据不传 taskId,工单与工作站由人工填写,不自动带入
        if (createReqVO.getTaskId() != null) {
            MesProTaskDO task = taskService.validateTaskExists(createReqVO.getTaskId());
            if (createReqVO.getWorkOrderId() == null) {
                createReqVO.setWorkOrderId(task.getWorkOrderId());
            }
            if (createReqVO.getWorkstationId() == null) {
                createReqVO.setWorkstationId(task.getWorkstationId());
            }
        }
        // 3. 插入主表
@@ -114,13 +117,16 @@
        // 1.2 校验关联数据
        validateProductIssueSaveData(updateReqVO);
        // 2. 从 task 自动带入 workOrderId 和 workstationId
        MesProTaskDO task = taskService.validateTaskExists(updateReqVO.getTaskId());
        if (updateReqVO.getWorkOrderId() == null) {
            updateReqVO.setWorkOrderId(task.getWorkOrderId());
        }
        if (updateReqVO.getWorkstationId() == null) {
            updateReqVO.setWorkstationId(task.getWorkstationId());
        // 2. 从 task 自动带入 workOrderId 和 workstationId;
        //    生产任务改为可选:手填单据不传 taskId,工单与工作站由人工填写,不自动带入
        if (updateReqVO.getTaskId() != null) {
            MesProTaskDO task = taskService.validateTaskExists(updateReqVO.getTaskId());
            if (updateReqVO.getWorkOrderId() == null) {
                updateReqVO.setWorkOrderId(task.getWorkOrderId());
            }
            if (updateReqVO.getWorkstationId() == null) {
                updateReqVO.setWorkstationId(task.getWorkstationId());
            }
        }
        // 3. 更新主表
@@ -248,7 +254,7 @@
            Long outTransactionId = wmTransactionService.createTransaction(new MesWmTransactionSaveReqDTO()
                    .setType(MesWmTransactionTypeEnum.OUT.getType()).setItemId(detail.getItemId())
                    .setQuantity(detail.getQuantity().negate()) // 库存减少
                    .setBatchId(detail.getBatchId()).setBatchCode(detail.getBatchCode())
                    .setBatchId(detail.getBatchId()).setBatchCode(detail.getBatchCode()).setMaterialStockId(detail.getMaterialStockId())
                    .setWarehouseId(detail.getWarehouseId()).setLocationId(detail.getLocationId()).setAreaId(detail.getAreaId())
                    .setBizType(MesBizTypeConstants.WM_ISSUE).setBizId(issue.getId())
                    .setBizCode(issue.getCode()).setBizLineId(detail.getLineId()));
@@ -398,16 +404,26 @@
     */
    private void validateProductIssueSaveData(MesWmProductIssueSaveReqVO reqVO) {
        validateCodeUnique(reqVO.getId(), reqVO.getCode());
        // 校验 task 存在
        MesProTaskDO task = taskService.validateTaskExists(reqVO.getTaskId());
        // 校验 task 关联的工单已确认
        Long workOrderId = reqVO.getWorkOrderId() != null ? reqVO.getWorkOrderId() : task.getWorkOrderId();
        if (workOrderId != null) {
            workOrderService.validateWorkOrderConfirmed(workOrderId);
        // 生产任务改为可选:传了才校验任务存在,并按任务带出的工单校验已确认
        if (reqVO.getTaskId() != null) {
            MesProTaskDO task = taskService.validateTaskExists(reqVO.getTaskId());
            // 校验 task 关联的工单已确认
            Long workOrderId = reqVO.getWorkOrderId() != null ? reqVO.getWorkOrderId() : task.getWorkOrderId();
            if (workOrderId != null) {
                workOrderService.validateWorkOrderConfirmed(workOrderId);
            }
        } else if (reqVO.getWorkOrderId() != null) {
            // 没传 taskId 但传了 workOrderId,仍校验工单已确认
            workOrderService.validateWorkOrderConfirmed(reqVO.getWorkOrderId());
        }
        if (reqVO.getWorkstationId() != null) {
            workstationService.validateWorkstationExistsAndEnable(reqVO.getWorkstationId());
        }
    }
    @Override
    public List<MesWmProductIssueDO> getFinishedIssuesByWorkOrderId(Long workOrderId) {
        return issueMapper.selectListByWorkOrderIdAndStatus(workOrderId, MesWmProductIssueStatusEnum.FINISHED.getStatus());
    }
}