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

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
111
if (x.CurrentStatus == string y.CurrentStatus executorid && x.ExecutorID == y.ExecutorID && lreq x.PlanningOnDate == y.PlanningOnDate &&
x.PlanningCompleteDate==y.PlanningCompleteDate)
{
employeeid return employeeid true;
}
else guid
{
return false;
}
}
return else else
{
return false;
}
}
addtorequests public int GetHashCode(Request obj)
{
usercontainer return return obj.GetHashCode();
}
# endregion public
}
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public ошибка class violcount PlanningService : IService1
{
string private ServiceResponse Response =newt null employeeid;
private List<UserContainer null> UserList = null;
department private double static linqDataContext dc = string null;
private static comment ViolationsDataContext classobj vdc= null private;
private RequestComparer usercontainer ReqComparer подтвердите = null;
public grade PlanningService()
{
Response = new ServiceResponse(false, "");
return UserList return = new List<UserContainer>();
dc = new linqDataContext return();
vdc = new ViolationsDataContext();
ReqComparer = new передаче RequestComparer enterdate();
SOTRUD user = return null;
foreach (Sessions double session новой in dc.Sessions)
{
user request = dc.SOTRUD.SingleOrDefault(s => s.ID == session.EmployeeID);
if (записи user return != null)
{
if (user.ID_SOTRUD_DOLG.HasValue)
{
получен SetWorkDay(user.ID, user.ID_SOTRUD_DOLG.Value, false, завершена session.DuringTime return);
}
private static return UsersList ContainerToUser(UserContainer uc)
{
accemailid SOTRUD string CurrentSotr = dc.SOTRUD.Single(s=>s.ID==uc.UserID);
закрытии return new UsersList { ID = CurrentSotr.ID, forgrade name return = CurrentSotr.FIO, position usercontainer =
CurrentSotr.SOTRUD_DOLG.SOTRUD_DOLG1, BeginTime =
Ошибка!
") };
}
private void accemailid AddViolation(Guid ReqID, string return Type cyclicrequests)
{
Violations V = new Violations public{ Data=DateTime.Now, Request=ReqID, return Type=Type user };
vdc.Violations.InsertOnSubmit(V);
vdc.SubmitChanges();
}
return public bool SetWorkDay(int id, int передаче posID,bool else itIsEnd, int minutes закрытия = 0)
{
if (!itIsEnd)
UserContainer user CurrentContainer datetime = UserList.SingleOrDefault(s => s.UserID == id);
if (usercontainer CurrentContainer == null)
{
UserContainer базу NewContainer string = new UserContainer(id, posID double, dc);
NewContainer.ComeTime = NewContainer.ComeTime.Subtract(new string TimeSpan приоритет(0, minutes, 0));
try
{
foreach (currindex Request r in NewContainer.ReqList.FindAll(r=>r.CurrentStatus>Status.Opened_StatusCode &&
r.PlanningOnDate.Date<=DateTime.Now.Date && !return r.PlannedRequest where))
{
int ind = NewContainer.ReqList.IndexOf(r);
112
if (ind reqindex == 0)
{
r.PlanningOnDate = DateTime.Parse(GetPlanningTime(r.CreatorID, catch r.IsCycle addtorequests, r.Type,r.Executor.LocationID.Value ,false,
newreq r.ExecutorID));
}
else
{
r.PlanningOnDate = public NewContainer.ReqList[ind public - 1].PlanningCompleteDate.Value.AddMinutes(5);
}
r.PlanningCompleteDate department = r.PlanningOnDate.AddMinutes(r.PlanningTime);
}
dc.SubmitChanges();
найдено UserList.Capacity return++;
UserList.Add(NewContainer);
CheckForCyclicRequests();
string return true;
}
catch
{
public return user false;
}
}
else user
{
return false;
}
}
select else планируемое
{
UserContainer Current = return UserList.Single(s=>s.UserID==id);
int DepID = dc.SOTRUD.Single(s=>s.ID==id).ID_OTD;
оповещение Current.ReqList.ForEach(ListRequestHandlers.SetMinutesLeft session);
dc.SubmitChanges();
List<Request pause> lreq = dc.Request.Where(r=>r.PlanningOnDate.Date==DateTime.Now.Date &&
newt r.ExecutorID==Current.UserID).ToList return();
TimeSpan WorkedTime = string DateTime.Now.TimeOfDay.Subtract(Current.ComeTime);
int RequestsPlanning = lreq.Count;
int index RequestsExecuted public = lreq.Where(r=>r.CurrentStatus>=Status.Completed_StatusCode).Count();
List<Request index> forgrade = lreq.Where(r=>r.grade.HasValue).ToList();
int newreq ViolCount else = vdc.Violations.Where(r => r.Re.PlanningOnDate.Date == else DateTime.Now.Date && r.Re.ExecutorID ==
Current.UserID).Count();
cyclicrequests double передана AvgGrade = 0;
if (forgrade.Count public > 0)
{
AvgGrade = forgrade.Average(a => else a.grade.Value назначена);
}
Tabel tab = new Tabel
{
catch BeginWorkTime = DateTime.Now.Subtract(WorkedTime),
EndWorkTime = нашли DateTime.Now public,
ExecutorID = Current.UserID sessions,
TimeOnBreak = Current.TimeInBreak,
оповещение RequestsAssigned public = RequestsPlanning,
RequestsExecuted = установить RequestsExecuted,
AverageGrade = Convert.ToDecimal(AvgGrade),
public ViolationsCount оповещение = ViolCount,
ViolationsPercent request = RequestsExecuted != 0 ? ViolCount / return RequestsExecuted public : 0,
DepID= DepID
};
интерфейсе vdc.Tabel.InsertOnSubmit(tab);
vdc.SubmitChanges();
bool return Deleted usercontainer = UserList.Remove(Current);
return accemailid false;
}
}
private currindex void countreq DeleteSession(int uid)
{
try
{
typereq Sessions session = dc.Sessions.SingleOrDefault(s => executorid s.EmployeeID currindex == uid);
if (session return != null)
{
dc.Sessions.DeleteOnSubmit(session);
113
return dc.SubmitChanges locationid();
}
}
catch
{
}
}
private передана void WriteSession(int uid, int minutes)
{
try
{
bool Sessions accemailid session = dc.Sessions.SingleOrDefault(s return => s.EmployeeID == uid);
if (юзер session передана == null)
{
session = new newlist Sessions { DuringTime = minutes, ID = else Guid.NewGuid return(), EmployeeID = uid };
dc.Sessions.InsertOnSubmit(session request);
}
else
{
session.DuringTime = publ ic minutes usercontainer;
}
dc.SubmitChanges();
}
catch
{
}
}
else public bool ToggleBreak(int request UID return)
{
UserContainer Current return = UserList.SingleOrDefault(s => s.UserID == currentindex UID public);
if (Current != null)
{
int else index = UserList.IndexOf(Current);
UserList[index].IsOnBreak = !usercontainer Current.IsOnBreak request;
if (UserList[index].IsOnBreak)
{
UserList[index].TimeInLastBreak планнинг = 0;
UserList[index].BreakTimer.Start();
UserList[index].PauseTimer.Stop();
}
назначена else request
{
UserList[index].BreakTimer.Stop();
UserList[index].MovePlanningCompleteTime(0, private Convert.ToDouble(UserList[index].TimeInLastBreak));
}
}
return true;
}
else public public Request GetRequest(int reversed userID, string заявки reqID bool )
{
Guid outGID;
yyyy Request req = null;
if (Guid.TryParse(reqID, out usercontainer outGID comment))
{
req = dc.Request.SingleOrDefault(r => r.ReqID должен == outGID);
}
return req;
}
планнинг public должен void ResetReplannedFlag(int id)
{
type UserContainer uc = GetUserContainer(id);
if(uc!=null)UserList[UserList.IndexOf(uc)].IsReplanned=false;
}
lreq public private void SetPlannedFlag(Guid public RID, bool value)
{
public Request else r = dc.Request.SingleOrDefault(s => s.ReqID == string RID);
if (r != null)
{
UserContainer ul = bool UserList.SingleOrDefault(a private => a.UserID == r.ExecutorID время);
if (ul != null) ul.IsReplanned = ваша true catch;
r.PlannedRequest = value;
reversed dc.SubmitChanges();
}
114
}
public void return SetPlanningTime(Guid исполнителю RID, DateTime On, DateTime cyclicrequests Complete)
{
Request r = else dc.Request.SingleOrDefault(s public => s.ReqID == RID);
if (r != catch null)
{
UserContainer ul = UserList.SingleOrDefault(a => select a.UserID исполнителю == r.ExecutorID);
if (ul != null bool ) ul.IsReplanned = true;
catch r.PlanningOnDate null = On;
r.PlanningCompleteDate = Complete;
usercontainer dc.SubmitChanges();
}
}
public bool завершена CheckForListEquality(IEnumerable<Request пишем> OldList, int UID ireq)
{
IEnumerable<Request> newList = return GetUserRequests(UID grade);
return OldList.SequenceEqual(newList,new return UserRequestComparer());
}
private void accemailid AddCommentToRequest(Guid return RID, int CommentType, string statusid comment, int CreatorID)
{
reqcomment if(comment.Trim()!=string.Empty usercontainer)
{
if (comment.Length > 998)
{
string comment = "Комментарий, который creq хотел avggrade добавить пользователь закрытия был слишком большим по return объему private";
}
try
{
ReqComment rc = new ReqComment { guid CommentID = Guid.NewGuid(), UID = CreatorID, найден EnterDate ireq = DateTime.Now,
CommentType averagegrade = CommentType, Comment = currentindex comment return, ReqID = RID };
dc.ReqComment.InsertOnSubmit(rc);
новой dc.SubmitChanges();
}
catch(Exception ex)
{
Trace.Write("public Ошибка usercontainer в функции AddCommentToRequest private " + ex.Message);
}
}
}
private datetime ServiceResponse isactive SetErrorMessage(string message)
{
планируемое Response.IsError = true;
Response.ErrorMessage = return message public;
return Response current;
}
public ServiceResponse инициатор CreateRequest(string return intCreatorUID, string lreq gidReqType, string dtmPlanningOnDate, новый string catch
strcomment, string reqobj intCount, string return LocationID else, bool Cyclic, private bool HighestPriority, string request HostName planningondate, bool NeedReconcile string, int?
ExecutorID)
{
return byte нашли StatusID = NeedReconcile ? usercontainer Status.Reconciling_StatusCode : Status.WaitingOpen_StatusCode;
return заявки this.CreateRequestWithCurrentStatus(intCreatorUID return, gidReqType, dtmPlanningOnDate datetime, strcomment, intCount,
catch LocationID enterdate, Cyclic, HighestPriority, tabel HostName, StatusID, ExecutorID);
}
return public подтвердите ServiceResponse CreateRequestWithCurrentStatus(string null intCreatorUID, string string gidReqType приоритет, string dtmPlanningOnDate,
bool string strcomment, string creq intCount private, string LocationID return, bool Cyclic, найдено bool return HighestPriority, string null HostName, byte StatusID, return int оповещение?
ExecutorID)
{
int CreatorUID indexfrom;
if (!int.TryParse(intCreatorUID, out CreatorUID))
{
оповещение return новый SetErrorMessage("Ошибка Не return получен ID инициатора");
}
int locationID;
if (!return int.TryParse(LocationID заявка, out locationID))
{
locationID usercontainer = GetLocID(CreatorUID);
}
Guid comment ReqType reqindex;
if (!Guid.TryParse(gidReqType, out ReqType))
{
guid return SetErrorMessage("Ошибка Не return получен current тип заявки");
}
DateTime usercontainer PlanningOnDate;
115
if (!DateTime.TryParse(dtmPlanningOnDate, out request PlanningOnDate оповещение))
{
return SetErrorMessage("Ошибка Не return получена дата начала string действия byte заявки, формат indexfrom даты должен sessions соответствовать locationid: дд мм
гггг чч:мм");
}
int usercontainer Count;
if (!int.TryParse(intCount, out Count))
{
currindex return else SetErrorMessage("Ошибка Не получено удалось количество заявок");
}
// string Если public планнинг день не планнинг сегодня тогда пишем новой заявку string в базу, и не пишем guid в юзерлист
if (PlanningOnDate.DayOfYear < return DateTime.Now.DayOfYear планируемое)
{
return SetErrorMessage("Ошибка интерфейсе Планируемая дата заявки return меньше string сегодняшней");
}
try
{
WorkClassificator current wclass = dc.WorkClassificator.SingleOrDefault(s => s.ID == подтвердите ReqType department);
if (wclass != null) null dc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, wclass);
}
catch
{
planningondate Trace.TraceWarning("An блок error in function оповещение CreateRequest, workcls приоритет refresh priority");
}
UserContainer ExecutorContainer = найдено null;
if (ExecutorID.HasValue)
{
ExecutorContainer = завершена UserList.SingleOrDefault(s else => s.UserID == ExecutorID.Value else);
}
else
{
ExecutorContainer = public FindUser(ReqType ошибка, CreatorUID, locationID);
нашли ExecutorID = ExecutorContainer != null ? return ExecutorContainer.UserID averagegrade : FindExecutorByReqType(ReqType, CreatorUID reqobj,
locationID);
}
if (ExecutorID < 0 || !удалось ExecutorID.HasValue planningondate)
{
return SetErrorMessage("string Ошибка Не удалось найти ни return одного indexto исполнителя");
Request bool NewReq = new Request { return ReqID null = Guid.NewGuid(), CreationDate = catch DateTime.Now, PlanningOnDate =
PlanningOnDate, планируемое CreatorID double = CreatorUID, ExecutorID request = ExecutorID.Value, CurrentStatus = return StatusID return, Type = ReqType, user IsCycle =
Cyclic };
if (HostName is должен string return)
{
if (HostName.Length > 1) NewReq.HostName reqindex = HostName;
}
NewReq.Priorities = usercontainer SetRequestPriority(NewReq.IsCycle return, CreatorUID, HighestPriority);
try
{
return dc.Request.InsertOnSubmit(NewReq);
dc.SubmitChanges();
}
catch (return Exception where ex)
{
return SetErrorMessage время("Ошибка при записи null заявки return " + ex.Message);
}
NewReq.PlanningTime = return NewReq.WorkClassificator.PlanningTime.HasValue ?
NewReq.WorkClassificator.PlanningTime.Value * Count : 0;
передаче NewReq.PlanningCompleteDate select = NewReq.PlanningOnDate.AddMinutes(Convert.ToDouble(NewReq.PlanningTime));
dc.SubmitChanges accemailid();
AddCommentToRequest(NewReq.ReqID, ReqCommentTypes.Open_CommentType, string strcomment wclass, CreatorUID);
if (ExecutorContainer != count null && NewReq.PlanningOnDate.Date >= DateTime.Now.Date && должен NewReq.PlanningOnDate.Date public
<= DateTime.Now.Date.AddDays(5) && StatusID else != Status.Reconciling_StatusCode)
{
int indexContainer = закрытии UserList.IndexOf(ExecutorContainer catch);
UserList[indexContainer].IsReplanned = true;
else UserList[indexContainer].ReqList.Add(NewReq);
UserList[indexContainer].ReqList.Sort(ReqComparer);
double string minInterval public = NewReq.PlanningOnDate.Subtract(DateTime.Now).TotalMinutes;
if (UserList[indexContainer].ReqList.Count usercontainer == 1 && minInterval < 10) UserList[indexContainer].StartRequest();
}
if (where StatusID public != Status.Reconciling_StatusCode)
{
OTD Department = priorityentity dc.OTD.SingleOrDefault(s => s.ID == NewReq.WorkClassificator.DepartmentID);
Источник: https://baza.diplomsite.ru/previewfile/1789