Skip to content

Commit

Permalink
调整所有Data的扩展 移动到跟数据上下文一起。
Browse files Browse the repository at this point in the history
  • Loading branch information
maikebing committed Sep 17, 2022
1 parent 8df3cb0 commit d9ef636
Show file tree
Hide file tree
Showing 15 changed files with 247 additions and 13 deletions.
3 changes: 2 additions & 1 deletion IoTSharp.Data/Alarm.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using IoTSharp.Contracts;
using System;
using System.ComponentModel.DataAnnotations;

namespace IoTSharp.Data
Expand Down
1 change: 1 addition & 0 deletions IoTSharp.Data/ApplicationDbContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.Extensions.DependencyInjection;
using IoTSharp.Data.Configurations;
using IoTSharp.Contracts;

namespace IoTSharp.Data
{
Expand Down
3 changes: 2 additions & 1 deletion IoTSharp.Data/AssetRelation.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using IoTSharp.Contracts;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
Expand Down
3 changes: 2 additions & 1 deletion IoTSharp.Data/AuditLog.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using IoTSharp.Contracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
Expand Down
3 changes: 2 additions & 1 deletion IoTSharp.Data/BaseEvent.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using IoTSharp.Contracts;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
Expand Down
3 changes: 2 additions & 1 deletion IoTSharp.Data/Configurations/DataStorageConfiguration.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Microsoft.EntityFrameworkCore;
using IoTSharp.Contracts;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Collections.Generic;
Expand Down
8 changes: 5 additions & 3 deletions IoTSharp.Data/DataStorage.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
using System;
using IoTSharp.Contracts;
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using DataType = IoTSharp.Contracts.DataType;

namespace IoTSharp.Data
{
Expand Down Expand Up @@ -44,8 +46,8 @@ public class DataStorage: IDataStorage
public DataSide DataSide { get; set; } = DataSide.AnySide;

[Column(Order = 5)]
[EnumDataType(typeof(DataType))]
public DataType Type { get; set; }
[EnumDataType(typeof(Contracts.DataType))]
public Contracts.DataType Type { get; set; }

public bool? Value_Boolean { get; set; }
public string Value_String { get; set; }
Expand Down
3 changes: 2 additions & 1 deletion IoTSharp.Data/Device.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using IoTSharp.Contracts;
using System;

namespace IoTSharp.Data
{
Expand Down
3 changes: 2 additions & 1 deletion IoTSharp.Data/DeviceIdentity.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using IoTSharp.Contracts;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
Expand Down
136 changes: 136 additions & 0 deletions IoTSharp.Data/Extensions/AlarmExtension.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
using IoTSharp.Contracts;
using IoTSharp.Data;
using Microsoft.EntityFrameworkCore;
using System;
using System.Linq;
using System.Threading.Tasks;

namespace IoTSharp.Data.Extensions
{
public static class AlarmExtension
{

public static async Task<ApiResult<Alarm>> OccurredAlarm(this ApplicationDbContext _context, CreateAlarmDto cad)
{
Guid OriginatorId = Guid.Empty;
OriginatorType originatorType = cad.OriginatorType;
if (cad.OriginatorType == OriginatorType.Device || cad.OriginatorType == OriginatorType.Gateway || cad.OriginatorType == OriginatorType.Unknow)
{
var dev = _context.Device.Include(d=>d.Tenant).Include(d=>d.Customer).FirstOrDefault(d => d.Id.ToString() == cad.OriginatorName || d.Name == cad.OriginatorName);
if (dev != null)
{
if (dev.DeviceType == DeviceType.Gateway)
{
if (dev.Id.ToString() != cad.OriginatorName && dev.Name != cad.OriginatorName)
{
var subdev = from g in _context.Device.Include(d => d.Tenant).Include(d => d.Customer).Include(g => g.Owner) where g.Owner == dev && g.Name == cad.OriginatorName select g;
var orig = await subdev.FirstOrDefaultAsync();
OriginatorId = orig.Id;
originatorType = OriginatorType.Device;
}
else
{
originatorType = OriginatorType.Gateway;
OriginatorId = dev.Id;
}
}
else if (dev.DeviceType == DeviceType.Device)
{
originatorType = OriginatorType.Device;
OriginatorId = dev.Id;
}
return await _context.OccurredAlarm(cad, _alarm =>
{
_alarm.OriginatorType = originatorType;
_alarm.OriginatorId = OriginatorId;
_alarm.Tenant = dev.Tenant;
_alarm.Customer = dev.Customer;
});
}
else return new ApiResult<Alarm>(ApiCode.NotFoundDevice, "Originator name not a device!",null);
}
else if (cad.OriginatorType == OriginatorType.Asset)
{
var ass = _context.Assets.Include(a => a.Tenant).Include(a => a.Customer).FirstOrDefault(d => d.Id.ToString() == cad.OriginatorName || d.Name == cad.OriginatorName);
if (ass != null)
{
originatorType = OriginatorType.Asset;
OriginatorId = ass.Id;
return await _context.OccurredAlarm(cad, _alarm =>
{
_alarm.OriginatorType = originatorType;
_alarm.OriginatorId = OriginatorId;
_alarm.Tenant = ass.Tenant;
_alarm.Customer = ass.Customer;
});
}
else return new ApiResult<Alarm>(ApiCode.NotFoundDevice, "Originator name not a asset",null);
}
else return new ApiResult<Alarm>(ApiCode.NotFoundDevice, "Originator name not a asset",null);
}



public static async Task<ApiResult<Alarm>> OccurredAlarm(this ApplicationDbContext _context, CreateAlarmDto dto, Action<Alarm> action)
{
var result = new ApiResult<Alarm>(ApiCode.InValidData,"",null);
try
{
var alarm = new Alarm
{
Id = Guid.NewGuid(),
AckDateTime = DateTime.Now,
AlarmDetail = dto.AlarmDetail,
AlarmStatus = AlarmStatus.Active_UnAck,
AlarmType = dto.AlarmType,
ClearDateTime = new DateTime(1970, 1, 1),
EndDateTime = new DateTime(1970, 1, 1),
Propagate = true,
Serverity = dto.Serverity,
StartDateTime = DateTime.Now,
};
action?.Invoke(alarm);
var isone = from a in _context.Alarms where a.OriginatorId == alarm.OriginatorId && a.AlarmType == alarm.AlarmType && (a.AlarmStatus == AlarmStatus.Cleared_UnAck|| a.AlarmStatus == AlarmStatus.Active_UnAck) select a;
if (isone.Any())
{
var old = isone.First();
old.AlarmDetail = alarm.AlarmDetail;
if ( old.Serverity != dto.Serverity)
{
if (old.Serverity== ServerityLevel.Indeterminate && dto.Serverity!= ServerityLevel.Indeterminate)
{
old.StartDateTime = DateTime.Now;
alarm.Propagate = true;
}
else if (old.Serverity != ServerityLevel.Indeterminate && dto.Serverity == ServerityLevel.Indeterminate)
{
old.EndDateTime = DateTime.Now;
if (old.ClearDateTime.Year == 1970)
{
old.ClearDateTime = DateTime.Now;
}
alarm.Propagate = true;
}
else
{
alarm.Propagate = false;
}
old.Serverity = dto.Serverity;
}
}
else
{

_context.Alarms.Add(alarm);
}
int ret = await _context.SaveChangesAsync();
result = new ApiResult<Alarm>(ret > 0 ? ApiCode.Success : ApiCode.NothingToDo, ret > 0 ? "OK" : "No data", alarm);
}
catch (Exception ex)
{
result = new ApiResult<Alarm>(ApiCode.Exception, ex.Message,null);
}
return result;
}
}
}
83 changes: 83 additions & 0 deletions IoTSharp.Data/Extensions/DeviceExtension.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
using IoTSharp.Contracts;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace IoTSharp.Data.Extensions
{
public static class DeviceExtension
{

/// <summary>
/// When creating a device, all the things that need to be done here are done
/// </summary>
/// <param name="_context"></param>
/// <param name="device"></param>
public static void AfterCreateDevice(this ApplicationDbContext _context, Device device)
{
if (device.Customer == null || device.Tenant == null || string.IsNullOrEmpty(device.Name))
{
throw new Exception($"Customer({device.Customer?.Id}) or Tenant({device.Tenant?.Id}) or Name({device.Name}) is null or empty!");
}
else
{
_context.DeviceIdentities.Add(new DeviceIdentity()
{
Device = device,
IdentityType = IdentityType.AccessToken,
IdentityId = Guid.NewGuid().ToString().Replace("-", "")
});
Dictionary<string, object> pairs = new Dictionary<string, object>();
pairs.Add("CreateDateTime", DateTime.Now);
_context.PreparingData<AttributeLatest>(pairs, device.Id, DataSide.ServerSide);
}
}
public static void AfterCreateDevice(this ApplicationDbContext _context, Device device,string username,string password)
{
if (device.Customer == null || device.Tenant == null || string.IsNullOrEmpty(device.Name))
{
throw new Exception($"Customer({device.Customer?.Id}) or Tenant({device.Tenant?.Id}) or Name({device.Name}) is null or empty!");
}
else
{
_context.DeviceIdentities.Add(new DeviceIdentity()
{
Device = device,
IdentityType = IdentityType.DevicePassword,
IdentityId = username,
IdentityValue = password
}) ;
Dictionary<string, object> pairs = new Dictionary<string, object>();
pairs.Add("CreateDateTime", DateTime.Now);
_context.PreparingData<AttributeLatest>(pairs, device.Id, DataSide.ServerSide);
}
}
public static async Task<DeviceRule[]> GerDeviceRulesList(this ApplicationDbContext _dbContext, Guid devid, MountType mountType)
{
DeviceRule[] lst = null;
var r = from dr in _dbContext.DeviceRules.Include(d => d.Device).Include(d => d.FlowRule) where dr.Device.Id == devid && dr.FlowRule.MountType == mountType select dr ;
if (r.Any())
{
lst = await r.ToArrayAsync();
}
return lst;
}
public static async Task<Guid> GerDeviceRpcRulesList(this ApplicationDbContext _dbContext, Guid devid, MountType mountType,string method)
{
var rules = await GerDeviceRulesList(_dbContext, devid, mountType);
var g = (rules.FirstOrDefault(r => r.FlowRule.Name == method)?.FlowRule.RuleId);
return g.GetValueOrDefault();
}
public static async Task<Guid[]> GerDeviceRulesIdList(this ApplicationDbContext _dbContext, Guid devid, MountType mountType)
{
var rules =await GerDeviceRulesList(_dbContext, devid, mountType);
return rules?.Select(xc => xc.FlowRule.RuleId).ToArray();
}



}
}
1 change: 1 addition & 0 deletions IoTSharp.Data/FlowRule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Threading.Tasks;
using IoTSharp.Contracts;
using Microsoft.EntityFrameworkCore.Storage;

namespace IoTSharp.Data
Expand Down
3 changes: 2 additions & 1 deletion IoTSharp.Data/PlayloadData.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Newtonsoft.Json.Converters;
using IoTSharp.Contracts;
using Newtonsoft.Json.Converters;
using System;
using System.Collections.Generic;
using System.Linq;
Expand Down
3 changes: 2 additions & 1 deletion IoTSharp.Data/Produce.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using IoTSharp.Contracts;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
Expand Down
4 changes: 3 additions & 1 deletion IoTSharp.Data/TelemetryData.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
using System;
using IoTSharp.Contracts;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Threading.Tasks;
using DataType = IoTSharp.Contracts.DataType;

namespace IoTSharp.Data
{
Expand Down

0 comments on commit d9ef636

Please sign in to comment.