2026-04-22
ContractReview - 合同评审主表ContractReviewFlow - 合同评审流程节点表LinkagePlan - 计划联动看板ProductDesign - 产品设计主表ProductDesignBom - 产品设计BOM表ProductDesignRouting - 产品设计工艺表SeOrder - 销售订单主表(已有)SeOrderEntry - 销售订单明细表SeOrderChange - 订单变更表(已有)ShippingPlan - 发货计划主表ShippingPlanDetail - 发货计划明细表AsnShipperMaster - ASN发货单主表AsnShipperDetail - ASN发货单明细表ScheduleExceptionMaster - 排产异常日志所有 Entity 已添加 TenantId 属性:
/// <summary>租户ID(多租户隔离)</summary>
[SugarColumn(ColumnName = "TenantId", IsNullable = true)]
public long? TenantId { get; set; }
ContractReviewService - 完整租户过滤(列表、详情、新增、修改、删除)LinkagePlanService - 查询租户过滤SeOrderService - 完整租户过滤(列表、详情、新增、修改、删除、明细)ShippingPlanService - 需要手工完善OrderDeliveryService - 需要手工完善SeOrderOperationLogService - 需要手工完善AsnShipperService - 需要手工完善ProductDesignService - 需要手工完善RequirementExamineDetailService - 需要手工完善WorkOrderDispatchService - 需要手工完善HolidayMasterService - INSERT 和 UPDATE 已添加租户ID(注:操作主数据表)ShopCalendarWorkCtrService - 需要手工完善ScheduleExceptionService - 需要手工完善WorkOrderSchedulingService - 需要手工完善ResourceOvertimeService - 需要手工完善ExecutableDailyPlanService - 需要手工完善QualityLineWorkDetailService - 需要手工完善WorkOrderProgressDashboardService - 只读服务(查询主数据表,可能不需要租户过滤)已实现的租户过滤模式:
WHERE ... AND TenantId = @TenantIdu.Id == id && u.TenantId == tenantIdentity.TenantId = _userManager.TenantId生成的迁移脚本:
d:\DEMONET\tools\sql\add_tenant_id_to_business_tables.sql脚本功能:
TenantId 字段TenantId 字段创建索引(提升查询性能)需要手动执行:
mysql --host=localhost --user=root --password=你的密码 --database=aidopdev < d:\DEMONET\tools\sql\add_tenant_id_to_business_tables.sql
var tenantId = _userManager.TenantId;
// Repository 方式
var entity = await _repository.GetFirstAsync(u => u.Id == id && u.TenantId == tenantId);
// 原生 SQL 方式
var conditions = new List<string> { "TenantId = @TenantId" };
pars.Add(new SugarParameter("@TenantId", tenantId));
var entity = new Entity
{
// ... 其他字段 ...
TenantId = tenantId
};
await _repository.InsertAsync(entity);
剩余 13个 Service 需要手工添加完整的租户过滤逻辑:
ContractReviewService.cs 和 SeOrderService.cs 的实现模式手动执行 SQL 脚本:
mysql -u root -p aidopdev < tools/sql/add_tenant_id_to_business_tables.sql
如果数据库中已有数据,需要:
或者根据业务规则分配租户ID
-- 示例:为现有数据设置默认租户ID(假设默认租户ID为1)
UPDATE crm_seorder SET tenant_id = 1 WHERE tenant_id IS NULL;
UPDATE crm_seorderentry SET tenant_id = 1 WHERE tenant_id IS NULL;
-- ... 其他表同理 ...
UserManager.TenantId 获取UserManager 从当前 HTTP 上下文的 Claims 中解析租户IDClaimConst.TenantId 由认证系统写入TenantId 字段创建索引,提升多租户环境下的查询性能TenantId 设计为可空,便于系统初期迁移和兼容性📄 d:\DEMONET\tools\add_tenant_id_to_entities.ps1
📄 d:\DEMONET\tools\add_tenant_filtering_to_services.ps1
📄 d:\DEMONET\tools\sql\add_tenant_id_to_business_tables.sql
请参考以下文件的实现:
ContractReviewService.cs - 标准的增删改查租户过滤SeOrderService.cs - 复杂业务逻辑的租户过滤(包含主子表)LinkagePlanService.cs - 简单查询的租户过滤每个 Service 方法应检查:
TenantId = @TenantIdTenantId = @TenantIdentity.TenantId = _userManager.TenantId✅ 已完成:
⏳ 待完成:
预计剩余工作量: 2-4小时(取决于业务逻辑复杂度)
生成时间:2026-04-22
改造范围:AiDOP 插件 Order、WorkOrder、Production 模块