Blame view

netcore/src/Modularity/Extend/NCC.Extend/AttendanceMonthGroupDisplayHelper.cs 1.91 KB
db9c79c0   “wangming”   feat: punch-based...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
  using System.Collections.Generic;
  using System.Linq;
  using NCC.Extend.Entitys.lq_attendance_record;
  
  namespace NCC.Extend
  {
      /// <summary>
      /// 按自然月从打卡记录中的考勤组名称快照生成展示文案(多月多组按首次出现日期用  连接)。
      /// </summary>
      public static class AttendanceMonthGroupDisplayHelper
      {
          /// <summary>
          /// 根据当月有效打卡记录中的 <c>F_AttendanceGroupName</c> 聚合展示;无任何快照时使用主档分组名称;仍无则「无」。
          /// </summary>
          /// <param name="monthRecords">该员工该自然月内的打卡记录(通常已为有效记录)</param>
          /// <param name="profileAttendanceGroupName">员工主档当前绑定的考勤组名称(兜底)</param>
          public static string BuildDisplay(
              IEnumerable<LqAttendanceRecordEntity> monthRecords,
              string profileAttendanceGroupName)
          {
              var list = monthRecords == null
                  ? new List<LqAttendanceRecordEntity>()
                  : monthRecords.Where(r => r != null).ToList();
  
              var orderedNames = list
                  .Where(r => !string.IsNullOrWhiteSpace(r.AttendanceGroupName))
                  .Select(r => new { Name = r.AttendanceGroupName.Trim(), Date = r.AttendanceDate.Date })
                  .GroupBy(x => x.Name)
                  .Select(g => new { Name = g.Key, FirstDate = g.Min(x => x.Date) })
                  .OrderBy(x => x.FirstDate)
                  .Select(x => x.Name)
                  .ToList();
  
              if (orderedNames.Count == 0)
              {
                  return string.IsNullOrWhiteSpace(profileAttendanceGroupName)
                      ? "无"
                      : profileAttendanceGroupName.Trim();
              }
  
              return orderedNames.Count == 1
                  ? orderedNames[0]
                  : string.Join("→", orderedNames);
          }
      }
  }