diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs index ff54b58d..9cef8d54 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs @@ -504,6 +504,18 @@ public class GainfoUpdateService : IGainfoUpdateService } } + if (modifiedPersons.Count > 0) + { + var first = modifiedPersons[0]; + SapPersonItem historyPerson = null; + var hasHistory = !string.IsNullOrWhiteSpace(first.ZWORKCODE) && lastMap.TryGetValue(first.ZWORKCODE, out historyPerson); + var diffMessage = hasHistory + ? string.Join("; ", GetFirstDiffFields(first, historyPerson)) + : "历史记录不存在"; + _logger.LogWarning("SAP首条差异 ZWORKCODE:{workCode}, HasHistory:{hasHistory}, Diffs:{diffs}", + first.ZWORKCODE, hasHistory, diffMessage); + } + return modifiedPersons; } @@ -616,4 +628,48 @@ public class GainfoUpdateService : IGainfoUpdateService idNo = idNo.TrimStart(); return idNo[..6]; } + + private static List GetFirstDiffFields(SapPersonItem current, SapPersonItem history) + { + var diffs = new List(); + AddDiff(diffs, "PERNR", current.PERNR, history.PERNR); + AddDiff(diffs, "WERKS", current.WERKS, history.WERKS); + AddDiff(diffs, "ORGEH", current.ORGEH, history.ORGEH); + AddDiff(diffs, "NAME", current.NAME, history.NAME); + AddDiff(diffs, "GBDAT", FormatDate(current.GBDAT), FormatDate(history.GBDAT)); + AddDiff(diffs, "ZZ_SFZH", NormalizeIdNo(current.ZZ_SFZH), NormalizeIdNo(history.ZZ_SFZH)); + AddDiff(diffs, "ZWORKCODE", current.ZWORKCODE, history.ZWORKCODE); + AddDiff(diffs, "ZMOBILE", Normalize(current.ZMOBILE), Normalize(history.ZMOBILE)); + AddDiff(diffs, "ZSTATUS", Normalize(current.ZSTATUS), Normalize(history.ZSTATUS)); + AddDiff(diffs, "KOSTL_XJ", Normalize(current.KOSTL_XJ), Normalize(history.KOSTL_XJ)); + AddDiff(diffs, "NAME2", Normalize(current.NAME2), Normalize(history.NAME2)); + AddDiff(diffs, "ZZ_ZD", Normalize(current.ZZ_ZD), Normalize(history.ZZ_ZD)); + AddDiff(diffs, "Z_ZJ", Normalize(current.Z_ZJ), Normalize(history.Z_ZJ)); + AddDiff(diffs, "ZRZRQ", FormatDate(current.ZRZRQ), FormatDate(history.ZRZRQ)); + AddDiff(diffs, "ZLZRQ", FormatDate(current.ZLZRQ), FormatDate(history.ZLZRQ)); + AddDiff(diffs, "PLANS", Normalize(current.PLANS), Normalize(history.PLANS)); + AddDiff(diffs, "STELL_NM", Normalize(current.STELL_NM), Normalize(history.STELL_NM)); + AddDiff(diffs, "MASSN", Normalize(current.MASSN), Normalize(history.MASSN)); + AddDiff(diffs, "MNTXT", Normalize(current.MNTXT), Normalize(history.MNTXT)); + AddDiff(diffs, "ZZ_GZDJD", Normalize(current.ZZ_GZDJD), Normalize(history.ZZ_GZDJD)); + AddDiff(diffs, "ZZ_GZDCQ", Normalize(current.ZZ_GZDCQ), Normalize(history.ZZ_GZDCQ)); + + return diffs; + } + + private static void AddDiff(List diffs, string field, string current, string history) + { + if (!string.Equals(current ?? string.Empty, history ?? string.Empty, StringComparison.Ordinal)) + { + diffs.Add($"{field}: [{history}] -> [{current}]"); + } + } + + private static string Normalize(string value) => value?.Trim() ?? string.Empty; + + private static string NormalizeIdNo(string value) => value?.TrimStart() ?? string.Empty; + + private static string FormatDate(DateTime? value) => value?.ToString("yyyy-MM-dd HH:mm:ss") ?? string.Empty; + + private static string FormatDate(DateTime value) => value.ToString("yyyy-MM-dd HH:mm:ss"); }