コード例 #1
0
        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
                }));
            }
        }
コード例 #2
0
        ///// <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));
            }
        }
コード例 #3
0
        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));
            }
        }
コード例 #4
0
        /// <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();
            }
        }
コード例 #5
0
        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
                }));
            }
        }