From 793085607a7a14b3fcb28d6de4cc18bcff58d1c8 Mon Sep 17 00:00:00 2001 From: zzh <1368735060@qq.com> Date: Wed, 22 Jul 2026 10:22:54 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=AD=97=E8=8A=82=E6=9E=9A?= =?UTF-8?q?=E4=B8=BE=E6=95=B4=E5=9E=8B=E8=90=BD=E5=BA=93=E5=B9=B6=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E5=8F=91=E5=B8=83=E5=BF=AB=E7=85=A7=20Status?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 发布记录 Status 改为 EsSnapshotStatus(TINYINT),计费启用判断改用 EnableStatus;db.sql 与 migrate_enum_int_comments.sql 补全枚举字段注释及旧库迁移。 --- db.sql | 26 +++---- sql/migrate_enum_int_comments.sql | 74 +++++++++++++++++++ .../Channels/SalesProductService.Helpers.cs | 5 +- .../Channels/ServiceChannelService.Helpers.cs | 5 +- .../Orders/ParcelBillingCalculator.cs | 13 ++-- .../Entities/SalesProductPublishRecord.cs | 3 +- .../Entities/ServiceChannelPublishRecord.cs | 3 +- src/Oms.Domain/Shared/EnableStatusRules.cs | 10 +++ src/Oms.Domain/Shared/EnumDisplayNames.cs | 59 +++++++++++++++ .../Shared/Enums/EsSnapshotStatus.cs | 12 +++ .../Channels/SalesProductRepository.cs | 3 +- .../Channels/ServiceChannelRepository.cs | 3 +- 12 files changed, 189 insertions(+), 27 deletions(-) create mode 100644 sql/migrate_enum_int_comments.sql create mode 100644 src/Oms.Domain/Shared/EnableStatusRules.cs create mode 100644 src/Oms.Domain/Shared/EnumDisplayNames.cs create mode 100644 src/Oms.Domain/Shared/Enums/EsSnapshotStatus.cs diff --git a/db.sql b/db.sql index 9df5e21..94e35a5 100644 --- a/db.sql +++ b/db.sql @@ -494,7 +494,7 @@ CREATE TABLE `t_sales_product` ( `ProductDescription` TEXT COMMENT '产品描述', `PreStorageScript` TEXT COMMENT '入库前脚本', `CustomerGuideMarkdown` MEDIUMTEXT COMMENT '对客说明 Markdown', - `IsActive` TINYINT NOT NULL DEFAULT 1 COMMENT '是否启用', + `IsActive` TINYINT NOT NULL DEFAULT 2 COMMENT 'EnableStatus:0=None未设置,1=Disabled禁用,2=Enabled启用', `Scheme` VARCHAR(32) NOT NULL COMMENT '排货方案:costLowest/timeFastest/overallBest', `IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是', `ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳', @@ -514,7 +514,7 @@ CREATE TABLE `t_sales_product_price` ( `Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键,自增,步长 1', `SalesProductId` INT NOT NULL COMMENT '销售产品ID', `SerialNumber` INT NOT NULL COMMENT '序号', - `Status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用,1-启用', + `Status` TINYINT NOT NULL DEFAULT 2 COMMENT 'EnableStatus:0=None未设置,1=Disabled禁用,2=Enabled启用', `PriceName` VARCHAR(64) NOT NULL COMMENT '价格名称', `CostItem` VARCHAR(64) NOT NULL COMMENT '费用项', `CostUnit` VARCHAR(16) NOT NULL COMMENT '费用单位:kg/票/件', @@ -584,7 +584,7 @@ CREATE TABLE `t_sales_product_publish_record` ( `SalesProductId` INT NOT NULL COMMENT '销售产品ID', `Version` VARCHAR(32) NOT NULL COMMENT '版本号,如 20231227112339', `OperatorType` VARCHAR(16) NOT NULL COMMENT '操作类型:price/rules', - `Status` VARCHAR(16) NOT NULL COMMENT '状态:生效/回滚/无效', + `Status` TINYINT NOT NULL DEFAULT 1 COMMENT 'EsSnapshotStatus:0=None未设置,1=Active生效,2=Inactive失效', `PublishUser` VARCHAR(64) NOT NULL COMMENT '发布人', `PublishTime` DATETIME NOT NULL COMMENT '发布时间', `Description` VARCHAR(512) NULL COMMENT '版本备注', @@ -626,7 +626,7 @@ CREATE TABLE `t_service_channel` ( `ForecastCode` VARCHAR(128) NULL COMMENT '预报单号', `Description` TEXT COMMENT '描述', `PreScript` TEXT COMMENT '入库前脚本', - `IsActive` TINYINT NOT NULL DEFAULT 1 COMMENT '是否启用', + `IsActive` TINYINT NOT NULL DEFAULT 2 COMMENT 'EnableStatus:0=None未设置,1=Disabled禁用,2=Enabled启用', `IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是', `ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳', `CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人', @@ -643,7 +643,7 @@ CREATE TABLE `t_service_channel_price` ( `Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键,自增,步长 1', `ServiceChannelId` INT NOT NULL COMMENT '服务渠道ID', `SerialNumber` INT NOT NULL COMMENT '序号', - `Status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用,1-启用', + `Status` TINYINT NOT NULL DEFAULT 2 COMMENT 'EnableStatus:0=None未设置,1=Disabled禁用,2=Enabled启用', `PriceName` VARCHAR(64) NOT NULL COMMENT '价格名称', `CostItem` VARCHAR(64) NOT NULL COMMENT '费用项', `CostUnit` VARCHAR(16) NOT NULL COMMENT '费用单位:kg/票/件', @@ -695,7 +695,7 @@ CREATE TABLE `t_service_channel_publish_record` ( `ServiceChannelId` INT NOT NULL COMMENT '服务渠道ID', `Version` VARCHAR(32) NOT NULL COMMENT '版本号', `OperatorType` VARCHAR(16) NOT NULL COMMENT '操作类型:price/rules', - `Status` VARCHAR(16) NOT NULL COMMENT '状态:生效/回滚/无效', + `Status` TINYINT NOT NULL DEFAULT 1 COMMENT 'EsSnapshotStatus:0=None未设置,1=Active生效,2=Inactive失效', `PublishUser` VARCHAR(64) NOT NULL COMMENT '发布人', `PublishTime` DATETIME NOT NULL COMMENT '发布时间', `Description` VARCHAR(512) NULL COMMENT '版本备注', @@ -809,7 +809,7 @@ CREATE TABLE `t_weight_rounding_info` ( CREATE TABLE `t_auto_trigger` ( `Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键,自增,步长 1', - `Status` TINYINT NOT NULL DEFAULT 1 COMMENT '是否启用', + `Status` TINYINT NOT NULL DEFAULT 2 COMMENT 'EnableStatus:0=None未设置,1=Disabled禁用,2=Enabled启用', `RuleName` VARCHAR(128) NULL COMMENT '规则名称', `Priority` INT NOT NULL DEFAULT 100 COMMENT '优先级,数值越小越先执行', `Operation` VARCHAR(32) NULL COMMENT '操作:拦截/警告/问题件', @@ -835,7 +835,7 @@ CREATE TABLE `t_issue_template` ( `Title` VARCHAR(128) NOT NULL COMMENT '问题标题', `Content` TEXT NOT NULL COMMENT '问题内容', `NotifyMethod` VARCHAR(64) NOT NULL COMMENT '通知方式,逗号分隔', - `Status` TINYINT NOT NULL DEFAULT 1 COMMENT '0-禁用 1-启用', + `Status` TINYINT NOT NULL DEFAULT 2 COMMENT 'EnableStatus:0=None未设置,1=Disabled禁用,2=Enabled启用', `IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是', `ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳', `CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人', @@ -947,7 +947,7 @@ CREATE TABLE `t_customer` ( `Balance` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '账户余额', `TotalQuota` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '总额度', `UsedQuota` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '已用额度', - `Status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用,1-正常,2-冻结', + `Status` TINYINT NOT NULL DEFAULT 2 COMMENT 'CustomerStatus:0=None未设置,1=Disabled禁用,2=Normal正常,3=Frozen冻结', `Remark` VARCHAR(512) NULL COMMENT '备注信息', `CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人(系统/管理员账号)', `CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', @@ -955,7 +955,7 @@ CREATE TABLE `t_customer` ( `UpdateTime` DATETIME NULL COMMENT '更新时间', `Salesman` VARCHAR(32) NULL COMMENT '所属销售员账号', `CustomerService` VARCHAR(32) NULL COMMENT '所属顾问', - `CustomerGroup` TINYINT NULL COMMENT '客户分组:0-普通客户,1-VIP1,2-VIP2,3-VIP3,4-VIP4,5-VIP5', + `CustomerGroup` TINYINT NULL COMMENT 'CustomerGroup:0=None未设置,1=Normal普通,2=Vip1…6=Vip5', `OrganizationId` CHAR(36) NULL COMMENT '归属销售组织 FK organization.Id', `LastLoginIp` VARCHAR(64) NULL COMMENT '最后在线IP', `LastLoginTime` DATETIME NULL COMMENT '最后在线时间', @@ -981,10 +981,10 @@ CREATE TABLE `t_recharge_record` ( `SecretLevel` TINYINT NOT NULL DEFAULT 3 COMMENT '数据密级 1-4', `SerialNumber` VARCHAR(64) NOT NULL COMMENT '流水号', `RechargeTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '充值提交时间', - `PayType` TINYINT NOT NULL COMMENT '支付方式:1-微信,2-支付宝', + `PayType` TINYINT NOT NULL COMMENT 'PayType:0=None未设置,1=Wechat微信,2=Alipay支付宝', `RechargeAmount` DECIMAL(18,2) NOT NULL COMMENT '充值金额,>=0.01', `RechargeScreenshot` VARCHAR(255) NULL COMMENT '充值截图URL', - `RechargeStatus` TINYINT NOT NULL DEFAULT 0 COMMENT '充值状态:0-待审核,1-审核通过,2-审核驳回', + `RechargeStatus` TINYINT NOT NULL DEFAULT 1 COMMENT 'RechargeStatus:0=None未设置,1=Pending待审核,2=Approved通过,3=Rejected驳回', `Remark` VARCHAR(512) NULL COMMENT '备注(客户/审核人填写)', `CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人', `CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', @@ -1020,7 +1020,7 @@ CREATE TABLE `t_dict` ( `Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键,自增,步长 1', `DictType` VARCHAR(64) NOT NULL COMMENT '字典类型', `DictSort` INT NOT NULL DEFAULT 0 COMMENT '排序值', - `DictCode` VARCHAR(64) NOT NULL COMMENT '字典编码', + `DictCode` VARCHAR(64) NOT NULL COMMENT '字典编码:字符串类存语义码(camelCase);数值类存整数字符串如1/2,与对应枚举值一致(0=None不入库)', `DictName` VARCHAR(128) NOT NULL COMMENT '字典名称', `IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是', `ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳', diff --git a/sql/migrate_enum_int_comments.sql b/sql/migrate_enum_int_comments.sql new file mode 100644 index 0000000..46c68c5 --- /dev/null +++ b/sql/migrate_enum_int_comments.sql @@ -0,0 +1,74 @@ +-- 已有库增量:字节枚举字段注释统一 + 发布记录 Status 改 TINYINT + 旧 0 起编码迁移 +-- 对应 C# 枚举:EnableStatus / CustomerStatus / CustomerGroup / RechargeStatus / PayType / EsSnapshotStatus +-- 约定:0=None 未设置;业务值从 1 起。执行前请备份。 + +-- ---------- 1. 发布记录 Status:VARCHAR(中文) -> TINYINT(EsSnapshotStatus) ---------- +ALTER TABLE `t_sales_product_publish_record` + ADD COLUMN `StatusInt` TINYINT NOT NULL DEFAULT 1 COMMENT 'EsSnapshotStatus:0=None,1=Active生效,2=Inactive失效' AFTER `OperatorType`; + +UPDATE `t_sales_product_publish_record` +SET `StatusInt` = CASE + WHEN TRIM(`Status`) IN ('生效', 'active', 'Active', '1') THEN 1 + WHEN TRIM(`Status`) IN ('失效', '无效', 'inactive', 'Inactive', '2') THEN 2 + ELSE 1 +END; + +ALTER TABLE `t_sales_product_publish_record` + DROP COLUMN `Status`, + CHANGE COLUMN `StatusInt` `Status` TINYINT NOT NULL DEFAULT 1 COMMENT 'EsSnapshotStatus:0=None未设置,1=Active生效,2=Inactive失效'; + +ALTER TABLE `t_service_channel_publish_record` + ADD COLUMN `StatusInt` TINYINT NOT NULL DEFAULT 1 COMMENT 'EsSnapshotStatus:0=None,1=Active生效,2=Inactive失效' AFTER `OperatorType`; + +UPDATE `t_service_channel_publish_record` +SET `StatusInt` = CASE + WHEN TRIM(`Status`) IN ('生效', 'active', 'Active', '1') THEN 1 + WHEN TRIM(`Status`) IN ('失效', '无效', 'inactive', 'Inactive', '2') THEN 2 + ELSE 1 +END; + +ALTER TABLE `t_service_channel_publish_record` + DROP COLUMN `Status`, + CHANGE COLUMN `StatusInt` `Status` TINYINT NOT NULL DEFAULT 1 COMMENT 'EsSnapshotStatus:0=None未设置,1=Active生效,2=Inactive失效'; + +-- ---------- 2. 旧 0 起编码 -> 1 起(若已迁移可跳过对应 UPDATE) ---------- +UPDATE `t_customer` SET `Status` = `Status` + 1 WHERE `Status` BETWEEN 0 AND 2; +UPDATE `t_customer` SET `CustomerGroup` = `CustomerGroup` + 1 WHERE `CustomerGroup` BETWEEN 0 AND 5; +UPDATE `t_recharge_record` SET `RechargeStatus` = `RechargeStatus` + 1 WHERE `RechargeStatus` BETWEEN 0 AND 2; + +UPDATE `t_sales_product` SET `IsActive` = CASE `IsActive` WHEN 0 THEN 1 WHEN 1 THEN 2 ELSE `IsActive` END WHERE `IsActive` IN (0, 1); +UPDATE `t_service_channel` SET `IsActive` = CASE `IsActive` WHEN 0 THEN 1 WHEN 1 THEN 2 ELSE `IsActive` END WHERE `IsActive` IN (0, 1); +UPDATE `t_sales_product_price` SET `Status` = CASE `Status` WHEN 0 THEN 1 WHEN 1 THEN 2 ELSE `Status` END WHERE `Status` IN (0, 1); +UPDATE `t_service_channel_price` SET `Status` = CASE `Status` WHEN 0 THEN 1 WHEN 1 THEN 2 ELSE `Status` END WHERE `Status` IN (0, 1); +UPDATE `t_auto_trigger` SET `Status` = CASE `Status` WHEN 0 THEN 1 WHEN 1 THEN 2 ELSE `Status` END WHERE `Status` IN (0, 1); +UPDATE `t_issue_template` SET `Status` = CASE `Status` WHEN 0 THEN 1 WHEN 1 THEN 2 ELSE `Status` END WHERE `Status` IN (0, 1); + +-- ---------- 3. 字段注释(可重复执行 MODIFY) ---------- +ALTER TABLE `t_customer` + MODIFY COLUMN `Status` TINYINT NOT NULL DEFAULT 2 COMMENT 'CustomerStatus:0=None未设置,1=Disabled禁用,2=Normal正常,3=Frozen冻结', + MODIFY COLUMN `CustomerGroup` TINYINT NULL COMMENT 'CustomerGroup:0=None未设置,1=Normal普通,2=Vip1…6=Vip5'; + +ALTER TABLE `t_recharge_record` + MODIFY COLUMN `PayType` TINYINT NOT NULL COMMENT 'PayType:0=None未设置,1=Wechat微信,2=Alipay支付宝', + MODIFY COLUMN `RechargeStatus` TINYINT NOT NULL DEFAULT 1 COMMENT 'RechargeStatus:0=None未设置,1=Pending待审核,2=Approved通过,3=Rejected驳回'; + +ALTER TABLE `t_sales_product` + MODIFY COLUMN `IsActive` TINYINT NOT NULL DEFAULT 2 COMMENT 'EnableStatus:0=None未设置,1=Disabled禁用,2=Enabled启用'; + +ALTER TABLE `t_service_channel` + MODIFY COLUMN `IsActive` TINYINT NOT NULL DEFAULT 2 COMMENT 'EnableStatus:0=None未设置,1=Disabled禁用,2=Enabled启用'; + +ALTER TABLE `t_sales_product_price` + MODIFY COLUMN `Status` TINYINT NOT NULL DEFAULT 2 COMMENT 'EnableStatus:0=None未设置,1=Disabled禁用,2=Enabled启用'; + +ALTER TABLE `t_service_channel_price` + MODIFY COLUMN `Status` TINYINT NOT NULL DEFAULT 2 COMMENT 'EnableStatus:0=None未设置,1=Disabled禁用,2=Enabled启用'; + +ALTER TABLE `t_auto_trigger` + MODIFY COLUMN `Status` TINYINT NOT NULL DEFAULT 2 COMMENT 'EnableStatus:0=None未设置,1=Disabled禁用,2=Enabled启用'; + +ALTER TABLE `t_issue_template` + MODIFY COLUMN `Status` TINYINT NOT NULL DEFAULT 2 COMMENT 'EnableStatus:0=None未设置,1=Disabled禁用,2=Enabled启用'; + +ALTER TABLE `t_dict` + MODIFY COLUMN `DictCode` VARCHAR(64) NOT NULL COMMENT '字典编码:字符串类存语义码;数值类存整数字符串如1/2,与枚举值一致(0=None不入库)'; diff --git a/src/Oms.Application/Services/Channels/SalesProductService.Helpers.cs b/src/Oms.Application/Services/Channels/SalesProductService.Helpers.cs index 578c4e2..e34139e 100644 --- a/src/Oms.Application/Services/Channels/SalesProductService.Helpers.cs +++ b/src/Oms.Application/Services/Channels/SalesProductService.Helpers.cs @@ -4,6 +4,7 @@ using Oms.Application.Dtos.Shared; using Oms.Application.Shared; using Oms.Domain.ChannelsAggregate.Consts; using Oms.Domain.ChannelsAggregate.Entities; +using Oms.Domain.Shared; using Oms.Domain.Shared.Enums; namespace Oms.Application.Services.Channels; @@ -148,7 +149,7 @@ public partial class SalesProductService SalesProductId = entity.SalesProductId, Version = entity.Version, OperatorType = entity.OperatorType, - Status = entity.Status, + Status = EnumDisplayNames.Of(entity.Status), PublishUser = entity.PublishUser, PublishTime = entity.PublishTime, Description = entity.Description, @@ -235,7 +236,7 @@ public partial class SalesProductService SalesProductId = salesProductId, Version = DateTime.Now.ToString("yyyyMMddHHmmss"), OperatorType = operatorType, - Status = "生效", + Status = EsSnapshotStatus.Active, PublishUser = string.IsNullOrWhiteSpace(CurrentUser.UserName) ? CurrentUser.GetId().ToString() : CurrentUser.UserName!, PublishTime = DateTime.Now, Description = description, diff --git a/src/Oms.Application/Services/Channels/ServiceChannelService.Helpers.cs b/src/Oms.Application/Services/Channels/ServiceChannelService.Helpers.cs index d8d6500..77799e4 100644 --- a/src/Oms.Application/Services/Channels/ServiceChannelService.Helpers.cs +++ b/src/Oms.Application/Services/Channels/ServiceChannelService.Helpers.cs @@ -2,6 +2,7 @@ using Oms.Application.Dtos.Channels; using Oms.Application.Dtos.Shared; using Oms.Application.Shared; using Oms.Domain.ChannelsAggregate.Entities; +using Oms.Domain.Shared; using Oms.Domain.Shared.Enums; namespace Oms.Application.Services.Channels; @@ -162,7 +163,7 @@ public partial class ServiceChannelService ServiceChannelId = entity.ServiceChannelId, Version = entity.Version, OperatorType = entity.OperatorType, - Status = entity.Status, + Status = EnumDisplayNames.Of(entity.Status), PublishUser = entity.PublishUser, PublishTime = entity.PublishTime, Description = entity.Description, @@ -230,7 +231,7 @@ public partial class ServiceChannelService ServiceChannelId = serviceChannelId, Version = DateTime.Now.ToString("yyyyMMddHHmmss"), OperatorType = operatorType, - Status = "生效", + Status = EsSnapshotStatus.Active, PublishUser = string.IsNullOrWhiteSpace(CurrentUser.UserName) ? CurrentUser.GetId().ToString() : CurrentUser.UserName!, PublishTime = DateTime.Now, Description = description, diff --git a/src/Oms.Application/Services/Orders/ParcelBillingCalculator.cs b/src/Oms.Application/Services/Orders/ParcelBillingCalculator.cs index c25c31d..1e1677a 100644 --- a/src/Oms.Application/Services/Orders/ParcelBillingCalculator.cs +++ b/src/Oms.Application/Services/Orders/ParcelBillingCalculator.cs @@ -8,6 +8,7 @@ using Oms.Domain.ChannelsAggregate.Entities; using Oms.Domain.CustomersAggregate.Enums; using Oms.Domain.OrdersAggregate.Consts; using Oms.Domain.OrdersAggregate.Entities; +using Oms.Domain.Shared; namespace Oms.Application.Services.Orders; @@ -397,7 +398,7 @@ internal static class ParcelBillingCalculator HasEnabledReceivablePriceItems(priceSnapshot); public static bool HasEnabledReceivablePriceItems(SalesProductPricePublishSnapshotDto priceSnapshot) => - priceSnapshot.Prices.Any(x => x.Status == 1); + priceSnapshot.Prices.Any(x => EnableStatusRules.IsEnabled(x.Status)); /// /// 收集卖价快照中所有启用价格项的明细分区键(去重)。 @@ -405,7 +406,7 @@ internal static class ParcelBillingCalculator public static IReadOnlyList CollectDistinctDetailZoneKeys(SalesProductPricePublishSnapshotDto priceSnapshot) { var zones = new HashSet(StringComparer.OrdinalIgnoreCase); - foreach (var price in priceSnapshot.Prices.Where(x => x.Status == 1)) + foreach (var price in priceSnapshot.Prices.Where(x => EnableStatusRules.IsEnabled(x.Status))) { foreach (var detail in price.Details ?? []) { @@ -434,7 +435,7 @@ internal static class ParcelBillingCalculator { var cargoLabel = GetCargoAttributeLabel(cargoAttribute); var warehouseLabel = FormatWarehouseLabel(warehouseId, warehouseName); - var enabledPrices = priceSnapshot.Prices.Where(x => x.Status == 1).ToList(); + var enabledPrices = priceSnapshot.Prices.Where(x => EnableStatusRules.IsEnabled(x.Status)).ToList(); if (enabledPrices.Count == 0) { return "卖价快照中无启用的价格项"; @@ -671,7 +672,7 @@ internal static class ParcelBillingCalculator HasEnabledReceivablePriceItems(priceSnapshot); public static bool HasEnabledPayablePriceItems(IReadOnlyList prices) => - prices.Any(x => x.Status == 1); + prices.Any(x => EnableStatusRules.IsEnabled(x.Status)); public static bool HasEnabledForecastPayablePriceItems(IReadOnlyList prices) => HasEnabledPayablePriceItems(prices); @@ -828,7 +829,7 @@ internal static class ParcelBillingCalculator string? warehouseName = null) { var fees = new List(); - foreach (var priceItem in priceItems.Where(x => x.Status == 1)) + foreach (var priceItem in priceItems.Where(x => EnableStatusRules.IsEnabled(x.Status))) { var detail = MatchPriceDetail( priceItem.Details, @@ -893,7 +894,7 @@ internal static class ParcelBillingCalculator string? warehouseName = null) { var fees = new List(); - foreach (var priceItem in priceItems.Where(x => x.Status == 1)) + foreach (var priceItem in priceItems.Where(x => EnableStatusRules.IsEnabled(x.Status))) { var detail = MatchPriceDetail( priceItem.Details, diff --git a/src/Oms.Domain/ChannelsAggregate/Entities/SalesProductPublishRecord.cs b/src/Oms.Domain/ChannelsAggregate/Entities/SalesProductPublishRecord.cs index a30a3fb..a0c42a4 100644 --- a/src/Oms.Domain/ChannelsAggregate/Entities/SalesProductPublishRecord.cs +++ b/src/Oms.Domain/ChannelsAggregate/Entities/SalesProductPublishRecord.cs @@ -1,4 +1,5 @@ using Oms.Domain.Shared; +using Oms.Domain.Shared.Enums; using SqlSugar; namespace Oms.Domain.ChannelsAggregate.Entities; @@ -12,7 +13,7 @@ public class SalesProductPublishRecord : OmsAuditedEntity public string OperatorType { get; set; } = string.Empty; - public string Status { get; set; } = string.Empty; + public EsSnapshotStatus Status { get; set; } = EsSnapshotStatus.Active; public string PublishUser { get; set; } = string.Empty; diff --git a/src/Oms.Domain/ChannelsAggregate/Entities/ServiceChannelPublishRecord.cs b/src/Oms.Domain/ChannelsAggregate/Entities/ServiceChannelPublishRecord.cs index eeaaa27..3706adc 100644 --- a/src/Oms.Domain/ChannelsAggregate/Entities/ServiceChannelPublishRecord.cs +++ b/src/Oms.Domain/ChannelsAggregate/Entities/ServiceChannelPublishRecord.cs @@ -1,4 +1,5 @@ using Oms.Domain.Shared; +using Oms.Domain.Shared.Enums; using SqlSugar; namespace Oms.Domain.ChannelsAggregate.Entities; @@ -12,7 +13,7 @@ public class ServiceChannelPublishRecord : OmsAuditedEntity public string OperatorType { get; set; } = string.Empty; - public string Status { get; set; } = string.Empty; + public EsSnapshotStatus Status { get; set; } = EsSnapshotStatus.Active; public string PublishUser { get; set; } = string.Empty; diff --git a/src/Oms.Domain/Shared/EnableStatusRules.cs b/src/Oms.Domain/Shared/EnableStatusRules.cs new file mode 100644 index 0000000..2f11b1c --- /dev/null +++ b/src/Oms.Domain/Shared/EnableStatusRules.cs @@ -0,0 +1,10 @@ +using Oms.Domain.Shared.Enums; + +namespace Oms.Domain.Shared; + +public static class EnableStatusRules +{ + public static bool IsEnabled(EnableStatus status) => status == EnableStatus.Enabled; + + public static bool IsEnabled(byte status) => (EnableStatus)status == EnableStatus.Enabled; +} diff --git a/src/Oms.Domain/Shared/EnumDisplayNames.cs b/src/Oms.Domain/Shared/EnumDisplayNames.cs new file mode 100644 index 0000000..d97053c --- /dev/null +++ b/src/Oms.Domain/Shared/EnumDisplayNames.cs @@ -0,0 +1,59 @@ +using Oms.Domain.CustomersAggregate.Enums; +using Oms.Domain.RechargeAggregate.Enums; +using Oms.Domain.Shared.Enums; + +namespace Oms.Domain.Shared; + +/// +/// 字节枚举展示名(与 t_dict 中文名称对齐,供 API 出参等使用)。 +/// +public static class EnumDisplayNames +{ + public static string Of(EsSnapshotStatus status) => status switch + { + EsSnapshotStatus.Active => "生效", + EsSnapshotStatus.Inactive => "失效", + _ => string.Empty + }; + + public static string Of(EnableStatus status) => status switch + { + EnableStatus.Disabled => "禁用", + EnableStatus.Enabled => "启用", + _ => string.Empty + }; + + public static string Of(CustomerStatus status) => status switch + { + CustomerStatus.Disabled => "禁用", + CustomerStatus.Normal => "正常", + CustomerStatus.Frozen => "冻结", + _ => string.Empty + }; + + public static string Of(CustomerGroup? group) => group switch + { + CustomerGroup.Normal => "普通客户", + CustomerGroup.Vip1 => "VIP1", + CustomerGroup.Vip2 => "VIP2", + CustomerGroup.Vip3 => "VIP3", + CustomerGroup.Vip4 => "VIP4", + CustomerGroup.Vip5 => "VIP5", + _ => string.Empty + }; + + public static string Of(RechargeStatus status) => status switch + { + RechargeStatus.Pending => "待审核", + RechargeStatus.Approved => "审核通过", + RechargeStatus.Rejected => "审核驳回", + _ => string.Empty + }; + + public static string Of(PayType payType) => payType switch + { + PayType.Wechat => "微信", + PayType.Alipay => "支付宝", + _ => string.Empty + }; +} diff --git a/src/Oms.Domain/Shared/Enums/EsSnapshotStatus.cs b/src/Oms.Domain/Shared/Enums/EsSnapshotStatus.cs new file mode 100644 index 0000000..03f0beb --- /dev/null +++ b/src/Oms.Domain/Shared/Enums/EsSnapshotStatus.cs @@ -0,0 +1,12 @@ +namespace Oms.Domain.Shared.Enums; + +/// +/// ES/渠道发布快照生效状态(对应字典 es_snapshot_status 的数值落库,dictCode 为 active/inactive 仅作展示)。 +/// 0=None 未设置;业务值从 1 起。 +/// +public enum EsSnapshotStatus : byte +{ + None = 0, + Active = 1, + Inactive = 2 +} diff --git a/src/Oms.SqlSugarCore/Channels/SalesProductRepository.cs b/src/Oms.SqlSugarCore/Channels/SalesProductRepository.cs index 06ec59c..a5556cc 100644 --- a/src/Oms.SqlSugarCore/Channels/SalesProductRepository.cs +++ b/src/Oms.SqlSugarCore/Channels/SalesProductRepository.cs @@ -1,5 +1,6 @@ using Fake.DependencyInjection; using Oms.Domain.ChannelsAggregate.Entities; +using Oms.Domain.Shared.Enums; using Oms.Domain.ChannelsAggregate.Repositories; using Oms.Domain.Shared.Enums; using Oms.SqlSugarCore.Repositories; @@ -227,7 +228,7 @@ public class SalesProductRepository : OmsSqlSugarRepository, ISale var records = await db.Queryable() .Where(x => x.SalesProductId == salesProductId && x.OperatorType == operatorType - && x.Status == "生效" + && x.Status == EsSnapshotStatus.Active && x.PublishTime <= bindTime) .OrderBy(x => x.PublishTime, SqlSugar.OrderByType.Desc) .Take(1) diff --git a/src/Oms.SqlSugarCore/Channels/ServiceChannelRepository.cs b/src/Oms.SqlSugarCore/Channels/ServiceChannelRepository.cs index 9155af1..b18b318 100644 --- a/src/Oms.SqlSugarCore/Channels/ServiceChannelRepository.cs +++ b/src/Oms.SqlSugarCore/Channels/ServiceChannelRepository.cs @@ -1,5 +1,6 @@ using Fake.DependencyInjection; using Oms.Domain.ChannelsAggregate.Entities; +using Oms.Domain.Shared.Enums; using Oms.Domain.ChannelsAggregate.Repositories; using Oms.Domain.Shared.Enums; using Oms.SqlSugarCore.Repositories; @@ -189,7 +190,7 @@ public class ServiceChannelRepository : OmsSqlSugarRepository, I var records = await db.Queryable() .Where(x => x.ServiceChannelId == serviceChannelId && x.OperatorType == operatorType - && x.Status == "生效" + && x.Status == EsSnapshotStatus.Active && x.PublishTime <= bindTime) .OrderBy(x => x.PublishTime, SqlSugar.OrderByType.Desc) .Take(1)