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>
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;
@@ -19,25 +23,26 @@ public class SapPersonComparer : IEqualityComparer<SapPersonItem>
&& 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<SapPersonItem>
^ 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;
}
}
}

View File

@@ -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];
}
}
}