public IHttpActionResult GetEmpDatePlan([FromBody] EmpPlanFilter request) { var response = service.GetDatePlan(request); return(Ok(response)); }
public BaseResponse <List <EmpPlanModel> > GetDatePlan(EmpPlanFilter request) { BaseResponse <List <EmpPlanModel> > response = new BaseResponse <List <EmpPlanModel> >(); List <EmpPlanModel> epList = new List <EmpPlanModel>(); var taskRepository = unitOfWork.GetRepository <DC_Task>(); var orderRepository = unitOfWork.GetRepository <DC_ServiceOrder>(); var user = base.unitOfWork.GetRepository <SYS_User>().dbSet; var ur = base.unitOfWork.GetRepository <SYS_UserRelation>().dbSet; var employee = base.unitOfWork.GetRepository <ORG_Employee>().dbSet; string userRelationType = Enum.GetName(typeof(UserRelationType), UserRelationType.UserEmployee); var query = from sysUser in user join emprelation in ur on new { sysUser.UserID, RelationType = userRelationType, IsDeleted = false } equals new { emprelation.UserID, emprelation.RelationType, emprelation.IsDeleted } into eurd from y in eurd.DefaultIfEmpty() join empl in employee on new { Id = y.RelationID, IsDeleted = false } equals new { Id = empl.EmployeeID, empl.IsDeleted } into ee from epd in ee.DefaultIfEmpty() where sysUser.IsDeleted == false select new { user = sysUser, emp = ee }; query = query.Where(w => w.user.ORG_Organization.Any(a => a.OrganizationID == request.OrganizationID)); query = query.Where(w => w.user.SYS_Role.Any(a => a.RoleNo != "R100" && a.RoleNo != "R001" && a.RoleNo != "R003")); var userList = query.ToList(); for (var i = 0; i < 5; i++) { var timeStep = 0.5; var startTime = 8d; var endTime = 18; var isAllFullBook = true; var curDateTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")).AddDays(i); var curStartTime = startTime; var curEndTime = curStartTime + request.Quantity * request.Unit; var curStartDateTime = curDateTime.AddHours(curStartTime); var curEndDateTime = curDateTime.AddHours(curEndTime); EmpPlanModel ep = new EmpPlanModel(); List <EmpPlanDateModel> epdList = new List <EmpPlanDateModel>(); var userFressTimeList = new List <BeTimeModel>(); for (var m = 0; m < userList.Count; m++) { var emp = userList[m].emp.FirstOrDefault(); if (emp == null) { continue; } var q = from task in taskRepository.dbSet.Where(a => a.EmployeeId == emp.EmployeeID && (a.Status == "Assign" || a.Status == "Execution")) join order in orderRepository.dbSet on task.ServiceOrderID equals order.ServiceOrderID select new { ServiceName = task.ServiceName, AppointmentTime = task.AppointmentTime, Quantity = order.Quantity }; var userJobTimeList = new List <BeTimeModel>(); if (q != null && q.Count() > 0) { var tempList = q.ToList(); var list = tempList.Where(a => a.AppointmentTime.Date.CompareTo(curDateTime.Date) == 0).ToList(); list.ForEach((a) => { DateTime taskStartTime; DateTime taskEndTime; if (a.ServiceName == "家政服务" || a.ServiceName == "陪聊") { taskStartTime = a.AppointmentTime; taskEndTime = a.AppointmentTime.AddHours(a.Quantity.Value); } else { taskStartTime = a.AppointmentTime; taskEndTime = curDateTime.AddHours(endTime); } userJobTimeList.Add(new BeTimeModel { BeginTime = taskStartTime, EndTime = taskEndTime }); }); } UnionTime(userJobTimeList); DateTime freeTimeStart = curDateTime.AddHours(startTime); DateTime freeTimeEnd; userJobTimeList.ForEach(a => { freeTimeEnd = a.BeginTime; userFressTimeList.Add(new BeTimeModel { BeginTime = freeTimeStart, EndTime = freeTimeEnd }); freeTimeStart = a.EndTime; }); freeTimeEnd = curDateTime.AddHours(endTime); userFressTimeList.Add(new BeTimeModel { BeginTime = freeTimeStart, EndTime = freeTimeEnd }); } do { var q = userFressTimeList.Where(a => a.BeginTime.CompareTo(curStartDateTime) <= 0 && a.EndTime.CompareTo(curEndDateTime) >= 0); EmpPlanDateModel epd = new EmpPlanDateModel() { TimeStart = curStartDateTime.ToShortTimeString(), TimeEnd = curEndDateTime.ToShortTimeString(), IsFullBook = curStartDateTime.CompareTo(DateTime.Now) < 0?true: q.Count() == 0 }; if (!epd.IsFullBook) { isAllFullBook = false; } epdList.Add(epd); curStartTime += timeStep; curEndTime = curStartTime + request.Quantity * request.Unit; curStartDateTime = curDateTime.AddHours(curStartTime); curEndDateTime = curDateTime.AddHours(curEndTime); } while (curStartTime <= endTime); ep.BookDate = curDateTime.ToString("yyyy-MM-dd"); ep.EmpPlanDateList = epdList; ep.IsFullBook = isAllFullBook; epList.Add(ep); } response.Data = epList; return(response); }