Exemple #1
0
        public static bool IsExist(DateTime startTime, DateTime endTime, Guid organizationId)
        {
            bool isExist = false;

            using (var db = new AllInOneContext.AllInOneContext())
            {
                //var data = from p in 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.CheckDutySite)
                //    .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)

                //           where p.PlanDate>=startTime && p.PlanDate<=endTime
                //           && p.OrganizationId.Equals(organizationId)
                //           select p;

                var data = from p in db.DutyGroupSchedule
                           where p.StartDate <= startTime.Date && p.EndDate >= endTime.Date &&
                           p.OrganizationId.Equals(organizationId) &&
                           !p.IsCancel
                           select p;

                if (data.Count() > 0)
                {
                    isExist = true;
                }
            }

            return(isExist);
        }
Exemple #2
0
 //public IEnumerable<AlarmLog> GetByAlarmQuery([FromBody]AlarmQuery query)
 public IActionResult SearchAlarmLog(DateTime startTime, DateTime endTime, Guid[] alarmTypeIds, Guid[] alarmSourceIds, int pageNo = 1, int pageSize = 10)
 {
     using (var db = new AllInOneContext.AllInOneContext())
     {
         if (pageNo <= 0)
         {
             pageNo = 1;
         }
         if (pageSize <= 10)
         {
             pageSize = 10;
         }
         var res = db.AlarmLog.Include(t => t.AlarmLevel).Include(t => t.AlarmSource).Include(t => t.AlarmType).Include(t => t.AlarmStatus).Include(t => t.Organization).Where(t => ((alarmTypeIds == null || alarmTypeIds.Length == 0) || alarmTypeIds.Contains(t.AlarmTypeId)) &&
                                                                                                                                                                               ((alarmSourceIds == null || alarmSourceIds.Length == 0) || alarmSourceIds.Contains(t.AlarmSourceId)) &&
                                                                                                                                                                               (t.TimeCreated >= startTime && t.TimeCreated <= endTime)).OrderByDescending(t => t.TimeCreated);
         var log = res.Skip((pageNo - 1) * pageSize).Take(pageSize);
         QueryPagingRecord queryPagingRecord = new QueryPagingRecord
         {
             SumRecordCount = res.Count(),
             Record         = log.ToList()
         };
         return(new ObjectResult(queryPagingRecord));
     }
 }
 public IActionResult Delete(Guid id)
 {
     try
     {
         using (var db = new AllInOneContext.AllInOneContext())
         {
             Attachment data = db.Attachment.FirstOrDefault(p => p.AttachmentId == id);
             if (data == null)
             {
                 return(NoContent());
             }
             db.Attachment.Remove(data);
             db.SaveChanges();
             return(new NoContentResult());
         }
     }
     catch (System.Exception ex)
     {
         _logger.LogError("Delete:Message:{0}\r\n,StackTrace:{1}", ex.Message, ex.StackTrace);
         return(BadRequest(new ApplicationException {
             ErrorCode = "Unknown", ErrorMessage = ex.Message
         }));
     }
 }
 public IActionResult Remove(Guid id)
 {
     using (var db = new AllInOneContext.AllInOneContext())
     {
         try
         {
             VideoRoundScene deleteObj = db.VideoRoundScene.FirstOrDefault(t => t.VideoRoundSceneId.Equals(id));
             if (deleteObj == null)
             {
                 return(NotFound());
             }
             db.VideoRoundScene.Remove(deleteObj);
             db.SaveChanges();
             return(NoContent());
         }
         catch (Exception ex)
         {
             _logger.LogError("删除轮巡场景异常:Message:{0}\r\n,StackTrace:{1}", ex.Message, ex.StackTrace);
             return(BadRequest(new ApplicationException {
                 ErrorCode = "Unknown", ErrorMessage = ex.Message
             }));
         }
     }
 }
 public IActionResult Remove(Guid id)
 {
     using (var db = new AllInOneContext.AllInOneContext())
     {
         try
         {
             AlarmPeripheral editObj = db.AlarmPeripheral.FirstOrDefault(s => s.AlarmPeripheralId.Equals(id));
             if (editObj == null || !editObj.AlarmPeripheralId.Equals(id))
             {
                 return(NotFound());
             }
             IPDeviceInfo alarmDevice = db.IPDeviceInfo.First(s => s.IPDeviceInfoId.Equals(editObj.AlarmDeviceId));
             db.AlarmPeripheral.Remove(editObj);
             db.IPDeviceInfo.Remove(alarmDevice);
             db.SaveChanges();
             return(NoContent());
         }
         catch (Exception ex)
         {
             _logger.LogError("删除报警外设异常:Message:{0}\r\nStackTrace:{0}", ex.Message, ex.StackTrace);
             return(BadRequest(ex));
         }
     }
 }
Exemple #6
0
 public IActionResult Update([FromBody] IPDeviceInfo deviceInfo)
 {
     if (deviceInfo == null)
     {
         return(BadRequest("IPDeviceInfo object can not be null!"));
     }
     if (ExistsName(deviceInfo.IPDeviceName, deviceInfo.OrganizationId, deviceInfo.IPDeviceInfoId))
     {
         return(BadRequest("IPDeviceInfo name has been used!"));
     }
     using (var db = new AllInOneContext.AllInOneContext())
     {
         try
         {
             deviceInfo.Modified = DateTime.Now;
             db.IPDeviceInfo.Update(deviceInfo);
             db.SaveChanges();
             SendDatachangeNotify(deviceInfo, 1);
             return(NoContent());
         }
         catch (DbUpdateException dbEx)
         {
             _logger.LogError("更新设备异常:Message:{0}\r\n,StackTrace:{1}", dbEx.Message, dbEx.StackTrace);
             return(BadRequest(new ApplicationException {
                 ErrorCode = "DBUpdate", ErrorMessage = "数据保存异常:" + dbEx.Message
             }));
         }
         catch (Exception ex)
         {
             _logger.LogError("更新设备异常:Message:{0}\r\n,StackTrace:{1}", ex.Message, ex.StackTrace);
             return(BadRequest(new ApplicationException {
                 ErrorCode = "Unknown", ErrorMessage = ex.Message
             }));
         }
     }
 }
Exemple #7
0
        /// <summary>
        /// 发送报警状态到哨位中心服务
        /// </summary>
        /// <param name="db"></param>
        /// <param name="status"></param>
        /// <param name="deviceOrgId"></param>
        private void SendAlarmStatusToASCS(DeviceAlarmStatus status, Guid deviceOrgId)
        {
            Task.Run(new Action(() =>
            {
                using (var db = new AllInOneContext.AllInOneContext())
                {
                    _logger.LogInformation("推送报警状态到哨位心...");
                    Guid ascsServerType = Guid.Parse("A0002016-E009-B019-E001-ABCD11300206");

                    //哨位台挂在哨位节点上面
                    var org     = db.Organization.FirstOrDefault(t => t.OrganizationId.Equals(deviceOrgId));
                    var service = db.ServiceInfo.Include(t => t.ServerInfo).
                                  FirstOrDefault(t => t.ServiceTypeId.Equals(ascsServerType) && (
                                                     t.ServerInfo.OrganizationId.Equals(org.ParentOrganizationId) || t.ServerInfo.OrganizationId.Equals(deviceOrgId)));

                    //var service = new ServiceInfo() {
                    //    EndPointsJson = "[{\"IPAddress\":\"192.168.18.76\",\"Port\":5002}]"
                    //};
                    if (service != null)
                    {
                        try
                        {
                            ASCSApi ascs = new ASCSApi(service);
                            var r        = ascs.SendDeviceAlarmStatus(status);
                            _logger.LogInformation("推送报警状态到哨位中心结果:{0}...", r.Success);
                        }
                        catch (Exception ex)
                        {
                            _logger.LogError("发送报警状态到哨位中心异常:{0}\r\n{1}", ex.Message, ex.StackTrace);
                        }
                        return;
                    }
                }
                _logger.LogInformation("未配置哨位中心服务,取消推送....");
            }));
        }
        public IActionResult Update([FromBody] AlarmSetting alarmSetting)
        {
            if (alarmSetting == null)
            {
                return(BadRequest());
            }

            using (var db = new AllInOneContext.AllInOneContext())
            {
                try
                {
                    _logger.LogInformation("开始更新报警设置....");
                    db.AlarmSetting.Update(alarmSetting);
                    db.SaveChanges();
                    _logger.LogInformation("完成更新报警设置....");
                }
                catch (Exception ex)
                {
                    _logger.LogError("更新报警设置异常,Message:{0}\r\n{StackTrace{1}}", ex.Message, ex.StackTrace);
                    return(BadRequest(ex.Message));
                }
            }
            return(NoContent());
        }
Exemple #9
0
        /// <summary>
        ///随机获取该组织机构下的一个监控点
        /// </summary>
        /// <param name="organizationId"></param>
        /// <returns></returns>

        private CameraView GetCameraView(Guid?organizationId, AllInOneContext.AllInOneContext db, DutyCheckLog log)
        {
            CameraView monitorySite = null;

            if (organizationId == null)
            {
                return(monitorySite);
            }
            //获取组织机构下所有的监控点View
            Organization org = db.Organization
                               .Include(t => t.Center)
                               .FirstOrDefault(p => p.OrganizationId.Equals(organizationId));

            if (org == null || org.Center == null || org.Center.EndPoints == null || org.Center.EndPoints.Count == 0)
            {
                return(monitorySite);
            }
            //
            List <DutyCheckLog> allDutyCheckLogs = GetAllDutyCheckLog(db, org);

            //判断是否已绑定监控点数据
            if (log.DutycheckSiteId != null)
            {
                string       murl = string.Format("http://{0}:{1}/Resources/MonitorySite/cameraId/{2}", org.Center.EndPoints[0].IPAddress, org.Center.EndPoints[0].Port, log.DutycheckSiteId);
                MonitorySite ms   = HttpClientHelper.GetOne <MonitorySite>(murl);
                return(ms.ToCameraView());
            }
            string url = string.Format("http://{0}:{1}/Resources/MonitorySite", org.Center.EndPoints[0].IPAddress, org.Center.EndPoints[0].Port);
            IEnumerable <MonitorySite> monitorySiteT = HttpClientHelper.Get <MonitorySite>(url);

            //过滤出有效的监控点
            monitorySiteT = monitorySiteT.Where(p => p.IsDutycheckSite);
            //确保所有监控点能覆盖
            CameraView randomCameraView = null;

            if (monitorySiteT == null || monitorySiteT.Count() == 0)
            {
                return(randomCameraView);
            }
            foreach (MonitorySite cam in monitorySiteT)
            {
                var competeLog = allDutyCheckLogs.FirstOrDefault(p => p.DutycheckSiteId.Equals(cam.CameraId));
                if (competeLog != null)
                {
                    continue;
                }
                else
                {
                    randomCameraView = cam.ToCameraView();
                    break;
                }
            }
            //
            if (randomCameraView == null)
            {
                Random r = new Random(monitorySiteT.Count());

                randomCameraView = monitorySiteT.ToArray()[r.Next()].ToCameraView();
            }

            return(randomCameraView);
        }
        public IActionResult Update([FromBody] AlarmMainframe alarmMainframe)
        {
            if (alarmMainframe == null)
            {
                return(BadRequest("AlarmMainframe object can not be null!"));
            }

            using (var db = new AllInOneContext.AllInOneContext())
            {
                try
                {
                    var obj = GetQuery(db).FirstOrDefault(t => t.AlarmMainframeId.Equals(alarmMainframe.AlarmMainframeId));
                    //已删除的防区设备
                    var deleteStatus = db.SystemOption.FirstOrDefault(t => t.SystemOptionCode.Equals("13800005"));
                    if (obj.AlarmPeripherals != null)
                    {
                        if (alarmMainframe.AlarmPeripherals == null)
                        {
                            obj.AlarmPeripherals.ForEach(t => t.AlarmDevice.StatusId = deleteStatus.SystemOptionId);
                        }
                        else
                        {
                            var uiAlarmPeripheralIds = alarmMainframe.AlarmPeripherals.Select(t => t.AlarmPeripheralId).ToList();
                            obj.AlarmPeripherals.ForEach(t =>
                            {
                                if (!uiAlarmPeripheralIds.Contains(t.AlarmPeripheralId))
                                {
                                    t.AlarmDevice.StatusId = deleteStatus.SystemOptionId; //已删除
                                }
                            });
                        }
                    }

                    //防区设备更新
                    if (alarmMainframe.AlarmPeripherals != null)
                    {
                        if (obj.AlarmPeripherals == null)
                        {
                            obj.AlarmPeripherals = alarmMainframe.AlarmPeripherals;
                        }
                        else
                        {
                            var dbAlarmPeripherals = obj.AlarmPeripherals.Select(t => t.AlarmPeripheralId).ToList();
                            alarmMainframe.AlarmPeripherals.ForEach(t =>
                            {
                                if (!dbAlarmPeripherals.Contains(t.AlarmPeripheralId))
                                {
                                    obj.AlarmPeripherals.Add(t);
                                }
                                else //已添加,更新
                                {
                                    var dbAlarmPeripheral = obj.AlarmPeripherals.FirstOrDefault(f => f.AlarmPeripheralId.Equals(t.AlarmPeripheralId));
                                    dbAlarmPeripheral.AlarmDevice.DeviceTypeId = t.AlarmDevice.DeviceTypeId;
                                    dbAlarmPeripheral.AlarmDevice.IPDeviceName = t.AlarmDevice.IPDeviceName;
                                    dbAlarmPeripheral.AlarmTypeId  = t.AlarmTypeId;
                                    dbAlarmPeripheral.AlarmChannel = t.AlarmChannel;
                                    dbAlarmPeripheral.DefendArea   = t.DefendArea;
                                }
                            });
                        }
                    }
                    obj.DeviceInfo.IPDeviceCode     = alarmMainframe.DeviceInfo.IPDeviceCode;
                    obj.DeviceInfo.EndPointsJson    = alarmMainframe.DeviceInfo.EndPointsJson;
                    obj.DeviceInfo.IPDeviceName     = alarmMainframe.DeviceInfo.IPDeviceName;
                    obj.DeviceInfo.ModifiedByUserId = alarmMainframe.DeviceInfo.ModifiedByUserId;
                    obj.DeviceInfo.OrganizationId   = alarmMainframe.DeviceInfo.OrganizationId;
                    obj.DeviceInfo.Modified         = DateTime.Now;
                    obj.DeviceInfo.DeviceTypeId     = alarmMainframe.DeviceInfo.DeviceTypeId;
                    db.AlarmMainframe.Update(obj);
                    db.SaveChanges();
                    return(NoContent());
                }
                catch (Exception ex)
                {
                    _logger.LogError("更新报警主机异常,Message:{0}\r\nStackTrace:{1}", ex.Message, ex.StackTrace);
                    return(BadRequest(ex));
                }
            }
        }
Exemple #11
0
        public IActionResult Add([FromBody] Sentinel sentinel)
        {
            if (sentinel == null)
            {
                return(BadRequest("Sentinel object can not be null!"));
            }
            using (var db = new AllInOneContext.AllInOneContext())
            {
                try
                {
                    //if (sentinel.DefenseDevices != null)
                    //{
                    //    sentinel.DefenseDevices.ForEach(t => {
                    //        var defenceType = db.SystemOption.FirstOrDefault(f => f.SystemOptionId.Equals(t.DeviceInfo.DeviceTypeId));
                    //        if (defenceType.SystemOptionName.Contains("左"))
                    //            t.DefenseDirectionId = Guid.Parse("a0002016-e009-b019-e001-abcd13900001");//横向
                    //        else
                    //            t.DefenseDirectionId = Guid.Parse("a0002016-e009-b019-e001-abcd13900002");//纵向
                    //    });
                    //}
                    //自定义分配哨位编号...1 - 32  2016-12-23 已取消,哨位编号从所属哨位节点获取
                    // int sentinelNum = NewSentinelNum(db, sentinel.DeviceInfo.OrganizationId);
                    //if (sentinelNum == -1)
                    //{
                    //    return BadRequest(new ApplicationException() { ErrorMessage = "哨位编号已分配完成", ErrorCode = "Unknow" });
                    //}
                    //_logger.LogInformation("哨位设备编号:{0}", sentinelNum);
                    //Sentinel.DeviceInfo.IPDeviceCode = sentinelNum;

                    //判断哨位节点下是否已添加哨位台
                    var deleteStatusId = Guid.Parse("a0002016-e009-b019-e001-abcd13800005");
                    var existSentinel  = db.Sentinel.Include(t => t.DeviceInfo).FirstOrDefault(t => !deleteStatusId.Equals(t.DeviceInfo.StatusId) &&
                                                                                               t.DeviceInfo.OrganizationId.Equals(sentinel.DeviceInfo.OrganizationId));
                    if (existSentinel != null)
                    {
                        return(BadRequest(new ApplicationException()
                        {
                            ErrorCode = "限制错误",
                            ErrorMessage = "已添加哨位终端设备"
                        }));
                    }

                    //防区设备编号从1000开始
                    var node = db.Organization.FirstOrDefault(t => t.OrganizationId.Equals(sentinel.DeviceInfo.OrganizationId));
                    if (sentinel.DefenseDevices != null)
                    {
                        var defenceNum = NewDefenceNum(db, sentinel.DeviceInfo.OrganizationId);
                        _logger.LogInformation("防区设备开始编号:{0}", defenceNum);
                        ++defenceNum;
                        sentinel.DefenseDevices.ForEach(t =>
                        {
                            t.DeviceInfo.IPDeviceCode = defenceNum;
                            t.DeviceInfo.Modified     = DateTime.Now;
                            var deviceType            = db.SystemOption.FirstOrDefault(f => f.SystemOptionId.Equals(t.DeviceInfo.DeviceTypeId));
                            var direction             = db.SystemOption.FirstOrDefault(f => f.SystemOptionId.Equals(t.DefenseDirectionId));
                            t.DeviceInfo.IPDeviceName = string.Format("{0}-{1}-{2}",
                                                                      node.OrganizationShortName, deviceType.SystemOptionName, direction.SystemOptionName);
                            ++defenceNum;
                        });
                    }
                    sentinel.DeviceInfo.Modified     = DateTime.Now;
                    sentinel.DeviceInfo.IPDeviceName = node.OrganizationShortName;

                    if (sentinel.SentinelVideos != null)
                    {
                        int order = 0;
                        sentinel.SentinelVideos.ForEach(t => t.OrderNo = order++);
                    }
                    db.Sentinel.Add(sentinel);
                    db.SaveChanges();
                    //  return CreatedAtAction("GetById", new { id = sentinel.SentinelId }, sentinel);
                    SendDatachangeNotify(sentinel.DeviceInfo, 2);
                    return(CreatedAtAction("", sentinel));
                }
                catch (DbUpdateException dbEx)
                {
                    _logger.LogError("添加哨位台异常:Message:{0}\r\n,StackTrace:{1}", dbEx.Message, dbEx.StackTrace);
                    return(BadRequest(new ApplicationException {
                        ErrorCode = "DBUpdate", ErrorMessage = "数据保存异常:" + dbEx.Message
                    }));
                }
                catch (Exception ex)
                {
                    _logger.LogError("添加哨位台异常:Message:{0}\r\n,StackTrace:{1}", ex.Message, ex.StackTrace);
                    return(BadRequest(new ApplicationException {
                        ErrorCode = "Unknown", ErrorMessage = ex.Message
                    }));
                }
            }
        }
Exemple #12
0
        public IActionResult Delete(Guid id)
        {
            using (var db = new AllInOneContext.AllInOneContext())
            {
                using (var tran = db.Database.BeginTransaction())
                {
                    try
                    {
                        Sentinel deleteObj = GetQuery(db).FirstOrDefault(t => t.SentinelId.Equals(id));
                        if (deleteObj == null)
                        {
                            return(NotFound());
                        }
                        //if (deleteObj.BulletboxCamera != null)
                        //    db.Set<SentinelVideo>().Remove(deleteObj.BulletboxCamera);
                        //if (deleteObj.FrontCamera != null)
                        //    db.Set<SentinelVideo>().Remove(deleteObj.FrontCamera);
                        //if (deleteObj.SentinelVideos != null)
                        //    db.Set<SentinelVideo>().RemoveRange(deleteObj.SentinelVideos);
                        //if (deleteObj.DeviceInfo != null)
                        //    db.IPDeviceInfo.Remove(deleteObj.DeviceInfo);
                        //if (deleteObj.SentinelSetting != null)
                        //    db.Set<SentinelSetting>().Remove(deleteObj.SentinelSetting);
                        //if (deleteObj.DefenseDevices != null)
                        //    db.DefenseDevice.RemoveRange(deleteObj.DefenseDevices);
                        //if (deleteObj.AlarmOutputChannels != null)
                        //    db.Set<DeviceChannelSetting>().RemoveRange(deleteObj.AlarmOutputChannels);
                        //移除哨位台人员指纹
                        DeleteSentinelFingerInfo(db, deleteObj);
                        //db.Sentinel.Remove(deleteObj);
                        //将设备标记为移除状态
                        var deleteStatusId = Guid.Parse("a0002016-e009-b019-e001-abcd13800005");
                        deleteObj.DeviceInfo.StatusId = deleteStatusId;

                        //报警配置设备id
                        List <Guid> alarmSourceIds = new List <Guid>();

                        if (deleteObj.DefenseDevices != null)
                        {
                            deleteObj.DefenseDevices.ForEach(t =>
                            {
                                t.DeviceInfo.StatusId = deleteStatusId;
                                alarmSourceIds.Add(t.DeviceInfoId);
                            });
                        }
                        db.IPDeviceInfo.Update(deleteObj.DeviceInfo);
                        db.IPDeviceInfo.UpdateRange(deleteObj.DefenseDevices.Select(t => t.DeviceInfo));
                        db.SaveChanges();

                        alarmSourceIds.Add(deleteObj.DeviceInfoId);
                        //删除报警配置
                        AlarmSettingUtility.RemoveAlarmSetting(db, alarmSourceIds);

                        tran.Commit();
                        SendDatachangeNotify(deleteObj.DeviceInfo, 0);
                    }
                    catch (DbUpdateException dbEx)
                    {
                        tran.Rollback();
                        _logger.LogError("删除哨位台异常:Message:{0}\r\n,StackTrace:{1}", dbEx.Message, dbEx.StackTrace);
                        return(BadRequest(new ApplicationException {
                            ErrorCode = "DBUpdate", ErrorMessage = "数据保存异常:" + dbEx.Message
                        }));
                    }
                    catch (Exception ex)
                    {
                        tran.Rollback();
                        _logger.LogError("删除哨位台异常:Message:{0}\r\n,StackTrace:{1}", ex.Message, ex.StackTrace);
                        return(BadRequest(new ApplicationException {
                            ErrorCode = "Unknown", ErrorMessage = ex.Message
                        }));
                    }
                }
            }
            return(NoContent());
        }
Exemple #13
0
        public IActionResult Update([FromBody] Sentinel sentinel)
        {
            if (sentinel == null)
            {
                return(BadRequest("Sentinel object can not be null!"));
            }

            using (var db = new AllInOneContext.AllInOneContext())
            {
                using (var tran = db.Database.BeginTransaction())
                {
                    try
                    {
                        Sentinel obj = GetQuery(db).FirstOrDefault(t => t.SentinelId.Equals(sentinel.SentinelId));
                        if (obj.BulletboxCamera != null)
                        {
                            db.Set <SentinelVideo>().Remove(obj.BulletboxCamera);
                        }
                        if (obj.FrontCamera != null)
                        {
                            db.Set <SentinelVideo>().Remove(obj.FrontCamera);
                        }
                        if (obj.SentinelVideos != null)
                        {
                            db.Set <SentinelVideo>().RemoveRange(obj.SentinelVideos);
                        }
                        //if (obj.DeviceInfo != null)
                        //    db.IPDeviceInfo.Remove(obj.DeviceInfo);
                        if (obj.SentinelSetting != null)
                        {
                            db.Set <SentinelSetting>().Remove(obj.SentinelSetting);
                        }
                        //db.Sentinel.Remove(obj);
                        //if (obj.DefenseDevices != null)
                        //    db.DefenseDevice.RemoveRange(obj.DefenseDevices);
                        if (obj.AlarmOutputChannels != null)
                        {
                            db.Set <DeviceChannelSetting>().RemoveRange(obj.AlarmOutputChannels);
                        }
                        db.SaveChanges();

                        //if (sentinel.DefenseDevices != null)
                        //{
                        //    sentinel.DefenseDevices.ForEach(t => {
                        //        var defenceType = db.SystemOption.FirstOrDefault(f => f.SystemOptionId.Equals(t.DeviceInfo.DeviceTypeId));
                        //        if (defenceType.SystemOptionName.Contains("左"))
                        //            t.DefenseDirectionId = Guid.Parse("a0002016-e009-b019-e001-abcd13900001");//横向
                        //        else
                        //            t.DefenseDirectionId = Guid.Parse("a0002016-e009-b019-e001-abcd13900002");//纵向
                        //    });
                        //}

                        //已删除的防区设备
                        var deleteStatus = db.SystemOption.FirstOrDefault(t => t.SystemOptionCode.Equals("13800005"));
                        if (obj.DefenseDevices != null)
                        {
                            if (sentinel.DefenseDevices == null)
                            {
                                obj.DefenseDevices.ForEach(t => t.DeviceInfo.StatusId = deleteStatus.SystemOptionId);
                            }
                            else
                            {
                                var uiDefenceDeviceIds = sentinel.DefenseDevices.Select(t => t.DefenseDeviceId).ToList();
                                obj.DefenseDevices.ForEach(t => { if (uiDefenceDeviceIds.Contains(t.DefenseDeviceId))
                                                                  {
                                                                      //更新
                                                                      t                   = sentinel.DefenseDevices.FirstOrDefault(f => f.DefenseDeviceId.Equals(t.DefenseDeviceId));
                                                                      var device          = db.IPDeviceInfo.FirstOrDefault(f => f.IPDeviceInfoId.Equals(t.DeviceInfoId));
                                                                      device.DeviceTypeId = t.DeviceInfo.DeviceTypeId; //设备类型修改
                                                                      db.SaveChanges();
                                                                  }
                                                                  else
                                                                  {
                                                                      t.DeviceInfo.StatusId = deleteStatus.SystemOptionId; //已删除
                                                                  } });
                            }
                        }

                        //防区设备更新
                        if (sentinel.DefenseDevices != null)
                        {
                            if (obj.DefenseDevices == null)
                            {
                                obj.DefenseDevices = sentinel.DefenseDevices;
                            }
                            else
                            {
                                var dbDefenceDevices = obj.DefenseDevices.Select(t => t.DefenseDeviceId).ToList();
                                sentinel.DefenseDevices.ForEach(t => {
                                    if (!dbDefenceDevices.Contains(t.DefenseDeviceId))
                                    {
                                        obj.DefenseDevices.Add(t);
                                    }
                                    else //已添加,更新
                                    {
                                        var dbDefenceDevice = obj.DefenseDevices.FirstOrDefault(f => f.DefenseDeviceId.Equals(t.DefenseDeviceId));
                                        dbDefenceDevice.DeviceInfo.DeviceTypeId = t.DeviceInfo.DeviceTypeId;
                                        //dbDefenceDevice.DeviceInfo.IPDeviceName = t.DeviceInfo.IPDeviceName;
                                        dbDefenceDevice.DefenseDirectionId = t.DefenseDirectionId;
                                        dbDefenceDevice.AlarmIn            = t.AlarmIn;
                                        dbDefenceDevice.AlarmOut           = t.AlarmOut;
                                        dbDefenceDevice.AlarmInNormalOpen  = t.AlarmInNormalOpen;
                                    }
                                });
                            }
                        }
                        //暂时编号从0开始
                        if (sentinel.SentinelVideos != null)
                        {
                            int order = 0;
                            sentinel.SentinelVideos.ForEach(t => t.OrderNo = order++);
                        }

                        //更新设备信息
                        obj.DeviceInfo.DeviceTypeId  = sentinel.DeviceInfo.DeviceTypeId;
                        obj.DeviceInfo.EndPointsJson = sentinel.DeviceInfo.EndPointsJson;
                        //obj.DeviceInfo.IPDeviceCode = sentinel.DeviceInfo.IPDeviceCode;
                        //obj.DeviceInfo.IPDeviceName = sentinel.DeviceInfo.IPDeviceName;
                        obj.DeviceInfo.OrganizationId = sentinel.DeviceInfo.OrganizationId;
                        obj.DeviceInfo.Modified       = DateTime.Now;

                        obj.SentinelSetting = sentinel.SentinelSetting;
                        obj.BulletboxCamera = sentinel.BulletboxCamera;
                        //obj.DeviceInfoId = sentinel.DeviceInfoId;
                        obj.FrontCamera     = sentinel.FrontCamera;
                        obj.IsActive        = sentinel.IsActive;
                        obj.Phone           = sentinel.Phone;
                        obj.SentinelId      = sentinel.SentinelId;
                        obj.SentinelSetting = sentinel.SentinelSetting;
                        obj.SentinelVideos  = sentinel.SentinelVideos;
                        //obj.DefenseDevices = sentinel.DefenseDevices;
                        obj.AlarmOutputChannels = sentinel.AlarmOutputChannels;

                        db.Sentinel.Update(obj);
                        db.SaveChanges();
                        tran.Commit();
                        SendDatachangeNotify(sentinel.DeviceInfo, 1);
                        return(NoContent());
                    }
                    catch (DbUpdateException dbEx)
                    {
                        tran.Rollback();
                        _logger.LogError("更新哨位台异常:Message:{0}\r\n,StackTrace:{1}", dbEx.Message, dbEx.StackTrace);
                        return(BadRequest(new ApplicationException {
                            ErrorCode = "DBUpdate", ErrorMessage = "数据保存异常:" + dbEx.Message
                        }));
                    }
                    catch (Exception ex)
                    {
                        tran.Rollback();
                        _logger.LogError("更新哨位台异常:Message:{0}\r\n,StackTrace:{1}", ex.Message, ex.StackTrace);
                        return(BadRequest(new ApplicationException {
                            ErrorCode = "Unknown", ErrorMessage = ex.Message
                        }));
                    }
                }
            }
        }
Exemple #14
0
        /// <summary>
        /// 根据组织机构获取查勤点
        /// </summary>
        /// <param name="organizationId"></param>
        /// <returns></returns>
        public static MonitorySite GetMonitorySiteByOrganizationId(Guid organizationId, AllInOneContext.AllInOneContext db)
        {
            MonitorySite monitorySite = db.MonitorySite
                                        .FirstOrDefault(p => p.OrganizationId.Equals(organizationId) &&
                                                        p.IsDutycheckSite == true);

            return(monitorySite);
        }
Exemple #15
0
 public IActionResult GetCheckDuty(int fingerPrintNumber, Guid sentinelId)
 {
     try
     {
         using (var db = new AllInOneContext.AllInOneContext())
         {
             var fingerprint = db.Set <Fingerprint>().FirstOrDefault(p => p.FingerprintNo.Equals(fingerPrintNumber));
             if (fingerprint == null)
             {
                 return(new ObjectResult(new FingerprintOnDuty {
                     FingerprintNumber = fingerPrintNumber, Result = false
                 }));
             }
             //查找对应人员
             Staff staff = db.Staff
                           .FirstOrDefault(p => p.StaffId.Equals(fingerprint.StaffId));
             if (staff == null)
             {
                 return(new ObjectResult(new FingerprintOnDuty {
                     FingerprintNumber = fingerPrintNumber, Result = false
                 }));
             }
             //查找哨位台
             var sentry = db.IPDeviceInfo
                          .FirstOrDefault(p => p.IPDeviceInfoId.Equals(sentinelId));
             if (sentry == null)
             {
                 return(new ObjectResult(new FingerprintOnDuty {
                     FingerprintNumber = fingerPrintNumber, Result = false
                 }));
             }
             //查找排班情况
             var logs = db.DutyCheckLog
                        .Include(t => t.DutyCheckSiteSchedule)
                        .Where(p => p.DutyCheckSiteSchedule != null
                               //
                               && new DateTime(p.PlanDate.Value.Year, p.PlanDate.Value.Month, p.PlanDate.Value.Day, p.TimePeriod.StartTime.Hour, p.TimePeriod.StartTime.Minute, p.TimePeriod.StartTime.Second) <= DateTime.Now &&
                               new DateTime(p.PlanDate.Value.Year, p.PlanDate.Value.Month, p.PlanDate.Value.Day, p.TimePeriod.EndTime.Hour, p.TimePeriod.EndTime.Minute, p.TimePeriod.EndTime.Second) >= DateTime.Now);
             DutyCheckLog log = null;
             foreach (DutyCheckLog dcl in logs) //由于DutyCheckSiteScheduleId也可能为空,暂这样处理
             {
                 if (dcl.DutyCheckSiteSchedule != null && dcl.DutyCheckSiteSchedule.SiteOrganizationId.Equals(sentry.OrganizationId) &&
                     dcl.DutyCheckSiteSchedule.CheckManId.Equals(staff.StaffId))
                 {
                     log = dcl;
                     break;
                 }
             }
             if (log == null)
             {
                 return(new ObjectResult(new FingerprintOnDuty {
                     FingerprintNumber = fingerPrintNumber, Result = false
                 }));
             }
             else
             {
                 return(new ObjectResult(new FingerprintOnDuty {
                     FingerprintNumber = fingerPrintNumber, Result = true
                 }));
             }
         }
     }
     catch (Exception ex)
     {
         _logger.LogError("检查人员是否正常换岗:Message:{0}\r\n,StackTrace:{1}", ex.Message, ex.StackTrace);
         return(BadRequest(new ApplicationException {
             ErrorCode = "Unknown", ErrorMessage = ex.Message
         }));
     }
 }
Exemple #16
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
                }));
            }
        }
Exemple #17
0
        public void Run()
        {
            Task.Factory.StartNew(() =>
            {
                _logger.LogInformation("Start forward alarmlog task......");
                while (true)
                {
                    if (m_alarmLogList.Count == 0)
                    {
                        m_forwardWaiter.WaitOne(-1);
                    }
                    using (var db = new AllInOneContext.AllInOneContext())
                    {
                        //默认第一个为本地应用中心节点()
                        var topApplicationCenter = db.Organization.Include(t => t.Center).
                                                   OrderBy(t => t.OrganizationFullName).Select(t => t.Center).
                                                   FirstOrDefault();

                        if (topApplicationCenter == null || topApplicationCenter.EndPoints == null || topApplicationCenter.EndPoints.Count == 0)
                        {
                            _logger.LogInformation("未配置上级服务器IP,报警上传等待10 min后再检测......");
                            m_forwardWaiter.WaitOne(10 * 60000);
                            continue;
                        }

                        EndPointInfo endPoint = topApplicationCenter.EndPoints.First();
                        string url            = string.Format("http://{0}:{1}/Alarm/AlarmLog/Publish", endPoint.IPAddress, endPoint.Port);
                        //上传报警记录
                        string error = "";
                        lock (m_logLockObj)
                        {
                            for (int i = m_alarmLogList.Count - 1; i >= 0; i--)
                            {
                                AlarmLog log = m_alarmLogList[i];
                                if (log.UploadCount < 10)
                                {
                                    var result = HttpClientHelper.Post <AlarmLog>(log, url);
                                    if (result.Success)
                                    {
                                        log.UploadStatus = 1;  //上传完成
                                    }
                                    else
                                    {
                                        log.UploadCount++;
                                    }
                                    db.AlarmLog.Update(log);
                                    db.SaveChanges();
                                    m_alarmLogList.RemoveAt(i);
                                }
                                else if (log.UploadCount == 10)
                                {
                                    //上传次数达到10次,记录....
                                    log.UploadCount++;
                                    db.AlarmLog.Update(log);
                                    db.SaveChanges();
                                    m_alarmLogList.Remove(log);
                                    //广播消息
                                    error = string.Format("多次尝试推送报警失败,取消推送{0}发生的{1}报警消息到上级系统!",
                                                          log.AlarmSource.IPDeviceName, log.AlarmType.SystemOptionName);
                                    ForwardAlarmLogError forwardErr = new ForwardAlarmLogError()
                                    {
                                        ErrorDesc  = error,
                                        CreateTime = DateTime.Now
                                    };
                                    MQPulish.PublishMessage("ForwardAlarmLogError", forwardErr);
                                }
                            }
                        }
                    }
                    // m_uploadWaiter.WaitOne(10 * 1000);
                }
            });
        }
Exemple #18
0
        public IActionResult Update([FromBody] DutyCheckLog model)
        {
            try
            {
                if (model == null)
                {
                    return(BadRequest());
                }
                using (var db = new AllInOneContext.AllInOneContext())
                {
                    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.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)
                                       .Include(t => t.CircularTypes).ThenInclude(t => t.Dispose)
                                       .Include(t => t.MainApprise)
                                       .FirstOrDefault(p => p.DutyCheckLogId.Equals(model.DutyCheckLogId));
                    if (log == null)
                    {
                        return(BadRequest());
                    }
                    //转换数据
                    log.Apprises                = model.Apprises;
                    log.CircularTypes           = model.CircularTypes;
                    log.Description             = model.Description;
                    log.DutyCheckOperationId    = model.DutyCheckOperationId;
                    log.DutyCheckSiteScheduleId = model.DutyCheckSiteScheduleId;
                    log.DutyCheckStaffId        = model.DutyCheckStaffId;
                    log.MainAppriseId           = model.MainAppriseId;
                    log.RecordTime              = model.RecordTime;
                    log.StatusId                = model.StatusId;
                    //
                    db.DutyCheckLog.Update(log);
                    db.SaveChanges();

                    //判断是否为查勤包查勤,刷新查勤进度
                    if (model.RecordTypeId.Equals(new Guid("a0002016-e009-b019-e001-abcd18000001"))) //网络查勤
                    {
                        CheckPackageProcess(model.OrganizationId);
                    }
                    return(new NoContentResult());
                }
            }
            catch (DbUpdateException dbEx)
            {
                return(BadRequest(new ApplicationException {
                    ErrorCode = "DBUpdate", ErrorMessage = "数据保存异常:" + dbEx.Message
                }));
            }
            catch (System.Exception ex)
            {
                return(BadRequest(new ApplicationException {
                    ErrorCode = "Unknown", ErrorMessage = ex.Message
                }));
            }
        }
Exemple #19
0
        public IActionResult GetDutyCheckLogByParameter(DateTime startTime, DateTime endTime, int currentPage,
                                                        int pageSize, Guid?[] filedStaffId, Guid?[] dutyCheckSiteScheduleId, Guid?organizationId,
                                                        Guid?[] appriseId, Guid?[] recordTypeId)
        {
            try
            {
                if (filedStaffId == null || filedStaffId.Length == 0)
                {
                }

                using (var db = new AllInOneContext.AllInOneContext())
                {
                    var query = from p in 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.CheckDutySite)*/
                                .Include(t => t.DutyCheckSiteSchedule).ThenInclude(t => t.CheckMan)
                                .Include(t => t.DutyCheckStaff)
                                .Include(t => t.Organization)
                                .Include(t => t.RecordType)
                                .Include(t => t.CircularTypes).ThenInclude(t => t.Dispose)
                                .Include(t => t.MainApprise)
                                .Include(t => t.AppraiseICO)
                                orderby p.RecordTime descending
                                where p.RecordTime >= startTime && p.RecordTime <= endTime &&
                                ((filedStaffId == null || filedStaffId.Length == 0) || filedStaffId.Contains(p.DutyCheckStaff.StaffId)) &&
                                ((dutyCheckSiteScheduleId == null || dutyCheckSiteScheduleId.Length == 0 || p.DutyCheckSiteSchedule.CheckMan == null) || dutyCheckSiteScheduleId.Contains(p.DutyCheckSiteSchedule.CheckMan.StaffId)) &&
                                ((organizationId == null) || p.Organization.OrganizationId.Equals(organizationId)) &&
                                (p.Status.SystemOptionId.Equals(new Guid("24AC9875-C463-47B6-8147-5845874C3CAF"))) &&  //已结束 只显示已结束的记录
                                ((appriseId == null || appriseId.Length == 0) || appriseId.Contains(p.MainAppriseId)) &&
                                ((recordTypeId == null || recordTypeId.Length == 0) || recordTypeId.Contains(p.RecordType.SystemOptionId))
                                select p;
                    if (currentPage == 0)
                    {
                        currentPage = 1;
                    }
                    if (pageSize <= 0)
                    {
                        pageSize = 10;
                    }

                    var data = query.Skip(pageSize * (currentPage - 1)).Take(pageSize * currentPage).ToList();

                    //if (data.ToList().Count == 0)
                    //{
                    //    return NoContent();
                    //}
                    QueryPagingRecord queryPagingRecord = new QueryPagingRecord
                    {
                        SumRecordCount = query.Count(),
                        Record         = data.ToList()
                    };
                    return(new ObjectResult(queryPagingRecord));
                }
            }
            catch (Exception ex)
            {
                return(BadRequest(new ApplicationException {
                    ErrorCode = "Unknown", ErrorMessage = ex.Message
                }));
            }
        }
Exemple #20
0
        private static void InitUnitDutyCheckSchedule()
        {
            using (var db = new AllInOneContext.AllInOneContext())
            {
                List <UnitDutyCheckScheduleDetail> list = new List <UnitDutyCheckScheduleDetail>();
                list.Add(new UnitDutyCheckScheduleDetail
                {
                    CheckManId   = new Guid("5a23904c-4bb3-4caf-5212-9c58302721d5"),
                    Data         = "2017-01-07",
                    TimePeriodId = new Guid("476f089d-cae0-0e10-4560-34f3ff659c9e"),
                    UnitDutyCheckScheduleDetailId = Guid.NewGuid()
                });
                //
                list.Add(new UnitDutyCheckScheduleDetail
                {
                    CheckManId   = new Guid("9c1607e9-14a9-8ba1-caae-a211678390c3"),
                    Data         = "2017-01-07",
                    TimePeriodId = new Guid("d2bb10b9-73a0-7117-cf5a-ab41f638c12b"),
                    UnitDutyCheckScheduleDetailId = Guid.NewGuid()
                });


                list.Add(new UnitDutyCheckScheduleDetail
                {
                    CheckManId   = new Guid("e4cb9413-31d5-984b-6d53-063df03cb97b"),
                    Data         = "2017-01-08",
                    TimePeriodId = new Guid("476f089d-cae0-0e10-4560-34f3ff659c9e"),
                    UnitDutyCheckScheduleDetailId = Guid.NewGuid()
                });
                //
                list.Add(new UnitDutyCheckScheduleDetail
                {
                    CheckManId   = new Guid("9c1607e9-14a9-8ba1-caae-a211678390c3"),
                    Data         = "2017-01-08",
                    TimePeriodId = new Guid("d2bb10b9-73a0-7117-cf5a-ab41f638c12b"),
                    UnitDutyCheckScheduleDetailId = Guid.NewGuid()
                });



                UnitDutyCheckSchedule model = new UnitDutyCheckSchedule
                {
                    EndDate                      = Convert.ToDateTime("2017-01-15"),
                    ListerId                     = new Guid("5a23904c-4bb3-4caf-5212-9c58302721d5"),
                    OrganizationId               = new Guid("8098e65c-e366-404b-9d09-b8bcea3adca5"),
                    StartDate                    = Convert.ToDateTime("2017-01-09"),
                    ScheduleId                   = new Guid("9b94a7d4-9f34-a101-4b35-53db7ca37c2a"),
                    UnitDutyCheckScheduleId      = Guid.NewGuid(),
                    UnitDutyCheckScheduleDetails = list
                };

                try
                {
                    db.UnitDutyCheckSchedule.Add(model);
                    db.SaveChanges();
                }
                catch (Exception ex)
                {
                }
            }
        }
Exemple #21
0
 private IQueryable <ServiceInfo> GetDbQuery(AllInOneContext.AllInOneContext dbContext)
 {
     return(dbContext.ServiceInfo.Include(t => t.ServerInfo).ThenInclude(t => t.Organization).Include(t => t.ServiceType));
 }
Exemple #22
0
        private void Run()
        {
            while (WaitHandle.WaitAny(m_WaitHandles) == 0)
            {
                if (m_alarmLogQueue.Count == 0)
                {
                    m_queueThreadSemaphore.Reset();
                }

                //出列,处理
                AlarmLog alarmLog  = null;
                bool     dequeueOk = m_alarmLogQueue.TryDequeue(out alarmLog);
                if (dequeueOk)
                {
                    //报警联动
                    using (var db = new AllInOneContext.AllInOneContext())
                    {
                        try
                        {
                            var setting = GetAlarmSetting(db, alarmLog);
                            if (setting != null)
                            {
                                int code = 0;
                                if (Int32.TryParse(setting.AlarmSource.Organization.OrganizationCode, out code))
                                {
                                    setting.AlarmSource.IPDeviceCode = code;
                                }
                                Plan plan = null;
                                DeviceAlarmStatus status = null;
                                //本地广播报警消息
                                MQPulish.PublishMessage("AlarmLog", alarmLog);
                                if (alarmLog.AlarmStatusId.Equals(Guid.Parse("A0002016-E009-B019-E001-ABCD13100001"))) //执行预案,状态未确认
                                {
                                    if (ScheduleUtility.IsValidSchedule(setting.Schedule, DateTime.Now))               //符合当前排班的情况
                                    {
                                        ////本地广播报警消息
                                        //MQPulish.PublishMessage("AlarmLog", alarmLog);
                                        plan = db.Plan.Include(t => t.Actions).ThenInclude(t => t.PlanActions).ThenInclude(t => t.Action).FirstOrDefault(t => t.PlanId.Equals(setting.BeforePlanId));
                                    }
                                }
                                else if (alarmLog.AlarmStatusId.Equals(Guid.Parse("A0002016-E009-B019-E001-ABCD13100002")))  //执行应急预案
                                {
                                    //预案确认
                                    plan = db.Plan.Include(t => t.Actions).ThenInclude(t => t.PlanActions).ThenInclude(t => t.Action).FirstOrDefault(t => t.PlanId.Equals(setting.EmergencyPlanId));

                                    //哨位报警,确认需推送报警确认/取消到哨位中心服务
                                    status = GetDeviceAlarmStatus(db, setting, true);
                                }
                                else if (alarmLog.AlarmStatusId.Equals(Guid.Parse("A0002016-E009-B019-E001-ABCD13100003"))) //报警取消,停止联动动作
                                {
                                    //哨位报警,取消需推送报警确认/取消到哨位中心服务
                                    status = GetDeviceAlarmStatus(db, setting, false);
                                    StopPlan(setting);
                                }
                                else if (alarmLog.AlarmStatusId.Equals(Guid.Parse("A0002016-E009-B019-E001-ABCD13100004"))) //停止联动动作,已关闭
                                {
                                    status = GetDeviceAlarmStatus(db, setting, false);
                                    StopPlan(setting);
                                }

                                //找到满足条件的预案,发送到任务服务,启动预案
                                if (plan != null)
                                {
                                    plan.PlanTrigger = new PlanTriggerSource()
                                    {
                                        AlarmSource     = setting.AlarmSource,
                                        AlarmType       = setting.AlarmType,
                                        BeforePlanId    = setting.BeforePlanId,
                                        EmergencyPlanId = setting.EmergencyPlanId,
                                        AlarmLogId      = alarmLog.AlarmLogId
                                    };
                                    StartPlan(plan);
                                }
                                if (status != null)
                                {
                                    SendAlarmStatusToASCS(status, setting.AlarmSource.OrganizationId);
                                }
                            }
                            else
                            {
                                _logger.LogInformation("未配置报警,没有任务联动响应!!!!");
                            }
                        }
                        catch (Exception ex)
                        {
                            _logger.LogError("报警处理异常,Message:{0}\r\nStackTrace:{1}", ex.Message, ex.StackTrace);
                        }
                    }
                }
            }
        }
        public async Task <IActionResult> UploadFileByByteArray([FromBody] Attachment attach)
        {
            try
            {
                if (attach == null)
                {
                    return(BadRequest(new ApplicationException()
                    {
                        ErrorCode = "Unknow", ErrorMessage = "attach can not be null!"
                    }));
                }
                if (ModelState.IsValid)
                {
                    _logger.LogInformation("处理上传截图 Begin");

                    if (attach.File != null && attach.File.Length > 0)//以FormFile形式上传
                    {
                        var File         = attach.File;
                        var fileName     = ContentDispositionHeaderValue.Parse(File.ContentDisposition).FileName.Trim('"');
                        var appFileName  = Process.GetCurrentProcess().MainModule.FileName;
                        var uploadFolder = Path.GetDirectoryName(appFileName);
                        uploadFolder = Path.Combine(uploadFolder, "attach");
                        if (!Directory.Exists(uploadFolder))
                        {
                            Directory.CreateDirectory(uploadFolder);
                        }
                        await File.SaveAsAsync(Path.Combine(uploadFolder, fileName));

                        using (var db = new AllInOneContext.AllInOneContext())
                        {
                            //如果截图记录不存在则更新
                            var dbAtt = db.Attachment.FirstOrDefault(t => t.AttachmentId.Equals(attach.AttachmentId));
                            if (attach.AttachmentId.Equals(Guid.Empty))
                            {
                                attach.AttachmentId = Guid.NewGuid();
                            }

                            if (dbAtt != null)
                            {
                                dbAtt.AttachmentPath = "/attach/";
                                dbAtt.ContentType    = File.ContentType;
                                dbAtt.AttachmentName = fileName;
                                dbAtt.Modified       = DateTime.Now;
                                dbAtt.ModifiedBy     = db.User.FirstOrDefault();
                                db.Attachment.Update(dbAtt);  //打卡的情况,截图记录先保存后刷新
                            }
                            else
                            {
                                attach.AttachmentPath = "/attach/";
                                attach.ContentType    = File.ContentType;
                                attach.AttachmentName = fileName;
                                attach.Modified       = DateTime.Now;
                                attach.ModifiedBy     = db.User.FirstOrDefault();
                                db.Attachment.Add(attach);
                            }
                            db.SaveChanges();
                            _logger.LogInformation("处理上传截图 End");
                        }
                    }
                    else if (attach.FileData != null && attach.FileData.Length > 0)//以字节流形式上传
                    {
                        var appFileName  = Process.GetCurrentProcess().MainModule.FileName;
                        var uploadFolder = Path.GetDirectoryName(appFileName);
                        uploadFolder = Path.Combine(uploadFolder, "attach");
                        if (!Directory.Exists(uploadFolder))
                        {
                            Directory.CreateDirectory(uploadFolder);
                        }
                        System.IO.File.WriteAllBytes(Path.Combine(uploadFolder, attach.AttachmentName), attach.FileData);

                        using (var db = new AllInOneContext.AllInOneContext())
                        {
                            //如果截图记录不存在则更新
                            var dbAtt = db.Attachment.FirstOrDefault(t => t.AttachmentId.Equals(attach.AttachmentId));
                            if (attach.AttachmentId.Equals(Guid.Empty))
                            {
                                attach.AttachmentId = Guid.NewGuid();
                            }

                            if (dbAtt != null)
                            {
                                dbAtt.AttachmentPath = "/attach/";
                                dbAtt.ContentType    = attach.ContentType;
                                dbAtt.AttachmentName = attach.AttachmentName;
                                dbAtt.Modified       = DateTime.Now;
                                dbAtt.ModifiedBy     = db.User.FirstOrDefault();
                                db.Attachment.Update(dbAtt);  //打卡的情况,截图记录先保存后刷新
                            }
                            else
                            {
                                attach.AttachmentPath = "/attach/";
                                attach.ContentType    = attach.ContentType;
                                attach.AttachmentName = attach.AttachmentName;
                                attach.Modified       = DateTime.Now;
                                attach.ModifiedBy     = db.User.FirstOrDefault();
                                db.Attachment.Add(attach);
                            }
                            db.SaveChanges();
                            _logger.LogInformation("处理上传截图 End");
                        }
                    }
                }
                return(Ok());
            }
            catch (Exception ex)
            {
                return(BadRequest(new ApplicationException()
                {
                    ErrorCode = "Unknow", ErrorMessage = ex.Message
                }));
            }
        }
Exemple #24
0
        public IActionResult QueryFieldDutyCheckView(DateTime data, Guid statusId, int currentPage,
                                                     int pageSize)
        {
            using (var db = new AllInOneContext.AllInOneContext())
            {
                //测试数据
                List <FieldDutyCheckLog> list = new List <FieldDutyCheckLog>();
                list.Add(new FieldDutyCheckLog
                {
                    Appriase               = "好",
                    AttachmentPath         = "",
                    DutyCheckStaffName     = "张三",
                    DutyCheckTime          = "2017-01-11 10:32:01",
                    OrganizationName       = "xx中队",
                    PlanDutyCheckStaffName = "张三",
                    PlanDutyCheckTime      = "2017-01-11 08:00-12:00",
                    SentinelName           = "一号哨",
                    Status = "正常"
                });
                list.Add(new FieldDutyCheckLog
                {
                    Appriase               = "好",
                    AttachmentPath         = "",
                    DutyCheckStaffName     = "张三",
                    DutyCheckTime          = "2017-01-11 11::21",
                    OrganizationName       = "xx中队",
                    PlanDutyCheckStaffName = "张三",
                    PlanDutyCheckTime      = "2017-01-11 08:00-12:00",
                    SentinelName           = "二号哨",
                    Status = "正常"
                });
                list.Add(new FieldDutyCheckLog
                {
                    Appriase               = "好",
                    AttachmentPath         = "",
                    DutyCheckStaffName     = "张三",
                    DutyCheckTime          = "2017-01-11 11::42",
                    OrganizationName       = "xx中队",
                    PlanDutyCheckStaffName = "张三",
                    PlanDutyCheckTime      = "2017-01-11 08:00-12:00",
                    SentinelName           = "三号哨",
                    Status = "正常"
                });
                //
                list.Add(new FieldDutyCheckLog
                {
                    Appriase               = "好",
                    AttachmentPath         = "",
                    DutyCheckStaffName     = "李四",
                    DutyCheckTime          = "2017-01-11 12:12",
                    OrganizationName       = "xx中队",
                    PlanDutyCheckStaffName = "李四",
                    PlanDutyCheckTime      = "2017-01-11 12:00-18:00",
                    SentinelName           = "一号哨",
                    Status = "正常"
                });
                list.Add(new FieldDutyCheckLog
                {
                    Appriase               = "好",
                    AttachmentPath         = "",
                    DutyCheckStaffName     = "李四",
                    DutyCheckTime          = "2017-01-11 14:05",
                    OrganizationName       = "xx中队",
                    PlanDutyCheckStaffName = "李四",
                    PlanDutyCheckTime      = "2017-01-11 12:00-18:00",
                    SentinelName           = "二号哨",
                    Status = "正常"
                });
                list.Add(new FieldDutyCheckLog
                {
                    Appriase               = "好",
                    AttachmentPath         = "",
                    DutyCheckStaffName     = "李四",
                    DutyCheckTime          = "2017-01-11 17:35",
                    OrganizationName       = "xx中队",
                    PlanDutyCheckStaffName = "李四",
                    PlanDutyCheckTime      = "2017-01-11 12:00-18:00",
                    SentinelName           = "三号哨",
                    Status = "正常"
                });
                //
                list.Add(new FieldDutyCheckLog
                {
                    Appriase               = "中",
                    AttachmentPath         = "",
                    DutyCheckStaffName     = "王五",
                    DutyCheckTime          = "2017-01-11 19:55",
                    OrganizationName       = "xx中队",
                    PlanDutyCheckStaffName = "王五",
                    PlanDutyCheckTime      = "2017-01-11 18:00-00:00",
                    SentinelName           = "一号哨",
                    Status = "正常"
                });
                list.Add(new FieldDutyCheckLog
                {
                    Appriase               = "好",
                    AttachmentPath         = "",
                    DutyCheckStaffName     = "王五",
                    DutyCheckTime          = "2017-01-11 21:55",
                    OrganizationName       = "xx中队",
                    PlanDutyCheckStaffName = "王五",
                    PlanDutyCheckTime      = "2017-01-11 18:00-00:00",
                    SentinelName           = "二号哨",
                    Status = "正常"
                });
                list.Add(new FieldDutyCheckLog
                {
                    Appriase               = "好",
                    AttachmentPath         = "",
                    DutyCheckStaffName     = "王五",
                    DutyCheckTime          = "2017-01-12 1:55",
                    OrganizationName       = "xx中队",
                    PlanDutyCheckStaffName = "王五",
                    PlanDutyCheckTime      = "2017-01-11 18:00-00:00",
                    SentinelName           = "三号哨",
                    Status = "异常"
                });

                QueryPagingRecord queryPagingRecord = new QueryPagingRecord
                {
                    SumRecordCount = 9,
                    Record         = list
                };

                return(new ObjectResult(queryPagingRecord));
            }
        }
        public IEnumerable <EncoderAlarmView> GetEncoderAlarmSetting()
        {
            using (var db = new AllInOneContext.AllInOneContext())
            {
                try
                {
                    //摄像机通道 + 外接设备接入通道 = 编码器通道;
                    var alarmchannels = ((from cam in db.Set <Camera>().Include(t => t.IPDevice).Include(t => t.VideoForward).ToList()
                                          join encoder in db.Encoder.Include(t => t.DeviceInfo).Include(t => t.EncoderType).ToList() on cam.EncoderId equals encoder.EncoderId
                                          select new
                    {
                        IPDeviceId = cam.IPDeviceId,
                        CameraId = cam.CameraId,
                        DeviceInfo = cam.IPDevice,
                        Encoder = cam.Encoder,
                        EncoderId = cam.EncoderId,
                        EncoderChannel = cam.EncoderChannel,
                        //VideoForwardPort = cam.VideoForward.Port,
                        VideoForward = cam.VideoForward,
                        CameraNo = cam.CameraNo,
                        IsCamera = true,
                    }).Union(
                                             from ap in db.AlarmPeripheral.Include(t => t.AlarmDevice).ToList()
                                             join encoder in db.Encoder.Include(t => t.DeviceInfo).Include(t => t.EncoderType).ToList() on ap.EncoderId equals encoder.EncoderId
                                             select new
                    {
                        IPDeviceId = ap.AlarmDeviceId,
                        CameraId = ap.AlarmDeviceId,
                        DeviceInfo = ap.AlarmDevice,
                        Encoder = encoder,
                        EncoderId = encoder.EncoderId,
                        EncoderChannel = ap.AlarmChannel,
                        //VideoForwardPort = 0,
                        VideoForward = new Resources.Model.ServiceInfo(),
                        CameraNo = 0,
                        IsCamera = false
                    })).ToList();

                    var alarmsettings = db.AlarmSetting.Include(t => t.AlarmType).Select(t => new
                    {
                        IPDeviceId  = t.AlarmSourceId,
                        AlarmTypeId = t.AlarmTypeId
                    }).ToList().GroupBy(t => t.IPDeviceId, t => t.AlarmTypeId);

                    var list = (from device in alarmchannels
                                join st in alarmsettings on device.IPDeviceId equals st.Key into leftAlarmSettings
                                from leftAlarmSetting in leftAlarmSettings.DefaultIfEmpty()
                                select new EncoderAlarmView()
                    {
                        DeviceInfo = new CameraView()
                        {
                            CameraId = device.CameraId,
                            IPDeviceId = device.IPDeviceId,
                            CameraName = device.DeviceInfo.IPDeviceName,
                            EncoderChannel = device.EncoderChannel,
                            CameraNo = device.CameraNo,
                            EncoderInfo = new EncoderInfo()
                            {
                                EncoderType = device.Encoder.EncoderType.EncoderCode,
                                EndPoints = device.Encoder.DeviceInfo.EndPoints,
                                Password = device.Encoder.DeviceInfo.Password,
                                User = device.Encoder.DeviceInfo.UserName
                            },
                            VideoForwardInfo = new ViewModel.ServiceInfo()
                            {
                                EndPoints = device.VideoForward.EndPoints,
                                User = device.VideoForward.Username,
                                Password = device.VideoForward.Password
                            }
                        },
                        DeployAlarmType = leftAlarmSetting == null?null:leftAlarmSetting.ToList(),          //st.ToList(),
                        EncoderId = device.EncoderId,
                        IsCamera = device.IsCamera
                    }).ToList();
                    return(list);
                }
                catch (Exception ex)
                {
                    _logger.LogError("获取编码器配置异常:Message:{0}\r\nStackTrace:{1}", ex.Message, ex.StackTrace);
                    return(null);
                }
            }
        }
Exemple #26
0
        public DutyDetail GetDutyDetailBySentinelId(Guid sentinelId)
        {
            using (var db = new AllInOneContext.AllInOneContext())
            {
                DateTime time     = DateTime.Now;
                var      Sentinel = db.IPDeviceInfo
                                    .FirstOrDefault(p => p.IPDeviceInfoId.Equals(sentinelId));
                if (Sentinel == null)
                {
                    return(null);
                }
                //取当前记录
                var logs = db.DutyCheckLog
                           .Include(t => t.DutyCheckSiteSchedule).ThenInclude(t => t.CheckMan).ThenInclude(t => t.Organization)
                           .Include(t => t.DutyCheckSiteSchedule).ThenInclude(t => t.CheckMan).ThenInclude(t => t.PositionType)
                           .Include(t => t.DayPeriod).ThenInclude(t => t.TimePeriods)
                           .Where(p => p.DutyCheckSiteSchedule != null &&
                                  new DateTime(p.PlanDate.Value.Year, p.PlanDate.Value.Month, p.PlanDate.Value.Day, p.TimePeriod.StartTime.Hour, p.TimePeriod.StartTime.Minute, p.TimePeriod.StartTime.Second) <= time &&
                                  new DateTime(p.PlanDate.Value.Year, p.PlanDate.Value.Month, p.PlanDate.Value.Day, p.TimePeriod.EndTime.Hour, p.TimePeriod.EndTime.Minute, p.TimePeriod.EndTime.Second) >= time);
                if (logs == null)
                {
                    return(null);
                }
                DutyCheckLog log = null;
                foreach (DutyCheckLog dcl in logs) //由于DutyCheckSiteScheduleId也可能为空,暂这样处理
                {
                    if (dcl.DutyCheckSiteSchedule != null && dcl.DutyCheckSiteSchedule.SiteOrganizationId.Equals(Sentinel.OrganizationId))
                    {
                        log = dcl;
                        break;
                    }
                }
                if (log == null)
                {
                    return(null);
                }
                //取前一时段的记录
                int day        = 0;
                int oldOrderNo = log.TimePeriod.OrderNo - 1;
                if (oldOrderNo <= 0)
                {
                    oldOrderNo = log.DayPeriod.TimePeriods.Max(p => p.OrderNo);
                    day        = -1;
                }
                TimePeriod oldTimePeriod = log.DayPeriod.TimePeriods.Find(p => p.OrderNo.Equals(oldOrderNo));
                //
                DateTime     oldStartTime = new DateTime(time.AddDays(day).Date.Year, time.AddDays(day).Date.Month, time.AddDays(day).Date.Day, oldTimePeriod.StartTime.Hour, oldTimePeriod.StartTime.Minute, oldTimePeriod.StartTime.Second);
                DateTime     oldEndTime   = new DateTime(time.AddDays(day).Date.Year, time.AddDays(day).Date.Month, time.AddDays(day).Date.Day, oldTimePeriod.EndTime.Hour, oldTimePeriod.EndTime.Minute, oldTimePeriod.EndTime.Second);
                DutyCheckLog oldlog       = null;
                var          oldlogs      = db.DutyCheckLog
                                            .Include(t => t.DutyCheckSiteSchedule).ThenInclude(t => t.CheckMan).ThenInclude(t => t.Organization)
                                            .Include(t => t.DutyCheckSiteSchedule).ThenInclude(t => t.CheckMan).ThenInclude(t => t.PositionType)
                                            .Include(t => t.DayPeriod).ThenInclude(t => t.TimePeriods)
                                            .Where(p => p.DutyCheckSiteSchedule != null &&
                                                   new DateTime(p.PlanDate.Value.Year, p.PlanDate.Value.Month, p.PlanDate.Value.Day, p.TimePeriod.StartTime.Hour, p.TimePeriod.StartTime.Minute, p.TimePeriod.StartTime.Second) <= oldStartTime &&
                                                   new DateTime(p.PlanDate.Value.Year, p.PlanDate.Value.Month, p.PlanDate.Value.Day, p.TimePeriod.EndTime.Hour, p.TimePeriod.EndTime.Minute, p.TimePeriod.EndTime.Second) >= oldEndTime);

                if (oldlogs != null)
                {
                    foreach (DutyCheckLog dcl in oldlogs)
                    {
                        if (dcl.DutyCheckSiteSchedule != null && dcl.DutyCheckSiteSchedule.SiteOrganizationId.Equals(Sentinel.OrganizationId))
                        {
                            oldlog = dcl;
                            break;
                        }
                    }
                }
                //
                DutyDetail dutyDetail = new DutyDetail();
                dutyDetail.Sentinelid  = sentinelId;
                dutyDetail.OnDutyStaff = log.DutyCheckSiteSchedule.CheckMan;
                if (oldlog != null)
                {
                    dutyDetail.OffDutyStaff = oldlog.DutyCheckSiteSchedule.CheckMan;
                }
                return(dutyDetail);
            }
        }
Exemple #27
0
        /// <summary>
        /// 根据安排表生成实地查勤
        /// </summary>
        /// <param name="dgs"></param>
        public static bool GetAbsoultedDutyCheckLog(DutyGroupSchedule dgs)
        {
            if (dgs == null)
            {
                return(false);
            }
            bool isOK = false;
            //补全数据
            DutyGroupSchedule model = CompletionData(dgs);

            //组装网络查勤员数据
            Queue <Staff> checkMans = new Queue <Staff>(); //网络查勤员队列

            foreach (DutyGroupScheduleDetail detail in model.DutyGroupScheduleDetails)
            {
                checkMans.Enqueue(detail.CheckMan);
            }

            //取所有哨位信息
            Dictionary <Guid, Queue <DutyCheckSiteSchedule> > groupStaff = new Dictionary <Guid, Queue <DutyCheckSiteSchedule> >();
            Dictionary <Guid, Queue <DutyCheckSiteSchedule> > allStaffs  = new Dictionary <Guid, Queue <DutyCheckSiteSchedule> >();

            //
            foreach (DutyCheckSiteSchedule dss in model.DutyGroupScheduleDetails[0].CheckDutySiteSchedule)
            {
                //groupStaff.Add(dss.CheckDutySite.MonitorySiteId, new Queue<DutyCheckSiteSchedule>());
                //allStaffs.Add(dss.CheckDutySite.MonitorySiteId, new Queue<DutyCheckSiteSchedule>());
                if (dss.CheckDutySiteId != null)
                {
                    groupStaff.Add(dss.CheckDutySiteId.Value, new Queue <DutyCheckSiteSchedule>());
                    allStaffs.Add(dss.CheckDutySiteId.Value, new Queue <DutyCheckSiteSchedule>());
                }
            }

            //取哨位对应的组员信息
            foreach (DutyGroupScheduleDetail detail in model.DutyGroupScheduleDetails)
            {
                foreach (DutyCheckSiteSchedule dss in detail.CheckDutySiteSchedule)
                {
                    if (dss.CheckDutySiteId != null)
                    {
                        if (groupStaff.ContainsKey(dss.CheckDutySiteId.Value))
                        {
                            groupStaff[dss.CheckDutySiteId.Value].Enqueue(dss);
                        }

                        if (allStaffs.ContainsKey(dss.CheckDutySiteId.Value))
                        {
                            allStaffs[dss.CheckDutySiteId.Value].Enqueue(dss);
                        }
                    }
                }
            }
            //过滤过期的时间
            if (model.EndDate <= DateTime.Now)
            {
                return(false);
            }
            //计算有效天数
            int days = (int)(model.EndDate.Date - model.StartDate.Date).TotalDays + 1;

            if (days <= 0)
            {
                Console.WriteLine("生成分组查勤表无效,时间已过期!");
                return(false);
            }
            DateTime validtime = DateTime.Now;

            if (model.StartDate <= DateTime.Now && model.EndDate >= DateTime.Now)
            {
                for (int i = 0; i < days; i++)
                {
                    if (model.StartDate.AddDays(i) >= DateTime.Now.Date)
                    {
                        validtime = model.StartDate.AddDays(i);
                        break;
                    }
                }
                validtime = new DateTime(validtime.Year, validtime.Month, validtime.Day, 0, 0, 0);
            }
            else if (model.StartDate > DateTime.Now)
            {
                validtime = new DateTime(model.StartDate.Year, model.StartDate.Month, model.StartDate.Day, 0, 0, 0);
            }

            days = (int)(model.EndDate.Date - validtime.Date).TotalDays + 1;

            if (days == 0)
            {
                return(false);
            }
            //实际人员轮值总数
            int allCount = days * model.Schedule.ScheduleCycle.DayPeriods[0].TimePeriods.Count() - 1;

            //计算出实际人员的循环情况

            for (int i = 0; i < allCount; i++)
            {
                foreach (var data in groupStaff)
                {
                    DutyCheckSiteSchedule staff = groupStaff[data.Key].Dequeue();
                    //循环进队
                    allStaffs[data.Key].Enqueue(staff);
                    //重新进队
                    groupStaff[data.Key].Enqueue(staff);
                }
            }

            //根据时段循环分配组员
            List <DutyCheckLog> logs = new List <DutyCheckLog>();

            for (int i = 0; i < days; i++)
            {
                try
                {
                    DateTime time = validtime.AddDays(i);
                    foreach (TimePeriod tp in model.Schedule.ScheduleCycle.DayPeriods[0].TimePeriods)
                    {
                        //判断当天的数据,已经失效的时段不再生成记录
                        if (time == DateTime.Now.Date)
                        {
                            DateTime startTime = new DateTime(time.Year, time.Month, time.Day, tp.StartTime.Hour, tp.StartTime.Minute, tp.StartTime.Second);
                            DateTime endTime   = new DateTime(time.Year, time.Month, time.Day, tp.EndTime.Hour, tp.EndTime.Minute, tp.EndTime.Second);

                            if (startTime > DateTime.Now || endTime < DateTime.Now)
                            {
                                continue;
                            }
                        }
                        //组装网络查勤员数据
                        Staff        staff = checkMans.Dequeue();
                        DutyCheckLog log   = GetCheckManLog(model.OrganizationId, time, tp, staff.StaffId);

                        logs.Add(log);
                        checkMans.Enqueue(staff);

                        foreach (var data in allStaffs)
                        {
                            DutyCheckSiteSchedule dss     = allStaffs[data.Key].Dequeue();
                            DutyCheckLog          sitelog = GetSiteLog(model, time, tp, dss, model.Schedule.ScheduleCycle.DayPeriods[0].DayPeriodId);

                            logs.Add(sitelog);
                        }
                    }
                }
                catch (Exception ex)
                {
                    isOK = false;
                    return(isOK);
                }
            }

            //实际保存记录
            using (var db = new AllInOneContext.AllInOneContext())
            {
                //建立事务
                using (var tran = db.Database.BeginTransaction())
                {
                    try
                    {
                        //先移除已排班但尚未执行的记录
                        var del = db.DutyCheckLog
                                  .Where(p => p.PlanDate >= model.StartDate &&
                                         p.PlanDate <= model.EndDate &&
                                         p.StatusId == new Guid("361ADFE9-E58A-4C88-B191-B742CC212443"));

                        if (del != null && del.Count() != 0)
                        {
                            db.DutyCheckLog.RemoveRange(del.ToList());
                            db.SaveChanges();
                        }

                        //新增
                        foreach (DutyCheckLog log in logs)
                        {
                            string txt = JsonConvert.SerializeObject(log);
                            db.DutyCheckLog.Add(log);
                        }

                        db.SaveChanges();

                        tran.Commit();
                        isOK = true;
                    }
                    catch (Exception ex)
                    {
                        isOK = false;
                    }
                }
            }
            return(isOK);
        }