Former-commit-id: dc0fe9bf426d72a1c36f981c7a507011b647f487
TangShanKaiPing
wanggang 6 years ago
parent 6bb47bdcda
commit c5168afe1f

Binary file not shown.

@ -7,6 +7,7 @@ namespace Application.Domain.Entities
public class LiveRecord : BaseEntity
{
public string DeviceNumber { get; set; }
public string DeviceName { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}

@ -0,0 +1,25 @@
using Infrastructure.Application;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Application.Models
{
[Display(Name = "回放")]
public class EditLiveRecordModel : EditModel
{
[Display(Name = "设备编号")]
[ReadOnly(true)]
public string DeviceNumber { get; set; }
[Display(Name = "设备名称")]
[ReadOnly(true)]
public string DeviceName { get; set; }
[Display(Name = "名称")]
public string Name { get; set; }
[Display(Name = "文件")]
[ReadOnly(true)]
public string Value { get; set; }
}
}

@ -4,7 +4,7 @@ using System.ComponentModel.DataAnnotations;
namespace Application.Models
{
public class ApiSearchModel : PagedListModel<EditApiModel>
public class SearchApiModel : PagedListModel<EditApiModel>
{
[DataType("SelectList")]
[Display(Name = "产品")]

@ -4,7 +4,7 @@ using System.ComponentModel.DataAnnotations;
namespace Application.Models
{
public class DataSearchModel : PagedListModel<EditDataModel>
public class SearchDataModel : PagedListModel<EditDataModel>
{
[DataType("SelectList")]
[Display(Name = "节点")]

@ -4,7 +4,7 @@ using System.ComponentModel.DataAnnotations;
namespace Application.Models
{
public class DeviceSearchMode : PagedListModel<EditDeviceModel>
public class SearchDeviceMode : PagedListModel<EditDeviceModel>
{
[DataType("SelectList")]
[Display(Name = "节点")]

@ -0,0 +1,15 @@
using Infrastructure.Application;
using System.ComponentModel.DataAnnotations;
namespace Application.Models
{
public class SearchLiveRecordModel : PagedListModel<EditLiveRecordModel>
{
[DataType("SelectList")]
[Display(Name = "摄像头")]
public string DeviceNumber { get; set; }
[Display(Name = "关键词")]
public string Keyword { get; set; }
}
}

@ -252,6 +252,16 @@ namespace IoT.Shared.Areas.Admin.Controlls
#endregion Api
public SelectList GetCameraSelectList(string deviceNumber)
{
var list = this._deviceRepo.ReadOnlyTable()
.Where(o => o.Product.Number == "onvifcamera")
.WhereIf(!string.IsNullOrEmpty(deviceNumber), o => o.Number == deviceNumber)
.Select(o => new { Id = o.Number, Name = o.DisplayName })
.ToList();
return new SelectList(list, "Id", "Name", deviceNumber);
}
public JsonResult CronValid(string cron)
{
try

@ -12,7 +12,7 @@ namespace IoT.Shared.Areas.Admin.Controlls
{
[Authorize]
[Area(nameof(Admin))]
public class ApiController : CrudController<Api, ApiSearchModel, EditApiModel, EditApiModel>
public class ApiController : CrudController<Api, SearchApiModel, EditApiModel, EditApiModel>
{
private readonly AjaxController _ajax;
@ -26,7 +26,7 @@ namespace IoT.Shared.Areas.Admin.Controlls
return query.Include(o => o.Product);
}
public override IQueryable<Api> Query(ApiSearchModel model, IQueryable<Api> query)
public override IQueryable<Api> Query(SearchApiModel model, IQueryable<Api> query)
{
ViewData.SelectList(o => model.ProductId, () => this._ajax.GetProductSelectList(model.ProductId));
return query.WhereIf(model.ProductId.HasValue, o => o.ProductId == model.ProductId.Value)

@ -12,7 +12,7 @@ namespace IoT.Shared.Areas.Admin.Controlls
{
[Authorize]
[Area(nameof(Admin))]
public class DataController : SharedController<Data, DataSearchModel, EditDataModel, EditDataModel>
public class DataController : SharedController<Data, SearchDataModel, EditDataModel, EditDataModel>
{
private readonly IRepository<Node> _nodeRepo;
private readonly AjaxController _ajax;
@ -28,7 +28,7 @@ namespace IoT.Shared.Areas.Admin.Controlls
return query.Include(o => o.Device).ThenInclude(o => o.Node);
}
public override IQueryable<Data> Query(DataSearchModel model, IQueryable<Data> query)
public override IQueryable<Data> Query(SearchDataModel model, IQueryable<Data> query)
{
ViewData.SelectList(o => model.NodeId, () => this._ajax.GetNodeSelectList(model.NodeId));
ViewData.SelectList(o => model.DeviceId, () => this._ajax.GetDeviceSelectList(model.NodeId.Value, model.DeviceId), model.NodeId.HasValue);

@ -12,7 +12,7 @@ namespace IoT.Shared.Areas.Admin.Controlls
{
[Authorize]
[Area(nameof(Admin))]
public class DeviceController : SharedController<Device, DeviceSearchMode, EditDeviceModel, EditDeviceModel>
public class DeviceController : SharedController<Device, SearchDeviceMode, EditDeviceModel, EditDeviceModel>
{
private readonly AjaxController _ajax;
@ -26,7 +26,7 @@ namespace IoT.Shared.Areas.Admin.Controlls
return query.Include(o => o.Product).Include(o => o.Node);
}
public override IQueryable<Device> Query(DeviceSearchMode model, IQueryable<Device> query)
public override IQueryable<Device> Query(SearchDeviceMode model, IQueryable<Device> query)
{
if (model == null)
{

@ -0,0 +1,32 @@
using System.Linq;
using Application.Domain.Entities;
using Application.Models;
using Infrastructure.Application;
using Infrastructure.Data;
using Infrastructure.Extensions;
using Infrastructure.Web.Mvc;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace IoT.Shared.Areas.Admin.Controlls
{
[Authorize]
[Area(nameof(Admin))]
public class LiveRecordController : CrudController<LiveRecord, SearchLiveRecordModel, EditLiveRecordModel, EditLiveRecordModel>
{
private readonly AjaxController _ajax;
public LiveRecordController(IRepository<LiveRecord> repo, AjaxController ajax) : base(repo)
{
this._ajax = ajax;
}
public override IQueryable<LiveRecord> Query(SearchLiveRecordModel model, IQueryable<LiveRecord> query)
{
ViewData.SelectList(o => model.DeviceNumber, () => this._ajax.GetCameraSelectList(model.DeviceNumber));
return query
.WhereIf(!string.IsNullOrEmpty(model.DeviceNumber), o => o.DeviceNumber == model.DeviceNumber)
.WhereIf(!string.IsNullOrEmpty(model.Keyword), o => o.DeviceName.Contains(model.Keyword) || o.Name.Contains(model.Keyword));
}
}
}

@ -0,0 +1,20 @@
@model EditLiveRecordModel
@{
HtmlTitle = Model.Name;
}
<video id="videoElement" controls autoplay style="width:640px;height:480px;background-color:#000;"></video>
@section scripts{
<script src="/lib/flv.js/flv.min.js"></script>
<script>
if (flvjs.isSupported()) {
var videoElement = document.getElementById('videoElement');
var flvPlayer = flvjs.createPlayer({
type: 'flv',
url: 'http://'+location.hostname+ '@Model.Value'
});
flvPlayer.attachMediaElement(videoElement);
flvPlayer.load();
flvPlayer.play();
}
</script>
}

@ -24,6 +24,7 @@
<li class="@GetClass("Api")"><a href="@Url.Action("Index","Api")"><i class="fa fa-plug"></i><span>接口管理</span></a></li>
<li class="@GetClass("Parameter")"><a href="@Url.Action("Index","Parameter")"><i class="fa fa-chain"></i><span>参数管理</span></a></li>
<li class="@GetClass("Command")"><a href="@Url.Action("Index","Command")"><i class="fa fa-tag"></i><span>命令管理</span></a></li>
<li class="@GetClass("LiveRecord")"><a href="@Url.Action("Index","LiveRecord")"><i class="fa fa-camera"></i><span>回放管理</span></a></li>
<li class="@GetClass("Scene")"><a href="@Url.Action("Index","Scene")"><i class="fa fa-list-ol"></i><span>场景管理</span></a></li>
<li class="@GetClass("SceneCommand")"><a href="@Url.Action("Index","SceneCommand")"><i class="fa fa-gg"></i><span>场景命令管理</span></a></li>
<li class="@GetClass("IoTTimer")"><a href="@Url.Action("Index","IoTTimer")"><i class="fa fa-clock-o"></i><span>定时器管理</span></a></li>

@ -268,8 +268,9 @@ namespace IoTCenter.Controllers
this._liveRecordRepo.Add(new LiveRecord
{
DeviceNumber = deviceNumber,
Name = $"{device?.DisplayName}回放{DateTime.Now.ToString("yyyy-MM-dd HH:mm")}",
Value = $"video{result["file"].Substring(result["file"].LastIndexOf('/'))}"
DeviceName = device?.DisplayName,
Name = $"回放{DateTime.Now.ToString("yyyy-MM-dd HH:mm")}",
Value = $"/video{result["file"].Substring(result["file"].LastIndexOf('/'))}"
});
this._liveRecordRepo.SaveChanges();
}

@ -36,8 +36,8 @@ vhost __defaultVhost__ {
dvr {
enabled off;
dvr_path ./objs/nginx/html/[app].[stream].[timestamp].flv;
dvr_plan session;
dvr_duration 30;
dvr_plan segment;
dvr_duration 600;
dvr_wait_keyframe on;
time_jitter full;
}

Loading…
Cancel
Save