KukaDataAnalysis.cs 4.79 KB
using DataAcquisitionServer.Common.Communications;
using DataAcquisitionServer.Common.Enums;
using DataAcquisitionServer.Common.Utils;
using DataAcquisitionServer.DataAccess;
using DataAcquisitionServer.Models;
using Microsoft.EntityFrameworkCore;

namespace DataAcquisitionServer.Services.DataAnalysis
{
    public class KukaDataAnalysis(IDbContextFactory<DataContext> dbContextFactory) : IDataAnalysis
    {
        private readonly IDbContextFactory<DataContext> dbContextFactory = dbContextFactory;

        private readonly SystemLog log = SystemLog.Instance;

        public void Analysis(IEnumerable<ICommunication> communications, IEnumerable<Equipment> equipments)
        {
            using var context = dbContextFactory.CreateDbContext();
            using var transaction = context.Database.BeginTransaction();
            try
            {
                var kukaEquipments = equipments.Where(x => x.EquipmentType == EquipmentTypeConst.Kuka && x.EquipmentProperties.Any()).ToList();
                foreach (var item in kukaEquipments)
                {
                    var bootFlagProperty = item[KukaProps.BootFlag.ToString()];//开机标志
                    var workFlagProperty = item[KukaProps.WorkFlag.ToString()];//工作标志
                    var weldFlagProperty = item[KukaProps.WeldFlag.ToString()];//焊接标志
                    var weldCompleteFlagProperty = item[KukaProps.WeldCompleteFlag.ToString()];//焊接完成标志
                    var weldSpeedProperty = item[KukaProps.Weld_Speed.ToString()];//焊接送丝速度
                    var alarmProperty = item[KukaProps.Alarm.ToString()];//报警
                    var workTimeProperty = item[KukaProps.Work_Time.ToString()];//工作时长
                    var workModeProperty = item[KukaProps.Work_Mode.ToString()];//工作模式

                    _ = bool.TryParse(bootFlagProperty.Value, out var bootFlagValue);
                    _ = bool.TryParse(workFlagProperty.Value, out var workFlagValue);
                    _ = bool.TryParse(weldFlagProperty.Value, out var weldFlagValue);
                    _ = bool.TryParse(weldCompleteFlagProperty.Value, out var weldCompleteFlagValue);
                    _ = bool.TryParse(weldSpeedProperty.Value, out var weldSpeedValue);
                    _ = bool.TryParse(alarmProperty.Value, out var alarmValue);
                    _ = bool.TryParse(workTimeProperty.Value, out var workTimeValue);
                    _ = bool.TryParse(workModeProperty.Value, out var workModeValue);

                    if (!bootFlagValue || bootFlagProperty.UpdateTime < DateTime.Now.AddSeconds(-30))
                    {
                        //结束记录
                        context.EquipmentPropertyRecords.Where(x => x.EquipmentCode == item.Code && x.EquipmentPropertyCode == bootFlagProperty.Code && !x.IsEnd).ExecuteUpdate(x => x.SetProperty(p => p.IsEnd, e => true));

                        //数据超时
                        //log.LogWarning($"设备:[{item.Name}]未开机或缓存数据已过期,待[{item.Code}]设备推送数据");
                        continue;
                    }

                    var bootFlagRecord = context.EquipmentPropertyRecords.Where(x => x.EquipmentCode == item.Code && x.EquipmentPropertyCode == bootFlagProperty.Code && !x.IsEnd).FirstOrDefault();
                }

                #region 其他
                //var obj = new KukaVM
                //{
                //    MyProperty = 5
                //};
                //var xz = new XmlSerializer(typeof(KukaVM));
                //string str;
                //using (var sw = new StringWriter())
                //{
                //    var xmlSerializerNamespaces = new XmlSerializerNamespaces();
                //    xmlSerializerNamespaces.Add(string.Empty, string.Empty);
                //    xz.Serialize(sw, obj, xmlSerializerNamespaces);
                //    str = sw.ToString();
                //}
                //using (var ms = new MemoryStream())
                //{
                //    StreamWriter writer = new StreamWriter(ms);
                //    writer.Write(str.Trim());
                //    writer.Flush();
                //    ms.Position = 0;
                //    var reader = new StreamReader(ms);
                //    try
                //    {
                //        var ddd = (KukaVM)xz.Deserialize(reader)!;
                //    }
                //    catch (Exception ex)
                //    {
                //        throw;
                //    }
                //}
                #endregion
                transaction.Commit();
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                log.LogError($"[{nameof(KukaDataAnalysis)}]数据解析出现异常:{ex.Message}");
            }
        }
    }
}