using System.Text.Json;
using Fake.Application;
using Oms.Domain.OrdersAggregate.Entities;
namespace Oms.Application.Services.Orders.Templates;
///
/// 解析模板导入时使用的列映射配置。
///
public static class OrderTemplateImportMapping
{
public static void EnsureTemplateReadyForImport(OrderTemplate template)
{
if (!string.Equals(template.Type, "custom", StringComparison.OrdinalIgnoreCase))
{
return;
}
if (!string.Equals(template.MappingStatus, OrderTemplateMappingStatus.Ready, StringComparison.OrdinalIgnoreCase))
{
throw new BusinessException("自定义模板尚未完成字段映射,请先配置并保存映射");
}
if (string.IsNullOrWhiteSpace(template.ColumnMappingJson))
{
throw new BusinessException("自定义模板映射配置为空");
}
}
public static OrderTemplateColumnMappingDocument Resolve(OrderTemplate template)
{
var standardKey = template.StandardTemplateKey
?? template.TemplateKey
?? OrderTemplateKeys.DedicatedSmallParcel;
if (string.Equals(template.Type, "custom", StringComparison.OrdinalIgnoreCase))
{
return Deserialize(template.ColumnMappingJson)
?? throw new BusinessException("自定义模板映射配置无效");
}
return BuildStandard(standardKey);
}
public static OrderTemplateColumnMappingDocument BuildStandard(string templateKey)
{
var fields = OrderTemplateFieldRegistry.GetFields(templateKey);
return new OrderTemplateColumnMappingDocument
{
StandardTemplateKey = templateKey,
HeaderRowIndex = 1,
DataStartRowIndex = 2,
Mappings = fields.Select(field => new OrderTemplateColumnMappingItem
{
StandardFieldKey = field.FieldKey,
SourceColumn = field.Label,
Required = field.Required
}).ToList()
};
}
public static OrderTemplateColumnMappingDocument? Deserialize(string? json)
{
if (string.IsNullOrWhiteSpace(json))
{
return null;
}
try
{
return JsonSerializer.Deserialize(json);
}
catch
{
return null;
}
}
}