You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
2.4 KiB
C#

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