OpenAuth.Net/OpenAuth.Mvc/Models/WorkflowInit.cs

111 lines
4.0 KiB
C#
Raw Normal View History

using System;
using System.Configuration;
using System.Xml.Linq;
using OpenAuth.App;
2016-09-07 11:11:34 +08:00
using OpenAuth.Domain;
using OptimaJet.Workflow.Core.Builder;
using OptimaJet.Workflow.Core.Bus;
using OptimaJet.Workflow.Core.Persistence;
using OptimaJet.Workflow.Core.Runtime;
using OptimaJet.Workflow.DbPersistence;
namespace OpenAuth.Mvc.Models
{
public static class WorkflowInit
{
private static volatile WorkflowRuntime _runtime;
private static readonly object _sync = new object();
public static WorkflowRuntime Runtime
{
get
{
if (_runtime == null)
{
lock (_sync)
{
if (_runtime == null)
{
var connectionString = ConfigurationManager.ConnectionStrings["WorkFlow"].ConnectionString;
var builder = new WorkflowBuilder<XElement>(
2016-09-07 11:11:34 +08:00
new MSSQLProvider(connectionString),
new OptimaJet.Workflow.Core.Parser.XmlWorkflowParser(),
new MSSQLProvider(connectionString)
2016-09-28 17:21:59 +08:00
);
builder.SetCache(new DefaultParcedProcessCache());
_runtime = new WorkflowRuntime(new Guid("{8D38DB8F-F3D5-4F26-A989-4FDD40F32D9D}"))
.WithBuilder(builder)
2016-09-05 20:07:10 +08:00
.WithRuleProvider(new WorkflowRuleProvider())
2016-09-07 11:11:34 +08:00
.WithActionProvider(new WorkflowActionProvider())
.WithPersistenceProvider(new MSSQLProvider(connectionString))
.WithTimerManager(new TimerManager())
.WithBus(new NullBus())
.SwitchAutoUpdateSchemeBeforeGetAvailableCommandsOn()
.Start();
_runtime.ProcessStatusChanged += _runtime_ProcessStatusChanged;
}
}
}
return _runtime;
}
}
private static void _runtime_ProcessStatusChanged(object sender, ProcessStatusChangedEventArgs e)
{
if (e.NewStatus != ProcessStatus.Idled && e.NewStatus != ProcessStatus.Finalized)
return;
if (string.IsNullOrEmpty(e.SchemeCode))
return;
2016-09-07 11:11:34 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ת<CCAC><D7AA><EFBFBD><EFBFBD>¼
WorkflowActionProvider.DeleteEmptyPreHistory(e.ProcessId);
_runtime.PreExecuteFromCurrentActivity(e.ProcessId);
//<2F><><EFBFBD><EFBFBD>֪ͨ<CDA8>б<EFBFBD>
UpdateInbox(e);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
2016-09-07 11:11:34 +08:00
UpdateApplyState(e);
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
/// </summary>
private static void UpdateApplyState(ProcessStatusChangedEventArgs e)
{
var nextState = WorkflowInit.Runtime.GetLocalizedStateName(e.ProcessId, e.ProcessInstance.CurrentState);
2016-09-07 16:58:08 +08:00
var _app = AutofacExt.GetFromFac<CommonApplyApp>();
2016-09-05 20:07:10 +08:00
_app.ChangeState(e.ProcessId, e.ProcessInstance.CurrentState, nextState);
2016-09-07 11:11:34 +08:00
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>֪ͨ<CDA8>б<EFBFBD>
/// </summary>
private static void UpdateInbox(ProcessStatusChangedEventArgs e)
{
var inboxApp = AutofacExt.GetFromFac<WorkflowInboxApp>();
inboxApp.DeleteAllByProcess(e.ProcessId);
if (e.NewStatus != ProcessStatus.Finalized)
{
var newActors = Runtime.GetAllActorsForDirectCommandTransitions(e.ProcessId);
foreach (var newActor in newActors)
{
2016-09-07 16:58:08 +08:00
var newInboxItem = new Relevance()
2016-09-07 11:11:34 +08:00
{
Id = Guid.NewGuid(),
2016-09-07 16:58:08 +08:00
SecondId = new Guid(newActor),
FirstId = e.ProcessId,
Key = "ProcessUser"
2016-09-07 11:11:34 +08:00
};
inboxApp.Add(newInboxItem);
}
}
}
}
}