public IActionResult GetDutyCheckPackageProcess(Guid organizationId) { try { if (organizationId == null || organizationId == new Guid()) { return(NoContent()); } using (var db = new AllInOneContext.AllInOneContext()) { DutyCheckPackage package = db.DutyCheckPackage .Include(t => t.DutyCheckPackLogs).ThenInclude(t => t.DutyCheckLog).ThenInclude(t => t.Status) .FirstOrDefault(p => p.StartTime <= DateTime.Now && p.EndTime >= DateTime.Now); if (package == null) { return(NoContent()); } var endLogs = package.DutyCheckPackLogs.Where(p => p.DutyCheckLog.Status.SystemOptionCode.Equals("16000003")).Count(); int status = 0; if (endLogs > 0) { status = 2; } DutyCheckPackageProcess process = new DutyCheckPackageProcess { Description = "", EndTime = package.EndTime, StartTime = package.StartTime, Total = package.DutyCheckPackLogs.Count(), CompetedCount = endLogs, ProcessStatus = status }; return(new ObjectResult(process)); } } catch (Exception ex) { _logger.LogError("根据组织机构ID获取查勤进度状态:Message:{0}\r\n,StackTrace:{1}", ex.Message, ex.StackTrace); return(BadRequest(new ApplicationException { ErrorCode = "Unknown", ErrorMessage = ex.Message })); } }
///// <summary> ///// 获取查勤进度 ///// </summary> ///// <returns></returns> //[HttpGet] //[Route("~/Paps/dutyCheckLog/organizationId={organizationId}")] //public IActionResult GetDutyCheckLogByProcess(Guid organizationId) //{ // using (var db = new AllInOneContext.AllInOneContext()) // { // DutyCheckLog data = db.DutyCheckLog // .Include(t => t.Apprise).ThenInclude(t => t.AppraiseICO) // .Include(t => t.Apprise).ThenInclude(t => t.AppraiseType) // .Include(t => t.DutyCheckOperation).ThenInclude(t => t.Attachments).ThenInclude(t => t.Attachment) // .Include(t => t.DutyCheckOperation).ThenInclude(t => t.Attachments).ThenInclude(t => t.AttachmentType) // .Include(t => t.DutyCheckSiteSchedule).ThenInclude(t => t.CheckDutySite) // .Include(t => t.DutyCheckSiteSchedule).ThenInclude(t => t.CheckMan) // .Include(t => t.DutyCheckStaff) // .Include(t => t.Organization) // .Include(t => t.RecordType) // .Include(t => t.Status) // .FirstOrDefault( // p => p.OrganizationId.Equals(organizationId) // && ); // if (data == null) // { // return NoContent(); // } // return new ObjectResult(data); // } //} /// <summary> /// 检查查勤进度 /// </summary> private void CheckPackageProcess(Guid organizationId) { try { if (organizationId == null || organizationId == new Guid()) { return; } using (var db = new AllInOneContext.AllInOneContext()) { DutyCheckPackage package = db.DutyCheckPackage .Include(t => t.DutyCheckPackLogs).ThenInclude(t => t.DutyCheckLog).ThenInclude(t => t.Status) .FirstOrDefault(p => p.StartTime <= DateTime.Now && p.EndTime >= DateTime.Now); if (package == null) { MQPulish.PublishMessage("DutyCheckPackageProcess", new DutyCheckPackageProcess { ProcessStatus = 0, Description = "尚未开始" }); return; } var endLogs = package.DutyCheckPackLogs.Where(p => p.DutyCheckLog.Status.SystemOptionCode.Equals("16000003")).Count(); int status = 0; if (endLogs > 0) { status = 2; } DutyCheckPackageProcess process = new DutyCheckPackageProcess { Description = "", EndTime = package.EndTime, StartTime = package.StartTime, Total = package.DutyCheckPackLogs.Count(), CompetedCount = endLogs, ProcessStatus = status }; MQPulish.PublishMessage("DutyCheckPackageProcess", process); } } catch (Exception ex) { Console.WriteLine(string.Format("根据组织机构ID获取查勤进度状态:Message:{0}\r\n,StackTrace:{1}", ex.Message, ex.StackTrace)); } }
public IActionResult GetDutyCheckPackageByID(Guid id) { using (var db = new AllInOneContext.AllInOneContext()) { DutyCheckPackage data = db.DutyCheckPackage .Include(t => t.DutyCheckPackLogs).ThenInclude(t => t.DutyCheckLog).ThenInclude(t => t.Apprises) .Include(t => t.DutyCheckPackLogs).ThenInclude(t => t.DutyCheckLog).ThenInclude(t => t.DutyCheckOperation) .Include(t => t.DutyCheckPackLogs).ThenInclude(t => t.DutyCheckLog).ThenInclude(t => t.DutyCheckSiteSchedule)/*.ThenInclude(t=>t.CheckDutySite)*/ .Include(t => t.DutyCheckPackLogs).ThenInclude(t => t.DutyCheckLog).ThenInclude(t => t.DutyCheckSiteSchedule).ThenInclude(t => t.CheckMan) .Include(t => t.DutyCheckPackLogs).ThenInclude(t => t.DutyCheckLog).ThenInclude(t => t.DutyCheckStaff) .Include(t => t.DutyCheckPackLogs).ThenInclude(t => t.DutyCheckLog).ThenInclude(t => t.DayPeriod) .Include(t => t.Organization) .Include(t => t.PackageStatus) .FirstOrDefault(p => p.DutyCheckPackageId.Equals(id)); if (data == null) { return(NoContent()); } return(new ObjectResult(data)); } }
/// <summary> /// 划分查勤包 /// </summary> public static void AllocationDutychekPackage(Guid organizationId, DateTime packStartTime) { #region Bak //DutyCheckPackageTimePlan plan = GetDutyCheckPackageTimePlan(organizationId); //List<MonitorySite> allMonitorySites = GetAllMonitorySite(organizationId); //if (plan == null || allMonitorySites.Count==0) // return; //if (plan.RandomRate != 0) //{ // allMonitorySites.AddRange(GetRandomMonitorySite(plan.RandomRate, allMonitorySites)); //} //int monitorPointNum = allMonitorySites.Count; //int scheduleDay = 1; //switch (plan.Schedule.ScheduleCycle.CycleType.SystemOptionCode) //{ // case "13700001": //每天 // scheduleDay = 1; // break; // case "13700002": //每周 // scheduleDay = 7; // break; //} //int fixMonitorPointSize =GetAbsoultedPackageSize(plan.Schedule.ScheduleCycle.DayPeriods[0].TimePeriods); //int onedayCount = monitorPointNum / scheduleDay; //DateTime endTime = new DateTime(startTime.AddDays(scheduleDay).Year, startTime.AddDays(scheduleDay).Month, startTime.AddDays(scheduleDay).Day, 23, 59, 59); //List<DutyCheckPackage> DutyCheckPackages = new List<DutyCheckPackage>(); //for (int i = 0; i < scheduleDay; i++) //{ // startTime = startTime.AddDays(i); // startTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, 0, 0, 0); // foreach (TimePeriod tp in plan.Schedule.ScheduleCycle.DayPeriods[0].TimePeriods) // { // //组装查勤包 // DutyCheckPackage dDutyCheckPackage = new DutyCheckPackage(); // dDutyCheckPackage.DutyCheckPackageId = Guid.NewGuid(); // dDutyCheckPackage.StartTime = new DateTime(startTime.Year, startTime.Month,startTime.Day,tp.StartTime.Hour,tp.StartTime.Minute,tp.StartTime.Second); // dDutyCheckPackage.EndTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, tp.EndTime.Hour, tp.EndTime.Minute, tp.EndTime.Second); // dDutyCheckPackage.OrganizationId = plan.OrganizationId; // List<DutyCheckPackageLog> logs = new List<DutyCheckPackageLog>(); // int packageSize = 0; // if (tp.TimePeriodExtra != null && tp.TimePeriodExtra.ValueType == 0) // { // packageSize = tp.TimePeriodExtra.AbsoluteValue; // } // else if (tp.TimePeriodExtra != null && tp.TimePeriodExtra.ValueType == 1) // { // packageSize = (int)(onedayCount - fixMonitorPointSize * tp.TimePeriodExtra.PercentValue / 100.0D); // } // else // { // packageSize = onedayCount; // } // Random r = new Random(); // for (int k = 0; k < packageSize; k++) // { // if (monitorPointNum == 0) // { // break; // } // int index = r.Next(monitorPointNum); // MonitorySite monitorPoint = allMonitorySites[index]; // allMonitorySites.RemoveAt(index); // monitorPointNum--; // //DutyCheckLog log = new DutyCheckLog // //{ // // DutyCheckLogId = Guid.NewGuid(), // // OrganizationId = plan.OrganizationId, // // RecordTypeId = new Guid("359A58FA-0BAB-45A3-ACAF-98EB73228B95"), //网络查勤 // // //Schedule=plan.Schedule, // // StatusId = new Guid("361ADFE9-E58A-4C88-B191-B742CC212443"), //未开始 // //}; // if (monitorPoint == null) // { // break; // } // DutyCheckPackageLog dutycheckpackagelog = new DutyCheckPackageLog // { // DutyCheckPackageId = dDutyCheckPackage.DutyCheckPackageId, // DutyCheckLog = GetSiteLog(plan.OrganizationId, tp, monitorPoint, plan.Schedule.ScheduleCycle.DayPeriods[0].DayPeriodId) // }; // logs.Add(dutycheckpackagelog); // } // if (logs.Count == 0) // { // break; // } // dDutyCheckPackage.DutyCheckPackLogs = logs; // DutyCheckPackages.Add(dDutyCheckPackage); // } //} //using (var db = new AllInOneContext.AllInOneContext()) //{ // try // { // db.DutyCheckPackage.AddRange(DutyCheckPackages); // db.SaveChanges(); // } // catch (Exception ex) // { // } //} #endregion //不再预先取下级查勤点,改为按组织机构生成查勤包,查勤再向下级去查勤点数据(1.基于网络风险,可能导致取不到监控点,引起异常) DutyCheckPackageTimePlan plan = GetDutyCheckPackageTimePlan(organizationId); using (var db = new AllInOneContext.AllInOneContext()) { Organization org = db.Organization.FirstOrDefault(p => p.OrganizationId.Equals(organizationId)); if (org == null) { return; } //获取所有组织机构 var orgs = db.Organization.Where(t => t.DutycheckPoints > 0).ToList(); //查勤点 List <Guid> dutycheckSiteOrganizationIdList = new List <Guid>(); orgs.ForEach(t => { for (int i = 0; i < t.DutycheckPoints; i++) { dutycheckSiteOrganizationIdList.Add(t.OrganizationId); } }); dutycheckSiteOrganizationIdList.AddRange(GetRandomOrganizationList(plan.RandomRate, dutycheckSiteOrganizationIdList)); //根据查勤包数量:时段*周期(总队默认一周覆盖一次,支队和中队是每天都要覆盖一次) int scheduleDay = 0; int dutycheckSiteSum = dutycheckSiteOrganizationIdList.Count; if (!org.OrganizationFullName.Contains(".") && org.OrganizationFullName.Contains("总队")) { scheduleDay = plan.Schedule.ScheduleCycle.DayPeriods[0].TimePeriods.Count() * plan.Schedule.ScheduleCycle.Days.Count(); } else { scheduleDay = 1; } // int perDayDutycheckSiteCount = dutycheckSiteSum / scheduleDay; if (perDayDutycheckSiteCount * scheduleDay < dutycheckSiteSum) { perDayDutycheckSiteCount = perDayDutycheckSiteCount + 1; } int fixDutycheckSiteCount = GetAbsoultedPackageSize(plan.Schedule.ScheduleCycle.DayPeriods[0].TimePeriods); //固定查勤数量 DateTime endTime = new DateTime(packStartTime.AddDays(scheduleDay).Year, packStartTime.AddDays(scheduleDay).Month, packStartTime.AddDays(scheduleDay).Day, 23, 59, 59); List <DutyCheckPackage> dutycheckPackageList = new List <DutyCheckPackage>(); for (int i = 0; i < scheduleDay; i++) { DateTime startTime = packStartTime.AddDays(i).Date; foreach (TimePeriod tp in plan.Schedule.ScheduleCycle.DayPeriods[0].TimePeriods) { //组装查勤包 DutyCheckPackage dutyCheckPackage = new DutyCheckPackage(); dutyCheckPackage.DutyCheckPackageId = Guid.NewGuid(); dutyCheckPackage.StartTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, tp.StartTime.Hour, tp.StartTime.Minute, tp.StartTime.Second); dutyCheckPackage.EndTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, tp.EndTime.Hour, tp.EndTime.Minute, tp.EndTime.Second); dutyCheckPackage.OrganizationId = plan.OrganizationId; List <DutyCheckPackageLog> logs = new List <DutyCheckPackageLog>(); int packageSize = perDayDutycheckSiteCount; if (tp.TimePeriodExtra != null && tp.TimePeriodExtra.ValueType == 0) { packageSize = tp.TimePeriodExtra.AbsoluteValue; } else if (tp.TimePeriodExtra != null && tp.TimePeriodExtra.ValueType == 1) { packageSize = (int)(perDayDutycheckSiteCount - fixDutycheckSiteCount * tp.TimePeriodExtra.PercentValue / 100.0D); } Random r = new Random(); for (int k = 0; k < packageSize; k++) { if (dutycheckSiteSum == 0) { break; } int index = r.Next(dutycheckSiteSum); Guid dutycheckPointOrganizationId = dutycheckSiteOrganizationIdList[index]; dutycheckSiteOrganizationIdList.RemoveAt(index); dutycheckSiteSum--; DutyCheckPackageLog dutycheckpackagelog = new DutyCheckPackageLog { DutyCheckPackageId = dutyCheckPackage.DutyCheckPackageId, DutyCheckLog = PreCreateDutycheckLog(plan.OrganizationId, tp, dutycheckPointOrganizationId, plan.Schedule.ScheduleCycle.DayPeriods[0].DayPeriodId) }; logs.Add(dutycheckpackagelog); } if (logs.Count > 0) { dutyCheckPackage.DutyCheckPackLogs = logs; dutyCheckPackage.PackageStatusId = new Guid("361ADFE9-E58A-4C88-B191-B742CC212443"); //未开始 dutycheckPackageList.Add(dutyCheckPackage); } } } db.DutyCheckPackage.AddRange(dutycheckPackageList); db.SaveChanges(); } }
public IActionResult GetNextDutyCheckLog(Guid organizationId) { try { if (organizationId == null || organizationId == new Guid()) { return(NoContent()); } //调整方法,原来记录生成的只是组织机构,需匹配生成查勤点 using (var db = new AllInOneContext.AllInOneContext()) { DutyCheckPackage package = db.DutyCheckPackage .Include(t => t.DutyCheckPackLogs).ThenInclude(t => t.DutyCheckLog).ThenInclude(t => t.Status) .FirstOrDefault(p => p.StartTime <= DateTime.Now && p.EndTime >= DateTime.Now && p.PackageStatusId != new Guid("124A8562-EAC8-4C09-8758-A6E312974552")); if (package == null) { return(NoContent()); } //处理已获取,未完成的记录 var getLogs = package.DutyCheckPackLogs.Where(p => p.DutyCheckLog.Status.SystemOptionCode.Equals("16000002")); if (getLogs.Count() > 0) { DutyCheckLog log = db.DutyCheckLog .Include(t => t.Apprises).ThenInclude(t => t.DutyCheckAppraise).ThenInclude(t => t.AppraiseICO) .Include(t => t.Apprises).ThenInclude(t => t.DutyCheckAppraise).ThenInclude(t => t.AppraiseType) .Include(t => t.DutyCheckOperation).ThenInclude(t => t.Attachments).ThenInclude(t => t.Attachment) .Include(t => t.DutyCheckOperation).ThenInclude(t => t.Attachments).ThenInclude(t => t.AttachmentType) .Include(t => t.DutyCheckSiteSchedule).ThenInclude(t => t.SiteOrganization) .Include(t => t.DutyCheckSiteSchedule).ThenInclude(t => t.CheckMan) .Include(t => t.DutyCheckStaff) .Include(t => t.Organization) .Include(t => t.RecordType) .Include(t => t.Status) .Include(t => t.CircularTypes).ThenInclude(t => t.Dispose) .Include(t => t.MainApprise) .FirstOrDefault(p => p.DutyCheckLogId.Equals(getLogs.ToList()[0].DutyCheckLogId)); // CameraView cameraView = GetCameraView(log.DutyCheckSiteSchedule.SiteOrganizationId, db, log); DutyCheckPointView View = new DutyCheckPointView { DutyCheckLog = log, CameraView = cameraView }; return(new ObjectResult(View)); } //从未获取的记录中,返回一个 var noLogs = package.DutyCheckPackLogs.Where(p => p.DutyCheckLog.Status.SystemOptionCode.Equals("16000001")); if (noLogs.Count() > 0) { DutyCheckLog log = db.DutyCheckLog .Include(t => t.Apprises).ThenInclude(t => t.DutyCheckAppraise).ThenInclude(t => t.AppraiseICO) .Include(t => t.Apprises).ThenInclude(t => t.DutyCheckAppraise).ThenInclude(t => t.AppraiseType) .Include(t => t.DutyCheckOperation).ThenInclude(t => t.Attachments).ThenInclude(t => t.Attachment) .Include(t => t.DutyCheckOperation).ThenInclude(t => t.Attachments).ThenInclude(t => t.AttachmentType) .Include(t => t.DutyCheckSiteSchedule).ThenInclude(t => t.SiteOrganization) .Include(t => t.DutyCheckSiteSchedule).ThenInclude(t => t.CheckMan) .Include(t => t.DutyCheckStaff) .Include(t => t.Organization) .Include(t => t.RecordType) .Include(t => t.Status) .Include(t => t.CircularTypes).ThenInclude(t => t.Dispose) .Include(t => t.MainApprise) .FirstOrDefault(p => p.DutyCheckLogId.Equals(noLogs.ToList()[0].DutyCheckLogId)); // CameraView cameraView = GetCameraView(log.DutyCheckSiteSchedule.SiteOrganizationId, db, log); //绑定查勤视频点与查勤记录的关系 if (cameraView != null) { log.DutycheckSiteId = cameraView.CameraId; log.DutycheckSiteName = log.DutyCheckSiteSchedule.SiteOrganization.OrganizationShortName + "-" + cameraView.CameraName; SystemOption so = db.SystemOption.FirstOrDefault(p => p.SystemOptionCode.Equals("16000002")); log.StatusId = so.SystemOptionId; log.Status = null; db.DutyCheckLog.Update(log); db.SaveChanges(); } // DutyCheckPointView View = new DutyCheckPointView { DutyCheckLog = log, CameraView = cameraView }; return(new ObjectResult(View)); } //当前时段已完成,更新查勤包的状态 else { package.PackageStatusId = new Guid("24AC9875-C463-47B6-8147-5845874C3CAF"); db.DutyCheckPackage.Update(package); // return(NoContent()); } } } catch (Exception ex) { _logger.LogError("根据组织机构ID获取下一个查勤数据:Message:{0}\r\n,StackTrace:{1}", ex.Message, ex.StackTrace); return(BadRequest(new ApplicationException { ErrorCode = "Unknown", ErrorMessage = ex.Message })); } }