WeldRobotAnalysis.cs 2.72 KB
using HHECS.BllModel;
using HHECS.DAQHandle.Common.Utils;
using HHECS.DAQHandle.Dto;
using HHECS.DAQHandle.Models;
using System.Text.Json;

namespace HHECS.DAQHandle.EquipmentHandle
{
    /// <summary>
    /// 焊接机器人数据解析
    /// </summary>
    internal class WeldRobotAnalysis : BaseAnalysis
    {
        public override BllResult Execute(EquipmentTypeExtend equipmentType, IEnumerable<EquipmentDataRecord> records)
        {
            try
            {
                foreach (var item in records.GroupBy(x => x.EquipmentCode))
                {
                    var equipmentRecords = item.ToList();
                    foreach (var record in equipmentRecords)
                    {
                        if (equipmentRecords.Count == equipmentRecords.IndexOf(record) + 1)
                        {
                            SetEquipmentPropValues(record);
                        }
                    }
                }
                //解析完成后清空记录
                Context.EquipmentDataRecord.RemoveRange(records);
                Context.SaveChanges();
                return BllResultFactory.Success();
            }
            catch (Exception ex)
            {
                return BllResultFactory.Error($"[{nameof(WeldRobotAnalysis)}]解析出现异常:{ex}");
            }
        }

        protected void SetEquipmentPropValues(EquipmentDataRecord record)
        {
            try
            {
                var equipmentId = Context.Equipment.Where(x => x.Code == record.EquipmentCode).First(x => x.Id);
                if (equipmentId == default) return;
                var equipmentProps = Context.EquipmentProp.Where(x => x.EquipmentId == equipmentId).ToList();

                var temps = new List<EquipmentPropExtend>();
                var jsonOption = new JsonSerializerOptions
                {
                    PropertyNameCaseInsensitive = true,
                };
                var tags = JsonSerializer.Deserialize<List<TagItemDto>>(record.Tags);
                foreach (var prop in equipmentProps)
                {
                    var tag = tags.Where(x => x.Tag == prop.Address).FirstOrDefault();
                    if (tag == null) continue;
                    Context.EquipmentProp.Attach(prop);
                    prop.Value = tag.Value;
                    prop.Updated = DateTime.Now;
                    temps.Add(prop);
                }
                if (temps.Count != 0)
                {
                    Context.UpdateRange(temps);
                    Context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                SystemLog.PrintError($"更新设备属性值失败.{ex.Message}");
            }
        }
    }
}