You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

203 lines
7.5 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Microsoft.Extensions.DependencyInjection;
using Serilog;
using SlnMesnac.Model.dto;
using SlnMesnac.Plc;
using SlnMesnac.Repository;
using SlnMesnac.Repository.service;
using SlnMesnac.Serilog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Security.Claims;
using System.Threading.Tasks;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* 版权所有 (c) 2024 WenJY 保留所有权利。
* CLR版本4.0.30319.42000
* 机器名称LAPTOP-E0N2L34V
* 命名空间SlnMesnac.Business.base
* 唯一标识b00d95c1-a164-43a3-9f34-2a5d2efb3f34
*
* 创建者WenJY
* 电子邮箱wenjy@mesnac.com
* 创建时间2024-04-12 17:36:19
* 版本V1.0.0
* 描述:
*
*--------------------------------------------------------------------
* 修改人:
* 时间:
* 修改说明:
*
* 版本V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.Business.@base
{
public class BaseBusiness
{
public readonly SerilogHelper _log;
public readonly PlcAbsractFactory _plc;
public readonly RealTemperatureInfo _realTemperatureInfo;
private readonly WebSocketBusiness _webSocketBusiness;
private IServiceProvider _serviceProvider;
public readonly Ibase_cabinet_infoServices _ibase_Cabinet_InfoServices;
public readonly Ibase_busbar_infoServices _ibase_Busbar_InfoServices;
private readonly Ibase_alarm_infoServices _ibase_Alarm_InfoServices;
private readonly Irecord_busbar_alarmServices _iRecord_Busbar_AlarmServices;
public bool isFlag = false;
public BaseBusiness(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
using (var scope = _serviceProvider.CreateScope())
{
_log = scope.ServiceProvider.GetRequiredService<SerilogHelper>();
_plc = scope.ServiceProvider.GetRequiredService<PlcAbsractFactory>();
_realTemperatureInfo = scope.ServiceProvider.GetRequiredService<RealTemperatureInfo>();
_ibase_Cabinet_InfoServices = scope.ServiceProvider.GetRequiredService<Ibase_cabinet_infoServices>();
_ibase_Busbar_InfoServices = scope.ServiceProvider.GetRequiredService<Ibase_busbar_infoServices>();
_ibase_Alarm_InfoServices = scope.ServiceProvider.GetRequiredService<Ibase_alarm_infoServices>();
_iRecord_Busbar_AlarmServices = scope.ServiceProvider.GetRequiredService<Irecord_busbar_alarmServices>();
_webSocketBusiness = scope.ServiceProvider.GetRequiredService<WebSocketBusiness>();
}
}
/// <summary>
/// 初始化轨道电机
/// </summary>
/// <param name="model">工作模式:1-自动2-巡检3-手动</param>
/// <exception cref="InvalidOperationException"></exception>
public async void InitEquip(int model)
{
try
{
int plcFlag = 0;
do
{
if (!isFlag)
{
break;
}
plcFlag = _plc.readInt32ByAddress("VD1508"); //PLC状态
if (plcFlag != 1)
{
_log.Info($"PLC状态不具备启动条件:VD1508值为{plcFlag}");
Task.Delay(1000).Wait();
continue;
}
if (!_plc.writeInt32ByAddress("VD1536", model)) //工作模式:1-自动2-巡检3-手动
{
throw new ArgumentException($"工作模式:自动模式写入PLC失败VD1536写{model}");
}
_log.Info($"工作模式写入PLC成功VD1536写{model}");
} while (plcFlag != 1);
}
catch (Exception e)
{
throw new InvalidOperationException($"初始化轨道电机异常:{e.Message}");
}
}
/// <summary>
/// 获取电柜信息
/// </summary>
/// <param name="cabinetInfos"></param>
public void GetCabinetInfos(int equipAddr,out List<base_cabinet_info> cabinetInfos)
{
var list = _ibase_Cabinet_InfoServices.Query(x=>x.isChecked == 1 && x.isFlag == 1).ToList();
if (equipAddr > 20) //20 号柜子之后倒叙巡检
{
cabinetInfos = list.OrderByDescending(x => x.cabinetCode).ToList();
}
else //右侧原点,倒序巡检
{
cabinetInfos = list.OrderBy(x => x.cabinetCode).ToList();
}
}
/// <summary>
/// 获取指定电柜下的母排信息
/// </summary>
/// <param name="cabinetCode"></param>
/// <param name="busbarInfos"></param>
public void GetBusbarInfos(int cabinetCode,out List<base_busbar_info> busbarInfos,int isInsp = 0)
{
busbarInfos = _ibase_Busbar_InfoServices.Query(x=>x.cabinetCode == cabinetCode && x.isChecked == 1 && x.isInsp == isInsp).ToList();
}
public void JudgBusbarIsAlarm(int busbarCode,ref record_busbar_temp busbarTemp)
{
try
{
var alarmInfos = _ibase_Alarm_InfoServices.Query(x => x.busbarCode == busbarCode).ToList();
if (alarmInfos != null)
{
foreach (var alarm in alarmInfos)
{
record_busbar_alarm busbarAlarm = new record_busbar_alarm();
if (alarm.judgMethod == 1) //大于
{
if (busbarTemp.tempMax < alarm.alarmValue) //取反为正常数据
{
continue;
}
}
else if (alarm.judgMethod == 2) //小于
{
if (busbarTemp.tempMax > alarm.alarmValue) //取反为正常数据
{
continue;
}
}
else
{
continue;
}
busbarAlarm.busbarCode = busbarTemp.busbarCode;
busbarAlarm.cabinetCode = busbarTemp.cabinetCode;
busbarAlarm.tempMax = busbarTemp.tempMax;
busbarAlarm.tempMin = busbarTemp.tempMin;
busbarAlarm.tempAvg = busbarTemp.tempAvg;
busbarAlarm.tempDiff = busbarTemp.tempDiff;
busbarAlarm.filePath = busbarTemp.filePath;
busbarAlarm.alarmType = alarm.alarmType;
busbarAlarm.alarmValue = alarm.alarmValue;
busbarAlarm.recordTime = DateTime.Now;
_iRecord_Busbar_AlarmServices.Insert(busbarAlarm);
busbarTemp.isAlarm = 1;
_webSocketBusiness.Encapsulation(true,alarm,busbarAlarm);
}
}
}
catch(Exception e)
{
throw new InvalidOperationException($"测温数据判断异常:{e.Message}");
}
}
}
}