Files
jinko.yikatong/Src/Dlhis.Basic/Organization/Comparers/SapPersonComparer.cs
2026-05-13 12:43:35 +08:00

79 lines
3.4 KiB
C#

using Dlhis.Basic.Organization.Services.Implements;
using Dlhis.Jip.Api.Dto;
namespace Dlhis.Basic.Organization.Comparers;
/// <summary>
/// 人员信息比较器
/// </summary>
public class SapPersonComparer : IEqualityComparer<SapPersonItem>
{
private static string Normalize(string value) => value?.Trim() ?? string.Empty;
private static string NormalizeIdNo(string value) => value?.TrimStart() ?? string.Empty;
public bool Equals(SapPersonItem x, SapPersonItem 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
&& x.ORGEH == y.ORGEH
&& x.NAME == y.NAME
&& x.GBDAT == y.GBDAT
&& NormalizeIdNo(x.ZZ_SFZH) == NormalizeIdNo(y.ZZ_SFZH)
&& x.ZWORKCODE == y.ZWORKCODE
&& Normalize(x.ZMOBILE) == Normalize(y.ZMOBILE)
&& Normalize(x.ZSTATUS) == Normalize(y.ZSTATUS)
&& Normalize(x.KOSTL_XJ) == Normalize(y.KOSTL_XJ)
&& Normalize(x.NAME2) == Normalize(y.NAME2)
&& Normalize(x.ZZ_ZD) == Normalize(y.ZZ_ZD)
&& Normalize(x.Z_ZJ) == Normalize(y.Z_ZJ)
&& x.ZRZRQ == y.ZRZRQ
&& x.ZLZRQ == y.ZLZRQ
// GainfoSapEntity only persists the position code in STELL using SAP.PLANS.
// SAP.STELL is not stored, so comparing it here causes permanent false diffs.
&& Normalize(x.PLANS) == Normalize(y.PLANS)
&& Normalize(x.STELL_NM) == Normalize(y.STELL_NM)
&& Normalize(x.MASSN) == Normalize(y.MASSN)
&& Normalize(x.MNTXT) == Normalize(y.MNTXT)
//&& (x.ZXUELI ?? string.Empty).Trim() == (y.ZXUELI ?? string.Empty).Trim()
//&& (x.ZZ_KLX ?? string.Empty) == (y.ZZ_KLX ?? string.Empty)
&& Normalize(x.ZZ_GZDJD) == Normalize(y.ZZ_GZDJD)
&& Normalize(x.ZZ_GZDCQ) == Normalize(y.ZZ_GZDCQ)
;
}
public int GetHashCode(SapPersonItem obj)
{
var r = obj.PERNR.SafeGetHashCode()
^ obj.WERKS.SafeGetHashCode()
^ obj.ORGEH.SafeGetHashCode()
^ obj.NAME.SafeGetHashCode()
^ obj.GBDAT.SafeGetHashCode()
^ NormalizeIdNo(obj.ZZ_SFZH).SafeGetHashCode()
^ obj.ZWORKCODE.SafeGetHashCode()
^ Normalize(obj.ZMOBILE).SafeGetHashCode()
^ Normalize(obj.ZSTATUS).SafeGetHashCode()
^ Normalize(obj.KOSTL_XJ).SafeGetHashCode()
^ Normalize(obj.NAME2).SafeGetHashCode()
^ Normalize(obj.ZZ_ZD).SafeGetHashCode()
^ Normalize(obj.Z_ZJ).SafeGetHashCode()
^ obj.ZRZRQ.SafeGetHashCode()
^ obj.ZLZRQ.SafeGetHashCode()
^ Normalize(obj.PLANS).SafeGetHashCode()
^ Normalize(obj.STELL_NM).SafeGetHashCode()
^ Normalize(obj.MASSN).SafeGetHashCode()
^ Normalize(obj.MNTXT).SafeGetHashCode()
//^ obj.ZXUELI.SafeGetHashCode()
//^ obj.ZZ_KLX.SafeGetHashCode()
^ Normalize(obj.ZZ_GZDJD).SafeGetHashCode()
^ Normalize(obj.ZZ_GZDCQ).SafeGetHashCode()
;
return r;
}
}