新增MES模块,包含供应商、客户、车辆和地磅数据记录管理功能,支持免密接口和数据同步。更新相关控制器、实体、服务和数据库配置,优化权限管理和数据字典支持,确保系统的灵活性和可扩展性。

This commit is contained in:
geht
2026-04-30 15:28:20 +08:00
parent 142a0bdaba
commit b03cbeff9b
121 changed files with 10540 additions and 424 deletions

View File

@@ -0,0 +1,19 @@
using YY.Admin.Core.Entity;
namespace YY.Admin.Core.Services;
public interface ICustomerService
{
Task<CustomerPageResult> PageAsync(int pageNo, int pageSize,
string? customerCode = null, string? customerName = null,
string? status = null, string? customerRegion = null,
CancellationToken ct = default);
Task<MesXslCustomer?> GetByIdAsync(string id, CancellationToken ct = default);
Task<bool> AddAsync(MesXslCustomer customer, CancellationToken ct = default);
Task<bool> EditAsync(MesXslCustomer customer, CancellationToken ct = default);
Task<bool> DeleteAsync(string id, CancellationToken ct = default);
Task<bool> UpdateStatusAsync(string id, string status, CancellationToken ct = default);
}
public record CustomerPageResult(List<MesXslCustomer> Records, long Total, int PageNo, int PageSize);

View File

@@ -5,4 +5,9 @@ public interface INetworkMonitor
bool IsOnline { get; }
event Action<bool>? StatusChanged;
Task StartAsync(CancellationToken cancellationToken = default);
/// <summary>
/// 由 STOMP 设备通道在连接成功/断开时回写,与 HTTP 探活结果取或,统一 <see cref="IsOnline"/> 与网络事件。
/// </summary>
void SetStompTransportOnline(bool online);
}

View File

@@ -10,4 +10,9 @@ public interface ISignalRService
Task ConnectUnifiedDeviceChannelAsync(CancellationToken cancellationToken = default);
Task SendDeviceStatusAsync(object status, CancellationToken cancellationToken = default);
/// <summary>
/// 主动断开 STOMP 连接并停止重连。
/// </summary>
Task DisconnectAsync(CancellationToken cancellationToken = default);
}

View File

@@ -0,0 +1,26 @@
using YY.Admin.Core.Entity;
namespace YY.Admin.Core.Services;
public interface ISupplierService
{
Task<SupplierPageResult> PageAsync(int pageNo, int pageSize,
string? supplierCode = null, string? supplierName = null,
string? supplierShortName = null, string? erpCode = null,
string? status = null, CancellationToken ct = default);
Task<MesXslSupplier?> GetByIdAsync(string id, CancellationToken ct = default);
Task<bool> AddAsync(MesXslSupplier supplier, CancellationToken ct = default);
Task<bool> EditAsync(MesXslSupplier supplier, CancellationToken ct = default);
Task<bool> DeleteAsync(string id, CancellationToken ct = default);
Task<bool> UpdateStatusAsync(string id, string status, CancellationToken ct = default);
/// <summary>
/// 重连后将离线期间的本地改动推送到后端,并检测冲突。
/// </summary>
Task<PushPendingResult> PushPendingOnReconnectAsync(CancellationToken ct = default);
}
public record SupplierPageResult(List<MesXslSupplier> Records, long Total, int PageNo, int PageSize);
public record PushPendingResult(int PushedCount, int ConflictCount, int NewRecordsPushed);

View File

@@ -0,0 +1,13 @@
namespace YY.Admin.Core.Services;
/// <summary>
/// 将桌面端用户 CRUD 操作写入 Outbox异步反同步到 Jeecg 后端。
/// </summary>
public interface IUserSyncOutbox
{
Task EnqueueCreateAsync(string userId, string account, string? realName, int? sex, DateTime? birthday, string? phone, string? email, int status, string? updateBy, CancellationToken cancellationToken = default);
Task EnqueueUpdateAsync(string userId, string account, string? realName, int? sex, DateTime? birthday, string? phone, string? email, int status, string? updateBy, CancellationToken cancellationToken = default);
Task EnqueueToggleStatusAsync(string userId, int status, string? updateBy, CancellationToken cancellationToken = default);
Task EnqueueDeleteAsync(string userId, CancellationToken cancellationToken = default);
Task EnqueueBatchDeleteAsync(IReadOnlyList<string> userIds, CancellationToken cancellationToken = default);
}

View File

@@ -0,0 +1,16 @@
using YY.Admin.Core.Entity;
namespace YY.Admin.Core.Services;
public record VehiclePageResult(List<MesXslVehicle> Records, long Total, int Current, int Size);
public interface IVehicleService
{
Task<VehiclePageResult> PageAsync(int pageNo, int pageSize, string? plateNumber = null, string? vehicleBelong = null, string? status = null, CancellationToken ct = default);
Task<MesXslVehicle?> GetByIdAsync(string id, CancellationToken ct = default);
Task<bool> AddAsync(MesXslVehicle vehicle, CancellationToken ct = default);
Task<bool> EditAsync(MesXslVehicle vehicle, CancellationToken ct = default);
Task<bool> DeleteAsync(string id, CancellationToken ct = default);
Task<bool> DeleteBatchAsync(string ids, CancellationToken ct = default);
Task<bool> UpdateStatusAsync(string id, string status, CancellationToken ct = default);
}