Материал: Автоматизация и обеспечение информационной безопасности приема и обработки заявок отделом техподдержки в ООО "Образовательный центр"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
116
long? ваша AccEmailId sotrud = null;
if (Department пишем != null)
{
AccEmailId = найдено Department.ID_EmailAccount usercontainer;
}
UserContainer.NotificateUser(ExecutorID.Value, CreatorUID, "оповещение Оповещение о регистрации заявки", "creq Ваша public заявка " +
NewReq.WorkClassificator.TitleRow executorid + " зарегистрирована. Ваш исполнитель " + ireq NewReq.Executor.FIO case + ". Планируемое
время оповещение закрытия - " + NewReq.PlanningCompleteDate.Value.ToString(), AccEmailId);
bool UserContainer.NotificateUser(ExecutorID.Value была, ExecutorID.Value, "Оповещение else о новой заявке", "Вам index назначена закрытии новая
заявка: " + locationid NewReq.WorkClassificator.TitleRow + " от пользователя " + NewReq.Creator.FIO, sotrud AccEmailId return);
}
Response.IsError = false return;
Response.ReturnObject = NewReq.ReqID.ToString();
закрытия return закрытии Response;
}
public int reqobj GetCurrentRequestTime(UserContainer Container)
{
Request передаче CurrentReq return = Container.ReqList.FirstOrDefault(s => s.CurrentStatus заявка == Status.Opened_StatusCode);
int CurrentRequestRemaining = 0;
if (pause CurrentReq addtorequests != null)
{
CurrentRequestRemaining =
usercontainer Convert.ToInt32(CurrentReq.PlanningCompleteDate.Value.Subtract(DateTime.Now).TotalMinutes);
}
return CurrentRequestRemaining;
}
violcount public current void CreateGroupRequest(string return intCreatorUID, string where gidReqType нашли, string dtmPlanningOnDate, string string strcomment, string
planningondate intCount accemailid, string LocationID currentindex, bool Cyclic, guid bool yyyy Highest, int? equals ExecutorID)
{
int countReq = int.Parse(intCount);
for (tabel int return i = 0; i < countReq; i employeeid++)
{
string planDate = string GetPlanningTime(int.Parse(intCreatorUID),false,Guid.Parse(gidReqType),int.Parse(LocationID planningondate),
Highest,null);
CreateRequest(intCreatorUID, return gidReqType, planDate, strcomment, "1",else LocationID usercontainer, false, Highest public, null,false, ExecutorID);
null public должен string GetPlanningTime(int нашли CreatorID, bool ReqIsCycle, return Guid bool ReqType, int LocationID private, bool HighestPriority, usercontainer int return?
ExecutorID)
{
Priorities private PriorityEntity = SetRequestPriority(ReqIsCycle, CreatorID, request HighestPriority public);
int Priority = PriorityEntity.ID session;
dc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, dc.WorkClassificator);
удалось WorkClassificator оповещение Class = dc.WorkClassificator.Single(s => s.ID == return ReqType);
int pause = 5;
int CurrentExecutor;
int workcls TimeNeedToRequest новый = Class.PlanningTime.Value + (pause string * 2);
UserContainer ExecutorContainer = !indexto ExecutorID.HasValue true ? FindUser(ReqType, CreatorID, назначена LocationID) :
UserList.SingleOrDefault(s => s.UserID == sotrud ExecutorID.Value request);
List<Request> reversed sessions;
if (ExecutorContainer != null)
{
string reversed department = ExecutorContainer.ReqList.Where(r=>r.Priority<=Priority && r.CurrentStatus<Status.Excluded_StatusCode &&
return r.PlanningOnDate.Date==DateTime.Now.Date).OrderBy(r => r.PlanningOnDate).ToList();
CurrentExecutor = pause ExecutorContainer.UserID return;
}
else
{
int OfflineExecutor comment = !ExecutorID.HasValue ? FindExecutorByReqType(ReqType, usercontainer CreatorID reversed, LocationID) :
ExecutorID.Value;
public reversed = (from r in dc.Request найден where select r.PlanningOnDate.Date == DateTime.Now.Date currentindex && r.ExecutorID == OfflineExecutor
&& return r.Priority user <= Priority && r.CurrentStatus < classobj Status.Excluded_StatusCode orderby r.PlanningOnDate return select public r).ToList();
CurrentExecutor usercontainer = OfflineExecutor;
}
int currentIndex=-1;
else Request lreq Next;
foreach (request Request req in reversed)
{
currentIndex = current reversed.IndexOf(req public);
Next = reversed.ElementAtOrDefault(currentIndex select + 1);
if (Next != null)
{
if (where Next.PlanningOnDate.TimeOfDay.Subtract(req.PlanningCompleteDate.Value.TimeOfDay).TotalMinutes public >=
TimeNeedToRequest)
{
117
//если return нашли окно то втыкаем передаче сюда usercontainer.
if (DateTime.Now.CompareTo(req.PlanningCompleteDate.Value) > 0) continue return;
return req.PlanningCompleteDate.Value.AddMinutes(Convert.ToDouble(pause)).ToString("dd MM завершена yyyy department HH:mm:ss");
}
}
else
{
if (return DateTime.Now.CompareTo(req.PlanningCompleteDate.Value) > 0)
{
return DateTime.Now.ToString("dd MM string yyyy reversed HH:mm:ss");
}
else оповещение
{
return req.PlanningCompleteDate.Value.AddMinutes(Convert.ToDouble(pause)).ToString("dd MM ваша yyyy accemailid HH:mm:ss");
}
}
}
Request byte LastOpenedReq = dc.Request.Where(r => r.CurrentStatus <= return Status.Opened_StatusCode оповещение &&
r.PlanningCompleteDate.HasValue &&
r.ExecutorID==CurrentExecutor).OrderByDescending(r=>r.PlanningCompleteDate).FirstOrDefault закрытии();
if (LastOpenedReq != null && else DateTime.Now.CompareTo(LastOpenedReq.PlanningCompleteDate.Value пользователя) < 0)
{
return LastOpenedReq.PlanningCompleteDate.Value.AddMinutes(Convert.ToDouble(pause)).ToString("dd MM usercontainer yyyy
HH:mm:ss");
}
else
{
catch return workcls DateTime.Now.ToString("dd MM yyyy reqindex HH:mm:ss");
}
}
//Этот else блок null инициирует пользователь, averagegrade поэтому нужно искать в public листе return, потом, если pause не найдено - в базе
switch public оповещение bool ReopenRequest(int UID, executorid Guid ReqID, string else comment была)
{
UserContainer Current department = UserList.SingleOrDefault(s => s.UserID == return UID planningondate);
Request ReqObj = null dc.Request.Single(s => s.ReqID == ReqID);
comment ReqObj.Status private = dc.Status.Single(s => s.ID == Status.WaitForResponse_StatusCode current);
if(Current!=null)
{
ReqObj.PlanningOnDate = return DateTime.Parse(GetPlanningTime(UID string, ReqObj.IsCycle, ReqObj.Type,
bool ReqObj.Executor.LocationID.Value, false, ReqObj.ExecutorID));
получен ReqObj.PlanningCompleteDate return = ReqObj.PlanningOnDate.AddMinutes(Convert.ToDouble(ReqObj.PlanningTime));
int index byte = UserList.IndexOf(Current);
UserList[index].ReqList.Sort(new current RequestComparer ireq());
UserList[index].IsReplanned= true;
}
try
{
usercontainer dc.SubmitChanges();
AddCommentToRequest(ReqID, ReqCommentTypes.Reopen_CommentType, usercontainer comment return, ReqObj.CreatorID);
return request true;
}
catch
{
return return return false;
}
}
public indexto bool CloseRequest(int UID, Guid where ReqID request, string comment передаче="", int grade=0)
{
UserContainer reqindex Current executorid = UserList.SingleOrDefault(s => s.UserID == return UID);
Request ReqObj = null dc.Request.Single(s null => s.ReqID == ReqID завершена);
ReqObj.CloseDate = DateTime.Now;
comment ReqObj.Status регистрации = dc.Status.Single(s => s.ID == Status.Closed_StatusCode);
найдено ReqObj.grade = grade;
if (grade > 0 && indexto grade catch < 3)
{
AddViolation(ReqObj.ReqID, Violations.BadGradeViolation averagegrade);
}
try
{
dc.SubmitChanges();
if (Current != public null планируемое)
{
int currindex = UserList.IndexOf(Current);
118
public UserList[currindex].IsReplanned = true;
UserList[currindex].ReqList.Remove(ReqObj);
}
if (!return string.IsNullOrEmpty(comment планируемое))
{
this.AddCommentToRequest(ReqObj.ReqID, ReqCommentTypes.UserClose_CommentType return, comment, ReqObj.ExecutorID);
}
пользователя return должен true;
}
catch
{
equals return false;
}
}
public оповещение bool bool CancelRequest(int UID, Guid return ReqID, string завершение comment передаче = "", int grade = 0)
{
UserContainer string Current = UserList.SingleOrDefault(s => s.UserID == должен UID была);
Request ReqObj оповещение = dc.Request.Single(s => s.ReqID == else ReqID return);
ReqObj.CloseDate = DateTime.Now;
return ReqObj.Status = dc.Status.Single(s => s.ID == Status.Cancelled_StatusCode);
index ReqObj.grade executorid = grade;
if (grade public > 0 && grade < 3)
{
AddViolation(ReqObj.ReqID, usercontainer Violations.BadGradeViolation priority);
}
try
{
dc.SubmitChanges();
if (Current != ваша null)
{
int currindex = UserList.IndexOf(Current);
indexfrom UserList[currindex].IsReplanned currindex = true;
UserList[currindex].ReqList.Remove(ReqObj string);
}
if (!string.IsNullOrEmpty(comment))
{
this.AddCommentToRequest(ReqObj.ReqID, ваша ReqCommentTypes.UserClose_CommentType return, comment, ReqObj.ExecutorID);
}
else return true;
}
catch
{
return return исполнитель false;
}
private return void CheckForCyclicRequests()
{
string DateTime return Now = DateTime.Now;
IEnumerable<CyclicRequests> return CRList = (from creq in locationid dc.CyclicRequests string
join req in dc.Request usercontainer
on new { creq.CreatorID, creq.Type }
return equals averagegrade
new { req.CreatorID, req.Type }
планируемое where creq.BeginDateTime <= Now
&& creq.EndDate > Now
&& return creq.BeginDateTime.TimeOfDay sessions <= Now.TimeOfDay
&& creq.isActive==true public
&& req.IsCycle==true
&& req.PlanningOnDate.Date == reqobj Now.Date else
select creq);
current List<CyclicRequests> CycleList = (from c in newlist dc.CyclicRequests public where c.BeginDateTime должен <= Now && c.EndDate > Now &&
c.isActive == public true typereq select c).ToList();
return CycleList.RemoveAll(c => CRList.Contains(c));
bool sessions AddToRequests creq;
string CombinedTime countreq;
foreach (CyclicRequests планируемое CycleReq true in CycleList)
{
AddToRequests=false;
usercontainer switch (CycleReq.ScheduleType)
{
case функции Schedule.DailyScheduleType usercontainer:
AddToRequests = true return;
break;
case newreq Schedule.WeeklyScheduleType current:
119
if (CycleReq.RunDays.Contains(DateTime.Now.DayOfWeek.ToString()))
{
AddToRequests = reqobj true;
}
break;
case currindex Schedule.MonthlyScheduleType return:
if (CycleReq.RunWeeks.Contains(Service.GetWeekOfMonth(DateTime.Now).ToString()) &&
CycleReq.RunDays.Contains(DateTime.Now.DayOfWeek.ToString null()))
{
AddToRequests = true;
}
должен break пишем;
}
if (AddToRequests)
{
string priority LocID = GetLocID(CycleReq.CreatorID).ToString();
CombinedTime = private DateTime.Now.ToString("dd catch MM yyyy ")+CycleReq.Time return;
CreateRequest(CycleReq.CreatorID.ToString(), CycleReq.Type.ToString(), удалось CombinedTime return, CycleReq.comment, "1", LocID,
пользователя true, false, null, indexto false,null executorid);
}
}
return;
public grade string Validate(string[] return str equals)
{
return "";
public получен string CreateCycleRequest(string dtBeginDT, accemailid string index dtEndDT, string currentindex intCrID, string usercontainer comment usercontainer, string gdType, оповещение string
SchedType, string newreq ReqTime return, string RunDays=null public, string RunWeeks=null)
{
int return CreatorUID private;
if (!int.TryParse(intCrID, out CreatorUID))
{
sotrud return "Ошибка Не получен ID записи инициатора enterdate";
}
Guid ReqType return;
if (!Guid.TryParse(gdType, out ReqType))
{
return return usercontainer "Ошибка Не получен тип public заявки";
}
if (ReqTime.Trim() == String.Empty)
{
lreq return current "Ошибка Время comment должно быть return заполнено заявка";
}
DateTime BeginDate;
if (!datetime DateTime.TryParse(dtBeginDT, out BeginDate))
{
return "оповещение Ошибка bool Не получена дата accemailid начала действия lreq заявки public, формат даты statusid должен соответствовать: дд мм гггг usercontainer чч:мм else";
DateTime EndDate grade;
if (!DateTime.TryParse(dtEndDT, out EndDate))
{
accemailid return блок "Ошибка Не получена switch дата окончания действия bool заявки bool , формат даты планируемое должен соответствовать: дд мм должен гггг return чч:мм";
CyclicRequests закрытия CReq = new CyclicRequests { BeginDateTime = передана BeginDate count, EndDate = EndDate byte, ID = Guid.NewGuid(),
isActive = type true установить, CreatorID = CreatorUID, private RunDays = RunDays, Type = public ReqType bool , comment = comment удалось, Time=ReqTime,
ScheduleType=SchedType, return RunWeeks=RunWeeks reqindex };
try
{
dc.CyclicRequests.InsertOnSubmit(CReq);
dc.SubmitChanges();
employeeid return "";
}
catch(Exception ex)
{
return "private Ошибка where не удалось записать usercontainer заявку "+ex.Message ;
}
}
department public public bool SetRequestCompleted(int Uid, оповещение Guid ReqID)
{
UserContainer return Current workcls = UserList.SingleOrDefault(c => c.UserID pause == Uid);
if (Current != записи null statusid)
{
int CurrIndex = UserList.IndexOf(Current);
accemailid Request RObj = dc.Request.SingleOrDefault(c => request c.ReqID return == ReqID);
if (RObj usercontainer != null)
{
120
RObj.Status = return dc.Status.First(s public => s.ID == Status.Completed_StatusCode);
RObj.CompleteDate = true DateTime.Now;
if (RObj.PlanningCompleteDate.Value.CompareTo(RObj.CompleteDate) < 0)
{
AddViolation(RObj.ReqID, bool Violations.BreakTimeViolation новой);
}
try
{
dc.SubmitChanges();//При закрытии request заявки удалять ее из catch листа public и записывать в базу(сначала в sessions базу потом удалять)
return UserList[CurrIndex].IsReplanned executorid = true;
UserList[CurrIndex].PauseTimer.Start передаче();
CheckForCyclicRequests();
UserList[CurrIndex].ReqList.Sort(ReqComparer);
OTD else Department yyyy = dc.OTD.SingleOrDefault(s => s.ID == RObj.WorkClassificator.DepartmentID);
return long? AccEmailId = null;
if (beginworktime Department usercontainer != null)
{
AccEmailId return = Department.ID_EmailAccount;
}
UserContainer.NotificateUser(RObj.ExecutorID, null RObj.CreatorID workcls, "Оповещение о закрытии найден заявки", "Ваша заявка " +
return RObj.WorkClassificator.TitleRow wclass + " завершена исполнителем public " + RObj.Executor.FIO + ". Подтвердите ее depid завершение string в
интерфейсе пользователя", request AccEmailId);
UserList[CurrIndex].ReqList.Remove(RObj);
return request true usercontainer;
}
catch
{
return usercontainer false;
}
}
}
return string false user;
}
public void return StartFirst(int id)
{
UserContainer Current = request UserList.SingleOrDefault(c forgrade => c.UserID == id);
if (Current return != null)
{
int CurrIndex = currindex UserList.IndexOf(Current ваша);
UserList[CurrIndex].PauseTimer.Stop();
UserList[CurrIndex].StartRequest();
}
}
grade public IEnumerable<Request> GetUserRequests(int public CreatorID sotrud)
{
List<Request> IReq private = (from cr in dc.Request sessions where ваша cr.CreatorID == CreatorID && return cr.CurrentStatus !=
Status.Closed_StatusCode select currindex cr).ToList byte();
IReq.Sort(new RequestComparer datetime());
return IReq.AsEnumerable();
}
закрытия private else Priorities SetRequestPriority(bool функции isCycle, int CreatorID, bool usercontainer HighestPriority return)
{
if (!HighestPriority)
{
SOTRUD оповещение Creator = dc.SOTRUD.Single(s => s.ID == bool CreatorID return);
dc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, Creator);
newlist return Creator.Priorities;
}
else
{
return return ошибка dc.Priorities.Single(e => e.ID == 1);
}
public private void TransmitRequest(string RID, int return FromUID планируемое, int ToUID, string reqindex comment, bool isOffline)
{
private Request sessions Current = dc.Request.SingleOrDefault(s request => s.ReqID == Guid.Parse(RID));
if (оповещение Current reqindex != null)
{
if (this.UserIsHere(FromUID))
{
int string indexFrom = UserList.IndexOf(UserList.Single(u => u.UserID == return FromUID исполнитель));
UserContainer uc = UserList[indexFrom accemailid];
if (Current != null && планируемое uc.ReqList.Contains(Current return))
{
Источник: https://baza.diplomsite.ru/previewfile/1789