93 lines
3.4 KiB
C#
93 lines
3.4 KiB
C#
using Dlhis.ScheduledTask.Dto;
|
|
using Dlhis.ScheduledTask.Extensions;
|
|
using System.Text;
|
|
|
|
namespace Dlhis.ScheduledTask.Comparers
|
|
{
|
|
internal class ZHRS_PERSONComparer : IEqualityComparer<PersonDetail>
|
|
{
|
|
public bool Equals(PersonDetail x, PersonDetail y)
|
|
{
|
|
if (ReferenceEquals(x, y)) return true;
|
|
if (ReferenceEquals(x, null)) return false;
|
|
if (ReferenceEquals(y, null)) return false;
|
|
|
|
return x.PERNR == y.PERNR
|
|
&& x.WERKS == y.WERKS
|
|
&& SubString(x.ORGEH, 10) == SubString(y.ORGEH, 10)
|
|
&& SubString(x.NAME, 50) == SubString(y.NAME, 50)
|
|
&& SafeParseDate(x.GBDAT) == SafeParseDate(y.GBDAT)
|
|
&& SubString(x.ZZ_SFZH, 18) == SubString(y.ZZ_SFZH, 18)
|
|
&& SubString(x.ZWORKCODE, 50) == SubString(y.ZWORKCODE, 50)
|
|
&& SubString(x.ZMOBILE, 20) == SubString(y.ZMOBILE, 20)
|
|
&& x.ZSTATUS == y.ZSTATUS
|
|
&& x.KOSTL == y.KOSTL
|
|
&& x.ZZ_ZD == y.ZZ_ZD
|
|
&& x.Z_ZJ == y.Z_ZJ
|
|
&& x.ZRZRQ == y.ZRZRQ
|
|
&& SafeParseDate(x.ZLZRQ) == SafeParseDate(y.ZLZRQ)
|
|
&& x.STELL == y.STELL
|
|
&& x.STELL_NM == y.STELL_NM
|
|
&& x.MASSN == y.MASSN
|
|
&& x.MNTXT == y.MNTXT
|
|
&& (x.ZXUELI ?? string.Empty).Trim() == (y.ZXUELI ?? string.Empty).Trim()
|
|
&& (x.ZZ_KLX ?? string.Empty) == (y.ZZ_KLX ?? string.Empty);
|
|
}
|
|
|
|
public int GetHashCode(PersonDetail obj)
|
|
{
|
|
return obj.PERNR.SafeGetHashCode()
|
|
^ obj.WERKS.SafeGetHashCode()
|
|
^ SubString(obj.ORGEH, 10).SafeGetHashCode()
|
|
^ SubString(obj.NAME, 50).SafeGetHashCode()
|
|
^ SafeParseDate(obj.GBDAT).SafeGetHashCode()
|
|
^ SubString(obj.ZZ_SFZH, 18).SafeGetHashCode()
|
|
^ SubString(obj.ZWORKCODE, 50).SafeGetHashCode()
|
|
^ SubString(obj.ZMOBILE, 20).SafeGetHashCode()
|
|
^ obj.ZSTATUS.SafeGetHashCode()
|
|
^ obj.KOSTL.SafeGetHashCode()
|
|
^ obj.ZZ_ZD.SafeGetHashCode()
|
|
^ obj.Z_ZJ.SafeGetHashCode()
|
|
^ obj.ZRZRQ.SafeGetHashCode()
|
|
^ SafeParseDate(obj.ZLZRQ).SafeGetHashCode()
|
|
^ obj.STELL.SafeGetHashCode()
|
|
^ obj.STELL_NM.SafeGetHashCode()
|
|
^ obj.MASSN.SafeGetHashCode()
|
|
^ obj.MNTXT.SafeGetHashCode()
|
|
^ obj.ZXUELI.SafeGetHashCode()
|
|
^ (obj.ZZ_KLX ?? "").SafeGetHashCode();
|
|
}
|
|
|
|
|
|
private string SubString(string s, int len)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(s))
|
|
{
|
|
return s?.Trim() ?? "";
|
|
}
|
|
s = s.Trim();
|
|
var bs = Encoding.UTF8.GetBytes(s);
|
|
if (bs.Length <= len)
|
|
{
|
|
return s;
|
|
}
|
|
var bytes = new byte[len];
|
|
Buffer.BlockCopy(bs, 0, bytes, 0, len);
|
|
return Encoding.UTF8.GetString(bytes);
|
|
}
|
|
|
|
|
|
private DateTime? SafeParseDate(string str)
|
|
{
|
|
if (str == "0000-00-00" || str == "0001-01-01" || str == "1900-01-01")
|
|
return null;
|
|
|
|
if (DateTime.TryParse(str, out var d))
|
|
{
|
|
return d;
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
}
|