From 2d2adffb9b631d7e80b957cbfb08006cd0c9b6f2 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Wed, 13 May 2026 12:43:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=90=8C=E6=AD=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Comparers/SapPersonComparer.cs | 62 ++++++++++--------- .../Implements/GainfoUpdateService.cs | 7 ++- 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/Src/Dlhis.Basic/Organization/Comparers/SapPersonComparer.cs b/Src/Dlhis.Basic/Organization/Comparers/SapPersonComparer.cs index 90eb9479..563f66f1 100644 --- a/Src/Dlhis.Basic/Organization/Comparers/SapPersonComparer.cs +++ b/Src/Dlhis.Basic/Organization/Comparers/SapPersonComparer.cs @@ -8,6 +8,10 @@ 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; @@ -19,25 +23,26 @@ public class SapPersonComparer : IEqualityComparer && x.ORGEH == y.ORGEH && x.NAME == y.NAME && x.GBDAT == y.GBDAT - && (x.ZZ_SFZH ?? string.Empty) == (y.ZZ_SFZH ?? string.Empty) + && NormalizeIdNo(x.ZZ_SFZH) == NormalizeIdNo(y.ZZ_SFZH) && x.ZWORKCODE == y.ZWORKCODE - && (x.ZMOBILE ?? string.Empty) == (y.ZMOBILE ?? string.Empty) - && (x.ZSTATUS ?? string.Empty) == (y.ZSTATUS ?? string.Empty) - && (x.KOSTL_XJ ?? string.Empty) == (y.KOSTL_XJ ?? string.Empty) - && (x.NAME2 ?? string.Empty) == (y.NAME2 ?? string.Empty) - && (x.ZZ_ZD ?? string.Empty) == (y.ZZ_ZD ?? string.Empty) - && (x.Z_ZJ ?? string.Empty) == (y.Z_ZJ ?? string.Empty) + && 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 - && (x.STELL ?? string.Empty) == (y.STELL ?? string.Empty) - && (x.PLANS ?? string.Empty) == (y.PLANS ?? string.Empty) - && (x.STELL_NM ?? string.Empty) == (y.STELL_NM ?? string.Empty) - && (x.MASSN ?? string.Empty) == (y.MASSN ?? string.Empty) - && (x.MNTXT ?? string.Empty) == (y.MNTXT ?? string.Empty) + // 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) - && (x.ZZ_GZDJD ?? string.Empty) == (y.ZZ_GZDJD ?? string.Empty) - && (x.ZZ_GZDCQ ?? string.Empty) == (y.ZZ_GZDCQ ?? string.Empty) + && Normalize(x.ZZ_GZDJD) == Normalize(y.ZZ_GZDJD) + && Normalize(x.ZZ_GZDCQ) == Normalize(y.ZZ_GZDCQ) ; } @@ -48,27 +53,26 @@ public class SapPersonComparer : IEqualityComparer ^ obj.ORGEH.SafeGetHashCode() ^ obj.NAME.SafeGetHashCode() ^ obj.GBDAT.SafeGetHashCode() - ^ obj.ZZ_SFZH.SafeGetHashCode() + ^ NormalizeIdNo(obj.ZZ_SFZH).SafeGetHashCode() ^ obj.ZWORKCODE.SafeGetHashCode() - ^ obj.ZMOBILE.SafeGetHashCode() - ^ obj.ZSTATUS.SafeGetHashCode() - ^ obj.KOSTL_XJ.SafeGetHashCode() - ^ obj.NAME2.SafeGetHashCode() - ^ obj.ZZ_ZD.SafeGetHashCode() - ^ obj.Z_ZJ.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() - ^ obj.PLANS.SafeGetHashCode() - ^ obj.STELL.SafeGetHashCode() - ^ obj.STELL_NM.SafeGetHashCode() - ^ obj.MASSN.SafeGetHashCode() - ^ obj.MNTXT.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() - ^ obj.ZZ_GZDJD.SafeGetHashCode() - ^ obj.ZZ_GZDCQ.SafeGetHashCode() + ^ Normalize(obj.ZZ_GZDJD).SafeGetHashCode() + ^ Normalize(obj.ZZ_GZDCQ).SafeGetHashCode() ; return r; } -} \ No newline at end of file +} diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs index dc385d8d..7afafed8 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs @@ -453,8 +453,9 @@ public class GainfoUpdateService : IGainfoUpdateService return sapList; } - var needRemove = sapList.Intersect(last, new SapPersonComparer()); - return sapList.Except(needRemove, new SapPersonComparer()).ToList(); + var comparer = new SapPersonComparer(); + var needRemove = sapList.Intersect(last, comparer); + return sapList.Except(needRemove, comparer).ToList(); } @@ -558,4 +559,4 @@ public class GainfoUpdateService : IGainfoUpdateService idNo = idNo.TrimStart(); return idNo[..6]; } -} \ No newline at end of file +}