222
schangxiang@126.com
2025-05-16 1ad40156ec25db1b9d90c3f94819434e20d52b00
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRepository.cs
@@ -40,15 +40,6 @@
            .FirstOrDefaultAsync(t => t.DataIdentifier == name, GetCancellationToken(cancellationToken)); 
    }
    public virtual async Task<CallMaterialOrder> FindByWmsTaskNoAsync(string wmsTaskNo, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails()
            .Where(x => !x.IsDeleted)
            .OrderByDescending(x => x.CreationTime)
            .FirstOrDefaultAsync(t => t.WmsTaskNo == wmsTaskNo, GetCancellationToken(cancellationToken));
    }
    /// <summary> 
    /// 验证名称是否存在叫料单表 
    /// </summary> 
@@ -122,6 +113,59 @@
    }
    /// <summary> 
    /// 物理删除叫料单表
    /// </summary>
    /// <param name="id">主键ID</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default)
    {
        var entity = await (await GetDbSetAsync())
            .FirstOrDefaultAsync(x => x.Id == id && !x.IsDeleted, GetCancellationToken(cancellationToken));
        if (entity == null)
        {
            throw new Volo.Abp.Domain.Entities.EntityNotFoundException(typeof(CallMaterialOrder), id);
        }
        // 2. 获取 DbContext 并执行删除
        var dbContext = await GetDbContextAsync();
        // 直接执行 SQL 删除
        var sql = $"DELETE FROM scms_callmaterialorders WHERE Id ='{entity.Id.ToString()}'";
        await dbContext.Database.ExecuteSqlRawAsync(sql, cancellationToken);
    }
    /// <summary>
    /// 批量物理删除叫料单表(直接删除,不软删除)
    /// </summary>
    /// <param name="ids">要删除的主键ID列表</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default)
    {
        // 1. 查询符合条件的实体(未软删除的记录)
        var entities = await (await GetDbSetAsync())
            .Where(x => ids.Contains(x.Id) && !x.IsDeleted)
            .ToListAsync(GetCancellationToken(cancellationToken));
        if (!entities.Any())
        {
            // 如果没有需要删除的记录,直接返回(避免不必要的数据库操作)
            return;
        }
        // 2. 获取 DbContext 并执行批量删除
        var dbContext = await GetDbContextAsync();
        var idsToDelete = entities.Select(e => e.Id).ToList();
        // 直接执行 SQL 删除
        var sql = $"DELETE FROM scms_callmaterialorders WHERE Id IN ({string.Join(",", idsToDelete.Select(id => $"'{id}'"))})";
        await dbContext.Database.ExecuteSqlRawAsync(sql, cancellationToken);
    }
    /// <summary>
    /// 根据条件获取叫料单表列表 
    /// </summary> 
    /// <param name="whereConditions"></param>