SingleSRMAnalysis.cs 8.18 KB
using HHECS.DAQHandle.Common.Enums;
using HHECS.DAQHandle.Models;

namespace HHECS.DAQHandle.EquipmentHandle
{
    internal class SingleSRMAnalysis : BaseAnalysis
    {
        public override void Execute(IEnumerable<EquipmentDataRecord> records)
        {
            try
            {
                Context.Equipment.Where(x => true).ToList();
                foreach (var item in records.GroupBy(x => x.EquipmentCode))
                {
                    var equipmentSN = item.Key;
                    UpdateTagValue(item.OrderByDescending(x => x.Timestamp).Last());
                    var statusCodes = new List<SingleSRMProp>();
                    UpdateEquipmentStatus(equipmentSN, statusCodes, item.ToList());

                    ////获取报警设备并更新其状态
                    //var alarms = item.EquipmentProps
                    //    .Where(t => t.EquipmentTypePropTemplate.PropType == EquipmentPropType.PLCMonitorAddress.ToString()
                    //    && !string.IsNullOrWhiteSpace(t.Value) && t.Value != t.EquipmentTypePropTemplate.MonitorCompareValue).ToList();

                    var alarmCodes = new List<SingleSRMProp>();
                    UpdateEquipmentAlarm(equipmentSN, alarmCodes, item.ToList());
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"[{nameof(SingleSRMAnalysis)}]解析异常:{ex.Message}");
            }
        }



        protected override void UpdateTagValue(EquipmentDataRecord record)
        {
            base.UpdateTagValue(record);




        }

        protected override void UpdateEquipmentAlarm<T>(string equipmentSN, IEnumerable<T> alarmCodes, IEnumerable<EquipmentDataRecord> records)
        {
            //base.UpdateEquipmentAlarm(equipmentSN, alarmCodes, records);
            //EquipmentAlarmRecordRepository equipmentAlarmRepository = new EquipmentAlarmRecordRepository();
            //try
            //{
            //    foreach (var item in equipments)
            //    {
            //        var alarms = item.EquipmentProps
            //            .Where(t => t.EquipmentTypePropTemplate.PropType == EquipmentPropType.PLCMonitorAddress.ToString()
            //            && !string.IsNullOrWhiteSpace(t.Value) && t.Value != t.EquipmentTypePropTemplate.MonitorCompareValue).ToList();
            //        if (alarms.Count() > 0)
            //        {
            //            var alarmRecords = equipmentAlarmRepository.Where(t => t.EquipmentCode == item.Code && t.IsEnd == false).ToList();
            //            foreach (var alarm in alarms)
            //            {
            //                var record = alarmRecords.Find(t => t.EquipmentPropCode == alarm.EquipmentTypePropTemplateCode);
            //                if (record == null)
            //                {
            //                    //说明记录中没有,或者超过5秒,则直接新增这个报警;
            //                    EquipmentAlarmRecord equipmentAlarm = new EquipmentAlarmRecord
            //                    {
            //                        EquipmentCode = item.Code,
            //                        EquipmentName = item.Name,
            //                        EquipmentPropCode = alarm.EquipmentTypePropTemplateCode,
            //                        EquipmentPropName = alarm.EquipmentTypePropTemplate.Name,
            //                        Alarm = alarm.EquipmentTypePropTemplate.MonitorFailure,
            //                        Created = DateTime.Now,
            //                        CreatedBy = Accounts.WCS.ToString(),
            //                        Updated = DateTime.Now,//确保不为null
            //                        UpdatedBy = Accounts.WCS.ToString()
            //                    };
            //                    equipmentAlarmRepository.Insert(equipmentAlarm);
            //                }
            //                else
            //                {
            //                    //更新这个报警
            //                    record.Updated = DateTime.Now;
            //                    equipmentAlarmRepository.Update(record);
            //                }
            //            }
            //        }
            //    }
            //    return BllResultFactory.Success();
            //}
            //catch (Exception ex)
            //{
            //    return BllResultFactory.Error(ex.Message);
            //}

        }

        protected override void UpdateEquipmentStatus<T>(string equipmentSN, IEnumerable<T> statusCodes, IEnumerable<EquipmentDataRecord> records)
        {
            base.UpdateEquipmentStatus(equipmentSN, statusCodes, records);
            //EquipmentStatusRecordRepository equipmentStatusRecordRepository = new EquipmentStatusRecordRepository();
            //var temp = equipments.GroupBy(t => t.EquipmentType.Code);
            //foreach (var item in temp)
            //{
            //    //堆垛机状态记录
            //    if (item.Key == EquipmentTypeConst.DoubleForkSRM.ToString() || item.Key == EquipmentTypeConst.SingleForkSRM.ToString() || item.Key == EquipmentTypeConst.SingleForkSSRM.ToString())
            //    {
            //        foreach (var srm in item)
            //        {
            //            //与此设备相关的所有状态记录
            //            var records = equipmentStatusRecordRepository.Where(t => t.EquipmentCode == srm.Code && t.IsEnd == false).ToList();
            //            //故障
            //            if (srm[SRMProps.TotalError.ToString()].Value == "True")
            //            {
            //                RecordEquipmentStatus(srm, records, EquipmentStatusRecordStatus.Error);
            //            }
            //            else
            //            {
            //                //空闲等
            //                if (srm[SRMProps.OperationModel.ToString()].Value == SRMOperationModel.Maintain.GetIndexString())
            //                {
            //                    //维修
            //                    RecordEquipmentStatus(srm, records, EquipmentStatusRecordStatus.Maintain);
            //                }
            //                else if (srm[SRMProps.OperationModel.ToString()].Value == SRMOperationModel.Manual.GetIndexString() || srm[SRMProps.OperationModel.ToString()].Value == SRMOperationModel.StandAlone.GetIndexString() || srm[SRMProps.OperationModel.ToString()].Value == SRMOperationModel.Airborne.GetIndexString())
            //                {
            //                    //手动
            //                    RecordEquipmentStatus(srm, records, EquipmentStatusRecordStatus.Manual);
            //                }
            //                else if (srm[SRMProps.OperationModel.ToString()].Value == SRMOperationModel.Online.GetIndexString() && srm[SRMProps.Fork1TaskExcuteStatus.ToString()].Value == SRMTaskExcuteStatus.TaskExecuting.GetIndexString())
            //                {
            //                    //运行中
            //                    RecordEquipmentStatus(srm, records, EquipmentStatusRecordStatus.Running);
            //                }
            //                else if (srm[SRMProps.OperationModel.ToString()].Value == SRMOperationModel.Online.GetIndexString() && srm[SRMProps.Fork1TaskExcuteStatus.ToString()].Value == SRMTaskExcuteStatus.Standby.GetIndexString())
            //                {
            //                    RecordEquipmentStatus(srm, records, EquipmentStatusRecordStatus.Free);
            //                }
            //                else if (srm[SRMProps.OperationModel.ToString()].Value == SRMOperationModel.Online.GetIndexString() && (srm[SRMProps.Fork1TaskExcuteStatus.ToString()].Value == SRMTaskExcuteStatus.TaskInterruptError.GetIndexString() || srm[SRMProps.Fork1TaskExcuteStatus.ToString()].Value == SRMTaskExcuteStatus.TaskSendError.GetIndexString()))
            //                {
            //                    RecordEquipmentStatus(srm, records, EquipmentStatusRecordStatus.TaskExcuteError);
            //                }
            //            }
            //        }
            //    }
            //}
            //return BllResultFactory.Success();



        }
    }
}