fix: 同步问题

This commit is contained in:
2026-05-13 12:43:35 +08:00
parent 055ee094a4
commit 2d2adffb9b
2 changed files with 37 additions and 32 deletions

View File

@@ -8,6 +8,10 @@ namespace Dlhis.Basic.Organization.Comparers;
/// </summary> /// </summary>
public class SapPersonComparer : IEqualityComparer<SapPersonItem> 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) public bool Equals(SapPersonItem x, SapPersonItem y)
{ {
if (ReferenceEquals(x, y)) return true; if (ReferenceEquals(x, y)) return true;
@@ -19,25 +23,26 @@ public class SapPersonComparer : IEqualityComparer<SapPersonItem>
&& x.ORGEH == y.ORGEH && x.ORGEH == y.ORGEH
&& x.NAME == y.NAME && x.NAME == y.NAME
&& x.GBDAT == y.GBDAT && 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.ZWORKCODE == y.ZWORKCODE
&& (x.ZMOBILE ?? string.Empty) == (y.ZMOBILE ?? string.Empty) && Normalize(x.ZMOBILE) == Normalize(y.ZMOBILE)
&& (x.ZSTATUS ?? string.Empty) == (y.ZSTATUS ?? string.Empty) && Normalize(x.ZSTATUS) == Normalize(y.ZSTATUS)
&& (x.KOSTL_XJ ?? string.Empty) == (y.KOSTL_XJ ?? string.Empty) && Normalize(x.KOSTL_XJ) == Normalize(y.KOSTL_XJ)
&& (x.NAME2 ?? string.Empty) == (y.NAME2 ?? string.Empty) && Normalize(x.NAME2) == Normalize(y.NAME2)
&& (x.ZZ_ZD ?? string.Empty) == (y.ZZ_ZD ?? string.Empty) && Normalize(x.ZZ_ZD) == Normalize(y.ZZ_ZD)
&& (x.Z_ZJ ?? string.Empty) == (y.Z_ZJ ?? string.Empty) && Normalize(x.Z_ZJ) == Normalize(y.Z_ZJ)
&& x.ZRZRQ == y.ZRZRQ && x.ZRZRQ == y.ZRZRQ
&& x.ZLZRQ == y.ZLZRQ && x.ZLZRQ == y.ZLZRQ
&& (x.STELL ?? string.Empty) == (y.STELL ?? string.Empty) // GainfoSapEntity only persists the position code in STELL using SAP.PLANS.
&& (x.PLANS ?? string.Empty) == (y.PLANS ?? string.Empty) // SAP.STELL is not stored, so comparing it here causes permanent false diffs.
&& (x.STELL_NM ?? string.Empty) == (y.STELL_NM ?? string.Empty) && Normalize(x.PLANS) == Normalize(y.PLANS)
&& (x.MASSN ?? string.Empty) == (y.MASSN ?? string.Empty) && Normalize(x.STELL_NM) == Normalize(y.STELL_NM)
&& (x.MNTXT ?? string.Empty) == (y.MNTXT ?? string.Empty) && Normalize(x.MASSN) == Normalize(y.MASSN)
&& Normalize(x.MNTXT) == Normalize(y.MNTXT)
//&& (x.ZXUELI ?? string.Empty).Trim() == (y.ZXUELI ?? string.Empty).Trim() //&& (x.ZXUELI ?? string.Empty).Trim() == (y.ZXUELI ?? string.Empty).Trim()
//&& (x.ZZ_KLX ?? string.Empty) == (y.ZZ_KLX ?? string.Empty) //&& (x.ZZ_KLX ?? string.Empty) == (y.ZZ_KLX ?? string.Empty)
&& (x.ZZ_GZDJD ?? string.Empty) == (y.ZZ_GZDJD ?? string.Empty) && Normalize(x.ZZ_GZDJD) == Normalize(y.ZZ_GZDJD)
&& (x.ZZ_GZDCQ ?? string.Empty) == (y.ZZ_GZDCQ ?? string.Empty) && Normalize(x.ZZ_GZDCQ) == Normalize(y.ZZ_GZDCQ)
; ;
} }
@@ -48,25 +53,24 @@ public class SapPersonComparer : IEqualityComparer<SapPersonItem>
^ obj.ORGEH.SafeGetHashCode() ^ obj.ORGEH.SafeGetHashCode()
^ obj.NAME.SafeGetHashCode() ^ obj.NAME.SafeGetHashCode()
^ obj.GBDAT.SafeGetHashCode() ^ obj.GBDAT.SafeGetHashCode()
^ obj.ZZ_SFZH.SafeGetHashCode() ^ NormalizeIdNo(obj.ZZ_SFZH).SafeGetHashCode()
^ obj.ZWORKCODE.SafeGetHashCode() ^ obj.ZWORKCODE.SafeGetHashCode()
^ obj.ZMOBILE.SafeGetHashCode() ^ Normalize(obj.ZMOBILE).SafeGetHashCode()
^ obj.ZSTATUS.SafeGetHashCode() ^ Normalize(obj.ZSTATUS).SafeGetHashCode()
^ obj.KOSTL_XJ.SafeGetHashCode() ^ Normalize(obj.KOSTL_XJ).SafeGetHashCode()
^ obj.NAME2.SafeGetHashCode() ^ Normalize(obj.NAME2).SafeGetHashCode()
^ obj.ZZ_ZD.SafeGetHashCode() ^ Normalize(obj.ZZ_ZD).SafeGetHashCode()
^ obj.Z_ZJ.SafeGetHashCode() ^ Normalize(obj.Z_ZJ).SafeGetHashCode()
^ obj.ZRZRQ.SafeGetHashCode() ^ obj.ZRZRQ.SafeGetHashCode()
^ obj.ZLZRQ.SafeGetHashCode() ^ obj.ZLZRQ.SafeGetHashCode()
^ obj.PLANS.SafeGetHashCode() ^ Normalize(obj.PLANS).SafeGetHashCode()
^ obj.STELL.SafeGetHashCode() ^ Normalize(obj.STELL_NM).SafeGetHashCode()
^ obj.STELL_NM.SafeGetHashCode() ^ Normalize(obj.MASSN).SafeGetHashCode()
^ obj.MASSN.SafeGetHashCode() ^ Normalize(obj.MNTXT).SafeGetHashCode()
^ obj.MNTXT.SafeGetHashCode()
//^ obj.ZXUELI.SafeGetHashCode() //^ obj.ZXUELI.SafeGetHashCode()
//^ obj.ZZ_KLX.SafeGetHashCode() //^ obj.ZZ_KLX.SafeGetHashCode()
^ obj.ZZ_GZDJD.SafeGetHashCode() ^ Normalize(obj.ZZ_GZDJD).SafeGetHashCode()
^ obj.ZZ_GZDCQ.SafeGetHashCode() ^ Normalize(obj.ZZ_GZDCQ).SafeGetHashCode()
; ;
return r; return r;

View File

@@ -453,8 +453,9 @@ public class GainfoUpdateService : IGainfoUpdateService
return sapList; return sapList;
} }
var needRemove = sapList.Intersect(last, new SapPersonComparer()); var comparer = new SapPersonComparer();
return sapList.Except(needRemove, new SapPersonComparer()).ToList(); var needRemove = sapList.Intersect(last, comparer);
return sapList.Except(needRemove, comparer).ToList();
} }