SpecializedWeldRobotAnalysis.cs 3.59 KB
using HHECS.BllModel;
using HHECS.DAQHandle.Dto;
using HHECS.DAQShared.Common.Enums;
using HHECS.DAQShared.Common.Utils;
using HHECS.DAQShared.Dto;
using HHECS.DAQShared.Models;

namespace HHECS.DAQHandle.EquipmentHandle.WeldRobot
{
    /// <summary>
    /// 专机设备焊接机器人数据解析
    /// </summary>
    internal class SpecializedWeldRobotAnalysis : AnalysisBase
    {
        public SpecializedWeldRobotAnalysis(AnalysisParameter parameter) : base(parameter) { }

        protected override BllResult<EquipmentStatus> GetEquipmentStatus(Equipment equipment, EquipmentDataRecord record)
        {
            try
            {
                var tagResult = JsonConvertToTagList(record.Tags);
                if (!tagResult.Success)
                {
                    return BllResultFactory.Error<EquipmentStatus>(tagResult.Msg);
                }

                return EquipmentStatusHelper.GetEquipmentStatus(EquipmentTypeConst.SpecializedWeldRobot, equipment.EquipmentProps, tagResult.Data);
            }
            catch (Exception ex)
            {
                return BllResultFactory.Error<EquipmentStatus>(ex.Message);
            }
        }

        protected override (string, Dictionary<string, string>) GenerateAlarmMessage(Equipment equipment, EquipmentProp totalAlarmProp, IEnumerable<EquipmentProp> monitorPropTemps, IEnumerable<TagItemDto> tagItems)
        {
            //主报警文本
            var mainAlarm = totalAlarmProp.MonitorFailure;
            if (string.IsNullOrWhiteSpace(mainAlarm))
            {
                mainAlarm = totalAlarmProp.Name;
            }

            using var equipmentAlarmTypeRepository = freeSql.GetRepository<EquipmentAlarmType>();
            using var equipmentAlarmTypeDetailRepository = freeSql.GetRepository<EquipmentAlarmTypeDetail>();

            var detailAlarms = new Dictionary<string, string>();
            //报警明细
            foreach (var monitorPropTemp in monitorPropTemps)
            {
                //总报警编码在这里需要跳过
                if (monitorPropTemp.Code == totalAlarmProp.Code)
                {
                    continue;
                }

                //校验不通过,则跳过
                if (!EquipmentAlarmCodeValidation(equipment, monitorPropTemp.Code).Success)
                {
                    continue;
                }

                var tagCodes = new List<string>
                 {
                     monitorPropTemp.Code,
                     monitorPropTemp.Address
                 };
                var tagItem = tagItems.Where(x => tagCodes.Contains(x.Tag, StringComparer.OrdinalIgnoreCase)).FirstOrDefault();
                //当前记录无此属性,则跳过
                if (tagItem == null)
                {
                    continue;
                }

                var equipmentAlarmType = equipmentAlarmTypeRepository.Where(x => x.Code == monitorPropTemp.EquipmentAlarmTypeCode).First();
                if (equipmentAlarmType == null)
                {
                    continue;
                }
                var equipmentAlarmTypeDetail = equipmentAlarmTypeDetailRepository.Where(x => x.EquipmentAlarmTypeId == equipmentAlarmType.Id).ToList();

                var alarm = equipmentAlarmTypeDetail.Where(x => x.Value == tagItem.Value).FirstOrDefault();
                if (alarm == null)
                {
                    continue;
                }

                //其他情况,为报警
                detailAlarms.TryAdd(monitorPropTemp.Code, alarm.AlarmMessage);
            }

            return (mainAlarm, detailAlarms);
        }
    }
}