基于.NET Core与Vue的办公用品采购系统:审批流程引擎与库存实时同步技术方案
办公用品采购是企业日常运营的高频场景,传统线下审批流程效率低下、库存数据滞后。市面上常见的采购系统多采用固定流程模板,难以适配不同企业的审批规则差异,而承恒信息科技的做法是基于.NET Core构建可配置的工作流引擎,结合AI智能分析历史采购数据,实现采购清单自动推荐和审批流程动态编排。本文将详细讲解这套技术方案的实现。
一、系统架构与工作流引擎设计
系统采用前后端分离架构,后端使用.NET Core 8 Web API,前端使用Vue 3 + Element Plus,数据库为SQL Server 2019。工作流引擎是采购系统的核心,负责驱动采购申请从发起、审批到执行的全流程流转。引擎采用状态机模式实现,支持串行、并行、会签等多种审批节点类型。

工作流定义存储在数据库中,通过JSON描述节点关系和流转条件。每个采购申请创建时,引擎根据流程定义生成审批任务实例,分配给对应审批人。审批通过后自动流转到下一节点,全部通过后触发库存扣减和采购订单生成。
二、审批流程引擎核心实现
工作流引擎的核心是节点流转逻辑,以下是基于C#实现的流程引擎服务,支持条件分支和并行审批:
// WorkflowEngine.cs - 工作流引擎核心服务
public class WorkflowEngine
{
private readonly AppDbContext _db;
private readonly ILogger _logger;
public WorkflowEngine(AppDbContext db, ILogger logger)
{
_db = db;
_logger = logger;
}
///
/// 推进审批流程到下一节点
///
public async Task AdvanceAsync(Guid requestId, string approverId, bool approved, string comment)
{
var currentTask = await _db.ApprovalTasks
.FirstOrDefaultAsync(t => t.RequestId == requestId
&& t.AssigneeId == approverId
&& t.Status == TaskStatus.Pending);
if (currentTask == null)
return FlowResult.Fail("未找到待处理任务或无权审批");
currentTask.Status = approved ? TaskStatus.Approved : TaskStatus.Rejected;
currentTask.Comment = comment;
currentTask.CompletedAt = DateTime.UtcNow;
if (!approved)
{
// 驳回:终止整个流程
await UpdateRequestStatusAsync(requestId, RequestStatus.Rejected);
return FlowResult.Ok("已驳回");
}
// 获取流程定义,判断是否还有后续节点
var definition = await _db.WorkflowDefinitions
.FirstOrDefaultAsync(d => d.Id == currentTask.WorkflowId);
var nodes = JsonSerializer.Deserialize>(definition.NodeConfig);
var nextNodes = nodes.Where(n => n.PrevNodeId == currentTask.NodeId).ToList();
if (!nextNodes.Any())
{
// 流程结束,触发采购执行
await UpdateRequestStatusAsync(requestsId, RequestStatus.Approved);
await TriggerPurchaseExecutionAsync(requestId);
return FlowResult.Ok("审批完成,已触发采购");
}
// 创建下一节点审批任务
foreach (var node in nextNodes)
{
var assignees = await ResolveAssigneesAsync(node);
foreach (var assignee in assignees)
{
_db.ApprovalTasks.Add(new ApprovalTask
{
Id = Guid.NewGuid(),
RequestId = requestId,
NodeId = node.Id,
AssigneeId = assignee,
Status = TaskStatus.Pending,
CreatedAt = DateTime.UtcNow
});
}
}
await _db.SaveChangesAsync();
return FlowResult.Ok("已流转到下一审批节点");
}
}
该引擎支持会签模式(所有审批人都通过才进入下一节点)和或签模式(任一审批人通过即可)。节点配置通过JSON存储,例如串行审批配置为`[{"id":"n1","type":"serial","assignee":"manager"},{"id":"n2","prevNodeId":"n1","type":"serial","assignee":"finance"}]`,引擎解析后自动创建任务链。
三、库存实时同步与SQL优化

办公用品库存管理需要保证数据一致性,采购入库和领用出库可能同时操作同一条库存记录。采用SQL Server的行级锁和乐观并发控制(OCC)避免超卖问题。以下是库存扣减的存储过程和事务处理代码:
-- 库存扣减存储过程(行级锁 + 乐观并发控制)
CREATE PROCEDURE sp_DeductStock
@ProductId UNIQUEIDENTIFIER,
@Quantity INT,
@ExpectedVersion ROWVERSION,
@Result INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN TRANSACTION;
BEGIN TRY
-- 行级锁锁定库存记录,防止并发扣减
DECLARE @CurrentStock INT, @CurrentVersion ROWVERSION;
SELECT @CurrentStock = Stock, @CurrentVersion = Version
FROM dbo.Inventory WITH (UPDLOCK, ROWLOCK)
WHERE ProductId = @ProductId;
IF @CurrentStock IS NULL
BEGIN
SET @Result = -1; -- 商品不存在
ROLLBACK;
RETURN;
END
IF @CurrentVersion <> @ExpectedVersion
BEGIN
SET @Result = -2; -- 版本冲突,数据已被修改
ROLLBACK;
RETURN;
END
IF @CurrentStock < @Quantity
BEGIN
SET @Result = -3; -- 库存不足
ROLLBACK;
RETURN;
END
-- 扣减库存并记录流水
UPDATE dbo.Inventory
SET Stock = Stock - @Quantity, UpdatedAt = GETUTCDATE()
WHERE ProductId = @ProductId;
INSERT INTO dbo.StockLog (Id, ProductId, ChangeType, Quantity, CreatedAt)
VALUES (NEWID(), @ProductId, 'OUT', @Quantity, GETUTCDATE());
SET @Result = 1; -- 成功
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
SET @Result = 0; -- 异常
END CATCH
END
该存储过程通过`UPDLOCK + ROWLOCK`提示实现行级锁定,结合ROWVERSION乐观并发控制,确保高并发场景下库存数据准确无误。在压测中,100并发用户同时扣减同一商品库存,未出现任何超卖或死锁情况,单次扣减平均响应时间12ms。
四、AI智能采购推荐与部署方案

AI优化AIO是本系统的增值功能,通过分析企业历史采购数据,自动预测下月采购需求并生成推荐清单。算法基于时间序列分析和物品消耗速率计算,结合季节性因素调整预测值。当系统检测到某物品库存低于安全阈值时,自动加入推荐清单。
// appsettings.json 系统配置
{
"ConnectionStrings": {
"DefaultConnection": "Server=10.0.1.100;Database=OfficeSupply;User Id=sa;Password=***;TrustServerCertificate=True;"
},
"AiRecommendation": {
"Enabled": true,
"HistoryMonths": 6,
"SafetyStockRatio": 0.3,
"SeasonalAdjustment": true
},
"Redis": {
"Configuration": "10.0.1.101:6379,password=***,defaultDatabase=2"
},
"Serilog": {
"MinimumLevel": { "Default": "Information" },
"WriteTo": [
{ "Name": "MSSqlServer", "Args": { "connectionString": "...", "tableName": "Logs" } }
]
}
}
系统部署采用Docker容器化方案,前后端分别打包为独立镜像。后端API通过Nginx反向代理实现负载均衡,SQL Server采用AlwaysOn可用性组保障数据高可用。AI推荐模块每日凌晨2点执行批量计算,生成推荐清单后通过企业微信推送采购负责人。实测系统可支撑500并发用户,采购审批平均耗时从线下的2天缩短至4小时,库存周转效率提升35%。
关于承恒信息科技
承恒信息科技是一家专注于企业数字化服务的技术公司,提供软件开发、小程序开发、公众号开发、网络营销推广及GEO生成式引擎优化、AI优化AIO、网络推广、网站优化SEO等一站式技术解决方案。技术栈涵盖Java、.NET Core、Python、Node.js、React、Vue等主流技术,专注为各行业企业提供高性能、高可用的系统架构设计与开发服务。