using Dlhis.Basic.Organization.Services.Implements; using Dlhis.Jip.Api.Dto; namespace Dlhis.Basic.Organization.Comparers; /// /// 人员信息比较器 /// public class SapPersonComparer : IEqualityComparer { 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; } }