private Response onWhereCoworker(WhereCoworkerDTO userQuery) { Console.WriteLine(userQuery.ToJson(true)); var tp = new TimePeriodDTO() { StartTime = DateTimeOffset.Now.Date.Add(TimeSpan.Zero), EndTime = DateTimeOffset.Now.Date.Add(new TimeSpan(23, 59, 59)) }; Console.WriteLine("Default: " + tp.StartTime.ToString() + " " + tp.EndTime.ToString()); // if user hasn't entered any data and time -> set to current date and time if (userQuery.TimePeriod == null && (!userQuery.Date.HasValue) && userQuery.DateTimeObject == null && (!userQuery.Time.HasValue)) { userQuery.DateTimeObject = new DateTimeWraper(DateTimeOffset.UtcNow); } // recognize any possible time and data tp = RecognizeDate(userQuery.Date, oldTp: tp); tp = RecognizeTime(userQuery, oldTp: tp); tp = RecognizeDateTime(userQuery, oldTp: tp); // create params for Event Server request var whereHolderRequest = new HolderLocationPeriodDTO() { QueryType = ((DateTime.UtcNow - tp.StartTime)?.TotalMinutes < 15) ? QueryType.Type.WhereNow : QueryType.Type.Where, HolderName = userQuery.TargetName.Trim().Replace("?", ""), HolderMiddlename = userQuery.TargetMiddlename.Trim().Replace("?", ""), HolderSurname = userQuery.TargetLastname.Trim().Replace("?", ""), TimePeriod = ((DateTime.UtcNow - tp.StartTime)?.TotalMinutes < 15) ? new TimePeriodDTO() { StartTime = DateTimeOffset.Now.Date.Add(TimeSpan.Zero), EndTime = DateTimeOffset.Now.Date.Add(new TimeSpan(23, 59, 59)) } : tp }; Console.WriteLine(whereHolderRequest.ToJson(true)); foreach (var eventsListener in GlobalScope.CSEventsListeners) { eventsListener.PostCommand(new RequestHolderLocation(whereHolderRequest)); } // send response to Dialogflow (Dialogflow automatically resend it to Slack, Telegram, Skype, etc.) //return new ResponseWebHookIntent() { // FulfillmentText = $"*Буду искать:* '{whereHolderRequest.HolderName} {whereHolderRequest.HolderMiddlename} {whereHolderRequest.HolderSurname}'\n" + // $"*c :* {whereHolderRequest.TimePeriod.StartTime.ToString()}\n" + // $"*по:* {whereHolderRequest.TimePeriod.EndTime.ToString()}" //}.ToJson(); return(200); }
private Response onWhenCoworker(WhenCoworkerDTO userQuery) { //Console.WriteLine(userQuery.ToJson(true)); var tp = new TimePeriodDTO() { StartTime = DateTimeOffset.UtcNow.Date.Add(TimeSpan.Zero), EndTime = DateTimeOffset.UtcNow.Date.Add(new TimeSpan(23, 59, 59)) }; // if user hasn't entered any data and time -> set to current date and time if (!userQuery.Date.HasValue) { userQuery.Date = DateTimeOffset.UtcNow; } // recognize any possible time and data tp = RecognizeDate(date: userQuery.Date, oldTp: tp); // create params for Event Server request var holderRequest = new HolderLocationPeriodDTO() { QueryType = QueryType.GetType(userQuery.QueryType), HolderName = userQuery.TargetName.Trim().Replace("?", ""), HolderMiddlename = userQuery.TargetMiddlename.Trim().Replace("?", ""), HolderSurname = userQuery.TargetLastname.Trim().Replace("?", ""), TimePeriod = tp, IsHolderIn = userQuery.InOrOut == null ? new bool?() : userQuery.InOrOut.Trim().Equals("пришла", StringComparison.OrdinalIgnoreCase) ? true : false }; Console.WriteLine(holderRequest.ToJson(true)); foreach (var eventsListener in GlobalScope.CSEventsListeners) { eventsListener.PostCommand(new RequestHolderLocation(holderRequest)); } return(200); }
private void onServerRequest(object sender, CommandBase command) { Log.Trace("onServerRequest: " + command?.Command); try { string cmdType = command.Command; if (cmdType == RequestHolderLocation.Name) { HolderLocationPeriodDTO holderLocationPeriod = HolderLocationPeriodDTO.FromObject(command.Params); var holderLocationDTO = eventService.GetHolderLocations(holderLocationPeriod).Result; holderLocationDTO.QueryType = holderLocationPeriod.QueryType; holderLocationDTO.IsHolderIn = holderLocationPeriod.IsHolderIn; var response = new ResponseHolderLocation(holderLocationDTO); comunicator.NotifyAll(response, cancellationToken); } } catch (Exception e) { Log.Warn(e.Message + "\n" + e.StackTrace); } }
public async Task <HolderLocationDTO> GetHolderLocations(HolderLocationPeriodDTO locationPeriod) { DateTime startTime = locationPeriod.TimePeriod.StartTime.Value.LocalDateTime; DateTime endTime = locationPeriod.TimePeriod.EndTime.Value.LocalDateTime; Log.Trace("from: " + startTime.ToString() + " to: " + endTime.ToString()); var query = from ev in unitOfWork.Events55.GetAll(true) join startZone55 in unitOfWork.Zones55.GetAll(true) on ev.StartZoneID equals startZone55.colID into startZone55_temp join targetZone55 in unitOfWork.Zones55.GetAll(true) on ev.StartZoneID equals targetZone55.colID into targetZone55_temp join controlPoint in unitOfWork.ControlPoints.GetAll(true) on ev.ControlPointID equals controlPoint.colID into controlPoint_temp join holder in (from eml in unitOfWork.Employees.GetAll(true) select new { Id = eml.colID, Surname = eml.colSurname, Name = eml.colName, Middlename = eml.colMiddlename, StateCode = "", DepartmentID = eml.colDepartmentID, Department = eml.colDepartment, TabNumber = eml.colTabNumber, Photo = eml.colPhoto, HolderType = "Employe" }).Concat (from vis in unitOfWork.Visitors.GetAll(true) select new { Id = vis.colID, Surname = vis.colSurname, Name = vis.colName, Middlename = vis.colMiddlename, StateCode = "", DepartmentID = (int?)null, Department = "", TabNumber = "", Photo = vis.colPhoto, HolderType = "Visitor" } ) on ev.HolderID equals holder.Id into holder_temp from startZone55 in startZone55_temp.DefaultIfEmpty() from targetZone55 in targetZone55_temp.DefaultIfEmpty() from controlPoint in controlPoint_temp.DefaultIfEmpty() from holder in holder_temp.DefaultIfEmpty() where (( holder.Name.ToLower().Contains(locationPeriod.HolderName.ToLower()) && holder.Middlename.ToLower().Contains(locationPeriod.HolderMiddlename.ToLower()) && holder.Surname.ToLower().Contains(locationPeriod.HolderSurname.ToLower()) ) || ( holder.Name.ToLower().Contains(locationPeriod.HolderName.ToLower()) && holder.Surname.ToLower().Contains(locationPeriod.HolderSurname.ToLower()) )) && ev.EventTime >= startTime && ev.EventTime <= endTime orderby ev.EventTime descending select new { Event55 = ev, StartZone = startZone55, TargetZone = targetZone55, ControlPoint = controlPoint, Holder = holder }; var holderEvents = await query.Take(2000).ToListAsync(cancellationToken); // create and fill events information var eventsInfos = new List <EventInfoDTO>(); foreach (var eventInfo in holderEvents) { eventsInfos.Add(new EventInfoDTO() { Direction = eventInfo?.Event55?.Direction, EventCode = eventInfo?.Event55?.EventCode, EventTime = eventInfo?.Event55?.EventTime.ToUniversalTime(), StartAreaName = eventInfo?.StartZone?.colName, TargetAreaName = eventInfo?.TargetZone?.colName, ObjectType = eventInfo?.ControlPoint?.colType, ObjectName = eventInfo?.ControlPoint?.colName }); } return(new HolderLocationDTO() { TimePeriod = locationPeriod.TimePeriod, EventsInfo = eventsInfos, HolderInfo = (holderEvents?.Count == 0) // fill Info only about holder. Other fields is null ? new EventDTO() : new EventDTO() { CardNumber = holderEvents[0]?.Event55?.CardNumber, HolderType = holderEvents[0]?.Holder?.HolderType, HolderName = holderEvents[0]?.Holder?.Name, HolderMiddlename = holderEvents[0]?.Holder?.Middlename, HolderSurname = holderEvents[0]?.Holder?.Surname, HolderDepartment = holderEvents[0]?.Holder?.Department, HolderTabNumber = holderEvents[0]?.Holder?.TabNumber, HolderPhoto = holderEvents[0]?.Holder?.Photo } }); }
private async Task processResult(string message) { if (CS_EventsNotifierSlackBot.Global.GlobalScope.CSEventsListeners.Count > 1) { return; } await Task.Delay(1000); try { Console.WriteLine("Emulator received: " + message); CommandBase command = CommandBase.FromJson(message); string cmdType = command.Command; if (cmdType == RequestHolderLocation.Name) { HolderLocationPeriodDTO locationPeriod = HolderLocationPeriodDTO.FromObject(command.Params); string keyToFindLast = locationPeriod.HolderName.Trim().ToLower() + locationPeriod.HolderMiddlename.Trim().ToLower() + locationPeriod.HolderSurname.Trim().ToLower() + locationPeriod.TimePeriod.EndTime?.Date; List <EventInfoDTO> eventsInfo; if (lastGeneratedEvents.ContainsKey(keyToFindLast)) { lastGeneratedEvents.TryGetValue(keyToFindLast, out eventsInfo); eventsInfo = eventsInfo.Where(ev => ev.EventTime >= locationPeriod.TimePeriod.StartTime && ev.EventTime <= locationPeriod.TimePeriod.EndTime).ToList(); } else { eventsInfo = generateEvents(locationPeriod.TimePeriod); lastGeneratedEvents.Add(keyToFindLast, eventsInfo); } // Emulatig Response from Database var holderLocationDTO = new HolderLocationDTO() { QueryType = locationPeriod.QueryType, IsHolderIn = locationPeriod.IsHolderIn, TimePeriod = locationPeriod.TimePeriod, HolderInfo = new EventDTO() { CardNumber = 421449585, HolderType = "\u041F\u043E\u0441\u0435\u0442\u0438\u0442\u0435\u043B\u044C", //Посетитель HolderName = locationPeriod.HolderName, HolderMiddlename = locationPeriod.HolderMiddlename, HolderSurname = locationPeriod.HolderSurname, HolderDepartment = "\u041E\u0442\u0434\u0435\u043B \u043A\u0430\u0434\u0440\u043E\u0432", //Отдел кадров HolderTabNumber = "\u0422\u0430\u0431\u0435\u043B\u044C 845" //Табель 845 }, EventsInfo = eventsInfo }; var response = new ResponseHolderLocation(holderLocationDTO); byte[] buffer = Encoding.UTF8.GetBytes(response.ToJson()); await webSocket.SendAsync(new ArraySegment <byte>(buffer), WebSocketMessageType.Text, true, token); } } catch (Exception e) { Console.WriteLine(e.ToString()); } }