schangxiang@126.com
2025-05-13 25246d39da4b74b54a844b36d8a50752917b81cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
using CMS.Plugin.HIAWms.Domain.WmsInOutStockOrder; 
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions; 
using CmsQueryExtensions.Extension; 
using Microsoft.EntityFrameworkCore; 
using System.Linq.Dynamic.Core; 
using System.Linq.Expressions; 
using Volo.Abp.Domain.Repositories.EntityFrameworkCore; 
using Volo.Abp.EntityFrameworkCore; 
 
 
namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Repositories; 
 
/// <summary> 
/// 出入库单据仓储实现 
/// </summary> 
public class EfCoreWmsInOutStockOrderRepository : EfCoreRepository<ICMSPluginDbContext, WmsInOutStockOrder, Guid>, IWmsInOutStockOrderRepository 
    /// <summary> 
    /// Initializes a new instance of the <see cref="EfCoreWmsInOutStockOrderRepository"/> class. 
    /// </summary> 
    /// <param name="dbContextProvider">The database context provider.</param> 
    public EfCoreWmsInOutStockOrderRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider) 
        : base(dbContextProvider) 
    { 
    } 
 
    /// <summary> 
    /// 按照名称查找出入库单据 
    /// </summary> 
    /// <param name="name"></param> 
    /// <param name="cancellationToken"></param> 
    /// <returns></returns> 
    public virtual async Task<WmsInOutStockOrder> FindByNameAsync(string name, CancellationToken cancellationToken = default) 
    { 
        return await (await GetDbSetAsync()) 
            .IncludeDetails() 
            .Where(x => !x.IsDeleted) 
            .OrderByDescending(x=>x.CreationTime)  
            .FirstOrDefaultAsync(t => t.OrderNo == name, GetCancellationToken(cancellationToken)); 
    } 
 
    /// <summary> 
    /// 验证名称是否存在出入库单据 
    /// </summary> 
    /// <param name="name">校验值</param> 
    /// <param name="id"></param> 
    /// <returns></returns> 
    public async Task<bool> NameExistAsync(string name, Guid? id = null) 
    { 
        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.OrderNo == name); 
    } 
 
    /// <summary> 
    /// 获取最大排序出入库单据 
    /// </summary> 
    /// <returns></returns> 
    public async Task<int> GetMaxSortAsync() 
    { 
        var hasAny = await (await GetQueryableAsync()) 
            .Where(x => !x.IsDeleted).AnyAsync(); 
        if (!hasAny) 
        { 
            return 1; 
        } 
 
        var sort = await (await GetQueryableAsync()) 
            .Where(x => !x.IsDeleted).MaxAsync(x => x.Sort); 
        return sort + 1; 
    }
 
    /// <summary>
    /// 获取最大优先级值
    /// </summary>
    /// <returns></returns>
    public async Task<int> GetMaxPriorityAsync()
    {
        // 获取今天的日期(时间部分为00:00:00)
        var today = DateTime.Today;
 
        var queryable = await GetQueryableAsync();
        var query = queryable
            .Where(x => x.CreationTime > today)
            .Where(x => !x.IsDeleted);
 
        var hasAny = await query.AnyAsync();
        if (!hasAny)
        {
            return 1;
        }
 
        // 获取最大Sort值并加1
        var maxSort = await query.MaxAsync(x => x.Sort);
        return maxSort + 1;
    }
 
    /// <summary> 
    /// 获取分页列表出入库单据 
    /// </summary> 
    /// <param name="whereConditions"></param> 
    /// <param name="sorting"></param> 
    /// <param name="maxResultCount"></param> 
    /// <param name="skipCount"></param> 
    /// <param name="includeDetails"></param> 
    /// <param name="cancellationToken"></param> 
    /// <returns></returns> 
    public async Task<List<WmsInOutStockOrder>> GetListAsync(FunReturnResultModel<Expression<Func<WmsInOutStockOrder, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default) 
    { 
        return await (await GetDbSetAsync()) 
            .IncludeDetails(includeDetails) 
            .WhereIf(whereConditions != null, whereConditions.data) 
            .Where(x => !x.IsDeleted) 
            .OrderByDescending(x=>x.CreationTime) 
            .PageBy(skipCount, maxResultCount) 
            .ToListAsync(GetCancellationToken(cancellationToken)); 
    } 
 
    /// <summary> 
    /// 获取总数出入库单据 
    /// </summary> 
    /// <param name="whereConditions"></param> 
    /// <param name="cancellationToken"></param> 
    /// <returns></returns> 
    public async Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsInOutStockOrder, bool>>> whereConditions, CancellationToken cancellationToken = default) 
    { 
        return await (await GetQueryableAsync()) 
            .WhereIf(whereConditions != null, whereConditions.data) 
            .Where(x => !x.IsDeleted) 
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken)); 
    } 
 
 
    /// <inheritdoc /> 
    public override async Task<IQueryable<WmsInOutStockOrder>> WithDetailsAsync() 
    { 
        return (await GetQueryableAsync()) 
            .Where(x => !x.IsDeleted).IncludeDetails(); 
    }