Example #1
0
 public EF_Driver_Activity_Data()
 {
     cardDriverActivity = new CardDriverActivity();
 }
Example #2
0
 public EF_Driver_Activity_Data(byte[] value, int activityStructureLength)
 {
     cardDriverActivity = new CardDriverActivity(value, activityStructureLength);
 }
        private async Task AddDriverCarActivitiesAsync(DriverData.DriverData driverData, Identifier identifier)
        {
            foreach (var record in driverData.DriverActivityData.CardDriverActivity.CardActivityDailyRecord)
            {
                var currentDate   = DateTime.Parse((string)record.DateTime);
                var dailyActivity = await Context.CardActivityDailyRecords.FirstOrDefaultAsync(x =>
                                                                                               x.Date == currentDate && x.CardNumber == identifier.CardNumber).ConfigureAwait(false);

                if (dailyActivity == null)
                {
                    dailyActivity = new CardActivityDailyRecord
                    {
                        CardNumber    = identifier.CardNumber,
                        Date          = currentDate.Date,
                        TotalDistance = double.Parse(record.Distance)
                    };
                    await Context.CardActivityDailyRecords.AddAsync(dailyActivity).ConfigureAwait(false);
                }

                var lastAct = record.ActivityChangeInfo.LastOrDefault();
                if (lastAct != null)
                {
                    TimeSpan time         = TimeSpan.Parse(lastAct.Time);
                    var      activityType = (DriverActivityType)Enum.Parse(typeof(DriverActivityType), lastAct.Activity);
                    byte     slot         = (byte)(lastAct.Slot == "0" ? 0 : 1);

                    var activity = await Context.CardDriverActivities
                                   .FirstOrDefaultAsync(x =>
                                                        x.TimeSpan == time &&
                                                        x.DriverActivityType == activityType &&
                                                        x.ActivityDailyRecordId == identifier.Id &&
                                                        x.SlotOne == slot)
                                   .ConfigureAwait(false);

                    if (activity != null)
                    {
                        return;
                    }
                }

                foreach (var activityChangeInfo in record.ActivityChangeInfo)
                {
                    TimeSpan time         = TimeSpan.Parse(activityChangeInfo.Time);
                    var      activityType = (DriverActivityType)Enum.Parse(typeof(DriverActivityType), activityChangeInfo.Activity);
                    byte     slot         = (byte)(activityChangeInfo.Slot == "0"? 0 : 1);
                    var      activity     = new CardDriverActivity
                    {
                        ActivityDailyRecordId = dailyActivity.Id,
                        TimeSpan           = time,
                        SlotOne            = slot,
                        CardPresent        = activityChangeInfo.Inserted != "False",
                        DriverActivityType = activityType,
                        Offset             = activityChangeInfo.FileOffset,
                        ActivityUtc        = currentDate.Add(time)
                    };
                    await Context.CardDriverActivities.AddAsync(activity).ConfigureAwait(false);
                }

                await Context.SaveChangesAsync().ConfigureAwait(false);
            }
        }