【解決方法】ZKマシンから今日の日付の最後の行を取得するにはどうすればよいですか?


問題

How to get last row in date today from zk machine ?

私はマシン上の従業員の出勤に依存してアプリケーションに取り組んでいます

データを取得するにはマシン上のログ ファイル データに依存する必要があります

私はすでに csharp を使用してマシンに接続しており、勤怠のすべてのデータを取得しています

しかし、マシンごとに最後の行を取得する必要があります。つまり、今日の 1 日あたりの最後の出席行を意味します。

私はすでにzkemkeeper.dllを追加しました

私が試したこと:

ICollection<MachineInfo> lstMachineInfo = manipulator.GetLogData(objZkeeper, int.Parse(tbxMachineNumber.Text.Trim()));

                if (lstMachineInfo != null && lstMachineInfo.Count > 0)
                {
                    BindToGridView(lstMachineInfo);
                    ShowStatusBar(lstMachineInfo.Count + " records found !!", true);
                }
                else
                    DisplayListOutput("No records found");

解決策 1

... = lstMachineInfo.Where( x => x.date < DateTime.Now ).Last();
or
... = lstMachineInfo.Where(...).OrderDescending( x => x.date ).First();
or
etc.

解決策 2

public ICollection<MachineInfo> GetLogData(ZkemClient objZkeeper, int machineNumber)
       {
           string dwEnrollNumber1 = "";
           int dwVerifyMode = 0;
           int dwInOutMode = 0;
           int dwYear = 0;
           int dwMonth = 0;
           int dwDay = 0;
           int dwHour = 0;
           int dwMinute = 0;
           int dwSecond = 0;
           int dwWorkCode = 0;
           ICollection<MachineInfo> lstEnrollData = new List<MachineInfo>();

           objZkeeper.ReadAllGLogData(machineNumber);
           while (objZkeeper.SSR_GetGeneralLogData(machineNumber, out dwEnrollNumber1, out dwVerifyMode, out dwInOutMode, out dwYear, out dwMonth, out dwDay, out dwHour, out dwMinute, out dwSecond, ref dwWorkCode))
           {
               string inputDate = new DateTime(dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond).ToString();
               DateTime today = DateTime.Today;
               lstEnrollData = lstEnrollData.Where(info => info.DateTimeRecord.StartsWith(today.ToString("yyyy-MM-dd")))
                                           .ToList();

               // Group the logs by employee and get the last attendance record for each employee
               lstEnrollData = lstEnrollData.GroupBy(info => info.IndRegID)
                                            .Select(group => group.OrderByDescending(info => info.DateTimeRecord).First())
                                            .ToList();

               MachineInfo objInfo = new MachineInfo();
               objInfo.MachineNumber = machineNumber;
               objInfo.IndRegID = int.Parse(dwEnrollNumber1);
               objInfo.DateTimeRecord = inputDate;
               lstEnrollData.Add(objInfo);
           }
           // Make the API call for each attendance record

           return lstEnrollData;
       }

コメント

タイトルとURLをコピーしました