admin/src/Oms.Application/Services/Orders/Issues/AutoTriggerFormulaMeta.cs
zzh 314c5ac02f
All checks were successful
Build and Deploy / deploy (push) Successful in 1m3s
feat: 申报明细新增产品标识编码/非标产品标识编码/标准产品标识编码
- t_order_declaration 新增 ProductId、NonStdProductId、StdProductId(迁移 migrate_order_declaration_product_ids_20261019.sql)
- 下单/改单/开放接口/Excel 模板入参、订单详情出参、下游 createOrderOne 报文同步字段
- 自动触发公式目录增加三个字段
2026-10-19 15:48:16 +08:00

261 lines
19 KiB
C#

namespace Oms.Application.Services.Orders.Issues;
using Oms.Application.Dtos.Channels;
public enum FormulaValueType
{
String,
Number,
Boolean,
DateTime
}
public sealed record FormulaFieldRef(string Table, string Field, bool Virtual = false);
/// <summary>
/// 中文字段名 → 库表字段映射(与前端 formulaMeta.ts 保持一致)。
/// </summary>
public static class AutoTriggerFormulaMeta
{
public static IReadOnlyDictionary<string, FormulaFieldRef> LabelToRef { get; }
public static IReadOnlyDictionary<string, FormulaValueType> LabelValueTypes { get; }
/// <summary>按长度降序排列的标签,供词法分析最长匹配。</summary>
public static IReadOnlyList<string> LabelsByLengthDesc { get; }
static AutoTriggerFormulaMeta()
{
var fields = BuildFieldDefs();
var labelToRef = new Dictionary<string, FormulaFieldRef>(StringComparer.Ordinal);
var labelValueTypes = new Dictionary<string, FormulaValueType>(StringComparer.Ordinal);
foreach (var (label, table, field, valueType, virtualField) in fields)
{
labelToRef[label] = new FormulaFieldRef(table, field, virtualField);
labelValueTypes[label] = valueType;
}
LabelToRef = labelToRef;
LabelValueTypes = labelValueTypes;
LabelsByLengthDesc = labelToRef.Keys.OrderByDescending(x => x.Length).ToList();
}
public static bool TryResolve(string label, out FormulaFieldRef? fieldRef) =>
LabelToRef.TryGetValue(label, out fieldRef);
public static AutoTriggerMetaOutput BuildMetaOutput()
{
var categories = new List<AutoTriggerFormulaCategoryOutput>
{
new() { Key = "t_order", Label = "订单" },
new() { Key = "t_order_recipient", Label = "收件人" },
new() { Key = "t_order_sender", Label = "发件人" },
new() { Key = "t_order_declaration", Label = "申报" },
new() { Key = "t_order_weight", Label = "件重尺" },
new() { Key = "t_order_fee", Label = "费用" },
new() { Key = "t_customer", Label = "客户" },
new() { Key = "_virtual", Label = "常用" },
};
var fields = LabelToRef
.Select(x =>
{
LabelValueTypes.TryGetValue(x.Key, out var valueType);
return new AutoTriggerFormulaFieldOutput
{
Label = x.Key,
Table = x.Value.Table,
Field = x.Value.Field,
Virtual = x.Value.Virtual,
ValueType = valueType switch
{
FormulaValueType.String => "string",
FormulaValueType.Number => "number",
FormulaValueType.Boolean => "boolean",
FormulaValueType.DateTime => "datetime",
_ => "string"
}
};
})
.OrderBy(x => x.Table)
.ThenBy(x => x.Label)
.ToList();
return new AutoTriggerMetaOutput
{
Categories = categories,
Fields = fields,
OversizeExampleFormula =
"(单件最大长度()>60||单件最大宽度()>46||((单件最大长度()+单件最大宽度()+单件最大高度())>150))&&国家包含('GB')&&客户包含('阿里国际站/深圳一达通')&&!销售产品包含('EX_ASP_HKDHL_YD')",
FormulaMaxLength = 10000
};
}
private static IEnumerable<(string Label, string Table, string Field, FormulaValueType ValueType, bool Virtual)> BuildFieldDefs()
{
// t_order
yield return ("请求标识", "t_order", "RequestId", FormulaValueType.String, false);
yield return ("运单号", "t_order", "ServiceNo", FormulaValueType.String, false);
yield return ("客户单号", "t_order", "ClientNo", FormulaValueType.String, false);
yield return ("跟踪号", "t_order", "TrackNo", FormulaValueType.String, false);
yield return ("销售产品", "t_order", "ProductCode", FormulaValueType.String, false);
yield return ("收货渠道", "t_order", "ChannelCode", FormulaValueType.String, false);
yield return ("下游服务商", "t_order", "DownstreamSupplierCode", FormulaValueType.String, false);
yield return ("下游AppKey", "t_order", "DownstreamAppKey", FormulaValueType.String, false);
yield return ("下游AppId", "t_order", "DownstreamAppId", FormulaValueType.Number, false);
yield return ("渠道预报编码", "t_order", "ChannelForecastCode", FormulaValueType.String, false);
yield return ("国家", "t_order", "ConsigneeCountry", FormulaValueType.String, false);
yield return ("收件国家名称", "t_order", "ConsigneeCountryName", FormulaValueType.String, false);
yield return ("货物属性", "t_order", "CargoAttribute", FormulaValueType.String, false);
yield return ("出口报关方式", "t_order", "ExportCustomsMode", FormulaValueType.String, false);
yield return ("预报失败原因", "t_order", "PredeclareFailReason", FormulaValueType.String, false);
yield return ("规则版本号", "t_order", "SalesProductRulesVersion", FormulaValueType.String, false);
yield return ("价格版本号", "t_order", "SalesProductPriceVersion", FormulaValueType.String, false);
yield return ("订单状态", "t_order", "OrderStatus", FormulaValueType.String, false);
yield return ("处理子状态", "t_order", "HandleStatus", FormulaValueType.String, false);
yield return ("问题类型", "t_order", "IssueType", FormulaValueType.String, false);
yield return ("问题标题", "t_order", "IssueTitle", FormulaValueType.String, false);
yield return ("问题内容", "t_order", "IssueContent", FormulaValueType.String, false);
yield return ("问题模板", "t_order", "IssueTemplateId", FormulaValueType.Number, false);
yield return ("问题备注", "t_order", "IssueRemark", FormulaValueType.String, false);
yield return ("问题件时间", "t_order", "IssueTime", FormulaValueType.DateTime, false);
yield return ("理赔类型", "t_order", "ClaimType", FormulaValueType.String, false);
yield return ("索赔金额", "t_order", "ClaimAmount", FormulaValueType.Number, false);
yield return ("索赔币种", "t_order", "ClaimCurrency", FormulaValueType.String, false);
yield return ("理赔原因", "t_order", "ClaimReason", FormulaValueType.String, false);
yield return ("理赔时间", "t_order", "ClaimTime", FormulaValueType.DateTime, false);
yield return ("异常前状态", "t_order", "PreviousOrderStatus", FormulaValueType.String, false);
yield return ("仓库", "t_order", "WarehouseId", FormulaValueType.Number, false);
yield return ("订单客户", "t_order", "CustomerId", FormulaValueType.Number, false);
yield return ("组织", "t_order", "OrganizationId", FormulaValueType.String, false);
yield return ("密级", "t_order", "SecretLevel", FormulaValueType.Number, false);
yield return ("发件人关联", "t_order", "SenderId", FormulaValueType.Number, false);
yield return ("收件人关联", "t_order", "RecipientId", FormulaValueType.Number, false);
yield return ("申报关联", "t_order", "DeclarationId", FormulaValueType.Number, false);
yield return ("收货时间", "t_order", "ReceiveTime", FormulaValueType.DateTime, false);
yield return ("发货时间", "t_order", "ShipTime", FormulaValueType.DateTime, false);
yield return ("支付时间", "t_order", "PayTime", FormulaValueType.DateTime, false);
yield return ("是否已支付", "t_order", "IsPaid", FormulaValueType.Boolean, false);
yield return ("签收时间", "t_order", "SignTime", FormulaValueType.DateTime, false);
yield return ("是否COD", "t_order", "IsCod", FormulaValueType.Boolean, false);
yield return ("COD币种", "t_order", "CodCurrency", FormulaValueType.String, false);
yield return ("COD金额", "t_order", "CodSum", FormulaValueType.Number, false);
yield return ("申报币种", "t_order", "DeclaredCurrency", FormulaValueType.String, false);
yield return ("申报总金额", "t_order", "DeclaredSum", FormulaValueType.Number, false);
yield return ("订单件数", "t_order", "Quantity", FormulaValueType.Number, false);
yield return ("是否拦截", "t_order", "IsIntercept", FormulaValueType.Boolean, false);
yield return ("是否偏远", "t_order", "IsRemote", FormulaValueType.Boolean, false);
yield return ("附加服务", "t_order", "AdditionalServices", FormulaValueType.String, false);
// t_order_recipient
yield return ("收件人姓名", "t_order_recipient", "RecipientsName", FormulaValueType.String, false);
yield return ("收件人公司", "t_order_recipient", "CompanyName", FormulaValueType.String, false);
yield return ("收件人国家", "t_order_recipient", "Country", FormulaValueType.Number, false);
yield return ("收件人手机", "t_order_recipient", "Phone", FormulaValueType.String, false);
yield return ("收件人电话", "t_order_recipient", "TelePhone", FormulaValueType.String, false);
yield return ("收件人邮编", "t_order_recipient", "ZipCode", FormulaValueType.String, false);
yield return ("收件人省州", "t_order_recipient", "Province", FormulaValueType.String, false);
yield return ("收件人城市", "t_order_recipient", "City", FormulaValueType.String, false);
yield return ("收件人门牌号", "t_order_recipient", "StreetNumber", FormulaValueType.String, false);
yield return ("收件人地址1", "t_order_recipient", "StreetAddress1", FormulaValueType.String, false);
yield return ("收件人地址2", "t_order_recipient", "StreetAddress2", FormulaValueType.String, false);
yield return ("收件人地址3", "t_order_recipient", "StreetAddress3", FormulaValueType.String, false);
yield return ("收件人邮箱", "t_order_recipient", "Email", FormulaValueType.String, false);
yield return ("收件人税号类型", "t_order_recipient", "TaxType", FormulaValueType.Number, false);
yield return ("收件人税号", "t_order_recipient", "TaxNo", FormulaValueType.String, false);
yield return ("收件人证件类型", "t_order_recipient", "CertificateType", FormulaValueType.Number, false);
yield return ("收件人证件号", "t_order_recipient", "CertificateNo", FormulaValueType.String, false);
yield return ("收件人EORI", "t_order_recipient", "Eori", FormulaValueType.String, false);
yield return ("收件人VAT", "t_order_recipient", "Vat", FormulaValueType.String, false);
// t_order_sender
yield return ("发件人姓名", "t_order_sender", "SenderName", FormulaValueType.String, false);
yield return ("发件人公司", "t_order_sender", "Company", FormulaValueType.String, false);
yield return ("发件人国家", "t_order_sender", "Country", FormulaValueType.Number, false);
yield return ("发件人省州", "t_order_sender", "Province", FormulaValueType.String, false);
yield return ("发件人城市", "t_order_sender", "City", FormulaValueType.String, false);
yield return ("发件人邮编", "t_order_sender", "ZipCode", FormulaValueType.String, false);
yield return ("发件人地址1", "t_order_sender", "StreetAddress1", FormulaValueType.String, false);
yield return ("发件人地址2", "t_order_sender", "StreetAddress2", FormulaValueType.String, false);
yield return ("发件人地址3", "t_order_sender", "StreetAddress3", FormulaValueType.String, false);
yield return ("发件人门牌号", "t_order_sender", "HouseNumber", FormulaValueType.String, false);
yield return ("发件人手机", "t_order_sender", "Phone", FormulaValueType.String, false);
yield return ("发件人电话", "t_order_sender", "TelePhone", FormulaValueType.String, false);
yield return ("发件人邮箱", "t_order_sender", "Email", FormulaValueType.String, false);
yield return ("发件人是否默认", "t_order_sender", "IsDefault", FormulaValueType.Boolean, false);
// t_order_declaration
yield return ("中文品名", "t_order_declaration", "CnName", FormulaValueType.String, false);
yield return ("英文品名", "t_order_declaration", "EnName", FormulaValueType.String, false);
yield return ("SKU", "t_order_declaration", "Sku", FormulaValueType.String, false);
yield return ("申报单位", "t_order_declaration", "Unit", FormulaValueType.String, false);
yield return ("申报单价", "t_order_declaration", "UnitPrice", FormulaValueType.Number, false);
yield return ("申报单重", "t_order_declaration", "UnitWeight", FormulaValueType.Number, false);
yield return ("申报数量", "t_order_declaration", "Quantity", FormulaValueType.Number, false);
yield return ("申报金额", "t_order_declaration", "Amount", FormulaValueType.Number, false);
yield return ("申报总重", "t_order_declaration", "Weight", FormulaValueType.Number, false);
yield return ("HS编码", "t_order_declaration", "HsCode", FormulaValueType.String, false);
yield return ("进口HS编码", "t_order_declaration", "ImHsCode", FormulaValueType.String, false);
yield return ("出口HS编码", "t_order_declaration", "ExHsCode", FormulaValueType.String, false);
yield return ("出口申报要素", "t_order_declaration", "DeclareElement", FormulaValueType.String, false);
yield return ("产品标识编码", "t_order_declaration", "ProductId", FormulaValueType.String, false);
yield return ("非标产品标识编码", "t_order_declaration", "NonStdProductId", FormulaValueType.String, false);
yield return ("标准产品标识编码", "t_order_declaration", "StdProductId", FormulaValueType.String, false);
yield return ("申报类别", "t_order_declaration", "Category", FormulaValueType.String, false);
yield return ("品牌", "t_order_declaration", "Brand", FormulaValueType.String, false);
yield return ("品牌类型", "t_order_declaration", "BrandType", FormulaValueType.String, false);
yield return ("是否带磁带电", "t_order_declaration", "IsMagnetic", FormulaValueType.Boolean, false);
yield return ("配货信息", "t_order_declaration", "Distribution", FormulaValueType.String, false);
yield return ("材质", "t_order_declaration", "Material", FormulaValueType.String, false);
yield return ("英文材质", "t_order_declaration", "EnMaterial", FormulaValueType.String, false);
yield return ("用途", "t_order_declaration", "Purpose", FormulaValueType.String, false);
yield return ("申报属性", "t_order_declaration", "Attributes", FormulaValueType.String, false);
yield return ("原产国", "t_order_declaration", "OriginCountry", FormulaValueType.String, false);
yield return ("销售链接", "t_order_declaration", "SalesLink", FormulaValueType.String, false);
yield return ("型号", "t_order_declaration", "Model", FormulaValueType.String, false);
yield return ("规格", "t_order_declaration", "Specifications", FormulaValueType.String, false);
yield return ("申报备注", "t_order_declaration", "Comment", FormulaValueType.String, false);
// t_order_weight
yield return ("件重尺类型", "t_order_weight", "Type", FormulaValueType.String, false);
yield return ("长度", "t_order_weight", "Length", FormulaValueType.Number, false);
yield return ("宽度", "t_order_weight", "Width", FormulaValueType.Number, false);
yield return ("高度", "t_order_weight", "Height", FormulaValueType.Number, false);
yield return ("实重", "t_order_weight", "ActualWeight", FormulaValueType.Number, false);
yield return ("体积重", "t_order_weight", "VolumetricWeight", FormulaValueType.Number, false);
yield return ("计费重", "t_order_weight", "ChargeableWeight", FormulaValueType.Number, false);
yield return ("体积", "t_order_weight", "Cubic", FormulaValueType.Number, false);
// t_order_fee
yield return ("费用类型", "t_order_fee", "Type", FormulaValueType.String, false);
yield return ("费用项", "t_order_fee", "CostItem", FormulaValueType.String, false);
yield return ("费用金额", "t_order_fee", "Amount", FormulaValueType.Number, false);
yield return ("费用币种", "t_order_fee", "Currency", FormulaValueType.String, false);
yield return ("费用下游服务商", "t_order_fee", "DownstreamProvider", FormulaValueType.String, false);
yield return ("价格编号", "t_order_fee", "PriceNo", FormulaValueType.String, false);
yield return ("价格生效时间", "t_order_fee", "PriceEffectiveTime", FormulaValueType.DateTime, false);
yield return ("计费阶段", "t_order_fee", "ChargingStage", FormulaValueType.String, false);
// t_customer
yield return ("客户编码", "t_customer", "CustomerCode", FormulaValueType.String, false);
yield return ("客户", "t_customer", "CustomerName", FormulaValueType.String, false);
yield return ("客户邮箱", "t_customer", "Email", FormulaValueType.String, false);
yield return ("客户手机", "t_customer", "Phone", FormulaValueType.String, false);
yield return ("客户余额", "t_customer", "Balance", FormulaValueType.Number, false);
yield return ("客户总额度", "t_customer", "TotalQuota", FormulaValueType.Number, false);
yield return ("客户已用额度", "t_customer", "UsedQuota", FormulaValueType.Number, false);
yield return ("客户状态", "t_customer", "Status", FormulaValueType.String, false);
yield return ("客户备注", "t_customer", "Remark", FormulaValueType.String, false);
yield return ("销售", "t_customer", "Salesman", FormulaValueType.String, false);
yield return ("客服", "t_customer", "CustomerService", FormulaValueType.String, false);
yield return ("客户组", "t_customer", "CustomerGroup", FormulaValueType.String, false);
// virtual
yield return ("单件最大长度", "_virtual", "PieceMaxLength", FormulaValueType.Number, true);
yield return ("单件最大宽度", "_virtual", "PieceMaxWidth", FormulaValueType.Number, true);
yield return ("单件最大高度", "_virtual", "PieceMaxHeight", FormulaValueType.Number, true);
yield return ("单件长宽高之和", "_virtual", "PieceSumLwh", FormulaValueType.Number, true);
}
}