/// <summary> /// 发送一个定时拍照任务(只有在该GPSCode任务队列为空,或者没有任务队列时才发送) /// </summary> /// <param name="para"></param> private void SendATimingTask(ETimingPhotoPara para) { if (PicTaskPool.ContainsKey(para.GPSCode)) { //如果该GPSCode有任务队列,且队列为空,下发定时拍照任务 if (PicTaskPool[para.GPSCode].Count == 0) { TakePicTask objRealTimeShoot = getATimingTask(para); PicTaskPool[para.GPSCode].Enqueue(objRealTimeShoot); } } else//如果该GPSCode没有任务队列,则新增任务队列,并下发定时拍照任务 { Queue<TakePicTask> taskQueue = new Queue<TakePicTask>(); TakePicTask objRealTimeShoot = getATimingTask(para); taskQueue.Enqueue(objRealTimeShoot); PicTaskPool.Add(para.GPSCode, taskQueue); } DoShoot(para.GPSCode, false); }
/// <summary> /// 获得一个定时拍照任务 /// </summary> /// <param name="para"></param> /// <returns></returns> private TakePicTask getATimingTask(ETimingPhotoPara para) { TakePicTask objRealTimeShoot = new TakePicTask(); objRealTimeShoot.GPSCode = para.GPSCode; objRealTimeShoot.TaskType = SimpleCmdType.TimingShoot; objRealTimeShoot.CurrentCameraIndex = 0; objRealTimeShoot.CameraList = para.TimingShootCameraId; objRealTimeShoot.Status = TakePicTaskStatus.NotStart; objRealTimeShoot.SerialNumber = "Timing"; return objRealTimeShoot; }
/// <summary> /// 得到定时拍照参数列表 /// </summary> /// <returns></returns> public Hashtable GetAllTimingPara(string GpsType) { DbConnection dbConnection = null; Hashtable paramList = new Hashtable(); StringBuilder sbSql = new StringBuilder(); sbSql.AppendLine("select a.camerasettingID,a.`interval`,a.AccStatus,b.cameraid,c.vehiclecode,d.gpscode "); sbSql.AppendLine(" from gps_timingtakepicturesetting a"); sbSql.AppendLine(" left join gps_camera b on a.camerarecordid=b.recordid"); sbSql.AppendLine(" inner join gps_camerasetting c on a.camerasettingID=c.recordid"); sbSql.AppendLine(" left join gps_installation_info d on c.vehiclecode=d.vehiclecode where d.abolish=0 and a.enable=1 "); if (!string.IsNullOrEmpty(GpsType)) { sbSql.AppendLine(" and d.gpscode like @gpscode"); } try { using (dbConnection = GetConnection(_DefaultConnectionString)) { DbCommand command = dbConnection.CreateCommand(); command.CommandText = sbSql.ToString(); if (!string.IsNullOrEmpty(GpsType)) { DbParameter para1 = command.CreateParameter(); para1.Value = GpsType + "%"; para1.ParameterName = "@gpscode"; command.Parameters.Add(para1); } DbDataAdapter adapter = new MySqlDataAdapter(); adapter.SelectCommand = command; DataSet ds = new DataSet(); adapter.Fill(ds, "camerasetting"); DataTable table = ds.Tables["camerasetting"]; Logger.Info(string.Format("GetAllTimingPara:获取到{0}条记录", table.Rows.Count)); foreach (DataRow row in table.Rows) { string gpscode = row["gpscode"].ToString(); if (paramList.ContainsKey(gpscode)) { ((ETimingPhotoPara)paramList[gpscode]).TimingShootCameraId.Add(TryParseUshort(row["cameraid"])); } else { ETimingPhotoPara entity = new ETimingPhotoPara(); entity.GPSCode = gpscode; entity.AccStatus = TryParseUshort(row["AccStatus"]); entity.TimingShootCameraId = new List<ushort>(); entity.TimingShootCameraId.Add(TryParseUshort(row["cameraid"])); entity.TimingShootInterval = TryParseUshort(row["interval"]); paramList.Add(gpscode, entity); } } table.Dispose(); ds.Dispose(); adapter.Dispose(); } } catch (Exception ex) { Logger.Warn("GetAllTimingPara:" + ex.Message); } return paramList; }