Former-commit-id: 5ff9691676f9d911a25fac52a3cfaad290d7b9c0
Former-commit-id: 1c28c571b1ad81a8e64ee582064daecad75fa0b8
1.0
wanggang 5 years ago
parent 2676a9750c
commit 7fb2dc960f

@ -13,7 +13,7 @@ namespace Infrastructure.Extensions
}
if (string.IsNullOrEmpty(path))
{
return path;
return url.Content("~/images/empty.svg");
}
if (path.StartsWith("~", StringComparison.OrdinalIgnoreCase))
{

@ -10,7 +10,7 @@
var nextUrl = Model.PageIndex + 1 <= Model.PageCount() ? url.SetParam(pageIndexParam, Model.PageIndex + 1) : empty;
}
<div class="row">
<div class="col-sm-12 col-md-5"><div class="dataTables_info">共 @(Model.TotalCount) 条记录 当前页 @(Model.PageIndex)/@(Model.PageCount())</div></div> <div class="col-sm-12 col-md-7">
<div class="col-sm-12 col-md-5"><div class="dataTables_info">共<span style="color:#000;font-weight:bold;"> @(Model.TotalCount) </span>条 当前<span style="color:#000;"> @(Model.PageIndex)</span>/@(Model.PageCount())</div></div> <div class="col-sm-12 col-md-7">
<div class="dataTables_paginate paging_simple_numbers">
<ul class="pagination pagination-sm m-0 float-right">
<li class="page-item"><a class="page-link" href="@firstUrl">首页</a></li>

@ -94,4 +94,18 @@ h1 {
label.col-form-label {
text-align: right;
overflow: hidden;
}
img.icon {
height: 48px;
width: 48px;
margin:0 auto;
}
img.pointer {
cursor: pointer;
height: 32px;
width: 32px;
margin: 5px auto;
}
.card-body.device{
padding:10px;
}

@ -9,7 +9,7 @@ namespace Platform.Application.Models
[Display(Name = "建筑")]
public class EditBuildingModel : EditModel
{
[SelectList(nameof(ParentId),"GetBuilding")]
[SelectList(nameof(ParentId), "GetBuilding")]
[Display(Name = "机构")]
[Required(ErrorMessage = nameof(RequiredAttribute))]
public Guid? OrganId { get; set; }
@ -36,7 +36,12 @@ namespace Platform.Application.Models
[Required(ErrorMessage = nameof(RequiredAttribute))]
public string Number { get; set; }
[Display(Name = "图片")]
[DataType(DataType.ImageUrl)]
[Required(ErrorMessage = nameof(RequiredAttribute))]
public string Image { get; set; } = "/images/empty.svg";
[Display(Name = "序号")]
public int DisplayOrder { get; set; }
}
}
}

@ -23,10 +23,10 @@ namespace Platform.Application.Models
[Required(ErrorMessage = nameof(RequiredAttribute))]
public string Name { get; set; }
[Display(Name = "图")]
[Display(Name = "图")]
[DataType(DataType.ImageUrl)]
[Required(ErrorMessage = nameof(RequiredAttribute))]
public string Image { get; set; } = "/images/button.svg";
public string Image { get; set; } = "/images/empty.svg";
[Display(Name = "隐藏")]
public bool? Hidden { get; set; }

@ -26,9 +26,10 @@ namespace Platform.Application.Models
[Required(ErrorMessage = nameof(RequiredAttribute))]
public string Number { get; set; }
[Display(Name = "Icon")]
[Display(Name = "图片")]
[DataType(DataType.ImageUrl)]
public string Image { get; set; }
[Required(ErrorMessage = nameof(RequiredAttribute))]
public string Image { get; set; } = "/images/empty.svg";
[Display(Name = "类型")]
[SelectList]

@ -8,6 +8,7 @@ using Microsoft.EntityFrameworkCore;
using Platform.ViewModels;
using System.Collections.Generic;
using System.Linq;
using System;
namespace Platform.Controllers
{
@ -45,27 +46,12 @@ namespace Platform.Controllers
public IActionResult Building(HomeModel model)
{
var userOrganId = User.GetOrganId().Value;//当前用户机构Id
var userOrgans = this._userRepo.ReadOnlyTable()
.Where(o=>o.UserName==User.Identity.Name)
.SelectMany(o => o.OrganUsers)
.Select(o => o.Organ)
.ToList();
var organList = new List<Organ>();
foreach (var item in userOrgans)
{
var userOrganList = this._organRepo.ReadOnlyTable()//当前用户机构及下级机构
.Where(o => o.ParentId != null)
.Where(o => o.Left >= item.Left && o.Right <= item.Right)
.Include(o => o.Buildings)
.ToList();
organList.AddRange(userOrganList);
}
var currentUserOrgan = this._organRepo.ReadOnlyTable().FirstOrDefault(o => o.Id == userOrganId);//当前用户机构
//var organList = this._organRepo.ReadOnlyTable()//当前用户机构及下级机构
// .Where(o => o.ParentId != null)
// .Where(o => o.Left >= currentUserOrgan.Left && o.Right <= currentUserOrgan.Right)
// .Include(o => o.Buildings)
// .ToList();
var organList = this._organRepo.ReadOnlyTable()//当前用户机构及下级机构
.Where(o => o.ParentId != null)
.Where(o => o.Left >= currentUserOrgan.Left && o.Right <= currentUserOrgan.Right)
.Include(o => o.Buildings)
.ToList();
organList.ToTree();
var rootOrganId = this._organRepo.ReadOnlyTable().Where(o => o.Number == "root").Select(o => o.Id).FirstOrDefault();
model.Organs = organList.Where(o => o.Parent == null).ToList();
@ -122,6 +108,7 @@ namespace Platform.Controllers
model.TotalCount = query.Count();
model.Deviceses = query
.Include(o => o.Data)
.Include(o=>o.Product)
.Skip(model.PageSize * (model.PageIndex - 1))
.Take(model.PageSize).ToList();
@ -129,9 +116,41 @@ namespace Platform.Controllers
{
item.Buildings = item.Buildings.ToTree().Where(o => o.ParentId == rootBuildingId).ToList();
}
//
var light = this.GetDataValue<int>(query, "Light");
model.MinLight = light.Item1;
model.MaxLight = light.Item2;
var temperature = this.GetDataValue<float>(query, "Temperature");
model.MinTemperaturest = temperature.Item1;
model.MaxTemperatures = temperature.Item2;
var humidity = this.GetDataValue<float>(query, "Humidity");
model.MinHumidity = humidity.Item1;
model.MaxHumidity = humidity.Item2;
var query2 = query.Where(o => o.Name.Contains("开关") || o.Name.Contains("插座")).SelectMany(o => o.Data).Where(o => o.Key == "State");
var hasDevices = query2.Any();
model.Open = hasDevices? new int?( query2.Where(o => o.Value == "开").Count()):null;
model.Close= hasDevices ? new int?(query2.Where(o => o.Value == "关").Count()) : null;
return View(model);
}
private Tuple<T?, T?> GetDataValue<T>(IQueryable<IoTDevice> query, string key)where T : struct
{
var list = query.SelectMany(o => o.Data)
.Where(o => o.Key == key).Select(o => o.Value)
.ToList()
.Select(o => ConvertTo<T>(o));
return new Tuple<T?, T?>(
list.Any()? new T?( list.Min()):null,
list.Any() ? new T?(list.Max()) :null
);
}
private T ConvertTo<T>(string value) where T:struct
{
T result = (T)Convert.ChangeType(value, typeof(T));
return result;
}
public IActionResult Alarm()
{
return View();
@ -172,16 +191,6 @@ namespace Platform.Controllers
return View();
}
private object Convert(Organ root)
{
return new
{
title = root.Name,
key = root.Number,
children = root.Children.Select(o => Convert(o))
};
}
public string Mac(string id)
{
return Helper.Instance.MacEncrypt(id);

@ -22,5 +22,13 @@ namespace Platform.ViewModels
public List<IoTDevice> Deviceses { get; set; } = new List<IoTDevice>();
public List<OrganIoTScene> Scenes { get; set; } = new List<OrganIoTScene>();
public int? MaxLight { get; set; }
public int? MinLight { get; set; }
public float? MinTemperaturest { get; set; }
public float? MaxTemperatures { get; set; }
public float? MinHumidity { get; set; }
public float? MaxHumidity { get; set; }
public int? Open { get; set; }
public int? Close { get; set; }
}
}

@ -1,28 +1,6 @@
@model Platform.ViewModels.HomeModel
@{
HideBread = true;
var lightList = Model.Deviceses.SelectMany(o => o.Data).Where(o => o.Key == "Light")
.Select(o => string.IsNullOrEmpty(o.Value) ? 0 : int.Parse(o.Value))
.ToList();
var maxLight = lightList.Any() ? new Nullable<int>(lightList.Max()) : null;
var minLight = lightList.Any() ? new Nullable<int>(lightList.Min()) : null;
var temperatureList = Model.Deviceses.SelectMany(o => o.Data).Where(o => o.Key == "Temperature")
.Select(o => string.IsNullOrEmpty(o.Value) ? 0 : float.Parse(o.Value))
.ToList();
var maxTemperature = temperatureList.Any() ? new Nullable<float>(temperatureList.Max()) : null;
var minTemperature = temperatureList.Any() ? new Nullable<float>(temperatureList.Min()) : null;
var humidityList = Model.Deviceses.SelectMany(o => o.Data).Where(o => o.Key == "Humidity")
.Select(o => string.IsNullOrEmpty(o.Value) ? 0 : float.Parse(o.Value))
.ToList();
var maxHumidity = humidityList.Any() ? new Nullable<float>(humidityList.Max()) : null;
var minHhumidity = humidityList.Any() ? new Nullable<float>(humidityList.Min()) : null;
var elist = Model.Deviceses.Where(o => o.Name.Contains("开关") || o.Name.Contains("插座"));
var open = elist.Any() ? new Nullable<int>(elist.Where(o => o.Data.Any(o => o.Key == "State" && o.Value == "开")).Count()) : null;
var close = elist.Any() ? new Nullable<int>(elist.Where(o => o.Data.Any(o => o.Key == "State" && o.Value == "关")).Count()) : null;
}
<br />
<div class="row">
@ -51,7 +29,6 @@
<text> / @Model.Building.GetDisplayName()</text>
}
</h5>
<div class="card-tools"><label style="margin:0;">下级:@Html.CheckBoxFor(o => o.ShowAll)</label></div>
</div>
<div class="card-body">
<div class="row">
@ -62,8 +39,8 @@
光照
</div>
</div>
<p>最大值:@(maxLight.HasValue?$"{maxLight.Value.ToString("f2")} Lux":"无设备")</p>
<p>最小值:@(minLight.HasValue?$"{minLight.Value.ToString("f2")} Lux":"无设备")</p>
<p>最大值:@(Model.MaxLight.HasValue?$"{Model.MaxLight.Value} Lux":"无设备")</p>
<p>最小值:@(Model.MinLight.HasValue?$"{Model.MinLight.Value} Lux":"无设备")</p>
</div>
</div>
<div class="col-sm-3">
@ -73,8 +50,8 @@
温度
</div>
</div>
<p>最大值:@(maxTemperature.HasValue?$"{maxTemperature.Value.ToString("f2")} ℃":"无设备")</p>
<p>最小值:@(minTemperature.HasValue?$"{minTemperature.Value.ToString("f2")} ℃":"无设备")</p>
<p>最大值:@(Model.MaxTemperatures.HasValue?$"{Model.MaxTemperatures.Value.ToString("f2")} ℃":"无设备")</p>
<p>最小值:@(Model.MinTemperaturest.HasValue?$"{Model.MinTemperaturest.Value.ToString("f2")} ℃":"无设备")</p>
</div>
</div>
<div class="col-sm-3">
@ -84,8 +61,8 @@
湿度
</div>
</div>
<p>最大值:@(maxTemperature.HasValue?$"{maxTemperature.Value.ToString("f2")} RH%" :"无设备")</p>
<p>最小值:@(minTemperature.HasValue?$"{minTemperature.Value.ToString("f2")} RH%" :"无设备")</p>
<p>最大值:@(Model.MaxHumidity.HasValue?$"{Model.MaxHumidity.Value.ToString("f2")} RH%" :"无设备")</p>
<p>最小值:@(Model.MinHumidity.HasValue?$"{Model.MinHumidity.Value.ToString("f2")} RH%" :"无设备")</p>
</div>
</div>
<div class="col-sm-3">
@ -95,8 +72,8 @@
用电
</div>
</div>
<p>开:@(open.HasValue?$"{maxTemperature.Value}":"无设备")</p>
<p>关:@(close.HasValue?$"{minTemperature.Value}":"无设备")</p>
<p>开:@(Model.Open.HasValue?$"{Model.Open.Value}":"无设备")</p>
<p>关:@(Model.Close.HasValue?$"{Model.Close.Value}":"无设备")</p>
</div>
</div>
</div>
@ -105,20 +82,17 @@
@if (Model.Scenes.Any())
{
<div class="card">
<div class="card-header">场景</div>
<div class="card-header">当前建筑场景</div>
<div class="card-body">
<div class="row">
@foreach (var item in Model.Scenes)
{
<div class="col-sm-2">
<div class="info-box bg-gray ">
<span class="info-box-icon bg-white elevation-1"><img src="@Url.Content2(item.Image)" /></span>
<div class="info-box-content">
<span class="info-box-text">@item.Name</span>
<span class="info-box-number">
@Model.Building?.GetDisplayName()
</span>
</div>
<div class="col-sm-1">
<div class="card bg-gray p-2">
<a class="card-body text-center" href="#" style="padding:0;">
<img class="card-img-top" src="@Url.Content2(item.Image)" alt="@item.Name">
<div>@item.Name</div>
</a>
</div>
</div>
}
@ -128,40 +102,59 @@
}
@if (Model.Buildings.Any())
{<div class="card">
<div class="card-header">建筑</div>
<div class="card-header">下级建筑</div>
<div class="card-body">
<div class="row">
@foreach (var item in Model.Buildings)
{
<div class="col-sm-2">
<a href="@Url.Action(null,null,new { buildingId = item.Id})">机构建筑:@item.Name</a>
<div class="card bg-gray">
<div class="card-body bg-gray text-center">
<img class="card-img-top" src="@Url.Content2(item.Image)" alt="@item.Name">
@*<div class="row">
<div class="col-sm-3"></div>
</div>*@
<a href="@Url.Action(null,null,new { buildingId = item.Id})">@item.Name</a>
</div>
</div>
</div>
}
</div>
</div>
</div>
}
@if (Model.Deviceses.Any())
{<div class="card">
<div class="card-header">设备</div>
<div class="card">
<div class="card-header">
<h5 class="card-title">设备</h5>
<div class="card-tools">
<label style="margin:0;">
全部:@Html.CheckBoxFor(o => o.ShowAll, new { style = "width:20px;height:20px;vertical-align:bottom;margin-right:10px;" })
</label>
</div>
</div>
@if (Model.Deviceses.Any())
{
<div class="card-body">
<div>
<h2>此处分页显示设备,设备带快捷操作</h2>
<div class="row">
@foreach (var item in Model.Deviceses)
{
<div>
<a href="@Url.Action(null,null,new { buildingId = item.Id})">设备:@item.Name</a>
</div>
try
{
@await Html.PartialAsync($"/Views/Shared/Device/{item.Icon}.cshtml", item)
}
catch (Exception ex)
{
@Html.Raw(ex.Message)
}
}
</div>
<div>
@(await Html.PartialAsync("_Paged"))
</div>
</div>
</div>
}
@if (Model.PageCount() > 1)
{
<div class="card-footer">@(await Html.PartialAsync("_Paged"))</div>
}
}
</div>
</div>
</div>

@ -0,0 +1,28 @@
@model IoT.Shared.Application.Domain.Entities.IoTDevice
@{
var state = Model.Data.FirstOrDefault(o => o.Key == "State")?.Value;
var isOpend = Model.Data.Any(o => o.Key == "State" && o.Value == "开");
}
<div class="col-sm-2">
<div class="card">
<div class="card-header">
<h5 class="card-title">@(Model.DisplayName??Model.Name)</h5>
<div class="card-tools">@state</div>
</div>
<div class="card-body device">
<div class="row">
<img class="icon" src="@Url.Content2(Model.Product.Image)" />
</div>
<div class="row">
@if (isOpend)
{
<img class="pointer" onclick="execApi(device.number,'/Socket/Off')" src="@Url.Content2("/images/off.svg")" />
}
else
{
<img class="pointer" onclick="execApi(device.number,'/Socket/On')" src="@Url.Content2("/images/on.svg")" />
}
</div>
</div>
</div>
</div>
Loading…
Cancel
Save