using DS.WMS.Core.Invoice.Dtos;
using DS.WMS.Core.Op.Entity;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.Serialization;
namespace DS.WMS.Core.Application.Dtos
{
///
/// 业务ID与类型
///
public class BizItem
{
public static readonly BizItemComparer DefaultComparer = new();
///
/// 业务ID
///
public long Id { get; set; }
///
/// 业务类型
///
public BusinessType BusinessType { get; set; }
public class BizItemComparer : IEqualityComparer
{
public bool Equals(BizItem? x, BizItem? y)
{
if (x == null || y == null)
return false;
return x.Id == y.Id && x.BusinessType == y.BusinessType;
}
public int GetHashCode([DisallowNull] BizItem obj)
{
return obj.Id.GetHashCode() ^ (int)obj.BusinessType;
}
}
}
///
/// 费用对象/单位
///
public class FeeClient : BizItem
{
///
/// 费用对象ID
///
public long CustomerId { get; set; }
///
/// 汇率信息
///
public List? ExchangeRates { get; set; }
}
public class BizOperation : IValidatableObject
{
///
/// 请求值(object类型,根据业务按需传值)
///
public object Value { get; set; }
///
/// 业务ID与类型
///
public List? Items { get; set; }
///
/// 业务ID
///
[IgnoreDataMember]
public IEnumerable? Ids => Items?.Select(x => x.Id).Distinct();
///
/// 业务类型
///
[IgnoreDataMember]
public IEnumerable? Types => Items?.Select(x => x.BusinessType).Distinct();
public IEnumerable Validate(ValidationContext validationContext)
{
if (Items == null || Items.Count == 0)
{
yield return new ValidationResult($"缺少请求参数:{nameof(Items)}");
}
}
}
public class BizOperation : BizOperation
{
///
/// 请求值(根据业务按需传值)
///
public new T Value { get; set; }
}
}