11
schangxiang@126.com
2025-05-19 a593dfae54de741b8ca84d375357c5ca130faccb
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
using System.Collections;
using Autofac;
using CMS.Data.Stressing;
using CMS.DataPersistence;
using CMS.DataPersistence.Data;
using CMS.Extensions.Abp.Autofac.Extensions.DependencyInjection;
using CMS.Plugin.MesSuite.Abstractions;
using CMS.Plugin.MesSuite.Abstractions.Consts;
using CMS.Plugin.PipeLineLems.Abstractions;
using CMS.Plugin.PipeLineLems.Apis;
using CMS.Plugin.PipeLineLems.Domain;
using CMS.Plugin.PipeLineLems.ProjectService;
using CMS.Plugin.PipeLineLems.Workers;
using CMS.Plugin.PipeLineLems.Apis;
using CMS.Project.Abstractions;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Structing.AspNetCore;
using Structing.Core;
using Structing.Web;
using SYC.Plugin;
using Volo.Abp.BackgroundWorkers;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Modularity.PlugIns;
using CMS.Plugin.PipeLineLems.Application.Contracts.Services;
using CMS.Plugin.PipeLineLems.Application.Implements;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Application.Implements;
using CMS.Plugin.HIAWms.Domain.WmsTask;
using CMS.Plugin.HIAWms.EntityFrameworkCore.Repositories;
using CMS.Plugin.HIAWms.Domain.WmsMaterials;
using CMS.Plugin.HIAWms.Abstractions;
 
namespace CMS.Plugin.PipeLineLems;
 
/// <summary>
/// CMS插件入口,使用<see cref="EnableApplicationPartAttribute"/>将导入Controller.
/// </summary>
[EnableApplicationPart]
public class CMSPluginEntry : PluginEntry
{
    private readonly IServiceCollection _service = new ServiceCollection();
 
    /// <inheritdoc />
    public override void Register(IRegisteContext context)
    {
        var configuration = context.Features.GetConfiguration();
 
        // 配置外部HttpApi: https://webapiclient.github.io/
        context.Services
            .AddHttpApi<IPipeLineLemsExternalApi>()
            .ConfigureHttpApi(configuration.GetSection(nameof(IPipeLineLemsExternalApi)));
 
        context.Services.TryAddPipeLineLems();
 
        context.Services.AddScoped<IProjectRuntimeMigrator, CMSPluginRuntimeMigrator>();
        context.Services.AddSingleton<IProjectService, PipeLineLemsProjectService>();
        context.Services.AddScoped<IMesAppService, MesAppService>();
        context.Services.AddScoped<IWorkPlanAppService, WorkPlanAppService>();
        //context.Services.AddScoped<ILMesOperateAppService, LMesOperateAppService>();
        //context.Services.AddScoped<IWmsTaskRepository, EfCoreWmsTaskRepository>();
        //context.Services.AddScoped<IWmsMaterialRepository, EfCoreWmsMaterialRepository>();
        //context.Services.AddScoped<IWmsInOutStockOrderAppService, WmsInOutStockOrderAppService>();
        //context.Services.AddScoped<IWmsOutStockAppService, WmsOutStockAppService>();
 
 
 
        context.Services.AddScoped<IEFDataProvider>(p =>
        {
            var cfg = p.GetRequiredService<IDataRuntimeConfig>();
            return new DefaultEFDataProvider(CMSPluginMesSuiteOptions.DataProviderName, CMSPluginMesSuiteOptions.GetDatabaseSuffix(CMSPluginDbProperties.MigrationsHistoryTable), CMSPluginDbProperties.MigrationsHistoryTable, cfg);
        });
 
        _service.AddObjectAccessor<IApplicationBuilder>();
        _service.AddApplication<CMSPluginModule>(options =>
        {
            var databaseType = configuration[SectionName.DatabaseType] ?? "mysql";
            if (KnowsDbCode.IsMysql(databaseType))
            {
                options.PlugInSources.Add(new TypePlugInSource(
                    typeof(MySQL.CMSPluginMySQLModule)
                ));
            }
            else if (KnowsDbCode.IsSqlServer(databaseType))
            {
                options.PlugInSources.Add(new TypePlugInSource(
                    typeof(SqlServer.CMSPluginSqlServerModule)
                ));
            }
            else if (KnowsDbCode.IsPostgreSql(databaseType))
            {
                options.PlugInSources.Add(new TypePlugInSource(
                    typeof(PostgreSql.CMSPluginPostgreSqlModule)
                ));
            }
        });
 
        base.Register(context);
    }
 
    /// <inheritdoc />
    public override void ConfigureContainer(ContainerBuilder builder)
    {
        builder.Populate(_service);
 
        base.ConfigureContainer(builder);
    }
 
    /// <inheritdoc />
    public override async Task ReadyAsync(IReadyContext context)
    {
        context.Provider.GetRequiredService<ObjectAccessor<IApplicationBuilder>>().Value = context.Features.GetApplicationBuilder();
        var app = context.Features.GetApplicationBuilder();
        await app.InitializeApplicationAsync();
 
        await base.ReadyAsync(context);
    }
 
    /// <inheritdoc />
    public override async Task AfterReadyAsync(IReadyContext context)
    {
        await context.GetRequiredService<IBackgroundWorkerManager>().AddAsync(context.GetRequiredService<PipeLineLemsWorker>());
 
        await base.AfterReadyAsync(context);
    }
}